@rayu-dev/rayu-cli 1.3.435 → 1.3.437
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rayu.js +327 -284
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
148513
|
+
appVersion: "1.3.436",
|
|
148514
148514
|
platform: getHostPlatformForAnalytics(),
|
|
148515
148515
|
organizationUuid,
|
|
148516
148516
|
accountUuid,
|
|
@@ -181338,7 +181338,7 @@ function buildKiroPayload(params) {
|
|
|
181338
181338
|
}
|
|
181339
181339
|
if (images.length > 0)
|
|
181340
181340
|
userMsg.images = images;
|
|
181341
|
-
if (thinking
|
|
181341
|
+
if (thinking) {
|
|
181342
181342
|
const prefix = `<thinking_mode>enabled</thinking_mode>
|
|
181343
181343
|
<max_thinking_length>${thinkingBudget}</max_thinking_length>`;
|
|
181344
181344
|
userMsg.content = userMsg.content !== "" ? `${prefix}
|
|
@@ -184022,7 +184022,7 @@ var init_metadata = __esm(() => {
|
|
|
184022
184022
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
184023
184023
|
WHITESPACE_REGEX = /\s+/;
|
|
184024
184024
|
getVersionBase = memoize_default(() => {
|
|
184025
|
-
const match = "1.3.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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/
|
|
271746
|
-
function
|
|
271747
|
-
return `You are the
|
|
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
|
|
271770
|
-
var
|
|
271771
|
-
|
|
271772
|
-
agentType: "
|
|
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:
|
|
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
|
-
|
|
271830
|
+
init_planner();
|
|
271830
271831
|
init_review();
|
|
271831
271832
|
SUBAGENTS = [
|
|
271832
|
-
|
|
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
|
-
"-
|
|
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
|
|
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
|
|
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,
|
|
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 =
|
|
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" ?
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
294557
|
-
const parentOfSkillDir =
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
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 =
|
|
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.
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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 =
|
|
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.
|
|
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
|
|
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
|
-
|
|
416327
|
-
|
|
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
|
|
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(
|
|
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.
|
|
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.
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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.
|
|
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.
|
|
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 (
|
|
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
|
-
|
|
448995
|
-
|
|
448996
|
-
|
|
448997
|
-
|
|
448998
|
-
|
|
448999
|
-
|
|
449000
|
-
|
|
449001
|
-
|
|
449002
|
-
|
|
449003
|
-
|
|
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
|
|
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
|
-
|
|
460354
|
-
|
|
460378
|
+
mkdirSync11(teamDir, { recursive: true });
|
|
460379
|
+
writeFileSync11(getTeamFilePath(teamName), jsonStringify(teamFile, null, 2));
|
|
460355
460380
|
}
|
|
460356
460381
|
async function writeTeamFileAsync(teamName, teamFile) {
|
|
460357
460382
|
const teamDir = getTeamDir(teamName);
|
|
@@ -461709,7 +461734,7 @@ function SpinnerWithVerbInner({
|
|
|
461709
461734
|
const tipsEnabled = settings.spinnerTipsEnabled !== false;
|
|
461710
461735
|
const showClearTip = tipsEnabled && elapsedSnapshot > 1800000;
|
|
461711
461736
|
const showBtwTip = tipsEnabled && elapsedSnapshot > 30000 && !getGlobalConfig().btwUseCount;
|
|
461712
|
-
const effectiveTip = contextTipsActive ? undefined : showClearTip && !nextTask ? "Use /clear to start fresh when switching topics and free up context" : showBtwTip && !nextTask ? "Use /btw to ask a quick side question without interrupting
|
|
461737
|
+
const effectiveTip = contextTipsActive ? undefined : showClearTip && !nextTask ? "Use /clear to start fresh when switching topics and free up context" : showBtwTip && !nextTask ? "Use /btw to ask a quick side question without interrupting Rayu's current work" : spinnerTip;
|
|
461713
461738
|
let budgetText = null;
|
|
461714
461739
|
if (true) {
|
|
461715
461740
|
const budget = getCurrentTurnTokenBudget();
|
|
@@ -490556,7 +490581,7 @@ var init_UI16 = __esm(() => {
|
|
|
490556
490581
|
|
|
490557
490582
|
// src/tools/ImageGenTool/ImageGenTool.ts
|
|
490558
490583
|
import { mkdir as mkdir21, readFile as readFile26, writeFile as writeFile19 } from "fs/promises";
|
|
490559
|
-
import { dirname as
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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 ${
|
|
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
|
|
511413
|
-
2. ALIGNED PLAN — have
|
|
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
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
516266
|
-
const parentOfSkillDir =
|
|
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 =
|
|
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 =
|
|
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: ${
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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 =
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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 =
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
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(
|
|
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(
|
|
519664
|
+
await getFsImplementation().mkdir(dirname54(cachePath));
|
|
519640
519665
|
if (entry && typeof entry.source === "string" && marketplaceDir) {
|
|
519641
519666
|
const sourceDir = validatePathWithinBase(marketplaceDir, entry.source);
|
|
519642
519667
|
logForDebugging(`Copying source directory ${entry.source} for plugin ${pluginId}`);
|
|
@@ -521434,6 +521459,7 @@ function getSimpleDoingTasksSection() {
|
|
|
521434
521459
|
];
|
|
521435
521460
|
const items = [
|
|
521436
521461
|
`The user will primarily request you to perform software engineering tasks. These may include solving bugs, adding new functionality, refactoring code, explaining code, and more. When given an unclear or generic instruction, consider it in the context of these software engineering tasks and the current working directory. For example, if the user asks you to change "methodName" to snake case, do not reply with just "method_name", instead find the method in the code and modify the code.`,
|
|
521462
|
+
`Before telling the user a task is done — especially after writing code, fixing a bug, or making any change — you MUST verify it actually works: run the project's build, tests, and linters (use the commands in RAYU.md/AGENTS.md when present), reproduce the original problem to confirm it is resolved, and fix any errors that surface. Do not report success or hand the task back to the user until verification passes, so they don't hit issues when they try it. If you genuinely cannot verify (no test exists or the code can't be run here), say so explicitly rather than implying it works.`,
|
|
521437
521463
|
`You are highly capable and often allow users to complete ambitious tasks that would otherwise be too complex or take too long. You should defer to user judgement about whether a task is too large to attempt.`,
|
|
521438
521464
|
...[],
|
|
521439
521465
|
`In general, do not propose changes to code you haven't read. If a user asks about or wants you to modify a file, read it first. Understand existing code before suggesting modifications.`,
|
|
@@ -521449,7 +521475,25 @@ function getSimpleDoingTasksSection() {
|
|
|
521449
521475
|
`If the user asks for help or wants to give feedback inform them of the following:`,
|
|
521450
521476
|
userHelpSubitems
|
|
521451
521477
|
];
|
|
521452
|
-
|
|
521478
|
+
const minimalismSection = [
|
|
521479
|
+
`## Keep it minimal — reuse before you build`,
|
|
521480
|
+
``,
|
|
521481
|
+
`Prefer the simplest solution that actually works. Climb this ladder and stop at the first rung that holds:`,
|
|
521482
|
+
`1. Does this need to exist at all? A speculative or "just in case" need is YAGNI — skip it and say so in one line.`,
|
|
521483
|
+
`2. Does the standard library do it? Use it.`,
|
|
521484
|
+
`3. Does a native platform feature cover it? (CSS over JS, a DB constraint over app code, a built-in over a hand-rolled equivalent.)`,
|
|
521485
|
+
`4. Does an already-installed dependency solve it? Use it — never add a new dependency for what a few lines can do.`,
|
|
521486
|
+
`5. Can it be one line? Make it one line.`,
|
|
521487
|
+
`6. Only then write the minimum code that works.`,
|
|
521488
|
+
`Two rungs work → take the higher one and move on. The first simple solution that works is the right one.`,
|
|
521489
|
+
``,
|
|
521490
|
+
`- Before creating a new component, widget, hook, utility, type, or adding a library: first search the codebase for an existing one and reuse or extend it — do not duplicate or reinvent. Match the patterns, conventions, and libraries already in use.`,
|
|
521491
|
+
`- No unrequested abstractions (no interface with one implementation, no factory for one product, no config for a value that never changes) and no boilerplate or scaffolding "for later". Prefer deletion over addition, boring over clever, and the shortest working diff.`,
|
|
521492
|
+
`- Don't cram everything into one file — split responsibilities into appropriately-scoped, well-named modules so the code stays readable and scales as it grows.`,
|
|
521493
|
+
`- For a complex request, ship the minimal version and flag what you skipped in the same response (e.g. "Did X; Y likely covers it — want the full version?") rather than over-building. When two options are the same size, pick the one that is correct on edge cases — minimal means less code, not a flimsier algorithm.`
|
|
521494
|
+
].join(`
|
|
521495
|
+
`);
|
|
521496
|
+
return [`# Doing tasks`, ...prependBullets(items), ``, minimalismSection].join(`
|
|
521453
521497
|
`);
|
|
521454
521498
|
}
|
|
521455
521499
|
function getActionsSection() {
|
|
@@ -526632,7 +526676,7 @@ __export(exports_terminalSetup, {
|
|
|
526632
526676
|
import { randomBytes as randomBytes14 } from "crypto";
|
|
526633
526677
|
import { copyFile as copyFile8, mkdir as mkdir28, readFile as readFile36, writeFile as writeFile28 } from "fs/promises";
|
|
526634
526678
|
import { homedir as homedir27, platform as platform3 } from "os";
|
|
526635
|
-
import { dirname as
|
|
526679
|
+
import { dirname as dirname55, join as join112 } from "path";
|
|
526636
526680
|
import { pathToFileURL as pathToFileURL7 } from "url";
|
|
526637
526681
|
function isVSCodeRemoteSSH() {
|
|
526638
526682
|
const askpassMain = process.env.VSCODE_GIT_ASKPASS_MAIN ?? "";
|
|
@@ -526954,7 +526998,7 @@ chars = "\\u001B\\r"`;
|
|
|
526954
526998
|
return `${color("warning", theme)("Error backing up existing Alacritty config. Bailing out.")}${EOL6}${source_default.dim(`See ${formatPathLink(configPath2)}`)}${EOL6}${source_default.dim(`Backup path: ${formatPathLink(backupPath)}`)}${EOL6}`;
|
|
526955
526999
|
}
|
|
526956
527000
|
} else {
|
|
526957
|
-
await mkdir28(
|
|
527001
|
+
await mkdir28(dirname55(configPath2), {
|
|
526958
527002
|
recursive: true
|
|
526959
527003
|
});
|
|
526960
527004
|
}
|
|
@@ -529419,7 +529463,7 @@ var init_TextInput = __esm(() => {
|
|
|
529419
529463
|
});
|
|
529420
529464
|
|
|
529421
529465
|
// src/utils/suggestions/directoryCompletion.ts
|
|
529422
|
-
import { basename as basename39, dirname as
|
|
529466
|
+
import { basename as basename39, dirname as dirname56, join as join115, sep as sep32 } from "path";
|
|
529423
529467
|
function parsePartialPath(partialPath, basePath) {
|
|
529424
529468
|
if (!partialPath) {
|
|
529425
529469
|
const directory2 = basePath || getCwd();
|
|
@@ -529429,7 +529473,7 @@ function parsePartialPath(partialPath, basePath) {
|
|
|
529429
529473
|
if (partialPath.endsWith("/") || partialPath.endsWith(sep32)) {
|
|
529430
529474
|
return { directory: resolved, prefix: "" };
|
|
529431
529475
|
}
|
|
529432
|
-
const directory =
|
|
529476
|
+
const directory = dirname56(resolved);
|
|
529433
529477
|
const prefix = basename39(partialPath);
|
|
529434
529478
|
return { directory, prefix };
|
|
529435
529479
|
}
|
|
@@ -531081,7 +531125,7 @@ function Feedback({
|
|
|
531081
531125
|
platform: env4.platform,
|
|
531082
531126
|
gitRepo: envInfo.isGit,
|
|
531083
531127
|
terminal: env4.terminal,
|
|
531084
|
-
version: "1.3.
|
|
531128
|
+
version: "1.3.436",
|
|
531085
531129
|
transcript: normalizeMessagesForAPI(messages),
|
|
531086
531130
|
errors: sanitizedErrors,
|
|
531087
531131
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -531273,7 +531317,7 @@ function Feedback({
|
|
|
531273
531317
|
", ",
|
|
531274
531318
|
env4.terminal,
|
|
531275
531319
|
", v",
|
|
531276
|
-
"1.3.
|
|
531320
|
+
"1.3.436"
|
|
531277
531321
|
]
|
|
531278
531322
|
}, undefined, true, undefined, this)
|
|
531279
531323
|
]
|
|
@@ -531379,7 +531423,7 @@ ${sanitizedDescription}
|
|
|
531379
531423
|
` + `**Environment Info**
|
|
531380
531424
|
` + `- Platform: ${env4.platform}
|
|
531381
531425
|
` + `- Terminal: ${env4.terminal}
|
|
531382
|
-
` + `- Version: ${"1.3.
|
|
531426
|
+
` + `- Version: ${"1.3.436"}
|
|
531383
531427
|
` + `- Feedback ID: ${feedbackId}
|
|
531384
531428
|
` + `
|
|
531385
531429
|
**Errors**
|
|
@@ -534219,9 +534263,9 @@ async function assertMinVersion() {
|
|
|
534219
534263
|
if (false) {}
|
|
534220
534264
|
try {
|
|
534221
534265
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
534222
|
-
if (versionConfig.minVersion && lt("1.3.
|
|
534266
|
+
if (versionConfig.minVersion && lt("1.3.436", versionConfig.minVersion)) {
|
|
534223
534267
|
console.error(`
|
|
534224
|
-
It looks like your version of RAYU (${"1.3.
|
|
534268
|
+
It looks like your version of RAYU (${"1.3.436"}) needs an update.
|
|
534225
534269
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
534226
534270
|
|
|
534227
534271
|
To update, please run:
|
|
@@ -534447,7 +534491,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
534447
534491
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
534448
534492
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
534449
534493
|
pid: process.pid,
|
|
534450
|
-
currentVersion: "1.3.
|
|
534494
|
+
currentVersion: "1.3.436"
|
|
534451
534495
|
});
|
|
534452
534496
|
return "in_progress";
|
|
534453
534497
|
}
|
|
@@ -534456,7 +534500,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
534456
534500
|
if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
|
|
534457
534501
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
534458
534502
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
534459
|
-
currentVersion: "1.3.
|
|
534503
|
+
currentVersion: "1.3.436"
|
|
534460
534504
|
});
|
|
534461
534505
|
console.error(`
|
|
534462
534506
|
Error: Windows NPM detected in WSL
|
|
@@ -534992,7 +535036,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
534992
535036
|
}
|
|
534993
535037
|
async function getDoctorDiagnostic() {
|
|
534994
535038
|
const installationType = await getCurrentInstallationType();
|
|
534995
|
-
const version2 = typeof MACRO !== "undefined" ? "1.3.
|
|
535039
|
+
const version2 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
|
|
534996
535040
|
const installationPath = await getInstallationPath();
|
|
534997
535041
|
const invokedBinary = getInvokedBinary();
|
|
534998
535042
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -535524,7 +535568,7 @@ import {
|
|
|
535524
535568
|
writeFile as writeFile35
|
|
535525
535569
|
} from "fs/promises";
|
|
535526
535570
|
import { homedir as homedir30 } from "os";
|
|
535527
|
-
import { basename as basename41, delimiter as delimiter4, dirname as
|
|
535571
|
+
import { basename as basename41, delimiter as delimiter4, dirname as dirname58, join as join126, resolve as resolve45 } from "path";
|
|
535528
535572
|
function getPlatform3() {
|
|
535529
535573
|
const os7 = env4.platform;
|
|
535530
535574
|
const arch = process.arch === "x64" ? "x64" : process.arch === "arm64" ? "arm64" : null;
|
|
@@ -535567,7 +535611,7 @@ async function getVersionPaths(version2) {
|
|
|
535567
535611
|
const dirs = getBaseDirectories();
|
|
535568
535612
|
const dirsToCreate = [dirs.versions, dirs.staging, dirs.locks];
|
|
535569
535613
|
await Promise.all(dirsToCreate.map((dir) => mkdir31(dir, { recursive: true })));
|
|
535570
|
-
const executableParentDir =
|
|
535614
|
+
const executableParentDir = dirname58(dirs.executable);
|
|
535571
535615
|
await mkdir31(executableParentDir, { recursive: true });
|
|
535572
535616
|
const installPath = join126(dirs.versions, version2);
|
|
535573
535617
|
try {
|
|
@@ -535661,7 +535705,7 @@ async function tryWithVersionLock(versionFilePath, callback, retries = 0) {
|
|
|
535661
535705
|
}
|
|
535662
535706
|
}
|
|
535663
535707
|
async function atomicMoveToInstallPath(stagedBinaryPath, installPath) {
|
|
535664
|
-
await mkdir31(
|
|
535708
|
+
await mkdir31(dirname58(installPath), { recursive: true });
|
|
535665
535709
|
const tempInstallPath = `${installPath}.tmp.${process.pid}.${Date.now()}`;
|
|
535666
535710
|
try {
|
|
535667
535711
|
await copyFile9(stagedBinaryPath, tempInstallPath);
|
|
@@ -535787,8 +535831,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
535787
535831
|
const maxVersion = await getMaxVersion();
|
|
535788
535832
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
535789
535833
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
535790
|
-
if (gte("1.3.
|
|
535791
|
-
logForDebugging(`Native installer: current version ${"1.3.
|
|
535834
|
+
if (gte("1.3.436", maxVersion)) {
|
|
535835
|
+
logForDebugging(`Native installer: current version ${"1.3.436"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
535792
535836
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
535793
535837
|
latency_ms: Date.now() - startTime,
|
|
535794
535838
|
max_version: maxVersion,
|
|
@@ -535799,7 +535843,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
535799
535843
|
version2 = maxVersion;
|
|
535800
535844
|
}
|
|
535801
535845
|
}
|
|
535802
|
-
if (!forceReinstall && version2 === "1.3.
|
|
535846
|
+
if (!forceReinstall && version2 === "1.3.436" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
|
|
535803
535847
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
535804
535848
|
logEvent("tengu_native_update_complete", {
|
|
535805
535849
|
latency_ms: Date.now() - startTime,
|
|
@@ -535875,7 +535919,7 @@ async function updateSymlink(symlinkPath, targetPath) {
|
|
|
535875
535919
|
const isWindows2 = platform4.startsWith("win32");
|
|
535876
535920
|
if (isWindows2) {
|
|
535877
535921
|
try {
|
|
535878
|
-
const parentDir2 =
|
|
535922
|
+
const parentDir2 = dirname58(symlinkPath);
|
|
535879
535923
|
await mkdir31(parentDir2, { recursive: true });
|
|
535880
535924
|
let existingStats;
|
|
535881
535925
|
try {
|
|
@@ -535921,7 +535965,7 @@ async function updateSymlink(symlinkPath, targetPath) {
|
|
|
535921
535965
|
return false;
|
|
535922
535966
|
}
|
|
535923
535967
|
}
|
|
535924
|
-
const parentDir =
|
|
535968
|
+
const parentDir = dirname58(symlinkPath);
|
|
535925
535969
|
try {
|
|
535926
535970
|
await mkdir31(parentDir, { recursive: true });
|
|
535927
535971
|
logForDebugging(`Created directory ${parentDir} for symlink`);
|
|
@@ -535938,7 +535982,7 @@ async function updateSymlink(symlinkPath, targetPath) {
|
|
|
535938
535982
|
if (symlinkExists) {
|
|
535939
535983
|
try {
|
|
535940
535984
|
const currentTarget = await readlink3(symlinkPath);
|
|
535941
|
-
const resolvedCurrentTarget = resolve45(
|
|
535985
|
+
const resolvedCurrentTarget = resolve45(dirname58(symlinkPath), currentTarget);
|
|
535942
535986
|
const resolvedTargetPath = resolve45(targetPath);
|
|
535943
535987
|
if (resolvedCurrentTarget === resolvedTargetPath) {
|
|
535944
535988
|
return false;
|
|
@@ -535978,7 +536022,7 @@ async function checkInstall(force = false) {
|
|
|
535978
536022
|
}
|
|
535979
536023
|
const dirs = getBaseDirectories();
|
|
535980
536024
|
const messages = [];
|
|
535981
|
-
const localBinDir =
|
|
536025
|
+
const localBinDir = dirname58(dirs.executable);
|
|
535982
536026
|
const resolvedLocalBinPath = resolve45(localBinDir);
|
|
535983
536027
|
const platform4 = getPlatform3();
|
|
535984
536028
|
const isWindows2 = platform4.startsWith("win32");
|
|
@@ -536002,7 +536046,7 @@ async function checkInstall(force = false) {
|
|
|
536002
536046
|
} else {
|
|
536003
536047
|
try {
|
|
536004
536048
|
const target = await readlink3(dirs.executable);
|
|
536005
|
-
const absoluteTarget = resolve45(
|
|
536049
|
+
const absoluteTarget = resolve45(dirname58(dirs.executable), target);
|
|
536006
536050
|
if (!await isPossibleClaudeBinary(absoluteTarget)) {
|
|
536007
536051
|
messages.push({
|
|
536008
536052
|
message: `Claude symlink points to missing or invalid binary: ${target}`,
|
|
@@ -536109,7 +536153,7 @@ async function installLatestImpl(channelOrVersion, forceReinstall = false) {
|
|
|
536109
536153
|
async function getVersionFromSymlink(symlinkPath) {
|
|
536110
536154
|
try {
|
|
536111
536155
|
const target = await readlink3(symlinkPath);
|
|
536112
|
-
const absoluteTarget = resolve45(
|
|
536156
|
+
const absoluteTarget = resolve45(dirname58(symlinkPath), target);
|
|
536113
536157
|
if (await isPossibleClaudeBinary(absoluteTarget)) {
|
|
536114
536158
|
return absoluteTarget;
|
|
536115
536159
|
}
|
|
@@ -536204,7 +536248,7 @@ async function cleanupOldVersions() {
|
|
|
536204
536248
|
const dirs = getBaseDirectories();
|
|
536205
536249
|
const oneHourAgo = Date.now() - 3600000;
|
|
536206
536250
|
if (getPlatform3().startsWith("win32")) {
|
|
536207
|
-
const executableDir =
|
|
536251
|
+
const executableDir = dirname58(dirs.executable);
|
|
536208
536252
|
try {
|
|
536209
536253
|
const files2 = await readdir24(executableDir);
|
|
536210
536254
|
let cleanedCount = 0;
|
|
@@ -536995,7 +537039,7 @@ function buildPrimarySection() {
|
|
|
536995
537039
|
}, undefined, false, undefined, this);
|
|
536996
537040
|
return [{
|
|
536997
537041
|
label: "Version",
|
|
536998
|
-
value: "1.3.
|
|
537042
|
+
value: "1.3.436"
|
|
536999
537043
|
}, {
|
|
537000
537044
|
label: "Session name",
|
|
537001
537045
|
value: nameValue
|
|
@@ -540686,7 +540730,7 @@ function Config({
|
|
|
540686
540730
|
}
|
|
540687
540731
|
}, undefined, false, undefined, this)
|
|
540688
540732
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime170.jsxDEV(ChannelDowngradeDialog, {
|
|
540689
|
-
currentVersion: "1.3.
|
|
540733
|
+
currentVersion: "1.3.436",
|
|
540690
540734
|
onChoice: (choice) => {
|
|
540691
540735
|
setShowSubmenu(null);
|
|
540692
540736
|
setTabsHidden(false);
|
|
@@ -540698,7 +540742,7 @@ function Config({
|
|
|
540698
540742
|
autoUpdatesChannel: "stable"
|
|
540699
540743
|
};
|
|
540700
540744
|
if (choice === "stay") {
|
|
540701
|
-
newSettings.minimumVersion = "1.3.
|
|
540745
|
+
newSettings.minimumVersion = "1.3.436";
|
|
540702
540746
|
}
|
|
540703
540747
|
updateSettingsForSource("userSettings", newSettings);
|
|
540704
540748
|
setSettingsData((prev_27) => ({
|
|
@@ -548760,7 +548804,7 @@ function HelpV2(t0) {
|
|
|
548760
548804
|
let t6;
|
|
548761
548805
|
if ($3[31] !== tabs) {
|
|
548762
548806
|
t6 = /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Tabs, {
|
|
548763
|
-
title: `Rayu-CLI v${"1.3.
|
|
548807
|
+
title: `Rayu-CLI v${"1.3.436"}`,
|
|
548764
548808
|
color: "professionalBlue",
|
|
548765
548809
|
defaultTab: "general",
|
|
548766
548810
|
children: tabs
|
|
@@ -549799,7 +549843,7 @@ var init_ide3 = __esm(() => {
|
|
|
549799
549843
|
});
|
|
549800
549844
|
|
|
549801
549845
|
// src/commands/init.ts
|
|
549802
|
-
import { existsSync as existsSync22, writeFileSync as
|
|
549846
|
+
import { existsSync as existsSync22, writeFileSync as writeFileSync12 } from "fs";
|
|
549803
549847
|
import { join as join129 } from "path";
|
|
549804
549848
|
function ensureRayuMd() {
|
|
549805
549849
|
try {
|
|
@@ -549807,7 +549851,7 @@ function ensureRayuMd() {
|
|
|
549807
549851
|
if (existsSync22(join129(cwd2, "RAYU.md"))) {
|
|
549808
549852
|
return;
|
|
549809
549853
|
}
|
|
549810
|
-
|
|
549854
|
+
writeFileSync12(join129(cwd2, "RAYU.md"), RAYU_MD_SCAFFOLD, { flag: "wx" });
|
|
549811
549855
|
} catch {}
|
|
549812
549856
|
}
|
|
549813
549857
|
var RAYU_MD_SCAFFOLD = `# RAYU.md
|
|
@@ -550158,7 +550202,7 @@ ${taskLine}
|
|
|
550158
550202
|
|
|
550159
550203
|
## Your role: PURE ORCHESTRATOR — you do NOT write code
|
|
550160
550204
|
In this mode you NEVER write or edit code, run build/implementation commands, or do domain work yourself. Your job is ONLY to:
|
|
550161
|
-
- ANALYZE the real project and requirements — read code to understand it, and discuss & plan WITH the \`
|
|
550205
|
+
- ANALYZE the real project and requirements — read code to understand it, and discuss & plan WITH the \`planner\` subagent to reach a clear, grounded plan/architecture.
|
|
550162
550206
|
- DECOMPOSE and ASSIGN the work to the right Collaborators (implementers) and Subagents (one-shot helpers).
|
|
550163
550207
|
- CHECK and verify their results (via the \`review\` subagent and by reading their outputs) and integrate them.
|
|
550164
550208
|
HARD RULE: if a Collaborator or Subagent stalls, errors, or doesn't respond, you RESUME it (SendMessage), re-dispatch it, or escalate to the user — you do NOT take over and implement it yourself. Never silently become the coder, even if it seems faster.
|
|
@@ -550167,17 +550211,17 @@ Keep going until the task is fully resolved; state assumptions and continue —
|
|
|
550167
550211
|
## The three tiers
|
|
550168
550212
|
- **You (Orchestrator)** — scope, plan, own SharedContext, coordinate, integrate. You delegate all implementation; you call only the orchestrator-level subagents directly.
|
|
550169
550213
|
- **Collaborators (Tier 2)** — semi-persistent domain implementers you delegate to: \`frontend\`, \`backend\` (incl. database), \`mobile\`, \`security\`, \`deploy\`. Spawn each as a NAMED BACKGROUND agent (run_in_background:true, stable lowercase name) so you can resume it with SendMessage instead of respawning. They have full tools and may dispatch ONLY their allowed subagents (see the matrix).
|
|
550170
|
-
- **Subagents (Tier 3)** — ephemeral one-shot helpers: \`
|
|
550214
|
+
- **Subagents (Tier 3)** — ephemeral one-shot helpers: \`planner\` (deep plan/research — orchestrator only), \`design\` (UI/UX + component PRD), \`backend-design\` (API + Data Model PRD), \`global-setup\` (scaffold — orchestrator only), \`asset-generation\` (images), \`review\` (audit → Fix List), \`fix\` (apply Fix List), \`linter\`, plus \`Explore\` and \`general-purpose\` (research).
|
|
550171
550215
|
|
|
550172
550216
|
## Subagent specialization matrix (who may call what)
|
|
550173
550217
|
Domain-locked so each agent uses only what fits its specialty:
|
|
550174
|
-
- **You (Orchestrator):**
|
|
550218
|
+
- **You (Orchestrator):** planner, global-setup, design, backend-design, asset-generation, review, fix, linter, Explore, general-purpose.
|
|
550175
550219
|
- **frontend:** design, asset-generation, review, fix, linter, Explore, general-purpose. (NOT backend-design.)
|
|
550176
550220
|
- **backend:** backend-design, review, fix, linter, Explore, general-purpose. (NOT design or asset-generation.)
|
|
550177
550221
|
- **mobile:** design, asset-generation, backend-design, review, fix, linter, Explore, general-purpose.
|
|
550178
550222
|
- **security:** backend-design, review, fix, linter, Explore, general-purpose.
|
|
550179
550223
|
- **deploy:** review, fix, linter, Explore, general-purpose.
|
|
550180
|
-
\`
|
|
550224
|
+
\`planner\` and \`global-setup\` are ORCHESTRATOR-ONLY — collaborators implement; they never re-plan or re-scaffold. (These limits are also enforced in code.)
|
|
550181
550225
|
|
|
550182
550226
|
## Bundled skills (use them — no install needed)
|
|
550183
550227
|
rayu ships original skills, always available via the Skill tool: \`rayu-frontend-design\`, \`rayu-design-system\`, \`rayu-theme-factory\`, \`rayu-brand-guidelines\` (UI / design / brand), \`rayu-canvas-design\` + \`rayu-algorithmic-art\` (generated graphics & generative art), \`rayu-web-artifacts-builder\` (standalone interactive pages), \`rayu-api-design\` + \`rayu-mcp-builder\` (backend), \`rayu-web-testing\` (QA/verification), \`rayu-doc-export\` (docx/xlsx/pptx/pdf deliverables). Tell each collaborator to pull the skill that fits its task — frontend/mobile → design / theme / artifacts; design & asset-generation → canvas / algorithmic-art / brand; backend → api / mcp; review/security → web-testing; any document deliverable → doc-export. Beyond the bundled set, you and the collaborators may also use any skill the user has installed, or install a relevant one on demand from the official Anthropic skills repo (\`anthropics/skills\`) via the InstallSkill tool.
|
|
@@ -550190,13 +550234,13 @@ Parallel execution is ~3–5x faster than sequential. Unless one call genuinely
|
|
|
550190
550234
|
- Spawn **Collaborators in the BACKGROUND** (\`run_in_background:true\`, stable lowercase name). Background is the ONLY mode that is resumable via \`SendMessage\`, so semi-persistent collaborators MUST be background. The user watches a collaborator's detailed work by entering its view (↓ then Enter); the task panel shows each collaborator's high-level status (including \`thinking…\`).
|
|
550191
550235
|
|
|
550192
550236
|
## The 3-phase build flow
|
|
550193
|
-
### Phase 1 — Scope & Research (you +
|
|
550237
|
+
### Phase 1 — Scope & Research (you + planner, in the foreground)
|
|
550194
550238
|
- Clarify the request: ask the user for the missing DETAIL and SCOPE, and ask their PREFERRED TECH STACK — offer 2–3 concrete recommendations with a one-line rationale each (don't make them guess).
|
|
550195
|
-
- For any OPEN implementation choice (e.g. a payment provider — Stripe vs a bank gateway vs ABA), dispatch the \`
|
|
550239
|
+
- For any OPEN implementation choice (e.g. a payment provider — Stripe vs a bank gateway vs ABA), dispatch the \`planner\` subagent to RESEARCH the real, available options for THIS project and return a short comparison; present those options to the user and let them choose. Loop until you have everything you need.
|
|
550196
550240
|
|
|
550197
|
-
### Phase 2 — One aligned plan (
|
|
550198
|
-
- Hand the gathered context to \`
|
|
550199
|
-
- Relay
|
|
550241
|
+
### Phase 2 — One aligned plan (planner → you → user)
|
|
550242
|
+
- Hand the gathered context to \`planner\` for a deep, reasoned plan. The planner must produce ONE coherent plan that is explicitly ALIGNED across backend AND frontend (shared API contract, data model, auth flow) — never two disjoint plans.
|
|
550243
|
+
- Relay the planner's plan to the user for FINAL confirmation. (In plan mode, that's the ExitPlanMode approval — confirming auto-enters swarm execution.) You ALREADY receive the planner's full plan as its returned result — use that directly. Do NOT re-read \`.rayu/swarm/PLANNER.md\`: the swarm \`.md\` files exist so the COLLABORATORS can read each other's contracts, not for you to re-read your own subagents' returns — pulling a large plan back into your own context wastes tokens and can make the request time out.
|
|
550200
550244
|
|
|
550201
550245
|
### Phase 3 — Build (decompose by specialty; run as a dependency graph, not fixed waves)
|
|
550202
550246
|
1. **Setup gate (one short step):** for a new project, run \`global-setup\` to scaffold the FE+BE folder structure + tooling.
|
|
@@ -550225,7 +550269,7 @@ Parallel execution is ~3–5x faster than sequential. Unless one call genuinely
|
|
|
550225
550269
|
## Finish
|
|
550226
550270
|
Integrate the collaborators' outputs into one coherent result, crediting which collaborator produced what, and report concisely to the user — only after the verification gate (build/tests pass, review→fix clean).
|
|
550227
550271
|
|
|
550228
|
-
This session is now in collaborator_swarm mode (it stays on for the whole session; the user exits with /normal). Begin with PHASE 1: state your understanding, ask the user for the missing scope + preferred tech stack (with recommendations), and dispatch \`
|
|
550272
|
+
This session is now in collaborator_swarm mode (it stays on for the whole session; the user exits with /normal). Begin with PHASE 1: state your understanding, ask the user for the missing scope + preferred tech stack (with recommendations), and dispatch \`planner\` for any implementation-option research the request needs.`
|
|
550229
550273
|
}
|
|
550230
550274
|
];
|
|
550231
550275
|
}
|
|
@@ -550295,7 +550339,7 @@ __export(exports_keybindings, {
|
|
|
550295
550339
|
call: () => call18
|
|
550296
550340
|
});
|
|
550297
550341
|
import { mkdir as mkdir34, writeFile as writeFile37 } from "fs/promises";
|
|
550298
|
-
import { dirname as
|
|
550342
|
+
import { dirname as dirname59 } from "path";
|
|
550299
550343
|
async function call18() {
|
|
550300
550344
|
if (!isKeybindingCustomizationEnabled()) {
|
|
550301
550345
|
return {
|
|
@@ -550305,7 +550349,7 @@ async function call18() {
|
|
|
550305
550349
|
}
|
|
550306
550350
|
const keybindingsPath = getKeybindingsPath();
|
|
550307
550351
|
let fileExists2 = false;
|
|
550308
|
-
await mkdir34(
|
|
550352
|
+
await mkdir34(dirname59(keybindingsPath), { recursive: true });
|
|
550309
550353
|
try {
|
|
550310
550354
|
await writeFile37(keybindingsPath, generateKeybindingsTemplate(), {
|
|
550311
550355
|
encoding: "utf-8",
|
|
@@ -557415,7 +557459,7 @@ var init_DiscoverPlugins = __esm(() => {
|
|
|
557415
557459
|
});
|
|
557416
557460
|
|
|
557417
557461
|
// src/services/plugins/pluginOperations.ts
|
|
557418
|
-
import { dirname as
|
|
557462
|
+
import { dirname as dirname60, join as join132 } from "path";
|
|
557419
557463
|
function assertInstallableScope(scope) {
|
|
557420
557464
|
if (!VALID_INSTALLABLE_SCOPES.includes(scope)) {
|
|
557421
557465
|
throw new Error(`Invalid scope "${scope}". Must be one of: ${VALID_INSTALLABLE_SCOPES.join(", ")}`);
|
|
@@ -557892,7 +557936,7 @@ async function performPluginUpdate({
|
|
|
557892
557936
|
}
|
|
557893
557937
|
throw e2;
|
|
557894
557938
|
}
|
|
557895
|
-
const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation :
|
|
557939
|
+
const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname60(marketplaceInstallLocation);
|
|
557896
557940
|
sourcePath = join132(marketplaceDir, entry.source);
|
|
557897
557941
|
try {
|
|
557898
557942
|
await fs14.stat(sourcePath);
|
|
@@ -566864,7 +566908,7 @@ var init_server = __esm(() => {
|
|
|
566864
566908
|
});
|
|
566865
566909
|
|
|
566866
566910
|
// src/telegram/telegramConfig.ts
|
|
566867
|
-
import { existsSync as existsSync23, mkdirSync as
|
|
566911
|
+
import { existsSync as existsSync23, mkdirSync as mkdirSync12, readFileSync as readFileSync26, writeFileSync as writeFileSync13 } from "fs";
|
|
566868
566912
|
import { join as join136 } from "path";
|
|
566869
566913
|
function configPath2() {
|
|
566870
566914
|
return join136(getRayuConfigHomeDir(), "telegram.json");
|
|
@@ -566895,8 +566939,8 @@ function readTelegramConfig() {
|
|
|
566895
566939
|
function writeTelegramConfig(config5) {
|
|
566896
566940
|
const dir = getRayuConfigHomeDir();
|
|
566897
566941
|
if (!existsSync23(dir))
|
|
566898
|
-
|
|
566899
|
-
|
|
566942
|
+
mkdirSync12(dir, { recursive: true });
|
|
566943
|
+
writeFileSync13(configPath2(), JSON.stringify(config5, null, 2), { mode: 384 });
|
|
566900
566944
|
}
|
|
566901
566945
|
function setPendingToken(token, ttlMs) {
|
|
566902
566946
|
const next = {
|
|
@@ -568693,7 +568737,7 @@ var init_transcriptSearch = __esm(() => {
|
|
|
568693
568737
|
|
|
568694
568738
|
// src/utils/releaseNotes.ts
|
|
568695
568739
|
import { mkdir as mkdir35, readFile as readFile46, writeFile as writeFile40 } from "fs/promises";
|
|
568696
|
-
import { dirname as
|
|
568740
|
+
import { dirname as dirname62, join as join137 } from "path";
|
|
568697
568741
|
function getChangelogCachePath() {
|
|
568698
568742
|
return join137(getRayuConfigHomeDir(), "cache", "changelog.md");
|
|
568699
568743
|
}
|
|
@@ -568704,7 +568748,7 @@ async function migrateChangelogFromConfig() {
|
|
|
568704
568748
|
}
|
|
568705
568749
|
const cachePath = getChangelogCachePath();
|
|
568706
568750
|
try {
|
|
568707
|
-
await mkdir35(
|
|
568751
|
+
await mkdir35(dirname62(cachePath), { recursive: true });
|
|
568708
568752
|
await writeFile40(cachePath, config5.cachedChangelog, {
|
|
568709
568753
|
encoding: "utf-8",
|
|
568710
568754
|
flag: "wx"
|
|
@@ -568726,7 +568770,7 @@ async function fetchAndStoreChangelog() {
|
|
|
568726
568770
|
return;
|
|
568727
568771
|
}
|
|
568728
568772
|
const cachePath = getChangelogCachePath();
|
|
568729
|
-
await mkdir35(
|
|
568773
|
+
await mkdir35(dirname62(cachePath), { recursive: true });
|
|
568730
568774
|
await writeFile40(cachePath, changelogContent, { encoding: "utf-8" });
|
|
568731
568775
|
changelogMemoryCache = changelogContent;
|
|
568732
568776
|
const changelogLastFetched = Date.now();
|
|
@@ -568795,7 +568839,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
|
|
|
568795
568839
|
}
|
|
568796
568840
|
return [];
|
|
568797
568841
|
}
|
|
568798
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.
|
|
568842
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.436") {
|
|
568799
568843
|
if (false) {}
|
|
568800
568844
|
const cachedChangelog = await getStoredChangelog();
|
|
568801
568845
|
if (lastSeenVersion !== currentVersion || !cachedChangelog) {
|
|
@@ -568808,7 +568852,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.3.435")
|
|
|
568808
568852
|
releaseNotes
|
|
568809
568853
|
};
|
|
568810
568854
|
}
|
|
568811
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.3.
|
|
568855
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.3.436") {
|
|
568812
568856
|
if (false) {}
|
|
568813
568857
|
const releaseNotes = getRecentReleaseNotes(currentVersion, lastSeenVersion);
|
|
568814
568858
|
return {
|
|
@@ -568936,7 +568980,7 @@ function getRecentActivitySync() {
|
|
|
568936
568980
|
return cachedActivity;
|
|
568937
568981
|
}
|
|
568938
568982
|
function getLogoDisplayData() {
|
|
568939
|
-
const version2 = process.env.DEMO_VERSION ?? "1.3.
|
|
568983
|
+
const version2 = process.env.DEMO_VERSION ?? "1.3.436";
|
|
568940
568984
|
const serverUrl = getDirectConnectServerUrl();
|
|
568941
568985
|
const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
|
|
568942
568986
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -570183,7 +570227,7 @@ function LogoV2() {
|
|
|
570183
570227
|
if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
570184
570228
|
t2 = () => {
|
|
570185
570229
|
const currentConfig = getGlobalConfig();
|
|
570186
|
-
if (currentConfig.lastReleaseNotesSeen === "1.3.
|
|
570230
|
+
if (currentConfig.lastReleaseNotesSeen === "1.3.436") {
|
|
570187
570231
|
return;
|
|
570188
570232
|
}
|
|
570189
570233
|
saveGlobalConfig(_temp327);
|
|
@@ -570661,7 +570705,7 @@ function LogoV2() {
|
|
|
570661
570705
|
t24 = $3[61];
|
|
570662
570706
|
}
|
|
570663
570707
|
const _latestNpm = getCachedLatestNpmVersionSync();
|
|
570664
|
-
const _updateFeeds = _latestNpm && gt(_latestNpm, "1.3.
|
|
570708
|
+
const _updateFeeds = _latestNpm && gt(_latestNpm, "1.3.436") ? [createUpdateAvailableFeed("1.3.436", _latestNpm)] : [];
|
|
570665
570709
|
const t25 = layoutMode === "horizontal" && /* @__PURE__ */ jsx_dev_runtime239.jsxDEV(FeedColumn, {
|
|
570666
570710
|
feeds: showOnboarding ? [createProjectOnboardingFeed(getSteps()), createRecentActivityFeed(activities)] : showGuestPassesUpsell ? [createRecentActivityFeed(activities), createGuestPassesFeed()] : showOverageCreditUpsell ? [createRecentActivityFeed(activities), createOverageCreditFeed()] : [createRecentActivityFeed(activities), ..._updateFeeds, createWhatsNewFeed(changelog)],
|
|
570667
570711
|
maxWidth: rightWidth
|
|
@@ -570861,12 +570905,12 @@ function LogoV2() {
|
|
|
570861
570905
|
return t41;
|
|
570862
570906
|
}
|
|
570863
570907
|
function _temp327(current) {
|
|
570864
|
-
if (current.lastReleaseNotesSeen === "1.3.
|
|
570908
|
+
if (current.lastReleaseNotesSeen === "1.3.436") {
|
|
570865
570909
|
return current;
|
|
570866
570910
|
}
|
|
570867
570911
|
return {
|
|
570868
570912
|
...current,
|
|
570869
|
-
lastReleaseNotesSeen: "1.3.
|
|
570913
|
+
lastReleaseNotesSeen: "1.3.436"
|
|
570870
570914
|
};
|
|
570871
570915
|
}
|
|
570872
570916
|
function _temp241(s_0) {
|
|
@@ -595678,7 +595722,7 @@ var init_rewind = __esm(() => {
|
|
|
595678
595722
|
});
|
|
595679
595723
|
|
|
595680
595724
|
// src/utils/heapDumpService.ts
|
|
595681
|
-
import { createWriteStream as createWriteStream4, writeFileSync as
|
|
595725
|
+
import { createWriteStream as createWriteStream4, writeFileSync as writeFileSync14 } from "fs";
|
|
595682
595726
|
import { readdir as readdir27, readFile as readFile49, writeFile as writeFile42 } from "fs/promises";
|
|
595683
595727
|
import { join as join141 } from "path";
|
|
595684
595728
|
import { pipeline as pipeline4 } from "stream/promises";
|
|
@@ -595770,7 +595814,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
|
|
|
595770
595814
|
smapsRollup,
|
|
595771
595815
|
platform: process.platform,
|
|
595772
595816
|
nodeVersion: process.version,
|
|
595773
|
-
ccVersion: "1.3.
|
|
595817
|
+
ccVersion: "1.3.436"
|
|
595774
595818
|
};
|
|
595775
595819
|
}
|
|
595776
595820
|
async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
@@ -595817,7 +595861,7 @@ async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
|
595817
595861
|
}
|
|
595818
595862
|
async function writeHeapSnapshot(filepath) {
|
|
595819
595863
|
if (typeof Bun !== "undefined") {
|
|
595820
|
-
|
|
595864
|
+
writeFileSync14(filepath, Bun.generateHeapSnapshot("v8", "arraybuffer"), {
|
|
595821
595865
|
mode: 384
|
|
595822
595866
|
});
|
|
595823
595867
|
Bun.gc(true);
|
|
@@ -596292,7 +596336,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
596292
596336
|
var call49 = async () => {
|
|
596293
596337
|
return {
|
|
596294
596338
|
type: "text",
|
|
596295
|
-
value: "1.3.
|
|
596339
|
+
value: "1.3.436"
|
|
596296
596340
|
};
|
|
596297
596341
|
}, version2, version_default;
|
|
596298
596342
|
var init_version = __esm(() => {
|
|
@@ -597588,10 +597632,10 @@ var init_contactMe2 = __esm(() => {
|
|
|
597588
597632
|
import {
|
|
597589
597633
|
chmodSync as chmodSync5,
|
|
597590
597634
|
existsSync as existsSync24,
|
|
597591
|
-
mkdirSync as
|
|
597635
|
+
mkdirSync as mkdirSync13,
|
|
597592
597636
|
readFileSync as readFileSync27,
|
|
597593
597637
|
rmSync as rmSync5,
|
|
597594
|
-
writeFileSync as
|
|
597638
|
+
writeFileSync as writeFileSync15
|
|
597595
597639
|
} from "fs";
|
|
597596
597640
|
import { join as join142 } from "path";
|
|
597597
597641
|
function isUseRayuOAuthEnabled() {
|
|
@@ -597619,9 +597663,9 @@ function readRayuSession() {
|
|
|
597619
597663
|
function writeRayuSession(store) {
|
|
597620
597664
|
const dir = getRayuConfigHomeDir();
|
|
597621
597665
|
if (!existsSync24(dir))
|
|
597622
|
-
|
|
597666
|
+
mkdirSync13(dir, { recursive: true });
|
|
597623
597667
|
const p = sessionPath();
|
|
597624
|
-
|
|
597668
|
+
writeFileSync15(p, JSON.stringify(store, null, 2), { mode: 384 });
|
|
597625
597669
|
try {
|
|
597626
597670
|
chmodSync5(p, 384);
|
|
597627
597671
|
} catch {}
|
|
@@ -597963,7 +598007,7 @@ var init_advisor2 = __esm(() => {
|
|
|
597963
598007
|
// src/skills/bundledSkills.ts
|
|
597964
598008
|
import { constants as fsConstants5 } from "fs";
|
|
597965
598009
|
import { mkdir as mkdir38, open as open14 } from "fs/promises";
|
|
597966
|
-
import { dirname as
|
|
598010
|
+
import { dirname as dirname63, isAbsolute as isAbsolute33, join as join143, normalize as normalize16, sep as pathSep2 } from "path";
|
|
597967
598011
|
function registerBundledSkill(definition) {
|
|
597968
598012
|
const { files: files3 } = definition;
|
|
597969
598013
|
let skillRoot;
|
|
@@ -598027,7 +598071,7 @@ async function writeSkillFiles(dir, files3) {
|
|
|
598027
598071
|
const byParent = new Map;
|
|
598028
598072
|
for (const [relPath, content] of Object.entries(files3)) {
|
|
598029
598073
|
const target = resolveSkillFilePath(dir, relPath);
|
|
598030
|
-
const parent2 =
|
|
598074
|
+
const parent2 = dirname63(target);
|
|
598031
598075
|
const entry = [target, content];
|
|
598032
598076
|
const group = byParent.get(parent2);
|
|
598033
598077
|
if (group)
|
|
@@ -598775,10 +598819,10 @@ __export(exports_googleOAuth, {
|
|
|
598775
598819
|
import {
|
|
598776
598820
|
chmodSync as chmodSync6,
|
|
598777
598821
|
existsSync as existsSync25,
|
|
598778
|
-
mkdirSync as
|
|
598822
|
+
mkdirSync as mkdirSync14,
|
|
598779
598823
|
readFileSync as readFileSync28,
|
|
598780
598824
|
rmSync as rmSync6,
|
|
598781
|
-
writeFileSync as
|
|
598825
|
+
writeFileSync as writeFileSync16
|
|
598782
598826
|
} from "fs";
|
|
598783
598827
|
import { createServer as createServer8 } from "http";
|
|
598784
598828
|
import { join as join146 } from "path";
|
|
@@ -598804,9 +598848,9 @@ function readGeminiOAuthStore() {
|
|
|
598804
598848
|
function writeGeminiOAuthStore(store) {
|
|
598805
598849
|
const dir = getRayuConfigHomeDir();
|
|
598806
598850
|
if (!existsSync25(dir))
|
|
598807
|
-
|
|
598851
|
+
mkdirSync14(dir, { recursive: true });
|
|
598808
598852
|
const p = tokenPath2();
|
|
598809
|
-
|
|
598853
|
+
writeFileSync16(p, JSON.stringify(store, null, 2), { mode: 384 });
|
|
598810
598854
|
try {
|
|
598811
598855
|
chmodSync6(p, 384);
|
|
598812
598856
|
} catch {}
|
|
@@ -606068,7 +606112,7 @@ function generateHtmlReport(data, insights) {
|
|
|
606068
606112
|
</html>`;
|
|
606069
606113
|
}
|
|
606070
606114
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
606071
|
-
const version3 = typeof MACRO !== "undefined" ? "1.3.
|
|
606115
|
+
const version3 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
|
|
606072
606116
|
const remote_hosts_collected = remoteStats?.hosts.filter((h3) => h3.sessionCount > 0).map((h3) => h3.name);
|
|
606073
606117
|
const facets_summary = {
|
|
606074
606118
|
total: facets.size,
|
|
@@ -607153,7 +607197,7 @@ import {
|
|
|
607153
607197
|
unlink as unlink23,
|
|
607154
607198
|
writeFile as writeFile45
|
|
607155
607199
|
} from "fs/promises";
|
|
607156
|
-
import { basename as basename46, dirname as
|
|
607200
|
+
import { basename as basename46, dirname as dirname65, join as join151 } from "path";
|
|
607157
607201
|
function isTranscriptMessage(entry) {
|
|
607158
607202
|
return entry.type === "user" || entry.type === "assistant" || entry.type === "attachment" || entry.type === "system";
|
|
607159
607203
|
}
|
|
@@ -607198,7 +607242,7 @@ function getAgentMetadataPath(agentId) {
|
|
|
607198
607242
|
}
|
|
607199
607243
|
async function writeAgentMetadata(agentId, metadata) {
|
|
607200
607244
|
const path28 = getAgentMetadataPath(agentId);
|
|
607201
|
-
await mkdir41(
|
|
607245
|
+
await mkdir41(dirname65(path28), { recursive: true });
|
|
607202
607246
|
await writeFile45(path28, JSON.stringify(metadata));
|
|
607203
607247
|
}
|
|
607204
607248
|
async function readAgentMetadata(agentId) {
|
|
@@ -607221,7 +607265,7 @@ function getRemoteAgentMetadataPath(taskId) {
|
|
|
607221
607265
|
}
|
|
607222
607266
|
async function writeRemoteAgentMetadata(taskId, metadata) {
|
|
607223
607267
|
const path28 = getRemoteAgentMetadataPath(taskId);
|
|
607224
|
-
await mkdir41(
|
|
607268
|
+
await mkdir41(dirname65(path28), { recursive: true });
|
|
607225
607269
|
await writeFile45(path28, JSON.stringify(metadata));
|
|
607226
607270
|
}
|
|
607227
607271
|
async function readRemoteAgentMetadata(taskId) {
|
|
@@ -607410,7 +607454,7 @@ class Project {
|
|
|
607410
607454
|
try {
|
|
607411
607455
|
await fsAppendFile(filePath, data, { mode: 384 });
|
|
607412
607456
|
} catch {
|
|
607413
|
-
await mkdir41(
|
|
607457
|
+
await mkdir41(dirname65(filePath), { recursive: true, mode: 448 });
|
|
607414
607458
|
await fsAppendFile(filePath, data, { mode: 384 });
|
|
607415
607459
|
}
|
|
607416
607460
|
}
|
|
@@ -608009,7 +608053,7 @@ async function hydrateFromCCRv2InternalEvents(sessionId) {
|
|
|
608009
608053
|
}
|
|
608010
608054
|
for (const [agentId, entries] of byAgent) {
|
|
608011
608055
|
const agentFile = getAgentTranscriptPath(asAgentId(agentId));
|
|
608012
|
-
await mkdir41(
|
|
608056
|
+
await mkdir41(dirname65(agentFile), { recursive: true, mode: 448 });
|
|
608013
608057
|
const agentContent = entries.map((p) => jsonStringify(p) + `
|
|
608014
608058
|
`).join("");
|
|
608015
608059
|
await writeFile45(agentFile, agentContent, {
|
|
@@ -608546,7 +608590,7 @@ function appendEntryToFile(fullPath, entry) {
|
|
|
608546
608590
|
try {
|
|
608547
608591
|
fs15.appendFileSync(fullPath, line, { mode: 384 });
|
|
608548
608592
|
} catch {
|
|
608549
|
-
fs15.mkdirSync(
|
|
608593
|
+
fs15.mkdirSync(dirname65(fullPath), { mode: 448 });
|
|
608550
608594
|
fs15.appendFileSync(fullPath, line, { mode: 384 });
|
|
608551
608595
|
}
|
|
608552
608596
|
}
|
|
@@ -609976,7 +610020,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
609976
610020
|
init_settings2();
|
|
609977
610021
|
init_slowOperations();
|
|
609978
610022
|
init_uuid();
|
|
609979
|
-
VERSION6 = typeof MACRO !== "undefined" ? "1.3.
|
|
610023
|
+
VERSION6 = typeof MACRO !== "undefined" ? "1.3.436" : "unknown";
|
|
609980
610024
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
609981
610025
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
609982
610026
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -610293,7 +610337,6 @@ function loadAgentMemoryPrompt(agentType, scope) {
|
|
|
610293
610337
|
break;
|
|
610294
610338
|
}
|
|
610295
610339
|
const memoryDir = getAgentMemoryDir(agentType, scope);
|
|
610296
|
-
ensureMemoryDirExists(memoryDir);
|
|
610297
610340
|
const coworkExtraGuidelines = process.env.CLAUDE_COWORK_MEMORY_EXTRA_GUIDELINES;
|
|
610298
610341
|
return buildMemoryPrompt({
|
|
610299
610342
|
displayName: "Persistent Agent Memory",
|
|
@@ -611197,7 +611240,7 @@ var init_filesystem = __esm(() => {
|
|
|
611197
611240
|
});
|
|
611198
611241
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
611199
611242
|
const nonce = randomBytes19(16).toString("hex");
|
|
611200
|
-
return join153(getClaudeTempDir(), "bundled-skills", "1.3.
|
|
611243
|
+
return join153(getClaudeTempDir(), "bundled-skills", "1.3.436", nonce);
|
|
611201
611244
|
});
|
|
611202
611245
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
611203
611246
|
});
|
|
@@ -615490,7 +615533,7 @@ import {
|
|
|
615490
615533
|
symlink as symlink5,
|
|
615491
615534
|
utimes as utimes2
|
|
615492
615535
|
} from "fs/promises";
|
|
615493
|
-
import { basename as basename48, dirname as
|
|
615536
|
+
import { basename as basename48, dirname as dirname66, join as join155 } from "path";
|
|
615494
615537
|
function validateWorktreeSlug(slug) {
|
|
615495
615538
|
if (slug.length > MAX_WORKTREE_SLUG_LENGTH) {
|
|
615496
615539
|
throw new Error(`Invalid worktree name: must be ${MAX_WORKTREE_SLUG_LENGTH} characters or fewer (got ${slug.length})`);
|
|
@@ -615686,7 +615729,7 @@ async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
|
|
|
615686
615729
|
const srcPath = join155(repoRoot, relativePath2);
|
|
615687
615730
|
const destPath = join155(worktreePath, relativePath2);
|
|
615688
615731
|
try {
|
|
615689
|
-
await mkdir43(
|
|
615732
|
+
await mkdir43(dirname66(destPath), { recursive: true });
|
|
615690
615733
|
await copyFile11(srcPath, destPath);
|
|
615691
615734
|
copied.push(relativePath2);
|
|
615692
615735
|
} catch (e2) {
|
|
@@ -615703,7 +615746,7 @@ async function performPostCreationSetup(repoRoot, worktreePath) {
|
|
|
615703
615746
|
const sourceSettingsLocal = join155(repoRoot, localSettingsRelativePath);
|
|
615704
615747
|
try {
|
|
615705
615748
|
const destSettingsLocal = join155(worktreePath, localSettingsRelativePath);
|
|
615706
|
-
await mkdirRecursive(
|
|
615749
|
+
await mkdirRecursive(dirname66(destSettingsLocal));
|
|
615707
615750
|
await copyFile11(sourceSettingsLocal, destSettingsLocal);
|
|
615708
615751
|
logForDebugging(`Copied settings.local.json to worktree: ${destSettingsLocal}`);
|
|
615709
615752
|
} catch (e2) {
|
|
@@ -616312,7 +616355,7 @@ __export(exports_update, {
|
|
|
616312
616355
|
import { execFileSync as execFileSync3 } from "node:child_process";
|
|
616313
616356
|
import { homedir as homedir35 } from "os";
|
|
616314
616357
|
async function update() {
|
|
616315
|
-
writeToStdout(`Current version: ${"1.3.
|
|
616358
|
+
writeToStdout(`Current version: ${"1.3.436"}
|
|
616316
616359
|
`);
|
|
616317
616360
|
const isBundled = isInBundledMode();
|
|
616318
616361
|
if (isBundled) {
|
|
@@ -616338,13 +616381,13 @@ Manual check: npm view ${"@rayu-dev/rayu-cli"} version
|
|
|
616338
616381
|
process.exit(1);
|
|
616339
616382
|
return;
|
|
616340
616383
|
}
|
|
616341
|
-
if (latestVersion === "1.3.
|
|
616384
|
+
if (latestVersion === "1.3.436") {
|
|
616342
616385
|
writeToStdout(source_default.green(`
|
|
616343
|
-
Rayu CLI is up to date (${"1.3.
|
|
616386
|
+
Rayu CLI is up to date (${"1.3.436"})
|
|
616344
616387
|
`));
|
|
616345
616388
|
process.exit(0);
|
|
616346
616389
|
}
|
|
616347
|
-
writeToStdout(`New version available: ${latestVersion} (current: ${"1.3.
|
|
616390
|
+
writeToStdout(`New version available: ${latestVersion} (current: ${"1.3.436"})
|
|
616348
616391
|
`);
|
|
616349
616392
|
writeToStdout(`Installing update...
|
|
616350
616393
|
|
|
@@ -616368,7 +616411,7 @@ Try manually:
|
|
|
616368
616411
|
return;
|
|
616369
616412
|
}
|
|
616370
616413
|
writeToStdout(source_default.green(`
|
|
616371
|
-
Successfully updated from ${"1.3.
|
|
616414
|
+
Successfully updated from ${"1.3.436"} to ${latestVersion}
|
|
616372
616415
|
`));
|
|
616373
616416
|
process.exit(0);
|
|
616374
616417
|
}
|
|
@@ -616382,14 +616425,14 @@ async function updateNativeBinary() {
|
|
|
616382
616425
|
} catch {
|
|
616383
616426
|
latestVersion = "";
|
|
616384
616427
|
}
|
|
616385
|
-
if (latestVersion && latestVersion === "1.3.
|
|
616428
|
+
if (latestVersion && latestVersion === "1.3.436") {
|
|
616386
616429
|
writeToStdout(source_default.green(`
|
|
616387
|
-
Rayu CLI is up to date (1.3.
|
|
616430
|
+
Rayu CLI is up to date (1.3.436)
|
|
616388
616431
|
`));
|
|
616389
616432
|
process.exit(0);
|
|
616390
616433
|
}
|
|
616391
616434
|
if (latestVersion) {
|
|
616392
|
-
writeToStdout(`New version available: ${latestVersion} (current: 1.3.
|
|
616435
|
+
writeToStdout(`New version available: ${latestVersion} (current: 1.3.436)
|
|
616393
616436
|
`);
|
|
616394
616437
|
}
|
|
616395
616438
|
writeToStdout(`Downloading and installing update...
|
|
@@ -616404,13 +616447,13 @@ Rayu CLI is up to date (1.3.435)
|
|
|
616404
616447
|
return;
|
|
616405
616448
|
}
|
|
616406
616449
|
writeToStdout(source_default.green(`
|
|
616407
|
-
Rayu CLI is up to date (1.3.
|
|
616450
|
+
Rayu CLI is up to date (1.3.436)
|
|
616408
616451
|
`));
|
|
616409
616452
|
process.exit(0);
|
|
616410
616453
|
}
|
|
616411
616454
|
const updatedTo = result.latestVersion ?? latestVersion ?? "latest";
|
|
616412
616455
|
writeToStdout(source_default.green(`
|
|
616413
|
-
Successfully updated from 1.3.
|
|
616456
|
+
Successfully updated from 1.3.436 to ${updatedTo}
|
|
616414
616457
|
`));
|
|
616415
616458
|
writeToStdout(`Restart your terminal to use the new version.
|
|
616416
616459
|
`);
|
|
@@ -616441,7 +616484,7 @@ __export(exports_uninstall, {
|
|
|
616441
616484
|
import { execFileSync as execFileSync4 } from "node:child_process";
|
|
616442
616485
|
import { homedir as homedir36 } from "os";
|
|
616443
616486
|
async function uninstall() {
|
|
616444
|
-
writeToStdout(`Uninstalling Rayu CLI (${"1.3.
|
|
616487
|
+
writeToStdout(`Uninstalling Rayu CLI (${"1.3.436"})...
|
|
616445
616488
|
`);
|
|
616446
616489
|
writeToStdout(`Running: npm uninstall -g ${"@rayu-dev/rayu-cli"}
|
|
616447
616490
|
|
|
@@ -616464,7 +616507,7 @@ Try running manually:
|
|
|
616464
616507
|
process.exit(1);
|
|
616465
616508
|
}
|
|
616466
616509
|
writeToStdout(source_default.green(`
|
|
616467
|
-
Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.3.
|
|
616510
|
+
Successfully uninstalled ${"@rayu-dev/rayu-cli"} ${"1.3.436"}
|
|
616468
616511
|
`));
|
|
616469
616512
|
writeToStdout(`Thanks for using Rayu CLI!
|
|
616470
616513
|
`);
|
|
@@ -616479,7 +616522,7 @@ var exports_firstRun = {};
|
|
|
616479
616522
|
__export(exports_firstRun, {
|
|
616480
616523
|
showFirstRunWelcome: () => showFirstRunWelcome
|
|
616481
616524
|
});
|
|
616482
|
-
import { existsSync as existsSync26, mkdirSync as
|
|
616525
|
+
import { existsSync as existsSync26, mkdirSync as mkdirSync15, writeFileSync as writeFileSync17 } from "node:fs";
|
|
616483
616526
|
import { join as join156 } from "node:path";
|
|
616484
616527
|
function markerPath() {
|
|
616485
616528
|
return join156(getRayuConfigHomeDir(), ".installed");
|
|
@@ -616515,8 +616558,8 @@ function showFirstRunWelcome() {
|
|
|
616515
616558
|
`) + `
|
|
616516
616559
|
`);
|
|
616517
616560
|
try {
|
|
616518
|
-
|
|
616519
|
-
|
|
616561
|
+
mkdirSync15(getRayuConfigHomeDir(), { recursive: true });
|
|
616562
|
+
writeFileSync17(markerPath(), "1.3.436", "utf8");
|
|
616520
616563
|
} catch {}
|
|
616521
616564
|
}
|
|
616522
616565
|
var init_firstRun = __esm(() => {
|
|
@@ -628359,7 +628402,7 @@ async function initializeBetaTracing(resource) {
|
|
|
628359
628402
|
});
|
|
628360
628403
|
import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
|
|
628361
628404
|
setLoggerProvider(loggerProvider);
|
|
628362
|
-
const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.
|
|
628405
|
+
const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.436");
|
|
628363
628406
|
setEventLogger(eventLogger);
|
|
628364
628407
|
process.on("beforeExit", async () => {
|
|
628365
628408
|
await loggerProvider?.forceFlush();
|
|
@@ -628399,7 +628442,7 @@ async function initializeTelemetry() {
|
|
|
628399
628442
|
const platform4 = getPlatform();
|
|
628400
628443
|
const baseAttributes = {
|
|
628401
628444
|
[import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
|
|
628402
|
-
[import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.3.
|
|
628445
|
+
[import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.3.436"
|
|
628403
628446
|
};
|
|
628404
628447
|
if (platform4 === "wsl") {
|
|
628405
628448
|
const wslVersion = getWslVersion();
|
|
@@ -628444,7 +628487,7 @@ async function initializeTelemetry() {
|
|
|
628444
628487
|
} catch {}
|
|
628445
628488
|
};
|
|
628446
628489
|
registerCleanup(shutdownTelemetry2);
|
|
628447
|
-
return meterProvider2.getMeter("com.anthropic.claude_code", "1.3.
|
|
628490
|
+
return meterProvider2.getMeter("com.anthropic.claude_code", "1.3.436");
|
|
628448
628491
|
}
|
|
628449
628492
|
const meterProvider = new import_sdk_metrics2.MeterProvider({
|
|
628450
628493
|
resource,
|
|
@@ -628464,7 +628507,7 @@ async function initializeTelemetry() {
|
|
|
628464
628507
|
});
|
|
628465
628508
|
import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
|
|
628466
628509
|
setLoggerProvider(loggerProvider);
|
|
628467
|
-
const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.
|
|
628510
|
+
const eventLogger = import_api_logs.logs.getLogger("com.anthropic.claude_code.events", "1.3.436");
|
|
628468
628511
|
setEventLogger(eventLogger);
|
|
628469
628512
|
logForDebugging("[3P telemetry] Event logger set successfully");
|
|
628470
628513
|
process.on("beforeExit", async () => {
|
|
@@ -628526,7 +628569,7 @@ Current timeout: ${timeoutMs}ms
|
|
|
628526
628569
|
}
|
|
628527
628570
|
};
|
|
628528
628571
|
registerCleanup(shutdownTelemetry);
|
|
628529
|
-
return meterProvider.getMeter("com.anthropic.claude_code", "1.3.
|
|
628572
|
+
return meterProvider.getMeter("com.anthropic.claude_code", "1.3.436");
|
|
628530
628573
|
}
|
|
628531
628574
|
async function flushTelemetry() {
|
|
628532
628575
|
const meterProvider = getMeterProvider();
|
|
@@ -630039,7 +630082,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
630039
630082
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
630040
630083
|
apiKeySource: getAnthropicApiKeyWithSource().source,
|
|
630041
630084
|
betas: getSdkBetas(),
|
|
630042
|
-
claude_code_version: "1.3.
|
|
630085
|
+
claude_code_version: "1.3.436",
|
|
630043
630086
|
output_style: outputStyle2,
|
|
630044
630087
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
630045
630088
|
skills: inputs.skills.filter((s2) => s2.userInvocable !== false).map((skill) => skill.name),
|
|
@@ -630842,7 +630885,7 @@ var EDIT_INTERVAL_MS = 1100, PLACEHOLDER = "\uD83D\uDCAC …";
|
|
|
630842
630885
|
|
|
630843
630886
|
// src/telegram/telegramBridge.ts
|
|
630844
630887
|
import { hostname as hostname3 } from "os";
|
|
630845
|
-
import { closeSync as closeSync5, existsSync as existsSync27, openSync as openSync6, readFileSync as readFileSync29, unlinkSync as unlinkSync4, writeFileSync as
|
|
630888
|
+
import { closeSync as closeSync5, existsSync as existsSync27, openSync as openSync6, readFileSync as readFileSync29, unlinkSync as unlinkSync4, writeFileSync as writeFileSync18, writeSync as writeSync3 } from "fs";
|
|
630846
630889
|
import { join as join158 } from "path";
|
|
630847
630890
|
function linkedChatId() {
|
|
630848
630891
|
return readTelegramConfig().linkedChatId;
|
|
@@ -631107,7 +631150,7 @@ function acquireBridgeLock() {
|
|
|
631107
631150
|
return false;
|
|
631108
631151
|
}
|
|
631109
631152
|
}
|
|
631110
|
-
|
|
631153
|
+
writeFileSync18(path28, content, { mode: 384 });
|
|
631111
631154
|
} catch {}
|
|
631112
631155
|
return true;
|
|
631113
631156
|
}
|
|
@@ -631119,7 +631162,7 @@ function updateHeartbeat() {
|
|
|
631119
631162
|
const raw = readFileSync29(path28, "utf8").trim();
|
|
631120
631163
|
const pid = parseInt(raw.split(":")[0] ?? "", 10);
|
|
631121
631164
|
if (pid === process.pid) {
|
|
631122
|
-
|
|
631165
|
+
writeFileSync18(path28, buildLockContent(), { mode: 384 });
|
|
631123
631166
|
}
|
|
631124
631167
|
} catch {}
|
|
631125
631168
|
}
|
|
@@ -646249,7 +646292,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
646249
646292
|
function getSemverPart(version3) {
|
|
646250
646293
|
return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
|
|
646251
646294
|
}
|
|
646252
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.3.
|
|
646295
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.3.436") {
|
|
646253
646296
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react217.useState(() => getSemverPart(initialVersion));
|
|
646254
646297
|
if (!updatedVersion) {
|
|
646255
646298
|
return null;
|
|
@@ -646289,7 +646332,7 @@ function AutoUpdater({
|
|
|
646289
646332
|
return;
|
|
646290
646333
|
}
|
|
646291
646334
|
if (false) {}
|
|
646292
|
-
const currentVersion = "1.3.
|
|
646335
|
+
const currentVersion = "1.3.436";
|
|
646293
646336
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
646294
646337
|
let latestVersion = await getLatestVersion(channel);
|
|
646295
646338
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -646502,12 +646545,12 @@ function NativeAutoUpdater({
|
|
|
646502
646545
|
logEvent("tengu_native_auto_updater_start", {});
|
|
646503
646546
|
try {
|
|
646504
646547
|
const maxVersion = await getMaxVersion();
|
|
646505
|
-
if (maxVersion && gt("1.3.
|
|
646548
|
+
if (maxVersion && gt("1.3.436", maxVersion)) {
|
|
646506
646549
|
const msg = await getMaxVersionMessage();
|
|
646507
646550
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
646508
646551
|
}
|
|
646509
646552
|
const result = await installLatest(channel);
|
|
646510
|
-
const currentVersion = "1.3.
|
|
646553
|
+
const currentVersion = "1.3.436";
|
|
646511
646554
|
const latencyMs = Date.now() - startTime;
|
|
646512
646555
|
if (result.lockFailed) {
|
|
646513
646556
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -646644,17 +646687,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
646644
646687
|
const maxVersion = await getMaxVersion();
|
|
646645
646688
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
646646
646689
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
646647
|
-
if (gte("1.3.
|
|
646648
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.3.
|
|
646690
|
+
if (gte("1.3.436", maxVersion)) {
|
|
646691
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.3.436"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
646649
646692
|
setUpdateAvailable(false);
|
|
646650
646693
|
return;
|
|
646651
646694
|
}
|
|
646652
646695
|
latest = maxVersion;
|
|
646653
646696
|
}
|
|
646654
|
-
const hasUpdate = latest && !gte("1.3.
|
|
646697
|
+
const hasUpdate = latest && !gte("1.3.436", latest) && !shouldSkipVersion(latest);
|
|
646655
646698
|
setUpdateAvailable(!!hasUpdate);
|
|
646656
646699
|
if (hasUpdate) {
|
|
646657
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.3.
|
|
646700
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.3.436"} -> ${latest}`);
|
|
646658
646701
|
}
|
|
646659
646702
|
};
|
|
646660
646703
|
$3[0] = t1;
|
|
@@ -646688,7 +646731,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
646688
646731
|
wrap: "truncate",
|
|
646689
646732
|
children: [
|
|
646690
646733
|
"currentVersion: ",
|
|
646691
|
-
"1.3.
|
|
646734
|
+
"1.3.436"
|
|
646692
646735
|
]
|
|
646693
646736
|
}, undefined, true, undefined, this);
|
|
646694
646737
|
$3[3] = verbose;
|
|
@@ -654853,7 +654896,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
654853
654896
|
project_dir: getOriginalCwd(),
|
|
654854
654897
|
added_dirs: addedDirs
|
|
654855
654898
|
},
|
|
654856
|
-
version: "1.3.
|
|
654899
|
+
version: "1.3.436",
|
|
654857
654900
|
output_style: {
|
|
654858
654901
|
name: outputStyleName
|
|
654859
654902
|
},
|
|
@@ -664611,7 +664654,7 @@ __export(exports_asciicast, {
|
|
|
664611
664654
|
_resetRecordingStateForTesting: () => _resetRecordingStateForTesting
|
|
664612
664655
|
});
|
|
664613
664656
|
import { appendFile as appendFile6, rename as rename13 } from "fs/promises";
|
|
664614
|
-
import { basename as basename61, dirname as
|
|
664657
|
+
import { basename as basename61, dirname as dirname67, join as join162 } from "path";
|
|
664615
664658
|
function getRecordFilePath() {
|
|
664616
664659
|
if (recordingState.filePath !== null) {
|
|
664617
664660
|
return recordingState.filePath;
|
|
@@ -664693,7 +664736,7 @@ function installAsciicastRecorder() {
|
|
|
664693
664736
|
}
|
|
664694
664737
|
});
|
|
664695
664738
|
try {
|
|
664696
|
-
getFsImplementation().mkdirSync(
|
|
664739
|
+
getFsImplementation().mkdirSync(dirname67(filePath));
|
|
664697
664740
|
} catch {}
|
|
664698
664741
|
getFsImplementation().appendFileSync(filePath, header + `
|
|
664699
664742
|
`, { mode: 384 });
|
|
@@ -664762,7 +664805,7 @@ var init_asciicast = __esm(() => {
|
|
|
664762
664805
|
});
|
|
664763
664806
|
|
|
664764
664807
|
// src/utils/sessionRestore.ts
|
|
664765
|
-
import { dirname as
|
|
664808
|
+
import { dirname as dirname68 } from "path";
|
|
664766
664809
|
function extractTodosFromTranscript(messages) {
|
|
664767
664810
|
for (let i4 = messages.length - 1;i4 >= 0; i4--) {
|
|
664768
664811
|
const msg = messages[i4];
|
|
@@ -664887,7 +664930,7 @@ async function processResumedConversation(result, opts, context2) {
|
|
|
664887
664930
|
if (!opts.forkSession) {
|
|
664888
664931
|
const sid = opts.sessionIdOverride ?? result.sessionId;
|
|
664889
664932
|
if (sid) {
|
|
664890
|
-
switchSession(asSessionId(sid), opts.transcriptPath ?
|
|
664933
|
+
switchSession(asSessionId(sid), opts.transcriptPath ? dirname68(opts.transcriptPath) : null);
|
|
664891
664934
|
await renameRecordingForSession();
|
|
664892
664935
|
await resetSessionFilePointer();
|
|
664893
664936
|
restoreCostStateForSession(sid);
|
|
@@ -666257,7 +666300,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
|
|
|
666257
666300
|
} catch {}
|
|
666258
666301
|
const data = {
|
|
666259
666302
|
trigger,
|
|
666260
|
-
version: "1.3.
|
|
666303
|
+
version: "1.3.436",
|
|
666261
666304
|
platform: process.platform,
|
|
666262
666305
|
transcript,
|
|
666263
666306
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -673735,7 +673778,7 @@ var exports_REPL = {};
|
|
|
673735
673778
|
__export(exports_REPL, {
|
|
673736
673779
|
REPL: () => REPL
|
|
673737
673780
|
});
|
|
673738
|
-
import { dirname as
|
|
673781
|
+
import { dirname as dirname69, join as join166 } from "path";
|
|
673739
673782
|
import { tmpdir as tmpdir16 } from "os";
|
|
673740
673783
|
import { writeFile as writeFile47 } from "fs/promises";
|
|
673741
673784
|
import { randomUUID as randomUUID52 } from "crypto";
|
|
@@ -674674,7 +674717,7 @@ function REPL({
|
|
|
674674
674717
|
const targetSessionCosts = getStoredSessionCosts(sessionId);
|
|
674675
674718
|
saveCurrentSessionCosts();
|
|
674676
674719
|
resetCostState();
|
|
674677
|
-
switchSession(asSessionId(sessionId), log3.fullPath ?
|
|
674720
|
+
switchSession(asSessionId(sessionId), log3.fullPath ? dirname69(log3.fullPath) : null);
|
|
674678
674721
|
const {
|
|
674679
674722
|
renameRecordingForSession: renameRecordingForSession2
|
|
674680
674723
|
} = await Promise.resolve().then(() => (init_asciicast(), exports_asciicast));
|
|
@@ -678302,7 +678345,7 @@ function WelcomeV2() {
|
|
|
678302
678345
|
dimColor: true,
|
|
678303
678346
|
children: [
|
|
678304
678347
|
"v",
|
|
678305
|
-
"1.3.
|
|
678348
|
+
"1.3.436"
|
|
678306
678349
|
]
|
|
678307
678350
|
}, undefined, true, undefined, this)
|
|
678308
678351
|
]
|
|
@@ -680036,7 +680079,7 @@ function completeOnboarding() {
|
|
|
680036
680079
|
saveGlobalConfig((current) => ({
|
|
680037
680080
|
...current,
|
|
680038
680081
|
hasCompletedOnboarding: true,
|
|
680039
|
-
lastOnboardingVersion: "1.3.
|
|
680082
|
+
lastOnboardingVersion: "1.3.436"
|
|
680040
680083
|
}));
|
|
680041
680084
|
}
|
|
680042
680085
|
function showDialog(root2, renderer) {
|
|
@@ -681181,7 +681224,7 @@ var exports_ResumeConversation = {};
|
|
|
681181
681224
|
__export(exports_ResumeConversation, {
|
|
681182
681225
|
ResumeConversation: () => ResumeConversation
|
|
681183
681226
|
});
|
|
681184
|
-
import { dirname as
|
|
681227
|
+
import { dirname as dirname70 } from "path";
|
|
681185
681228
|
function parsePrIdentifier(value) {
|
|
681186
681229
|
const directNumber = parseInt(value, 10);
|
|
681187
681230
|
if (!isNaN(directNumber) && directNumber > 0) {
|
|
@@ -681313,7 +681356,7 @@ function ResumeConversation({
|
|
|
681313
681356
|
}
|
|
681314
681357
|
if (false) {}
|
|
681315
681358
|
if (result_3.sessionId && !forkSession) {
|
|
681316
|
-
switchSession(asSessionId(result_3.sessionId), log_0.fullPath ?
|
|
681359
|
+
switchSession(asSessionId(result_3.sessionId), log_0.fullPath ? dirname70(log_0.fullPath) : null);
|
|
681317
681360
|
await renameRecordingForSession();
|
|
681318
681361
|
await resetSessionFilePointer();
|
|
681319
681362
|
restoreCostStateForSession(result_3.sessionId);
|
|
@@ -684930,7 +684973,7 @@ var init_createDirectConnectSession = __esm(() => {
|
|
|
684930
684973
|
});
|
|
684931
684974
|
|
|
684932
684975
|
// src/utils/errorLogSink.ts
|
|
684933
|
-
import { dirname as
|
|
684976
|
+
import { dirname as dirname71, join as join167 } from "path";
|
|
684934
684977
|
function getErrorsPath() {
|
|
684935
684978
|
return join167(CACHE_PATHS.errors(), DATE + ".jsonl");
|
|
684936
684979
|
}
|
|
@@ -684951,7 +684994,7 @@ function createJsonlWriter(options) {
|
|
|
684951
684994
|
function getLogWriter(path30) {
|
|
684952
684995
|
let writer = logWriters.get(path30);
|
|
684953
684996
|
if (!writer) {
|
|
684954
|
-
const dir =
|
|
684997
|
+
const dir = dirname71(path30);
|
|
684955
684998
|
writer = createJsonlWriter({
|
|
684956
684999
|
writeFn: (content) => {
|
|
684957
685000
|
try {
|
|
@@ -684979,7 +685022,7 @@ function appendToLog(path30, message) {
|
|
|
684979
685022
|
cwd: getFsImplementation().cwd(),
|
|
684980
685023
|
userType: "external",
|
|
684981
685024
|
sessionId: getSessionId(),
|
|
684982
|
-
version: "1.3.
|
|
685025
|
+
version: "1.3.436"
|
|
684983
685026
|
};
|
|
684984
685027
|
getLogWriter(path30).write(messageWithTimestamp);
|
|
684985
685028
|
}
|
|
@@ -689087,8 +689130,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
689087
689130
|
}
|
|
689088
689131
|
async function checkEnvLessBridgeMinVersion() {
|
|
689089
689132
|
const cfg = await getEnvLessBridgeConfig();
|
|
689090
|
-
if (cfg.min_version && lt("1.3.
|
|
689091
|
-
return `Your version of RAYU (${"1.3.
|
|
689133
|
+
if (cfg.min_version && lt("1.3.436", cfg.min_version)) {
|
|
689134
|
+
return `Your version of RAYU (${"1.3.436"}) is too old for Remote Control.
|
|
689092
689135
|
Version ${cfg.min_version} or higher is required. Run \`claude update\` to update.`;
|
|
689093
689136
|
}
|
|
689094
689137
|
return null;
|
|
@@ -689416,14 +689459,14 @@ __export(exports_bridgePointer, {
|
|
|
689416
689459
|
BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
|
|
689417
689460
|
});
|
|
689418
689461
|
import { mkdir as mkdir46, readFile as readFile56, stat as stat49, unlink as unlink27, writeFile as writeFile50 } from "fs/promises";
|
|
689419
|
-
import { dirname as
|
|
689462
|
+
import { dirname as dirname72, join as join171 } from "path";
|
|
689420
689463
|
function getBridgePointerPath(dir) {
|
|
689421
689464
|
return join171(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
|
|
689422
689465
|
}
|
|
689423
689466
|
async function writeBridgePointer(dir, pointer) {
|
|
689424
689467
|
const path30 = getBridgePointerPath(dir);
|
|
689425
689468
|
try {
|
|
689426
|
-
await mkdir46(
|
|
689469
|
+
await mkdir46(dirname72(path30), { recursive: true });
|
|
689427
689470
|
await writeFile50(path30, jsonStringify(pointer), "utf8");
|
|
689428
689471
|
logForDebugging(`[bridge:pointer] wrote ${path30}`);
|
|
689429
689472
|
} catch (err2) {
|
|
@@ -689562,7 +689605,7 @@ async function initBridgeCore(params) {
|
|
|
689562
689605
|
const rawApi = createBridgeApiClient({
|
|
689563
689606
|
baseUrl,
|
|
689564
689607
|
getAccessToken,
|
|
689565
|
-
runnerVersion: "1.3.
|
|
689608
|
+
runnerVersion: "1.3.436",
|
|
689566
689609
|
onDebug: logForDebugging,
|
|
689567
689610
|
onAuth401,
|
|
689568
689611
|
getTrustedDeviceToken
|
|
@@ -691400,7 +691443,7 @@ __export(exports_print, {
|
|
|
691400
691443
|
canBatchWith: () => canBatchWith
|
|
691401
691444
|
});
|
|
691402
691445
|
import { readFile as readFile57, stat as stat50 } from "fs/promises";
|
|
691403
|
-
import { dirname as
|
|
691446
|
+
import { dirname as dirname73 } from "path";
|
|
691404
691447
|
import { cwd as cwd2 } from "process";
|
|
691405
691448
|
import { randomUUID as randomUUID58 } from "crypto";
|
|
691406
691449
|
function trackReceivedMessageUuid(uuid8) {
|
|
@@ -693753,7 +693796,7 @@ async function loadInitialMessages(setAppState, options) {
|
|
|
693753
693796
|
if (false) {}
|
|
693754
693797
|
if (!options.forkSession) {
|
|
693755
693798
|
if (result.sessionId) {
|
|
693756
|
-
switchSession(asSessionId(result.sessionId), result.fullPath ?
|
|
693799
|
+
switchSession(asSessionId(result.sessionId), result.fullPath ? dirname73(result.fullPath) : null);
|
|
693757
693800
|
if (persistSession) {
|
|
693758
693801
|
await resetSessionFilePointer();
|
|
693759
693802
|
}
|
|
@@ -693851,7 +693894,7 @@ async function loadInitialMessages(setAppState, options) {
|
|
|
693851
693894
|
}
|
|
693852
693895
|
if (false) {}
|
|
693853
693896
|
if (!options.forkSession && result.sessionId) {
|
|
693854
|
-
switchSession(asSessionId(result.sessionId), result.fullPath ?
|
|
693897
|
+
switchSession(asSessionId(result.sessionId), result.fullPath ? dirname73(result.fullPath) : null);
|
|
693855
693898
|
if (persistSession) {
|
|
693856
693899
|
await resetSessionFilePointer();
|
|
693857
693900
|
}
|
|
@@ -694924,7 +694967,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
|
|
|
694924
694967
|
setCwd(cwd3);
|
|
694925
694968
|
const server = new Server({
|
|
694926
694969
|
name: "claude/tengu",
|
|
694927
|
-
version: "1.3.
|
|
694970
|
+
version: "1.3.436"
|
|
694928
694971
|
}, {
|
|
694929
694972
|
capabilities: {
|
|
694930
694973
|
tools: {}
|
|
@@ -695339,7 +695382,7 @@ __export(exports_plugins, {
|
|
|
695339
695382
|
VALID_UPDATE_SCOPES: () => VALID_UPDATE_SCOPES,
|
|
695340
695383
|
VALID_INSTALLABLE_SCOPES: () => VALID_INSTALLABLE_SCOPES
|
|
695341
695384
|
});
|
|
695342
|
-
import { basename as basename63, dirname as
|
|
695385
|
+
import { basename as basename63, dirname as dirname74 } from "path";
|
|
695343
695386
|
function handleMarketplaceError(error54, action2) {
|
|
695344
695387
|
logError2(error54);
|
|
695345
695388
|
cliError(`${figures_default.cross} Failed to ${action2}: ${errorMessage(error54)}`);
|
|
@@ -695372,9 +695415,9 @@ async function pluginValidateHandler(manifestPath, options) {
|
|
|
695372
695415
|
printValidationResult(result);
|
|
695373
695416
|
let contentResults = [];
|
|
695374
695417
|
if (result.fileType === "plugin") {
|
|
695375
|
-
const manifestDir =
|
|
695418
|
+
const manifestDir = dirname74(result.filePath);
|
|
695376
695419
|
if (basename63(manifestDir) === ".claude-plugin") {
|
|
695377
|
-
contentResults = await validatePluginContents(
|
|
695420
|
+
contentResults = await validatePluginContents(dirname74(manifestDir));
|
|
695378
695421
|
for (const r2 of contentResults) {
|
|
695379
695422
|
console.log(`Validating ${r2.fileType}: ${r2.filePath}
|
|
695380
695423
|
`);
|
|
@@ -697450,7 +697493,7 @@ ${customInstructions}` : customInstructions;
|
|
|
697450
697493
|
}
|
|
697451
697494
|
}
|
|
697452
697495
|
logForDiagnosticsNoPII("info", "started", {
|
|
697453
|
-
version: "1.3.
|
|
697496
|
+
version: "1.3.436",
|
|
697454
697497
|
is_native_binary: isInBundledMode()
|
|
697455
697498
|
});
|
|
697456
697499
|
registerCleanup(async () => {
|
|
@@ -698169,7 +698212,7 @@ Usage: rayu --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
698169
698212
|
pendingHookMessages
|
|
698170
698213
|
}, renderAndRun);
|
|
698171
698214
|
}
|
|
698172
|
-
}).version("1.3.
|
|
698215
|
+
}).version("1.3.436 (Rayu-CLI)", "-v, --version", "Output the version number");
|
|
698173
698216
|
program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
698174
698217
|
program.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
698175
698218
|
if (canUserConfigureAdvisor()) {
|
|
@@ -698635,7 +698678,7 @@ if (false) {}
|
|
|
698635
698678
|
async function main2() {
|
|
698636
698679
|
const args = process.argv.slice(2);
|
|
698637
698680
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
698638
|
-
console.log(`${"1.3.
|
|
698681
|
+
console.log(`${"1.3.436"} (Rayu-CLI)`);
|
|
698639
698682
|
return;
|
|
698640
698683
|
}
|
|
698641
698684
|
const {
|