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