@rayu-dev/rayu-cli 1.3.435 → 1.3.436

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 +305 -281
  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,
@@ -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);
@@ -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}`);
@@ -526632,7 +526657,7 @@ __export(exports_terminalSetup, {
526632
526657
  import { randomBytes as randomBytes14 } from "crypto";
526633
526658
  import { copyFile as copyFile8, mkdir as mkdir28, readFile as readFile36, writeFile as writeFile28 } from "fs/promises";
526634
526659
  import { homedir as homedir27, platform as platform3 } from "os";
526635
- import { dirname as dirname54, join as join112 } from "path";
526660
+ import { dirname as dirname55, join as join112 } from "path";
526636
526661
  import { pathToFileURL as pathToFileURL7 } from "url";
526637
526662
  function isVSCodeRemoteSSH() {
526638
526663
  const askpassMain = process.env.VSCODE_GIT_ASKPASS_MAIN ?? "";
@@ -526954,7 +526979,7 @@ chars = "\\u001B\\r"`;
526954
526979
  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
526980
  }
526956
526981
  } else {
526957
- await mkdir28(dirname54(configPath2), {
526982
+ await mkdir28(dirname55(configPath2), {
526958
526983
  recursive: true
526959
526984
  });
526960
526985
  }
@@ -529419,7 +529444,7 @@ var init_TextInput = __esm(() => {
529419
529444
  });
529420
529445
 
529421
529446
  // src/utils/suggestions/directoryCompletion.ts
529422
- import { basename as basename39, dirname as dirname55, join as join115, sep as sep32 } from "path";
529447
+ import { basename as basename39, dirname as dirname56, join as join115, sep as sep32 } from "path";
529423
529448
  function parsePartialPath(partialPath, basePath) {
529424
529449
  if (!partialPath) {
529425
529450
  const directory2 = basePath || getCwd();
@@ -529429,7 +529454,7 @@ function parsePartialPath(partialPath, basePath) {
529429
529454
  if (partialPath.endsWith("/") || partialPath.endsWith(sep32)) {
529430
529455
  return { directory: resolved, prefix: "" };
529431
529456
  }
529432
- const directory = dirname55(resolved);
529457
+ const directory = dirname56(resolved);
529433
529458
  const prefix = basename39(partialPath);
529434
529459
  return { directory, prefix };
529435
529460
  }
@@ -531081,7 +531106,7 @@ function Feedback({
531081
531106
  platform: env4.platform,
531082
531107
  gitRepo: envInfo.isGit,
531083
531108
  terminal: env4.terminal,
531084
- version: "1.3.435",
531109
+ version: "1.3.436",
531085
531110
  transcript: normalizeMessagesForAPI(messages),
531086
531111
  errors: sanitizedErrors,
531087
531112
  lastApiRequest: getLastAPIRequest(),
@@ -531273,7 +531298,7 @@ function Feedback({
531273
531298
  ", ",
531274
531299
  env4.terminal,
531275
531300
  ", v",
531276
- "1.3.435"
531301
+ "1.3.436"
531277
531302
  ]
531278
531303
  }, undefined, true, undefined, this)
531279
531304
  ]
@@ -531379,7 +531404,7 @@ ${sanitizedDescription}
531379
531404
  ` + `**Environment Info**
531380
531405
  ` + `- Platform: ${env4.platform}
531381
531406
  ` + `- Terminal: ${env4.terminal}
531382
- ` + `- Version: ${"1.3.435"}
531407
+ ` + `- Version: ${"1.3.436"}
531383
531408
  ` + `- Feedback ID: ${feedbackId}
531384
531409
  ` + `
531385
531410
  **Errors**
@@ -534219,9 +534244,9 @@ async function assertMinVersion() {
534219
534244
  if (false) {}
534220
534245
  try {
534221
534246
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
534222
- if (versionConfig.minVersion && lt("1.3.435", versionConfig.minVersion)) {
534247
+ if (versionConfig.minVersion && lt("1.3.436", versionConfig.minVersion)) {
534223
534248
  console.error(`
534224
- It looks like your version of RAYU (${"1.3.435"}) needs an update.
534249
+ It looks like your version of RAYU (${"1.3.436"}) needs an update.
534225
534250
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
534226
534251
 
534227
534252
  To update, please run:
@@ -534447,7 +534472,7 @@ async function installGlobalPackage(specificVersion) {
534447
534472
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
534448
534473
  logEvent("tengu_auto_updater_lock_contention", {
534449
534474
  pid: process.pid,
534450
- currentVersion: "1.3.435"
534475
+ currentVersion: "1.3.436"
534451
534476
  });
534452
534477
  return "in_progress";
534453
534478
  }
@@ -534456,7 +534481,7 @@ async function installGlobalPackage(specificVersion) {
534456
534481
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
534457
534482
  logError2(new Error("Windows NPM detected in WSL environment"));
534458
534483
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
534459
- currentVersion: "1.3.435"
534484
+ currentVersion: "1.3.436"
534460
534485
  });
534461
534486
  console.error(`
534462
534487
  Error: Windows NPM detected in WSL
@@ -534992,7 +535017,7 @@ function detectLinuxGlobPatternWarnings() {
534992
535017
  }
534993
535018
  async function getDoctorDiagnostic() {
534994
535019
  const installationType = await getCurrentInstallationType();
534995
- const version2 = typeof MACRO !== "undefined" ? "1.3.435" : "unknown";
535020
+ const version2 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
534996
535021
  const installationPath = await getInstallationPath();
534997
535022
  const invokedBinary = getInvokedBinary();
534998
535023
  const multipleInstallations = await detectMultipleInstallations();
@@ -535524,7 +535549,7 @@ import {
535524
535549
  writeFile as writeFile35
535525
535550
  } from "fs/promises";
535526
535551
  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";
535552
+ import { basename as basename41, delimiter as delimiter4, dirname as dirname58, join as join126, resolve as resolve45 } from "path";
535528
535553
  function getPlatform3() {
535529
535554
  const os7 = env4.platform;
535530
535555
  const arch = process.arch === "x64" ? "x64" : process.arch === "arm64" ? "arm64" : null;
@@ -535567,7 +535592,7 @@ async function getVersionPaths(version2) {
535567
535592
  const dirs = getBaseDirectories();
535568
535593
  const dirsToCreate = [dirs.versions, dirs.staging, dirs.locks];
535569
535594
  await Promise.all(dirsToCreate.map((dir) => mkdir31(dir, { recursive: true })));
535570
- const executableParentDir = dirname57(dirs.executable);
535595
+ const executableParentDir = dirname58(dirs.executable);
535571
535596
  await mkdir31(executableParentDir, { recursive: true });
535572
535597
  const installPath = join126(dirs.versions, version2);
535573
535598
  try {
@@ -535661,7 +535686,7 @@ async function tryWithVersionLock(versionFilePath, callback, retries = 0) {
535661
535686
  }
535662
535687
  }
535663
535688
  async function atomicMoveToInstallPath(stagedBinaryPath, installPath) {
535664
- await mkdir31(dirname57(installPath), { recursive: true });
535689
+ await mkdir31(dirname58(installPath), { recursive: true });
535665
535690
  const tempInstallPath = `${installPath}.tmp.${process.pid}.${Date.now()}`;
535666
535691
  try {
535667
535692
  await copyFile9(stagedBinaryPath, tempInstallPath);
@@ -535787,8 +535812,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
535787
535812
  const maxVersion = await getMaxVersion();
535788
535813
  if (maxVersion && gt(version2, maxVersion)) {
535789
535814
  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`);
535815
+ if (gte("1.3.436", maxVersion)) {
535816
+ logForDebugging(`Native installer: current version ${"1.3.436"} is already at or above maxVersion ${maxVersion}, skipping update`);
535792
535817
  logEvent("tengu_native_update_skipped_max_version", {
535793
535818
  latency_ms: Date.now() - startTime,
535794
535819
  max_version: maxVersion,
@@ -535799,7 +535824,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
535799
535824
  version2 = maxVersion;
535800
535825
  }
535801
535826
  }
535802
- if (!forceReinstall && version2 === "1.3.435" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
535827
+ if (!forceReinstall && version2 === "1.3.436" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
535803
535828
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
535804
535829
  logEvent("tengu_native_update_complete", {
535805
535830
  latency_ms: Date.now() - startTime,
@@ -535875,7 +535900,7 @@ async function updateSymlink(symlinkPath, targetPath) {
535875
535900
  const isWindows2 = platform4.startsWith("win32");
535876
535901
  if (isWindows2) {
535877
535902
  try {
535878
- const parentDir2 = dirname57(symlinkPath);
535903
+ const parentDir2 = dirname58(symlinkPath);
535879
535904
  await mkdir31(parentDir2, { recursive: true });
535880
535905
  let existingStats;
535881
535906
  try {
@@ -535921,7 +535946,7 @@ async function updateSymlink(symlinkPath, targetPath) {
535921
535946
  return false;
535922
535947
  }
535923
535948
  }
535924
- const parentDir = dirname57(symlinkPath);
535949
+ const parentDir = dirname58(symlinkPath);
535925
535950
  try {
535926
535951
  await mkdir31(parentDir, { recursive: true });
535927
535952
  logForDebugging(`Created directory ${parentDir} for symlink`);
@@ -535938,7 +535963,7 @@ async function updateSymlink(symlinkPath, targetPath) {
535938
535963
  if (symlinkExists) {
535939
535964
  try {
535940
535965
  const currentTarget = await readlink3(symlinkPath);
535941
- const resolvedCurrentTarget = resolve45(dirname57(symlinkPath), currentTarget);
535966
+ const resolvedCurrentTarget = resolve45(dirname58(symlinkPath), currentTarget);
535942
535967
  const resolvedTargetPath = resolve45(targetPath);
535943
535968
  if (resolvedCurrentTarget === resolvedTargetPath) {
535944
535969
  return false;
@@ -535978,7 +536003,7 @@ async function checkInstall(force = false) {
535978
536003
  }
535979
536004
  const dirs = getBaseDirectories();
535980
536005
  const messages = [];
535981
- const localBinDir = dirname57(dirs.executable);
536006
+ const localBinDir = dirname58(dirs.executable);
535982
536007
  const resolvedLocalBinPath = resolve45(localBinDir);
535983
536008
  const platform4 = getPlatform3();
535984
536009
  const isWindows2 = platform4.startsWith("win32");
@@ -536002,7 +536027,7 @@ async function checkInstall(force = false) {
536002
536027
  } else {
536003
536028
  try {
536004
536029
  const target = await readlink3(dirs.executable);
536005
- const absoluteTarget = resolve45(dirname57(dirs.executable), target);
536030
+ const absoluteTarget = resolve45(dirname58(dirs.executable), target);
536006
536031
  if (!await isPossibleClaudeBinary(absoluteTarget)) {
536007
536032
  messages.push({
536008
536033
  message: `Claude symlink points to missing or invalid binary: ${target}`,
@@ -536109,7 +536134,7 @@ async function installLatestImpl(channelOrVersion, forceReinstall = false) {
536109
536134
  async function getVersionFromSymlink(symlinkPath) {
536110
536135
  try {
536111
536136
  const target = await readlink3(symlinkPath);
536112
- const absoluteTarget = resolve45(dirname57(symlinkPath), target);
536137
+ const absoluteTarget = resolve45(dirname58(symlinkPath), target);
536113
536138
  if (await isPossibleClaudeBinary(absoluteTarget)) {
536114
536139
  return absoluteTarget;
536115
536140
  }
@@ -536204,7 +536229,7 @@ async function cleanupOldVersions() {
536204
536229
  const dirs = getBaseDirectories();
536205
536230
  const oneHourAgo = Date.now() - 3600000;
536206
536231
  if (getPlatform3().startsWith("win32")) {
536207
- const executableDir = dirname57(dirs.executable);
536232
+ const executableDir = dirname58(dirs.executable);
536208
536233
  try {
536209
536234
  const files2 = await readdir24(executableDir);
536210
536235
  let cleanedCount = 0;
@@ -536995,7 +537020,7 @@ function buildPrimarySection() {
536995
537020
  }, undefined, false, undefined, this);
536996
537021
  return [{
536997
537022
  label: "Version",
536998
- value: "1.3.435"
537023
+ value: "1.3.436"
536999
537024
  }, {
537000
537025
  label: "Session name",
537001
537026
  value: nameValue
@@ -540686,7 +540711,7 @@ function Config({
540686
540711
  }
540687
540712
  }, undefined, false, undefined, this)
540688
540713
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime170.jsxDEV(ChannelDowngradeDialog, {
540689
- currentVersion: "1.3.435",
540714
+ currentVersion: "1.3.436",
540690
540715
  onChoice: (choice) => {
540691
540716
  setShowSubmenu(null);
540692
540717
  setTabsHidden(false);
@@ -540698,7 +540723,7 @@ function Config({
540698
540723
  autoUpdatesChannel: "stable"
540699
540724
  };
540700
540725
  if (choice === "stay") {
540701
- newSettings.minimumVersion = "1.3.435";
540726
+ newSettings.minimumVersion = "1.3.436";
540702
540727
  }
540703
540728
  updateSettingsForSource("userSettings", newSettings);
540704
540729
  setSettingsData((prev_27) => ({
@@ -548760,7 +548785,7 @@ function HelpV2(t0) {
548760
548785
  let t6;
548761
548786
  if ($3[31] !== tabs) {
548762
548787
  t6 = /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Tabs, {
548763
- title: `Rayu-CLI v${"1.3.435"}`,
548788
+ title: `Rayu-CLI v${"1.3.436"}`,
548764
548789
  color: "professionalBlue",
548765
548790
  defaultTab: "general",
548766
548791
  children: tabs
@@ -549799,7 +549824,7 @@ var init_ide3 = __esm(() => {
549799
549824
  });
549800
549825
 
549801
549826
  // src/commands/init.ts
549802
- import { existsSync as existsSync22, writeFileSync as writeFileSync11 } from "fs";
549827
+ import { existsSync as existsSync22, writeFileSync as writeFileSync12 } from "fs";
549803
549828
  import { join as join129 } from "path";
549804
549829
  function ensureRayuMd() {
549805
549830
  try {
@@ -549807,7 +549832,7 @@ function ensureRayuMd() {
549807
549832
  if (existsSync22(join129(cwd2, "RAYU.md"))) {
549808
549833
  return;
549809
549834
  }
549810
- writeFileSync11(join129(cwd2, "RAYU.md"), RAYU_MD_SCAFFOLD, { flag: "wx" });
549835
+ writeFileSync12(join129(cwd2, "RAYU.md"), RAYU_MD_SCAFFOLD, { flag: "wx" });
549811
549836
  } catch {}
549812
549837
  }
549813
549838
  var RAYU_MD_SCAFFOLD = `# RAYU.md
@@ -550158,7 +550183,7 @@ ${taskLine}
550158
550183
 
550159
550184
  ## Your role: PURE ORCHESTRATOR — you do NOT write code
550160
550185
  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.
550186
+ - 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
550187
  - DECOMPOSE and ASSIGN the work to the right Collaborators (implementers) and Subagents (one-shot helpers).
550163
550188
  - CHECK and verify their results (via the \`review\` subagent and by reading their outputs) and integrate them.
550164
550189
  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 +550192,17 @@ Keep going until the task is fully resolved; state assumptions and continue —
550167
550192
  ## The three tiers
550168
550193
  - **You (Orchestrator)** — scope, plan, own SharedContext, coordinate, integrate. You delegate all implementation; you call only the orchestrator-level subagents directly.
550169
550194
  - **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).
550195
+ - **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
550196
 
550172
550197
  ## Subagent specialization matrix (who may call what)
550173
550198
  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.
550199
+ - **You (Orchestrator):** planner, global-setup, design, backend-design, asset-generation, review, fix, linter, Explore, general-purpose.
550175
550200
  - **frontend:** design, asset-generation, review, fix, linter, Explore, general-purpose. (NOT backend-design.)
550176
550201
  - **backend:** backend-design, review, fix, linter, Explore, general-purpose. (NOT design or asset-generation.)
550177
550202
  - **mobile:** design, asset-generation, backend-design, review, fix, linter, Explore, general-purpose.
550178
550203
  - **security:** backend-design, review, fix, linter, Explore, general-purpose.
550179
550204
  - **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.)
550205
+ \`planner\` and \`global-setup\` are ORCHESTRATOR-ONLY — collaborators implement; they never re-plan or re-scaffold. (These limits are also enforced in code.)
550181
550206
 
550182
550207
  ## Bundled skills (use them — no install needed)
550183
550208
  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 +550215,13 @@ Parallel execution is ~3–5x faster than sequential. Unless one call genuinely
550190
550215
  - 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
550216
 
550192
550217
  ## The 3-phase build flow
550193
- ### Phase 1 — Scope & Research (you + PA, in the foreground)
550218
+ ### Phase 1 — Scope & Research (you + planner, in the foreground)
550194
550219
  - 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.
550220
+ - 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
550221
 
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.)
550222
+ ### Phase 2 — One aligned plan (planner → you → user)
550223
+ - 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.
550224
+ - 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
550225
 
550201
550226
  ### Phase 3 — Build (decompose by specialty; run as a dependency graph, not fixed waves)
550202
550227
  1. **Setup gate (one short step):** for a new project, run \`global-setup\` to scaffold the FE+BE folder structure + tooling.
@@ -550225,7 +550250,7 @@ Parallel execution is ~3–5x faster than sequential. Unless one call genuinely
550225
550250
  ## Finish
550226
550251
  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
550252
 
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.`
550253
+ 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
550254
  }
550230
550255
  ];
550231
550256
  }
@@ -550295,7 +550320,7 @@ __export(exports_keybindings, {
550295
550320
  call: () => call18
550296
550321
  });
550297
550322
  import { mkdir as mkdir34, writeFile as writeFile37 } from "fs/promises";
550298
- import { dirname as dirname58 } from "path";
550323
+ import { dirname as dirname59 } from "path";
550299
550324
  async function call18() {
550300
550325
  if (!isKeybindingCustomizationEnabled()) {
550301
550326
  return {
@@ -550305,7 +550330,7 @@ async function call18() {
550305
550330
  }
550306
550331
  const keybindingsPath = getKeybindingsPath();
550307
550332
  let fileExists2 = false;
550308
- await mkdir34(dirname58(keybindingsPath), { recursive: true });
550333
+ await mkdir34(dirname59(keybindingsPath), { recursive: true });
550309
550334
  try {
550310
550335
  await writeFile37(keybindingsPath, generateKeybindingsTemplate(), {
550311
550336
  encoding: "utf-8",
@@ -557415,7 +557440,7 @@ var init_DiscoverPlugins = __esm(() => {
557415
557440
  });
557416
557441
 
557417
557442
  // src/services/plugins/pluginOperations.ts
557418
- import { dirname as dirname59, join as join132 } from "path";
557443
+ import { dirname as dirname60, join as join132 } from "path";
557419
557444
  function assertInstallableScope(scope) {
557420
557445
  if (!VALID_INSTALLABLE_SCOPES.includes(scope)) {
557421
557446
  throw new Error(`Invalid scope "${scope}". Must be one of: ${VALID_INSTALLABLE_SCOPES.join(", ")}`);
@@ -557892,7 +557917,7 @@ async function performPluginUpdate({
557892
557917
  }
557893
557918
  throw e2;
557894
557919
  }
557895
- const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname59(marketplaceInstallLocation);
557920
+ const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname60(marketplaceInstallLocation);
557896
557921
  sourcePath = join132(marketplaceDir, entry.source);
557897
557922
  try {
557898
557923
  await fs14.stat(sourcePath);
@@ -566864,7 +566889,7 @@ var init_server = __esm(() => {
566864
566889
  });
566865
566890
 
566866
566891
  // src/telegram/telegramConfig.ts
566867
- import { existsSync as existsSync23, mkdirSync as mkdirSync11, readFileSync as readFileSync26, writeFileSync as writeFileSync12 } from "fs";
566892
+ import { existsSync as existsSync23, mkdirSync as mkdirSync12, readFileSync as readFileSync26, writeFileSync as writeFileSync13 } from "fs";
566868
566893
  import { join as join136 } from "path";
566869
566894
  function configPath2() {
566870
566895
  return join136(getRayuConfigHomeDir(), "telegram.json");
@@ -566895,8 +566920,8 @@ function readTelegramConfig() {
566895
566920
  function writeTelegramConfig(config5) {
566896
566921
  const dir = getRayuConfigHomeDir();
566897
566922
  if (!existsSync23(dir))
566898
- mkdirSync11(dir, { recursive: true });
566899
- writeFileSync12(configPath2(), JSON.stringify(config5, null, 2), { mode: 384 });
566923
+ mkdirSync12(dir, { recursive: true });
566924
+ writeFileSync13(configPath2(), JSON.stringify(config5, null, 2), { mode: 384 });
566900
566925
  }
566901
566926
  function setPendingToken(token, ttlMs) {
566902
566927
  const next = {
@@ -568693,7 +568718,7 @@ var init_transcriptSearch = __esm(() => {
568693
568718
 
568694
568719
  // src/utils/releaseNotes.ts
568695
568720
  import { mkdir as mkdir35, readFile as readFile46, writeFile as writeFile40 } from "fs/promises";
568696
- import { dirname as dirname61, join as join137 } from "path";
568721
+ import { dirname as dirname62, join as join137 } from "path";
568697
568722
  function getChangelogCachePath() {
568698
568723
  return join137(getRayuConfigHomeDir(), "cache", "changelog.md");
568699
568724
  }
@@ -568704,7 +568729,7 @@ async function migrateChangelogFromConfig() {
568704
568729
  }
568705
568730
  const cachePath = getChangelogCachePath();
568706
568731
  try {
568707
- await mkdir35(dirname61(cachePath), { recursive: true });
568732
+ await mkdir35(dirname62(cachePath), { recursive: true });
568708
568733
  await writeFile40(cachePath, config5.cachedChangelog, {
568709
568734
  encoding: "utf-8",
568710
568735
  flag: "wx"
@@ -568726,7 +568751,7 @@ async function fetchAndStoreChangelog() {
568726
568751
  return;
568727
568752
  }
568728
568753
  const cachePath = getChangelogCachePath();
568729
- await mkdir35(dirname61(cachePath), { recursive: true });
568754
+ await mkdir35(dirname62(cachePath), { recursive: true });
568730
568755
  await writeFile40(cachePath, changelogContent, { encoding: "utf-8" });
568731
568756
  changelogMemoryCache = changelogContent;
568732
568757
  const changelogLastFetched = Date.now();
@@ -568795,7 +568820,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
568795
568820
  }
568796
568821
  return [];
568797
568822
  }
568798
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.435") {
568823
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.436") {
568799
568824
  if (false) {}
568800
568825
  const cachedChangelog = await getStoredChangelog();
568801
568826
  if (lastSeenVersion !== currentVersion || !cachedChangelog) {
@@ -568808,7 +568833,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.435")
568808
568833
  releaseNotes
568809
568834
  };
568810
568835
  }
568811
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.3.435") {
568836
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.3.436") {
568812
568837
  if (false) {}
568813
568838
  const releaseNotes = getRecentReleaseNotes(currentVersion, lastSeenVersion);
568814
568839
  return {
@@ -568936,7 +568961,7 @@ function getRecentActivitySync() {
568936
568961
  return cachedActivity;
568937
568962
  }
568938
568963
  function getLogoDisplayData() {
568939
- const version2 = process.env.DEMO_VERSION ?? "1.3.435";
568964
+ const version2 = process.env.DEMO_VERSION ?? "1.3.436";
568940
568965
  const serverUrl = getDirectConnectServerUrl();
568941
568966
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
568942
568967
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -570183,7 +570208,7 @@ function LogoV2() {
570183
570208
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
570184
570209
  t2 = () => {
570185
570210
  const currentConfig = getGlobalConfig();
570186
- if (currentConfig.lastReleaseNotesSeen === "1.3.435") {
570211
+ if (currentConfig.lastReleaseNotesSeen === "1.3.436") {
570187
570212
  return;
570188
570213
  }
570189
570214
  saveGlobalConfig(_temp327);
@@ -570661,7 +570686,7 @@ function LogoV2() {
570661
570686
  t24 = $3[61];
570662
570687
  }
570663
570688
  const _latestNpm = getCachedLatestNpmVersionSync();
570664
- const _updateFeeds = _latestNpm && gt(_latestNpm, "1.3.435") ? [createUpdateAvailableFeed("1.3.435", _latestNpm)] : [];
570689
+ const _updateFeeds = _latestNpm && gt(_latestNpm, "1.3.436") ? [createUpdateAvailableFeed("1.3.436", _latestNpm)] : [];
570665
570690
  const t25 = layoutMode === "horizontal" && /* @__PURE__ */ jsx_dev_runtime239.jsxDEV(FeedColumn, {
570666
570691
  feeds: showOnboarding ? [createProjectOnboardingFeed(getSteps()), createRecentActivityFeed(activities)] : showGuestPassesUpsell ? [createRecentActivityFeed(activities), createGuestPassesFeed()] : showOverageCreditUpsell ? [createRecentActivityFeed(activities), createOverageCreditFeed()] : [createRecentActivityFeed(activities), ..._updateFeeds, createWhatsNewFeed(changelog)],
570667
570692
  maxWidth: rightWidth
@@ -570861,12 +570886,12 @@ function LogoV2() {
570861
570886
  return t41;
570862
570887
  }
570863
570888
  function _temp327(current) {
570864
- if (current.lastReleaseNotesSeen === "1.3.435") {
570889
+ if (current.lastReleaseNotesSeen === "1.3.436") {
570865
570890
  return current;
570866
570891
  }
570867
570892
  return {
570868
570893
  ...current,
570869
- lastReleaseNotesSeen: "1.3.435"
570894
+ lastReleaseNotesSeen: "1.3.436"
570870
570895
  };
570871
570896
  }
570872
570897
  function _temp241(s_0) {
@@ -595678,7 +595703,7 @@ var init_rewind = __esm(() => {
595678
595703
  });
595679
595704
 
595680
595705
  // src/utils/heapDumpService.ts
595681
- import { createWriteStream as createWriteStream4, writeFileSync as writeFileSync13 } from "fs";
595706
+ import { createWriteStream as createWriteStream4, writeFileSync as writeFileSync14 } from "fs";
595682
595707
  import { readdir as readdir27, readFile as readFile49, writeFile as writeFile42 } from "fs/promises";
595683
595708
  import { join as join141 } from "path";
595684
595709
  import { pipeline as pipeline4 } from "stream/promises";
@@ -595770,7 +595795,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
595770
595795
  smapsRollup,
595771
595796
  platform: process.platform,
595772
595797
  nodeVersion: process.version,
595773
- ccVersion: "1.3.435"
595798
+ ccVersion: "1.3.436"
595774
595799
  };
595775
595800
  }
595776
595801
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -595817,7 +595842,7 @@ async function performHeapDump(trigger = "manual", dumpNumber = 0) {
595817
595842
  }
595818
595843
  async function writeHeapSnapshot(filepath) {
595819
595844
  if (typeof Bun !== "undefined") {
595820
- writeFileSync13(filepath, Bun.generateHeapSnapshot("v8", "arraybuffer"), {
595845
+ writeFileSync14(filepath, Bun.generateHeapSnapshot("v8", "arraybuffer"), {
595821
595846
  mode: 384
595822
595847
  });
595823
595848
  Bun.gc(true);
@@ -596292,7 +596317,7 @@ var init_bridge_kick = __esm(() => {
596292
596317
  var call49 = async () => {
596293
596318
  return {
596294
596319
  type: "text",
596295
- value: "1.3.435"
596320
+ value: "1.3.436"
596296
596321
  };
596297
596322
  }, version2, version_default;
596298
596323
  var init_version = __esm(() => {
@@ -597588,10 +597613,10 @@ var init_contactMe2 = __esm(() => {
597588
597613
  import {
597589
597614
  chmodSync as chmodSync5,
597590
597615
  existsSync as existsSync24,
597591
- mkdirSync as mkdirSync12,
597616
+ mkdirSync as mkdirSync13,
597592
597617
  readFileSync as readFileSync27,
597593
597618
  rmSync as rmSync5,
597594
- writeFileSync as writeFileSync14
597619
+ writeFileSync as writeFileSync15
597595
597620
  } from "fs";
597596
597621
  import { join as join142 } from "path";
597597
597622
  function isUseRayuOAuthEnabled() {
@@ -597619,9 +597644,9 @@ function readRayuSession() {
597619
597644
  function writeRayuSession(store) {
597620
597645
  const dir = getRayuConfigHomeDir();
597621
597646
  if (!existsSync24(dir))
597622
- mkdirSync12(dir, { recursive: true });
597647
+ mkdirSync13(dir, { recursive: true });
597623
597648
  const p = sessionPath();
597624
- writeFileSync14(p, JSON.stringify(store, null, 2), { mode: 384 });
597649
+ writeFileSync15(p, JSON.stringify(store, null, 2), { mode: 384 });
597625
597650
  try {
597626
597651
  chmodSync5(p, 384);
597627
597652
  } catch {}
@@ -597963,7 +597988,7 @@ var init_advisor2 = __esm(() => {
597963
597988
  // src/skills/bundledSkills.ts
597964
597989
  import { constants as fsConstants5 } from "fs";
597965
597990
  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";
597991
+ import { dirname as dirname63, isAbsolute as isAbsolute33, join as join143, normalize as normalize16, sep as pathSep2 } from "path";
597967
597992
  function registerBundledSkill(definition) {
597968
597993
  const { files: files3 } = definition;
597969
597994
  let skillRoot;
@@ -598027,7 +598052,7 @@ async function writeSkillFiles(dir, files3) {
598027
598052
  const byParent = new Map;
598028
598053
  for (const [relPath, content] of Object.entries(files3)) {
598029
598054
  const target = resolveSkillFilePath(dir, relPath);
598030
- const parent2 = dirname62(target);
598055
+ const parent2 = dirname63(target);
598031
598056
  const entry = [target, content];
598032
598057
  const group = byParent.get(parent2);
598033
598058
  if (group)
@@ -598775,10 +598800,10 @@ __export(exports_googleOAuth, {
598775
598800
  import {
598776
598801
  chmodSync as chmodSync6,
598777
598802
  existsSync as existsSync25,
598778
- mkdirSync as mkdirSync13,
598803
+ mkdirSync as mkdirSync14,
598779
598804
  readFileSync as readFileSync28,
598780
598805
  rmSync as rmSync6,
598781
- writeFileSync as writeFileSync15
598806
+ writeFileSync as writeFileSync16
598782
598807
  } from "fs";
598783
598808
  import { createServer as createServer8 } from "http";
598784
598809
  import { join as join146 } from "path";
@@ -598804,9 +598829,9 @@ function readGeminiOAuthStore() {
598804
598829
  function writeGeminiOAuthStore(store) {
598805
598830
  const dir = getRayuConfigHomeDir();
598806
598831
  if (!existsSync25(dir))
598807
- mkdirSync13(dir, { recursive: true });
598832
+ mkdirSync14(dir, { recursive: true });
598808
598833
  const p = tokenPath2();
598809
- writeFileSync15(p, JSON.stringify(store, null, 2), { mode: 384 });
598834
+ writeFileSync16(p, JSON.stringify(store, null, 2), { mode: 384 });
598810
598835
  try {
598811
598836
  chmodSync6(p, 384);
598812
598837
  } catch {}
@@ -606068,7 +606093,7 @@ function generateHtmlReport(data, insights) {
606068
606093
  </html>`;
606069
606094
  }
606070
606095
  function buildExportData(data, insights, facets, remoteStats) {
606071
- const version3 = typeof MACRO !== "undefined" ? "1.3.435" : "unknown";
606096
+ const version3 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
606072
606097
  const remote_hosts_collected = remoteStats?.hosts.filter((h3) => h3.sessionCount > 0).map((h3) => h3.name);
606073
606098
  const facets_summary = {
606074
606099
  total: facets.size,
@@ -607153,7 +607178,7 @@ import {
607153
607178
  unlink as unlink23,
607154
607179
  writeFile as writeFile45
607155
607180
  } from "fs/promises";
607156
- import { basename as basename46, dirname as dirname64, join as join151 } from "path";
607181
+ import { basename as basename46, dirname as dirname65, join as join151 } from "path";
607157
607182
  function isTranscriptMessage(entry) {
607158
607183
  return entry.type === "user" || entry.type === "assistant" || entry.type === "attachment" || entry.type === "system";
607159
607184
  }
@@ -607198,7 +607223,7 @@ function getAgentMetadataPath(agentId) {
607198
607223
  }
607199
607224
  async function writeAgentMetadata(agentId, metadata) {
607200
607225
  const path28 = getAgentMetadataPath(agentId);
607201
- await mkdir41(dirname64(path28), { recursive: true });
607226
+ await mkdir41(dirname65(path28), { recursive: true });
607202
607227
  await writeFile45(path28, JSON.stringify(metadata));
607203
607228
  }
607204
607229
  async function readAgentMetadata(agentId) {
@@ -607221,7 +607246,7 @@ function getRemoteAgentMetadataPath(taskId) {
607221
607246
  }
607222
607247
  async function writeRemoteAgentMetadata(taskId, metadata) {
607223
607248
  const path28 = getRemoteAgentMetadataPath(taskId);
607224
- await mkdir41(dirname64(path28), { recursive: true });
607249
+ await mkdir41(dirname65(path28), { recursive: true });
607225
607250
  await writeFile45(path28, JSON.stringify(metadata));
607226
607251
  }
607227
607252
  async function readRemoteAgentMetadata(taskId) {
@@ -607410,7 +607435,7 @@ class Project {
607410
607435
  try {
607411
607436
  await fsAppendFile(filePath, data, { mode: 384 });
607412
607437
  } catch {
607413
- await mkdir41(dirname64(filePath), { recursive: true, mode: 448 });
607438
+ await mkdir41(dirname65(filePath), { recursive: true, mode: 448 });
607414
607439
  await fsAppendFile(filePath, data, { mode: 384 });
607415
607440
  }
607416
607441
  }
@@ -608009,7 +608034,7 @@ async function hydrateFromCCRv2InternalEvents(sessionId) {
608009
608034
  }
608010
608035
  for (const [agentId, entries] of byAgent) {
608011
608036
  const agentFile = getAgentTranscriptPath(asAgentId(agentId));
608012
- await mkdir41(dirname64(agentFile), { recursive: true, mode: 448 });
608037
+ await mkdir41(dirname65(agentFile), { recursive: true, mode: 448 });
608013
608038
  const agentContent = entries.map((p) => jsonStringify(p) + `
608014
608039
  `).join("");
608015
608040
  await writeFile45(agentFile, agentContent, {
@@ -608546,7 +608571,7 @@ function appendEntryToFile(fullPath, entry) {
608546
608571
  try {
608547
608572
  fs15.appendFileSync(fullPath, line, { mode: 384 });
608548
608573
  } catch {
608549
- fs15.mkdirSync(dirname64(fullPath), { mode: 448 });
608574
+ fs15.mkdirSync(dirname65(fullPath), { mode: 448 });
608550
608575
  fs15.appendFileSync(fullPath, line, { mode: 384 });
608551
608576
  }
608552
608577
  }
@@ -609976,7 +610001,7 @@ var init_sessionStorage = __esm(() => {
609976
610001
  init_settings2();
609977
610002
  init_slowOperations();
609978
610003
  init_uuid();
609979
- VERSION6 = typeof MACRO !== "undefined" ? "1.3.435" : "unknown";
610004
+ VERSION6 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
609980
610005
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
609981
610006
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
609982
610007
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -610293,7 +610318,6 @@ function loadAgentMemoryPrompt(agentType, scope) {
610293
610318
  break;
610294
610319
  }
610295
610320
  const memoryDir = getAgentMemoryDir(agentType, scope);
610296
- ensureMemoryDirExists(memoryDir);
610297
610321
  const coworkExtraGuidelines = process.env.CLAUDE_COWORK_MEMORY_EXTRA_GUIDELINES;
610298
610322
  return buildMemoryPrompt({
610299
610323
  displayName: "Persistent Agent Memory",
@@ -611197,7 +611221,7 @@ var init_filesystem = __esm(() => {
611197
611221
  });
611198
611222
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
611199
611223
  const nonce = randomBytes19(16).toString("hex");
611200
- return join153(getClaudeTempDir(), "bundled-skills", "1.3.435", nonce);
611224
+ return join153(getClaudeTempDir(), "bundled-skills", "1.3.436", nonce);
611201
611225
  });
611202
611226
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
611203
611227
  });
@@ -615490,7 +615514,7 @@ import {
615490
615514
  symlink as symlink5,
615491
615515
  utimes as utimes2
615492
615516
  } from "fs/promises";
615493
- import { basename as basename48, dirname as dirname65, join as join155 } from "path";
615517
+ import { basename as basename48, dirname as dirname66, join as join155 } from "path";
615494
615518
  function validateWorktreeSlug(slug) {
615495
615519
  if (slug.length > MAX_WORKTREE_SLUG_LENGTH) {
615496
615520
  throw new Error(`Invalid worktree name: must be ${MAX_WORKTREE_SLUG_LENGTH} characters or fewer (got ${slug.length})`);
@@ -615686,7 +615710,7 @@ async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
615686
615710
  const srcPath = join155(repoRoot, relativePath2);
615687
615711
  const destPath = join155(worktreePath, relativePath2);
615688
615712
  try {
615689
- await mkdir43(dirname65(destPath), { recursive: true });
615713
+ await mkdir43(dirname66(destPath), { recursive: true });
615690
615714
  await copyFile11(srcPath, destPath);
615691
615715
  copied.push(relativePath2);
615692
615716
  } catch (e2) {
@@ -615703,7 +615727,7 @@ async function performPostCreationSetup(repoRoot, worktreePath) {
615703
615727
  const sourceSettingsLocal = join155(repoRoot, localSettingsRelativePath);
615704
615728
  try {
615705
615729
  const destSettingsLocal = join155(worktreePath, localSettingsRelativePath);
615706
- await mkdirRecursive(dirname65(destSettingsLocal));
615730
+ await mkdirRecursive(dirname66(destSettingsLocal));
615707
615731
  await copyFile11(sourceSettingsLocal, destSettingsLocal);
615708
615732
  logForDebugging(`Copied settings.local.json to worktree: ${destSettingsLocal}`);
615709
615733
  } catch (e2) {
@@ -616312,7 +616336,7 @@ __export(exports_update, {
616312
616336
  import { execFileSync as execFileSync3 } from "node:child_process";
616313
616337
  import { homedir as homedir35 } from "os";
616314
616338
  async function update() {
616315
- writeToStdout(`Current version: ${"1.3.435"}
616339
+ writeToStdout(`Current version: ${"1.3.436"}
616316
616340
  `);
616317
616341
  const isBundled = isInBundledMode();
616318
616342
  if (isBundled) {
@@ -616338,13 +616362,13 @@ Manual check: npm view ${"@rayu-dev/rayu-cli"} version
616338
616362
  process.exit(1);
616339
616363
  return;
616340
616364
  }
616341
- if (latestVersion === "1.3.435") {
616365
+ if (latestVersion === "1.3.436") {
616342
616366
  writeToStdout(source_default.green(`
616343
- Rayu CLI is up to date (${"1.3.435"})
616367
+ Rayu CLI is up to date (${"1.3.436"})
616344
616368
  `));
616345
616369
  process.exit(0);
616346
616370
  }
616347
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.3.435"})
616371
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.3.436"})
616348
616372
  `);
616349
616373
  writeToStdout(`Installing update...
616350
616374
 
@@ -616368,7 +616392,7 @@ Try manually:
616368
616392
  return;
616369
616393
  }
616370
616394
  writeToStdout(source_default.green(`
616371
- Successfully updated from ${"1.3.435"} to ${latestVersion}
616395
+ Successfully updated from ${"1.3.436"} to ${latestVersion}
616372
616396
  `));
616373
616397
  process.exit(0);
616374
616398
  }
@@ -616382,14 +616406,14 @@ async function updateNativeBinary() {
616382
616406
  } catch {
616383
616407
  latestVersion = "";
616384
616408
  }
616385
- if (latestVersion && latestVersion === "1.3.435") {
616409
+ if (latestVersion && latestVersion === "1.3.436") {
616386
616410
  writeToStdout(source_default.green(`
616387
- Rayu CLI is up to date (1.3.435)
616411
+ Rayu CLI is up to date (1.3.436)
616388
616412
  `));
616389
616413
  process.exit(0);
616390
616414
  }
616391
616415
  if (latestVersion) {
616392
- writeToStdout(`New version available: ${latestVersion} (current: 1.3.435)
616416
+ writeToStdout(`New version available: ${latestVersion} (current: 1.3.436)
616393
616417
  `);
616394
616418
  }
616395
616419
  writeToStdout(`Downloading and installing update...
@@ -616404,13 +616428,13 @@ Rayu CLI is up to date (1.3.435)
616404
616428
  return;
616405
616429
  }
616406
616430
  writeToStdout(source_default.green(`
616407
- Rayu CLI is up to date (1.3.435)
616431
+ Rayu CLI is up to date (1.3.436)
616408
616432
  `));
616409
616433
  process.exit(0);
616410
616434
  }
616411
616435
  const updatedTo = result.latestVersion ?? latestVersion ?? "latest";
616412
616436
  writeToStdout(source_default.green(`
616413
- Successfully updated from 1.3.435 to ${updatedTo}
616437
+ Successfully updated from 1.3.436 to ${updatedTo}
616414
616438
  `));
616415
616439
  writeToStdout(`Restart your terminal to use the new version.
616416
616440
  `);
@@ -616441,7 +616465,7 @@ __export(exports_uninstall, {
616441
616465
  import { execFileSync as execFileSync4 } from "node:child_process";
616442
616466
  import { homedir as homedir36 } from "os";
616443
616467
  async function uninstall() {
616444
- writeToStdout(`Uninstalling Rayu CLI (${"1.3.435"})...
616468
+ writeToStdout(`Uninstalling Rayu CLI (${"1.3.436"})...
616445
616469
  `);
616446
616470
  writeToStdout(`Running: npm uninstall -g ${"@rayu-dev/rayu-cli"}
616447
616471
 
@@ -616464,7 +616488,7 @@ Try running manually:
616464
616488
  process.exit(1);
616465
616489
  }
616466
616490
  writeToStdout(source_default.green(`
616467
- Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.3.435"}
616491
+ Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.3.436"}
616468
616492
  `));
616469
616493
  writeToStdout(`Thanks for using Rayu CLI!
616470
616494
  `);
@@ -616479,7 +616503,7 @@ var exports_firstRun = {};
616479
616503
  __export(exports_firstRun, {
616480
616504
  showFirstRunWelcome: () => showFirstRunWelcome
616481
616505
  });
616482
- import { existsSync as existsSync26, mkdirSync as mkdirSync14, writeFileSync as writeFileSync16 } from "node:fs";
616506
+ import { existsSync as existsSync26, mkdirSync as mkdirSync15, writeFileSync as writeFileSync17 } from "node:fs";
616483
616507
  import { join as join156 } from "node:path";
616484
616508
  function markerPath() {
616485
616509
  return join156(getRayuConfigHomeDir(), ".installed");
@@ -616515,8 +616539,8 @@ function showFirstRunWelcome() {
616515
616539
  `) + `
616516
616540
  `);
616517
616541
  try {
616518
- mkdirSync14(getRayuConfigHomeDir(), { recursive: true });
616519
- writeFileSync16(markerPath(), "1.3.435", "utf8");
616542
+ mkdirSync15(getRayuConfigHomeDir(), { recursive: true });
616543
+ writeFileSync17(markerPath(), "1.3.436", "utf8");
616520
616544
  } catch {}
616521
616545
  }
616522
616546
  var init_firstRun = __esm(() => {
@@ -628359,7 +628383,7 @@ async function initializeBetaTracing(resource) {
628359
628383
  });
628360
628384
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
628361
628385
  setLoggerProvider(loggerProvider);
628362
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.435");
628386
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.436");
628363
628387
  setEventLogger(eventLogger);
628364
628388
  process.on("beforeExit", async () => {
628365
628389
  await loggerProvider?.forceFlush();
@@ -628399,7 +628423,7 @@ async function initializeTelemetry() {
628399
628423
  const platform4 = getPlatform();
628400
628424
  const baseAttributes = {
628401
628425
  [import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
628402
- [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.3.435"
628426
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.3.436"
628403
628427
  };
628404
628428
  if (platform4 === "wsl") {
628405
628429
  const wslVersion = getWslVersion();
@@ -628444,7 +628468,7 @@ async function initializeTelemetry() {
628444
628468
  } catch {}
628445
628469
  };
628446
628470
  registerCleanup(shutdownTelemetry2);
628447
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.3.435");
628471
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.3.436");
628448
628472
  }
628449
628473
  const meterProvider = new import_sdk_metrics2.MeterProvider({
628450
628474
  resource,
@@ -628464,7 +628488,7 @@ async function initializeTelemetry() {
628464
628488
  });
628465
628489
  import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
628466
628490
  setLoggerProvider(loggerProvider);
628467
- const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.435");
628491
+ const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.436");
628468
628492
  setEventLogger(eventLogger);
628469
628493
  logForDebugging("[3P telemetry] Event logger set successfully");
628470
628494
  process.on("beforeExit", async () => {
@@ -628526,7 +628550,7 @@ Current timeout: ${timeoutMs}ms
628526
628550
  }
628527
628551
  };
628528
628552
  registerCleanup(shutdownTelemetry);
628529
- return meterProvider.getMeter("com.anthropic.claude_code", "1.3.435");
628553
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.3.436");
628530
628554
  }
628531
628555
  async function flushTelemetry() {
628532
628556
  const meterProvider = getMeterProvider();
@@ -630039,7 +630063,7 @@ function buildSystemInitMessage(inputs) {
630039
630063
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
630040
630064
  apiKeySource: getAnthropicApiKeyWithSource().source,
630041
630065
  betas: getSdkBetas(),
630042
- claude_code_version: "1.3.435",
630066
+ claude_code_version: "1.3.436",
630043
630067
  output_style: outputStyle2,
630044
630068
  agents: inputs.agents.map((agent) => agent.agentType),
630045
630069
  skills: inputs.skills.filter((s2) => s2.userInvocable !== false).map((skill) => skill.name),
@@ -630842,7 +630866,7 @@ var EDIT_INTERVAL_MS = 1100, PLACEHOLDER = "\uD83D\uDCAC …";
630842
630866
 
630843
630867
  // src/telegram/telegramBridge.ts
630844
630868
  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";
630869
+ 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
630870
  import { join as join158 } from "path";
630847
630871
  function linkedChatId() {
630848
630872
  return readTelegramConfig().linkedChatId;
@@ -631107,7 +631131,7 @@ function acquireBridgeLock() {
631107
631131
  return false;
631108
631132
  }
631109
631133
  }
631110
- writeFileSync17(path28, content, { mode: 384 });
631134
+ writeFileSync18(path28, content, { mode: 384 });
631111
631135
  } catch {}
631112
631136
  return true;
631113
631137
  }
@@ -631119,7 +631143,7 @@ function updateHeartbeat() {
631119
631143
  const raw = readFileSync29(path28, "utf8").trim();
631120
631144
  const pid = parseInt(raw.split(":")[0] ?? "", 10);
631121
631145
  if (pid === process.pid) {
631122
- writeFileSync17(path28, buildLockContent(), { mode: 384 });
631146
+ writeFileSync18(path28, buildLockContent(), { mode: 384 });
631123
631147
  }
631124
631148
  } catch {}
631125
631149
  }
@@ -646249,7 +646273,7 @@ var init_useVoiceEnabled = __esm(() => {
646249
646273
  function getSemverPart(version3) {
646250
646274
  return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
646251
646275
  }
646252
- function useUpdateNotification(updatedVersion, initialVersion = "1.3.435") {
646276
+ function useUpdateNotification(updatedVersion, initialVersion = "1.3.436") {
646253
646277
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react217.useState(() => getSemverPart(initialVersion));
646254
646278
  if (!updatedVersion) {
646255
646279
  return null;
@@ -646289,7 +646313,7 @@ function AutoUpdater({
646289
646313
  return;
646290
646314
  }
646291
646315
  if (false) {}
646292
- const currentVersion = "1.3.435";
646316
+ const currentVersion = "1.3.436";
646293
646317
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
646294
646318
  let latestVersion = await getLatestVersion(channel);
646295
646319
  const isDisabled = isAutoUpdaterDisabled();
@@ -646502,12 +646526,12 @@ function NativeAutoUpdater({
646502
646526
  logEvent("tengu_native_auto_updater_start", {});
646503
646527
  try {
646504
646528
  const maxVersion = await getMaxVersion();
646505
- if (maxVersion && gt("1.3.435", maxVersion)) {
646529
+ if (maxVersion && gt("1.3.436", maxVersion)) {
646506
646530
  const msg = await getMaxVersionMessage();
646507
646531
  setMaxVersionIssue(msg ?? "affects your version");
646508
646532
  }
646509
646533
  const result = await installLatest(channel);
646510
- const currentVersion = "1.3.435";
646534
+ const currentVersion = "1.3.436";
646511
646535
  const latencyMs = Date.now() - startTime;
646512
646536
  if (result.lockFailed) {
646513
646537
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -646644,17 +646668,17 @@ function PackageManagerAutoUpdater(t0) {
646644
646668
  const maxVersion = await getMaxVersion();
646645
646669
  if (maxVersion && latest && gt(latest, maxVersion)) {
646646
646670
  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`);
646671
+ if (gte("1.3.436", maxVersion)) {
646672
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.3.436"} is already at or above maxVersion ${maxVersion}, skipping update`);
646649
646673
  setUpdateAvailable(false);
646650
646674
  return;
646651
646675
  }
646652
646676
  latest = maxVersion;
646653
646677
  }
646654
- const hasUpdate = latest && !gte("1.3.435", latest) && !shouldSkipVersion(latest);
646678
+ const hasUpdate = latest && !gte("1.3.436", latest) && !shouldSkipVersion(latest);
646655
646679
  setUpdateAvailable(!!hasUpdate);
646656
646680
  if (hasUpdate) {
646657
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.3.435"} -> ${latest}`);
646681
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.3.436"} -> ${latest}`);
646658
646682
  }
646659
646683
  };
646660
646684
  $3[0] = t1;
@@ -646688,7 +646712,7 @@ function PackageManagerAutoUpdater(t0) {
646688
646712
  wrap: "truncate",
646689
646713
  children: [
646690
646714
  "currentVersion: ",
646691
- "1.3.435"
646715
+ "1.3.436"
646692
646716
  ]
646693
646717
  }, undefined, true, undefined, this);
646694
646718
  $3[3] = verbose;
@@ -654853,7 +654877,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
654853
654877
  project_dir: getOriginalCwd(),
654854
654878
  added_dirs: addedDirs
654855
654879
  },
654856
- version: "1.3.435",
654880
+ version: "1.3.436",
654857
654881
  output_style: {
654858
654882
  name: outputStyleName
654859
654883
  },
@@ -664611,7 +664635,7 @@ __export(exports_asciicast, {
664611
664635
  _resetRecordingStateForTesting: () => _resetRecordingStateForTesting
664612
664636
  });
664613
664637
  import { appendFile as appendFile6, rename as rename13 } from "fs/promises";
664614
- import { basename as basename61, dirname as dirname66, join as join162 } from "path";
664638
+ import { basename as basename61, dirname as dirname67, join as join162 } from "path";
664615
664639
  function getRecordFilePath() {
664616
664640
  if (recordingState.filePath !== null) {
664617
664641
  return recordingState.filePath;
@@ -664693,7 +664717,7 @@ function installAsciicastRecorder() {
664693
664717
  }
664694
664718
  });
664695
664719
  try {
664696
- getFsImplementation().mkdirSync(dirname66(filePath));
664720
+ getFsImplementation().mkdirSync(dirname67(filePath));
664697
664721
  } catch {}
664698
664722
  getFsImplementation().appendFileSync(filePath, header + `
664699
664723
  `, { mode: 384 });
@@ -664762,7 +664786,7 @@ var init_asciicast = __esm(() => {
664762
664786
  });
664763
664787
 
664764
664788
  // src/utils/sessionRestore.ts
664765
- import { dirname as dirname67 } from "path";
664789
+ import { dirname as dirname68 } from "path";
664766
664790
  function extractTodosFromTranscript(messages) {
664767
664791
  for (let i4 = messages.length - 1;i4 >= 0; i4--) {
664768
664792
  const msg = messages[i4];
@@ -664887,7 +664911,7 @@ async function processResumedConversation(result, opts, context2) {
664887
664911
  if (!opts.forkSession) {
664888
664912
  const sid = opts.sessionIdOverride ?? result.sessionId;
664889
664913
  if (sid) {
664890
- switchSession(asSessionId(sid), opts.transcriptPath ? dirname67(opts.transcriptPath) : null);
664914
+ switchSession(asSessionId(sid), opts.transcriptPath ? dirname68(opts.transcriptPath) : null);
664891
664915
  await renameRecordingForSession();
664892
664916
  await resetSessionFilePointer();
664893
664917
  restoreCostStateForSession(sid);
@@ -666257,7 +666281,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
666257
666281
  } catch {}
666258
666282
  const data = {
666259
666283
  trigger,
666260
- version: "1.3.435",
666284
+ version: "1.3.436",
666261
666285
  platform: process.platform,
666262
666286
  transcript,
666263
666287
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -673735,7 +673759,7 @@ var exports_REPL = {};
673735
673759
  __export(exports_REPL, {
673736
673760
  REPL: () => REPL
673737
673761
  });
673738
- import { dirname as dirname68, join as join166 } from "path";
673762
+ import { dirname as dirname69, join as join166 } from "path";
673739
673763
  import { tmpdir as tmpdir16 } from "os";
673740
673764
  import { writeFile as writeFile47 } from "fs/promises";
673741
673765
  import { randomUUID as randomUUID52 } from "crypto";
@@ -674674,7 +674698,7 @@ function REPL({
674674
674698
  const targetSessionCosts = getStoredSessionCosts(sessionId);
674675
674699
  saveCurrentSessionCosts();
674676
674700
  resetCostState();
674677
- switchSession(asSessionId(sessionId), log3.fullPath ? dirname68(log3.fullPath) : null);
674701
+ switchSession(asSessionId(sessionId), log3.fullPath ? dirname69(log3.fullPath) : null);
674678
674702
  const {
674679
674703
  renameRecordingForSession: renameRecordingForSession2
674680
674704
  } = await Promise.resolve().then(() => (init_asciicast(), exports_asciicast));
@@ -678302,7 +678326,7 @@ function WelcomeV2() {
678302
678326
  dimColor: true,
678303
678327
  children: [
678304
678328
  "v",
678305
- "1.3.435"
678329
+ "1.3.436"
678306
678330
  ]
678307
678331
  }, undefined, true, undefined, this)
678308
678332
  ]
@@ -680036,7 +680060,7 @@ function completeOnboarding() {
680036
680060
  saveGlobalConfig((current) => ({
680037
680061
  ...current,
680038
680062
  hasCompletedOnboarding: true,
680039
- lastOnboardingVersion: "1.3.435"
680063
+ lastOnboardingVersion: "1.3.436"
680040
680064
  }));
680041
680065
  }
680042
680066
  function showDialog(root2, renderer) {
@@ -681181,7 +681205,7 @@ var exports_ResumeConversation = {};
681181
681205
  __export(exports_ResumeConversation, {
681182
681206
  ResumeConversation: () => ResumeConversation
681183
681207
  });
681184
- import { dirname as dirname69 } from "path";
681208
+ import { dirname as dirname70 } from "path";
681185
681209
  function parsePrIdentifier(value) {
681186
681210
  const directNumber = parseInt(value, 10);
681187
681211
  if (!isNaN(directNumber) && directNumber > 0) {
@@ -681313,7 +681337,7 @@ function ResumeConversation({
681313
681337
  }
681314
681338
  if (false) {}
681315
681339
  if (result_3.sessionId && !forkSession) {
681316
- switchSession(asSessionId(result_3.sessionId), log_0.fullPath ? dirname69(log_0.fullPath) : null);
681340
+ switchSession(asSessionId(result_3.sessionId), log_0.fullPath ? dirname70(log_0.fullPath) : null);
681317
681341
  await renameRecordingForSession();
681318
681342
  await resetSessionFilePointer();
681319
681343
  restoreCostStateForSession(result_3.sessionId);
@@ -684930,7 +684954,7 @@ var init_createDirectConnectSession = __esm(() => {
684930
684954
  });
684931
684955
 
684932
684956
  // src/utils/errorLogSink.ts
684933
- import { dirname as dirname70, join as join167 } from "path";
684957
+ import { dirname as dirname71, join as join167 } from "path";
684934
684958
  function getErrorsPath() {
684935
684959
  return join167(CACHE_PATHS.errors(), DATE + ".jsonl");
684936
684960
  }
@@ -684951,7 +684975,7 @@ function createJsonlWriter(options) {
684951
684975
  function getLogWriter(path30) {
684952
684976
  let writer = logWriters.get(path30);
684953
684977
  if (!writer) {
684954
- const dir = dirname70(path30);
684978
+ const dir = dirname71(path30);
684955
684979
  writer = createJsonlWriter({
684956
684980
  writeFn: (content) => {
684957
684981
  try {
@@ -684979,7 +685003,7 @@ function appendToLog(path30, message) {
684979
685003
  cwd: getFsImplementation().cwd(),
684980
685004
  userType: "external",
684981
685005
  sessionId: getSessionId(),
684982
- version: "1.3.435"
685006
+ version: "1.3.436"
684983
685007
  };
684984
685008
  getLogWriter(path30).write(messageWithTimestamp);
684985
685009
  }
@@ -689087,8 +689111,8 @@ async function getEnvLessBridgeConfig() {
689087
689111
  }
689088
689112
  async function checkEnvLessBridgeMinVersion() {
689089
689113
  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.
689114
+ if (cfg.min_version && lt("1.3.436", cfg.min_version)) {
689115
+ return `Your version of RAYU (${"1.3.436"}) is too old for Remote Control.
689092
689116
  Version ${cfg.min_version} or higher is required. Run \`claude update\` to update.`;
689093
689117
  }
689094
689118
  return null;
@@ -689416,14 +689440,14 @@ __export(exports_bridgePointer, {
689416
689440
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
689417
689441
  });
689418
689442
  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";
689443
+ import { dirname as dirname72, join as join171 } from "path";
689420
689444
  function getBridgePointerPath(dir) {
689421
689445
  return join171(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
689422
689446
  }
689423
689447
  async function writeBridgePointer(dir, pointer) {
689424
689448
  const path30 = getBridgePointerPath(dir);
689425
689449
  try {
689426
- await mkdir46(dirname71(path30), { recursive: true });
689450
+ await mkdir46(dirname72(path30), { recursive: true });
689427
689451
  await writeFile50(path30, jsonStringify(pointer), "utf8");
689428
689452
  logForDebugging(`[bridge:pointer] wrote ${path30}`);
689429
689453
  } catch (err2) {
@@ -689562,7 +689586,7 @@ async function initBridgeCore(params) {
689562
689586
  const rawApi = createBridgeApiClient({
689563
689587
  baseUrl,
689564
689588
  getAccessToken,
689565
- runnerVersion: "1.3.435",
689589
+ runnerVersion: "1.3.436",
689566
689590
  onDebug: logForDebugging,
689567
689591
  onAuth401,
689568
689592
  getTrustedDeviceToken
@@ -691400,7 +691424,7 @@ __export(exports_print, {
691400
691424
  canBatchWith: () => canBatchWith
691401
691425
  });
691402
691426
  import { readFile as readFile57, stat as stat50 } from "fs/promises";
691403
- import { dirname as dirname72 } from "path";
691427
+ import { dirname as dirname73 } from "path";
691404
691428
  import { cwd as cwd2 } from "process";
691405
691429
  import { randomUUID as randomUUID58 } from "crypto";
691406
691430
  function trackReceivedMessageUuid(uuid8) {
@@ -693753,7 +693777,7 @@ async function loadInitialMessages(setAppState, options) {
693753
693777
  if (false) {}
693754
693778
  if (!options.forkSession) {
693755
693779
  if (result.sessionId) {
693756
- switchSession(asSessionId(result.sessionId), result.fullPath ? dirname72(result.fullPath) : null);
693780
+ switchSession(asSessionId(result.sessionId), result.fullPath ? dirname73(result.fullPath) : null);
693757
693781
  if (persistSession) {
693758
693782
  await resetSessionFilePointer();
693759
693783
  }
@@ -693851,7 +693875,7 @@ async function loadInitialMessages(setAppState, options) {
693851
693875
  }
693852
693876
  if (false) {}
693853
693877
  if (!options.forkSession && result.sessionId) {
693854
- switchSession(asSessionId(result.sessionId), result.fullPath ? dirname72(result.fullPath) : null);
693878
+ switchSession(asSessionId(result.sessionId), result.fullPath ? dirname73(result.fullPath) : null);
693855
693879
  if (persistSession) {
693856
693880
  await resetSessionFilePointer();
693857
693881
  }
@@ -694924,7 +694948,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
694924
694948
  setCwd(cwd3);
694925
694949
  const server = new Server({
694926
694950
  name: "claude/tengu",
694927
- version: "1.3.435"
694951
+ version: "1.3.436"
694928
694952
  }, {
694929
694953
  capabilities: {
694930
694954
  tools: {}
@@ -695339,7 +695363,7 @@ __export(exports_plugins, {
695339
695363
  VALID_UPDATE_SCOPES: () => VALID_UPDATE_SCOPES,
695340
695364
  VALID_INSTALLABLE_SCOPES: () => VALID_INSTALLABLE_SCOPES
695341
695365
  });
695342
- import { basename as basename63, dirname as dirname73 } from "path";
695366
+ import { basename as basename63, dirname as dirname74 } from "path";
695343
695367
  function handleMarketplaceError(error54, action2) {
695344
695368
  logError2(error54);
695345
695369
  cliError(`${figures_default.cross} Failed to ${action2}: ${errorMessage(error54)}`);
@@ -695372,9 +695396,9 @@ async function pluginValidateHandler(manifestPath, options) {
695372
695396
  printValidationResult(result);
695373
695397
  let contentResults = [];
695374
695398
  if (result.fileType === "plugin") {
695375
- const manifestDir = dirname73(result.filePath);
695399
+ const manifestDir = dirname74(result.filePath);
695376
695400
  if (basename63(manifestDir) === ".claude-plugin") {
695377
- contentResults = await validatePluginContents(dirname73(manifestDir));
695401
+ contentResults = await validatePluginContents(dirname74(manifestDir));
695378
695402
  for (const r2 of contentResults) {
695379
695403
  console.log(`Validating ${r2.fileType}: ${r2.filePath}
695380
695404
  `);
@@ -697450,7 +697474,7 @@ ${customInstructions}` : customInstructions;
697450
697474
  }
697451
697475
  }
697452
697476
  logForDiagnosticsNoPII("info", "started", {
697453
- version: "1.3.435",
697477
+ version: "1.3.436",
697454
697478
  is_native_binary: isInBundledMode()
697455
697479
  });
697456
697480
  registerCleanup(async () => {
@@ -698169,7 +698193,7 @@ Usage: rayu --remote "your task description"`, () => gracefulShutdown(1));
698169
698193
  pendingHookMessages
698170
698194
  }, renderAndRun);
698171
698195
  }
698172
- }).version("1.3.435 (Rayu-CLI)", "-v, --version", "Output the version number");
698196
+ }).version("1.3.436 (Rayu-CLI)", "-v, --version", "Output the version number");
698173
698197
  program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
698174
698198
  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
698199
  if (canUserConfigureAdvisor()) {
@@ -698635,7 +698659,7 @@ if (false) {}
698635
698659
  async function main2() {
698636
698660
  const args = process.argv.slice(2);
698637
698661
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
698638
- console.log(`${"1.3.435"} (Rayu-CLI)`);
698662
+ console.log(`${"1.3.436"} (Rayu-CLI)`);
698639
698663
  return;
698640
698664
  }
698641
698665
  const {