@rayu-dev/rayu-cli 1.3.435 → 1.3.437

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 +327 -284
  2. package/package.json +1 -1
package/dist/rayu.js CHANGED
@@ -148347,7 +148347,7 @@ var init_auth = __esm(() => {
148347
148347
 
148348
148348
  // src/utils/userAgent.ts
148349
148349
  function getRayuUserAgent() {
148350
- return `rayu/${"1.3.435"}`;
148350
+ return `rayu/${"1.3.436"}`;
148351
148351
  }
148352
148352
  var getClaudeCodeUserAgent;
148353
148353
  var init_userAgent = __esm(() => {
@@ -148373,7 +148373,7 @@ function getUserAgent() {
148373
148373
  const clientApp = process.env.RAYU_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.RAYU_AGENT_SDK_CLIENT_APP}` : "";
148374
148374
  const workload = getWorkload();
148375
148375
  const workloadSuffix = workload ? `, workload/${workload}` : "";
148376
- return `rayu/${"1.3.435"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148376
+ return `rayu/${"1.3.436"} (${"external"}, ${process.env.RAYU_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
148377
148377
  }
148378
148378
  function getMCPUserAgent() {
148379
148379
  const parts = [];
@@ -148387,7 +148387,7 @@ function getMCPUserAgent() {
148387
148387
  parts.push(`client-app/${process.env.RAYU_AGENT_SDK_CLIENT_APP}`);
148388
148388
  }
148389
148389
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
148390
- return `rayu/${"1.3.435"}${suffix}`;
148390
+ return `rayu/${"1.3.436"}${suffix}`;
148391
148391
  }
148392
148392
  function getWebFetchUserAgent() {
148393
148393
  return `Rayu-User (${getRayuUserAgent()})`;
@@ -148510,7 +148510,7 @@ var init_user = __esm(() => {
148510
148510
  deviceId,
148511
148511
  sessionId: getSessionId(),
148512
148512
  email: getEmail(),
148513
- appVersion: "1.3.435",
148513
+ appVersion: "1.3.436",
148514
148514
  platform: getHostPlatformForAnalytics(),
148515
148515
  organizationUuid,
148516
148516
  accountUuid,
@@ -181338,7 +181338,7 @@ function buildKiroPayload(params) {
181338
181338
  }
181339
181339
  if (images.length > 0)
181340
181340
  userMsg.images = images;
181341
- if (thinking && (userMsg.content !== "" || toolResults.length === 0)) {
181341
+ if (thinking) {
181342
181342
  const prefix = `<thinking_mode>enabled</thinking_mode>
181343
181343
  <max_thinking_length>${thinkingBudget}</max_thinking_length>`;
181344
181344
  userMsg.content = userMsg.content !== "" ? `${prefix}
@@ -184022,7 +184022,7 @@ var init_metadata = __esm(() => {
184022
184022
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
184023
184023
  WHITESPACE_REGEX = /\s+/;
184024
184024
  getVersionBase = memoize_default(() => {
184025
- const match = "1.3.435".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
184025
+ const match = "1.3.436".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
184026
184026
  return match ? match[0] : undefined;
184027
184027
  });
184028
184028
  buildEnvContext = memoize_default(async () => {
@@ -184061,7 +184061,7 @@ var init_metadata = __esm(() => {
184061
184061
  },
184062
184062
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
184063
184063
  isRayuAction: isEnvTruthy(process.env.RAYU_ACTION),
184064
- version: "1.3.435",
184064
+ version: "1.3.436",
184065
184065
  versionBase: getVersionBase(),
184066
184066
  buildTime: "",
184067
184067
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
@@ -184675,7 +184675,7 @@ function initialize1PEventLogging() {
184675
184675
  const platform2 = getPlatform();
184676
184676
  const attributes = {
184677
184677
  [import_semantic_conventions.ATTR_SERVICE_NAME]: "rayu",
184678
- [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.3.435"
184678
+ [import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.3.436"
184679
184679
  };
184680
184680
  if (platform2 === "wsl") {
184681
184681
  const wslVersion = getWslVersion();
@@ -184702,7 +184702,7 @@ function initialize1PEventLogging() {
184702
184702
  })
184703
184703
  ]
184704
184704
  });
184705
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("io.rayu.events", "1.3.435");
184705
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("io.rayu.events", "1.3.436");
184706
184706
  }
184707
184707
  async function reinitialize1PEventLoggingIfConfigChanged() {
184708
184708
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -220618,7 +220618,7 @@ function getAttributionHeader(fingerprint) {
220618
220618
  if (!isAttributionHeaderEnabled()) {
220619
220619
  return "";
220620
220620
  }
220621
- const version2 = `${"1.3.435"}.${fingerprint}`;
220621
+ const version2 = `${"1.3.436"}.${fingerprint}`;
220622
220622
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
220623
220623
  const cch = "";
220624
220624
  const workload = getWorkload();
@@ -271522,6 +271522,7 @@ var init_generalPurposeAgent = __esm(() => {
271522
271522
  tools: ["*"],
271523
271523
  source: "built-in",
271524
271524
  baseDir: "built-in",
271525
+ model: process.env.RAYU_GENERAL_AGENT_MODEL || "inherit",
271525
271526
  getSystemPrompt: getGeneralPurposeSystemPrompt
271526
271527
  };
271527
271528
  });
@@ -271742,9 +271743,9 @@ var init_linter = __esm(() => {
271742
271743
  };
271743
271744
  });
271744
271745
 
271745
- // src/tools/AgentTool/built-in/subagents/pa.ts
271746
- function getPaSystemPrompt() {
271747
- return `You are the PA subagent — a senior software architect and deep-research planner for RAYU. You turn a goal (a new project or a change to an existing one) into a thorough, well-grounded plan.
271746
+ // src/tools/AgentTool/built-in/subagents/planner.ts
271747
+ function getPlannerSystemPrompt() {
271748
+ return `You are the planner subagent — a senior software architect and deep-research planner for RAYU. You turn a goal (a new project or a change to an existing one) into a thorough, well-grounded plan.
271748
271749
 
271749
271750
  ${EPHEMERAL_FRAMING}
271750
271751
 
@@ -271766,16 +271767,16 @@ ${SKILL_SEEKING}
271766
271767
 
271767
271768
  Keep it tight and high-signal — the caller will act on this plan.`;
271768
271769
  }
271769
- var PA_SUBAGENT;
271770
- var init_pa = __esm(() => {
271771
- PA_SUBAGENT = {
271772
- agentType: "PA",
271770
+ var PLANNER_SUBAGENT;
271771
+ var init_planner = __esm(() => {
271772
+ PLANNER_SUBAGENT = {
271773
+ agentType: "planner",
271773
271774
  whenToUse: "Plan & research subagent. Use when a task needs real upfront planning or (deep) research before implementation — designing a new project, a non-trivial feature, or a change to an existing codebase. Explores in parallel and returns a chosen approach, a step-by-step implementation plan, critical files, and risks. It plans only; it does not write or run code.",
271774
271775
  disallowedTools: [FILE_EDIT_TOOL_NAME, BASH_TOOL_NAME],
271775
271776
  source: "built-in",
271776
271777
  baseDir: "built-in",
271777
271778
  color: "purple",
271778
- getSystemPrompt: getPaSystemPrompt
271779
+ getSystemPrompt: getPlannerSystemPrompt
271779
271780
  };
271780
271781
  });
271781
271782
 
@@ -271826,10 +271827,10 @@ var init_subagents = __esm(() => {
271826
271827
  init_fix();
271827
271828
  init_global_setup();
271828
271829
  init_linter();
271829
- init_pa();
271830
+ init_planner();
271830
271831
  init_review();
271831
271832
  SUBAGENTS = [
271832
- PA_SUBAGENT,
271833
+ PLANNER_SUBAGENT,
271833
271834
  DESIGN_SUBAGENT,
271834
271835
  BACKEND_DESIGN_SUBAGENT,
271835
271836
  GLOBAL_SETUP_SUBAGENT,
@@ -272072,8 +272073,8 @@ var init_stackDetector = __esm(() => {
272072
272073
  });
272073
272074
 
272074
272075
  // src/tools/AgentTool/swarmContext.ts
272075
- import { existsSync as existsSync20, readFileSync as readFileSync22 } from "fs";
272076
- import { join as join56 } from "path";
272076
+ import { existsSync as existsSync20, mkdirSync as mkdirSync9, readFileSync as readFileSync22, writeFileSync as writeFileSync9 } from "fs";
272077
+ import { dirname as dirname28, join as join56 } from "path";
272077
272078
  function truncateToTokens(text2, maxTokens) {
272078
272079
  const maxChars = Math.max(0, maxTokens) * CHARS_PER_TOKEN;
272079
272080
  if (text2.length <= maxChars)
@@ -272127,6 +272128,24 @@ function readDomainSection(domain2) {
272127
272128
  return;
272128
272129
  }
272129
272130
  }
272131
+ function writeDomainSection(domain2, content) {
272132
+ const p = getDomainPath(domain2);
272133
+ try {
272134
+ mkdirSync9(dirname28(p), { recursive: true });
272135
+ writeFileSync9(p, content.endsWith(`
272136
+ `) ? content : content + `
272137
+ `, "utf8");
272138
+ } catch {}
272139
+ }
272140
+ function persistDomainSectionIfEmpty(agentType, content) {
272141
+ if (readDomainSection(agentType) !== undefined)
272142
+ return false;
272143
+ const trimmed = (content ?? "").trim();
272144
+ if (trimmed.length === 0)
272145
+ return false;
272146
+ writeDomainSection(agentType, truncateToTokens(trimmed, PER_SECTION_TOKEN_CAP));
272147
+ return true;
272148
+ }
272130
272149
  function formatShared(shared3) {
272131
272150
  const lines2 = ["## Shared Project Brief"];
272132
272151
  if (shared3.goal)
@@ -272311,7 +272330,7 @@ function buildCollaboratorPrompt(s2) {
272311
272330
  "",
272312
272331
  "## Context I/O (shared swarm context)",
272313
272332
  "- A SWARM CONTEXT block above (if present) holds the shared brief and the sections of collaborators you depend on. Trust it and build on it — do NOT re-derive what is already decided.",
272314
- "- When you finish, persist YOUR section to " + getDomainPath(s2.agentType) + " (overwrite; concise + contract-focused) so other collaborators and your own resumed turns can read it. Use that EXACT path — the swarm lives under `.rayu/swarm/`, never `.claude/`.",
272333
+ "- REQUIRED FINAL STEP: before you report done, persist YOUR section — use the Write tool to write " + getDomainPath(s2.agentType) + " (overwrite; concise + contract-focused) so other collaborators and your own resumed turns can read it. Use that EXACT path — the swarm lives under `.rayu/swarm/`, never `.claude/`.",
272315
272334
  "",
272316
272335
  "Be concise and structured — the orchestrator integrates your output. Report back as a normal message (do not create report files)."
272317
272336
  ];
@@ -272367,7 +272386,7 @@ var init_common3 = __esm(() => {
272367
272386
  init_stackAwareness();
272368
272387
  init_profiles();
272369
272388
  AUTHORITY = [
272370
- "The orchestrator owns the plan and the shared brief. Build within the chosen architecture and the PA/research plan — do not silently re-architect.",
272389
+ "The orchestrator owns the plan and the shared brief. Build within the chosen architecture and the planner/research plan — do not silently re-architect.",
272371
272390
  "Security decisions are authoritative — never weaken them for speed.",
272372
272391
  "Coordinate through explicit contracts (API shapes, schema, auth flow), not by second-guessing other collaborators."
272373
272392
  ];
@@ -280591,7 +280610,7 @@ var init_fileStateCache = __esm(() => {
280591
280610
  // src/utils/claudemd.ts
280592
280611
  import {
280593
280612
  basename as basename15,
280594
- dirname as dirname28,
280613
+ dirname as dirname29,
280595
280614
  extname as extname4,
280596
280615
  isAbsolute as isAbsolute14,
280597
280616
  join as join57,
@@ -280704,7 +280723,7 @@ function extractIncludePathsFromTokens(tokens, basePath) {
280704
280723
  if (path19) {
280705
280724
  const isValidPath = path19.startsWith("./") || path19.startsWith("~/") || path19.startsWith("/") && path19 !== "/" || !path19.startsWith("@") && !path19.match(/^[#%^&*()]+/) && path19.match(/^[a-zA-Z0-9._-]/);
280706
280725
  if (isValidPath) {
280707
- const resolvedPath = expandPath(path19, dirname28(basePath));
280726
+ const resolvedPath = expandPath(path19, dirname29(basePath));
280708
280727
  absolutePaths.add(resolvedPath);
280709
280728
  }
280710
280729
  }
@@ -280766,7 +280785,7 @@ function resolveExcludePatterns(patterns) {
280766
280785
  }
280767
280786
  const globStart = normalized.search(/[*?{[]/);
280768
280787
  const staticPrefix = globStart === -1 ? normalized : normalized.slice(0, globStart);
280769
- const dirToResolve = dirname28(staticPrefix);
280788
+ const dirToResolve = dirname29(staticPrefix);
280770
280789
  try {
280771
280790
  const resolvedDir = fs12.realpathSync(dirToResolve).replaceAll("\\", "/");
280772
280791
  if (resolvedDir !== dirToResolve) {
@@ -280960,7 +280979,7 @@ async function processConditionedMdRules(targetPath, rulesDir, type, processedPa
280960
280979
  if (!file2.globs || file2.globs.length === 0) {
280961
280980
  return false;
280962
280981
  }
280963
- const baseDir = type === "Project" ? dirname28(dirname28(rulesDir)) : getOriginalCwd();
280982
+ const baseDir = type === "Project" ? dirname29(dirname29(rulesDir)) : getOriginalCwd();
280964
280983
  const relativePath = isAbsolute14(targetPath) ? relative8(baseDir, targetPath) : targetPath;
280965
280984
  if (!relativePath || relativePath.startsWith("..") || isAbsolute14(relativePath)) {
280966
280985
  return false;
@@ -281191,7 +281210,7 @@ var init_claudemd = __esm(() => {
281191
281210
  let currentDir = originalCwd;
281192
281211
  while (currentDir !== parse8(currentDir).root) {
281193
281212
  dirs.push(currentDir);
281194
- currentDir = dirname28(currentDir);
281213
+ currentDir = dirname29(currentDir);
281195
281214
  }
281196
281215
  const gitRoot = findGitRoot(originalCwd);
281197
281216
  const canonicalRoot = findCanonicalGitRoot(originalCwd);
@@ -284687,7 +284706,7 @@ var init_validate3 = __esm(() => {
284687
284706
  // src/keybindings/loadUserBindings.ts
284688
284707
  import { readFileSync as readFileSync24 } from "fs";
284689
284708
  import { readFile as readFile12, stat as stat19 } from "fs/promises";
284690
- import { dirname as dirname29, join as join64 } from "path";
284709
+ import { dirname as dirname30, join as join64 } from "path";
284691
284710
  function isKeybindingCustomizationEnabled() {
284692
284711
  return getFeatureValue_CACHED_MAY_BE_STALE("tengu_keybinding_customization_release", false);
284693
284712
  }
@@ -284866,7 +284885,7 @@ async function initializeKeybindingWatcher() {
284866
284885
  return;
284867
284886
  }
284868
284887
  const userPath = getKeybindingsPath();
284869
- const watchDir = dirname29(userPath);
284888
+ const watchDir = dirname30(userPath);
284870
284889
  try {
284871
284890
  const stats2 = await stat19(watchDir);
284872
284891
  if (!stats2.isDirectory()) {
@@ -294299,7 +294318,7 @@ var builders = null;
294299
294318
  import { realpath as realpath9 } from "fs/promises";
294300
294319
  import {
294301
294320
  basename as basename17,
294302
- dirname as dirname30,
294321
+ dirname as dirname31,
294303
294322
  isAbsolute as isAbsolute18,
294304
294323
  join as join65,
294305
294324
  sep as pathSep,
@@ -294524,7 +294543,7 @@ function isSkillFile(filePath) {
294524
294543
  function transformSkillFiles(files2) {
294525
294544
  const filesByDir = new Map;
294526
294545
  for (const file2 of files2) {
294527
- const dir = dirname30(file2.filePath);
294546
+ const dir = dirname31(file2.filePath);
294528
294547
  const dirFiles = filesByDir.get(dir) ?? [];
294529
294548
  dirFiles.push(file2);
294530
294549
  filesByDir.set(dir, dirFiles);
@@ -294553,15 +294572,15 @@ function buildNamespace(targetDir, baseDir) {
294553
294572
  return relativePath ? relativePath.split(pathSep).join(":") : "";
294554
294573
  }
294555
294574
  function getSkillCommandName(filePath, baseDir) {
294556
- const skillDirectory = dirname30(filePath);
294557
- const parentOfSkillDir = dirname30(skillDirectory);
294575
+ const skillDirectory = dirname31(filePath);
294576
+ const parentOfSkillDir = dirname31(skillDirectory);
294558
294577
  const commandBaseName = basename17(skillDirectory);
294559
294578
  const namespace = buildNamespace(parentOfSkillDir, baseDir);
294560
294579
  return namespace ? `${namespace}:${commandBaseName}` : commandBaseName;
294561
294580
  }
294562
294581
  function getRegularCommandName(filePath, baseDir) {
294563
294582
  const fileName = basename17(filePath);
294564
- const fileDirectory = dirname30(filePath);
294583
+ const fileDirectory = dirname31(filePath);
294565
294584
  const commandBaseName = fileName.replace(/\.md$/, "");
294566
294585
  const namespace = buildNamespace(fileDirectory, baseDir);
294567
294586
  return namespace ? `${namespace}:${commandBaseName}` : commandBaseName;
@@ -294584,7 +294603,7 @@ async function loadSkillsFromCommandsDir(cwd2) {
294584
294603
  } of processedFiles) {
294585
294604
  try {
294586
294605
  const isSkillFormat = isSkillFile(filePath);
294587
- const skillDirectory = isSkillFormat ? dirname30(filePath) : undefined;
294606
+ const skillDirectory = isSkillFormat ? dirname31(filePath) : undefined;
294588
294607
  const cmdName = getCommandName2({
294589
294608
  baseDir,
294590
294609
  filePath,
@@ -294636,7 +294655,7 @@ async function discoverSkillDirsForPaths(filePaths, cwd2) {
294636
294655
  const resolvedCwd = cwd2.endsWith(pathSep) ? cwd2.slice(0, -1) : cwd2;
294637
294656
  const newDirs = [];
294638
294657
  for (const filePath of filePaths) {
294639
- let currentDir = dirname30(filePath);
294658
+ let currentDir = dirname31(filePath);
294640
294659
  while (currentDir.startsWith(resolvedCwd + pathSep)) {
294641
294660
  const skillDir = join65(currentDir, ".rayu", "skills");
294642
294661
  if (!dynamicSkillDirs.has(skillDir)) {
@@ -294650,7 +294669,7 @@ async function discoverSkillDirsForPaths(filePaths, cwd2) {
294650
294669
  newDirs.push(skillDir);
294651
294670
  } catch {}
294652
294671
  }
294653
- const parent = dirname30(currentDir);
294672
+ const parent = dirname31(currentDir);
294654
294673
  if (parent === currentDir)
294655
294674
  break;
294656
294675
  currentDir = parent;
@@ -305333,7 +305352,7 @@ function getTelemetryAttributes() {
305333
305352
  attributes["session.id"] = sessionId;
305334
305353
  }
305335
305354
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
305336
- attributes["app.version"] = "1.3.435";
305355
+ attributes["app.version"] = "1.3.436";
305337
305356
  }
305338
305357
  const oauthAccount = getOauthAccountInfo();
305339
305358
  if (oauthAccount) {
@@ -306838,7 +306857,7 @@ var init_postSamplingHooks = __esm(() => {
306838
306857
  // src/services/api/dumpPrompts.ts
306839
306858
  import { createHash as createHash8 } from "crypto";
306840
306859
  import { promises as fs12 } from "fs";
306841
- import { dirname as dirname31, join as join68 } from "path";
306860
+ import { dirname as dirname32, join as join68 } from "path";
306842
306861
  function hashString3(str3) {
306843
306862
  return createHash8("sha256").update(str3).digest("hex");
306844
306863
  }
@@ -306865,7 +306884,7 @@ function getDumpPromptsPath(agentIdOrSessionId) {
306865
306884
  function appendToFile(filePath, entries) {
306866
306885
  if (entries.length === 0)
306867
306886
  return;
306868
- fs12.mkdir(dirname31(filePath), { recursive: true }).then(() => fs12.appendFile(filePath, entries.join(`
306887
+ fs12.mkdir(dirname32(filePath), { recursive: true }).then(() => fs12.appendFile(filePath, entries.join(`
306869
306888
  `) + `
306870
306889
  `)).catch(() => {});
306871
306890
  }
@@ -402973,7 +402992,7 @@ var EXIT_WORKTREE_TOOL_NAME = "ExitWorktree";
402973
402992
  var init_cron = () => {};
402974
402993
 
402975
402994
  // src/utils/cronTasks.ts
402976
- import { dirname as dirname32, join as join69 } from "path";
402995
+ import { dirname as dirname33, join as join69 } from "path";
402977
402996
  var CRON_FILE_REL, DEFAULT_CRON_JITTER_CONFIG;
402978
402997
  var init_cronTasks = __esm(() => {
402979
402998
  init_state();
@@ -410560,7 +410579,7 @@ var init_mcpPluginIntegration = __esm(() => {
410560
410579
  // src/services/mcp/config.ts
410561
410580
  import { chmod as chmod2, open as open8, rename as rename3, stat as stat21, unlink as unlink6 } from "fs/promises";
410562
410581
  import { homedir as homedir21 } from "os";
410563
- import { dirname as dirname33, join as join71, parse as parse10 } from "path";
410582
+ import { dirname as dirname34, join as join71, parse as parse10 } from "path";
410564
410583
  function getEnterpriseMcpFilePath() {
410565
410584
  return join71(getManagedFilePath(), "managed-mcp.json");
410566
410585
  }
@@ -411033,7 +411052,7 @@ function getMcpConfigsByScope(scope) {
411033
411052
  let currentDir = getCwd();
411034
411053
  while (currentDir !== parse10(currentDir).root) {
411035
411054
  dirs.push(currentDir);
411036
- currentDir = dirname33(currentDir);
411055
+ currentDir = dirname34(currentDir);
411037
411056
  }
411038
411057
  for (const dir of dirs.reverse()) {
411039
411058
  const mcpJsonPath = join71(dir, ".mcp.json");
@@ -415688,7 +415707,7 @@ function getInstallationEnv() {
415688
415707
  return;
415689
415708
  }
415690
415709
  function getClaudeCodeVersion() {
415691
- return "1.3.435";
415710
+ return "1.3.436";
415692
415711
  }
415693
415712
  async function getInstalledVSCodeExtensionVersion(command) {
415694
415713
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -416317,14 +416336,14 @@ function recursivelySanitizeUnicode(value) {
416317
416336
  }
416318
416337
 
416319
416338
  // src/utils/authFileDescriptor.ts
416320
- import { mkdirSync as mkdirSync9, writeFileSync as writeFileSync9 } from "fs";
416339
+ import { mkdirSync as mkdirSync10, writeFileSync as writeFileSync10 } from "fs";
416321
416340
  function maybePersistTokenForSubprocesses(path19, token, tokenName) {
416322
416341
  if (!isEnvTruthy(process.env.CLAUDE_CODE_REMOTE)) {
416323
416342
  return;
416324
416343
  }
416325
416344
  try {
416326
- mkdirSync9(CCR_TOKEN_DIR, { recursive: true, mode: 448 });
416327
- writeFileSync9(path19, token, { encoding: "utf8", mode: 384 });
416345
+ mkdirSync10(CCR_TOKEN_DIR, { recursive: true, mode: 448 });
416346
+ writeFileSync10(path19, token, { encoding: "utf8", mode: 384 });
416328
416347
  logForDebugging(`Persisted ${tokenName} to ${path19} for subprocess access`);
416329
416348
  } catch (error54) {
416330
416349
  logForDebugging(`Failed to persist ${tokenName} to disk (non-fatal): ${errorMessage(error54)}`, { level: "error" });
@@ -420124,7 +420143,7 @@ var init_wrapper = __esm(() => {
420124
420143
 
420125
420144
  // src/services/mcp/client.ts
420126
420145
  import { mkdir as mkdir12, readFile as readFile16, unlink as unlink7, writeFile as writeFile11 } from "fs/promises";
420127
- import { dirname as dirname34, join as join77 } from "path";
420146
+ import { dirname as dirname35, join as join77 } from "path";
420128
420147
  function isMcpSessionExpiredError(error54) {
420129
420148
  const httpStatus = "code" in error54 ? error54.code : undefined;
420130
420149
  if (httpStatus !== 404) {
@@ -420157,7 +420176,7 @@ function setMcpAuthCacheEntry(serverId) {
420157
420176
  const cache5 = await getMcpAuthCache();
420158
420177
  cache5[serverId] = { timestamp: Date.now() };
420159
420178
  const cachePath = getMcpAuthCachePath();
420160
- await mkdir12(dirname34(cachePath), { recursive: true });
420179
+ await mkdir12(dirname35(cachePath), { recursive: true });
420161
420180
  await writeFile11(cachePath, jsonStringify(cache5));
420162
420181
  authCachePromise = null;
420163
420182
  }).catch(() => {});
@@ -420926,7 +420945,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
420926
420945
  const client4 = new Client({
420927
420946
  name: "claude-code",
420928
420947
  title: "RAYU",
420929
- version: "1.3.435",
420948
+ version: "1.3.436",
420930
420949
  description: "Anthropic's agentic coding tool",
420931
420950
  websiteUrl: PRODUCT_URL
420932
420951
  }, {
@@ -421243,7 +421262,7 @@ var init_client7 = __esm(() => {
421243
421262
  const client4 = new Client({
421244
421263
  name: "claude-code",
421245
421264
  title: "RAYU",
421246
- version: "1.3.435",
421265
+ version: "1.3.436",
421247
421266
  description: "Anthropic's agentic coding tool",
421248
421267
  websiteUrl: PRODUCT_URL
421249
421268
  }, {
@@ -427024,7 +427043,7 @@ import {
427024
427043
  stat as stat22,
427025
427044
  unlink as unlink8
427026
427045
  } from "fs/promises";
427027
- import { dirname as dirname35, isAbsolute as isAbsolute20, join as join79, relative as relative11 } from "path";
427046
+ import { dirname as dirname36, isAbsolute as isAbsolute20, join as join79, relative as relative11 } from "path";
427028
427047
  import { inspect as inspect3 } from "util";
427029
427048
  function fileHistoryEnabled() {
427030
427049
  if (getIsNonInteractiveSession()) {
@@ -427465,7 +427484,7 @@ async function createBackup(filePath, version2) {
427465
427484
  } catch (e2) {
427466
427485
  if (!isENOENT(e2))
427467
427486
  throw e2;
427468
- await mkdir13(dirname35(backupPath), { recursive: true });
427487
+ await mkdir13(dirname36(backupPath), { recursive: true });
427469
427488
  await copyFile4(filePath, backupPath);
427470
427489
  }
427471
427490
  await chmod3(backupPath, srcStats.mode);
@@ -427497,7 +427516,7 @@ async function restoreBackup(filePath, backupFileName) {
427497
427516
  } catch (e2) {
427498
427517
  if (!isENOENT(e2))
427499
427518
  throw e2;
427500
- await mkdir13(dirname35(filePath), { recursive: true });
427519
+ await mkdir13(dirname36(filePath), { recursive: true });
427501
427520
  await copyFile4(backupPath, filePath);
427502
427521
  }
427503
427522
  await chmod3(filePath, backupStats.mode);
@@ -427704,7 +427723,7 @@ var init_fileOperationAnalytics = __esm(() => {
427704
427723
 
427705
427724
  // src/utils/gitDiff.ts
427706
427725
  import { access as access3, readFile as readFile19 } from "fs/promises";
427707
- import { dirname as dirname36, join as join80, relative as relative12, sep as sep17 } from "path";
427726
+ import { dirname as dirname37, join as join80, relative as relative12, sep as sep17 } from "path";
427708
427727
  async function fetchGitDiff() {
427709
427728
  const isGit = await getIsGit();
427710
427729
  if (!isGit)
@@ -427888,7 +427907,7 @@ function parseShortstat(stdout) {
427888
427907
  };
427889
427908
  }
427890
427909
  async function fetchSingleFileGitDiff(absoluteFilePath) {
427891
- const gitRoot = findGitRoot(dirname36(absoluteFilePath));
427910
+ const gitRoot = findGitRoot(dirname37(absoluteFilePath));
427892
427911
  if (!gitRoot)
427893
427912
  return null;
427894
427913
  const gitPath = relative12(gitRoot, absoluteFilePath).split(sep17).join("/");
@@ -430666,7 +430685,7 @@ var init_UI6 = __esm(() => {
430666
430685
  });
430667
430686
 
430668
430687
  // src/tools/FileEditTool/FileEditTool.ts
430669
- import { dirname as dirname37, isAbsolute as isAbsolute21, sep as sep18 } from "path";
430688
+ import { dirname as dirname38, isAbsolute as isAbsolute21, sep as sep18 } from "path";
430670
430689
  function readFileForEdit(absoluteFilePath) {
430671
430690
  try {
430672
430691
  const meta3 = readFileSyncWithMetadata(absoluteFilePath);
@@ -430972,7 +430991,7 @@ String: ${old_string}`,
430972
430991
  activateConditionalSkillsForPaths([absoluteFilePath], cwd2);
430973
430992
  }
430974
430993
  await diagnosticTracker.beforeFileEdited(absoluteFilePath);
430975
- await fs13.mkdir(dirname37(absoluteFilePath));
430994
+ await fs13.mkdir(dirname38(absoluteFilePath));
430976
430995
  if (fileHistoryEnabled()) {
430977
430996
  await fileHistoryTrackEdit(updateFileHistoryState, absoluteFilePath, parentMessage.uuid);
430978
430997
  }
@@ -431557,7 +431576,7 @@ var init_UI7 = __esm(() => {
431557
431576
  });
431558
431577
 
431559
431578
  // src/tools/FileWriteTool/FileWriteTool.ts
431560
- import { dirname as dirname38, sep as sep19 } from "path";
431579
+ import { dirname as dirname39, sep as sep19 } from "path";
431561
431580
  var inputSchema9, outputSchema8, FileWriteTool;
431562
431581
  var init_FileWriteTool = __esm(() => {
431563
431582
  init_analytics();
@@ -431700,7 +431719,7 @@ var init_FileWriteTool = __esm(() => {
431700
431719
  async call({ file_path, content }, context, _2, parentMessage) {
431701
431720
  const { readFileState, updateFileHistoryState, dynamicSkillDirTriggers } = context;
431702
431721
  const fullFilePath = expandPath(file_path);
431703
- const dir = dirname38(fullFilePath);
431722
+ const dir = dirname39(fullFilePath);
431704
431723
  const cwd2 = getCwd();
431705
431724
  const newSkillDirs = await discoverSkillDirsForPaths([fullFilePath], cwd2);
431706
431725
  if (newSkillDirs.length > 0) {
@@ -431866,7 +431885,7 @@ var init_FileWriteTool = __esm(() => {
431866
431885
  });
431867
431886
 
431868
431887
  // src/utils/plugins/orphanedPluginFilter.ts
431869
- import { dirname as dirname39, isAbsolute as isAbsolute23, join as join81, normalize as normalize13, relative as relative16, sep as sep20 } from "path";
431888
+ import { dirname as dirname40, isAbsolute as isAbsolute23, join as join81, normalize as normalize13, relative as relative16, sep as sep20 } from "path";
431870
431889
  async function getGlobExclusionsForPluginCache(searchPath) {
431871
431890
  const cachePath = normalize13(join81(getPluginsDirectory(), "cache"));
431872
431891
  if (searchPath && !pathsOverlap(searchPath, cachePath)) {
@@ -431886,7 +431905,7 @@ async function getGlobExclusionsForPluginCache(searchPath) {
431886
431905
  ORPHANED_AT_FILENAME
431887
431906
  ], cachePath, new AbortController().signal);
431888
431907
  cachedExclusions = markers.map((markerPath) => {
431889
- const versionDir = dirname39(markerPath);
431908
+ const versionDir = dirname40(markerPath);
431890
431909
  const rel = isAbsolute23(versionDir) ? relative16(cachePath, versionDir) : versionDir;
431891
431910
  const posixRelative = rel.replace(/\\/g, "/");
431892
431911
  return `!**/${posixRelative}/**`;
@@ -431916,12 +431935,12 @@ var init_orphanedPluginFilter = __esm(() => {
431916
431935
  });
431917
431936
 
431918
431937
  // src/utils/glob.ts
431919
- import { basename as basename21, dirname as dirname40, isAbsolute as isAbsolute24, join as join82, sep as sep21 } from "path";
431938
+ import { basename as basename21, dirname as dirname41, isAbsolute as isAbsolute24, join as join82, sep as sep21 } from "path";
431920
431939
  function extractGlobBaseDirectory(pattern) {
431921
431940
  const globChars = /[*?[{]/;
431922
431941
  const match = pattern.match(globChars);
431923
431942
  if (!match || match.index === undefined) {
431924
- const dir = dirname40(pattern);
431943
+ const dir = dirname41(pattern);
431925
431944
  const file2 = basename21(pattern);
431926
431945
  return { baseDir: dir, relativePattern: file2 };
431927
431946
  }
@@ -436048,7 +436067,7 @@ function computeFingerprint(messageText, version2) {
436048
436067
  }
436049
436068
  function computeFingerprintFromMessages(messages) {
436050
436069
  const firstMessageText = extractFirstMessageText(messages);
436051
- return computeFingerprint(firstMessageText, "1.3.435");
436070
+ return computeFingerprint(firstMessageText, "1.3.436");
436052
436071
  }
436053
436072
  var FINGERPRINT_SALT = "59cf53e54c78";
436054
436073
  var init_fingerprint = () => {};
@@ -436090,7 +436109,7 @@ async function sideQuery(opts) {
436090
436109
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
436091
436110
  }
436092
436111
  const messageText = extractFirstUserMessageText(messages);
436093
- const fingerprint = computeFingerprint(messageText, "1.3.435");
436112
+ const fingerprint = computeFingerprint(messageText, "1.3.436");
436094
436113
  const attributionHeader = getAttributionHeader(fingerprint);
436095
436114
  const systemBlocks = [
436096
436115
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -436354,6 +436373,13 @@ function finalizeAgentTool(agentMessages, agentId, metadata) {
436354
436373
  last_request_id: lastRequestId
436355
436374
  });
436356
436375
  }
436376
+ if (!NON_SWARM_PERSIST_AGENT_TYPES.has(agentType)) {
436377
+ const finalText = content.map((c4) => c4.type === "text" ? c4.text : "").join(`
436378
+ `).trim();
436379
+ if (finalText.length > 0) {
436380
+ persistDomainSectionIfEmpty(agentType, finalText);
436381
+ }
436382
+ }
436357
436383
  return {
436358
436384
  agentId,
436359
436385
  agentType,
@@ -436501,10 +436527,11 @@ async function runAsyncAgentLifecycle({
436501
436527
  clearDumpState(agentIdForCleanup);
436502
436528
  }
436503
436529
  }
436504
- var agentToolResultSchema;
436530
+ var agentToolResultSchema, NON_SWARM_PERSIST_AGENT_TYPES;
436505
436531
  var init_agentToolUtils = __esm(() => {
436506
436532
  init_v4();
436507
436533
  init_state();
436534
+ init_swarmContext();
436508
436535
  init_tools();
436509
436536
  init_agentSummary();
436510
436537
  init_analytics();
@@ -436546,6 +436573,7 @@ var init_agentToolUtils = __esm(() => {
436546
436573
  }).nullable()
436547
436574
  })
436548
436575
  }));
436576
+ NON_SWARM_PERSIST_AGENT_TYPES = new Set(["Explore", "general-purpose"]);
436549
436577
  });
436550
436578
 
436551
436579
  // src/components/AgentProgressLine.tsx
@@ -448950,13 +448978,16 @@ function getAgentLineKindLabel(subagentType) {
448950
448978
  if (kind === "subagent") {
448951
448979
  return "subagent";
448952
448980
  }
448981
+ if (subagentType && getBuiltInAgents().some((a2) => a2.agentType === subagentType)) {
448982
+ return "subagent";
448983
+ }
448953
448984
  return;
448954
448985
  }
448955
448986
  function getAgentLineModel(subagentType, toolModel) {
448956
448987
  let modelStr;
448957
448988
  if (toolModel) {
448958
448989
  modelStr = toolModel;
448959
- } else if (getAgentKind(subagentType) !== undefined) {
448990
+ } else if (subagentType) {
448960
448991
  const agent = getBuiltInAgents().find((a2) => a2.agentType === subagentType);
448961
448992
  if (agent) {
448962
448993
  try {
@@ -448991,22 +449022,16 @@ function renderToolUseTag(input) {
448991
449022
  }, undefined, false, undefined, this)
448992
449023
  }, "kind", false, undefined, this));
448993
449024
  }
448994
- if (input.model || getAgentKind(input.subagent_type) !== undefined) {
448995
- const modelName = getAgentLineModel(input.subagent_type, input.model);
448996
- if (modelName) {
448997
- const isSwarmAgent = getAgentKind(input.subagent_type) !== undefined;
448998
- const differsFromMain = input.model !== undefined && parseUserSpecifiedModel(input.model) !== getMainLoopModel();
448999
- if (isSwarmAgent || differsFromMain) {
449000
- tags.push(/* @__PURE__ */ jsx_dev_runtime108.jsxDEV(ThemedBox_default, {
449001
- flexWrap: "nowrap",
449002
- marginLeft: 1,
449003
- children: /* @__PURE__ */ jsx_dev_runtime108.jsxDEV(ThemedText, {
449004
- dimColor: true,
449005
- children: modelName
449006
- }, undefined, false, undefined, this)
449007
- }, "model", false, undefined, this));
449008
- }
449009
- }
449025
+ const modelName = getAgentLineModel(input.subagent_type, input.model);
449026
+ if (modelName) {
449027
+ tags.push(/* @__PURE__ */ jsx_dev_runtime108.jsxDEV(ThemedBox_default, {
449028
+ flexWrap: "nowrap",
449029
+ marginLeft: 1,
449030
+ children: /* @__PURE__ */ jsx_dev_runtime108.jsxDEV(ThemedText, {
449031
+ dimColor: true,
449032
+ children: modelName
449033
+ }, undefined, false, undefined, this)
449034
+ }, "model", false, undefined, this));
449010
449035
  }
449011
449036
  if (tags.length === 0) {
449012
449037
  return null;
@@ -460311,7 +460336,7 @@ __export(exports_teamHelpers, {
460311
460336
  cleanupSessionTeams: () => cleanupSessionTeams,
460312
460337
  addHiddenPaneId: () => addHiddenPaneId
460313
460338
  });
460314
- import { mkdirSync as mkdirSync10, readFileSync as readFileSync25, writeFileSync as writeFileSync10 } from "fs";
460339
+ import { mkdirSync as mkdirSync11, readFileSync as readFileSync25, writeFileSync as writeFileSync11 } from "fs";
460315
460340
  import { mkdir as mkdir17, readFile as readFile22, rm as rm6, writeFile as writeFile15 } from "fs/promises";
460316
460341
  import { join as join88 } from "path";
460317
460342
  function sanitizeName(name) {
@@ -460350,8 +460375,8 @@ async function readTeamFileAsync(teamName) {
460350
460375
  }
460351
460376
  function writeTeamFile(teamName, teamFile) {
460352
460377
  const teamDir = getTeamDir(teamName);
460353
- mkdirSync10(teamDir, { recursive: true });
460354
- writeFileSync10(getTeamFilePath(teamName), jsonStringify(teamFile, null, 2));
460378
+ mkdirSync11(teamDir, { recursive: true });
460379
+ writeFileSync11(getTeamFilePath(teamName), jsonStringify(teamFile, null, 2));
460355
460380
  }
460356
460381
  async function writeTeamFileAsync(teamName, teamFile) {
460357
460382
  const teamDir = getTeamDir(teamName);
@@ -461709,7 +461734,7 @@ function SpinnerWithVerbInner({
461709
461734
  const tipsEnabled = settings.spinnerTipsEnabled !== false;
461710
461735
  const showClearTip = tipsEnabled && elapsedSnapshot > 1800000;
461711
461736
  const showBtwTip = tipsEnabled && elapsedSnapshot > 30000 && !getGlobalConfig().btwUseCount;
461712
- const effectiveTip = contextTipsActive ? undefined : showClearTip && !nextTask ? "Use /clear to start fresh when switching topics and free up context" : showBtwTip && !nextTask ? "Use /btw to ask a quick side question without interrupting Claude's current work" : spinnerTip;
461737
+ const effectiveTip = contextTipsActive ? undefined : showClearTip && !nextTask ? "Use /clear to start fresh when switching topics and free up context" : showBtwTip && !nextTask ? "Use /btw to ask a quick side question without interrupting Rayu's current work" : spinnerTip;
461713
461738
  let budgetText = null;
461714
461739
  if (true) {
461715
461740
  const budget = getCurrentTurnTokenBudget();
@@ -490556,7 +490581,7 @@ var init_UI16 = __esm(() => {
490556
490581
 
490557
490582
  // src/tools/ImageGenTool/ImageGenTool.ts
490558
490583
  import { mkdir as mkdir21, readFile as readFile26, writeFile as writeFile19 } from "fs/promises";
490559
- import { dirname as dirname42, isAbsolute as isAbsolute28, relative as relative20 } from "path";
490584
+ import { dirname as dirname43, isAbsolute as isAbsolute28, relative as relative20 } from "path";
490560
490585
  function defaultOutputPath(ext = "png") {
490561
490586
  return `./generated-image-${Date.now()}.${ext}`;
490562
490587
  }
@@ -490735,7 +490760,7 @@ var init_ImageGenTool = __esm(() => {
490735
490760
  usedModelId = resolveModel(selectedModel, isEdit).id;
490736
490761
  }
490737
490762
  const { path: path22 } = resolveOutputPath(input.output_path ?? defaultOutputPath(extForMedia(mediaType)));
490738
- await mkdir21(dirname42(path22), { recursive: true });
490763
+ await mkdir21(dirname43(path22), { recursive: true });
490739
490764
  await writeFile19(path22, buffer);
490740
490765
  let inlineB64 = buffer.toString("base64");
490741
490766
  let inlineMedia = mediaType;
@@ -491358,7 +491383,7 @@ var init_UI17 = __esm(() => {
491358
491383
 
491359
491384
  // src/tools/VideoGenTool/VideoGenTool.ts
491360
491385
  import { mkdir as mkdir22, readFile as readFile28, writeFile as writeFile20 } from "fs/promises";
491361
- import { dirname as dirname43, isAbsolute as isAbsolute29, relative as relative21 } from "path";
491386
+ import { dirname as dirname44, isAbsolute as isAbsolute29, relative as relative21 } from "path";
491362
491387
  function defaultOutputPath2() {
491363
491388
  return `./generated-video-${Date.now()}.mp4`;
491364
491389
  }
@@ -491511,7 +491536,7 @@ var init_VideoGenTool = __esm(() => {
491511
491536
  buffer = r2.buffer;
491512
491537
  usedModelId = model.id;
491513
491538
  }
491514
- await mkdir22(dirname43(path22), { recursive: true });
491539
+ await mkdir22(dirname44(path22), { recursive: true });
491515
491540
  await writeFile20(path22, buffer);
491516
491541
  const preview = await extractPreviewFrame(path22);
491517
491542
  return {
@@ -506677,7 +506702,7 @@ var init_queryHelpers = __esm(() => {
506677
506702
  import { randomUUID as randomUUID24 } from "crypto";
506678
506703
  import { rm as rm9 } from "fs";
506679
506704
  import { appendFile as appendFile4, copyFile as copyFile5, mkdir as mkdir24 } from "fs/promises";
506680
- import { dirname as dirname44, isAbsolute as isAbsolute31, join as join98, relative as relative24 } from "path";
506705
+ import { dirname as dirname45, isAbsolute as isAbsolute31, join as join98, relative as relative24 } from "path";
506681
506706
  function safeRemoveOverlay(overlayPath) {
506682
506707
  rm9(overlayPath, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 }, () => {});
506683
506708
  }
@@ -506697,7 +506722,7 @@ async function copyOverlayToMain(overlayPath, writtenPaths, cwd2) {
506697
506722
  const src = join98(overlayPath, rel);
506698
506723
  const dest = join98(cwd2, rel);
506699
506724
  try {
506700
- await mkdir24(dirname44(dest), { recursive: true });
506725
+ await mkdir24(dirname45(dest), { recursive: true });
506701
506726
  await copyFile5(src, dest);
506702
506727
  } catch {
506703
506728
  allCopied = false;
@@ -506946,7 +506971,7 @@ async function startSpeculation(suggestionText, context, setAppState, isPipeline
506946
506971
  if (isWriteTool) {
506947
506972
  if (!writtenPathsRef.current.has(rel)) {
506948
506973
  const overlayFile = join98(overlayPath, rel);
506949
- await mkdir24(dirname44(overlayFile), { recursive: true });
506974
+ await mkdir24(dirname45(overlayFile), { recursive: true });
506950
506975
  try {
506951
506976
  await copyFile5(join98(cwd2, rel), overlayFile);
506952
506977
  } catch {}
@@ -510906,7 +510931,7 @@ Goal: Gain a comprehensive understanding of the user's request by reading throug
510906
510931
  ### Phase 2: Design
510907
510932
  Goal: Design an implementation approach.
510908
510933
 
510909
- Launch ${PA_SUBAGENT.agentType} agent(s) to design the implementation based on the user's intent and your exploration results from Phase 1.
510934
+ Launch ${PLANNER_SUBAGENT.agentType} agent(s) to design the implementation based on the user's intent and your exploration results from Phase 1.
510910
510935
 
510911
510936
  You can launch up to ${agentCount} agent(s) in parallel.
510912
510937
 
@@ -511409,8 +511434,8 @@ You have exited plan mode. You can now make edits, run tools, and take actions.$
511409
511434
  const content = `## Collaborator-swarm mode is ON
511410
511435
 
511411
511436
  You are the ORCHESTRATOR — coordinate, do not implement yourself. Run the 3-phase build flow:
511412
- 1. SCOPE & RESEARCH — clarify the request's detail and scope; ask the user for their preferred tech stack (offer recommendations with rationale). For open implementation choices (e.g. payment: Stripe / bank / ABA), dispatch the PA subagent to research the real options and present them for the user to choose.
511413
- 2. ALIGNED PLAN — have PA produce ONE coherent plan, explicitly aligned across backend AND frontend (shared API contract, data model, auth); get the user's confirmation.
511437
+ 1. SCOPE & RESEARCH — clarify the request's detail and scope; ask the user for their preferred tech stack (offer recommendations with rationale). For open implementation choices (e.g. payment: Stripe / bank / ABA), dispatch the planner subagent to research the real options and present them for the user to choose.
511438
+ 2. ALIGNED PLAN — have the planner produce ONE coherent plan, explicitly aligned across backend AND frontend (shared API contract, data model, auth); get the user's confirmation.
511414
511439
  3. DELEGATE BY SPECIALTY — decompose into backend / frontend / mobile subtasks and delegate to the matching collaborators (run independent work in parallel). Each collaborator may use only its allowed subagents.
511415
511440
 
511416
511441
  The user can return to normal mode with /normal.`;
@@ -512415,7 +512440,7 @@ var init_messages5 = __esm(() => {
512415
512440
  init_planModeV2();
512416
512441
  init_slowOperations();
512417
512442
  init_exploreAgent();
512418
- init_pa();
512443
+ init_planner();
512419
512444
  init_builtInAgents();
512420
512445
  init_constants2();
512421
512446
  init_prompt7();
@@ -512470,7 +512495,7 @@ var init_messages5 = __esm(() => {
512470
512495
  // src/services/vcr.ts
512471
512496
  import { createHash as createHash18, randomUUID as randomUUID26 } from "crypto";
512472
512497
  import { mkdir as mkdir25, readFile as readFile31, writeFile as writeFile23 } from "fs/promises";
512473
- import { dirname as dirname45, join as join99 } from "path";
512498
+ import { dirname as dirname46, join as join99 } from "path";
512474
512499
  function shouldUseVCR() {
512475
512500
  if (false) {}
512476
512501
  if (false) {}
@@ -512495,7 +512520,7 @@ async function withFixture(input, fixtureName, f3) {
512495
512520
  throw new Error(`Fixture missing: ${filename}. Re-run tests with VCR_RECORD=1, then commit the result.`);
512496
512521
  }
512497
512522
  const result = await f3();
512498
- await mkdir25(dirname45(filename), { recursive: true });
512523
+ await mkdir25(dirname46(filename), { recursive: true });
512499
512524
  await writeFile23(filename, jsonStringify(result, null, 2), {
512500
512525
  encoding: "utf8"
512501
512526
  });
@@ -512534,7 +512559,7 @@ ${jsonStringify(dehydratedInput, null, 2)}`);
512534
512559
  if (env4.isCI && !isEnvTruthy(process.env.VCR_RECORD)) {
512535
512560
  return results;
512536
512561
  }
512537
- await mkdir25(dirname45(filename), { recursive: true });
512562
+ await mkdir25(dirname46(filename), { recursive: true });
512538
512563
  await writeFile23(filename, jsonStringify({
512539
512564
  input: dehydratedInput,
512540
512565
  output: results.map((message, index) => mapMessage(message, dehydrateValue, index))
@@ -514598,7 +514623,7 @@ var init_findRelevantMemories = __esm(() => {
514598
514623
 
514599
514624
  // src/utils/attachments.ts
514600
514625
  import { readdir as readdir19, stat as stat31 } from "fs/promises";
514601
- import { dirname as dirname46, parse as parse13, relative as relative25, resolve as resolve39 } from "path";
514626
+ import { dirname as dirname47, parse as parse13, relative as relative25, resolve as resolve39 } from "path";
514602
514627
  import { randomUUID as randomUUID28 } from "crypto";
514603
514628
  async function getAttachments(input, toolUseContext, ideSelection, queuedCommands, messages, querySource, options) {
514604
514629
  if (isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_ATTACHMENTS) || isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) {
@@ -514985,21 +515010,21 @@ async function getSelectedLinesFromIDE(ideSelection, toolUseContext) {
514985
515010
  ];
514986
515011
  }
514987
515012
  function getDirectoriesToProcess(targetPath, originalCwd) {
514988
- const targetDir = dirname46(resolve39(targetPath));
515013
+ const targetDir = dirname47(resolve39(targetPath));
514989
515014
  const nestedDirs = [];
514990
515015
  let currentDir = targetDir;
514991
515016
  while (currentDir !== originalCwd && currentDir !== parse13(currentDir).root) {
514992
515017
  if (currentDir.startsWith(originalCwd)) {
514993
515018
  nestedDirs.push(currentDir);
514994
515019
  }
514995
- currentDir = dirname46(currentDir);
515020
+ currentDir = dirname47(currentDir);
514996
515021
  }
514997
515022
  nestedDirs.reverse();
514998
515023
  const cwdLevelDirs = [];
514999
515024
  currentDir = originalCwd;
515000
515025
  while (currentDir !== parse13(currentDir).root) {
515001
515026
  cwdLevelDirs.push(currentDir);
515002
- currentDir = dirname46(currentDir);
515027
+ currentDir = dirname47(currentDir);
515003
515028
  }
515004
515029
  cwdLevelDirs.reverse();
515005
515030
  return { nestedDirs, cwdLevelDirs };
@@ -516255,21 +516280,21 @@ var init_attachments2 = __esm(() => {
516255
516280
  });
516256
516281
 
516257
516282
  // src/utils/plugins/loadPluginCommands.ts
516258
- import { basename as basename32, dirname as dirname47, join as join102 } from "path";
516283
+ import { basename as basename32, dirname as dirname48, join as join102 } from "path";
516259
516284
  function isSkillFile2(filePath) {
516260
516285
  return /^skill\.md$/i.test(basename32(filePath));
516261
516286
  }
516262
516287
  function getCommandNameFromFile(filePath, baseDir, pluginName) {
516263
516288
  const isSkill = isSkillFile2(filePath);
516264
516289
  if (isSkill) {
516265
- const skillDirectory = dirname47(filePath);
516266
- const parentOfSkillDir = dirname47(skillDirectory);
516290
+ const skillDirectory = dirname48(filePath);
516291
+ const parentOfSkillDir = dirname48(skillDirectory);
516267
516292
  const commandBaseName = basename32(skillDirectory);
516268
516293
  const relativePath = parentOfSkillDir.startsWith(baseDir) ? parentOfSkillDir.slice(baseDir.length).replace(/^\//, "") : "";
516269
516294
  const namespace = relativePath ? relativePath.split("/").join(":") : "";
516270
516295
  return namespace ? `${pluginName}:${namespace}:${commandBaseName}` : `${pluginName}:${commandBaseName}`;
516271
516296
  } else {
516272
- const fileDirectory = dirname47(filePath);
516297
+ const fileDirectory = dirname48(filePath);
516273
516298
  const commandBaseName = basename32(filePath).replace(/\.md$/, "");
516274
516299
  const relativePath = fileDirectory.startsWith(baseDir) ? fileDirectory.slice(baseDir.length).replace(/^\//, "") : "";
516275
516300
  const namespace = relativePath ? relativePath.split("/").join(":") : "";
@@ -516296,7 +516321,7 @@ async function collectMarkdownFiles(dirPath, baseDir, loadedPaths) {
516296
516321
  function transformPluginSkillFiles(files2) {
516297
516322
  const filesByDir = new Map;
516298
516323
  for (const file2 of files2) {
516299
- const dir = dirname47(file2.filePath);
516324
+ const dir = dirname48(file2.filePath);
516300
516325
  const dirFiles = filesByDir.get(dir) ?? [];
516301
516326
  dirFiles.push(file2);
516302
516327
  filesByDir.set(dir, dirFiles);
@@ -516385,7 +516410,7 @@ function createPluginCommand(commandName, file2, sourceName, pluginManifest, plu
516385
516410
  return displayName || commandName;
516386
516411
  },
516387
516412
  async getPromptForCommand(args, context) {
516388
- let finalContent = config4.isSkillMode ? `Base directory for this skill: ${dirname47(file2.filePath)}
516413
+ let finalContent = config4.isSkillMode ? `Base directory for this skill: ${dirname48(file2.filePath)}
516389
516414
 
516390
516415
  ${content}` : content;
516391
516416
  finalContent = substituteArguments(finalContent, args, true, argumentNames);
@@ -516397,7 +516422,7 @@ ${content}` : content;
516397
516422
  finalContent = substituteUserConfigInContent(finalContent, loadPluginOptions(sourceName), pluginManifest.userConfig);
516398
516423
  }
516399
516424
  if (config4.isSkillMode) {
516400
- const rawSkillDir = dirname47(file2.filePath);
516425
+ const rawSkillDir = dirname48(file2.filePath);
516401
516426
  const skillDir = process.platform === "win32" ? rawSkillDir.replace(/\\/g, "/") : rawSkillDir;
516402
516427
  finalContent = finalContent.replace(/\$\{CLAUDE_SKILL_DIR\}/g, skillDir);
516403
516428
  }
@@ -516457,7 +516482,7 @@ async function loadSkillsFromDirectory(skillsPath, pluginName, sourceName, plugi
516457
516482
  const skillName = `${pluginName}:${basename32(skillsPath)}`;
516458
516483
  const file2 = {
516459
516484
  filePath: directSkillPath,
516460
- baseDir: dirname47(directSkillPath),
516485
+ baseDir: dirname48(directSkillPath),
516461
516486
  frontmatter,
516462
516487
  content: markdownContent
516463
516488
  };
@@ -516506,7 +516531,7 @@ async function loadSkillsFromDirectory(skillsPath, pluginName, sourceName, plugi
516506
516531
  const skillName = `${pluginName}:${entry.name}`;
516507
516532
  const file2 = {
516508
516533
  filePath: skillFilePath,
516509
- baseDir: dirname47(skillFilePath),
516534
+ baseDir: dirname48(skillFilePath),
516510
516535
  frontmatter,
516511
516536
  content: markdownContent
516512
516537
  };
@@ -516619,7 +516644,7 @@ var init_loadPluginCommands = __esm(() => {
516619
516644
  } : frontmatter;
516620
516645
  const file2 = {
516621
516646
  filePath: commandPath,
516622
- baseDir: dirname47(commandPath),
516647
+ baseDir: dirname48(commandPath),
516623
516648
  frontmatter: finalFrontmatter,
516624
516649
  content: markdownContent
516625
516650
  };
@@ -516744,7 +516769,7 @@ import {
516744
516769
  writeFile as writeFile24
516745
516770
  } from "fs/promises";
516746
516771
  import { tmpdir as tmpdir12 } from "os";
516747
- import { basename as basename33, dirname as dirname48, join as join103 } from "path";
516772
+ import { basename as basename33, dirname as dirname49, join as join103 } from "path";
516748
516773
  function isPluginZipCacheEnabled() {
516749
516774
  return isEnvTruthy(process.env.CLAUDE_CODE_PLUGIN_USE_ZIP_CACHE);
516750
516775
  }
@@ -516807,7 +516832,7 @@ async function cleanupSessionPluginCache() {
516807
516832
  }
516808
516833
  }
516809
516834
  async function atomicWriteToZipCache(targetPath, data) {
516810
- const dir = dirname48(targetPath);
516835
+ const dir = dirname49(targetPath);
516811
516836
  await getFsImplementation().mkdir(dir);
516812
516837
  const tmpName = `.${basename33(targetPath)}.tmp.${randomBytes11(4).toString("hex")}`;
516813
516838
  const tmpPath = join103(dir, tmpName);
@@ -516904,7 +516929,7 @@ async function extractZipToDirectory(zipPath, targetDir) {
516904
516929
  continue;
516905
516930
  }
516906
516931
  const fullPath = join103(targetDir, relPath);
516907
- await getFsImplementation().mkdir(dirname48(fullPath));
516932
+ await getFsImplementation().mkdir(dirname49(fullPath));
516908
516933
  await writeFile24(fullPath, data);
516909
516934
  const mode = modes[relPath];
516910
516935
  if (mode && mode & 73) {
@@ -517396,7 +517421,7 @@ var init_marketplaceHelpers = __esm(() => {
517396
517421
 
517397
517422
  // src/utils/plugins/officialMarketplaceGcs.ts
517398
517423
  import { chmod as chmod6, mkdir as mkdir27, readFile as readFile34, rename as rename6, rm as rm12, writeFile as writeFile26 } from "fs/promises";
517399
- import { dirname as dirname49, join as join105, resolve as resolve40, sep as sep28 } from "path";
517424
+ import { dirname as dirname50, join as join105, resolve as resolve40, sep as sep28 } from "path";
517400
517425
  async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCacheDir) {
517401
517426
  const cacheDir = resolve40(marketplacesCacheDir);
517402
517427
  const resolvedLoc = resolve40(installLocation);
@@ -517443,7 +517468,7 @@ async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCach
517443
517468
  if (!rel || rel.endsWith("/"))
517444
517469
  continue;
517445
517470
  const dest = join105(staging, rel);
517446
- await mkdir27(dirname49(dest), { recursive: true });
517471
+ await mkdir27(dirname50(dest), { recursive: true });
517447
517472
  await writeFile26(dest, data);
517448
517473
  const mode = modes[arcPath];
517449
517474
  if (mode && mode & 73) {
@@ -517517,7 +517542,7 @@ var init_officialMarketplaceGcs = __esm(() => {
517517
517542
 
517518
517543
  // src/utils/plugins/marketplaceManager.ts
517519
517544
  import { writeFile as writeFile27 } from "fs/promises";
517520
- import { basename as basename34, dirname as dirname50, isAbsolute as isAbsolute32, join as join106, resolve as resolve41, sep as sep29 } from "path";
517545
+ import { basename as basename34, dirname as dirname51, isAbsolute as isAbsolute32, join as join106, resolve as resolve41, sep as sep29 } from "path";
517521
517546
  function getKnownMarketplacesFile() {
517522
517547
  return join106(getPluginsDirectory(), "known_marketplaces.json");
517523
517548
  }
@@ -518197,7 +518222,7 @@ async function loadAndCacheMarketplace(source, onProgress) {
518197
518222
  case "file": {
518198
518223
  const absPath = resolve41(source.path);
518199
518224
  marketplacePath = absPath;
518200
- temporaryCachePath = dirname50(dirname50(absPath));
518225
+ temporaryCachePath = dirname51(dirname51(absPath));
518201
518226
  cleanupNeeded = false;
518202
518227
  break;
518203
518228
  }
@@ -518212,7 +518237,7 @@ async function loadAndCacheMarketplace(source, onProgress) {
518212
518237
  temporaryCachePath = join106(cacheDir, source.name);
518213
518238
  marketplacePath = join106(temporaryCachePath, ".claude-plugin", "marketplace.json");
518214
518239
  cleanupNeeded = false;
518215
- await fs14.mkdir(dirname50(marketplacePath));
518240
+ await fs14.mkdir(dirname51(marketplacePath));
518216
518241
  await writeFile27(marketplacePath, jsonStringify({
518217
518242
  name: source.name,
518218
518243
  owner: source.owner ?? { name: "settings" },
@@ -518707,7 +518732,7 @@ var init_marketplaceManager = __esm(() => {
518707
518732
  });
518708
518733
 
518709
518734
  // src/utils/plugins/installedPluginsManager.ts
518710
- import { dirname as dirname51, join as join107 } from "path";
518735
+ import { dirname as dirname52, join as join107 } from "path";
518711
518736
  function getInstalledPluginsFilePath() {
518712
518737
  return join107(getPluginsDirectory(), "installed_plugins.json");
518713
518738
  }
@@ -519273,7 +519298,7 @@ var init_pluginVersioning = __esm(() => {
519273
519298
  // src/utils/plugins/pluginInstallationHelpers.ts
519274
519299
  import { randomBytes as randomBytes12 } from "crypto";
519275
519300
  import { rename as rename7, rm as rm13 } from "fs/promises";
519276
- import { dirname as dirname52, join as join108, resolve as resolve42, sep as sep30 } from "path";
519301
+ import { dirname as dirname53, join as join108, resolve as resolve42, sep as sep30 } from "path";
519277
519302
  function getCurrentTimestamp() {
519278
519303
  return new Date().toISOString();
519279
519304
  }
@@ -519297,14 +519322,14 @@ async function cacheAndRegisterPlugin(pluginId, entry, scope = "user", projectPa
519297
519322
  const versionedPath = getVersionedCachePath(pluginId, version2);
519298
519323
  let finalPath = cacheResult.path;
519299
519324
  if (cacheResult.path !== versionedPath) {
519300
- await getFsImplementation().mkdir(dirname52(versionedPath));
519325
+ await getFsImplementation().mkdir(dirname53(versionedPath));
519301
519326
  await rm13(versionedPath, { recursive: true, force: true });
519302
519327
  const normalizedCachePath = cacheResult.path.endsWith(sep30) ? cacheResult.path : cacheResult.path + sep30;
519303
519328
  const isSubdirectory = versionedPath.startsWith(normalizedCachePath);
519304
519329
  if (isSubdirectory) {
519305
- const tempPath = join108(dirname52(cacheResult.path), `.claude-plugin-temp-${Date.now()}-${randomBytes12(4).toString("hex")}`);
519330
+ const tempPath = join108(dirname53(cacheResult.path), `.claude-plugin-temp-${Date.now()}-${randomBytes12(4).toString("hex")}`);
519306
519331
  await rename7(cacheResult.path, tempPath);
519307
- await getFsImplementation().mkdir(dirname52(versionedPath));
519332
+ await getFsImplementation().mkdir(dirname53(versionedPath));
519308
519333
  await rename7(tempPath, versionedPath);
519309
519334
  } else {
519310
519335
  await rename7(cacheResult.path, versionedPath);
@@ -519533,7 +519558,7 @@ import {
519533
519558
  stat as stat34,
519534
519559
  symlink as symlink2
519535
519560
  } from "fs/promises";
519536
- import { basename as basename35, dirname as dirname53, join as join109, relative as relative26, resolve as resolve43, sep as sep31 } from "path";
519561
+ import { basename as basename35, dirname as dirname54, join as join109, relative as relative26, resolve as resolve43, sep as sep31 } from "path";
519537
519562
  function getPluginCachePath() {
519538
519563
  return join109(getPluginsDirectory(), "cache");
519539
519564
  }
@@ -519563,7 +519588,7 @@ async function probeSeedCache(pluginId, version2) {
519563
519588
  }
519564
519589
  async function probeSeedCacheAnyVersion(pluginId) {
519565
519590
  for (const seedDir of getPluginSeedDirs()) {
519566
- const pluginDir = dirname53(getVersionedCachePathIn(seedDir, pluginId, "_"));
519591
+ const pluginDir = dirname54(getVersionedCachePathIn(seedDir, pluginId, "_"));
519567
519592
  try {
519568
519593
  const versions2 = await readdir22(pluginDir);
519569
519594
  if (versions2.length !== 1)
@@ -519605,7 +519630,7 @@ async function copyDir(src, dest) {
519605
519630
  if (resolvedTarget.startsWith(srcPrefix) || resolvedTarget === resolvedSrc) {
519606
519631
  const targetRelativeToSrc = relative26(resolvedSrc, resolvedTarget);
519607
519632
  const destTargetPath = join109(dest, targetRelativeToSrc);
519608
- const relativeLinkPath = relative26(dirname53(destPath), destTargetPath);
519633
+ const relativeLinkPath = relative26(dirname54(destPath), destTargetPath);
519609
519634
  await symlink2(relativeLinkPath, destPath);
519610
519635
  } else {
519611
519636
  await symlink2(resolvedTarget, destPath);
@@ -519636,7 +519661,7 @@ async function copyPluginToVersionedCache(sourcePath, pluginId, version2, entry,
519636
519661
  logForDebugging(`Using seed cache for ${pluginId}@${version2} at ${seedPath}`);
519637
519662
  return seedPath;
519638
519663
  }
519639
- await getFsImplementation().mkdir(dirname53(cachePath));
519664
+ await getFsImplementation().mkdir(dirname54(cachePath));
519640
519665
  if (entry && typeof entry.source === "string" && marketplaceDir) {
519641
519666
  const sourceDir = validatePathWithinBase(marketplaceDir, entry.source);
519642
519667
  logForDebugging(`Copying source directory ${entry.source} for plugin ${pluginId}`);
@@ -521434,6 +521459,7 @@ function getSimpleDoingTasksSection() {
521434
521459
  ];
521435
521460
  const items = [
521436
521461
  `The user will primarily request you to perform software engineering tasks. These may include solving bugs, adding new functionality, refactoring code, explaining code, and more. When given an unclear or generic instruction, consider it in the context of these software engineering tasks and the current working directory. For example, if the user asks you to change "methodName" to snake case, do not reply with just "method_name", instead find the method in the code and modify the code.`,
521462
+ `Before telling the user a task is done — especially after writing code, fixing a bug, or making any change — you MUST verify it actually works: run the project's build, tests, and linters (use the commands in RAYU.md/AGENTS.md when present), reproduce the original problem to confirm it is resolved, and fix any errors that surface. Do not report success or hand the task back to the user until verification passes, so they don't hit issues when they try it. If you genuinely cannot verify (no test exists or the code can't be run here), say so explicitly rather than implying it works.`,
521437
521463
  `You are highly capable and often allow users to complete ambitious tasks that would otherwise be too complex or take too long. You should defer to user judgement about whether a task is too large to attempt.`,
521438
521464
  ...[],
521439
521465
  `In general, do not propose changes to code you haven't read. If a user asks about or wants you to modify a file, read it first. Understand existing code before suggesting modifications.`,
@@ -521449,7 +521475,25 @@ function getSimpleDoingTasksSection() {
521449
521475
  `If the user asks for help or wants to give feedback inform them of the following:`,
521450
521476
  userHelpSubitems
521451
521477
  ];
521452
- return [`# Doing tasks`, ...prependBullets(items)].join(`
521478
+ const minimalismSection = [
521479
+ `## Keep it minimal — reuse before you build`,
521480
+ ``,
521481
+ `Prefer the simplest solution that actually works. Climb this ladder and stop at the first rung that holds:`,
521482
+ `1. Does this need to exist at all? A speculative or "just in case" need is YAGNI — skip it and say so in one line.`,
521483
+ `2. Does the standard library do it? Use it.`,
521484
+ `3. Does a native platform feature cover it? (CSS over JS, a DB constraint over app code, a built-in over a hand-rolled equivalent.)`,
521485
+ `4. Does an already-installed dependency solve it? Use it — never add a new dependency for what a few lines can do.`,
521486
+ `5. Can it be one line? Make it one line.`,
521487
+ `6. Only then write the minimum code that works.`,
521488
+ `Two rungs work → take the higher one and move on. The first simple solution that works is the right one.`,
521489
+ ``,
521490
+ `- Before creating a new component, widget, hook, utility, type, or adding a library: first search the codebase for an existing one and reuse or extend it — do not duplicate or reinvent. Match the patterns, conventions, and libraries already in use.`,
521491
+ `- No unrequested abstractions (no interface with one implementation, no factory for one product, no config for a value that never changes) and no boilerplate or scaffolding "for later". Prefer deletion over addition, boring over clever, and the shortest working diff.`,
521492
+ `- Don't cram everything into one file — split responsibilities into appropriately-scoped, well-named modules so the code stays readable and scales as it grows.`,
521493
+ `- For a complex request, ship the minimal version and flag what you skipped in the same response (e.g. "Did X; Y likely covers it — want the full version?") rather than over-building. When two options are the same size, pick the one that is correct on edge cases — minimal means less code, not a flimsier algorithm.`
521494
+ ].join(`
521495
+ `);
521496
+ return [`# Doing tasks`, ...prependBullets(items), ``, minimalismSection].join(`
521453
521497
  `);
521454
521498
  }
521455
521499
  function getActionsSection() {
@@ -526632,7 +526676,7 @@ __export(exports_terminalSetup, {
526632
526676
  import { randomBytes as randomBytes14 } from "crypto";
526633
526677
  import { copyFile as copyFile8, mkdir as mkdir28, readFile as readFile36, writeFile as writeFile28 } from "fs/promises";
526634
526678
  import { homedir as homedir27, platform as platform3 } from "os";
526635
- import { dirname as dirname54, join as join112 } from "path";
526679
+ import { dirname as dirname55, join as join112 } from "path";
526636
526680
  import { pathToFileURL as pathToFileURL7 } from "url";
526637
526681
  function isVSCodeRemoteSSH() {
526638
526682
  const askpassMain = process.env.VSCODE_GIT_ASKPASS_MAIN ?? "";
@@ -526954,7 +526998,7 @@ chars = "\\u001B\\r"`;
526954
526998
  return `${color("warning", theme)("Error backing up existing Alacritty config. Bailing out.")}${EOL6}${source_default.dim(`See ${formatPathLink(configPath2)}`)}${EOL6}${source_default.dim(`Backup path: ${formatPathLink(backupPath)}`)}${EOL6}`;
526955
526999
  }
526956
527000
  } else {
526957
- await mkdir28(dirname54(configPath2), {
527001
+ await mkdir28(dirname55(configPath2), {
526958
527002
  recursive: true
526959
527003
  });
526960
527004
  }
@@ -529419,7 +529463,7 @@ var init_TextInput = __esm(() => {
529419
529463
  });
529420
529464
 
529421
529465
  // src/utils/suggestions/directoryCompletion.ts
529422
- import { basename as basename39, dirname as dirname55, join as join115, sep as sep32 } from "path";
529466
+ import { basename as basename39, dirname as dirname56, join as join115, sep as sep32 } from "path";
529423
529467
  function parsePartialPath(partialPath, basePath) {
529424
529468
  if (!partialPath) {
529425
529469
  const directory2 = basePath || getCwd();
@@ -529429,7 +529473,7 @@ function parsePartialPath(partialPath, basePath) {
529429
529473
  if (partialPath.endsWith("/") || partialPath.endsWith(sep32)) {
529430
529474
  return { directory: resolved, prefix: "" };
529431
529475
  }
529432
- const directory = dirname55(resolved);
529476
+ const directory = dirname56(resolved);
529433
529477
  const prefix = basename39(partialPath);
529434
529478
  return { directory, prefix };
529435
529479
  }
@@ -531081,7 +531125,7 @@ function Feedback({
531081
531125
  platform: env4.platform,
531082
531126
  gitRepo: envInfo.isGit,
531083
531127
  terminal: env4.terminal,
531084
- version: "1.3.435",
531128
+ version: "1.3.436",
531085
531129
  transcript: normalizeMessagesForAPI(messages),
531086
531130
  errors: sanitizedErrors,
531087
531131
  lastApiRequest: getLastAPIRequest(),
@@ -531273,7 +531317,7 @@ function Feedback({
531273
531317
  ", ",
531274
531318
  env4.terminal,
531275
531319
  ", v",
531276
- "1.3.435"
531320
+ "1.3.436"
531277
531321
  ]
531278
531322
  }, undefined, true, undefined, this)
531279
531323
  ]
@@ -531379,7 +531423,7 @@ ${sanitizedDescription}
531379
531423
  ` + `**Environment Info**
531380
531424
  ` + `- Platform: ${env4.platform}
531381
531425
  ` + `- Terminal: ${env4.terminal}
531382
- ` + `- Version: ${"1.3.435"}
531426
+ ` + `- Version: ${"1.3.436"}
531383
531427
  ` + `- Feedback ID: ${feedbackId}
531384
531428
  ` + `
531385
531429
  **Errors**
@@ -534219,9 +534263,9 @@ async function assertMinVersion() {
534219
534263
  if (false) {}
534220
534264
  try {
534221
534265
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
534222
- if (versionConfig.minVersion && lt("1.3.435", versionConfig.minVersion)) {
534266
+ if (versionConfig.minVersion && lt("1.3.436", versionConfig.minVersion)) {
534223
534267
  console.error(`
534224
- It looks like your version of RAYU (${"1.3.435"}) needs an update.
534268
+ It looks like your version of RAYU (${"1.3.436"}) needs an update.
534225
534269
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
534226
534270
 
534227
534271
  To update, please run:
@@ -534447,7 +534491,7 @@ async function installGlobalPackage(specificVersion) {
534447
534491
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
534448
534492
  logEvent("tengu_auto_updater_lock_contention", {
534449
534493
  pid: process.pid,
534450
- currentVersion: "1.3.435"
534494
+ currentVersion: "1.3.436"
534451
534495
  });
534452
534496
  return "in_progress";
534453
534497
  }
@@ -534456,7 +534500,7 @@ async function installGlobalPackage(specificVersion) {
534456
534500
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
534457
534501
  logError2(new Error("Windows NPM detected in WSL environment"));
534458
534502
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
534459
- currentVersion: "1.3.435"
534503
+ currentVersion: "1.3.436"
534460
534504
  });
534461
534505
  console.error(`
534462
534506
  Error: Windows NPM detected in WSL
@@ -534992,7 +535036,7 @@ function detectLinuxGlobPatternWarnings() {
534992
535036
  }
534993
535037
  async function getDoctorDiagnostic() {
534994
535038
  const installationType = await getCurrentInstallationType();
534995
- const version2 = typeof MACRO !== "undefined" ? "1.3.435" : "unknown";
535039
+ const version2 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
534996
535040
  const installationPath = await getInstallationPath();
534997
535041
  const invokedBinary = getInvokedBinary();
534998
535042
  const multipleInstallations = await detectMultipleInstallations();
@@ -535524,7 +535568,7 @@ import {
535524
535568
  writeFile as writeFile35
535525
535569
  } from "fs/promises";
535526
535570
  import { homedir as homedir30 } from "os";
535527
- import { basename as basename41, delimiter as delimiter4, dirname as dirname57, join as join126, resolve as resolve45 } from "path";
535571
+ import { basename as basename41, delimiter as delimiter4, dirname as dirname58, join as join126, resolve as resolve45 } from "path";
535528
535572
  function getPlatform3() {
535529
535573
  const os7 = env4.platform;
535530
535574
  const arch = process.arch === "x64" ? "x64" : process.arch === "arm64" ? "arm64" : null;
@@ -535567,7 +535611,7 @@ async function getVersionPaths(version2) {
535567
535611
  const dirs = getBaseDirectories();
535568
535612
  const dirsToCreate = [dirs.versions, dirs.staging, dirs.locks];
535569
535613
  await Promise.all(dirsToCreate.map((dir) => mkdir31(dir, { recursive: true })));
535570
- const executableParentDir = dirname57(dirs.executable);
535614
+ const executableParentDir = dirname58(dirs.executable);
535571
535615
  await mkdir31(executableParentDir, { recursive: true });
535572
535616
  const installPath = join126(dirs.versions, version2);
535573
535617
  try {
@@ -535661,7 +535705,7 @@ async function tryWithVersionLock(versionFilePath, callback, retries = 0) {
535661
535705
  }
535662
535706
  }
535663
535707
  async function atomicMoveToInstallPath(stagedBinaryPath, installPath) {
535664
- await mkdir31(dirname57(installPath), { recursive: true });
535708
+ await mkdir31(dirname58(installPath), { recursive: true });
535665
535709
  const tempInstallPath = `${installPath}.tmp.${process.pid}.${Date.now()}`;
535666
535710
  try {
535667
535711
  await copyFile9(stagedBinaryPath, tempInstallPath);
@@ -535787,8 +535831,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
535787
535831
  const maxVersion = await getMaxVersion();
535788
535832
  if (maxVersion && gt(version2, maxVersion)) {
535789
535833
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
535790
- if (gte("1.3.435", maxVersion)) {
535791
- logForDebugging(`Native installer: current version ${"1.3.435"} is already at or above maxVersion ${maxVersion}, skipping update`);
535834
+ if (gte("1.3.436", maxVersion)) {
535835
+ logForDebugging(`Native installer: current version ${"1.3.436"} is already at or above maxVersion ${maxVersion}, skipping update`);
535792
535836
  logEvent("tengu_native_update_skipped_max_version", {
535793
535837
  latency_ms: Date.now() - startTime,
535794
535838
  max_version: maxVersion,
@@ -535799,7 +535843,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
535799
535843
  version2 = maxVersion;
535800
535844
  }
535801
535845
  }
535802
- if (!forceReinstall && version2 === "1.3.435" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
535846
+ if (!forceReinstall && version2 === "1.3.436" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
535803
535847
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
535804
535848
  logEvent("tengu_native_update_complete", {
535805
535849
  latency_ms: Date.now() - startTime,
@@ -535875,7 +535919,7 @@ async function updateSymlink(symlinkPath, targetPath) {
535875
535919
  const isWindows2 = platform4.startsWith("win32");
535876
535920
  if (isWindows2) {
535877
535921
  try {
535878
- const parentDir2 = dirname57(symlinkPath);
535922
+ const parentDir2 = dirname58(symlinkPath);
535879
535923
  await mkdir31(parentDir2, { recursive: true });
535880
535924
  let existingStats;
535881
535925
  try {
@@ -535921,7 +535965,7 @@ async function updateSymlink(symlinkPath, targetPath) {
535921
535965
  return false;
535922
535966
  }
535923
535967
  }
535924
- const parentDir = dirname57(symlinkPath);
535968
+ const parentDir = dirname58(symlinkPath);
535925
535969
  try {
535926
535970
  await mkdir31(parentDir, { recursive: true });
535927
535971
  logForDebugging(`Created directory ${parentDir} for symlink`);
@@ -535938,7 +535982,7 @@ async function updateSymlink(symlinkPath, targetPath) {
535938
535982
  if (symlinkExists) {
535939
535983
  try {
535940
535984
  const currentTarget = await readlink3(symlinkPath);
535941
- const resolvedCurrentTarget = resolve45(dirname57(symlinkPath), currentTarget);
535985
+ const resolvedCurrentTarget = resolve45(dirname58(symlinkPath), currentTarget);
535942
535986
  const resolvedTargetPath = resolve45(targetPath);
535943
535987
  if (resolvedCurrentTarget === resolvedTargetPath) {
535944
535988
  return false;
@@ -535978,7 +536022,7 @@ async function checkInstall(force = false) {
535978
536022
  }
535979
536023
  const dirs = getBaseDirectories();
535980
536024
  const messages = [];
535981
- const localBinDir = dirname57(dirs.executable);
536025
+ const localBinDir = dirname58(dirs.executable);
535982
536026
  const resolvedLocalBinPath = resolve45(localBinDir);
535983
536027
  const platform4 = getPlatform3();
535984
536028
  const isWindows2 = platform4.startsWith("win32");
@@ -536002,7 +536046,7 @@ async function checkInstall(force = false) {
536002
536046
  } else {
536003
536047
  try {
536004
536048
  const target = await readlink3(dirs.executable);
536005
- const absoluteTarget = resolve45(dirname57(dirs.executable), target);
536049
+ const absoluteTarget = resolve45(dirname58(dirs.executable), target);
536006
536050
  if (!await isPossibleClaudeBinary(absoluteTarget)) {
536007
536051
  messages.push({
536008
536052
  message: `Claude symlink points to missing or invalid binary: ${target}`,
@@ -536109,7 +536153,7 @@ async function installLatestImpl(channelOrVersion, forceReinstall = false) {
536109
536153
  async function getVersionFromSymlink(symlinkPath) {
536110
536154
  try {
536111
536155
  const target = await readlink3(symlinkPath);
536112
- const absoluteTarget = resolve45(dirname57(symlinkPath), target);
536156
+ const absoluteTarget = resolve45(dirname58(symlinkPath), target);
536113
536157
  if (await isPossibleClaudeBinary(absoluteTarget)) {
536114
536158
  return absoluteTarget;
536115
536159
  }
@@ -536204,7 +536248,7 @@ async function cleanupOldVersions() {
536204
536248
  const dirs = getBaseDirectories();
536205
536249
  const oneHourAgo = Date.now() - 3600000;
536206
536250
  if (getPlatform3().startsWith("win32")) {
536207
- const executableDir = dirname57(dirs.executable);
536251
+ const executableDir = dirname58(dirs.executable);
536208
536252
  try {
536209
536253
  const files2 = await readdir24(executableDir);
536210
536254
  let cleanedCount = 0;
@@ -536995,7 +537039,7 @@ function buildPrimarySection() {
536995
537039
  }, undefined, false, undefined, this);
536996
537040
  return [{
536997
537041
  label: "Version",
536998
- value: "1.3.435"
537042
+ value: "1.3.436"
536999
537043
  }, {
537000
537044
  label: "Session name",
537001
537045
  value: nameValue
@@ -540686,7 +540730,7 @@ function Config({
540686
540730
  }
540687
540731
  }, undefined, false, undefined, this)
540688
540732
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime170.jsxDEV(ChannelDowngradeDialog, {
540689
- currentVersion: "1.3.435",
540733
+ currentVersion: "1.3.436",
540690
540734
  onChoice: (choice) => {
540691
540735
  setShowSubmenu(null);
540692
540736
  setTabsHidden(false);
@@ -540698,7 +540742,7 @@ function Config({
540698
540742
  autoUpdatesChannel: "stable"
540699
540743
  };
540700
540744
  if (choice === "stay") {
540701
- newSettings.minimumVersion = "1.3.435";
540745
+ newSettings.minimumVersion = "1.3.436";
540702
540746
  }
540703
540747
  updateSettingsForSource("userSettings", newSettings);
540704
540748
  setSettingsData((prev_27) => ({
@@ -548760,7 +548804,7 @@ function HelpV2(t0) {
548760
548804
  let t6;
548761
548805
  if ($3[31] !== tabs) {
548762
548806
  t6 = /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Tabs, {
548763
- title: `Rayu-CLI v${"1.3.435"}`,
548807
+ title: `Rayu-CLI v${"1.3.436"}`,
548764
548808
  color: "professionalBlue",
548765
548809
  defaultTab: "general",
548766
548810
  children: tabs
@@ -549799,7 +549843,7 @@ var init_ide3 = __esm(() => {
549799
549843
  });
549800
549844
 
549801
549845
  // src/commands/init.ts
549802
- import { existsSync as existsSync22, writeFileSync as writeFileSync11 } from "fs";
549846
+ import { existsSync as existsSync22, writeFileSync as writeFileSync12 } from "fs";
549803
549847
  import { join as join129 } from "path";
549804
549848
  function ensureRayuMd() {
549805
549849
  try {
@@ -549807,7 +549851,7 @@ function ensureRayuMd() {
549807
549851
  if (existsSync22(join129(cwd2, "RAYU.md"))) {
549808
549852
  return;
549809
549853
  }
549810
- writeFileSync11(join129(cwd2, "RAYU.md"), RAYU_MD_SCAFFOLD, { flag: "wx" });
549854
+ writeFileSync12(join129(cwd2, "RAYU.md"), RAYU_MD_SCAFFOLD, { flag: "wx" });
549811
549855
  } catch {}
549812
549856
  }
549813
549857
  var RAYU_MD_SCAFFOLD = `# RAYU.md
@@ -550158,7 +550202,7 @@ ${taskLine}
550158
550202
 
550159
550203
  ## Your role: PURE ORCHESTRATOR — you do NOT write code
550160
550204
  In this mode you NEVER write or edit code, run build/implementation commands, or do domain work yourself. Your job is ONLY to:
550161
- - ANALYZE the real project and requirements — read code to understand it, and discuss & plan WITH the \`PA\` subagent to reach a clear, grounded plan/architecture.
550205
+ - ANALYZE the real project and requirements — read code to understand it, and discuss & plan WITH the \`planner\` subagent to reach a clear, grounded plan/architecture.
550162
550206
  - DECOMPOSE and ASSIGN the work to the right Collaborators (implementers) and Subagents (one-shot helpers).
550163
550207
  - CHECK and verify their results (via the \`review\` subagent and by reading their outputs) and integrate them.
550164
550208
  HARD RULE: if a Collaborator or Subagent stalls, errors, or doesn't respond, you RESUME it (SendMessage), re-dispatch it, or escalate to the user — you do NOT take over and implement it yourself. Never silently become the coder, even if it seems faster.
@@ -550167,17 +550211,17 @@ Keep going until the task is fully resolved; state assumptions and continue —
550167
550211
  ## The three tiers
550168
550212
  - **You (Orchestrator)** — scope, plan, own SharedContext, coordinate, integrate. You delegate all implementation; you call only the orchestrator-level subagents directly.
550169
550213
  - **Collaborators (Tier 2)** — semi-persistent domain implementers you delegate to: \`frontend\`, \`backend\` (incl. database), \`mobile\`, \`security\`, \`deploy\`. Spawn each as a NAMED BACKGROUND agent (run_in_background:true, stable lowercase name) so you can resume it with SendMessage instead of respawning. They have full tools and may dispatch ONLY their allowed subagents (see the matrix).
550170
- - **Subagents (Tier 3)** — ephemeral one-shot helpers: \`PA\` (deep plan/research — orchestrator only), \`design\` (UI/UX + component PRD), \`backend-design\` (API + Data Model PRD), \`global-setup\` (scaffold — orchestrator only), \`asset-generation\` (images), \`review\` (audit → Fix List), \`fix\` (apply Fix List), \`linter\`, plus \`Explore\` and \`general-purpose\` (research).
550214
+ - **Subagents (Tier 3)** — ephemeral one-shot helpers: \`planner\` (deep plan/research — orchestrator only), \`design\` (UI/UX + component PRD), \`backend-design\` (API + Data Model PRD), \`global-setup\` (scaffold — orchestrator only), \`asset-generation\` (images), \`review\` (audit → Fix List), \`fix\` (apply Fix List), \`linter\`, plus \`Explore\` and \`general-purpose\` (research).
550171
550215
 
550172
550216
  ## Subagent specialization matrix (who may call what)
550173
550217
  Domain-locked so each agent uses only what fits its specialty:
550174
- - **You (Orchestrator):** PA, global-setup, design, backend-design, asset-generation, review, fix, linter, Explore, general-purpose.
550218
+ - **You (Orchestrator):** planner, global-setup, design, backend-design, asset-generation, review, fix, linter, Explore, general-purpose.
550175
550219
  - **frontend:** design, asset-generation, review, fix, linter, Explore, general-purpose. (NOT backend-design.)
550176
550220
  - **backend:** backend-design, review, fix, linter, Explore, general-purpose. (NOT design or asset-generation.)
550177
550221
  - **mobile:** design, asset-generation, backend-design, review, fix, linter, Explore, general-purpose.
550178
550222
  - **security:** backend-design, review, fix, linter, Explore, general-purpose.
550179
550223
  - **deploy:** review, fix, linter, Explore, general-purpose.
550180
- \`PA\` and \`global-setup\` are ORCHESTRATOR-ONLY — collaborators implement; they never re-plan or re-scaffold. (These limits are also enforced in code.)
550224
+ \`planner\` and \`global-setup\` are ORCHESTRATOR-ONLY — collaborators implement; they never re-plan or re-scaffold. (These limits are also enforced in code.)
550181
550225
 
550182
550226
  ## Bundled skills (use them — no install needed)
550183
550227
  rayu ships original skills, always available via the Skill tool: \`rayu-frontend-design\`, \`rayu-design-system\`, \`rayu-theme-factory\`, \`rayu-brand-guidelines\` (UI / design / brand), \`rayu-canvas-design\` + \`rayu-algorithmic-art\` (generated graphics & generative art), \`rayu-web-artifacts-builder\` (standalone interactive pages), \`rayu-api-design\` + \`rayu-mcp-builder\` (backend), \`rayu-web-testing\` (QA/verification), \`rayu-doc-export\` (docx/xlsx/pptx/pdf deliverables). Tell each collaborator to pull the skill that fits its task — frontend/mobile → design / theme / artifacts; design & asset-generation → canvas / algorithmic-art / brand; backend → api / mcp; review/security → web-testing; any document deliverable → doc-export. Beyond the bundled set, you and the collaborators may also use any skill the user has installed, or install a relevant one on demand from the official Anthropic skills repo (\`anthropics/skills\`) via the InstallSkill tool.
@@ -550190,13 +550234,13 @@ Parallel execution is ~3–5x faster than sequential. Unless one call genuinely
550190
550234
  - Spawn **Collaborators in the BACKGROUND** (\`run_in_background:true\`, stable lowercase name). Background is the ONLY mode that is resumable via \`SendMessage\`, so semi-persistent collaborators MUST be background. The user watches a collaborator's detailed work by entering its view (↓ then Enter); the task panel shows each collaborator's high-level status (including \`thinking…\`).
550191
550235
 
550192
550236
  ## The 3-phase build flow
550193
- ### Phase 1 — Scope & Research (you + PA, in the foreground)
550237
+ ### Phase 1 — Scope & Research (you + planner, in the foreground)
550194
550238
  - Clarify the request: ask the user for the missing DETAIL and SCOPE, and ask their PREFERRED TECH STACK — offer 2–3 concrete recommendations with a one-line rationale each (don't make them guess).
550195
- - For any OPEN implementation choice (e.g. a payment provider — Stripe vs a bank gateway vs ABA), dispatch the \`PA\` subagent to RESEARCH the real, available options for THIS project and return a short comparison; present those options to the user and let them choose. Loop until you have everything you need.
550239
+ - For any OPEN implementation choice (e.g. a payment provider — Stripe vs a bank gateway vs ABA), dispatch the \`planner\` subagent to RESEARCH the real, available options for THIS project and return a short comparison; present those options to the user and let them choose. Loop until you have everything you need.
550196
550240
 
550197
- ### Phase 2 — One aligned plan (PA → you → user)
550198
- - Hand the gathered context to \`PA\` for a deep, reasoned plan. PA must produce ONE coherent plan that is explicitly ALIGNED across backend AND frontend (shared API contract, data model, auth flow) — never two disjoint plans.
550199
- - Relay PA's plan to the user for FINAL confirmation. (In plan mode, that's the ExitPlanMode approval — confirming auto-enters swarm execution.)
550241
+ ### Phase 2 — One aligned plan (planner → you → user)
550242
+ - Hand the gathered context to \`planner\` for a deep, reasoned plan. The planner must produce ONE coherent plan that is explicitly ALIGNED across backend AND frontend (shared API contract, data model, auth flow) — never two disjoint plans.
550243
+ - Relay the planner's plan to the user for FINAL confirmation. (In plan mode, that's the ExitPlanMode approval — confirming auto-enters swarm execution.) You ALREADY receive the planner's full plan as its returned result — use that directly. Do NOT re-read \`.rayu/swarm/PLANNER.md\`: the swarm \`.md\` files exist so the COLLABORATORS can read each other's contracts, not for you to re-read your own subagents' returns — pulling a large plan back into your own context wastes tokens and can make the request time out.
550200
550244
 
550201
550245
  ### Phase 3 — Build (decompose by specialty; run as a dependency graph, not fixed waves)
550202
550246
  1. **Setup gate (one short step):** for a new project, run \`global-setup\` to scaffold the FE+BE folder structure + tooling.
@@ -550225,7 +550269,7 @@ Parallel execution is ~3–5x faster than sequential. Unless one call genuinely
550225
550269
  ## Finish
550226
550270
  Integrate the collaborators' outputs into one coherent result, crediting which collaborator produced what, and report concisely to the user — only after the verification gate (build/tests pass, review→fix clean).
550227
550271
 
550228
- This session is now in collaborator_swarm mode (it stays on for the whole session; the user exits with /normal). Begin with PHASE 1: state your understanding, ask the user for the missing scope + preferred tech stack (with recommendations), and dispatch \`PA\` for any implementation-option research the request needs.`
550272
+ This session is now in collaborator_swarm mode (it stays on for the whole session; the user exits with /normal). Begin with PHASE 1: state your understanding, ask the user for the missing scope + preferred tech stack (with recommendations), and dispatch \`planner\` for any implementation-option research the request needs.`
550229
550273
  }
550230
550274
  ];
550231
550275
  }
@@ -550295,7 +550339,7 @@ __export(exports_keybindings, {
550295
550339
  call: () => call18
550296
550340
  });
550297
550341
  import { mkdir as mkdir34, writeFile as writeFile37 } from "fs/promises";
550298
- import { dirname as dirname58 } from "path";
550342
+ import { dirname as dirname59 } from "path";
550299
550343
  async function call18() {
550300
550344
  if (!isKeybindingCustomizationEnabled()) {
550301
550345
  return {
@@ -550305,7 +550349,7 @@ async function call18() {
550305
550349
  }
550306
550350
  const keybindingsPath = getKeybindingsPath();
550307
550351
  let fileExists2 = false;
550308
- await mkdir34(dirname58(keybindingsPath), { recursive: true });
550352
+ await mkdir34(dirname59(keybindingsPath), { recursive: true });
550309
550353
  try {
550310
550354
  await writeFile37(keybindingsPath, generateKeybindingsTemplate(), {
550311
550355
  encoding: "utf-8",
@@ -557415,7 +557459,7 @@ var init_DiscoverPlugins = __esm(() => {
557415
557459
  });
557416
557460
 
557417
557461
  // src/services/plugins/pluginOperations.ts
557418
- import { dirname as dirname59, join as join132 } from "path";
557462
+ import { dirname as dirname60, join as join132 } from "path";
557419
557463
  function assertInstallableScope(scope) {
557420
557464
  if (!VALID_INSTALLABLE_SCOPES.includes(scope)) {
557421
557465
  throw new Error(`Invalid scope "${scope}". Must be one of: ${VALID_INSTALLABLE_SCOPES.join(", ")}`);
@@ -557892,7 +557936,7 @@ async function performPluginUpdate({
557892
557936
  }
557893
557937
  throw e2;
557894
557938
  }
557895
- const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname59(marketplaceInstallLocation);
557939
+ const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname60(marketplaceInstallLocation);
557896
557940
  sourcePath = join132(marketplaceDir, entry.source);
557897
557941
  try {
557898
557942
  await fs14.stat(sourcePath);
@@ -566864,7 +566908,7 @@ var init_server = __esm(() => {
566864
566908
  });
566865
566909
 
566866
566910
  // src/telegram/telegramConfig.ts
566867
- import { existsSync as existsSync23, mkdirSync as mkdirSync11, readFileSync as readFileSync26, writeFileSync as writeFileSync12 } from "fs";
566911
+ import { existsSync as existsSync23, mkdirSync as mkdirSync12, readFileSync as readFileSync26, writeFileSync as writeFileSync13 } from "fs";
566868
566912
  import { join as join136 } from "path";
566869
566913
  function configPath2() {
566870
566914
  return join136(getRayuConfigHomeDir(), "telegram.json");
@@ -566895,8 +566939,8 @@ function readTelegramConfig() {
566895
566939
  function writeTelegramConfig(config5) {
566896
566940
  const dir = getRayuConfigHomeDir();
566897
566941
  if (!existsSync23(dir))
566898
- mkdirSync11(dir, { recursive: true });
566899
- writeFileSync12(configPath2(), JSON.stringify(config5, null, 2), { mode: 384 });
566942
+ mkdirSync12(dir, { recursive: true });
566943
+ writeFileSync13(configPath2(), JSON.stringify(config5, null, 2), { mode: 384 });
566900
566944
  }
566901
566945
  function setPendingToken(token, ttlMs) {
566902
566946
  const next = {
@@ -568693,7 +568737,7 @@ var init_transcriptSearch = __esm(() => {
568693
568737
 
568694
568738
  // src/utils/releaseNotes.ts
568695
568739
  import { mkdir as mkdir35, readFile as readFile46, writeFile as writeFile40 } from "fs/promises";
568696
- import { dirname as dirname61, join as join137 } from "path";
568740
+ import { dirname as dirname62, join as join137 } from "path";
568697
568741
  function getChangelogCachePath() {
568698
568742
  return join137(getRayuConfigHomeDir(), "cache", "changelog.md");
568699
568743
  }
@@ -568704,7 +568748,7 @@ async function migrateChangelogFromConfig() {
568704
568748
  }
568705
568749
  const cachePath = getChangelogCachePath();
568706
568750
  try {
568707
- await mkdir35(dirname61(cachePath), { recursive: true });
568751
+ await mkdir35(dirname62(cachePath), { recursive: true });
568708
568752
  await writeFile40(cachePath, config5.cachedChangelog, {
568709
568753
  encoding: "utf-8",
568710
568754
  flag: "wx"
@@ -568726,7 +568770,7 @@ async function fetchAndStoreChangelog() {
568726
568770
  return;
568727
568771
  }
568728
568772
  const cachePath = getChangelogCachePath();
568729
- await mkdir35(dirname61(cachePath), { recursive: true });
568773
+ await mkdir35(dirname62(cachePath), { recursive: true });
568730
568774
  await writeFile40(cachePath, changelogContent, { encoding: "utf-8" });
568731
568775
  changelogMemoryCache = changelogContent;
568732
568776
  const changelogLastFetched = Date.now();
@@ -568795,7 +568839,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
568795
568839
  }
568796
568840
  return [];
568797
568841
  }
568798
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.435") {
568842
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.436") {
568799
568843
  if (false) {}
568800
568844
  const cachedChangelog = await getStoredChangelog();
568801
568845
  if (lastSeenVersion !== currentVersion || !cachedChangelog) {
@@ -568808,7 +568852,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.435")
568808
568852
  releaseNotes
568809
568853
  };
568810
568854
  }
568811
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.3.435") {
568855
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.3.436") {
568812
568856
  if (false) {}
568813
568857
  const releaseNotes = getRecentReleaseNotes(currentVersion, lastSeenVersion);
568814
568858
  return {
@@ -568936,7 +568980,7 @@ function getRecentActivitySync() {
568936
568980
  return cachedActivity;
568937
568981
  }
568938
568982
  function getLogoDisplayData() {
568939
- const version2 = process.env.DEMO_VERSION ?? "1.3.435";
568983
+ const version2 = process.env.DEMO_VERSION ?? "1.3.436";
568940
568984
  const serverUrl = getDirectConnectServerUrl();
568941
568985
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
568942
568986
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -570183,7 +570227,7 @@ function LogoV2() {
570183
570227
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
570184
570228
  t2 = () => {
570185
570229
  const currentConfig = getGlobalConfig();
570186
- if (currentConfig.lastReleaseNotesSeen === "1.3.435") {
570230
+ if (currentConfig.lastReleaseNotesSeen === "1.3.436") {
570187
570231
  return;
570188
570232
  }
570189
570233
  saveGlobalConfig(_temp327);
@@ -570661,7 +570705,7 @@ function LogoV2() {
570661
570705
  t24 = $3[61];
570662
570706
  }
570663
570707
  const _latestNpm = getCachedLatestNpmVersionSync();
570664
- const _updateFeeds = _latestNpm && gt(_latestNpm, "1.3.435") ? [createUpdateAvailableFeed("1.3.435", _latestNpm)] : [];
570708
+ const _updateFeeds = _latestNpm && gt(_latestNpm, "1.3.436") ? [createUpdateAvailableFeed("1.3.436", _latestNpm)] : [];
570665
570709
  const t25 = layoutMode === "horizontal" && /* @__PURE__ */ jsx_dev_runtime239.jsxDEV(FeedColumn, {
570666
570710
  feeds: showOnboarding ? [createProjectOnboardingFeed(getSteps()), createRecentActivityFeed(activities)] : showGuestPassesUpsell ? [createRecentActivityFeed(activities), createGuestPassesFeed()] : showOverageCreditUpsell ? [createRecentActivityFeed(activities), createOverageCreditFeed()] : [createRecentActivityFeed(activities), ..._updateFeeds, createWhatsNewFeed(changelog)],
570667
570711
  maxWidth: rightWidth
@@ -570861,12 +570905,12 @@ function LogoV2() {
570861
570905
  return t41;
570862
570906
  }
570863
570907
  function _temp327(current) {
570864
- if (current.lastReleaseNotesSeen === "1.3.435") {
570908
+ if (current.lastReleaseNotesSeen === "1.3.436") {
570865
570909
  return current;
570866
570910
  }
570867
570911
  return {
570868
570912
  ...current,
570869
- lastReleaseNotesSeen: "1.3.435"
570913
+ lastReleaseNotesSeen: "1.3.436"
570870
570914
  };
570871
570915
  }
570872
570916
  function _temp241(s_0) {
@@ -595678,7 +595722,7 @@ var init_rewind = __esm(() => {
595678
595722
  });
595679
595723
 
595680
595724
  // src/utils/heapDumpService.ts
595681
- import { createWriteStream as createWriteStream4, writeFileSync as writeFileSync13 } from "fs";
595725
+ import { createWriteStream as createWriteStream4, writeFileSync as writeFileSync14 } from "fs";
595682
595726
  import { readdir as readdir27, readFile as readFile49, writeFile as writeFile42 } from "fs/promises";
595683
595727
  import { join as join141 } from "path";
595684
595728
  import { pipeline as pipeline4 } from "stream/promises";
@@ -595770,7 +595814,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
595770
595814
  smapsRollup,
595771
595815
  platform: process.platform,
595772
595816
  nodeVersion: process.version,
595773
- ccVersion: "1.3.435"
595817
+ ccVersion: "1.3.436"
595774
595818
  };
595775
595819
  }
595776
595820
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -595817,7 +595861,7 @@ async function performHeapDump(trigger = "manual", dumpNumber = 0) {
595817
595861
  }
595818
595862
  async function writeHeapSnapshot(filepath) {
595819
595863
  if (typeof Bun !== "undefined") {
595820
- writeFileSync13(filepath, Bun.generateHeapSnapshot("v8", "arraybuffer"), {
595864
+ writeFileSync14(filepath, Bun.generateHeapSnapshot("v8", "arraybuffer"), {
595821
595865
  mode: 384
595822
595866
  });
595823
595867
  Bun.gc(true);
@@ -596292,7 +596336,7 @@ var init_bridge_kick = __esm(() => {
596292
596336
  var call49 = async () => {
596293
596337
  return {
596294
596338
  type: "text",
596295
- value: "1.3.435"
596339
+ value: "1.3.436"
596296
596340
  };
596297
596341
  }, version2, version_default;
596298
596342
  var init_version = __esm(() => {
@@ -597588,10 +597632,10 @@ var init_contactMe2 = __esm(() => {
597588
597632
  import {
597589
597633
  chmodSync as chmodSync5,
597590
597634
  existsSync as existsSync24,
597591
- mkdirSync as mkdirSync12,
597635
+ mkdirSync as mkdirSync13,
597592
597636
  readFileSync as readFileSync27,
597593
597637
  rmSync as rmSync5,
597594
- writeFileSync as writeFileSync14
597638
+ writeFileSync as writeFileSync15
597595
597639
  } from "fs";
597596
597640
  import { join as join142 } from "path";
597597
597641
  function isUseRayuOAuthEnabled() {
@@ -597619,9 +597663,9 @@ function readRayuSession() {
597619
597663
  function writeRayuSession(store) {
597620
597664
  const dir = getRayuConfigHomeDir();
597621
597665
  if (!existsSync24(dir))
597622
- mkdirSync12(dir, { recursive: true });
597666
+ mkdirSync13(dir, { recursive: true });
597623
597667
  const p = sessionPath();
597624
- writeFileSync14(p, JSON.stringify(store, null, 2), { mode: 384 });
597668
+ writeFileSync15(p, JSON.stringify(store, null, 2), { mode: 384 });
597625
597669
  try {
597626
597670
  chmodSync5(p, 384);
597627
597671
  } catch {}
@@ -597963,7 +598007,7 @@ var init_advisor2 = __esm(() => {
597963
598007
  // src/skills/bundledSkills.ts
597964
598008
  import { constants as fsConstants5 } from "fs";
597965
598009
  import { mkdir as mkdir38, open as open14 } from "fs/promises";
597966
- import { dirname as dirname62, isAbsolute as isAbsolute33, join as join143, normalize as normalize16, sep as pathSep2 } from "path";
598010
+ import { dirname as dirname63, isAbsolute as isAbsolute33, join as join143, normalize as normalize16, sep as pathSep2 } from "path";
597967
598011
  function registerBundledSkill(definition) {
597968
598012
  const { files: files3 } = definition;
597969
598013
  let skillRoot;
@@ -598027,7 +598071,7 @@ async function writeSkillFiles(dir, files3) {
598027
598071
  const byParent = new Map;
598028
598072
  for (const [relPath, content] of Object.entries(files3)) {
598029
598073
  const target = resolveSkillFilePath(dir, relPath);
598030
- const parent2 = dirname62(target);
598074
+ const parent2 = dirname63(target);
598031
598075
  const entry = [target, content];
598032
598076
  const group = byParent.get(parent2);
598033
598077
  if (group)
@@ -598775,10 +598819,10 @@ __export(exports_googleOAuth, {
598775
598819
  import {
598776
598820
  chmodSync as chmodSync6,
598777
598821
  existsSync as existsSync25,
598778
- mkdirSync as mkdirSync13,
598822
+ mkdirSync as mkdirSync14,
598779
598823
  readFileSync as readFileSync28,
598780
598824
  rmSync as rmSync6,
598781
- writeFileSync as writeFileSync15
598825
+ writeFileSync as writeFileSync16
598782
598826
  } from "fs";
598783
598827
  import { createServer as createServer8 } from "http";
598784
598828
  import { join as join146 } from "path";
@@ -598804,9 +598848,9 @@ function readGeminiOAuthStore() {
598804
598848
  function writeGeminiOAuthStore(store) {
598805
598849
  const dir = getRayuConfigHomeDir();
598806
598850
  if (!existsSync25(dir))
598807
- mkdirSync13(dir, { recursive: true });
598851
+ mkdirSync14(dir, { recursive: true });
598808
598852
  const p = tokenPath2();
598809
- writeFileSync15(p, JSON.stringify(store, null, 2), { mode: 384 });
598853
+ writeFileSync16(p, JSON.stringify(store, null, 2), { mode: 384 });
598810
598854
  try {
598811
598855
  chmodSync6(p, 384);
598812
598856
  } catch {}
@@ -606068,7 +606112,7 @@ function generateHtmlReport(data, insights) {
606068
606112
  </html>`;
606069
606113
  }
606070
606114
  function buildExportData(data, insights, facets, remoteStats) {
606071
- const version3 = typeof MACRO !== "undefined" ? "1.3.435" : "unknown";
606115
+ const version3 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
606072
606116
  const remote_hosts_collected = remoteStats?.hosts.filter((h3) => h3.sessionCount > 0).map((h3) => h3.name);
606073
606117
  const facets_summary = {
606074
606118
  total: facets.size,
@@ -607153,7 +607197,7 @@ import {
607153
607197
  unlink as unlink23,
607154
607198
  writeFile as writeFile45
607155
607199
  } from "fs/promises";
607156
- import { basename as basename46, dirname as dirname64, join as join151 } from "path";
607200
+ import { basename as basename46, dirname as dirname65, join as join151 } from "path";
607157
607201
  function isTranscriptMessage(entry) {
607158
607202
  return entry.type === "user" || entry.type === "assistant" || entry.type === "attachment" || entry.type === "system";
607159
607203
  }
@@ -607198,7 +607242,7 @@ function getAgentMetadataPath(agentId) {
607198
607242
  }
607199
607243
  async function writeAgentMetadata(agentId, metadata) {
607200
607244
  const path28 = getAgentMetadataPath(agentId);
607201
- await mkdir41(dirname64(path28), { recursive: true });
607245
+ await mkdir41(dirname65(path28), { recursive: true });
607202
607246
  await writeFile45(path28, JSON.stringify(metadata));
607203
607247
  }
607204
607248
  async function readAgentMetadata(agentId) {
@@ -607221,7 +607265,7 @@ function getRemoteAgentMetadataPath(taskId) {
607221
607265
  }
607222
607266
  async function writeRemoteAgentMetadata(taskId, metadata) {
607223
607267
  const path28 = getRemoteAgentMetadataPath(taskId);
607224
- await mkdir41(dirname64(path28), { recursive: true });
607268
+ await mkdir41(dirname65(path28), { recursive: true });
607225
607269
  await writeFile45(path28, JSON.stringify(metadata));
607226
607270
  }
607227
607271
  async function readRemoteAgentMetadata(taskId) {
@@ -607410,7 +607454,7 @@ class Project {
607410
607454
  try {
607411
607455
  await fsAppendFile(filePath, data, { mode: 384 });
607412
607456
  } catch {
607413
- await mkdir41(dirname64(filePath), { recursive: true, mode: 448 });
607457
+ await mkdir41(dirname65(filePath), { recursive: true, mode: 448 });
607414
607458
  await fsAppendFile(filePath, data, { mode: 384 });
607415
607459
  }
607416
607460
  }
@@ -608009,7 +608053,7 @@ async function hydrateFromCCRv2InternalEvents(sessionId) {
608009
608053
  }
608010
608054
  for (const [agentId, entries] of byAgent) {
608011
608055
  const agentFile = getAgentTranscriptPath(asAgentId(agentId));
608012
- await mkdir41(dirname64(agentFile), { recursive: true, mode: 448 });
608056
+ await mkdir41(dirname65(agentFile), { recursive: true, mode: 448 });
608013
608057
  const agentContent = entries.map((p) => jsonStringify(p) + `
608014
608058
  `).join("");
608015
608059
  await writeFile45(agentFile, agentContent, {
@@ -608546,7 +608590,7 @@ function appendEntryToFile(fullPath, entry) {
608546
608590
  try {
608547
608591
  fs15.appendFileSync(fullPath, line, { mode: 384 });
608548
608592
  } catch {
608549
- fs15.mkdirSync(dirname64(fullPath), { mode: 448 });
608593
+ fs15.mkdirSync(dirname65(fullPath), { mode: 448 });
608550
608594
  fs15.appendFileSync(fullPath, line, { mode: 384 });
608551
608595
  }
608552
608596
  }
@@ -609976,7 +610020,7 @@ var init_sessionStorage = __esm(() => {
609976
610020
  init_settings2();
609977
610021
  init_slowOperations();
609978
610022
  init_uuid();
609979
- VERSION6 = typeof MACRO !== "undefined" ? "1.3.435" : "unknown";
610023
+ VERSION6 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
609980
610024
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
609981
610025
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
609982
610026
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -610293,7 +610337,6 @@ function loadAgentMemoryPrompt(agentType, scope) {
610293
610337
  break;
610294
610338
  }
610295
610339
  const memoryDir = getAgentMemoryDir(agentType, scope);
610296
- ensureMemoryDirExists(memoryDir);
610297
610340
  const coworkExtraGuidelines = process.env.CLAUDE_COWORK_MEMORY_EXTRA_GUIDELINES;
610298
610341
  return buildMemoryPrompt({
610299
610342
  displayName: "Persistent Agent Memory",
@@ -611197,7 +611240,7 @@ var init_filesystem = __esm(() => {
611197
611240
  });
611198
611241
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
611199
611242
  const nonce = randomBytes19(16).toString("hex");
611200
- return join153(getClaudeTempDir(), "bundled-skills", "1.3.435", nonce);
611243
+ return join153(getClaudeTempDir(), "bundled-skills", "1.3.436", nonce);
611201
611244
  });
611202
611245
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
611203
611246
  });
@@ -615490,7 +615533,7 @@ import {
615490
615533
  symlink as symlink5,
615491
615534
  utimes as utimes2
615492
615535
  } from "fs/promises";
615493
- import { basename as basename48, dirname as dirname65, join as join155 } from "path";
615536
+ import { basename as basename48, dirname as dirname66, join as join155 } from "path";
615494
615537
  function validateWorktreeSlug(slug) {
615495
615538
  if (slug.length > MAX_WORKTREE_SLUG_LENGTH) {
615496
615539
  throw new Error(`Invalid worktree name: must be ${MAX_WORKTREE_SLUG_LENGTH} characters or fewer (got ${slug.length})`);
@@ -615686,7 +615729,7 @@ async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
615686
615729
  const srcPath = join155(repoRoot, relativePath2);
615687
615730
  const destPath = join155(worktreePath, relativePath2);
615688
615731
  try {
615689
- await mkdir43(dirname65(destPath), { recursive: true });
615732
+ await mkdir43(dirname66(destPath), { recursive: true });
615690
615733
  await copyFile11(srcPath, destPath);
615691
615734
  copied.push(relativePath2);
615692
615735
  } catch (e2) {
@@ -615703,7 +615746,7 @@ async function performPostCreationSetup(repoRoot, worktreePath) {
615703
615746
  const sourceSettingsLocal = join155(repoRoot, localSettingsRelativePath);
615704
615747
  try {
615705
615748
  const destSettingsLocal = join155(worktreePath, localSettingsRelativePath);
615706
- await mkdirRecursive(dirname65(destSettingsLocal));
615749
+ await mkdirRecursive(dirname66(destSettingsLocal));
615707
615750
  await copyFile11(sourceSettingsLocal, destSettingsLocal);
615708
615751
  logForDebugging(`Copied settings.local.json to worktree: ${destSettingsLocal}`);
615709
615752
  } catch (e2) {
@@ -616312,7 +616355,7 @@ __export(exports_update, {
616312
616355
  import { execFileSync as execFileSync3 } from "node:child_process";
616313
616356
  import { homedir as homedir35 } from "os";
616314
616357
  async function update() {
616315
- writeToStdout(`Current version: ${"1.3.435"}
616358
+ writeToStdout(`Current version: ${"1.3.436"}
616316
616359
  `);
616317
616360
  const isBundled = isInBundledMode();
616318
616361
  if (isBundled) {
@@ -616338,13 +616381,13 @@ Manual check: npm view ${"@rayu-dev/rayu-cli"} version
616338
616381
  process.exit(1);
616339
616382
  return;
616340
616383
  }
616341
- if (latestVersion === "1.3.435") {
616384
+ if (latestVersion === "1.3.436") {
616342
616385
  writeToStdout(source_default.green(`
616343
- Rayu CLI is up to date (${"1.3.435"})
616386
+ Rayu CLI is up to date (${"1.3.436"})
616344
616387
  `));
616345
616388
  process.exit(0);
616346
616389
  }
616347
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.3.435"})
616390
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.3.436"})
616348
616391
  `);
616349
616392
  writeToStdout(`Installing update...
616350
616393
 
@@ -616368,7 +616411,7 @@ Try manually:
616368
616411
  return;
616369
616412
  }
616370
616413
  writeToStdout(source_default.green(`
616371
- Successfully updated from ${"1.3.435"} to ${latestVersion}
616414
+ Successfully updated from ${"1.3.436"} to ${latestVersion}
616372
616415
  `));
616373
616416
  process.exit(0);
616374
616417
  }
@@ -616382,14 +616425,14 @@ async function updateNativeBinary() {
616382
616425
  } catch {
616383
616426
  latestVersion = "";
616384
616427
  }
616385
- if (latestVersion && latestVersion === "1.3.435") {
616428
+ if (latestVersion && latestVersion === "1.3.436") {
616386
616429
  writeToStdout(source_default.green(`
616387
- Rayu CLI is up to date (1.3.435)
616430
+ Rayu CLI is up to date (1.3.436)
616388
616431
  `));
616389
616432
  process.exit(0);
616390
616433
  }
616391
616434
  if (latestVersion) {
616392
- writeToStdout(`New version available: ${latestVersion} (current: 1.3.435)
616435
+ writeToStdout(`New version available: ${latestVersion} (current: 1.3.436)
616393
616436
  `);
616394
616437
  }
616395
616438
  writeToStdout(`Downloading and installing update...
@@ -616404,13 +616447,13 @@ Rayu CLI is up to date (1.3.435)
616404
616447
  return;
616405
616448
  }
616406
616449
  writeToStdout(source_default.green(`
616407
- Rayu CLI is up to date (1.3.435)
616450
+ Rayu CLI is up to date (1.3.436)
616408
616451
  `));
616409
616452
  process.exit(0);
616410
616453
  }
616411
616454
  const updatedTo = result.latestVersion ?? latestVersion ?? "latest";
616412
616455
  writeToStdout(source_default.green(`
616413
- Successfully updated from 1.3.435 to ${updatedTo}
616456
+ Successfully updated from 1.3.436 to ${updatedTo}
616414
616457
  `));
616415
616458
  writeToStdout(`Restart your terminal to use the new version.
616416
616459
  `);
@@ -616441,7 +616484,7 @@ __export(exports_uninstall, {
616441
616484
  import { execFileSync as execFileSync4 } from "node:child_process";
616442
616485
  import { homedir as homedir36 } from "os";
616443
616486
  async function uninstall() {
616444
- writeToStdout(`Uninstalling Rayu CLI (${"1.3.435"})...
616487
+ writeToStdout(`Uninstalling Rayu CLI (${"1.3.436"})...
616445
616488
  `);
616446
616489
  writeToStdout(`Running: npm uninstall -g ${"@rayu-dev/rayu-cli"}
616447
616490
 
@@ -616464,7 +616507,7 @@ Try running manually:
616464
616507
  process.exit(1);
616465
616508
  }
616466
616509
  writeToStdout(source_default.green(`
616467
- Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.3.435"}
616510
+ Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.3.436"}
616468
616511
  `));
616469
616512
  writeToStdout(`Thanks for using Rayu CLI!
616470
616513
  `);
@@ -616479,7 +616522,7 @@ var exports_firstRun = {};
616479
616522
  __export(exports_firstRun, {
616480
616523
  showFirstRunWelcome: () => showFirstRunWelcome
616481
616524
  });
616482
- import { existsSync as existsSync26, mkdirSync as mkdirSync14, writeFileSync as writeFileSync16 } from "node:fs";
616525
+ import { existsSync as existsSync26, mkdirSync as mkdirSync15, writeFileSync as writeFileSync17 } from "node:fs";
616483
616526
  import { join as join156 } from "node:path";
616484
616527
  function markerPath() {
616485
616528
  return join156(getRayuConfigHomeDir(), ".installed");
@@ -616515,8 +616558,8 @@ function showFirstRunWelcome() {
616515
616558
  `) + `
616516
616559
  `);
616517
616560
  try {
616518
- mkdirSync14(getRayuConfigHomeDir(), { recursive: true });
616519
- writeFileSync16(markerPath(), "1.3.435", "utf8");
616561
+ mkdirSync15(getRayuConfigHomeDir(), { recursive: true });
616562
+ writeFileSync17(markerPath(), "1.3.436", "utf8");
616520
616563
  } catch {}
616521
616564
  }
616522
616565
  var init_firstRun = __esm(() => {
@@ -628359,7 +628402,7 @@ async function initializeBetaTracing(resource) {
628359
628402
  });
628360
628403
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
628361
628404
  setLoggerProvider(loggerProvider);
628362
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.435");
628405
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.436");
628363
628406
  setEventLogger(eventLogger);
628364
628407
  process.on("beforeExit", async () => {
628365
628408
  await loggerProvider?.forceFlush();
@@ -628399,7 +628442,7 @@ async function initializeTelemetry() {
628399
628442
  const platform4 = getPlatform();
628400
628443
  const baseAttributes = {
628401
628444
  [import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
628402
- [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.3.435"
628445
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.3.436"
628403
628446
  };
628404
628447
  if (platform4 === "wsl") {
628405
628448
  const wslVersion = getWslVersion();
@@ -628444,7 +628487,7 @@ async function initializeTelemetry() {
628444
628487
  } catch {}
628445
628488
  };
628446
628489
  registerCleanup(shutdownTelemetry2);
628447
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.3.435");
628490
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.3.436");
628448
628491
  }
628449
628492
  const meterProvider = new import_sdk_metrics2.MeterProvider({
628450
628493
  resource,
@@ -628464,7 +628507,7 @@ async function initializeTelemetry() {
628464
628507
  });
628465
628508
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
628466
628509
  setLoggerProvider(loggerProvider);
628467
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.435");
628510
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.436");
628468
628511
  setEventLogger(eventLogger);
628469
628512
  logForDebugging("[3P telemetry] Event logger set successfully");
628470
628513
  process.on("beforeExit", async () => {
@@ -628526,7 +628569,7 @@ Current timeout: ${timeoutMs}ms
628526
628569
  }
628527
628570
  };
628528
628571
  registerCleanup(shutdownTelemetry);
628529
- return meterProvider.getMeter("com.anthropic.claude_code", "1.3.435");
628572
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.3.436");
628530
628573
  }
628531
628574
  async function flushTelemetry() {
628532
628575
  const meterProvider = getMeterProvider();
@@ -630039,7 +630082,7 @@ function buildSystemInitMessage(inputs) {
630039
630082
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
630040
630083
  apiKeySource: getAnthropicApiKeyWithSource().source,
630041
630084
  betas: getSdkBetas(),
630042
- claude_code_version: "1.3.435",
630085
+ claude_code_version: "1.3.436",
630043
630086
  output_style: outputStyle2,
630044
630087
  agents: inputs.agents.map((agent) => agent.agentType),
630045
630088
  skills: inputs.skills.filter((s2) => s2.userInvocable !== false).map((skill) => skill.name),
@@ -630842,7 +630885,7 @@ var EDIT_INTERVAL_MS = 1100, PLACEHOLDER = "\uD83D\uDCAC …";
630842
630885
 
630843
630886
  // src/telegram/telegramBridge.ts
630844
630887
  import { hostname as hostname3 } from "os";
630845
- import { closeSync as closeSync5, existsSync as existsSync27, openSync as openSync6, readFileSync as readFileSync29, unlinkSync as unlinkSync4, writeFileSync as writeFileSync17, writeSync as writeSync3 } from "fs";
630888
+ import { closeSync as closeSync5, existsSync as existsSync27, openSync as openSync6, readFileSync as readFileSync29, unlinkSync as unlinkSync4, writeFileSync as writeFileSync18, writeSync as writeSync3 } from "fs";
630846
630889
  import { join as join158 } from "path";
630847
630890
  function linkedChatId() {
630848
630891
  return readTelegramConfig().linkedChatId;
@@ -631107,7 +631150,7 @@ function acquireBridgeLock() {
631107
631150
  return false;
631108
631151
  }
631109
631152
  }
631110
- writeFileSync17(path28, content, { mode: 384 });
631153
+ writeFileSync18(path28, content, { mode: 384 });
631111
631154
  } catch {}
631112
631155
  return true;
631113
631156
  }
@@ -631119,7 +631162,7 @@ function updateHeartbeat() {
631119
631162
  const raw = readFileSync29(path28, "utf8").trim();
631120
631163
  const pid = parseInt(raw.split(":")[0] ?? "", 10);
631121
631164
  if (pid === process.pid) {
631122
- writeFileSync17(path28, buildLockContent(), { mode: 384 });
631165
+ writeFileSync18(path28, buildLockContent(), { mode: 384 });
631123
631166
  }
631124
631167
  } catch {}
631125
631168
  }
@@ -646249,7 +646292,7 @@ var init_useVoiceEnabled = __esm(() => {
646249
646292
  function getSemverPart(version3) {
646250
646293
  return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
646251
646294
  }
646252
- function useUpdateNotification(updatedVersion, initialVersion = "1.3.435") {
646295
+ function useUpdateNotification(updatedVersion, initialVersion = "1.3.436") {
646253
646296
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react217.useState(() => getSemverPart(initialVersion));
646254
646297
  if (!updatedVersion) {
646255
646298
  return null;
@@ -646289,7 +646332,7 @@ function AutoUpdater({
646289
646332
  return;
646290
646333
  }
646291
646334
  if (false) {}
646292
- const currentVersion = "1.3.435";
646335
+ const currentVersion = "1.3.436";
646293
646336
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
646294
646337
  let latestVersion = await getLatestVersion(channel);
646295
646338
  const isDisabled = isAutoUpdaterDisabled();
@@ -646502,12 +646545,12 @@ function NativeAutoUpdater({
646502
646545
  logEvent("tengu_native_auto_updater_start", {});
646503
646546
  try {
646504
646547
  const maxVersion = await getMaxVersion();
646505
- if (maxVersion && gt("1.3.435", maxVersion)) {
646548
+ if (maxVersion && gt("1.3.436", maxVersion)) {
646506
646549
  const msg = await getMaxVersionMessage();
646507
646550
  setMaxVersionIssue(msg ?? "affects your version");
646508
646551
  }
646509
646552
  const result = await installLatest(channel);
646510
- const currentVersion = "1.3.435";
646553
+ const currentVersion = "1.3.436";
646511
646554
  const latencyMs = Date.now() - startTime;
646512
646555
  if (result.lockFailed) {
646513
646556
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -646644,17 +646687,17 @@ function PackageManagerAutoUpdater(t0) {
646644
646687
  const maxVersion = await getMaxVersion();
646645
646688
  if (maxVersion && latest && gt(latest, maxVersion)) {
646646
646689
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
646647
- if (gte("1.3.435", maxVersion)) {
646648
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.3.435"} is already at or above maxVersion ${maxVersion}, skipping update`);
646690
+ if (gte("1.3.436", maxVersion)) {
646691
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.3.436"} is already at or above maxVersion ${maxVersion}, skipping update`);
646649
646692
  setUpdateAvailable(false);
646650
646693
  return;
646651
646694
  }
646652
646695
  latest = maxVersion;
646653
646696
  }
646654
- const hasUpdate = latest && !gte("1.3.435", latest) && !shouldSkipVersion(latest);
646697
+ const hasUpdate = latest && !gte("1.3.436", latest) && !shouldSkipVersion(latest);
646655
646698
  setUpdateAvailable(!!hasUpdate);
646656
646699
  if (hasUpdate) {
646657
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.3.435"} -> ${latest}`);
646700
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.3.436"} -> ${latest}`);
646658
646701
  }
646659
646702
  };
646660
646703
  $3[0] = t1;
@@ -646688,7 +646731,7 @@ function PackageManagerAutoUpdater(t0) {
646688
646731
  wrap: "truncate",
646689
646732
  children: [
646690
646733
  "currentVersion: ",
646691
- "1.3.435"
646734
+ "1.3.436"
646692
646735
  ]
646693
646736
  }, undefined, true, undefined, this);
646694
646737
  $3[3] = verbose;
@@ -654853,7 +654896,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
654853
654896
  project_dir: getOriginalCwd(),
654854
654897
  added_dirs: addedDirs
654855
654898
  },
654856
- version: "1.3.435",
654899
+ version: "1.3.436",
654857
654900
  output_style: {
654858
654901
  name: outputStyleName
654859
654902
  },
@@ -664611,7 +664654,7 @@ __export(exports_asciicast, {
664611
664654
  _resetRecordingStateForTesting: () => _resetRecordingStateForTesting
664612
664655
  });
664613
664656
  import { appendFile as appendFile6, rename as rename13 } from "fs/promises";
664614
- import { basename as basename61, dirname as dirname66, join as join162 } from "path";
664657
+ import { basename as basename61, dirname as dirname67, join as join162 } from "path";
664615
664658
  function getRecordFilePath() {
664616
664659
  if (recordingState.filePath !== null) {
664617
664660
  return recordingState.filePath;
@@ -664693,7 +664736,7 @@ function installAsciicastRecorder() {
664693
664736
  }
664694
664737
  });
664695
664738
  try {
664696
- getFsImplementation().mkdirSync(dirname66(filePath));
664739
+ getFsImplementation().mkdirSync(dirname67(filePath));
664697
664740
  } catch {}
664698
664741
  getFsImplementation().appendFileSync(filePath, header + `
664699
664742
  `, { mode: 384 });
@@ -664762,7 +664805,7 @@ var init_asciicast = __esm(() => {
664762
664805
  });
664763
664806
 
664764
664807
  // src/utils/sessionRestore.ts
664765
- import { dirname as dirname67 } from "path";
664808
+ import { dirname as dirname68 } from "path";
664766
664809
  function extractTodosFromTranscript(messages) {
664767
664810
  for (let i4 = messages.length - 1;i4 >= 0; i4--) {
664768
664811
  const msg = messages[i4];
@@ -664887,7 +664930,7 @@ async function processResumedConversation(result, opts, context2) {
664887
664930
  if (!opts.forkSession) {
664888
664931
  const sid = opts.sessionIdOverride ?? result.sessionId;
664889
664932
  if (sid) {
664890
- switchSession(asSessionId(sid), opts.transcriptPath ? dirname67(opts.transcriptPath) : null);
664933
+ switchSession(asSessionId(sid), opts.transcriptPath ? dirname68(opts.transcriptPath) : null);
664891
664934
  await renameRecordingForSession();
664892
664935
  await resetSessionFilePointer();
664893
664936
  restoreCostStateForSession(sid);
@@ -666257,7 +666300,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
666257
666300
  } catch {}
666258
666301
  const data = {
666259
666302
  trigger,
666260
- version: "1.3.435",
666303
+ version: "1.3.436",
666261
666304
  platform: process.platform,
666262
666305
  transcript,
666263
666306
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -673735,7 +673778,7 @@ var exports_REPL = {};
673735
673778
  __export(exports_REPL, {
673736
673779
  REPL: () => REPL
673737
673780
  });
673738
- import { dirname as dirname68, join as join166 } from "path";
673781
+ import { dirname as dirname69, join as join166 } from "path";
673739
673782
  import { tmpdir as tmpdir16 } from "os";
673740
673783
  import { writeFile as writeFile47 } from "fs/promises";
673741
673784
  import { randomUUID as randomUUID52 } from "crypto";
@@ -674674,7 +674717,7 @@ function REPL({
674674
674717
  const targetSessionCosts = getStoredSessionCosts(sessionId);
674675
674718
  saveCurrentSessionCosts();
674676
674719
  resetCostState();
674677
- switchSession(asSessionId(sessionId), log3.fullPath ? dirname68(log3.fullPath) : null);
674720
+ switchSession(asSessionId(sessionId), log3.fullPath ? dirname69(log3.fullPath) : null);
674678
674721
  const {
674679
674722
  renameRecordingForSession: renameRecordingForSession2
674680
674723
  } = await Promise.resolve().then(() => (init_asciicast(), exports_asciicast));
@@ -678302,7 +678345,7 @@ function WelcomeV2() {
678302
678345
  dimColor: true,
678303
678346
  children: [
678304
678347
  "v",
678305
- "1.3.435"
678348
+ "1.3.436"
678306
678349
  ]
678307
678350
  }, undefined, true, undefined, this)
678308
678351
  ]
@@ -680036,7 +680079,7 @@ function completeOnboarding() {
680036
680079
  saveGlobalConfig((current) => ({
680037
680080
  ...current,
680038
680081
  hasCompletedOnboarding: true,
680039
- lastOnboardingVersion: "1.3.435"
680082
+ lastOnboardingVersion: "1.3.436"
680040
680083
  }));
680041
680084
  }
680042
680085
  function showDialog(root2, renderer) {
@@ -681181,7 +681224,7 @@ var exports_ResumeConversation = {};
681181
681224
  __export(exports_ResumeConversation, {
681182
681225
  ResumeConversation: () => ResumeConversation
681183
681226
  });
681184
- import { dirname as dirname69 } from "path";
681227
+ import { dirname as dirname70 } from "path";
681185
681228
  function parsePrIdentifier(value) {
681186
681229
  const directNumber = parseInt(value, 10);
681187
681230
  if (!isNaN(directNumber) && directNumber > 0) {
@@ -681313,7 +681356,7 @@ function ResumeConversation({
681313
681356
  }
681314
681357
  if (false) {}
681315
681358
  if (result_3.sessionId && !forkSession) {
681316
- switchSession(asSessionId(result_3.sessionId), log_0.fullPath ? dirname69(log_0.fullPath) : null);
681359
+ switchSession(asSessionId(result_3.sessionId), log_0.fullPath ? dirname70(log_0.fullPath) : null);
681317
681360
  await renameRecordingForSession();
681318
681361
  await resetSessionFilePointer();
681319
681362
  restoreCostStateForSession(result_3.sessionId);
@@ -684930,7 +684973,7 @@ var init_createDirectConnectSession = __esm(() => {
684930
684973
  });
684931
684974
 
684932
684975
  // src/utils/errorLogSink.ts
684933
- import { dirname as dirname70, join as join167 } from "path";
684976
+ import { dirname as dirname71, join as join167 } from "path";
684934
684977
  function getErrorsPath() {
684935
684978
  return join167(CACHE_PATHS.errors(), DATE + ".jsonl");
684936
684979
  }
@@ -684951,7 +684994,7 @@ function createJsonlWriter(options) {
684951
684994
  function getLogWriter(path30) {
684952
684995
  let writer = logWriters.get(path30);
684953
684996
  if (!writer) {
684954
- const dir = dirname70(path30);
684997
+ const dir = dirname71(path30);
684955
684998
  writer = createJsonlWriter({
684956
684999
  writeFn: (content) => {
684957
685000
  try {
@@ -684979,7 +685022,7 @@ function appendToLog(path30, message) {
684979
685022
  cwd: getFsImplementation().cwd(),
684980
685023
  userType: "external",
684981
685024
  sessionId: getSessionId(),
684982
- version: "1.3.435"
685025
+ version: "1.3.436"
684983
685026
  };
684984
685027
  getLogWriter(path30).write(messageWithTimestamp);
684985
685028
  }
@@ -689087,8 +689130,8 @@ async function getEnvLessBridgeConfig() {
689087
689130
  }
689088
689131
  async function checkEnvLessBridgeMinVersion() {
689089
689132
  const cfg = await getEnvLessBridgeConfig();
689090
- if (cfg.min_version && lt("1.3.435", cfg.min_version)) {
689091
- return `Your version of RAYU (${"1.3.435"}) is too old for Remote Control.
689133
+ if (cfg.min_version && lt("1.3.436", cfg.min_version)) {
689134
+ return `Your version of RAYU (${"1.3.436"}) is too old for Remote Control.
689092
689135
  Version ${cfg.min_version} or higher is required. Run \`claude update\` to update.`;
689093
689136
  }
689094
689137
  return null;
@@ -689416,14 +689459,14 @@ __export(exports_bridgePointer, {
689416
689459
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
689417
689460
  });
689418
689461
  import { mkdir as mkdir46, readFile as readFile56, stat as stat49, unlink as unlink27, writeFile as writeFile50 } from "fs/promises";
689419
- import { dirname as dirname71, join as join171 } from "path";
689462
+ import { dirname as dirname72, join as join171 } from "path";
689420
689463
  function getBridgePointerPath(dir) {
689421
689464
  return join171(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
689422
689465
  }
689423
689466
  async function writeBridgePointer(dir, pointer) {
689424
689467
  const path30 = getBridgePointerPath(dir);
689425
689468
  try {
689426
- await mkdir46(dirname71(path30), { recursive: true });
689469
+ await mkdir46(dirname72(path30), { recursive: true });
689427
689470
  await writeFile50(path30, jsonStringify(pointer), "utf8");
689428
689471
  logForDebugging(`[bridge:pointer] wrote ${path30}`);
689429
689472
  } catch (err2) {
@@ -689562,7 +689605,7 @@ async function initBridgeCore(params) {
689562
689605
  const rawApi = createBridgeApiClient({
689563
689606
  baseUrl,
689564
689607
  getAccessToken,
689565
- runnerVersion: "1.3.435",
689608
+ runnerVersion: "1.3.436",
689566
689609
  onDebug: logForDebugging,
689567
689610
  onAuth401,
689568
689611
  getTrustedDeviceToken
@@ -691400,7 +691443,7 @@ __export(exports_print, {
691400
691443
  canBatchWith: () => canBatchWith
691401
691444
  });
691402
691445
  import { readFile as readFile57, stat as stat50 } from "fs/promises";
691403
- import { dirname as dirname72 } from "path";
691446
+ import { dirname as dirname73 } from "path";
691404
691447
  import { cwd as cwd2 } from "process";
691405
691448
  import { randomUUID as randomUUID58 } from "crypto";
691406
691449
  function trackReceivedMessageUuid(uuid8) {
@@ -693753,7 +693796,7 @@ async function loadInitialMessages(setAppState, options) {
693753
693796
  if (false) {}
693754
693797
  if (!options.forkSession) {
693755
693798
  if (result.sessionId) {
693756
- switchSession(asSessionId(result.sessionId), result.fullPath ? dirname72(result.fullPath) : null);
693799
+ switchSession(asSessionId(result.sessionId), result.fullPath ? dirname73(result.fullPath) : null);
693757
693800
  if (persistSession) {
693758
693801
  await resetSessionFilePointer();
693759
693802
  }
@@ -693851,7 +693894,7 @@ async function loadInitialMessages(setAppState, options) {
693851
693894
  }
693852
693895
  if (false) {}
693853
693896
  if (!options.forkSession && result.sessionId) {
693854
- switchSession(asSessionId(result.sessionId), result.fullPath ? dirname72(result.fullPath) : null);
693897
+ switchSession(asSessionId(result.sessionId), result.fullPath ? dirname73(result.fullPath) : null);
693855
693898
  if (persistSession) {
693856
693899
  await resetSessionFilePointer();
693857
693900
  }
@@ -694924,7 +694967,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
694924
694967
  setCwd(cwd3);
694925
694968
  const server = new Server({
694926
694969
  name: "claude/tengu",
694927
- version: "1.3.435"
694970
+ version: "1.3.436"
694928
694971
  }, {
694929
694972
  capabilities: {
694930
694973
  tools: {}
@@ -695339,7 +695382,7 @@ __export(exports_plugins, {
695339
695382
  VALID_UPDATE_SCOPES: () => VALID_UPDATE_SCOPES,
695340
695383
  VALID_INSTALLABLE_SCOPES: () => VALID_INSTALLABLE_SCOPES
695341
695384
  });
695342
- import { basename as basename63, dirname as dirname73 } from "path";
695385
+ import { basename as basename63, dirname as dirname74 } from "path";
695343
695386
  function handleMarketplaceError(error54, action2) {
695344
695387
  logError2(error54);
695345
695388
  cliError(`${figures_default.cross} Failed to ${action2}: ${errorMessage(error54)}`);
@@ -695372,9 +695415,9 @@ async function pluginValidateHandler(manifestPath, options) {
695372
695415
  printValidationResult(result);
695373
695416
  let contentResults = [];
695374
695417
  if (result.fileType === "plugin") {
695375
- const manifestDir = dirname73(result.filePath);
695418
+ const manifestDir = dirname74(result.filePath);
695376
695419
  if (basename63(manifestDir) === ".claude-plugin") {
695377
- contentResults = await validatePluginContents(dirname73(manifestDir));
695420
+ contentResults = await validatePluginContents(dirname74(manifestDir));
695378
695421
  for (const r2 of contentResults) {
695379
695422
  console.log(`Validating ${r2.fileType}: ${r2.filePath}
695380
695423
  `);
@@ -697450,7 +697493,7 @@ ${customInstructions}` : customInstructions;
697450
697493
  }
697451
697494
  }
697452
697495
  logForDiagnosticsNoPII("info", "started", {
697453
- version: "1.3.435",
697496
+ version: "1.3.436",
697454
697497
  is_native_binary: isInBundledMode()
697455
697498
  });
697456
697499
  registerCleanup(async () => {
@@ -698169,7 +698212,7 @@ Usage: rayu --remote "your task description"`, () => gracefulShutdown(1));
698169
698212
  pendingHookMessages
698170
698213
  }, renderAndRun);
698171
698214
  }
698172
- }).version("1.3.435 (Rayu-CLI)", "-v, --version", "Output the version number");
698215
+ }).version("1.3.436 (Rayu-CLI)", "-v, --version", "Output the version number");
698173
698216
  program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
698174
698217
  program.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
698175
698218
  if (canUserConfigureAdvisor()) {
@@ -698635,7 +698678,7 @@ if (false) {}
698635
698678
  async function main2() {
698636
698679
  const args = process.argv.slice(2);
698637
698680
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
698638
- console.log(`${"1.3.435"} (Rayu-CLI)`);
698681
+ console.log(`${"1.3.436"} (Rayu-CLI)`);
698639
698682
  return;
698640
698683
  }
698641
698684
  const {