vivus-agent 1.1.29 → 1.1.31
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/main.js +603 -585
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env -S node --max-old-space-size=8192 --expose-gc
|
|
2
2
|
// Vivus CLI — local AI coding agent
|
|
3
|
-
// Built from source at 2026-06-23T19:
|
|
3
|
+
// Built from source at 2026-06-23T19:29:51.792Z
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
var __create = Object.create;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
@@ -108119,7 +108119,7 @@ var init_auth = __esm(() => {
|
|
|
108119
108119
|
|
|
108120
108120
|
// src/utils/userAgent.ts
|
|
108121
108121
|
function getVivusCodeUserAgent() {
|
|
108122
|
-
return `vivus/${"1.1.
|
|
108122
|
+
return `vivus/${"1.1.31+c38c44f"}`;
|
|
108123
108123
|
}
|
|
108124
108124
|
|
|
108125
108125
|
// src/utils/workloadContext.ts
|
|
@@ -108141,7 +108141,7 @@ function getUserAgent() {
|
|
|
108141
108141
|
const clientApp = process.env.VIVUS_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.VIVUS_AGENT_SDK_CLIENT_APP}` : "";
|
|
108142
108142
|
const workload = getWorkload();
|
|
108143
108143
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
108144
|
-
return `vivus-cli/${"1.1.
|
|
108144
|
+
return `vivus-cli/${"1.1.31+c38c44f"} (${process.env.USER_TYPE}, ${process.env.VIVUS_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
108145
108145
|
}
|
|
108146
108146
|
function getMCPUserAgent() {
|
|
108147
108147
|
const parts = [];
|
|
@@ -108155,7 +108155,7 @@ function getMCPUserAgent() {
|
|
|
108155
108155
|
parts.push(`client-app/${process.env.VIVUS_AGENT_SDK_CLIENT_APP}`);
|
|
108156
108156
|
}
|
|
108157
108157
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
108158
|
-
return `vivus/${"1.1.
|
|
108158
|
+
return `vivus/${"1.1.31+c38c44f"}${suffix}`;
|
|
108159
108159
|
}
|
|
108160
108160
|
function getWebFetchUserAgent() {
|
|
108161
108161
|
return `Vivus-User (${getVivusCodeUserAgent()}; +https://support.anthropic.com/)`;
|
|
@@ -108293,7 +108293,7 @@ var init_user = __esm(() => {
|
|
|
108293
108293
|
deviceId,
|
|
108294
108294
|
sessionId: getSessionId(),
|
|
108295
108295
|
email: getEmail(),
|
|
108296
|
-
appVersion: "1.1.
|
|
108296
|
+
appVersion: "1.1.31+c38c44f",
|
|
108297
108297
|
platform: getHostPlatformForAnalytics(),
|
|
108298
108298
|
organizationUuid,
|
|
108299
108299
|
accountUuid,
|
|
@@ -119604,7 +119604,7 @@ var init_metadata = __esm(() => {
|
|
|
119604
119604
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
119605
119605
|
WHITESPACE_REGEX = /\s+/;
|
|
119606
119606
|
getVersionBase = memoize_default(() => {
|
|
119607
|
-
const match = "1.1.
|
|
119607
|
+
const match = "1.1.31+c38c44f".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
119608
119608
|
return match ? match[0] : undefined;
|
|
119609
119609
|
});
|
|
119610
119610
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -119644,9 +119644,9 @@ var init_metadata = __esm(() => {
|
|
|
119644
119644
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
119645
119645
|
isVivusCodeAction: isEnvTruthy(process.env.VIVUS_CODE_ACTION),
|
|
119646
119646
|
isVivusAiAuth: isVivusAISubscriber(),
|
|
119647
|
-
version: "1.1.
|
|
119647
|
+
version: "1.1.31+c38c44f",
|
|
119648
119648
|
versionBase: getVersionBase(),
|
|
119649
|
-
buildTime: "2026-06-23T19:
|
|
119649
|
+
buildTime: "2026-06-23T19:29:51.252Z",
|
|
119650
119650
|
deploymentEnvironment: env3.detectDeploymentEnvironment(),
|
|
119651
119651
|
...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
119652
119652
|
githubEventName: process.env.GITHUB_EVENT_NAME,
|
|
@@ -120314,7 +120314,7 @@ function initialize1PEventLogging() {
|
|
|
120314
120314
|
const platform2 = getPlatform();
|
|
120315
120315
|
const attributes = {
|
|
120316
120316
|
[import_semantic_conventions.ATTR_SERVICE_NAME]: "vivus",
|
|
120317
|
-
[import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.1.
|
|
120317
|
+
[import_semantic_conventions.ATTR_SERVICE_VERSION]: "1.1.31+c38c44f"
|
|
120318
120318
|
};
|
|
120319
120319
|
if (platform2 === "wsl") {
|
|
120320
120320
|
const wslVersion = getWslVersion();
|
|
@@ -120341,7 +120341,7 @@ function initialize1PEventLogging() {
|
|
|
120341
120341
|
})
|
|
120342
120342
|
]
|
|
120343
120343
|
});
|
|
120344
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.vivus_code.events", "1.1.
|
|
120344
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.vivus_code.events", "1.1.31+c38c44f");
|
|
120345
120345
|
}
|
|
120346
120346
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
120347
120347
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -121059,16 +121059,24 @@ function getAutoMemBase() {
|
|
|
121059
121059
|
function getAutoMemEntrypoint() {
|
|
121060
121060
|
return join23(getAutoMemPath(), AUTO_MEM_ENTRYPOINT_NAME);
|
|
121061
121061
|
}
|
|
121062
|
-
function
|
|
121062
|
+
function redirectStrayClaudePath(absPath) {
|
|
121063
121063
|
if (typeof absPath !== "string" || !absPath)
|
|
121064
121064
|
return absPath;
|
|
121065
|
-
const
|
|
121066
|
-
if (
|
|
121067
|
-
|
|
121068
|
-
|
|
121069
|
-
|
|
121070
|
-
|
|
121071
|
-
|
|
121065
|
+
const mem = absPath.match(/[/\\]\.claude[/\\]projects[/\\][^/\\]+[/\\]memory[/\\](.+)$/);
|
|
121066
|
+
if (mem) {
|
|
121067
|
+
const rest = mem[1].replace(/[/\\]+$/, "");
|
|
121068
|
+
return rest ? join23(getAutoMemPath(), rest) : absPath;
|
|
121069
|
+
}
|
|
121070
|
+
const home = homedir9();
|
|
121071
|
+
for (const subdir of ["skills", "agents", "commands"]) {
|
|
121072
|
+
const prefix = join23(home, ".claude", subdir) + sep4;
|
|
121073
|
+
if (absPath.startsWith(prefix)) {
|
|
121074
|
+
const rest = absPath.slice(prefix.length).replace(/[/\\]+$/, "");
|
|
121075
|
+
if (rest)
|
|
121076
|
+
return join23(getVivusConfigHomeDir(), subdir, rest);
|
|
121077
|
+
}
|
|
121078
|
+
}
|
|
121079
|
+
return absPath;
|
|
121072
121080
|
}
|
|
121073
121081
|
function isAutoMemPath(absolutePath) {
|
|
121074
121082
|
const normalizedPath = normalize3(absolutePath);
|
|
@@ -162547,7 +162555,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
162547
162555
|
if (!isAttributionHeaderEnabled()) {
|
|
162548
162556
|
return "";
|
|
162549
162557
|
}
|
|
162550
|
-
const version2 = `${"1.1.
|
|
162558
|
+
const version2 = `${"1.1.31+c38c44f"}.${fingerprint}`;
|
|
162551
162559
|
const entrypoint = process.env.VIVUS_CODE_ENTRYPOINT ?? "unknown";
|
|
162552
162560
|
const cch = "";
|
|
162553
162561
|
const workload = getWorkload();
|
|
@@ -175710,7 +175718,7 @@ function getTelemetryAttributes() {
|
|
|
175710
175718
|
attributes["session.id"] = sessionId;
|
|
175711
175719
|
}
|
|
175712
175720
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
175713
|
-
attributes["app.version"] = "1.1.
|
|
175721
|
+
attributes["app.version"] = "1.1.31+c38c44f";
|
|
175714
175722
|
}
|
|
175715
175723
|
const oauthAccount = getOauthAccountInfo();
|
|
175716
175724
|
if (oauthAccount) {
|
|
@@ -209204,6 +209212,7 @@ __export(exports_prompt2, {
|
|
|
209204
209212
|
DEFAULT_CHAR_BUDGET: () => DEFAULT_CHAR_BUDGET,
|
|
209205
209213
|
CHARS_PER_TOKEN: () => CHARS_PER_TOKEN
|
|
209206
209214
|
});
|
|
209215
|
+
import { join as join49 } from "path";
|
|
209207
209216
|
function getCharBudget(contextWindowTokens) {
|
|
209208
209217
|
if (Number(process.env.SLASH_COMMAND_TOOL_CHAR_BUDGET)) {
|
|
209209
209218
|
return Number(process.env.SLASH_COMMAND_TOOL_CHAR_BUDGET);
|
|
@@ -209328,10 +209337,12 @@ var init_prompt9 = __esm(() => {
|
|
|
209328
209337
|
init_stringWidth();
|
|
209329
209338
|
init_analytics();
|
|
209330
209339
|
init_debug();
|
|
209340
|
+
init_envUtils();
|
|
209331
209341
|
init_errors();
|
|
209332
209342
|
init_format2();
|
|
209333
209343
|
init_log3();
|
|
209334
209344
|
getPrompt2 = memoize_default(async (_cwd) => {
|
|
209345
|
+
const userSkillsDir = join49(getVivusConfigHomeDir(), "skills");
|
|
209335
209346
|
return `Execute a skill within the main conversation
|
|
209336
209347
|
|
|
209337
209348
|
When users ask you to perform tasks, check if any of the available skills match. Skills provide specialized capabilities and domain knowledge.
|
|
@@ -209346,6 +209357,13 @@ How to invoke:
|
|
|
209346
209357
|
- \`skill: "review-pr", args: "123"\` - invoke with arguments
|
|
209347
209358
|
- \`skill: "ms-office-suite:pdf"\` - invoke using fully qualified name
|
|
209348
209359
|
|
|
209360
|
+
Where skills come from (use this if the user asks where skills/memory live — do NOT guess or run filesystem searches):
|
|
209361
|
+
- Project skills: \`<project>/.vivus/skills/<name>/SKILL.md\` (also \`.codex/skills/\`)
|
|
209362
|
+
- Personal skills: \`${userSkillsDir}/<name>/SKILL.md\`
|
|
209363
|
+
- Plus installed plugins and built-in skills.
|
|
209364
|
+
- Persistent memory lives under \`${join49(getVivusConfigHomeDir(), "projects")}/<project-key>/memory/\`.
|
|
209365
|
+
- These are the ONLY skill/memory locations. Vivus does NOT read \`.github/skills\`, \`.claude/\`, or any other path — if you find a SKILL.md elsewhere it is NOT loaded.
|
|
209366
|
+
|
|
209349
209367
|
Important:
|
|
209350
209368
|
- Available skills are listed in system-reminder messages in the conversation
|
|
209351
209369
|
- When a skill matches the user's request, this is a BLOCKING REQUIREMENT: invoke the relevant Skill tool BEFORE generating any other response about the task
|
|
@@ -209552,7 +209570,7 @@ var init_memoryFileDetection = __esm(() => {
|
|
|
209552
209570
|
});
|
|
209553
209571
|
|
|
209554
209572
|
// src/utils/hooks/fileChangedWatcher.ts
|
|
209555
|
-
import { isAbsolute as isAbsolute10, join as
|
|
209573
|
+
import { isAbsolute as isAbsolute10, join as join50 } from "path";
|
|
209556
209574
|
function setEnvHookNotifier(cb) {
|
|
209557
209575
|
notifyCallback = cb;
|
|
209558
209576
|
}
|
|
@@ -209580,7 +209598,7 @@ function resolveWatchPaths(config3) {
|
|
|
209580
209598
|
for (const name of m.matcher.split("|").map((s) => s.trim())) {
|
|
209581
209599
|
if (!name)
|
|
209582
209600
|
continue;
|
|
209583
|
-
staticPaths.push(isAbsolute10(name) ? name :
|
|
209601
|
+
staticPaths.push(isAbsolute10(name) ? name : join50(currentCwd, name));
|
|
209584
209602
|
}
|
|
209585
209603
|
}
|
|
209586
209604
|
return [...new Set([...staticPaths, ...dynamicWatchPaths])];
|
|
@@ -209840,7 +209858,7 @@ var init_bashPipeCommand = __esm(() => {
|
|
|
209840
209858
|
import { execFile as execFile4 } from "child_process";
|
|
209841
209859
|
import { mkdir as mkdir10, stat as stat20 } from "fs/promises";
|
|
209842
209860
|
import * as os3 from "os";
|
|
209843
|
-
import { join as
|
|
209861
|
+
import { join as join51 } from "path";
|
|
209844
209862
|
function createArgv0ShellFunction(funcName, argv0, binaryPath, prependArgs = []) {
|
|
209845
209863
|
const quotedPath = quote([binaryPath]);
|
|
209846
209864
|
const argSuffix = prependArgs.length > 0 ? `${prependArgs.join(" ")} "$@"` : '"$@"';
|
|
@@ -209896,7 +209914,7 @@ function createFindGrepShellIntegration() {
|
|
|
209896
209914
|
}
|
|
209897
209915
|
function getConfigFile(shellPath) {
|
|
209898
209916
|
const fileName = shellPath.includes("zsh") ? ".zshrc" : shellPath.includes("bash") ? ".bashrc" : ".profile";
|
|
209899
|
-
const configPath =
|
|
209917
|
+
const configPath = join51(os3.homedir(), fileName);
|
|
209900
209918
|
return configPath;
|
|
209901
209919
|
}
|
|
209902
209920
|
function getUserSnapshotContent(configFile) {
|
|
@@ -210050,9 +210068,9 @@ var LITERAL_BACKSLASH = "\\", SNAPSHOT_CREATION_TIMEOUT = 1e4, VCS_DIRECTORIES_T
|
|
|
210050
210068
|
}
|
|
210051
210069
|
const timestamp = Date.now();
|
|
210052
210070
|
const randomId = Math.random().toString(36).substring(2, 8);
|
|
210053
|
-
const snapshotsDir =
|
|
210071
|
+
const snapshotsDir = join51(getVivusConfigHomeDir(), "shell-snapshots");
|
|
210054
210072
|
logForDebugging(`Snapshots directory: ${snapshotsDir}`);
|
|
210055
|
-
const shellSnapshotPath =
|
|
210073
|
+
const shellSnapshotPath = join51(snapshotsDir, `snapshot-${shellType}-${timestamp}-${randomId}.sh`);
|
|
210056
210074
|
await mkdir10(snapshotsDir, { recursive: true });
|
|
210057
210075
|
const snapshotScript = await getSnapshotScript(binShell, shellSnapshotPath, configFileExists);
|
|
210058
210076
|
logForDebugging(`Creating snapshot at: ${shellSnapshotPath}`);
|
|
@@ -211083,7 +211101,7 @@ var init_notebook = __esm(() => {
|
|
|
211083
211101
|
// src/utils/pdf.ts
|
|
211084
211102
|
import { randomUUID as randomUUID8 } from "crypto";
|
|
211085
211103
|
import { mkdir as mkdir12, readdir as readdir11, readFile as readFile13 } from "fs/promises";
|
|
211086
|
-
import { join as
|
|
211104
|
+
import { join as join52 } from "path";
|
|
211087
211105
|
async function readPDF(filePath) {
|
|
211088
211106
|
try {
|
|
211089
211107
|
const fs7 = getFsImplementation();
|
|
@@ -211193,9 +211211,9 @@ async function extractPDFPages(filePath, options2) {
|
|
|
211193
211211
|
};
|
|
211194
211212
|
}
|
|
211195
211213
|
const uuid3 = randomUUID8();
|
|
211196
|
-
const outputDir =
|
|
211214
|
+
const outputDir = join52(getToolResultsDir(), `pdf-${uuid3}`);
|
|
211197
211215
|
await mkdir12(outputDir, { recursive: true });
|
|
211198
|
-
const prefix =
|
|
211216
|
+
const prefix = join52(outputDir, "page");
|
|
211199
211217
|
const args = ["-jpeg", "-r", "100"];
|
|
211200
211218
|
if (options2?.firstPage) {
|
|
211201
211219
|
args.push("-f", String(options2.firstPage));
|
|
@@ -212405,7 +212423,7 @@ var init_validate2 = __esm(() => {
|
|
|
212405
212423
|
// src/keybindings/loadUserBindings.ts
|
|
212406
212424
|
import { readFileSync as readFileSync10 } from "fs";
|
|
212407
212425
|
import { readFile as readFile15, stat as stat22 } from "fs/promises";
|
|
212408
|
-
import { dirname as dirname24, join as
|
|
212426
|
+
import { dirname as dirname24, join as join53 } from "path";
|
|
212409
212427
|
function isKeybindingCustomizationEnabled() {
|
|
212410
212428
|
return getFeatureValue_CACHED_MAY_BE_STALE("tengu_keybinding_customization_release", false);
|
|
212411
212429
|
}
|
|
@@ -212428,7 +212446,7 @@ function isKeybindingBlockArray2(arr) {
|
|
|
212428
212446
|
return Array.isArray(arr) && arr.every(isKeybindingBlock2);
|
|
212429
212447
|
}
|
|
212430
212448
|
function getKeybindingsPath() {
|
|
212431
|
-
return
|
|
212449
|
+
return join53(getVivusConfigHomeDir(), "keybindings.json");
|
|
212432
212450
|
}
|
|
212433
212451
|
function getDefaultParsedBindings() {
|
|
212434
212452
|
return parseBindings(DEFAULT_BINDINGS);
|
|
@@ -215068,7 +215086,7 @@ var init_FileReadTool = __esm(() => {
|
|
|
215068
215086
|
|
|
215069
215087
|
// src/utils/tasks.ts
|
|
215070
215088
|
import { mkdir as mkdir13, readdir as readdir13, readFile as readFile16, unlink as unlink6, writeFile as writeFile9 } from "fs/promises";
|
|
215071
|
-
import { join as
|
|
215089
|
+
import { join as join55 } from "path";
|
|
215072
215090
|
function setLeaderTeamName(teamName) {
|
|
215073
215091
|
if (leaderTeamName === teamName)
|
|
215074
215092
|
return;
|
|
@@ -215087,7 +215105,7 @@ function notifyTasksUpdated() {
|
|
|
215087
215105
|
} catch {}
|
|
215088
215106
|
}
|
|
215089
215107
|
function getHighWaterMarkPath(taskListId) {
|
|
215090
|
-
return
|
|
215108
|
+
return join55(getTasksDir(taskListId), HIGH_WATER_MARK_FILE);
|
|
215091
215109
|
}
|
|
215092
215110
|
async function readHighWaterMark(taskListId) {
|
|
215093
215111
|
const path15 = getHighWaterMarkPath(taskListId);
|
|
@@ -215130,7 +215148,7 @@ async function resetTaskList(taskListId) {
|
|
|
215130
215148
|
}
|
|
215131
215149
|
for (const file2 of files) {
|
|
215132
215150
|
if (file2.endsWith(".json") && !file2.startsWith(".")) {
|
|
215133
|
-
const filePath =
|
|
215151
|
+
const filePath = join55(dir, file2);
|
|
215134
215152
|
try {
|
|
215135
215153
|
await unlink6(filePath);
|
|
215136
215154
|
} catch {}
|
|
@@ -215157,10 +215175,10 @@ function sanitizePathComponent(input) {
|
|
|
215157
215175
|
return input.replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
215158
215176
|
}
|
|
215159
215177
|
function getTasksDir(taskListId) {
|
|
215160
|
-
return
|
|
215178
|
+
return join55(getVivusConfigHomeDir(), "tasks", sanitizePathComponent(taskListId));
|
|
215161
215179
|
}
|
|
215162
215180
|
function getTaskPath(taskListId, taskId) {
|
|
215163
|
-
return
|
|
215181
|
+
return join55(getTasksDir(taskListId), `${sanitizePathComponent(taskId)}.json`);
|
|
215164
215182
|
}
|
|
215165
215183
|
async function ensureTasksDir(taskListId) {
|
|
215166
215184
|
const dir = getTasksDir(taskListId);
|
|
@@ -215337,7 +215355,7 @@ async function blockTask(taskListId, fromTaskId, toTaskId) {
|
|
|
215337
215355
|
return true;
|
|
215338
215356
|
}
|
|
215339
215357
|
function getTaskListLockPath(taskListId) {
|
|
215340
|
-
return
|
|
215358
|
+
return join55(getTasksDir(taskListId), ".lock");
|
|
215341
215359
|
}
|
|
215342
215360
|
async function ensureTaskListLockFile(taskListId) {
|
|
215343
215361
|
await ensureTasksDir(taskListId);
|
|
@@ -233478,7 +233496,7 @@ var init_oauthPort = __esm(() => {
|
|
|
233478
233496
|
import { readdirSync as readdirSync4 } from "fs";
|
|
233479
233497
|
import { stat as stat23 } from "fs/promises";
|
|
233480
233498
|
import { homedir as homedir16, platform as platform2, tmpdir as tmpdir5, userInfo as userInfo3 } from "os";
|
|
233481
|
-
import { join as
|
|
233499
|
+
import { join as join56 } from "path";
|
|
233482
233500
|
function getAllBrowserDataPaths() {
|
|
233483
233501
|
const platform3 = getPlatform();
|
|
233484
233502
|
const home = homedir16();
|
|
@@ -233496,10 +233514,10 @@ function getAllBrowserDataPaths() {
|
|
|
233496
233514
|
break;
|
|
233497
233515
|
case "windows": {
|
|
233498
233516
|
if (config3.windows.dataPath.length > 0) {
|
|
233499
|
-
const appDataBase = config3.windows.useRoaming ?
|
|
233517
|
+
const appDataBase = config3.windows.useRoaming ? join56(home, "AppData", "Roaming") : join56(home, "AppData", "Local");
|
|
233500
233518
|
paths2.push({
|
|
233501
233519
|
browser: browserId,
|
|
233502
|
-
path:
|
|
233520
|
+
path: join56(appDataBase, ...config3.windows.dataPath)
|
|
233503
233521
|
});
|
|
233504
233522
|
}
|
|
233505
233523
|
continue;
|
|
@@ -233508,7 +233526,7 @@ function getAllBrowserDataPaths() {
|
|
|
233508
233526
|
if (dataPath && dataPath.length > 0) {
|
|
233509
233527
|
paths2.push({
|
|
233510
233528
|
browser: browserId,
|
|
233511
|
-
path:
|
|
233529
|
+
path: join56(home, ...dataPath)
|
|
233512
233530
|
});
|
|
233513
233531
|
}
|
|
233514
233532
|
}
|
|
@@ -233525,7 +233543,7 @@ function getAllNativeMessagingHostsDirs() {
|
|
|
233525
233543
|
if (config3.macos.nativeMessagingPath.length > 0) {
|
|
233526
233544
|
paths2.push({
|
|
233527
233545
|
browser: browserId,
|
|
233528
|
-
path:
|
|
233546
|
+
path: join56(home, ...config3.macos.nativeMessagingPath)
|
|
233529
233547
|
});
|
|
233530
233548
|
}
|
|
233531
233549
|
break;
|
|
@@ -233534,7 +233552,7 @@ function getAllNativeMessagingHostsDirs() {
|
|
|
233534
233552
|
if (config3.linux.nativeMessagingPath.length > 0) {
|
|
233535
233553
|
paths2.push({
|
|
233536
233554
|
browser: browserId,
|
|
233537
|
-
path:
|
|
233555
|
+
path: join56(home, ...config3.linux.nativeMessagingPath)
|
|
233538
233556
|
});
|
|
233539
233557
|
}
|
|
233540
233558
|
break;
|
|
@@ -233589,8 +233607,8 @@ async function detectAvailableBrowser() {
|
|
|
233589
233607
|
case "windows": {
|
|
233590
233608
|
const home = homedir16();
|
|
233591
233609
|
if (config3.windows.dataPath.length > 0) {
|
|
233592
|
-
const appDataBase = config3.windows.useRoaming ?
|
|
233593
|
-
const dataPath =
|
|
233610
|
+
const appDataBase = config3.windows.useRoaming ? join56(home, "AppData", "Roaming") : join56(home, "AppData", "Local");
|
|
233611
|
+
const dataPath = join56(appDataBase, ...config3.windows.dataPath);
|
|
233594
233612
|
try {
|
|
233595
233613
|
const stats = await stat23(dataPath);
|
|
233596
233614
|
if (stats.isDirectory()) {
|
|
@@ -233659,7 +233677,7 @@ function getSecureSocketPath() {
|
|
|
233659
233677
|
if (platform2() === "win32") {
|
|
233660
233678
|
return `\\\\.\\pipe\\${getSocketName()}`;
|
|
233661
233679
|
}
|
|
233662
|
-
return
|
|
233680
|
+
return join56(getSocketDir(), `${process.pid}.sock`);
|
|
233663
233681
|
}
|
|
233664
233682
|
function getAllSocketPaths() {
|
|
233665
233683
|
if (platform2() === "win32") {
|
|
@@ -233671,12 +233689,12 @@ function getAllSocketPaths() {
|
|
|
233671
233689
|
const files = readdirSync4(socketDir);
|
|
233672
233690
|
for (const file2 of files) {
|
|
233673
233691
|
if (file2.endsWith(".sock")) {
|
|
233674
|
-
paths2.push(
|
|
233692
|
+
paths2.push(join56(socketDir, file2));
|
|
233675
233693
|
}
|
|
233676
233694
|
}
|
|
233677
233695
|
} catch {}
|
|
233678
233696
|
const legacyName = `vivus-mcp-browser-bridge-${getUsername2()}`;
|
|
233679
|
-
const legacyTmpdir =
|
|
233697
|
+
const legacyTmpdir = join56(tmpdir5(), legacyName);
|
|
233680
233698
|
const legacyTmp = `/tmp/${legacyName}`;
|
|
233681
233699
|
if (!paths2.includes(legacyTmpdir)) {
|
|
233682
233700
|
paths2.push(legacyTmpdir);
|
|
@@ -233911,7 +233929,7 @@ function expandEnvVarsInString(value) {
|
|
|
233911
233929
|
}
|
|
233912
233930
|
|
|
233913
233931
|
// src/utils/plugins/mcpPluginIntegration.ts
|
|
233914
|
-
import { join as
|
|
233932
|
+
import { join as join57 } from "path";
|
|
233915
233933
|
async function loadMcpServersFromMcpb(plugin, mcpbPath, errors4) {
|
|
233916
233934
|
try {
|
|
233917
233935
|
logForDebugging(`Loading MCP servers from MCPB: ${mcpbPath}`);
|
|
@@ -234010,7 +234028,7 @@ async function loadPluginMcpServers(plugin, errors4 = []) {
|
|
|
234010
234028
|
}
|
|
234011
234029
|
async function loadMcpServersFromFile(pluginPath, relativePath) {
|
|
234012
234030
|
const fs7 = getFsImplementation();
|
|
234013
|
-
const filePath =
|
|
234031
|
+
const filePath = join57(pluginPath, relativePath);
|
|
234014
234032
|
let content;
|
|
234015
234033
|
try {
|
|
234016
234034
|
content = await fs7.readFile(filePath, { encoding: "utf-8" });
|
|
@@ -234301,9 +234319,9 @@ var init_vivusai = __esm(() => {
|
|
|
234301
234319
|
|
|
234302
234320
|
// src/services/mcp/config.ts
|
|
234303
234321
|
import { chmod as chmod4, open as open7, rename as rename4, stat as stat24, unlink as unlink7 } from "fs/promises";
|
|
234304
|
-
import { dirname as dirname25, join as
|
|
234322
|
+
import { dirname as dirname25, join as join58, parse as parse8 } from "path";
|
|
234305
234323
|
function getEnterpriseMcpFilePath() {
|
|
234306
|
-
return
|
|
234324
|
+
return join58(getManagedFilePath(), "managed-mcp.json");
|
|
234307
234325
|
}
|
|
234308
234326
|
function addScopeToServers(servers, scope) {
|
|
234309
234327
|
if (!servers) {
|
|
@@ -234316,7 +234334,7 @@ function addScopeToServers(servers, scope) {
|
|
|
234316
234334
|
return scopedServers;
|
|
234317
234335
|
}
|
|
234318
234336
|
async function writeMcpjsonFile(config3) {
|
|
234319
|
-
const mcpJsonPath =
|
|
234337
|
+
const mcpJsonPath = join58(getCwd(), ".mcp.json");
|
|
234320
234338
|
let existingMode;
|
|
234321
234339
|
try {
|
|
234322
234340
|
const stats = await stat24(mcpJsonPath);
|
|
@@ -234767,7 +234785,7 @@ function getProjectMcpConfigsFromCwd() {
|
|
|
234767
234785
|
if (!isSettingSourceEnabled("projectSettings")) {
|
|
234768
234786
|
return { servers: {}, errors: [] };
|
|
234769
234787
|
}
|
|
234770
|
-
const mcpJsonPath =
|
|
234788
|
+
const mcpJsonPath = join58(getCwd(), ".mcp.json");
|
|
234771
234789
|
const { config: config3, errors: errors4 } = parseMcpConfigFromFilePath({
|
|
234772
234790
|
filePath: mcpJsonPath,
|
|
234773
234791
|
expandVars: true,
|
|
@@ -234806,7 +234824,7 @@ function getMcpConfigsByScope(scope) {
|
|
|
234806
234824
|
currentDir = dirname25(currentDir);
|
|
234807
234825
|
}
|
|
234808
234826
|
for (const dir of dirs.reverse()) {
|
|
234809
|
-
const mcpJsonPath =
|
|
234827
|
+
const mcpJsonPath = join58(dir, ".mcp.json");
|
|
234810
234828
|
const { config: config3, errors: errors4 } = parseMcpConfigFromFilePath({
|
|
234811
234829
|
filePath: mcpJsonPath,
|
|
234812
234830
|
expandVars: true,
|
|
@@ -235228,7 +235246,7 @@ var init_config2 = __esm(() => {
|
|
|
235228
235246
|
|
|
235229
235247
|
// src/services/mcp/utils.ts
|
|
235230
235248
|
import { createHash as createHash9 } from "crypto";
|
|
235231
|
-
import { join as
|
|
235249
|
+
import { join as join59 } from "path";
|
|
235232
235250
|
function filterToolsByServer(tools, serverName) {
|
|
235233
235251
|
const prefix = `mcp__${normalizeNameForMCP(serverName)}__`;
|
|
235234
235252
|
return tools.filter((tool) => tool.name?.startsWith(prefix));
|
|
@@ -235306,7 +235324,7 @@ function describeMcpConfigFilePath(scope) {
|
|
|
235306
235324
|
case "user":
|
|
235307
235325
|
return getGlobalVivusFile();
|
|
235308
235326
|
case "project":
|
|
235309
|
-
return
|
|
235327
|
+
return join59(getCwd(), ".mcp.json");
|
|
235310
235328
|
case "local":
|
|
235311
235329
|
return `${getGlobalVivusFile()} [project: ${getCwd()}]`;
|
|
235312
235330
|
case "dynamic":
|
|
@@ -236019,7 +236037,7 @@ var init_xaaIdpLogin = __esm(() => {
|
|
|
236019
236037
|
import { createHash as createHash10, randomBytes as randomBytes9, randomUUID as randomUUID9 } from "crypto";
|
|
236020
236038
|
import { mkdir as mkdir14 } from "fs/promises";
|
|
236021
236039
|
import { createServer as createServer5 } from "http";
|
|
236022
|
-
import { join as
|
|
236040
|
+
import { join as join60 } from "path";
|
|
236023
236041
|
import { parse as parse10 } from "url";
|
|
236024
236042
|
function redactSensitiveUrlParams(url3) {
|
|
236025
236043
|
try {
|
|
@@ -237131,7 +237149,7 @@ class VivusAuthProvider {
|
|
|
237131
237149
|
const vivusDir = getVivusConfigHomeDir();
|
|
237132
237150
|
await mkdir14(vivusDir, { recursive: true });
|
|
237133
237151
|
const sanitizedKey = serverKey.replace(/[^a-zA-Z0-9]/g, "_");
|
|
237134
|
-
const lockfilePath =
|
|
237152
|
+
const lockfilePath = join60(vivusDir, `mcp-refresh-${sanitizedKey}.lock`);
|
|
237135
237153
|
let release;
|
|
237136
237154
|
for (let retry = 0;retry < MAX_LOCK_RETRIES; retry++) {
|
|
237137
237155
|
try {
|
|
@@ -237550,7 +237568,7 @@ var init_McpAuthTool = __esm(() => {
|
|
|
237550
237568
|
|
|
237551
237569
|
// src/utils/mcpOutputStorage.ts
|
|
237552
237570
|
import { writeFile as writeFile10 } from "fs/promises";
|
|
237553
|
-
import { join as
|
|
237571
|
+
import { join as join61 } from "path";
|
|
237554
237572
|
function getFormatDescription(type, schema) {
|
|
237555
237573
|
switch (type) {
|
|
237556
237574
|
case "toolResult":
|
|
@@ -237647,7 +237665,7 @@ function isBinaryContentType(contentType) {
|
|
|
237647
237665
|
async function persistBinaryContent(bytes, mimeType, persistId) {
|
|
237648
237666
|
await ensureToolResultsDir();
|
|
237649
237667
|
const ext = extensionForMimeType(mimeType);
|
|
237650
|
-
const filepath =
|
|
237668
|
+
const filepath = join61(getToolResultsDir(), `${persistId}.${ext}`);
|
|
237651
237669
|
try {
|
|
237652
237670
|
await writeFile10(filepath, bytes);
|
|
237653
237671
|
} catch (error41) {
|
|
@@ -242270,7 +242288,7 @@ function computeFingerprint(messageText, version2) {
|
|
|
242270
242288
|
}
|
|
242271
242289
|
function computeFingerprintFromMessages(messages) {
|
|
242272
242290
|
const firstMessageText = extractFirstMessageText(messages);
|
|
242273
|
-
return computeFingerprint(firstMessageText, "1.1.
|
|
242291
|
+
return computeFingerprint(firstMessageText, "1.1.31+c38c44f");
|
|
242274
242292
|
}
|
|
242275
242293
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
242276
242294
|
var init_fingerprint = () => {};
|
|
@@ -242312,7 +242330,7 @@ async function sideQuery(opts) {
|
|
|
242312
242330
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
242313
242331
|
}
|
|
242314
242332
|
const messageText = extractFirstUserMessageText(messages);
|
|
242315
|
-
const fingerprint = computeFingerprint(messageText, "1.1.
|
|
242333
|
+
const fingerprint = computeFingerprint(messageText, "1.1.31+c38c44f");
|
|
242316
242334
|
const attributionHeader = getAttributionHeader(fingerprint);
|
|
242317
242335
|
const systemBlocks = [
|
|
242318
242336
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -242621,7 +242639,7 @@ function createLinkedTransportPair() {
|
|
|
242621
242639
|
|
|
242622
242640
|
// src/services/mcp/client.ts
|
|
242623
242641
|
import { mkdir as mkdir15, readFile as readFile17, unlink as unlink8, writeFile as writeFile11 } from "fs/promises";
|
|
242624
|
-
import { dirname as dirname26, join as
|
|
242642
|
+
import { dirname as dirname26, join as join62 } from "path";
|
|
242625
242643
|
function isMcpSessionExpiredError(error41) {
|
|
242626
242644
|
const httpStatus = "code" in error41 ? error41.code : undefined;
|
|
242627
242645
|
if (httpStatus !== 404) {
|
|
@@ -242633,7 +242651,7 @@ function getMcpToolTimeoutMs() {
|
|
|
242633
242651
|
return parseInt(process.env.MCP_TOOL_TIMEOUT || "", 10) || DEFAULT_MCP_TOOL_TIMEOUT_MS;
|
|
242634
242652
|
}
|
|
242635
242653
|
function getMcpAuthCachePath() {
|
|
242636
|
-
return
|
|
242654
|
+
return join62(getVivusConfigHomeDir(), "mcp-needs-auth-cache.json");
|
|
242637
242655
|
}
|
|
242638
242656
|
function getMcpAuthCache() {
|
|
242639
242657
|
if (!authCachePromise) {
|
|
@@ -243464,7 +243482,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
243464
243482
|
const client2 = new Client({
|
|
243465
243483
|
name: "vivus",
|
|
243466
243484
|
title: "Vivus",
|
|
243467
|
-
version: "1.1.
|
|
243485
|
+
version: "1.1.31+c38c44f",
|
|
243468
243486
|
description: "Anthropic's agentic coding tool",
|
|
243469
243487
|
websiteUrl: PRODUCT_URL
|
|
243470
243488
|
}, {
|
|
@@ -243818,7 +243836,7 @@ var init_client6 = __esm(() => {
|
|
|
243818
243836
|
const client2 = new Client({
|
|
243819
243837
|
name: "vivus",
|
|
243820
243838
|
title: "Vivus",
|
|
243821
|
-
version: "1.1.
|
|
243839
|
+
version: "1.1.31+c38c44f",
|
|
243822
243840
|
description: "Anthropic's agentic coding tool",
|
|
243823
243841
|
websiteUrl: PRODUCT_URL
|
|
243824
243842
|
}, {
|
|
@@ -244453,7 +244471,7 @@ var init_client6 = __esm(() => {
|
|
|
244453
244471
|
|
|
244454
244472
|
// src/utils/jetbrains.ts
|
|
244455
244473
|
import { homedir as homedir17, platform as platform3 } from "os";
|
|
244456
|
-
import { join as
|
|
244474
|
+
import { join as join63 } from "path";
|
|
244457
244475
|
function buildCommonPluginDirectoryPaths(ideName) {
|
|
244458
244476
|
const homeDir = homedir17();
|
|
244459
244477
|
const directories = [];
|
|
@@ -244461,28 +244479,28 @@ function buildCommonPluginDirectoryPaths(ideName) {
|
|
|
244461
244479
|
if (!idePatterns) {
|
|
244462
244480
|
return directories;
|
|
244463
244481
|
}
|
|
244464
|
-
const appData = process.env.APPDATA ||
|
|
244465
|
-
const localAppData = process.env.LOCALAPPDATA ||
|
|
244482
|
+
const appData = process.env.APPDATA || join63(homeDir, "AppData", "Roaming");
|
|
244483
|
+
const localAppData = process.env.LOCALAPPDATA || join63(homeDir, "AppData", "Local");
|
|
244466
244484
|
switch (platform3()) {
|
|
244467
244485
|
case "darwin":
|
|
244468
|
-
directories.push(
|
|
244486
|
+
directories.push(join63(homeDir, "Library", "Application Support", "JetBrains"), join63(homeDir, "Library", "Application Support"));
|
|
244469
244487
|
if (ideName.toLowerCase() === "androidstudio") {
|
|
244470
|
-
directories.push(
|
|
244488
|
+
directories.push(join63(homeDir, "Library", "Application Support", "Google"));
|
|
244471
244489
|
}
|
|
244472
244490
|
break;
|
|
244473
244491
|
case "win32":
|
|
244474
|
-
directories.push(
|
|
244492
|
+
directories.push(join63(appData, "JetBrains"), join63(localAppData, "JetBrains"), join63(appData));
|
|
244475
244493
|
if (ideName.toLowerCase() === "androidstudio") {
|
|
244476
|
-
directories.push(
|
|
244494
|
+
directories.push(join63(localAppData, "Google"));
|
|
244477
244495
|
}
|
|
244478
244496
|
break;
|
|
244479
244497
|
case "linux":
|
|
244480
|
-
directories.push(
|
|
244498
|
+
directories.push(join63(homeDir, ".config", "JetBrains"), join63(homeDir, ".local", "share", "JetBrains"));
|
|
244481
244499
|
for (const pattern of idePatterns) {
|
|
244482
|
-
directories.push(
|
|
244500
|
+
directories.push(join63(homeDir, "." + pattern));
|
|
244483
244501
|
}
|
|
244484
244502
|
if (ideName.toLowerCase() === "androidstudio") {
|
|
244485
|
-
directories.push(
|
|
244503
|
+
directories.push(join63(homeDir, ".config", "Google"));
|
|
244486
244504
|
}
|
|
244487
244505
|
break;
|
|
244488
244506
|
default:
|
|
@@ -244508,12 +244526,12 @@ async function detectPluginDirectories(ideName) {
|
|
|
244508
244526
|
continue;
|
|
244509
244527
|
if (!entry.isDirectory() && !entry.isSymbolicLink())
|
|
244510
244528
|
continue;
|
|
244511
|
-
const dir =
|
|
244529
|
+
const dir = join63(baseDir, entry.name);
|
|
244512
244530
|
if (platform3() === "linux") {
|
|
244513
244531
|
foundDirectories.push(dir);
|
|
244514
244532
|
continue;
|
|
244515
244533
|
}
|
|
244516
|
-
const pluginDir =
|
|
244534
|
+
const pluginDir = join63(dir, "plugins");
|
|
244517
244535
|
try {
|
|
244518
244536
|
await fs7.stat(pluginDir);
|
|
244519
244537
|
foundDirectories.push(pluginDir);
|
|
@@ -244529,7 +244547,7 @@ async function detectPluginDirectories(ideName) {
|
|
|
244529
244547
|
async function isJetBrainsPluginInstalled(ideType) {
|
|
244530
244548
|
const pluginDirs = await detectPluginDirectories(ideType);
|
|
244531
244549
|
for (const dir of pluginDirs) {
|
|
244532
|
-
const pluginPath =
|
|
244550
|
+
const pluginPath = join63(dir, PLUGIN_PREFIX);
|
|
244533
244551
|
try {
|
|
244534
244552
|
await getFsImplementation().stat(pluginPath);
|
|
244535
244553
|
return true;
|
|
@@ -245466,7 +245484,7 @@ var init_IdeOnboardingDialog = __esm(() => {
|
|
|
245466
245484
|
// src/utils/ide.ts
|
|
245467
245485
|
import { createConnection } from "net";
|
|
245468
245486
|
import * as os4 from "os";
|
|
245469
|
-
import { basename as basename12, join as
|
|
245487
|
+
import { basename as basename12, join as join64, sep as pathSeparator, resolve as resolve21 } from "path";
|
|
245470
245488
|
function isProcessRunning2(pid) {
|
|
245471
245489
|
try {
|
|
245472
245490
|
process.kill(pid, 0);
|
|
@@ -245510,7 +245528,7 @@ async function getSortedIdeLockfiles() {
|
|
|
245510
245528
|
const entries = await getFsImplementation().readdir(ideLockFilePath);
|
|
245511
245529
|
const lockEntries = entries.filter((file2) => file2.name.endsWith(".lock"));
|
|
245512
245530
|
const stats = await Promise.all(lockEntries.map(async (file2) => {
|
|
245513
|
-
const fullPath =
|
|
245531
|
+
const fullPath = join64(ideLockFilePath, file2.name);
|
|
245514
245532
|
try {
|
|
245515
245533
|
const fileStat = await getFsImplementation().stat(fullPath);
|
|
245516
245534
|
return { path: fullPath, mtime: fileStat.mtime };
|
|
@@ -245600,7 +245618,7 @@ async function checkIdeConnection(host, port, timeout = 500) {
|
|
|
245600
245618
|
}
|
|
245601
245619
|
}
|
|
245602
245620
|
async function getIdeLockfilesPaths() {
|
|
245603
|
-
const paths2 = [
|
|
245621
|
+
const paths2 = [join64(getVivusConfigHomeDir(), "ide")];
|
|
245604
245622
|
if (getPlatform() !== "wsl") {
|
|
245605
245623
|
return paths2;
|
|
245606
245624
|
}
|
|
@@ -245620,7 +245638,7 @@ async function getIdeLockfilesPaths() {
|
|
|
245620
245638
|
if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
|
|
245621
245639
|
continue;
|
|
245622
245640
|
}
|
|
245623
|
-
paths2.push(
|
|
245641
|
+
paths2.push(join64(usersDir, user.name, ".vivus", "ide"));
|
|
245624
245642
|
}
|
|
245625
245643
|
} catch (error41) {
|
|
245626
245644
|
if (isFsInaccessible(error41)) {
|
|
@@ -245876,7 +245894,7 @@ function getInstallationEnv() {
|
|
|
245876
245894
|
return;
|
|
245877
245895
|
}
|
|
245878
245896
|
function getVivusCodeVersion() {
|
|
245879
|
-
return "1.1.
|
|
245897
|
+
return "1.1.31+c38c44f";
|
|
245880
245898
|
}
|
|
245881
245899
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
245882
245900
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -246104,7 +246122,7 @@ async function initializeIdeIntegration(onIdeDetected, ideToInstallExtension, on
|
|
|
246104
246122
|
}
|
|
246105
246123
|
}
|
|
246106
246124
|
async function installFromArtifactory(command) {
|
|
246107
|
-
const npmrcPath =
|
|
246125
|
+
const npmrcPath = join64(os4.homedir(), ".npmrc");
|
|
246108
246126
|
let authToken = null;
|
|
246109
246127
|
const fs7 = getFsImplementation();
|
|
246110
246128
|
try {
|
|
@@ -246139,7 +246157,7 @@ async function installFromArtifactory(command) {
|
|
|
246139
246157
|
throw new Error("No version found in artifactory response");
|
|
246140
246158
|
}
|
|
246141
246159
|
const vsixUrl = `https://artifactory.infra.ant.dev/artifactory/armorcode-vivus-internal/vivus-vscode-releases/${version2}/vivus.vsix`;
|
|
246142
|
-
const tempVsixPath =
|
|
246160
|
+
const tempVsixPath = join64(os4.tmpdir(), `vivus-${version2}-${Date.now()}.vsix`);
|
|
246143
246161
|
try {
|
|
246144
246162
|
const vsixResponse = await axios_default.get(vsixUrl, {
|
|
246145
246163
|
headers: {
|
|
@@ -248181,13 +248199,13 @@ var init_memoryTypes = __esm(() => {
|
|
|
248181
248199
|
|
|
248182
248200
|
// src/memdir/memoryScan.ts
|
|
248183
248201
|
import { readdir as readdir14 } from "fs/promises";
|
|
248184
|
-
import { basename as basename13, join as
|
|
248202
|
+
import { basename as basename13, join as join65 } from "path";
|
|
248185
248203
|
async function scanMemoryFiles(memoryDir, signal) {
|
|
248186
248204
|
try {
|
|
248187
248205
|
const entries = await readdir14(memoryDir, { recursive: true });
|
|
248188
248206
|
const mdFiles = entries.filter((f) => f.endsWith(".md") && basename13(f) !== "MEMORY.md");
|
|
248189
248207
|
const headerResults = await Promise.allSettled(mdFiles.map(async (relativePath) => {
|
|
248190
|
-
const filePath =
|
|
248208
|
+
const filePath = join65(memoryDir, relativePath);
|
|
248191
248209
|
const { content, mtimeMs } = await readFileInRange(filePath, 0, FRONTMATTER_MAX_LINES, undefined, signal);
|
|
248192
248210
|
const { frontmatter } = parseFrontmatter(content, filePath);
|
|
248193
248211
|
return {
|
|
@@ -249388,20 +249406,20 @@ __export(exports_teammateMailbox, {
|
|
|
249388
249406
|
ModeSetRequestMessageSchema: () => ModeSetRequestMessageSchema
|
|
249389
249407
|
});
|
|
249390
249408
|
import { mkdir as mkdir16, readFile as readFile18, writeFile as writeFile12 } from "fs/promises";
|
|
249391
|
-
import { join as
|
|
249409
|
+
import { join as join66 } from "path";
|
|
249392
249410
|
function getInboxPath(agentName, teamName) {
|
|
249393
249411
|
const team = teamName || getTeamName() || "default";
|
|
249394
249412
|
const safeTeam = sanitizePathComponent(team);
|
|
249395
249413
|
const safeAgentName = sanitizePathComponent(agentName);
|
|
249396
|
-
const inboxDir =
|
|
249397
|
-
const fullPath =
|
|
249414
|
+
const inboxDir = join66(getTeamsDir(), safeTeam, "inboxes");
|
|
249415
|
+
const fullPath = join66(inboxDir, `${safeAgentName}.json`);
|
|
249398
249416
|
logForDebugging(`[TeammateMailbox] getInboxPath: agent=${agentName}, team=${team}, fullPath=${fullPath}`);
|
|
249399
249417
|
return fullPath;
|
|
249400
249418
|
}
|
|
249401
249419
|
async function ensureInboxDir(teamName) {
|
|
249402
249420
|
const team = teamName || getTeamName() || "default";
|
|
249403
249421
|
const safeTeam = sanitizePathComponent(team);
|
|
249404
|
-
const inboxDir =
|
|
249422
|
+
const inboxDir = join66(getTeamsDir(), safeTeam, "inboxes");
|
|
249405
249423
|
await mkdir16(inboxDir, { recursive: true });
|
|
249406
249424
|
logForDebugging(`[TeammateMailbox] Ensured inbox directory: ${inboxDir}`);
|
|
249407
249425
|
}
|
|
@@ -252998,7 +253016,7 @@ var init_compact = __esm(() => {
|
|
|
252998
253016
|
// src/services/api/dumpPrompts.ts
|
|
252999
253017
|
import { createHash as createHash13 } from "crypto";
|
|
253000
253018
|
import { promises as fs7 } from "fs";
|
|
253001
|
-
import { dirname as dirname27, join as
|
|
253019
|
+
import { dirname as dirname27, join as join67 } from "path";
|
|
253002
253020
|
function hashString3(str2) {
|
|
253003
253021
|
return createHash13("sha256").update(str2).digest("hex");
|
|
253004
253022
|
}
|
|
@@ -253020,7 +253038,7 @@ function addApiRequestToCache(requestData) {
|
|
|
253020
253038
|
}
|
|
253021
253039
|
}
|
|
253022
253040
|
function getDumpPromptsPath(agentIdOrSessionId) {
|
|
253023
|
-
return
|
|
253041
|
+
return join67(getVivusConfigHomeDir(), "dump-prompts", `${agentIdOrSessionId ?? getSessionId()}.jsonl`);
|
|
253024
253042
|
}
|
|
253025
253043
|
function appendToFile(filePath, entries) {
|
|
253026
253044
|
if (entries.length === 0)
|
|
@@ -256222,7 +256240,7 @@ var init_types7 = __esm(() => {
|
|
|
256222
256240
|
import { createHash as createHash14 } from "crypto";
|
|
256223
256241
|
import { readFileSync as fsReadFileSync } from "fs";
|
|
256224
256242
|
import { unlink as unlink9, writeFile as writeFile13 } from "fs/promises";
|
|
256225
|
-
import { join as
|
|
256243
|
+
import { join as join68 } from "path";
|
|
256226
256244
|
function isNodeError(e) {
|
|
256227
256245
|
return e instanceof Error;
|
|
256228
256246
|
}
|
|
@@ -256244,7 +256262,7 @@ function initializePolicyLimitsLoadingPromise() {
|
|
|
256244
256262
|
}
|
|
256245
256263
|
}
|
|
256246
256264
|
function getCachePath2() {
|
|
256247
|
-
return
|
|
256265
|
+
return join68(getVivusConfigHomeDir(), CACHE_FILENAME);
|
|
256248
256266
|
}
|
|
256249
256267
|
function getPolicyLimitsEndpoint() {
|
|
256250
256268
|
return `${getOauthConfig().BASE_API_URL}/api/vivus_code/policy_limits`;
|
|
@@ -256609,15 +256627,15 @@ var init_policyLimits = __esm(() => {
|
|
|
256609
256627
|
|
|
256610
256628
|
// src/utils/imagePaste.ts
|
|
256611
256629
|
import { randomBytes as randomBytes11 } from "crypto";
|
|
256612
|
-
import { basename as basename14, extname as extname6, isAbsolute as isAbsolute12, join as
|
|
256630
|
+
import { basename as basename14, extname as extname6, isAbsolute as isAbsolute12, join as join69 } from "path";
|
|
256613
256631
|
function getClipboardCommands() {
|
|
256614
256632
|
const platform4 = process.platform;
|
|
256615
256633
|
const baseTmpDir = process.env.VIVUS_CODE_TMPDIR || (platform4 === "win32" ? process.env.TEMP || "C:\\Temp" : "/tmp");
|
|
256616
256634
|
const screenshotFilename = "vivus_cli_latest_screenshot.png";
|
|
256617
256635
|
const tempPaths = {
|
|
256618
|
-
darwin:
|
|
256619
|
-
linux:
|
|
256620
|
-
win32:
|
|
256636
|
+
darwin: join69(baseTmpDir, screenshotFilename),
|
|
256637
|
+
linux: join69(baseTmpDir, screenshotFilename),
|
|
256638
|
+
win32: join69(baseTmpDir, screenshotFilename)
|
|
256621
256639
|
};
|
|
256622
256640
|
const screenshotPath = tempPaths[platform4] || tempPaths.linux;
|
|
256623
256641
|
const commands = {
|
|
@@ -256796,9 +256814,9 @@ var init_imagePaste = __esm(() => {
|
|
|
256796
256814
|
|
|
256797
256815
|
// src/utils/imageStore.ts
|
|
256798
256816
|
import { mkdir as mkdir17, open as open8 } from "fs/promises";
|
|
256799
|
-
import { join as
|
|
256817
|
+
import { join as join70 } from "path";
|
|
256800
256818
|
function getImageStoreDir() {
|
|
256801
|
-
return
|
|
256819
|
+
return join70(getVivusConfigHomeDir(), IMAGE_STORE_DIR, getSessionId());
|
|
256802
256820
|
}
|
|
256803
256821
|
async function ensureImageStoreDir() {
|
|
256804
256822
|
const dir = getImageStoreDir();
|
|
@@ -256806,7 +256824,7 @@ async function ensureImageStoreDir() {
|
|
|
256806
256824
|
}
|
|
256807
256825
|
function getImagePath(imageId, mediaType) {
|
|
256808
256826
|
const extension2 = mediaType.split("/")[1] || "png";
|
|
256809
|
-
return
|
|
256827
|
+
return join70(getImageStoreDir(), `${imageId}.${extension2}`);
|
|
256810
256828
|
}
|
|
256811
256829
|
function cacheImagePath(content) {
|
|
256812
256830
|
if (content.type !== "image") {
|
|
@@ -256870,7 +256888,7 @@ function evictOldestIfAtCap() {
|
|
|
256870
256888
|
}
|
|
256871
256889
|
async function cleanupOldImageCaches() {
|
|
256872
256890
|
const fsImpl = getFsImplementation();
|
|
256873
|
-
const baseDir =
|
|
256891
|
+
const baseDir = join70(getVivusConfigHomeDir(), IMAGE_STORE_DIR);
|
|
256874
256892
|
const currentSessionId = getSessionId();
|
|
256875
256893
|
try {
|
|
256876
256894
|
let sessionDirs;
|
|
@@ -256883,7 +256901,7 @@ async function cleanupOldImageCaches() {
|
|
|
256883
256901
|
if (sessionDir.name === currentSessionId) {
|
|
256884
256902
|
continue;
|
|
256885
256903
|
}
|
|
256886
|
-
const sessionPath =
|
|
256904
|
+
const sessionPath = join70(baseDir, sessionDir.name);
|
|
256887
256905
|
try {
|
|
256888
256906
|
await fsImpl.rm(sessionPath, { recursive: true, force: true });
|
|
256889
256907
|
logForDebugging(`Cleaned up old image cache: ${sessionPath}`);
|
|
@@ -257247,9 +257265,9 @@ function isInputModeCharacter(input) {
|
|
|
257247
257265
|
}
|
|
257248
257266
|
|
|
257249
257267
|
// src/projectOnboardingState.ts
|
|
257250
|
-
import { join as
|
|
257268
|
+
import { join as join71 } from "path";
|
|
257251
257269
|
function getSteps() {
|
|
257252
|
-
const hasVivusMd = getFsImplementation().existsSync(
|
|
257270
|
+
const hasVivusMd = getFsImplementation().existsSync(join71(getCwd(), "VIVUS.md"));
|
|
257253
257271
|
const isWorkspaceDirEmpty = isDirEmpty(getCwd());
|
|
257254
257272
|
return [
|
|
257255
257273
|
{
|
|
@@ -257307,7 +257325,7 @@ var init_projectOnboardingState = __esm(() => {
|
|
|
257307
257325
|
// src/utils/appleTerminalBackup.ts
|
|
257308
257326
|
import { stat as stat25 } from "fs/promises";
|
|
257309
257327
|
import { homedir as homedir19 } from "os";
|
|
257310
|
-
import { join as
|
|
257328
|
+
import { join as join72 } from "path";
|
|
257311
257329
|
function markTerminalSetupInProgress(backupPath) {
|
|
257312
257330
|
saveGlobalConfig((current) => ({
|
|
257313
257331
|
...current,
|
|
@@ -257329,7 +257347,7 @@ function getTerminalRecoveryInfo() {
|
|
|
257329
257347
|
};
|
|
257330
257348
|
}
|
|
257331
257349
|
function getTerminalPlistPath() {
|
|
257332
|
-
return
|
|
257350
|
+
return join72(homedir19(), "Library", "Preferences", "com.apple.Terminal.plist");
|
|
257333
257351
|
}
|
|
257334
257352
|
async function backupTerminalPreferences() {
|
|
257335
257353
|
const terminalPlistPath = getTerminalPlistPath();
|
|
@@ -257401,37 +257419,37 @@ var init_appleTerminalBackup = __esm(() => {
|
|
|
257401
257419
|
|
|
257402
257420
|
// src/utils/completionCache.ts
|
|
257403
257421
|
import { homedir as homedir20 } from "os";
|
|
257404
|
-
import { dirname as dirname28, join as
|
|
257422
|
+
import { dirname as dirname28, join as join73 } from "path";
|
|
257405
257423
|
function detectShell() {
|
|
257406
257424
|
const shell = process.env.SHELL || "";
|
|
257407
257425
|
const home = homedir20();
|
|
257408
|
-
const vivusDir =
|
|
257426
|
+
const vivusDir = join73(home, ".vivus");
|
|
257409
257427
|
if (shell.endsWith("/zsh") || shell.endsWith("/zsh.exe")) {
|
|
257410
|
-
const cacheFile =
|
|
257428
|
+
const cacheFile = join73(vivusDir, "completion.zsh");
|
|
257411
257429
|
return {
|
|
257412
257430
|
name: "zsh",
|
|
257413
|
-
rcFile:
|
|
257431
|
+
rcFile: join73(home, ".zshrc"),
|
|
257414
257432
|
cacheFile,
|
|
257415
257433
|
completionLine: `[[ -f "${cacheFile}" ]] && source "${cacheFile}"`,
|
|
257416
257434
|
shellFlag: "zsh"
|
|
257417
257435
|
};
|
|
257418
257436
|
}
|
|
257419
257437
|
if (shell.endsWith("/bash") || shell.endsWith("/bash.exe")) {
|
|
257420
|
-
const cacheFile =
|
|
257438
|
+
const cacheFile = join73(vivusDir, "completion.bash");
|
|
257421
257439
|
return {
|
|
257422
257440
|
name: "bash",
|
|
257423
|
-
rcFile:
|
|
257441
|
+
rcFile: join73(home, ".bashrc"),
|
|
257424
257442
|
cacheFile,
|
|
257425
257443
|
completionLine: `[ -f "${cacheFile}" ] && source "${cacheFile}"`,
|
|
257426
257444
|
shellFlag: "bash"
|
|
257427
257445
|
};
|
|
257428
257446
|
}
|
|
257429
257447
|
if (shell.endsWith("/fish") || shell.endsWith("/fish.exe")) {
|
|
257430
|
-
const xdg = process.env.XDG_CONFIG_HOME ||
|
|
257431
|
-
const cacheFile =
|
|
257448
|
+
const xdg = process.env.XDG_CONFIG_HOME || join73(home, ".config");
|
|
257449
|
+
const cacheFile = join73(vivusDir, "completion.fish");
|
|
257432
257450
|
return {
|
|
257433
257451
|
name: "fish",
|
|
257434
|
-
rcFile:
|
|
257452
|
+
rcFile: join73(xdg, "fish", "config.fish"),
|
|
257435
257453
|
cacheFile,
|
|
257436
257454
|
completionLine: `[ -f "${cacheFile}" ] && source "${cacheFile}"`,
|
|
257437
257455
|
shellFlag: "fish"
|
|
@@ -257481,7 +257499,7 @@ __export(exports_terminalSetup, {
|
|
|
257481
257499
|
import { randomBytes as randomBytes12 } from "crypto";
|
|
257482
257500
|
import { copyFile as copyFile4, mkdir as mkdir18, readFile as readFile20, writeFile as writeFile14 } from "fs/promises";
|
|
257483
257501
|
import { homedir as homedir21, platform as platform4 } from "os";
|
|
257484
|
-
import { dirname as dirname29, join as
|
|
257502
|
+
import { dirname as dirname29, join as join74 } from "path";
|
|
257485
257503
|
import { pathToFileURL as pathToFileURL3 } from "url";
|
|
257486
257504
|
function isVSCodeRemoteSSH() {
|
|
257487
257505
|
const askpassMain = process.env.VSCODE_GIT_ASKPASS_MAIN ?? "";
|
|
@@ -257616,8 +257634,8 @@ async function installBindingsForVSCodeTerminal(editor = "VSCode", theme) {
|
|
|
257616
257634
|
]`)}${EOL3}`;
|
|
257617
257635
|
}
|
|
257618
257636
|
const editorDir = editor === "VSCode" ? "Code" : editor;
|
|
257619
|
-
const userDirPath =
|
|
257620
|
-
const keybindingsPath =
|
|
257637
|
+
const userDirPath = join74(homedir21(), platform4() === "win32" ? join74("AppData", "Roaming", editorDir, "User") : platform4() === "darwin" ? join74("Library", "Application Support", editorDir, "User") : join74(".config", editorDir, "User"));
|
|
257638
|
+
const keybindingsPath = join74(userDirPath, "keybindings.json");
|
|
257621
257639
|
try {
|
|
257622
257640
|
await mkdir18(userDirPath, {
|
|
257623
257641
|
recursive: true
|
|
@@ -257758,14 +257776,14 @@ chars = "\\u001B\\r"`;
|
|
|
257758
257776
|
const configPaths = [];
|
|
257759
257777
|
const xdgConfigHome = process.env.XDG_CONFIG_HOME;
|
|
257760
257778
|
if (xdgConfigHome) {
|
|
257761
|
-
configPaths.push(
|
|
257779
|
+
configPaths.push(join74(xdgConfigHome, "alacritty", "alacritty.toml"));
|
|
257762
257780
|
} else {
|
|
257763
|
-
configPaths.push(
|
|
257781
|
+
configPaths.push(join74(homedir21(), ".config", "alacritty", "alacritty.toml"));
|
|
257764
257782
|
}
|
|
257765
257783
|
if (platform4() === "win32") {
|
|
257766
257784
|
const appData = process.env.APPDATA;
|
|
257767
257785
|
if (appData) {
|
|
257768
|
-
configPaths.push(
|
|
257786
|
+
configPaths.push(join74(appData, "alacritty", "alacritty.toml"));
|
|
257769
257787
|
}
|
|
257770
257788
|
}
|
|
257771
257789
|
let configPath = null;
|
|
@@ -257826,8 +257844,8 @@ chars = "\\u001B\\r"`;
|
|
|
257826
257844
|
}
|
|
257827
257845
|
}
|
|
257828
257846
|
async function installBindingsForZed(theme) {
|
|
257829
|
-
const zedDir =
|
|
257830
|
-
const keymapPath =
|
|
257847
|
+
const zedDir = join74(homedir21(), ".config", "zed");
|
|
257848
|
+
const keymapPath = join74(zedDir, "keymap.json");
|
|
257831
257849
|
try {
|
|
257832
257850
|
await mkdir18(zedDir, {
|
|
257833
257851
|
recursive: true
|
|
@@ -257909,15 +257927,15 @@ var init_terminalSetup = __esm(() => {
|
|
|
257909
257927
|
// src/utils/pasteStore.ts
|
|
257910
257928
|
import { createHash as createHash15 } from "crypto";
|
|
257911
257929
|
import { mkdir as mkdir19, readdir as readdir15, readFile as readFile21, stat as stat26, unlink as unlink10, writeFile as writeFile15 } from "fs/promises";
|
|
257912
|
-
import { join as
|
|
257930
|
+
import { join as join75 } from "path";
|
|
257913
257931
|
function getPasteStoreDir() {
|
|
257914
|
-
return
|
|
257932
|
+
return join75(getVivusConfigHomeDir(), PASTE_STORE_DIR);
|
|
257915
257933
|
}
|
|
257916
257934
|
function hashPastedText(content) {
|
|
257917
257935
|
return createHash15("sha256").update(content).digest("hex").slice(0, 16);
|
|
257918
257936
|
}
|
|
257919
257937
|
function getPastePath(hash2) {
|
|
257920
|
-
return
|
|
257938
|
+
return join75(getPasteStoreDir(), `${hash2}.txt`);
|
|
257921
257939
|
}
|
|
257922
257940
|
async function storePastedText(hash2, content) {
|
|
257923
257941
|
try {
|
|
@@ -257954,7 +257972,7 @@ async function cleanupOldPastes(cutoffDate) {
|
|
|
257954
257972
|
if (!file2.endsWith(".txt")) {
|
|
257955
257973
|
continue;
|
|
257956
257974
|
}
|
|
257957
|
-
const filePath =
|
|
257975
|
+
const filePath = join75(pasteDir, file2);
|
|
257958
257976
|
try {
|
|
257959
257977
|
const stats = await stat26(filePath);
|
|
257960
257978
|
if (stats.mtimeMs < cutoffTime) {
|
|
@@ -257973,7 +257991,7 @@ var init_pasteStore = __esm(() => {
|
|
|
257973
257991
|
|
|
257974
257992
|
// src/history.ts
|
|
257975
257993
|
import { appendFile as appendFile4, writeFile as writeFile16 } from "fs/promises";
|
|
257976
|
-
import { join as
|
|
257994
|
+
import { join as join76 } from "path";
|
|
257977
257995
|
function getPastedTextRefNumLines(text2) {
|
|
257978
257996
|
return (text2.match(/\r\n|\r|\n/g) || []).length;
|
|
257979
257997
|
}
|
|
@@ -258015,7 +258033,7 @@ async function* makeLogEntryReader() {
|
|
|
258015
258033
|
for (let i2 = pendingEntries.length - 1;i2 >= 0; i2--) {
|
|
258016
258034
|
yield pendingEntries[i2];
|
|
258017
258035
|
}
|
|
258018
|
-
const historyPath =
|
|
258036
|
+
const historyPath = join76(getVivusConfigHomeDir(), "history.jsonl");
|
|
258019
258037
|
try {
|
|
258020
258038
|
for await (const line of readLinesReverse(historyPath)) {
|
|
258021
258039
|
try {
|
|
@@ -258110,7 +258128,7 @@ async function immediateFlushHistory() {
|
|
|
258110
258128
|
}
|
|
258111
258129
|
let release;
|
|
258112
258130
|
try {
|
|
258113
|
-
const historyPath =
|
|
258131
|
+
const historyPath = join76(getVivusConfigHomeDir(), "history.jsonl");
|
|
258114
258132
|
await writeFile16(historyPath, "", {
|
|
258115
258133
|
encoding: "utf8",
|
|
258116
258134
|
mode: 384,
|
|
@@ -300951,7 +300969,7 @@ async function initializeBetaTracing(resource) {
|
|
|
300951
300969
|
});
|
|
300952
300970
|
import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
|
|
300953
300971
|
setLoggerProvider(loggerProvider);
|
|
300954
|
-
const eventLogger = import_api_logs.logs.getLogger("com.anthropic.vivus_code.events", "1.1.
|
|
300972
|
+
const eventLogger = import_api_logs.logs.getLogger("com.anthropic.vivus_code.events", "1.1.31+c38c44f");
|
|
300955
300973
|
setEventLogger(eventLogger);
|
|
300956
300974
|
process.on("beforeExit", async () => {
|
|
300957
300975
|
await loggerProvider?.forceFlush();
|
|
@@ -300991,7 +301009,7 @@ async function initializeTelemetry() {
|
|
|
300991
301009
|
const platform5 = getPlatform();
|
|
300992
301010
|
const baseAttributes = {
|
|
300993
301011
|
[import_semantic_conventions2.ATTR_SERVICE_NAME]: "vivus",
|
|
300994
|
-
[import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.1.
|
|
301012
|
+
[import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.1.31+c38c44f"
|
|
300995
301013
|
};
|
|
300996
301014
|
if (platform5 === "wsl") {
|
|
300997
301015
|
const wslVersion = getWslVersion();
|
|
@@ -301036,7 +301054,7 @@ async function initializeTelemetry() {
|
|
|
301036
301054
|
} catch {}
|
|
301037
301055
|
};
|
|
301038
301056
|
registerCleanup(shutdownTelemetry2);
|
|
301039
|
-
return meterProvider2.getMeter("com.anthropic.vivus_code", "1.1.
|
|
301057
|
+
return meterProvider2.getMeter("com.anthropic.vivus_code", "1.1.31+c38c44f");
|
|
301040
301058
|
}
|
|
301041
301059
|
const meterProvider = new import_sdk_metrics2.MeterProvider({
|
|
301042
301060
|
resource,
|
|
@@ -301056,7 +301074,7 @@ async function initializeTelemetry() {
|
|
|
301056
301074
|
});
|
|
301057
301075
|
import_api_logs.logs.setGlobalLoggerProvider(loggerProvider);
|
|
301058
301076
|
setLoggerProvider(loggerProvider);
|
|
301059
|
-
const eventLogger = import_api_logs.logs.getLogger("com.anthropic.vivus_code.events", "1.1.
|
|
301077
|
+
const eventLogger = import_api_logs.logs.getLogger("com.anthropic.vivus_code.events", "1.1.31+c38c44f");
|
|
301060
301078
|
setEventLogger(eventLogger);
|
|
301061
301079
|
logForDebugging("[3P telemetry] Event logger set successfully");
|
|
301062
301080
|
process.on("beforeExit", async () => {
|
|
@@ -301118,7 +301136,7 @@ Current timeout: ${timeoutMs}ms
|
|
|
301118
301136
|
}
|
|
301119
301137
|
};
|
|
301120
301138
|
registerCleanup(shutdownTelemetry);
|
|
301121
|
-
return meterProvider.getMeter("com.anthropic.vivus_code", "1.1.
|
|
301139
|
+
return meterProvider.getMeter("com.anthropic.vivus_code", "1.1.31+c38c44f");
|
|
301122
301140
|
}
|
|
301123
301141
|
async function flushTelemetry() {
|
|
301124
301142
|
const meterProvider = getMeterProvider();
|
|
@@ -301614,12 +301632,12 @@ var init_oauth2 = __esm(() => {
|
|
|
301614
301632
|
|
|
301615
301633
|
// src/utils/localInstaller.ts
|
|
301616
301634
|
import { access as access2, chmod as chmod5, writeFile as writeFile17 } from "fs/promises";
|
|
301617
|
-
import { join as
|
|
301635
|
+
import { join as join77 } from "path";
|
|
301618
301636
|
function getLocalInstallDir() {
|
|
301619
|
-
return
|
|
301637
|
+
return join77(getVivusConfigHomeDir(), "local");
|
|
301620
301638
|
}
|
|
301621
301639
|
function getLocalVivusPath() {
|
|
301622
|
-
return
|
|
301640
|
+
return join77(getLocalInstallDir(), "vivus");
|
|
301623
301641
|
}
|
|
301624
301642
|
function isRunningFromLocalInstallation() {
|
|
301625
301643
|
const execPath2 = process.argv[1] || "";
|
|
@@ -301639,8 +301657,8 @@ async function ensureLocalPackageEnvironment() {
|
|
|
301639
301657
|
try {
|
|
301640
301658
|
const localInstallDir = getLocalInstallDir();
|
|
301641
301659
|
await getFsImplementation().mkdir(localInstallDir);
|
|
301642
|
-
await writeIfMissing(
|
|
301643
|
-
const wrapperPath =
|
|
301660
|
+
await writeIfMissing(join77(localInstallDir, "package.json"), jsonStringify({ name: "vivus-local", version: "0.0.1", private: true }, null, 2));
|
|
301661
|
+
const wrapperPath = join77(localInstallDir, "vivus");
|
|
301644
301662
|
const created = await writeIfMissing(wrapperPath, `#!/bin/sh
|
|
301645
301663
|
exec "${localInstallDir}/node_modules/.bin/vivus" "$@"`, 493);
|
|
301646
301664
|
if (created) {
|
|
@@ -301676,7 +301694,7 @@ async function installOrUpdateVivusPackage(channel, specificVersion) {
|
|
|
301676
301694
|
}
|
|
301677
301695
|
async function localInstallationExists() {
|
|
301678
301696
|
try {
|
|
301679
|
-
await access2(
|
|
301697
|
+
await access2(join77(getLocalInstallDir(), "node_modules", ".bin", "vivus"));
|
|
301680
301698
|
return true;
|
|
301681
301699
|
} catch {
|
|
301682
301700
|
return false;
|
|
@@ -301705,15 +301723,15 @@ var init_localInstaller = __esm(() => {
|
|
|
301705
301723
|
// src/utils/shellConfig.ts
|
|
301706
301724
|
import { open as open10, readFile as readFile22, stat as stat27 } from "fs/promises";
|
|
301707
301725
|
import { homedir as osHomedir } from "os";
|
|
301708
|
-
import { join as
|
|
301726
|
+
import { join as join78 } from "path";
|
|
301709
301727
|
function getShellConfigPaths(options2) {
|
|
301710
301728
|
const home = options2?.homedir ?? osHomedir();
|
|
301711
301729
|
const env4 = options2?.env ?? process.env;
|
|
301712
301730
|
const zshConfigDir = env4.ZDOTDIR || home;
|
|
301713
301731
|
return {
|
|
301714
|
-
zsh:
|
|
301715
|
-
bash:
|
|
301716
|
-
fish:
|
|
301732
|
+
zsh: join78(zshConfigDir, ".zshrc"),
|
|
301733
|
+
bash: join78(home, ".bashrc"),
|
|
301734
|
+
fish: join78(home, ".config/fish/config.fish")
|
|
301717
301735
|
};
|
|
301718
301736
|
}
|
|
301719
301737
|
function filterVivusAliases(lines) {
|
|
@@ -301799,14 +301817,14 @@ var init_shellConfig = __esm(() => {
|
|
|
301799
301817
|
import { constants as fsConstants4 } from "fs";
|
|
301800
301818
|
import { access as access3, writeFile as writeFile18 } from "fs/promises";
|
|
301801
301819
|
import { homedir as homedir22 } from "os";
|
|
301802
|
-
import { join as
|
|
301820
|
+
import { join as join79 } from "path";
|
|
301803
301821
|
async function assertMinVersion() {
|
|
301804
301822
|
if (false) {}
|
|
301805
301823
|
try {
|
|
301806
301824
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
301807
|
-
if (versionConfig.minVersion && lt("1.1.
|
|
301825
|
+
if (versionConfig.minVersion && lt("1.1.31+c38c44f", versionConfig.minVersion)) {
|
|
301808
301826
|
console.error(`
|
|
301809
|
-
It looks like your version of Vivus (${"1.1.
|
|
301827
|
+
It looks like your version of Vivus (${"1.1.31+c38c44f"}) needs an update.
|
|
301810
301828
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
301811
301829
|
|
|
301812
301830
|
To update, please run:
|
|
@@ -301855,7 +301873,7 @@ function shouldSkipVersion(targetVersion) {
|
|
|
301855
301873
|
return shouldSkip;
|
|
301856
301874
|
}
|
|
301857
301875
|
function getLockFilePath() {
|
|
301858
|
-
return
|
|
301876
|
+
return join79(getVivusConfigHomeDir(), ".update.lock");
|
|
301859
301877
|
}
|
|
301860
301878
|
async function acquireLock() {
|
|
301861
301879
|
const fs8 = getFsImplementation();
|
|
@@ -302022,7 +302040,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
302022
302040
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
302023
302041
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
302024
302042
|
pid: process.pid,
|
|
302025
|
-
currentVersion: "1.1.
|
|
302043
|
+
currentVersion: "1.1.31+c38c44f"
|
|
302026
302044
|
});
|
|
302027
302045
|
return "in_progress";
|
|
302028
302046
|
}
|
|
@@ -302031,7 +302049,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
302031
302049
|
if (!env3.isRunningWithBun() && env3.isNpmFromWindowsPath()) {
|
|
302032
302050
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
302033
302051
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
302034
|
-
currentVersion: "1.1.
|
|
302052
|
+
currentVersion: "1.1.31+c38c44f"
|
|
302035
302053
|
});
|
|
302036
302054
|
console.error(`
|
|
302037
302055
|
Error: Windows NPM detected in WSL
|
|
@@ -302290,7 +302308,7 @@ var init_packageManagers = __esm(() => {
|
|
|
302290
302308
|
// src/utils/doctorDiagnostic.ts
|
|
302291
302309
|
import { readFile as readFile24, realpath as realpath8 } from "fs/promises";
|
|
302292
302310
|
import { homedir as homedir23 } from "os";
|
|
302293
|
-
import { delimiter as delimiter2, join as
|
|
302311
|
+
import { delimiter as delimiter2, join as join80, posix as posix5, win32 as win323 } from "path";
|
|
302294
302312
|
function getNormalizedPaths() {
|
|
302295
302313
|
let invokedPath = process.argv[1] || "";
|
|
302296
302314
|
let execPath2 = process.execPath || process.argv[0] || "";
|
|
@@ -302353,8 +302371,8 @@ async function getInstallationPath() {
|
|
|
302353
302371
|
}
|
|
302354
302372
|
} catch {}
|
|
302355
302373
|
try {
|
|
302356
|
-
await getFsImplementation().stat(
|
|
302357
|
-
return
|
|
302374
|
+
await getFsImplementation().stat(join80(homedir23(), ".local/bin/vivus"));
|
|
302375
|
+
return join80(homedir23(), ".local/bin/vivus");
|
|
302358
302376
|
} catch {}
|
|
302359
302377
|
return "native";
|
|
302360
302378
|
}
|
|
@@ -302377,7 +302395,7 @@ function getInvokedBinary() {
|
|
|
302377
302395
|
async function detectMultipleInstallations() {
|
|
302378
302396
|
const fs8 = getFsImplementation();
|
|
302379
302397
|
const installations = [];
|
|
302380
|
-
const localPath =
|
|
302398
|
+
const localPath = join80(homedir23(), ".vivus", "local");
|
|
302381
302399
|
if (await localInstallationExists()) {
|
|
302382
302400
|
installations.push({ type: "npm-local", path: localPath });
|
|
302383
302401
|
}
|
|
@@ -302392,7 +302410,7 @@ async function detectMultipleInstallations() {
|
|
|
302392
302410
|
if (npmResult.code === 0 && npmResult.stdout) {
|
|
302393
302411
|
const npmPrefix = npmResult.stdout.trim();
|
|
302394
302412
|
const isWindows2 = getPlatform() === "windows";
|
|
302395
|
-
const globalBinPath = isWindows2 ?
|
|
302413
|
+
const globalBinPath = isWindows2 ? join80(npmPrefix, "vivus") : join80(npmPrefix, "bin", "vivus");
|
|
302396
302414
|
let globalBinExists = false;
|
|
302397
302415
|
try {
|
|
302398
302416
|
await fs8.stat(globalBinPath);
|
|
@@ -302411,7 +302429,7 @@ async function detectMultipleInstallations() {
|
|
|
302411
302429
|
}
|
|
302412
302430
|
} else {
|
|
302413
302431
|
for (const packageName of packagesToCheck) {
|
|
302414
|
-
const globalPackagePath = isWindows2 ?
|
|
302432
|
+
const globalPackagePath = isWindows2 ? join80(npmPrefix, "node_modules", packageName) : join80(npmPrefix, "lib", "node_modules", packageName);
|
|
302415
302433
|
try {
|
|
302416
302434
|
await fs8.stat(globalPackagePath);
|
|
302417
302435
|
installations.push({
|
|
@@ -302422,14 +302440,14 @@ async function detectMultipleInstallations() {
|
|
|
302422
302440
|
}
|
|
302423
302441
|
}
|
|
302424
302442
|
}
|
|
302425
|
-
const nativeBinPath =
|
|
302443
|
+
const nativeBinPath = join80(homedir23(), ".local", "bin", "vivus");
|
|
302426
302444
|
try {
|
|
302427
302445
|
await fs8.stat(nativeBinPath);
|
|
302428
302446
|
installations.push({ type: "native", path: nativeBinPath });
|
|
302429
302447
|
} catch {}
|
|
302430
302448
|
const config3 = getGlobalConfig();
|
|
302431
302449
|
if (config3.installMethod === "native") {
|
|
302432
|
-
const nativeDataPath =
|
|
302450
|
+
const nativeDataPath = join80(homedir23(), ".local", "share", "vivus");
|
|
302433
302451
|
try {
|
|
302434
302452
|
await fs8.stat(nativeDataPath);
|
|
302435
302453
|
if (!installations.some((i2) => i2.type === "native")) {
|
|
@@ -302442,7 +302460,7 @@ async function detectMultipleInstallations() {
|
|
|
302442
302460
|
async function detectConfigurationIssues(type) {
|
|
302443
302461
|
const warnings = [];
|
|
302444
302462
|
try {
|
|
302445
|
-
const raw = await readFile24(
|
|
302463
|
+
const raw = await readFile24(join80(getManagedFilePath(), "managed-settings.json"), "utf-8");
|
|
302446
302464
|
const parsed = jsonParse(raw);
|
|
302447
302465
|
const field = parsed && typeof parsed === "object" ? parsed.strictPluginOnlyCustomization : undefined;
|
|
302448
302466
|
if (field !== undefined && typeof field !== "boolean") {
|
|
@@ -302470,7 +302488,7 @@ async function detectConfigurationIssues(type) {
|
|
|
302470
302488
|
const path15 = process.env.PATH || "";
|
|
302471
302489
|
const pathDirectories = path15.split(delimiter2);
|
|
302472
302490
|
const homeDir = homedir23();
|
|
302473
|
-
const localBinPath =
|
|
302491
|
+
const localBinPath = join80(homeDir, ".local", "bin");
|
|
302474
302492
|
let normalizedLocalBinPath = localBinPath;
|
|
302475
302493
|
if (getPlatform() === "windows") {
|
|
302476
302494
|
normalizedLocalBinPath = localBinPath.split(win323.sep).join(posix5.sep);
|
|
@@ -302564,7 +302582,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
302564
302582
|
}
|
|
302565
302583
|
async function getDoctorDiagnostic() {
|
|
302566
302584
|
const installationType = await getCurrentInstallationType();
|
|
302567
|
-
const version2 = typeof MACRO !== "undefined" ? "1.1.
|
|
302585
|
+
const version2 = typeof MACRO !== "undefined" ? "1.1.31+c38c44f" : "unknown";
|
|
302568
302586
|
const installationPath = await getInstallationPath();
|
|
302569
302587
|
const invokedBinary = getInvokedBinary();
|
|
302570
302588
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -302654,7 +302672,7 @@ var init_doctorDiagnostic = __esm(() => {
|
|
|
302654
302672
|
|
|
302655
302673
|
// src/utils/xdg.ts
|
|
302656
302674
|
import { homedir as osHomedir2 } from "os";
|
|
302657
|
-
import { join as
|
|
302675
|
+
import { join as join81 } from "path";
|
|
302658
302676
|
function resolveOptions(options2) {
|
|
302659
302677
|
return {
|
|
302660
302678
|
env: options2?.env ?? process.env,
|
|
@@ -302663,26 +302681,26 @@ function resolveOptions(options2) {
|
|
|
302663
302681
|
}
|
|
302664
302682
|
function getXDGStateHome(options2) {
|
|
302665
302683
|
const { env: env4, home } = resolveOptions(options2);
|
|
302666
|
-
return env4.XDG_STATE_HOME ??
|
|
302684
|
+
return env4.XDG_STATE_HOME ?? join81(home, ".local", "state");
|
|
302667
302685
|
}
|
|
302668
302686
|
function getXDGCacheHome(options2) {
|
|
302669
302687
|
const { env: env4, home } = resolveOptions(options2);
|
|
302670
|
-
return env4.XDG_CACHE_HOME ??
|
|
302688
|
+
return env4.XDG_CACHE_HOME ?? join81(home, ".cache");
|
|
302671
302689
|
}
|
|
302672
302690
|
function getXDGDataHome(options2) {
|
|
302673
302691
|
const { env: env4, home } = resolveOptions(options2);
|
|
302674
|
-
return env4.XDG_DATA_HOME ??
|
|
302692
|
+
return env4.XDG_DATA_HOME ?? join81(home, ".local", "share");
|
|
302675
302693
|
}
|
|
302676
302694
|
function getUserBinDir(options2) {
|
|
302677
302695
|
const { home } = resolveOptions(options2);
|
|
302678
|
-
return
|
|
302696
|
+
return join81(home, ".local", "bin");
|
|
302679
302697
|
}
|
|
302680
302698
|
var init_xdg = () => {};
|
|
302681
302699
|
|
|
302682
302700
|
// src/utils/nativeInstaller/download.ts
|
|
302683
302701
|
import { createHash as createHash18 } from "crypto";
|
|
302684
302702
|
import { chmod as chmod6, writeFile as writeFile19 } from "fs/promises";
|
|
302685
|
-
import { join as
|
|
302703
|
+
import { join as join82 } from "path";
|
|
302686
302704
|
async function getLatestVersionFromArtifactory(tag2 = "latest") {
|
|
302687
302705
|
const startTime = Date.now();
|
|
302688
302706
|
const { stdout, code, stderr } = await execFileNoThrowWithCwd("npm", [
|
|
@@ -302824,8 +302842,8 @@ async function downloadVersionFromArtifactory(version2, stagingPath) {
|
|
|
302824
302842
|
}
|
|
302825
302843
|
}
|
|
302826
302844
|
};
|
|
302827
|
-
writeFileSync_DEPRECATED(
|
|
302828
|
-
writeFileSync_DEPRECATED(
|
|
302845
|
+
writeFileSync_DEPRECATED(join82(stagingPath, "package.json"), jsonStringify(packageJson, null, 2), { encoding: "utf8", flush: true });
|
|
302846
|
+
writeFileSync_DEPRECATED(join82(stagingPath, "package-lock.json"), jsonStringify(packageLock, null, 2), { encoding: "utf8", flush: true });
|
|
302829
302847
|
const result = await execFileNoThrowWithCwd("npm", ["ci", "--prefer-online", "--registry", ARTIFACTORY_REGISTRY_URL], {
|
|
302830
302848
|
timeout: 60000,
|
|
302831
302849
|
preserveOutputOnError: true,
|
|
@@ -302931,7 +302949,7 @@ async function downloadVersionFromBinaryRepo(version2, stagingPath, baseUrl, aut
|
|
|
302931
302949
|
const binaryName = getBinaryName(platform5);
|
|
302932
302950
|
const binaryUrl = `${baseUrl}/${version2}/${platform5}/${binaryName}`;
|
|
302933
302951
|
await fs8.mkdir(stagingPath);
|
|
302934
|
-
const binaryPath =
|
|
302952
|
+
const binaryPath = join82(stagingPath, binaryName);
|
|
302935
302953
|
try {
|
|
302936
302954
|
await downloadAndVerifyBinary(binaryUrl, expectedChecksum, binaryPath, authConfig || {});
|
|
302937
302955
|
const latencyMs = Date.now() - startTime;
|
|
@@ -302984,7 +303002,7 @@ var init_download = __esm(() => {
|
|
|
302984
303002
|
});
|
|
302985
303003
|
|
|
302986
303004
|
// src/utils/nativeInstaller/pidLock.ts
|
|
302987
|
-
import { basename as basename16, join as
|
|
303005
|
+
import { basename as basename16, join as join83 } from "path";
|
|
302988
303006
|
function isPidBasedLockingEnabled() {
|
|
302989
303007
|
const envVar = process.env.ENABLE_PID_BASED_VERSION_LOCKING;
|
|
302990
303008
|
if (isEnvTruthy(envVar)) {
|
|
@@ -303152,7 +303170,7 @@ function getAllLockInfo(locksDir) {
|
|
|
303152
303170
|
try {
|
|
303153
303171
|
const lockFiles = fs8.readdirStringSync(locksDir).filter((f) => f.endsWith(".lock"));
|
|
303154
303172
|
for (const lockFile of lockFiles) {
|
|
303155
|
-
const lockFilePath =
|
|
303173
|
+
const lockFilePath = join83(locksDir, lockFile);
|
|
303156
303174
|
const content = readLockContent(lockFilePath);
|
|
303157
303175
|
if (content) {
|
|
303158
303176
|
lockInfos.push({
|
|
@@ -303179,7 +303197,7 @@ function cleanupStaleLocks(locksDir) {
|
|
|
303179
303197
|
try {
|
|
303180
303198
|
const lockEntries = fs8.readdirStringSync(locksDir).filter((f) => f.endsWith(".lock"));
|
|
303181
303199
|
for (const lockEntry of lockEntries) {
|
|
303182
|
-
const lockFilePath =
|
|
303200
|
+
const lockFilePath = join83(locksDir, lockEntry);
|
|
303183
303201
|
try {
|
|
303184
303202
|
const stats = fs8.lstatSync(lockFilePath);
|
|
303185
303203
|
if (stats.isDirectory()) {
|
|
@@ -303234,7 +303252,7 @@ import {
|
|
|
303234
303252
|
writeFile as writeFile20
|
|
303235
303253
|
} from "fs/promises";
|
|
303236
303254
|
import { homedir as homedir24 } from "os";
|
|
303237
|
-
import { basename as basename17, delimiter as delimiter3, dirname as dirname30, join as
|
|
303255
|
+
import { basename as basename17, delimiter as delimiter3, dirname as dirname30, join as join84, resolve as resolve22 } from "path";
|
|
303238
303256
|
function getPlatform3() {
|
|
303239
303257
|
const os5 = env3.platform;
|
|
303240
303258
|
const arch = process.arch === "x64" ? "x64" : process.arch === "arm64" ? "arm64" : null;
|
|
@@ -303255,10 +303273,10 @@ function getBaseDirectories() {
|
|
|
303255
303273
|
const platform5 = getPlatform3();
|
|
303256
303274
|
const executableName = getBinaryName(platform5);
|
|
303257
303275
|
return {
|
|
303258
|
-
versions:
|
|
303259
|
-
staging:
|
|
303260
|
-
locks:
|
|
303261
|
-
executable:
|
|
303276
|
+
versions: join84(getXDGDataHome(), "vivus", "versions"),
|
|
303277
|
+
staging: join84(getXDGCacheHome(), "vivus", "staging"),
|
|
303278
|
+
locks: join84(getXDGStateHome(), "vivus", "locks"),
|
|
303279
|
+
executable: join84(getUserBinDir(), executableName)
|
|
303262
303280
|
};
|
|
303263
303281
|
}
|
|
303264
303282
|
async function isPossibleVivusBinary(filePath) {
|
|
@@ -303279,14 +303297,14 @@ async function getVersionPaths(version2) {
|
|
|
303279
303297
|
await Promise.all(dirsToCreate.map((dir) => mkdir20(dir, { recursive: true })));
|
|
303280
303298
|
const executableParentDir = dirname30(dirs.executable);
|
|
303281
303299
|
await mkdir20(executableParentDir, { recursive: true });
|
|
303282
|
-
const installPath =
|
|
303300
|
+
const installPath = join84(dirs.versions, version2);
|
|
303283
303301
|
try {
|
|
303284
303302
|
await stat28(installPath);
|
|
303285
303303
|
} catch {
|
|
303286
303304
|
await writeFile20(installPath, "", { encoding: "utf8" });
|
|
303287
303305
|
}
|
|
303288
303306
|
return {
|
|
303289
|
-
stagingPath:
|
|
303307
|
+
stagingPath: join84(dirs.staging, version2),
|
|
303290
303308
|
installPath
|
|
303291
303309
|
};
|
|
303292
303310
|
}
|
|
@@ -303387,7 +303405,7 @@ async function atomicMoveToInstallPath(stagedBinaryPath, installPath) {
|
|
|
303387
303405
|
}
|
|
303388
303406
|
async function installVersionFromPackage(stagingPath, installPath) {
|
|
303389
303407
|
try {
|
|
303390
|
-
const nodeModulesDir =
|
|
303408
|
+
const nodeModulesDir = join84(stagingPath, "node_modules", "@anthropic-ai");
|
|
303391
303409
|
const entries = await readdir16(nodeModulesDir);
|
|
303392
303410
|
const nativePackage = entries.find((entry) => entry.startsWith("vivus-cli-native-"));
|
|
303393
303411
|
if (!nativePackage) {
|
|
@@ -303398,7 +303416,7 @@ async function installVersionFromPackage(stagingPath, installPath) {
|
|
|
303398
303416
|
const error41 = new Error("Could not find platform-specific native package");
|
|
303399
303417
|
throw error41;
|
|
303400
303418
|
}
|
|
303401
|
-
const stagedBinaryPath =
|
|
303419
|
+
const stagedBinaryPath = join84(nodeModulesDir, nativePackage, "cli");
|
|
303402
303420
|
try {
|
|
303403
303421
|
await stat28(stagedBinaryPath);
|
|
303404
303422
|
} catch {
|
|
@@ -303428,7 +303446,7 @@ async function installVersionFromBinary(stagingPath, installPath) {
|
|
|
303428
303446
|
try {
|
|
303429
303447
|
const platform5 = getPlatform3();
|
|
303430
303448
|
const binaryName = getBinaryName(platform5);
|
|
303431
|
-
const stagedBinaryPath =
|
|
303449
|
+
const stagedBinaryPath = join84(stagingPath, binaryName);
|
|
303432
303450
|
try {
|
|
303433
303451
|
await stat28(stagedBinaryPath);
|
|
303434
303452
|
} catch {
|
|
@@ -303497,8 +303515,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
303497
303515
|
const maxVersion = await getMaxVersion();
|
|
303498
303516
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
303499
303517
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
303500
|
-
if (gte("1.1.
|
|
303501
|
-
logForDebugging(`Native installer: current version ${"1.1.
|
|
303518
|
+
if (gte("1.1.31+c38c44f", maxVersion)) {
|
|
303519
|
+
logForDebugging(`Native installer: current version ${"1.1.31+c38c44f"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
303502
303520
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
303503
303521
|
latency_ms: Date.now() - startTime,
|
|
303504
303522
|
max_version: maxVersion,
|
|
@@ -303509,7 +303527,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
303509
303527
|
version2 = maxVersion;
|
|
303510
303528
|
}
|
|
303511
303529
|
}
|
|
303512
|
-
if (!forceReinstall && version2 === "1.1.
|
|
303530
|
+
if (!forceReinstall && version2 === "1.1.31+c38c44f" && await versionIsAvailable(version2) && await isPossibleVivusBinary(executablePath)) {
|
|
303513
303531
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
303514
303532
|
logEvent("tengu_native_update_complete", {
|
|
303515
303533
|
latency_ms: Date.now() - startTime,
|
|
@@ -303828,7 +303846,7 @@ async function getVersionFromSymlink(symlinkPath) {
|
|
|
303828
303846
|
}
|
|
303829
303847
|
function getLockFilePathFromVersionPath(dirs, versionPath) {
|
|
303830
303848
|
const versionName = basename17(versionPath);
|
|
303831
|
-
return
|
|
303849
|
+
return join84(dirs.locks, `${versionName}.lock`);
|
|
303832
303850
|
}
|
|
303833
303851
|
async function lockCurrentVersion() {
|
|
303834
303852
|
const dirs = getBaseDirectories();
|
|
@@ -303922,7 +303940,7 @@ async function cleanupOldVersions() {
|
|
|
303922
303940
|
if (!/^vivus\.exe\.old\.\d+$/.test(file2))
|
|
303923
303941
|
continue;
|
|
303924
303942
|
try {
|
|
303925
|
-
await unlink12(
|
|
303943
|
+
await unlink12(join84(executableDir, file2));
|
|
303926
303944
|
cleanedCount++;
|
|
303927
303945
|
} catch {}
|
|
303928
303946
|
}
|
|
@@ -303939,7 +303957,7 @@ async function cleanupOldVersions() {
|
|
|
303939
303957
|
const stagingEntries = await readdir16(dirs.staging);
|
|
303940
303958
|
let stagingCleanedCount = 0;
|
|
303941
303959
|
for (const entry of stagingEntries) {
|
|
303942
|
-
const stagingPath =
|
|
303960
|
+
const stagingPath = join84(dirs.staging, entry);
|
|
303943
303961
|
try {
|
|
303944
303962
|
const stats = await stat28(stagingPath);
|
|
303945
303963
|
if (stats.mtime.getTime() < oneHourAgo) {
|
|
@@ -303981,7 +303999,7 @@ async function cleanupOldVersions() {
|
|
|
303981
303999
|
const versionFiles = [];
|
|
303982
304000
|
let tempFilesCleanedCount = 0;
|
|
303983
304001
|
for (const entry of versionEntries) {
|
|
303984
|
-
const entryPath =
|
|
304002
|
+
const entryPath = join84(dirs.versions, entry);
|
|
303985
304003
|
if (/\.tmp\.\d+\.\d+$/.test(entry)) {
|
|
303986
304004
|
try {
|
|
303987
304005
|
const stats = await stat28(entryPath);
|
|
@@ -304173,9 +304191,9 @@ async function manualRemoveNpmPackage(packageName) {
|
|
|
304173
304191
|
}
|
|
304174
304192
|
}
|
|
304175
304193
|
if (getPlatform3().startsWith("win32")) {
|
|
304176
|
-
const binCmd =
|
|
304177
|
-
const binPs1 =
|
|
304178
|
-
const binExe =
|
|
304194
|
+
const binCmd = join84(globalPrefix, "vivus.cmd");
|
|
304195
|
+
const binPs1 = join84(globalPrefix, "vivus.ps1");
|
|
304196
|
+
const binExe = join84(globalPrefix, "vivus");
|
|
304179
304197
|
if (await tryRemove(binCmd, "bin script")) {
|
|
304180
304198
|
manuallyRemoved = true;
|
|
304181
304199
|
}
|
|
@@ -304186,14 +304204,14 @@ async function manualRemoveNpmPackage(packageName) {
|
|
|
304186
304204
|
manuallyRemoved = true;
|
|
304187
304205
|
}
|
|
304188
304206
|
} else {
|
|
304189
|
-
const binSymlink =
|
|
304207
|
+
const binSymlink = join84(globalPrefix, "bin", "vivus");
|
|
304190
304208
|
if (await tryRemove(binSymlink, "bin symlink")) {
|
|
304191
304209
|
manuallyRemoved = true;
|
|
304192
304210
|
}
|
|
304193
304211
|
}
|
|
304194
304212
|
if (manuallyRemoved) {
|
|
304195
304213
|
logForDebugging(`Successfully removed ${packageName} manually`);
|
|
304196
|
-
const nodeModulesPath = getPlatform3().startsWith("win32") ?
|
|
304214
|
+
const nodeModulesPath = getPlatform3().startsWith("win32") ? join84(globalPrefix, "node_modules", packageName) : join84(globalPrefix, "lib", "node_modules", packageName);
|
|
304197
304215
|
return {
|
|
304198
304216
|
success: true,
|
|
304199
304217
|
warning: `${packageName} executables removed, but node_modules directory was left intact for safety. You may manually delete it later at: ${nodeModulesPath}`
|
|
@@ -304252,7 +304270,7 @@ async function cleanupNpmInstallations() {
|
|
|
304252
304270
|
errors4.push(codePackageResult.error);
|
|
304253
304271
|
}
|
|
304254
304272
|
if ("") {}
|
|
304255
|
-
const localInstallDir =
|
|
304273
|
+
const localInstallDir = join84(homedir24(), ".vivus", "local");
|
|
304256
304274
|
try {
|
|
304257
304275
|
await rm5(localInstallDir, { recursive: true });
|
|
304258
304276
|
removed++;
|
|
@@ -305171,7 +305189,7 @@ function extractBashCommentLabel(command) {
|
|
|
305171
305189
|
|
|
305172
305190
|
// src/utils/plugins/lspPluginIntegration.ts
|
|
305173
305191
|
import { readFile as readFile25 } from "fs/promises";
|
|
305174
|
-
import { join as
|
|
305192
|
+
import { join as join85, relative as relative7, resolve as resolve23 } from "path";
|
|
305175
305193
|
function validatePathWithinPlugin(pluginPath, relativePath) {
|
|
305176
305194
|
const resolvedPluginPath = resolve23(pluginPath);
|
|
305177
305195
|
const resolvedFilePath = resolve23(pluginPath, relativePath);
|
|
@@ -305183,7 +305201,7 @@ function validatePathWithinPlugin(pluginPath, relativePath) {
|
|
|
305183
305201
|
}
|
|
305184
305202
|
async function loadPluginLspServers(plugin, errors4 = []) {
|
|
305185
305203
|
const servers = {};
|
|
305186
|
-
const lspJsonPath =
|
|
305204
|
+
const lspJsonPath = join85(plugin.path, ".lsp.json");
|
|
305187
305205
|
try {
|
|
305188
305206
|
const content = await readFile25(lspJsonPath, "utf-8");
|
|
305189
305207
|
const parsed = jsonParse(content);
|
|
@@ -309667,7 +309685,7 @@ function checkTeamMemSecrets(filePath, content) {
|
|
|
309667
309685
|
|
|
309668
309686
|
// src/utils/gitDiff.ts
|
|
309669
309687
|
import { access as access5, readFile as readFile26 } from "fs/promises";
|
|
309670
|
-
import { dirname as dirname31, join as
|
|
309688
|
+
import { dirname as dirname31, join as join86, relative as relative8, sep as sep12 } from "path";
|
|
309671
309689
|
async function fetchGitDiff() {
|
|
309672
309690
|
const isGit = await getIsGit();
|
|
309673
309691
|
if (!isGit)
|
|
@@ -309818,7 +309836,7 @@ async function isInTransientGitState() {
|
|
|
309818
309836
|
"CHERRY_PICK_HEAD",
|
|
309819
309837
|
"REVERT_HEAD"
|
|
309820
309838
|
];
|
|
309821
|
-
const results = await Promise.all(transientFiles.map((file2) => access5(
|
|
309839
|
+
const results = await Promise.all(transientFiles.map((file2) => access5(join86(gitDir, file2)).then(() => true).catch(() => false)));
|
|
309822
309840
|
return results.some(Boolean);
|
|
309823
309841
|
}
|
|
309824
309842
|
async function fetchUntrackedFiles(maxFiles) {
|
|
@@ -311995,7 +312013,7 @@ var init_FileEditTool = __esm(() => {
|
|
|
311995
312013
|
backfillObservableInput(input) {
|
|
311996
312014
|
if (typeof input.file_path === "string") {
|
|
311997
312015
|
input.file_path = expandPath(input.file_path);
|
|
311998
|
-
input.file_path =
|
|
312016
|
+
input.file_path = redirectStrayClaudePath(input.file_path);
|
|
311999
312017
|
}
|
|
312000
312018
|
},
|
|
312001
312019
|
async preparePermissionMatcher({ file_path }) {
|
|
@@ -312861,7 +312879,7 @@ var init_FileWriteTool = __esm(() => {
|
|
|
312861
312879
|
backfillObservableInput(input) {
|
|
312862
312880
|
if (typeof input.file_path === "string") {
|
|
312863
312881
|
input.file_path = expandPath(input.file_path);
|
|
312864
|
-
input.file_path =
|
|
312882
|
+
input.file_path = redirectStrayClaudePath(input.file_path);
|
|
312865
312883
|
}
|
|
312866
312884
|
},
|
|
312867
312885
|
async preparePermissionMatcher({ file_path }) {
|
|
@@ -313068,9 +313086,9 @@ var init_FileWriteTool = __esm(() => {
|
|
|
313068
313086
|
});
|
|
313069
313087
|
|
|
313070
313088
|
// src/utils/plugins/orphanedPluginFilter.ts
|
|
313071
|
-
import { dirname as dirname34, isAbsolute as isAbsolute15, join as
|
|
313089
|
+
import { dirname as dirname34, isAbsolute as isAbsolute15, join as join87, normalize as normalize12, relative as relative11, sep as sep15 } from "path";
|
|
313072
313090
|
async function getGlobExclusionsForPluginCache(searchPath) {
|
|
313073
|
-
const cachePath = normalize12(
|
|
313091
|
+
const cachePath = normalize12(join87(getPluginsDirectory(), "cache"));
|
|
313074
313092
|
if (searchPath && !pathsOverlap(searchPath, cachePath)) {
|
|
313075
313093
|
return [];
|
|
313076
313094
|
}
|
|
@@ -313118,7 +313136,7 @@ var init_orphanedPluginFilter = __esm(() => {
|
|
|
313118
313136
|
});
|
|
313119
313137
|
|
|
313120
313138
|
// src/utils/glob.ts
|
|
313121
|
-
import { basename as basename19, dirname as dirname35, isAbsolute as isAbsolute16, join as
|
|
313139
|
+
import { basename as basename19, dirname as dirname35, isAbsolute as isAbsolute16, join as join88, sep as sep16 } from "path";
|
|
313122
313140
|
function extractGlobBaseDirectory(pattern) {
|
|
313123
313141
|
const globChars = /[*?[{]/;
|
|
313124
313142
|
const match = pattern.match(globChars);
|
|
@@ -313170,7 +313188,7 @@ async function glob(filePattern, cwd2, { limit, offset }, abortSignal, toolPermi
|
|
|
313170
313188
|
args.push("--glob", exclusion);
|
|
313171
313189
|
}
|
|
313172
313190
|
const allPaths = await ripGrep2(args, searchDir, abortSignal);
|
|
313173
|
-
const absolutePaths = allPaths.map((p) => isAbsolute16(p) ? p :
|
|
313191
|
+
const absolutePaths = allPaths.map((p) => isAbsolute16(p) ? p : join88(searchDir, p));
|
|
313174
313192
|
const truncated = absolutePaths.length > offset + limit;
|
|
313175
313193
|
const files = absolutePaths.slice(offset, offset + limit);
|
|
313176
313194
|
return { files, truncated };
|
|
@@ -336920,7 +336938,7 @@ __export(exports_teamHelpers, {
|
|
|
336920
336938
|
});
|
|
336921
336939
|
import { mkdirSync as mkdirSync4, readFileSync as readFileSync11, writeFileSync as writeFileSync3 } from "fs";
|
|
336922
336940
|
import { mkdir as mkdir21, readFile as readFile27, rm as rm6, writeFile as writeFile21 } from "fs/promises";
|
|
336923
|
-
import { join as
|
|
336941
|
+
import { join as join89 } from "path";
|
|
336924
336942
|
function sanitizeName(name) {
|
|
336925
336943
|
return name.replace(/[^a-zA-Z0-9]/g, "-").toLowerCase();
|
|
336926
336944
|
}
|
|
@@ -336928,10 +336946,10 @@ function sanitizeAgentName(name) {
|
|
|
336928
336946
|
return name.replace(/@/g, "-");
|
|
336929
336947
|
}
|
|
336930
336948
|
function getTeamDir(teamName) {
|
|
336931
|
-
return
|
|
336949
|
+
return join89(getTeamsDir(), sanitizeName(teamName));
|
|
336932
336950
|
}
|
|
336933
336951
|
function getTeamFilePath(teamName) {
|
|
336934
|
-
return
|
|
336952
|
+
return join89(getTeamDir(teamName), "config.json");
|
|
336935
336953
|
}
|
|
336936
336954
|
function readTeamFile(teamName) {
|
|
336937
336955
|
try {
|
|
@@ -337122,15 +337140,15 @@ async function setMemberActive(teamName, memberName, isActive) {
|
|
|
337122
337140
|
logForDebugging(`[TeammateTool] Set member ${memberName} in team ${teamName} to ${isActive ? "active" : "idle"}`);
|
|
337123
337141
|
}
|
|
337124
337142
|
async function destroyWorktree(worktreePath) {
|
|
337125
|
-
const gitFilePath =
|
|
337143
|
+
const gitFilePath = join89(worktreePath, ".git");
|
|
337126
337144
|
let mainRepoPath = null;
|
|
337127
337145
|
try {
|
|
337128
337146
|
const gitFileContent = (await readFile27(gitFilePath, "utf-8")).trim();
|
|
337129
337147
|
const match = gitFileContent.match(/^gitdir:\s*(.+)$/);
|
|
337130
337148
|
if (match && match[1]) {
|
|
337131
337149
|
const worktreeGitDir = match[1];
|
|
337132
|
-
const mainGitDir =
|
|
337133
|
-
mainRepoPath =
|
|
337150
|
+
const mainGitDir = join89(worktreeGitDir, "..", "..");
|
|
337151
|
+
mainRepoPath = join89(mainGitDir, "..");
|
|
337134
337152
|
}
|
|
337135
337153
|
} catch {}
|
|
337136
337154
|
if (mainRepoPath) {
|
|
@@ -338877,7 +338895,7 @@ var init_attachments = __esm(() => {
|
|
|
338877
338895
|
});
|
|
338878
338896
|
|
|
338879
338897
|
// src/utils/plugins/loadPluginCommands.ts
|
|
338880
|
-
import { basename as basename23, dirname as dirname37, join as
|
|
338898
|
+
import { basename as basename23, dirname as dirname37, join as join90 } from "path";
|
|
338881
338899
|
function isSkillFile(filePath) {
|
|
338882
338900
|
return /^skill\.md$/i.test(basename23(filePath));
|
|
338883
338901
|
}
|
|
@@ -339056,7 +339074,7 @@ function clearPluginCommandCache() {
|
|
|
339056
339074
|
async function loadSkillsFromDirectory(skillsPath, pluginName, sourceName, pluginManifest, pluginPath, loadedPaths) {
|
|
339057
339075
|
const fs8 = getFsImplementation();
|
|
339058
339076
|
const skills = [];
|
|
339059
|
-
const directSkillPath =
|
|
339077
|
+
const directSkillPath = join90(skillsPath, "SKILL.md");
|
|
339060
339078
|
let directSkillContent = null;
|
|
339061
339079
|
try {
|
|
339062
339080
|
directSkillContent = await fs8.readFile(directSkillPath, {
|
|
@@ -339107,8 +339125,8 @@ async function loadSkillsFromDirectory(skillsPath, pluginName, sourceName, plugi
|
|
|
339107
339125
|
if (!entry.isDirectory() && !entry.isSymbolicLink()) {
|
|
339108
339126
|
return;
|
|
339109
339127
|
}
|
|
339110
|
-
const skillDirPath =
|
|
339111
|
-
const skillFilePath =
|
|
339128
|
+
const skillDirPath = join90(skillsPath, entry.name);
|
|
339129
|
+
const skillFilePath = join90(skillDirPath, "SKILL.md");
|
|
339112
339130
|
let content;
|
|
339113
339131
|
try {
|
|
339114
339132
|
content = await fs8.readFile(skillFilePath, { encoding: "utf-8" });
|
|
@@ -339212,7 +339230,7 @@ var init_loadPluginCommands = __esm(() => {
|
|
|
339212
339230
|
if (plugin.commandsMetadata) {
|
|
339213
339231
|
for (const [name, metadata] of Object.entries(plugin.commandsMetadata)) {
|
|
339214
339232
|
if (metadata.source) {
|
|
339215
|
-
const fullMetadataPath =
|
|
339233
|
+
const fullMetadataPath = join90(plugin.path, metadata.source);
|
|
339216
339234
|
if (commandPath === fullMetadataPath) {
|
|
339217
339235
|
commandName = `${plugin.name}:${name}`;
|
|
339218
339236
|
metadataOverride = metadata;
|
|
@@ -339454,7 +339472,7 @@ var init_loadPluginOutputStyles = __esm(() => {
|
|
|
339454
339472
|
|
|
339455
339473
|
// src/utils/plugins/cacheUtils.ts
|
|
339456
339474
|
import { readdir as readdir18, rm as rm7, stat as stat30, unlink as unlink13, writeFile as writeFile22 } from "fs/promises";
|
|
339457
|
-
import { join as
|
|
339475
|
+
import { join as join91 } from "path";
|
|
339458
339476
|
function clearAllPluginCaches() {
|
|
339459
339477
|
clearPluginCache();
|
|
339460
339478
|
clearPluginCommandCache();
|
|
@@ -339491,11 +339509,11 @@ async function cleanupOrphanedPluginVersionsInBackground() {
|
|
|
339491
339509
|
const now2 = Date.now();
|
|
339492
339510
|
await Promise.all([...installedVersions].map((p) => removeOrphanedAtMarker(p)));
|
|
339493
339511
|
for (const marketplace of await readSubdirs(cachePath)) {
|
|
339494
|
-
const marketplacePath =
|
|
339512
|
+
const marketplacePath = join91(cachePath, marketplace);
|
|
339495
339513
|
for (const plugin of await readSubdirs(marketplacePath)) {
|
|
339496
|
-
const pluginPath =
|
|
339514
|
+
const pluginPath = join91(marketplacePath, plugin);
|
|
339497
339515
|
for (const version2 of await readSubdirs(pluginPath)) {
|
|
339498
|
-
const versionPath =
|
|
339516
|
+
const versionPath = join91(pluginPath, version2);
|
|
339499
339517
|
if (installedVersions.has(versionPath))
|
|
339500
339518
|
continue;
|
|
339501
339519
|
await processOrphanedPluginVersion(versionPath, now2);
|
|
@@ -339509,7 +339527,7 @@ async function cleanupOrphanedPluginVersionsInBackground() {
|
|
|
339509
339527
|
}
|
|
339510
339528
|
}
|
|
339511
339529
|
function getOrphanedAtPath(versionPath) {
|
|
339512
|
-
return
|
|
339530
|
+
return join91(versionPath, ORPHANED_AT_FILENAME2);
|
|
339513
339531
|
}
|
|
339514
339532
|
async function removeOrphanedAtMarker(versionPath) {
|
|
339515
339533
|
const orphanedAtPath = getOrphanedAtPath(versionPath);
|
|
@@ -339599,7 +339617,7 @@ var init_cacheUtils = __esm(() => {
|
|
|
339599
339617
|
|
|
339600
339618
|
// src/utils/plugins/officialMarketplaceGcs.ts
|
|
339601
339619
|
import { chmod as chmod8, mkdir as mkdir22, readFile as readFile28, rename as rename6, rm as rm8, writeFile as writeFile23 } from "fs/promises";
|
|
339602
|
-
import { dirname as dirname38, join as
|
|
339620
|
+
import { dirname as dirname38, join as join92, resolve as resolve29, sep as sep18 } from "path";
|
|
339603
339621
|
async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCacheDir) {
|
|
339604
339622
|
const cacheDir = resolve29(marketplacesCacheDir);
|
|
339605
339623
|
const resolvedLoc = resolve29(installLocation);
|
|
@@ -339622,7 +339640,7 @@ async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCach
|
|
|
339622
339640
|
if (!sha) {
|
|
339623
339641
|
throw new Error("latest pointer returned empty body");
|
|
339624
339642
|
}
|
|
339625
|
-
const sentinelPath =
|
|
339643
|
+
const sentinelPath = join92(installLocation, ".gcs-sha");
|
|
339626
339644
|
const currentSha = await readFile28(sentinelPath, "utf8").then((s) => s.trim(), () => null);
|
|
339627
339645
|
if (currentSha === sha) {
|
|
339628
339646
|
outcome = "noop";
|
|
@@ -339645,7 +339663,7 @@ async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCach
|
|
|
339645
339663
|
const rel = arcPath.slice(ARC_PREFIX.length);
|
|
339646
339664
|
if (!rel || rel.endsWith("/"))
|
|
339647
339665
|
continue;
|
|
339648
|
-
const dest =
|
|
339666
|
+
const dest = join92(staging, rel);
|
|
339649
339667
|
await mkdir22(dirname38(dest), { recursive: true });
|
|
339650
339668
|
await writeFile23(dest, data);
|
|
339651
339669
|
const mode = modes[arcPath];
|
|
@@ -339653,7 +339671,7 @@ async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCach
|
|
|
339653
339671
|
await chmod8(dest, mode & 511).catch(() => {});
|
|
339654
339672
|
}
|
|
339655
339673
|
}
|
|
339656
|
-
await writeFile23(
|
|
339674
|
+
await writeFile23(join92(staging, ".gcs-sha"), sha);
|
|
339657
339675
|
await rm8(installLocation, { recursive: true, force: true });
|
|
339658
339676
|
await rename6(staging, installLocation);
|
|
339659
339677
|
outcome = "updated";
|
|
@@ -339720,12 +339738,12 @@ var init_officialMarketplaceGcs = __esm(() => {
|
|
|
339720
339738
|
|
|
339721
339739
|
// src/utils/plugins/marketplaceManager.ts
|
|
339722
339740
|
import { writeFile as writeFile24 } from "fs/promises";
|
|
339723
|
-
import { basename as basename25, dirname as dirname39, isAbsolute as isAbsolute19, join as
|
|
339741
|
+
import { basename as basename25, dirname as dirname39, isAbsolute as isAbsolute19, join as join93, resolve as resolve30, sep as sep19 } from "path";
|
|
339724
339742
|
function getKnownMarketplacesFile() {
|
|
339725
|
-
return
|
|
339743
|
+
return join93(getPluginsDirectory(), "known_marketplaces.json");
|
|
339726
339744
|
}
|
|
339727
339745
|
function getMarketplacesCacheDir() {
|
|
339728
|
-
return
|
|
339746
|
+
return join93(getPluginsDirectory(), "marketplaces");
|
|
339729
339747
|
}
|
|
339730
339748
|
function clearMarketplacesCache() {
|
|
339731
339749
|
getMarketplace.cache?.clear?.();
|
|
@@ -339812,7 +339830,7 @@ async function saveKnownMarketplacesConfig(config3) {
|
|
|
339812
339830
|
throw new ConfigParseError(`Invalid marketplace config: ${parsed.error.message}`, configFile, config3);
|
|
339813
339831
|
}
|
|
339814
339832
|
const fs8 = getFsImplementation();
|
|
339815
|
-
const dir =
|
|
339833
|
+
const dir = join93(configFile, "..");
|
|
339816
339834
|
await fs8.mkdir(dir);
|
|
339817
339835
|
writeFileSync_DEPRECATED(configFile, jsonStringify(parsed.data, null, 2), {
|
|
339818
339836
|
encoding: "utf-8",
|
|
@@ -339859,7 +339877,7 @@ async function registerSeedMarketplaces() {
|
|
|
339859
339877
|
return false;
|
|
339860
339878
|
}
|
|
339861
339879
|
async function readSeedKnownMarketplaces(seedDir) {
|
|
339862
|
-
const seedJsonPath =
|
|
339880
|
+
const seedJsonPath = join93(seedDir, "known_marketplaces.json");
|
|
339863
339881
|
try {
|
|
339864
339882
|
const content = await getFsImplementation().readFile(seedJsonPath, {
|
|
339865
339883
|
encoding: "utf-8"
|
|
@@ -339878,8 +339896,8 @@ async function readSeedKnownMarketplaces(seedDir) {
|
|
|
339878
339896
|
}
|
|
339879
339897
|
}
|
|
339880
339898
|
async function findSeedMarketplaceLocation(seedDir, name) {
|
|
339881
|
-
const dirCandidate =
|
|
339882
|
-
const jsonCandidate =
|
|
339899
|
+
const dirCandidate = join93(seedDir, "marketplaces", name);
|
|
339900
|
+
const jsonCandidate = join93(seedDir, "marketplaces", `${name}.json`);
|
|
339883
339901
|
for (const candidate of [dirCandidate, jsonCandidate]) {
|
|
339884
339902
|
try {
|
|
339885
339903
|
await readCachedMarketplace(candidate);
|
|
@@ -339931,7 +339949,7 @@ async function gitPull(cwd2, ref, options2) {
|
|
|
339931
339949
|
async function gitSubmoduleUpdate(cwd2, credentialArgs, env4, sparsePaths) {
|
|
339932
339950
|
if (sparsePaths && sparsePaths.length > 0)
|
|
339933
339951
|
return;
|
|
339934
|
-
const hasGitmodules = await getFsImplementation().stat(
|
|
339952
|
+
const hasGitmodules = await getFsImplementation().stat(join93(cwd2, ".gitmodules")).then(() => true, () => false);
|
|
339935
339953
|
if (!hasGitmodules)
|
|
339936
339954
|
return;
|
|
339937
339955
|
const result = await execFileNoThrowWithCwd(gitExe(), [
|
|
@@ -340293,7 +340311,7 @@ Technical details: ${error41.message}`);
|
|
|
340293
340311
|
}
|
|
340294
340312
|
logPluginFetch("marketplace_url", url3, "success", performance.now() - fetchStarted);
|
|
340295
340313
|
safeCallProgress(onProgress, "Saving marketplace to cache");
|
|
340296
|
-
const cacheDir =
|
|
340314
|
+
const cacheDir = join93(cachePath, "..");
|
|
340297
340315
|
await fs8.mkdir(cacheDir);
|
|
340298
340316
|
writeFileSync_DEPRECATED(cachePath, jsonStringify(result.data, null, 2), {
|
|
340299
340317
|
encoding: "utf-8",
|
|
@@ -340330,7 +340348,7 @@ async function loadAndCacheMarketplace(source, onProgress) {
|
|
|
340330
340348
|
try {
|
|
340331
340349
|
switch (source.source) {
|
|
340332
340350
|
case "url": {
|
|
340333
|
-
temporaryCachePath =
|
|
340351
|
+
temporaryCachePath = join93(cacheDir, `${tempName}.json`);
|
|
340334
340352
|
cleanupNeeded = true;
|
|
340335
340353
|
await cacheMarketplaceFromUrl(source.url, temporaryCachePath, source.headers, onProgress);
|
|
340336
340354
|
marketplacePath = temporaryCachePath;
|
|
@@ -340339,7 +340357,7 @@ async function loadAndCacheMarketplace(source, onProgress) {
|
|
|
340339
340357
|
case "github": {
|
|
340340
340358
|
const sshUrl = `git@github.com:${source.repo}.git`;
|
|
340341
340359
|
const httpsUrl = `https://github.com/${source.repo}.git`;
|
|
340342
|
-
temporaryCachePath =
|
|
340360
|
+
temporaryCachePath = join93(cacheDir, tempName);
|
|
340343
340361
|
cleanupNeeded = true;
|
|
340344
340362
|
let lastError = null;
|
|
340345
340363
|
const sshConfigured = await isGitHubSshLikelyConfigured();
|
|
@@ -340384,14 +340402,14 @@ async function loadAndCacheMarketplace(source, onProgress) {
|
|
|
340384
340402
|
if (lastError) {
|
|
340385
340403
|
throw lastError;
|
|
340386
340404
|
}
|
|
340387
|
-
marketplacePath =
|
|
340405
|
+
marketplacePath = join93(temporaryCachePath, source.path || ".vivus-plugin/marketplace.json");
|
|
340388
340406
|
break;
|
|
340389
340407
|
}
|
|
340390
340408
|
case "git": {
|
|
340391
|
-
temporaryCachePath =
|
|
340409
|
+
temporaryCachePath = join93(cacheDir, tempName);
|
|
340392
340410
|
cleanupNeeded = true;
|
|
340393
340411
|
await cacheMarketplaceFromGit(source.url, temporaryCachePath, source.ref, source.sparsePaths, onProgress);
|
|
340394
|
-
marketplacePath =
|
|
340412
|
+
marketplacePath = join93(temporaryCachePath, source.path || ".vivus-plugin/marketplace.json");
|
|
340395
340413
|
break;
|
|
340396
340414
|
}
|
|
340397
340415
|
case "npm": {
|
|
@@ -340406,8 +340424,8 @@ async function loadAndCacheMarketplace(source, onProgress) {
|
|
|
340406
340424
|
}
|
|
340407
340425
|
case "directory": {
|
|
340408
340426
|
const absPath = resolve30(source.path);
|
|
340409
|
-
const vivusPath =
|
|
340410
|
-
const claudePath =
|
|
340427
|
+
const vivusPath = join93(absPath, ".vivus-plugin", "marketplace.json");
|
|
340428
|
+
const claudePath = join93(absPath, ".claude-plugin", "marketplace.json");
|
|
340411
340429
|
try {
|
|
340412
340430
|
await fs8.stat(vivusPath);
|
|
340413
340431
|
marketplacePath = vivusPath;
|
|
@@ -340419,8 +340437,8 @@ async function loadAndCacheMarketplace(source, onProgress) {
|
|
|
340419
340437
|
break;
|
|
340420
340438
|
}
|
|
340421
340439
|
case "settings": {
|
|
340422
|
-
temporaryCachePath =
|
|
340423
|
-
marketplacePath =
|
|
340440
|
+
temporaryCachePath = join93(cacheDir, source.name);
|
|
340441
|
+
marketplacePath = join93(temporaryCachePath, ".vivus-plugin", "marketplace.json");
|
|
340424
340442
|
cleanupNeeded = false;
|
|
340425
340443
|
await fs8.mkdir(dirname39(marketplacePath));
|
|
340426
340444
|
await writeFile24(marketplacePath, jsonStringify({
|
|
@@ -340455,7 +340473,7 @@ async function loadAndCacheMarketplace(source, onProgress) {
|
|
|
340455
340473
|
}
|
|
340456
340474
|
throw new Error(`Failed to parse marketplace file at ${marketplacePath}: ${errorMessage(e)}`);
|
|
340457
340475
|
}
|
|
340458
|
-
const finalCachePath =
|
|
340476
|
+
const finalCachePath = join93(cacheDir, marketplace.name);
|
|
340459
340477
|
const resolvedFinal = resolve30(finalCachePath);
|
|
340460
340478
|
const resolvedCacheDir = resolve30(cacheDir);
|
|
340461
340479
|
if (!resolvedFinal.startsWith(resolvedCacheDir + sep19)) {
|
|
@@ -340576,9 +340594,9 @@ async function removeMarketplaceSource(name) {
|
|
|
340576
340594
|
await saveKnownMarketplacesConfig(config3);
|
|
340577
340595
|
const fs8 = getFsImplementation();
|
|
340578
340596
|
const cacheDir = getMarketplacesCacheDir();
|
|
340579
|
-
const cachePath =
|
|
340597
|
+
const cachePath = join93(cacheDir, name);
|
|
340580
340598
|
await fs8.rm(cachePath, { recursive: true, force: true });
|
|
340581
|
-
const jsonCachePath =
|
|
340599
|
+
const jsonCachePath = join93(cacheDir, `${name}.json`);
|
|
340582
340600
|
await fs8.rm(jsonCachePath, { force: true });
|
|
340583
340601
|
const editableSources = ["userSettings", "projectSettings", "localSettings"];
|
|
340584
340602
|
for (const source of editableSources) {
|
|
@@ -340629,7 +340647,7 @@ async function removeMarketplaceSource(name) {
|
|
|
340629
340647
|
logForDebugging(`Removed marketplace source: ${name}`);
|
|
340630
340648
|
}
|
|
340631
340649
|
async function readCachedMarketplace(installLocation) {
|
|
340632
|
-
const nestedPath =
|
|
340650
|
+
const nestedPath = join93(installLocation, ".vivus-plugin", "marketplace.json");
|
|
340633
340651
|
try {
|
|
340634
340652
|
return await parseFileWithSchema(nestedPath, PluginMarketplaceSchema());
|
|
340635
340653
|
} catch (e) {
|
|
@@ -340639,7 +340657,7 @@ async function readCachedMarketplace(installLocation) {
|
|
|
340639
340657
|
if (code !== "ENOENT" && code !== "ENOTDIR")
|
|
340640
340658
|
throw e;
|
|
340641
340659
|
}
|
|
340642
|
-
const claudePath =
|
|
340660
|
+
const claudePath = join93(installLocation, ".claude-plugin", "marketplace.json");
|
|
340643
340661
|
try {
|
|
340644
340662
|
return await parseFileWithSchema(claudePath, PluginMarketplaceSchema());
|
|
340645
340663
|
} catch (e) {
|
|
@@ -340939,12 +340957,12 @@ var init_marketplaceManager = __esm(() => {
|
|
|
340939
340957
|
});
|
|
340940
340958
|
|
|
340941
340959
|
// src/utils/plugins/installedPluginsManager.ts
|
|
340942
|
-
import { dirname as dirname40, join as
|
|
340960
|
+
import { dirname as dirname40, join as join94 } from "path";
|
|
340943
340961
|
function getInstalledPluginsFilePath() {
|
|
340944
|
-
return
|
|
340962
|
+
return join94(getPluginsDirectory(), "installed_plugins.json");
|
|
340945
340963
|
}
|
|
340946
340964
|
function getInstalledPluginsV2FilePath() {
|
|
340947
|
-
return
|
|
340965
|
+
return join94(getPluginsDirectory(), "installed_plugins_v2.json");
|
|
340948
340966
|
}
|
|
340949
340967
|
function migrateToSinglePluginFile() {
|
|
340950
340968
|
if (migrationCompleted) {
|
|
@@ -341012,12 +341030,12 @@ function cleanupLegacyCache(v2Data) {
|
|
|
341012
341030
|
continue;
|
|
341013
341031
|
}
|
|
341014
341032
|
const entry = dirent.name;
|
|
341015
|
-
const entryPath =
|
|
341033
|
+
const entryPath = join94(cachePath, entry);
|
|
341016
341034
|
const subEntries = fs8.readdirSync(entryPath);
|
|
341017
341035
|
const hasVersionedStructure = subEntries.some((subDirent) => {
|
|
341018
341036
|
if (!subDirent.isDirectory())
|
|
341019
341037
|
return false;
|
|
341020
|
-
const subPath =
|
|
341038
|
+
const subPath = join94(entryPath, subDirent.name);
|
|
341021
341039
|
const versionEntries = fs8.readdirSync(subPath);
|
|
341022
341040
|
return versionEntries.some((vDirent) => vDirent.isDirectory());
|
|
341023
341041
|
});
|
|
@@ -341272,7 +341290,7 @@ async function getGitCommitSha2(dirPath) {
|
|
|
341272
341290
|
}
|
|
341273
341291
|
function getPluginVersionFromManifest(pluginCachePath, pluginId) {
|
|
341274
341292
|
const fs8 = getFsImplementation();
|
|
341275
|
-
const manifestPath =
|
|
341293
|
+
const manifestPath = join94(pluginCachePath, ".vivus-plugin", "plugin.json");
|
|
341276
341294
|
try {
|
|
341277
341295
|
const manifestContent = fs8.readFileSync(manifestPath, { encoding: "utf-8" });
|
|
341278
341296
|
const manifest = jsonParse(manifestContent);
|
|
@@ -341366,13 +341384,13 @@ async function migrateFromEnabledPlugins() {
|
|
|
341366
341384
|
let version2 = "unknown";
|
|
341367
341385
|
let gitCommitSha = undefined;
|
|
341368
341386
|
if (typeof entry.source === "string") {
|
|
341369
|
-
installPath =
|
|
341387
|
+
installPath = join94(marketplaceInstallLocation, entry.source);
|
|
341370
341388
|
version2 = getPluginVersionFromManifest(installPath, pluginId);
|
|
341371
341389
|
gitCommitSha = await getGitCommitSha2(installPath);
|
|
341372
341390
|
} else {
|
|
341373
341391
|
const cachePath = getPluginCachePath();
|
|
341374
341392
|
const sanitizedName = pluginName.replace(/[^a-zA-Z0-9-_]/g, "-");
|
|
341375
|
-
const pluginCachePath =
|
|
341393
|
+
const pluginCachePath = join94(cachePath, sanitizedName);
|
|
341376
341394
|
let dirEntries;
|
|
341377
341395
|
try {
|
|
341378
341396
|
dirEntries = (await getFsImplementation().readdir(pluginCachePath)).map((e) => typeof e === "string" ? e : e.name);
|
|
@@ -341730,7 +341748,7 @@ __export(exports_commitAttribution, {
|
|
|
341730
341748
|
});
|
|
341731
341749
|
import { createHash as createHash19, randomUUID as randomUUID16 } from "crypto";
|
|
341732
341750
|
import { stat as stat31 } from "fs/promises";
|
|
341733
|
-
import { isAbsolute as isAbsolute20, join as
|
|
341751
|
+
import { isAbsolute as isAbsolute20, join as join95, relative as relative15, sep as sep21 } from "path";
|
|
341734
341752
|
function getAttributionRepoRoot() {
|
|
341735
341753
|
const cwd2 = getCwd();
|
|
341736
341754
|
return findGitRoot(cwd2) ?? getOriginalCwd();
|
|
@@ -341809,7 +341827,7 @@ function expandFilePath(filePath) {
|
|
|
341809
341827
|
if (isAbsolute20(filePath)) {
|
|
341810
341828
|
return filePath;
|
|
341811
341829
|
}
|
|
341812
|
-
return
|
|
341830
|
+
return join95(getAttributionRepoRoot(), filePath);
|
|
341813
341831
|
}
|
|
341814
341832
|
function createEmptyAttributionState() {
|
|
341815
341833
|
return {
|
|
@@ -341967,7 +341985,7 @@ async function calculateCommitAttribution(states, stagedFiles) {
|
|
|
341967
341985
|
if (isGeneratedFile(file2)) {
|
|
341968
341986
|
return { type: "generated", file: file2 };
|
|
341969
341987
|
}
|
|
341970
|
-
const absPath =
|
|
341988
|
+
const absPath = join95(cwd2, file2);
|
|
341971
341989
|
const fileState = mergedFileStates.get(file2);
|
|
341972
341990
|
const baseline = mergedBaselines.get(file2);
|
|
341973
341991
|
const fileSurface = states[0].surface;
|
|
@@ -342109,7 +342127,7 @@ async function isGitTransientState() {
|
|
|
342109
342127
|
];
|
|
342110
342128
|
const results = await Promise.all(indicators.map(async (indicator) => {
|
|
342111
342129
|
try {
|
|
342112
|
-
await stat31(
|
|
342130
|
+
await stat31(join95(gitDir, indicator));
|
|
342113
342131
|
return true;
|
|
342114
342132
|
} catch {
|
|
342115
342133
|
return false;
|
|
@@ -352246,16 +352264,16 @@ import {
|
|
|
352246
352264
|
basename as basename28,
|
|
352247
352265
|
dirname as dirname41,
|
|
352248
352266
|
isAbsolute as isAbsolute22,
|
|
352249
|
-
join as
|
|
352267
|
+
join as join96,
|
|
352250
352268
|
sep as pathSep,
|
|
352251
352269
|
relative as relative16
|
|
352252
352270
|
} from "path";
|
|
352253
352271
|
function getSkillsPath(source, dir) {
|
|
352254
352272
|
switch (source) {
|
|
352255
352273
|
case "policySettings":
|
|
352256
|
-
return
|
|
352274
|
+
return join96(getManagedFilePath(), ".vivus", dir);
|
|
352257
352275
|
case "userSettings":
|
|
352258
|
-
return
|
|
352276
|
+
return join96(getVivusConfigHomeDir(), dir);
|
|
352259
352277
|
case "projectSettings":
|
|
352260
352278
|
return `.vivus/${dir}`;
|
|
352261
352279
|
case "plugin":
|
|
@@ -352425,8 +352443,8 @@ async function loadSkillsFromSkillsDir(basePath, source) {
|
|
|
352425
352443
|
if (!entry.isDirectory() && !entry.isSymbolicLink()) {
|
|
352426
352444
|
return null;
|
|
352427
352445
|
}
|
|
352428
|
-
const skillDirPath =
|
|
352429
|
-
const skillFilePath =
|
|
352446
|
+
const skillDirPath = join96(basePath, entry.name);
|
|
352447
|
+
const skillFilePath = join96(skillDirPath, "SKILL.md");
|
|
352430
352448
|
let content;
|
|
352431
352449
|
try {
|
|
352432
352450
|
content = await fs8.readFile(skillFilePath, { encoding: "utf-8" });
|
|
@@ -352581,7 +352599,7 @@ async function discoverSkillDirsForPaths(filePaths, cwd2) {
|
|
|
352581
352599
|
for (const filePath of filePaths) {
|
|
352582
352600
|
let currentDir = dirname41(filePath);
|
|
352583
352601
|
while (currentDir.startsWith(resolvedCwd + pathSep)) {
|
|
352584
|
-
const skillDir =
|
|
352602
|
+
const skillDir = join96(currentDir, ".vivus", "skills");
|
|
352585
352603
|
if (!dynamicSkillDirs.has(skillDir)) {
|
|
352586
352604
|
dynamicSkillDirs.add(skillDir);
|
|
352587
352605
|
try {
|
|
@@ -352704,8 +352722,8 @@ var init_loadSkillsDir = __esm(() => {
|
|
|
352704
352722
|
init_types2();
|
|
352705
352723
|
import_ignore = __toESM(require_ignore(), 1);
|
|
352706
352724
|
getSkillDirCommands = memoize_default(async (cwd2) => {
|
|
352707
|
-
const userSkillsDir =
|
|
352708
|
-
const managedSkillsDir =
|
|
352725
|
+
const userSkillsDir = join96(getVivusConfigHomeDir(), "skills");
|
|
352726
|
+
const managedSkillsDir = join96(getManagedFilePath(), ".vivus", "skills");
|
|
352709
352727
|
const projectSkillsDirs = getProjectDirsUpToHome("skills", cwd2);
|
|
352710
352728
|
logForDebugging(`Loading skills from: managed=${managedSkillsDir}, user=${userSkillsDir}, project=[${projectSkillsDirs.join(", ")}]`);
|
|
352711
352729
|
const additionalDirs = getAdditionalDirectoriesForVivusMd();
|
|
@@ -352716,7 +352734,7 @@ var init_loadSkillsDir = __esm(() => {
|
|
|
352716
352734
|
logForDebugging(`[bare] Skipping skill dir discovery (${additionalDirs.length === 0 ? "no --add-dir" : "projectSettings disabled or skillsLocked"})`);
|
|
352717
352735
|
return [];
|
|
352718
352736
|
}
|
|
352719
|
-
const additionalSkillsNested2 = await Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir(
|
|
352737
|
+
const additionalSkillsNested2 = await Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir(join96(dir, ".vivus", "skills"), "projectSettings")));
|
|
352720
352738
|
return additionalSkillsNested2.flat().map((s) => s.skill);
|
|
352721
352739
|
}
|
|
352722
352740
|
const [
|
|
@@ -352729,7 +352747,7 @@ var init_loadSkillsDir = __esm(() => {
|
|
|
352729
352747
|
isEnvTruthy(process.env.VIVUS_CODE_DISABLE_POLICY_SKILLS) ? Promise.resolve([]) : loadSkillsFromSkillsDir(managedSkillsDir, "policySettings"),
|
|
352730
352748
|
isSettingSourceEnabled("userSettings") && !skillsLocked ? loadSkillsFromSkillsDir(userSkillsDir, "userSettings") : Promise.resolve([]),
|
|
352731
352749
|
projectSettingsEnabled ? Promise.all(projectSkillsDirs.map((dir) => loadSkillsFromSkillsDir(dir, "projectSettings"))) : Promise.resolve([]),
|
|
352732
|
-
projectSettingsEnabled ? Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir(
|
|
352750
|
+
projectSettingsEnabled ? Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir(join96(dir, ".vivus", "skills"), "projectSettings"))) : Promise.resolve([]),
|
|
352733
352751
|
skillsLocked ? Promise.resolve([]) : loadSkillsFromCommandsDir(cwd2)
|
|
352734
352752
|
]);
|
|
352735
352753
|
const allSkillsWithPaths = [
|
|
@@ -353837,7 +353855,7 @@ var init_toolSearch = __esm(() => {
|
|
|
353837
353855
|
// src/services/vcr.ts
|
|
353838
353856
|
import { createHash as createHash20, randomUUID as randomUUID18 } from "crypto";
|
|
353839
353857
|
import { mkdir as mkdir23, readFile as readFile29, writeFile as writeFile25 } from "fs/promises";
|
|
353840
|
-
import { dirname as dirname42, join as
|
|
353858
|
+
import { dirname as dirname42, join as join97 } from "path";
|
|
353841
353859
|
function shouldUseVCR() {
|
|
353842
353860
|
if (false) {}
|
|
353843
353861
|
if (process.env.USER_TYPE === "ant" && isEnvTruthy(process.env.FORCE_VCR)) {
|
|
@@ -353850,7 +353868,7 @@ async function withFixture(input, fixtureName, f) {
|
|
|
353850
353868
|
return await f();
|
|
353851
353869
|
}
|
|
353852
353870
|
const hash2 = createHash20("sha1").update(jsonStringify(input)).digest("hex").slice(0, 12);
|
|
353853
|
-
const filename =
|
|
353871
|
+
const filename = join97(process.env.VIVUS_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${fixtureName}-${hash2}.json`);
|
|
353854
353872
|
try {
|
|
353855
353873
|
const cached3 = jsonParse(await readFile29(filename, { encoding: "utf8" }));
|
|
353856
353874
|
return cached3;
|
|
@@ -353884,7 +353902,7 @@ async function withVCR(messages, f) {
|
|
|
353884
353902
|
return true;
|
|
353885
353903
|
}));
|
|
353886
353904
|
const dehydratedInput = mapMessages(messagesForAPI.map((_) => _.message.content), dehydrateValue);
|
|
353887
|
-
const filename =
|
|
353905
|
+
const filename = join97(process.env.VIVUS_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${dehydratedInput.map((_) => createHash20("sha1").update(jsonStringify(_)).digest("hex").slice(0, 6)).join("-")}.json`);
|
|
353888
353906
|
try {
|
|
353889
353907
|
const cached3 = jsonParse(await readFile29(filename, { encoding: "utf8" }));
|
|
353890
353908
|
cached3.output.forEach(addCachedCostToTotalSessionCost);
|
|
@@ -354610,7 +354628,7 @@ var init_postCompactCleanup = __esm(() => {
|
|
|
354610
354628
|
|
|
354611
354629
|
// src/services/SessionMemory/prompts.ts
|
|
354612
354630
|
import { readFile as readFile30 } from "fs/promises";
|
|
354613
|
-
import { join as
|
|
354631
|
+
import { join as join98 } from "path";
|
|
354614
354632
|
function getDefaultUpdatePrompt() {
|
|
354615
354633
|
return `IMPORTANT: This message and these instructions are NOT part of the actual user conversation. Do NOT include any references to "note-taking", "session notes extraction", or these update instructions in the notes content.
|
|
354616
354634
|
|
|
@@ -354651,7 +354669,7 @@ You ONLY update the actual content that comes AFTER these two preserved lines. T
|
|
|
354651
354669
|
REMEMBER: Use the Edit tool in parallel and stop. Do not continue after the edits. Only include insights from the actual user conversation, never from these note-taking instructions. Do not delete or change section headers or italic _section descriptions_.`;
|
|
354652
354670
|
}
|
|
354653
354671
|
async function loadSessionMemoryTemplate() {
|
|
354654
|
-
const templatePath =
|
|
354672
|
+
const templatePath = join98(getVivusConfigHomeDir(), "session-memory", "config", "template.md");
|
|
354655
354673
|
try {
|
|
354656
354674
|
return await readFile30(templatePath, { encoding: "utf-8" });
|
|
354657
354675
|
} catch (e) {
|
|
@@ -354664,7 +354682,7 @@ async function loadSessionMemoryTemplate() {
|
|
|
354664
354682
|
}
|
|
354665
354683
|
}
|
|
354666
354684
|
async function loadSessionMemoryPrompt() {
|
|
354667
|
-
const promptPath =
|
|
354685
|
+
const promptPath = join98(getVivusConfigHomeDir(), "session-memory", "config", "prompt.md");
|
|
354668
354686
|
try {
|
|
354669
354687
|
return await readFile30(promptPath, { encoding: "utf-8" });
|
|
354670
354688
|
} catch (e) {
|
|
@@ -357940,7 +357958,7 @@ var init_consolidationPrompt = __esm(() => {
|
|
|
357940
357958
|
|
|
357941
357959
|
// src/utils/listSessionsImpl.ts
|
|
357942
357960
|
import { readdir as readdir19, stat as stat33 } from "fs/promises";
|
|
357943
|
-
import { basename as basename29, join as
|
|
357961
|
+
import { basename as basename29, join as join99 } from "path";
|
|
357944
357962
|
async function listCandidates(projectDir, doStat, projectPath) {
|
|
357945
357963
|
let names;
|
|
357946
357964
|
try {
|
|
@@ -357954,7 +357972,7 @@ async function listCandidates(projectDir, doStat, projectPath) {
|
|
|
357954
357972
|
const sessionId = validateUuid(name.slice(0, -6));
|
|
357955
357973
|
if (!sessionId)
|
|
357956
357974
|
return null;
|
|
357957
|
-
const filePath =
|
|
357975
|
+
const filePath = join99(projectDir, name);
|
|
357958
357976
|
if (!doStat)
|
|
357959
357977
|
return { sessionId, filePath, mtime: 0, projectPath };
|
|
357960
357978
|
try {
|
|
@@ -357973,9 +357991,9 @@ var init_listSessionsImpl = __esm(() => {
|
|
|
357973
357991
|
|
|
357974
357992
|
// src/services/autoDream/consolidationLock.ts
|
|
357975
357993
|
import { mkdir as mkdir24, readFile as readFile31, stat as stat34, unlink as unlink14, utimes, writeFile as writeFile26 } from "fs/promises";
|
|
357976
|
-
import { join as
|
|
357994
|
+
import { join as join100 } from "path";
|
|
357977
357995
|
function lockPath() {
|
|
357978
|
-
return
|
|
357996
|
+
return join100(getAutoMemPath(), LOCK_FILE);
|
|
357979
357997
|
}
|
|
357980
357998
|
async function readLastConsolidatedAt() {
|
|
357981
357999
|
try {
|
|
@@ -359427,7 +359445,7 @@ function getAnthropicEnvMetadata() {
|
|
|
359427
359445
|
function getBuildAgeMinutes() {
|
|
359428
359446
|
if (false)
|
|
359429
359447
|
;
|
|
359430
|
-
const buildTime = new Date("2026-06-23T19:
|
|
359448
|
+
const buildTime = new Date("2026-06-23T19:29:51.252Z").getTime();
|
|
359431
359449
|
if (isNaN(buildTime))
|
|
359432
359450
|
return;
|
|
359433
359451
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -360886,12 +360904,12 @@ var init_queryHelpers = __esm(() => {
|
|
|
360886
360904
|
import { randomUUID as randomUUID21 } from "crypto";
|
|
360887
360905
|
import { rm as rm9 } from "fs";
|
|
360888
360906
|
import { appendFile as appendFile5, copyFile as copyFile8, mkdir as mkdir25 } from "fs/promises";
|
|
360889
|
-
import { dirname as dirname43, isAbsolute as isAbsolute23, join as
|
|
360907
|
+
import { dirname as dirname43, isAbsolute as isAbsolute23, join as join101, relative as relative17 } from "path";
|
|
360890
360908
|
function safeRemoveOverlay(overlayPath) {
|
|
360891
360909
|
rm9(overlayPath, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 }, () => {});
|
|
360892
360910
|
}
|
|
360893
360911
|
function getOverlayPath(id) {
|
|
360894
|
-
return
|
|
360912
|
+
return join101(getVivusTempDir(), "speculation", String(process.pid), id);
|
|
360895
360913
|
}
|
|
360896
360914
|
function denySpeculation(message, reason) {
|
|
360897
360915
|
return {
|
|
@@ -360903,8 +360921,8 @@ function denySpeculation(message, reason) {
|
|
|
360903
360921
|
async function copyOverlayToMain(overlayPath, writtenPaths, cwd2) {
|
|
360904
360922
|
let allCopied = true;
|
|
360905
360923
|
for (const rel of writtenPaths) {
|
|
360906
|
-
const src =
|
|
360907
|
-
const dest =
|
|
360924
|
+
const src = join101(overlayPath, rel);
|
|
360925
|
+
const dest = join101(cwd2, rel);
|
|
360908
360926
|
try {
|
|
360909
360927
|
await mkdir25(dirname43(dest), { recursive: true });
|
|
360910
360928
|
await copyFile8(src, dest);
|
|
@@ -361154,17 +361172,17 @@ async function startSpeculation(suggestionText, context, setAppState, isPipeline
|
|
|
361154
361172
|
}
|
|
361155
361173
|
if (isWriteTool) {
|
|
361156
361174
|
if (!writtenPathsRef.current.has(rel)) {
|
|
361157
|
-
const overlayFile =
|
|
361175
|
+
const overlayFile = join101(overlayPath, rel);
|
|
361158
361176
|
await mkdir25(dirname43(overlayFile), { recursive: true });
|
|
361159
361177
|
try {
|
|
361160
|
-
await copyFile8(
|
|
361178
|
+
await copyFile8(join101(cwd2, rel), overlayFile);
|
|
361161
361179
|
} catch {}
|
|
361162
361180
|
writtenPathsRef.current.add(rel);
|
|
361163
361181
|
}
|
|
361164
|
-
input = { ...input, [pathKey2]:
|
|
361182
|
+
input = { ...input, [pathKey2]: join101(overlayPath, rel) };
|
|
361165
361183
|
} else {
|
|
361166
361184
|
if (writtenPathsRef.current.has(rel)) {
|
|
361167
|
-
input = { ...input, [pathKey2]:
|
|
361185
|
+
input = { ...input, [pathKey2]: join101(overlayPath, rel) };
|
|
361168
361186
|
}
|
|
361169
361187
|
}
|
|
361170
361188
|
logForDebugging(`[Speculation] ${isWriteTool ? "Write" : "Read"} ${filePath} -> ${input[pathKey2]}`);
|
|
@@ -363397,10 +363415,10 @@ var init_filesApi = __esm(() => {
|
|
|
363397
363415
|
// src/utils/tempfile.ts
|
|
363398
363416
|
import { createHash as createHash22, randomUUID as randomUUID23 } from "crypto";
|
|
363399
363417
|
import { tmpdir as tmpdir7 } from "os";
|
|
363400
|
-
import { join as
|
|
363418
|
+
import { join as join103 } from "path";
|
|
363401
363419
|
function generateTempFilePath(prefix = "vivus-prompt", extension2 = ".md", options2) {
|
|
363402
363420
|
const id = options2?.contentHash ? createHash22("sha256").update(options2.contentHash).digest("hex").slice(0, 16) : randomUUID23();
|
|
363403
|
-
return
|
|
363421
|
+
return join103(tmpdir7(), `${prefix}-${id}${extension2}`);
|
|
363404
363422
|
}
|
|
363405
363423
|
var init_tempfile = () => {};
|
|
363406
363424
|
|
|
@@ -384391,14 +384409,14 @@ var require_turndown_cjs = __commonJS((exports, module) => {
|
|
|
384391
384409
|
} else if (node.nodeType === 1) {
|
|
384392
384410
|
replacement = replacementForNode.call(self2, node);
|
|
384393
384411
|
}
|
|
384394
|
-
return
|
|
384412
|
+
return join104(output, replacement);
|
|
384395
384413
|
}, "");
|
|
384396
384414
|
}
|
|
384397
384415
|
function postProcess(output) {
|
|
384398
384416
|
var self2 = this;
|
|
384399
384417
|
this.rules.forEach(function(rule) {
|
|
384400
384418
|
if (typeof rule.append === "function") {
|
|
384401
|
-
output =
|
|
384419
|
+
output = join104(output, rule.append(self2.options));
|
|
384402
384420
|
}
|
|
384403
384421
|
});
|
|
384404
384422
|
return output.replace(/^[\t\r\n]+/, "").replace(/[\t\r\n\s]+$/, "");
|
|
@@ -384411,7 +384429,7 @@ var require_turndown_cjs = __commonJS((exports, module) => {
|
|
|
384411
384429
|
content = content.trim();
|
|
384412
384430
|
return whitespace.leading + rule.replacement(content, node, this.options) + whitespace.trailing;
|
|
384413
384431
|
}
|
|
384414
|
-
function
|
|
384432
|
+
function join104(output, replacement) {
|
|
384415
384433
|
var s1 = trimTrailingNewlines(output);
|
|
384416
384434
|
var s2 = trimLeadingNewlines(replacement);
|
|
384417
384435
|
var nls = Math.max(output.length - s1.length, replacement.length - s2.length);
|
|
@@ -391844,9 +391862,9 @@ var init_TeamDeleteTool = __esm(() => {
|
|
|
391844
391862
|
|
|
391845
391863
|
// src/utils/concurrentSessions.ts
|
|
391846
391864
|
import { chmod as chmod9, mkdir as mkdir27, readdir as readdir20, readFile as readFile33, unlink as unlink16, writeFile as writeFile29 } from "fs/promises";
|
|
391847
|
-
import { join as
|
|
391865
|
+
import { join as join104 } from "path";
|
|
391848
391866
|
function getSessionsDir() {
|
|
391849
|
-
return
|
|
391867
|
+
return join104(getVivusConfigHomeDir(), "sessions");
|
|
391850
391868
|
}
|
|
391851
391869
|
function envSessionKind() {
|
|
391852
391870
|
if (false) {}
|
|
@@ -391857,7 +391875,7 @@ async function registerSession() {
|
|
|
391857
391875
|
return false;
|
|
391858
391876
|
const kind = envSessionKind() ?? "interactive";
|
|
391859
391877
|
const dir = getSessionsDir();
|
|
391860
|
-
const pidFile =
|
|
391878
|
+
const pidFile = join104(dir, `${process.pid}.json`);
|
|
391861
391879
|
registerCleanup(async () => {
|
|
391862
391880
|
try {
|
|
391863
391881
|
await unlink16(pidFile);
|
|
@@ -391886,7 +391904,7 @@ async function registerSession() {
|
|
|
391886
391904
|
}
|
|
391887
391905
|
}
|
|
391888
391906
|
async function updatePidFile(patch) {
|
|
391889
|
-
const pidFile =
|
|
391907
|
+
const pidFile = join104(getSessionsDir(), `${process.pid}.json`);
|
|
391890
391908
|
try {
|
|
391891
391909
|
const data = jsonParse(await readFile33(pidFile, "utf8"));
|
|
391892
391910
|
await writeFile29(pidFile, jsonStringify({ ...data, ...patch }));
|
|
@@ -391925,7 +391943,7 @@ async function countConcurrentSessions() {
|
|
|
391925
391943
|
if (isProcessRunning(pid)) {
|
|
391926
391944
|
count4++;
|
|
391927
391945
|
} else if (getPlatform() !== "wsl") {
|
|
391928
|
-
unlink16(
|
|
391946
|
+
unlink16(join104(dir, file2)).catch(() => {});
|
|
391929
391947
|
}
|
|
391930
391948
|
}
|
|
391931
391949
|
return count4;
|
|
@@ -393528,7 +393546,7 @@ var init_permissionSetup = __esm(() => {
|
|
|
393528
393546
|
import { statSync as statSync6 } from "fs";
|
|
393529
393547
|
import { lstat as lstat5, readdir as readdir21, readFile as readFile34, realpath as realpath11, stat as stat37 } from "fs/promises";
|
|
393530
393548
|
import { homedir as homedir28 } from "os";
|
|
393531
|
-
import { dirname as dirname45, join as
|
|
393549
|
+
import { dirname as dirname45, join as join105, resolve as resolve35, sep as sep24 } from "path";
|
|
393532
393550
|
function extractDescriptionFromMarkdown(content, defaultDescription = "Custom item") {
|
|
393533
393551
|
const lines = content.split(`
|
|
393534
393552
|
`);
|
|
@@ -393618,7 +393636,7 @@ function getProjectDirsUpToHome(subdir, cwd2) {
|
|
|
393618
393636
|
if (normalizePathForComparison(current) === normalizePathForComparison(home)) {
|
|
393619
393637
|
break;
|
|
393620
393638
|
}
|
|
393621
|
-
const vivusSubdir =
|
|
393639
|
+
const vivusSubdir = join105(current, ".vivus", subdir);
|
|
393622
393640
|
try {
|
|
393623
393641
|
statSync6(vivusSubdir);
|
|
393624
393642
|
dirs.push(vivusSubdir);
|
|
@@ -393665,7 +393683,7 @@ async function findMarkdownFilesNative(dir, signal) {
|
|
|
393665
393683
|
if (signal.aborted) {
|
|
393666
393684
|
break;
|
|
393667
393685
|
}
|
|
393668
|
-
const fullPath =
|
|
393686
|
+
const fullPath = join105(currentDir, entry.name);
|
|
393669
393687
|
try {
|
|
393670
393688
|
if (entry.isSymbolicLink()) {
|
|
393671
393689
|
try {
|
|
@@ -393751,16 +393769,16 @@ var init_markdownConfigLoader = __esm(() => {
|
|
|
393751
393769
|
];
|
|
393752
393770
|
loadMarkdownFilesForSubdir = memoize_default(async function(subdir, cwd2) {
|
|
393753
393771
|
const searchStartTime = Date.now();
|
|
393754
|
-
const userDir =
|
|
393755
|
-
const managedDir =
|
|
393772
|
+
const userDir = join105(getVivusConfigHomeDir(), subdir);
|
|
393773
|
+
const managedDir = join105(getManagedFilePath(), ".vivus", subdir);
|
|
393756
393774
|
const projectDirs = getProjectDirsUpToHome(subdir, cwd2);
|
|
393757
393775
|
const gitRoot = findGitRoot(cwd2);
|
|
393758
393776
|
const canonicalRoot = findCanonicalGitRoot(cwd2);
|
|
393759
393777
|
if (gitRoot && canonicalRoot && canonicalRoot !== gitRoot) {
|
|
393760
|
-
const worktreeSubdir = normalizePathForComparison(
|
|
393778
|
+
const worktreeSubdir = normalizePathForComparison(join105(gitRoot, ".vivus", subdir));
|
|
393761
393779
|
const worktreeHasSubdir = projectDirs.some((dir) => normalizePathForComparison(dir) === worktreeSubdir);
|
|
393762
393780
|
if (!worktreeHasSubdir) {
|
|
393763
|
-
const mainVivusSubdir =
|
|
393781
|
+
const mainVivusSubdir = join105(canonicalRoot, ".vivus", subdir);
|
|
393764
393782
|
if (!projectDirs.includes(mainVivusSubdir)) {
|
|
393765
393783
|
projectDirs.push(mainVivusSubdir);
|
|
393766
393784
|
}
|
|
@@ -401072,7 +401090,7 @@ import {
|
|
|
401072
401090
|
symlink as symlink5,
|
|
401073
401091
|
utimes as utimes2
|
|
401074
401092
|
} from "fs/promises";
|
|
401075
|
-
import { basename as basename33, dirname as dirname46, join as
|
|
401093
|
+
import { basename as basename33, dirname as dirname46, join as join106 } from "path";
|
|
401076
401094
|
function validateWorktreeSlug(slug) {
|
|
401077
401095
|
if (slug.length > MAX_WORKTREE_SLUG_LENGTH) {
|
|
401078
401096
|
throw new Error(`Invalid worktree name: must be ${MAX_WORKTREE_SLUG_LENGTH} characters or fewer (got ${slug.length})`);
|
|
@@ -401095,8 +401113,8 @@ async function symlinkDirectories(repoRootPath, worktreePath, dirsToSymlink) {
|
|
|
401095
401113
|
logForDebugging(`Skipping symlink for "${dir}": path traversal detected`, { level: "warn" });
|
|
401096
401114
|
continue;
|
|
401097
401115
|
}
|
|
401098
|
-
const sourcePath =
|
|
401099
|
-
const destPath =
|
|
401116
|
+
const sourcePath = join106(repoRootPath, dir);
|
|
401117
|
+
const destPath = join106(worktreePath, dir);
|
|
401100
401118
|
try {
|
|
401101
401119
|
await symlink5(sourcePath, destPath, "dir");
|
|
401102
401120
|
logForDebugging(`Symlinked ${dir} from main repository to worktree to avoid disk bloat`);
|
|
@@ -401120,7 +401138,7 @@ function generateTmuxSessionName(repoPath, branch) {
|
|
|
401120
401138
|
return combined.replace(/[/.]/g, "_");
|
|
401121
401139
|
}
|
|
401122
401140
|
function worktreesDir(repoRoot) {
|
|
401123
|
-
return
|
|
401141
|
+
return join106(repoRoot, ".vivus", "worktrees");
|
|
401124
401142
|
}
|
|
401125
401143
|
function flattenSlug(slug) {
|
|
401126
401144
|
return slug.replaceAll("/", "+");
|
|
@@ -401129,7 +401147,7 @@ function worktreeBranchName(slug) {
|
|
|
401129
401147
|
return `worktree-${flattenSlug(slug)}`;
|
|
401130
401148
|
}
|
|
401131
401149
|
function worktreePathFor(repoRoot, slug) {
|
|
401132
|
-
return
|
|
401150
|
+
return join106(worktreesDir(repoRoot), flattenSlug(slug));
|
|
401133
401151
|
}
|
|
401134
401152
|
async function getOrCreateWorktree(repoRoot, slug, options2) {
|
|
401135
401153
|
const worktreePath = worktreePathFor(repoRoot, slug);
|
|
@@ -401210,7 +401228,7 @@ async function getOrCreateWorktree(repoRoot, slug, options2) {
|
|
|
401210
401228
|
async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
|
|
401211
401229
|
let includeContent;
|
|
401212
401230
|
try {
|
|
401213
|
-
includeContent = await readFile35(
|
|
401231
|
+
includeContent = await readFile35(join106(repoRoot, ".worktreeinclude"), "utf-8");
|
|
401214
401232
|
} catch {
|
|
401215
401233
|
return [];
|
|
401216
401234
|
}
|
|
@@ -401265,8 +401283,8 @@ async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
|
|
|
401265
401283
|
}
|
|
401266
401284
|
const copied = [];
|
|
401267
401285
|
for (const relativePath of files) {
|
|
401268
|
-
const srcPath =
|
|
401269
|
-
const destPath =
|
|
401286
|
+
const srcPath = join106(repoRoot, relativePath);
|
|
401287
|
+
const destPath = join106(worktreePath, relativePath);
|
|
401270
401288
|
try {
|
|
401271
401289
|
await mkdir28(dirname46(destPath), { recursive: true });
|
|
401272
401290
|
await copyFile9(srcPath, destPath);
|
|
@@ -401282,9 +401300,9 @@ async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
|
|
|
401282
401300
|
}
|
|
401283
401301
|
async function performPostCreationSetup(repoRoot, worktreePath) {
|
|
401284
401302
|
const localSettingsRelativePath = getRelativeSettingsFilePathForSource("localSettings");
|
|
401285
|
-
const sourceSettingsLocal =
|
|
401303
|
+
const sourceSettingsLocal = join106(repoRoot, localSettingsRelativePath);
|
|
401286
401304
|
try {
|
|
401287
|
-
const destSettingsLocal =
|
|
401305
|
+
const destSettingsLocal = join106(worktreePath, localSettingsRelativePath);
|
|
401288
401306
|
await mkdirRecursive(dirname46(destSettingsLocal));
|
|
401289
401307
|
await copyFile9(sourceSettingsLocal, destSettingsLocal);
|
|
401290
401308
|
logForDebugging(`Copied settings.local.json to worktree: ${destSettingsLocal}`);
|
|
@@ -401294,8 +401312,8 @@ async function performPostCreationSetup(repoRoot, worktreePath) {
|
|
|
401294
401312
|
logForDebugging(`Failed to copy settings.local.json: ${e.message}`, { level: "warn" });
|
|
401295
401313
|
}
|
|
401296
401314
|
}
|
|
401297
|
-
const huskyPath =
|
|
401298
|
-
const gitHooksPath =
|
|
401315
|
+
const huskyPath = join106(repoRoot, ".husky");
|
|
401316
|
+
const gitHooksPath = join106(repoRoot, ".git", "hooks");
|
|
401299
401317
|
let hooksPath = null;
|
|
401300
401318
|
for (const candidatePath of [huskyPath, gitHooksPath]) {
|
|
401301
401319
|
try {
|
|
@@ -401570,7 +401588,7 @@ async function cleanupStaleAgentWorktrees(cutoffDate) {
|
|
|
401570
401588
|
if (!EPHEMERAL_WORKTREE_PATTERNS.some((p) => p.test(slug))) {
|
|
401571
401589
|
continue;
|
|
401572
401590
|
}
|
|
401573
|
-
const worktreePath =
|
|
401591
|
+
const worktreePath = join106(dir, slug);
|
|
401574
401592
|
if (currentPath === worktreePath) {
|
|
401575
401593
|
continue;
|
|
401576
401594
|
}
|
|
@@ -405781,7 +405799,7 @@ var init_permissions2 = __esm(() => {
|
|
|
405781
405799
|
// src/utils/permissions/filesystem.ts
|
|
405782
405800
|
import { randomBytes as randomBytes17 } from "crypto";
|
|
405783
405801
|
import { homedir as homedir29, tmpdir as tmpdir8 } from "os";
|
|
405784
|
-
import { join as
|
|
405802
|
+
import { join as join107, normalize as normalize14, posix as posix8, sep as sep25 } from "path";
|
|
405785
405803
|
function normalizeCaseForComparison2(path19) {
|
|
405786
405804
|
return path19.toLowerCase();
|
|
405787
405805
|
}
|
|
@@ -405790,11 +405808,11 @@ function getVivusSkillScope(filePath) {
|
|
|
405790
405808
|
const absolutePathLower = normalizeCaseForComparison2(absolutePath);
|
|
405791
405809
|
const bases = [
|
|
405792
405810
|
{
|
|
405793
|
-
dir: expandPath(
|
|
405811
|
+
dir: expandPath(join107(getOriginalCwd(), ".vivus", "skills")),
|
|
405794
405812
|
prefix: "/.vivus/skills/"
|
|
405795
405813
|
},
|
|
405796
405814
|
{
|
|
405797
|
-
dir: expandPath(
|
|
405815
|
+
dir: expandPath(join107(homedir29(), ".vivus", "skills")),
|
|
405798
405816
|
prefix: "~/.vivus/skills/"
|
|
405799
405817
|
}
|
|
405800
405818
|
];
|
|
@@ -405849,21 +405867,21 @@ function isVivusConfigFilePath(filePath) {
|
|
|
405849
405867
|
if (isVivusSettingsPath(filePath)) {
|
|
405850
405868
|
return true;
|
|
405851
405869
|
}
|
|
405852
|
-
const commandsDir =
|
|
405853
|
-
const agentsDir =
|
|
405854
|
-
const skillsDir =
|
|
405870
|
+
const commandsDir = join107(getOriginalCwd(), ".vivus", "commands");
|
|
405871
|
+
const agentsDir = join107(getOriginalCwd(), ".vivus", "agents");
|
|
405872
|
+
const skillsDir = join107(getOriginalCwd(), ".vivus", "skills");
|
|
405855
405873
|
return pathInWorkingPath(filePath, commandsDir) || pathInWorkingPath(filePath, agentsDir) || pathInWorkingPath(filePath, skillsDir);
|
|
405856
405874
|
}
|
|
405857
405875
|
function isSessionPlanFile(absolutePath) {
|
|
405858
|
-
const expectedPrefix =
|
|
405876
|
+
const expectedPrefix = join107(getPlansDirectory(), getPlanSlug());
|
|
405859
405877
|
const normalizedPath = normalize14(absolutePath);
|
|
405860
405878
|
return normalizedPath.startsWith(expectedPrefix) && normalizedPath.endsWith(".md");
|
|
405861
405879
|
}
|
|
405862
405880
|
function getSessionMemoryDir() {
|
|
405863
|
-
return
|
|
405881
|
+
return join107(getProjectDir2(getCwd()), getSessionId(), "session-memory") + sep25;
|
|
405864
405882
|
}
|
|
405865
405883
|
function getSessionMemoryPath() {
|
|
405866
|
-
return
|
|
405884
|
+
return join107(getSessionMemoryDir(), "summary.md");
|
|
405867
405885
|
}
|
|
405868
405886
|
function isSessionMemoryPath(absolutePath) {
|
|
405869
405887
|
const normalizedPath = normalize14(absolutePath);
|
|
@@ -405885,10 +405903,10 @@ function getVivusTempDirName() {
|
|
|
405885
405903
|
return `vivus-${uid}`;
|
|
405886
405904
|
}
|
|
405887
405905
|
function getProjectTempDir() {
|
|
405888
|
-
return
|
|
405906
|
+
return join107(getVivusTempDir(), sanitizePath2(getOriginalCwd())) + sep25;
|
|
405889
405907
|
}
|
|
405890
405908
|
function getScratchpadDir() {
|
|
405891
|
-
return
|
|
405909
|
+
return join107(getProjectTempDir(), getSessionId(), "scratchpad");
|
|
405892
405910
|
}
|
|
405893
405911
|
async function ensureScratchpadDir() {
|
|
405894
405912
|
if (!isScratchpadEnabled()) {
|
|
@@ -406466,7 +406484,7 @@ function checkEditableInternalPath(absolutePath, input) {
|
|
|
406466
406484
|
}
|
|
406467
406485
|
};
|
|
406468
406486
|
}
|
|
406469
|
-
if (normalizeCaseForComparison2(normalizedPath) === normalizeCaseForComparison2(
|
|
406487
|
+
if (normalizeCaseForComparison2(normalizedPath) === normalizeCaseForComparison2(join107(getOriginalCwd(), ".vivus", "launch.json"))) {
|
|
406470
406488
|
return {
|
|
406471
406489
|
behavior: "allow",
|
|
406472
406490
|
updatedInput: input,
|
|
@@ -406563,7 +406581,7 @@ function checkReadableInternalPath(absolutePath, input) {
|
|
|
406563
406581
|
}
|
|
406564
406582
|
};
|
|
406565
406583
|
}
|
|
406566
|
-
const tasksDir =
|
|
406584
|
+
const tasksDir = join107(getVivusConfigHomeDir(), "tasks") + sep25;
|
|
406567
406585
|
if (normalizedPath === tasksDir.slice(0, -1) || normalizedPath.startsWith(tasksDir)) {
|
|
406568
406586
|
return {
|
|
406569
406587
|
behavior: "allow",
|
|
@@ -406574,7 +406592,7 @@ function checkReadableInternalPath(absolutePath, input) {
|
|
|
406574
406592
|
}
|
|
406575
406593
|
};
|
|
406576
406594
|
}
|
|
406577
|
-
const teamsReadDir =
|
|
406595
|
+
const teamsReadDir = join107(getVivusConfigHomeDir(), "teams") + sep25;
|
|
406578
406596
|
if (normalizedPath === teamsReadDir.slice(0, -1) || normalizedPath.startsWith(teamsReadDir)) {
|
|
406579
406597
|
return {
|
|
406580
406598
|
behavior: "allow",
|
|
@@ -406647,11 +406665,11 @@ var init_filesystem = __esm(() => {
|
|
|
406647
406665
|
try {
|
|
406648
406666
|
resolvedBaseTmpDir = fs9.realpathSync(baseTmpDir);
|
|
406649
406667
|
} catch {}
|
|
406650
|
-
return
|
|
406668
|
+
return join107(resolvedBaseTmpDir, getVivusTempDirName()) + sep25;
|
|
406651
406669
|
});
|
|
406652
406670
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
406653
406671
|
const nonce = randomBytes17(16).toString("hex");
|
|
406654
|
-
return
|
|
406672
|
+
return join107(getVivusTempDir(), "bundled-skills", "1.1.31+c38c44f", nonce);
|
|
406655
406673
|
});
|
|
406656
406674
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
406657
406675
|
});
|
|
@@ -406725,7 +406743,7 @@ var init_validation3 = __esm(() => {
|
|
|
406725
406743
|
});
|
|
406726
406744
|
|
|
406727
406745
|
// src/utils/suggestions/directoryCompletion.ts
|
|
406728
|
-
import { basename as basename34, dirname as dirname48, join as
|
|
406746
|
+
import { basename as basename34, dirname as dirname48, join as join108, sep as sep26 } from "path";
|
|
406729
406747
|
function parsePartialPath(partialPath, basePath) {
|
|
406730
406748
|
if (!partialPath) {
|
|
406731
406749
|
const directory2 = basePath || getCwd();
|
|
@@ -406749,7 +406767,7 @@ async function scanDirectory(dirPath) {
|
|
|
406749
406767
|
const entries = await fs9.readdir(dirPath);
|
|
406750
406768
|
const directories = entries.filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => ({
|
|
406751
406769
|
name: entry.name,
|
|
406752
|
-
path:
|
|
406770
|
+
path: join108(dirPath, entry.name),
|
|
406753
406771
|
type: "directory"
|
|
406754
406772
|
})).slice(0, 100);
|
|
406755
406773
|
directoryCache.set(dirPath, directories);
|
|
@@ -406786,7 +406804,7 @@ async function scanDirectoryForPaths(dirPath, includeHidden = false) {
|
|
|
406786
406804
|
const entries = await fs9.readdir(dirPath);
|
|
406787
406805
|
const paths2 = entries.filter((entry) => includeHidden || !entry.name.startsWith(".")).map((entry) => ({
|
|
406788
406806
|
name: entry.name,
|
|
406789
|
-
path:
|
|
406807
|
+
path: join108(dirPath, entry.name),
|
|
406790
406808
|
type: entry.isDirectory() ? "directory" : "file"
|
|
406791
406809
|
})).sort((a2, b) => {
|
|
406792
406810
|
if (a2.type === "directory" && b.type !== "directory")
|
|
@@ -408411,7 +408429,7 @@ function Feedback({
|
|
|
408411
408429
|
platform: env3.platform,
|
|
408412
408430
|
gitRepo: envInfo.isGit,
|
|
408413
408431
|
terminal: env3.terminal,
|
|
408414
|
-
version: "1.1.
|
|
408432
|
+
version: "1.1.31+c38c44f",
|
|
408415
408433
|
transcript: normalizeMessagesForAPI(messages),
|
|
408416
408434
|
errors: sanitizedErrors,
|
|
408417
408435
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -408603,7 +408621,7 @@ function Feedback({
|
|
|
408603
408621
|
", ",
|
|
408604
408622
|
env3.terminal,
|
|
408605
408623
|
", v",
|
|
408606
|
-
"1.1.
|
|
408624
|
+
"1.1.31+c38c44f"
|
|
408607
408625
|
]
|
|
408608
408626
|
}, undefined, true, undefined, this)
|
|
408609
408627
|
]
|
|
@@ -408709,7 +408727,7 @@ ${sanitizedDescription}
|
|
|
408709
408727
|
` + `**Environment Info**
|
|
408710
408728
|
` + `- Platform: ${env3.platform}
|
|
408711
408729
|
` + `- Terminal: ${env3.terminal}
|
|
408712
|
-
` + `- Version: ${"1.1.
|
|
408730
|
+
` + `- Version: ${"1.1.31+c38c44f"}
|
|
408713
408731
|
` + `- Feedback ID: ${feedbackId}
|
|
408714
408732
|
` + `
|
|
408715
408733
|
**Errors**
|
|
@@ -409621,7 +409639,7 @@ var init_fileSuggestions = __esm(() => {
|
|
|
409621
409639
|
});
|
|
409622
409640
|
|
|
409623
409641
|
// src/services/MagicDocs/prompts.ts
|
|
409624
|
-
import { join as
|
|
409642
|
+
import { join as join110 } from "path";
|
|
409625
409643
|
function getUpdatePromptTemplate() {
|
|
409626
409644
|
return `IMPORTANT: This message and these instructions are NOT part of the actual user conversation. Do NOT include any references to "documentation updates", "magic docs", or these update instructions in the document content.
|
|
409627
409645
|
|
|
@@ -409676,7 +409694,7 @@ REMEMBER: Only update if there is substantial new information. The Magic Doc hea
|
|
|
409676
409694
|
}
|
|
409677
409695
|
async function loadMagicDocsPrompt() {
|
|
409678
409696
|
const fs9 = getFsImplementation();
|
|
409679
|
-
const promptPath =
|
|
409697
|
+
const promptPath = join110(getVivusConfigHomeDir(), "magic-docs", "prompt.md");
|
|
409680
409698
|
try {
|
|
409681
409699
|
return await fs9.readFile(promptPath, { encoding: "utf-8" });
|
|
409682
409700
|
} catch {
|
|
@@ -410265,7 +410283,7 @@ __export(exports_copy, {
|
|
|
410265
410283
|
});
|
|
410266
410284
|
import { mkdir as mkdir29, writeFile as writeFile30 } from "fs/promises";
|
|
410267
410285
|
import { tmpdir as tmpdir9 } from "os";
|
|
410268
|
-
import { join as
|
|
410286
|
+
import { join as join111 } from "path";
|
|
410269
410287
|
function extractCodeBlocks(markdown) {
|
|
410270
410288
|
const tokens = marked.lexer(stripPromptXMLTags(markdown));
|
|
410271
410289
|
const blocks = [];
|
|
@@ -410307,7 +410325,7 @@ function fileExtension2(lang) {
|
|
|
410307
410325
|
return ".txt";
|
|
410308
410326
|
}
|
|
410309
410327
|
async function writeToFile(text2, filename) {
|
|
410310
|
-
const filePath =
|
|
410328
|
+
const filePath = join111(COPY_DIR, filename);
|
|
410311
410329
|
await mkdir29(COPY_DIR, {
|
|
410312
410330
|
recursive: true
|
|
410313
410331
|
});
|
|
@@ -410659,7 +410677,7 @@ var init_copy = __esm(() => {
|
|
|
410659
410677
|
import_compiler_runtime129 = __toESM(require_compiler_runtime(), 1);
|
|
410660
410678
|
import_react96 = __toESM(require_react(), 1);
|
|
410661
410679
|
jsx_dev_runtime165 = __toESM(require_jsx_dev_runtime(), 1);
|
|
410662
|
-
COPY_DIR =
|
|
410680
|
+
COPY_DIR = join111(tmpdir9(), "vivus");
|
|
410663
410681
|
});
|
|
410664
410682
|
|
|
410665
410683
|
// src/commands/copy/index.ts
|
|
@@ -410676,7 +410694,7 @@ var init_copy2 = __esm(() => {
|
|
|
410676
410694
|
|
|
410677
410695
|
// src/utils/desktopDeepLink.ts
|
|
410678
410696
|
import { readdir as readdir23 } from "fs/promises";
|
|
410679
|
-
import { join as
|
|
410697
|
+
import { join as join112 } from "path";
|
|
410680
410698
|
function isDevMode() {
|
|
410681
410699
|
if (true) {
|
|
410682
410700
|
return true;
|
|
@@ -410739,7 +410757,7 @@ async function getDesktopVersion() {
|
|
|
410739
410757
|
if (!localAppData) {
|
|
410740
410758
|
return null;
|
|
410741
410759
|
}
|
|
410742
|
-
const installDir =
|
|
410760
|
+
const installDir = join112(localAppData, "AnthropicVivus");
|
|
410743
410761
|
try {
|
|
410744
410762
|
const entries = await readdir23(installDir);
|
|
410745
410763
|
const versions2 = entries.filter((e) => e.startsWith("app-")).map((e) => e.slice(4)).filter((v) => import_semver7.coerce(v) !== null).sort((a2, b) => {
|
|
@@ -411841,7 +411859,7 @@ function buildPrimarySection() {
|
|
|
411841
411859
|
}, undefined, false, undefined, this);
|
|
411842
411860
|
return [{
|
|
411843
411861
|
label: "Version",
|
|
411844
|
-
value: "1.1.
|
|
411862
|
+
value: "1.1.31+c38c44f"
|
|
411845
411863
|
}, {
|
|
411846
411864
|
label: "Session name",
|
|
411847
411865
|
value: nameValue
|
|
@@ -415592,7 +415610,7 @@ function Config({
|
|
|
415592
415610
|
}
|
|
415593
415611
|
}, undefined, false, undefined, this)
|
|
415594
415612
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime178.jsxDEV(ChannelDowngradeDialog, {
|
|
415595
|
-
currentVersion: "1.1.
|
|
415613
|
+
currentVersion: "1.1.31+c38c44f",
|
|
415596
415614
|
onChoice: (choice) => {
|
|
415597
415615
|
setShowSubmenu(null);
|
|
415598
415616
|
setTabsHidden(false);
|
|
@@ -415604,7 +415622,7 @@ function Config({
|
|
|
415604
415622
|
autoUpdatesChannel: "stable"
|
|
415605
415623
|
};
|
|
415606
415624
|
if (choice === "stay") {
|
|
415607
|
-
newSettings.minimumVersion = "1.1.
|
|
415625
|
+
newSettings.minimumVersion = "1.1.31+c38c44f";
|
|
415608
415626
|
}
|
|
415609
415627
|
updateSettingsForSource("userSettings", newSettings);
|
|
415610
415628
|
setSettingsData((prev_27) => ({
|
|
@@ -421010,7 +421028,7 @@ var exports_Doctor = {};
|
|
|
421010
421028
|
__export(exports_Doctor, {
|
|
421011
421029
|
Doctor: () => Doctor
|
|
421012
421030
|
});
|
|
421013
|
-
import { join as
|
|
421031
|
+
import { join as join113 } from "path";
|
|
421014
421032
|
function DistTagsDisplay(t0) {
|
|
421015
421033
|
const $2 = import_compiler_runtime158.c(8);
|
|
421016
421034
|
const {
|
|
@@ -421140,8 +421158,8 @@ function Doctor(t0) {
|
|
|
421140
421158
|
t5 = () => {
|
|
421141
421159
|
getDoctorDiagnostic().then(setDiagnostic);
|
|
421142
421160
|
(async () => {
|
|
421143
|
-
const userAgentsDir =
|
|
421144
|
-
const projectAgentsDir =
|
|
421161
|
+
const userAgentsDir = join113(getVivusConfigHomeDir(), "agents");
|
|
421162
|
+
const projectAgentsDir = join113(getOriginalCwd(), ".vivus", "agents");
|
|
421145
421163
|
const {
|
|
421146
421164
|
activeAgents,
|
|
421147
421165
|
allAgents,
|
|
@@ -421164,7 +421182,7 @@ function Doctor(t0) {
|
|
|
421164
421182
|
}, async () => toolPermissionContext);
|
|
421165
421183
|
setContextWarnings(warnings);
|
|
421166
421184
|
if (isPidBasedLockingEnabled()) {
|
|
421167
|
-
const locksDir =
|
|
421185
|
+
const locksDir = join113(getXDGStateHome(), "vivus", "locks");
|
|
421168
421186
|
const staleLocksCleaned = cleanupStaleLocks(locksDir);
|
|
421169
421187
|
const locks = getAllLockInfo(locksDir);
|
|
421170
421188
|
setVersionLockInfo({
|
|
@@ -422041,7 +422059,7 @@ var init_versions3 = __esm(() => {
|
|
|
422041
422059
|
|
|
422042
422060
|
// src/components/memory/MemoryFileSelector.tsx
|
|
422043
422061
|
import { mkdir as mkdir30 } from "fs/promises";
|
|
422044
|
-
import { join as
|
|
422062
|
+
import { join as join114 } from "path";
|
|
422045
422063
|
function MemoryFileSelector(t0) {
|
|
422046
422064
|
const $2 = import_compiler_runtime159.c(58);
|
|
422047
422065
|
const {
|
|
@@ -422049,8 +422067,8 @@ function MemoryFileSelector(t0) {
|
|
|
422049
422067
|
onCancel
|
|
422050
422068
|
} = t0;
|
|
422051
422069
|
const existingMemoryFiles = import_react115.use(getMemoryFiles());
|
|
422052
|
-
const userMemoryPath =
|
|
422053
|
-
const projectMemoryPath =
|
|
422070
|
+
const userMemoryPath = join114(getVivusConfigHomeDir(), "VIVUS.md");
|
|
422071
|
+
const projectMemoryPath = join114(getOriginalCwd(), "VIVUS.md");
|
|
422054
422072
|
const hasUserMemory = existingMemoryFiles.some((f) => f.path === userMemoryPath);
|
|
422055
422073
|
const hasProjectMemory = existingMemoryFiles.some((f_0) => f_0.path === projectMemoryPath);
|
|
422056
422074
|
const allMemoryFiles = [...existingMemoryFiles.filter(_temp81).map(_temp230), ...hasUserMemory ? [] : [{
|
|
@@ -423690,7 +423708,7 @@ function HelpV2(t0) {
|
|
|
423690
423708
|
let t6;
|
|
423691
423709
|
if ($2[31] !== tabs) {
|
|
423692
423710
|
t6 = /* @__PURE__ */ jsx_dev_runtime205.jsxDEV(Tabs, {
|
|
423693
|
-
title: `Vivus v${"1.1.
|
|
423711
|
+
title: `Vivus v${"1.1.31+c38c44f"}`,
|
|
423694
423712
|
color: "professionalBlue",
|
|
423695
423713
|
defaultTab: "general",
|
|
423696
423714
|
children: tabs
|
|
@@ -432765,7 +432783,7 @@ __export(exports_pluginStartupCheck, {
|
|
|
432765
432783
|
findMissingPlugins: () => findMissingPlugins,
|
|
432766
432784
|
checkEnabledPlugins: () => checkEnabledPlugins
|
|
432767
432785
|
});
|
|
432768
|
-
import { join as
|
|
432786
|
+
import { join as join115 } from "path";
|
|
432769
432787
|
async function checkEnabledPlugins() {
|
|
432770
432788
|
const settings = getInitialSettings();
|
|
432771
432789
|
const enabledPlugins = [];
|
|
@@ -432900,7 +432918,7 @@ async function installSelectedPlugins(pluginsToInstall, onProgress, scope = "use
|
|
|
432900
432918
|
} else {
|
|
432901
432919
|
registerPluginInstallation({
|
|
432902
432920
|
pluginId,
|
|
432903
|
-
installPath:
|
|
432921
|
+
installPath: join115(marketplaceInstallLocation, entry.source),
|
|
432904
432922
|
version: entry.version
|
|
432905
432923
|
}, scope, projectPath);
|
|
432906
432924
|
}
|
|
@@ -433220,9 +433238,9 @@ var init_AddMarketplace = __esm(() => {
|
|
|
433220
433238
|
// src/utils/plugins/installCounts.ts
|
|
433221
433239
|
import { randomBytes as randomBytes18 } from "crypto";
|
|
433222
433240
|
import { readFile as readFile37, rename as rename7, unlink as unlink17, writeFile as writeFile33 } from "fs/promises";
|
|
433223
|
-
import { join as
|
|
433241
|
+
import { join as join116 } from "path";
|
|
433224
433242
|
function getInstallCountsCachePath() {
|
|
433225
|
-
return
|
|
433243
|
+
return join116(getPluginsDirectory(), INSTALL_COUNTS_CACHE_FILENAME);
|
|
433226
433244
|
}
|
|
433227
433245
|
async function loadInstallCountsCache() {
|
|
433228
433246
|
const cachePath = getInstallCountsCachePath();
|
|
@@ -435968,7 +435986,7 @@ var init_DiscoverPlugins = __esm(() => {
|
|
|
435968
435986
|
});
|
|
435969
435987
|
|
|
435970
435988
|
// src/services/plugins/pluginOperations.ts
|
|
435971
|
-
import { dirname as dirname51, join as
|
|
435989
|
+
import { dirname as dirname51, join as join117 } from "path";
|
|
435972
435990
|
function assertInstallableScope(scope) {
|
|
435973
435991
|
if (!VALID_INSTALLABLE_SCOPES.includes(scope)) {
|
|
435974
435992
|
throw new Error(`Invalid scope "${scope}". Must be one of: ${VALID_INSTALLABLE_SCOPES.join(", ")}`);
|
|
@@ -436446,7 +436464,7 @@ async function performPluginUpdate({
|
|
|
436446
436464
|
throw e;
|
|
436447
436465
|
}
|
|
436448
436466
|
const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname51(marketplaceInstallLocation);
|
|
436449
|
-
sourcePath =
|
|
436467
|
+
sourcePath = join117(marketplaceDir, entry.source);
|
|
436450
436468
|
try {
|
|
436451
436469
|
await fs9.stat(sourcePath);
|
|
436452
436470
|
} catch (e) {
|
|
@@ -436461,8 +436479,8 @@ async function performPluginUpdate({
|
|
|
436461
436479
|
throw e;
|
|
436462
436480
|
}
|
|
436463
436481
|
let pluginManifest;
|
|
436464
|
-
const manifestPath =
|
|
436465
|
-
const claudeManifestPath =
|
|
436482
|
+
const manifestPath = join117(sourcePath, ".vivus-plugin", "plugin.json");
|
|
436483
|
+
const claudeManifestPath = join117(sourcePath, ".claude-plugin", "plugin.json");
|
|
436466
436484
|
try {
|
|
436467
436485
|
pluginManifest = await loadPluginManifest(manifestPath, entry.name, entry.source);
|
|
436468
436486
|
} catch {
|
|
@@ -437686,9 +437704,9 @@ var init_ManageMarketplaces = __esm(() => {
|
|
|
437686
437704
|
// src/utils/plugins/pluginFlagging.ts
|
|
437687
437705
|
import { randomBytes as randomBytes19 } from "crypto";
|
|
437688
437706
|
import { readFile as readFile38, rename as rename8, unlink as unlink18, writeFile as writeFile34 } from "fs/promises";
|
|
437689
|
-
import { join as
|
|
437707
|
+
import { join as join118 } from "path";
|
|
437690
437708
|
function getFlaggedPluginsPath() {
|
|
437691
|
-
return
|
|
437709
|
+
return join118(getPluginsDirectory(), FLAGGED_PLUGINS_FILENAME);
|
|
437692
437710
|
}
|
|
437693
437711
|
function parsePluginsData(content) {
|
|
437694
437712
|
const parsed = jsonParse(content);
|
|
@@ -447796,9 +447814,9 @@ ${args ? "Additional user input: " + args : ""}
|
|
|
447796
447814
|
|
|
447797
447815
|
// src/utils/releaseNotes.ts
|
|
447798
447816
|
import { mkdir as mkdir33, readFile as readFile41, writeFile as writeFile35 } from "fs/promises";
|
|
447799
|
-
import { dirname as dirname53, join as
|
|
447817
|
+
import { dirname as dirname53, join as join121 } from "path";
|
|
447800
447818
|
function getChangelogCachePath() {
|
|
447801
|
-
return
|
|
447819
|
+
return join121(getVivusConfigHomeDir(), "cache", "changelog.md");
|
|
447802
447820
|
}
|
|
447803
447821
|
async function migrateChangelogFromConfig() {
|
|
447804
447822
|
const config4 = getGlobalConfig();
|
|
@@ -447916,7 +447934,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
447916
447934
|
return [];
|
|
447917
447935
|
}
|
|
447918
447936
|
}
|
|
447919
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.
|
|
447937
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.31+c38c44f") {
|
|
447920
447938
|
if (process.env.USER_TYPE === "ant") {
|
|
447921
447939
|
const changelog = "";
|
|
447922
447940
|
if (changelog) {
|
|
@@ -447943,7 +447961,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.29+07
|
|
|
447943
447961
|
releaseNotes
|
|
447944
447962
|
};
|
|
447945
447963
|
}
|
|
447946
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.
|
|
447964
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.31+c38c44f") {
|
|
447947
447965
|
if (process.env.USER_TYPE === "ant") {
|
|
447948
447966
|
const changelog = "";
|
|
447949
447967
|
if (changelog) {
|
|
@@ -449113,7 +449131,7 @@ function getRecentActivitySync() {
|
|
|
449113
449131
|
return cachedActivity;
|
|
449114
449132
|
}
|
|
449115
449133
|
function getLogoDisplayData() {
|
|
449116
|
-
const version2 = process.env.DEMO_VERSION ?? "1.1.
|
|
449134
|
+
const version2 = process.env.DEMO_VERSION ?? "1.1.31+c38c44f";
|
|
449117
449135
|
const serverUrl = getDirectConnectServerUrl();
|
|
449118
449136
|
const displayPath = process.env.DEMO_VERSION ? "/code/vivus" : getDisplayPath(getCwd());
|
|
449119
449137
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -450640,7 +450658,7 @@ function LogoV2() {
|
|
|
450640
450658
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
450641
450659
|
t2 = () => {
|
|
450642
450660
|
const currentConfig = getGlobalConfig();
|
|
450643
|
-
if (currentConfig.lastReleaseNotesSeen === "1.1.
|
|
450661
|
+
if (currentConfig.lastReleaseNotesSeen === "1.1.31+c38c44f") {
|
|
450644
450662
|
return;
|
|
450645
450663
|
}
|
|
450646
450664
|
saveGlobalConfig(_temp329);
|
|
@@ -451316,12 +451334,12 @@ function LogoV2() {
|
|
|
451316
451334
|
return t41;
|
|
451317
451335
|
}
|
|
451318
451336
|
function _temp329(current) {
|
|
451319
|
-
if (current.lastReleaseNotesSeen === "1.1.
|
|
451337
|
+
if (current.lastReleaseNotesSeen === "1.1.31+c38c44f") {
|
|
451320
451338
|
return current;
|
|
451321
451339
|
}
|
|
451322
451340
|
return {
|
|
451323
451341
|
...current,
|
|
451324
|
-
lastReleaseNotesSeen: "1.1.
|
|
451342
|
+
lastReleaseNotesSeen: "1.1.31+c38c44f"
|
|
451325
451343
|
};
|
|
451326
451344
|
}
|
|
451327
451345
|
function _temp245(s_0) {
|
|
@@ -464437,7 +464455,7 @@ __export(exports_thinkback, {
|
|
|
464437
464455
|
call: () => call40
|
|
464438
464456
|
});
|
|
464439
464457
|
import { readFile as readFile42 } from "fs/promises";
|
|
464440
|
-
import { join as
|
|
464458
|
+
import { join as join122 } from "path";
|
|
464441
464459
|
function getMarketplaceName() {
|
|
464442
464460
|
return OFFICIAL_MARKETPLACE_NAME;
|
|
464443
464461
|
}
|
|
@@ -464455,15 +464473,15 @@ async function getThinkbackSkillDir() {
|
|
|
464455
464473
|
if (!thinkbackPlugin) {
|
|
464456
464474
|
return null;
|
|
464457
464475
|
}
|
|
464458
|
-
const skillDir =
|
|
464476
|
+
const skillDir = join122(thinkbackPlugin.path, "skills", SKILL_NAME);
|
|
464459
464477
|
if (await pathExists(skillDir)) {
|
|
464460
464478
|
return skillDir;
|
|
464461
464479
|
}
|
|
464462
464480
|
return null;
|
|
464463
464481
|
}
|
|
464464
464482
|
async function playAnimation(skillDir) {
|
|
464465
|
-
const dataPath =
|
|
464466
|
-
const playerPath =
|
|
464483
|
+
const dataPath = join122(skillDir, "year_in_review.js");
|
|
464484
|
+
const playerPath = join122(skillDir, "player.js");
|
|
464467
464485
|
try {
|
|
464468
464486
|
await readFile42(dataPath);
|
|
464469
464487
|
} catch (e) {
|
|
@@ -464511,7 +464529,7 @@ async function playAnimation(skillDir) {
|
|
|
464511
464529
|
} catch {} finally {
|
|
464512
464530
|
inkInstance.exitAlternateScreen();
|
|
464513
464531
|
}
|
|
464514
|
-
const htmlPath =
|
|
464532
|
+
const htmlPath = join122(skillDir, "year_in_review.html");
|
|
464515
464533
|
if (await pathExists(htmlPath)) {
|
|
464516
464534
|
const platform5 = getPlatform();
|
|
464517
464535
|
const openCmd = platform5 === "macos" ? "open" : platform5 === "windows" ? "start" : "xdg-open";
|
|
@@ -464847,7 +464865,7 @@ function ThinkbackFlow(t0) {
|
|
|
464847
464865
|
if (!skillDir) {
|
|
464848
464866
|
return;
|
|
464849
464867
|
}
|
|
464850
|
-
const dataPath =
|
|
464868
|
+
const dataPath = join122(skillDir, "year_in_review.js");
|
|
464851
464869
|
pathExists(dataPath).then((exists) => {
|
|
464852
464870
|
logForDebugging(`Checking for ${dataPath}: ${exists ? "found" : "not found"}`);
|
|
464853
464871
|
setHasGenerated(exists);
|
|
@@ -465021,7 +465039,7 @@ var exports_thinkback_play = {};
|
|
|
465021
465039
|
__export(exports_thinkback_play, {
|
|
465022
465040
|
call: () => call41
|
|
465023
465041
|
});
|
|
465024
|
-
import { join as
|
|
465042
|
+
import { join as join123 } from "path";
|
|
465025
465043
|
function getPluginId2() {
|
|
465026
465044
|
const marketplaceName = process.env.USER_TYPE === "ant" ? INTERNAL_MARKETPLACE_NAME : OFFICIAL_MARKETPLACE_NAME;
|
|
465027
465045
|
return `thinkback@${marketplaceName}`;
|
|
@@ -465043,7 +465061,7 @@ async function call41() {
|
|
|
465043
465061
|
value: "Thinkback plugin installation path not found."
|
|
465044
465062
|
};
|
|
465045
465063
|
}
|
|
465046
|
-
const skillDir =
|
|
465064
|
+
const skillDir = join123(firstInstall.installPath, "skills", SKILL_NAME2);
|
|
465047
465065
|
const result = await playAnimation(skillDir);
|
|
465048
465066
|
return { type: "text", value: result.message };
|
|
465049
465067
|
}
|
|
@@ -471438,7 +471456,7 @@ var init_types12 = __esm(() => {
|
|
|
471438
471456
|
|
|
471439
471457
|
// src/components/agents/agentFileUtils.ts
|
|
471440
471458
|
import { mkdir as mkdir35, open as open13, unlink as unlink19 } from "fs/promises";
|
|
471441
|
-
import { join as
|
|
471459
|
+
import { join as join124 } from "path";
|
|
471442
471460
|
function formatAgentAsMarkdown(agentType, whenToUse, tools, systemPrompt, color3, model, memory2, effort) {
|
|
471443
471461
|
const escapedWhenToUse = whenToUse.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\n/g, "\\\\n");
|
|
471444
471462
|
const isAllTools = tools === undefined || tools.length === 1 && tools[0] === "*";
|
|
@@ -471465,26 +471483,26 @@ function getAgentDirectoryPath(location) {
|
|
|
471465
471483
|
case "flagSettings":
|
|
471466
471484
|
throw new Error(`Cannot get directory path for ${location} agents`);
|
|
471467
471485
|
case "userSettings":
|
|
471468
|
-
return
|
|
471486
|
+
return join124(getVivusConfigHomeDir(), AGENT_PATHS.AGENTS_DIR);
|
|
471469
471487
|
case "projectSettings":
|
|
471470
|
-
return
|
|
471488
|
+
return join124(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
|
|
471471
471489
|
case "policySettings":
|
|
471472
|
-
return
|
|
471490
|
+
return join124(getManagedFilePath(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
|
|
471473
471491
|
case "localSettings":
|
|
471474
|
-
return
|
|
471492
|
+
return join124(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
|
|
471475
471493
|
}
|
|
471476
471494
|
}
|
|
471477
471495
|
function getRelativeAgentDirectoryPath(location) {
|
|
471478
471496
|
switch (location) {
|
|
471479
471497
|
case "projectSettings":
|
|
471480
|
-
return
|
|
471498
|
+
return join124(".", AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
|
|
471481
471499
|
default:
|
|
471482
471500
|
return getAgentDirectoryPath(location);
|
|
471483
471501
|
}
|
|
471484
471502
|
}
|
|
471485
471503
|
function getNewAgentFilePath(agent) {
|
|
471486
471504
|
const dirPath = getAgentDirectoryPath(agent.source);
|
|
471487
|
-
return
|
|
471505
|
+
return join124(dirPath, `${agent.agentType}.md`);
|
|
471488
471506
|
}
|
|
471489
471507
|
function getActualAgentFilePath(agent) {
|
|
471490
471508
|
if (agent.source === "built-in") {
|
|
@@ -471495,14 +471513,14 @@ function getActualAgentFilePath(agent) {
|
|
|
471495
471513
|
}
|
|
471496
471514
|
const dirPath = getAgentDirectoryPath(agent.source);
|
|
471497
471515
|
const filename = agent.filename || agent.agentType;
|
|
471498
|
-
return
|
|
471516
|
+
return join124(dirPath, `${filename}.md`);
|
|
471499
471517
|
}
|
|
471500
471518
|
function getNewRelativeAgentFilePath(agent) {
|
|
471501
471519
|
if (agent.source === "built-in") {
|
|
471502
471520
|
return "Built-in";
|
|
471503
471521
|
}
|
|
471504
471522
|
const dirPath = getRelativeAgentDirectoryPath(agent.source);
|
|
471505
|
-
return
|
|
471523
|
+
return join124(dirPath, `${agent.agentType}.md`);
|
|
471506
471524
|
}
|
|
471507
471525
|
function getActualRelativeAgentFilePath(agent) {
|
|
471508
471526
|
if (isBuiltInAgent(agent)) {
|
|
@@ -471516,7 +471534,7 @@ function getActualRelativeAgentFilePath(agent) {
|
|
|
471516
471534
|
}
|
|
471517
471535
|
const dirPath = getRelativeAgentDirectoryPath(agent.source);
|
|
471518
471536
|
const filename = agent.filename || agent.agentType;
|
|
471519
|
-
return
|
|
471537
|
+
return join124(dirPath, `${filename}.md`);
|
|
471520
471538
|
}
|
|
471521
471539
|
async function ensureAgentDirectoryExists(source) {
|
|
471522
471540
|
const dirPath = getAgentDirectoryPath(source);
|
|
@@ -477528,7 +477546,7 @@ var init_rewind = __esm(() => {
|
|
|
477528
477546
|
// src/utils/heapDumpService.ts
|
|
477529
477547
|
import { createWriteStream as createWriteStream3, writeFileSync as writeFileSync4 } from "fs";
|
|
477530
477548
|
import { readdir as readdir26, readFile as readFile44, writeFile as writeFile37 } from "fs/promises";
|
|
477531
|
-
import { join as
|
|
477549
|
+
import { join as join125 } from "path";
|
|
477532
477550
|
import { pipeline as pipeline2 } from "stream/promises";
|
|
477533
477551
|
import {
|
|
477534
477552
|
getHeapSnapshot,
|
|
@@ -477618,7 +477636,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
|
|
|
477618
477636
|
smapsRollup,
|
|
477619
477637
|
platform: process.platform,
|
|
477620
477638
|
nodeVersion: process.version,
|
|
477621
|
-
ccVersion: "1.1.
|
|
477639
|
+
ccVersion: "1.1.31+c38c44f"
|
|
477622
477640
|
};
|
|
477623
477641
|
}
|
|
477624
477642
|
async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
@@ -477636,8 +477654,8 @@ async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
|
477636
477654
|
const suffix = dumpNumber > 0 ? `-dump${dumpNumber}` : "";
|
|
477637
477655
|
const heapFilename = `${sessionId}${suffix}.heapsnapshot`;
|
|
477638
477656
|
const diagFilename = `${sessionId}${suffix}-diagnostics.json`;
|
|
477639
|
-
const heapPath =
|
|
477640
|
-
const diagPath =
|
|
477657
|
+
const heapPath = join125(dumpDir, heapFilename);
|
|
477658
|
+
const diagPath = join125(dumpDir, diagFilename);
|
|
477641
477659
|
await writeFile37(diagPath, jsonStringify(diagnostics, null, 2), {
|
|
477642
477660
|
mode: 384
|
|
477643
477661
|
});
|
|
@@ -478204,7 +478222,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
478204
478222
|
var call56 = async () => {
|
|
478205
478223
|
return {
|
|
478206
478224
|
type: "text",
|
|
478207
|
-
value: `${"1.1.
|
|
478225
|
+
value: `${"1.1.31+c38c44f"} (built ${"2026-06-23T19:29:51.252Z"})`
|
|
478208
478226
|
};
|
|
478209
478227
|
}, version2, version_default;
|
|
478210
478228
|
var init_version = __esm(() => {
|
|
@@ -479483,7 +479501,7 @@ var init_sandbox_toggle2 = __esm(() => {
|
|
|
479483
479501
|
|
|
479484
479502
|
// src/utils/vivusInChrome/setupPortable.ts
|
|
479485
479503
|
import { readdir as readdir27 } from "fs/promises";
|
|
479486
|
-
import { join as
|
|
479504
|
+
import { join as join126 } from "path";
|
|
479487
479505
|
function getExtensionIds() {
|
|
479488
479506
|
return process.env.USER_TYPE === "ant" ? [PROD_EXTENSION_ID, DEV_EXTENSION_ID, ANT_EXTENSION_ID] : [PROD_EXTENSION_ID];
|
|
479489
479507
|
}
|
|
@@ -479510,7 +479528,7 @@ async function detectExtensionInstallationPortable(browserPaths, log) {
|
|
|
479510
479528
|
}
|
|
479511
479529
|
for (const profile of profileDirs) {
|
|
479512
479530
|
for (const extensionId of extensionIds) {
|
|
479513
|
-
const extensionPath =
|
|
479531
|
+
const extensionPath = join126(browserBasePath, profile, "Extensions", extensionId);
|
|
479514
479532
|
try {
|
|
479515
479533
|
await readdir27(extensionPath);
|
|
479516
479534
|
log?.(`[Vivus in Chrome] Extension ${extensionId} found in ${browser} ${profile}`);
|
|
@@ -479534,7 +479552,7 @@ var init_setupPortable = __esm(() => {
|
|
|
479534
479552
|
// src/utils/vivusInChrome/setup.ts
|
|
479535
479553
|
import { chmod as chmod10, mkdir as mkdir36, readFile as readFile45, writeFile as writeFile38 } from "fs/promises";
|
|
479536
479554
|
import { homedir as homedir33 } from "os";
|
|
479537
|
-
import { join as
|
|
479555
|
+
import { join as join127 } from "path";
|
|
479538
479556
|
import { fileURLToPath as fileURLToPath7 } from "url";
|
|
479539
479557
|
function shouldEnableVivusInChrome(chromeFlag) {
|
|
479540
479558
|
if (getIsNonInteractiveSession() && chromeFlag !== true) {
|
|
@@ -479591,8 +479609,8 @@ function setupVivusInChrome() {
|
|
|
479591
479609
|
};
|
|
479592
479610
|
} else {
|
|
479593
479611
|
const __filename3 = fileURLToPath7(import.meta.url);
|
|
479594
|
-
const __dirname3 =
|
|
479595
|
-
const cliPath =
|
|
479612
|
+
const __dirname3 = join127(__filename3, "..");
|
|
479613
|
+
const cliPath = join127(__dirname3, "cli.js");
|
|
479596
479614
|
createWrapperScript(`"${process.execPath}" "${cliPath}" --chrome-native-host`).then((manifestBinaryPath) => installChromeNativeHostManifest(manifestBinaryPath)).catch((e) => logForDebugging(`[Vivus in Chrome] Failed to install native host: ${e}`, { level: "error" }));
|
|
479597
479615
|
const mcpConfig = {
|
|
479598
479616
|
[VIVUS_IN_CHROME_MCP_SERVER_NAME]: {
|
|
@@ -479614,8 +479632,8 @@ function getNativeMessagingHostsDirs() {
|
|
|
479614
479632
|
const platform5 = getPlatform();
|
|
479615
479633
|
if (platform5 === "windows") {
|
|
479616
479634
|
const home = homedir33();
|
|
479617
|
-
const appData = process.env.APPDATA ||
|
|
479618
|
-
return [
|
|
479635
|
+
const appData = process.env.APPDATA || join127(home, "AppData", "Local");
|
|
479636
|
+
return [join127(appData, "Vivus", "ChromeNativeHost")];
|
|
479619
479637
|
}
|
|
479620
479638
|
return getAllNativeMessagingHostsDirs().map(({ path: path23 }) => path23);
|
|
479621
479639
|
}
|
|
@@ -479640,7 +479658,7 @@ async function installChromeNativeHostManifest(manifestBinaryPath) {
|
|
|
479640
479658
|
const manifestContent = jsonStringify(manifest, null, 2);
|
|
479641
479659
|
let anyManifestUpdated = false;
|
|
479642
479660
|
for (const manifestDir of manifestDirs) {
|
|
479643
|
-
const manifestPath =
|
|
479661
|
+
const manifestPath = join127(manifestDir, NATIVE_HOST_MANIFEST_NAME);
|
|
479644
479662
|
const existingContent = await readFile45(manifestPath, "utf-8").catch(() => null);
|
|
479645
479663
|
if (existingContent === manifestContent) {
|
|
479646
479664
|
continue;
|
|
@@ -479655,7 +479673,7 @@ async function installChromeNativeHostManifest(manifestBinaryPath) {
|
|
|
479655
479673
|
}
|
|
479656
479674
|
}
|
|
479657
479675
|
if (getPlatform() === "windows") {
|
|
479658
|
-
const manifestPath =
|
|
479676
|
+
const manifestPath = join127(manifestDirs[0], NATIVE_HOST_MANIFEST_NAME);
|
|
479659
479677
|
registerWindowsNativeHosts(manifestPath);
|
|
479660
479678
|
}
|
|
479661
479679
|
if (anyManifestUpdated) {
|
|
@@ -479693,8 +479711,8 @@ function registerWindowsNativeHosts(manifestPath) {
|
|
|
479693
479711
|
}
|
|
479694
479712
|
async function createWrapperScript(command7) {
|
|
479695
479713
|
const platform5 = getPlatform();
|
|
479696
|
-
const chromeDir =
|
|
479697
|
-
const wrapperPath = platform5 === "windows" ?
|
|
479714
|
+
const chromeDir = join127(getVivusConfigHomeDir(), "chrome");
|
|
479715
|
+
const wrapperPath = platform5 === "windows" ? join127(chromeDir, "chrome-native-host.bat") : join127(chromeDir, "chrome-native-host");
|
|
479698
479716
|
const scriptContent = platform5 === "windows" ? `@echo off
|
|
479699
479717
|
REM Chrome native host wrapper script
|
|
479700
479718
|
REM Generated by Vivus - do not edit manually
|
|
@@ -480300,7 +480318,7 @@ var init_advisor2 = __esm(() => {
|
|
|
480300
480318
|
// src/skills/bundledSkills.ts
|
|
480301
480319
|
import { constants as fsConstants6 } from "fs";
|
|
480302
480320
|
import { mkdir as mkdir37, open as open14 } from "fs/promises";
|
|
480303
|
-
import { dirname as dirname54, isAbsolute as isAbsolute24, join as
|
|
480321
|
+
import { dirname as dirname54, isAbsolute as isAbsolute24, join as join128, normalize as normalize15, sep as pathSep2 } from "path";
|
|
480304
480322
|
function registerBundledSkill(definition) {
|
|
480305
480323
|
const { files: files2 } = definition;
|
|
480306
480324
|
let skillRoot;
|
|
@@ -480348,7 +480366,7 @@ function getBundledSkills() {
|
|
|
480348
480366
|
return [...bundledSkills];
|
|
480349
480367
|
}
|
|
480350
480368
|
function getBundledSkillExtractDir(skillName) {
|
|
480351
|
-
return
|
|
480369
|
+
return join128(getBundledSkillsRoot(), skillName);
|
|
480352
480370
|
}
|
|
480353
480371
|
async function extractBundledSkillFiles(skillName, files2) {
|
|
480354
480372
|
const dir = getBundledSkillExtractDir(skillName);
|
|
@@ -480390,7 +480408,7 @@ function resolveSkillFilePath(baseDir, relPath) {
|
|
|
480390
480408
|
if (isAbsolute24(normalized) || normalized.split(pathSep2).includes("..") || normalized.split("/").includes("..")) {
|
|
480391
480409
|
throw new Error(`bundled skill file path escapes skill dir: ${relPath}`);
|
|
480392
480410
|
}
|
|
480393
|
-
return
|
|
480411
|
+
return join128(baseDir, normalized);
|
|
480394
480412
|
}
|
|
480395
480413
|
function prependBaseDir(blocks, baseDir) {
|
|
480396
480414
|
const prefix = `Base directory for this skill: ${baseDir}
|
|
@@ -480751,7 +480769,7 @@ var init_exit2 = __esm(() => {
|
|
|
480751
480769
|
});
|
|
480752
480770
|
|
|
480753
480771
|
// src/components/ExportDialog.tsx
|
|
480754
|
-
import { join as
|
|
480772
|
+
import { join as join129 } from "path";
|
|
480755
480773
|
function ExportDialog({
|
|
480756
480774
|
content,
|
|
480757
480775
|
defaultFilename,
|
|
@@ -480784,7 +480802,7 @@ function ExportDialog({
|
|
|
480784
480802
|
};
|
|
480785
480803
|
const handleFilenameSubmit = () => {
|
|
480786
480804
|
const finalFilename = filename.endsWith(".txt") ? filename : filename.replace(/\.[^.]+$/, "") + ".txt";
|
|
480787
|
-
const filepath =
|
|
480805
|
+
const filepath = join129(getCwd(), finalFilename);
|
|
480788
480806
|
try {
|
|
480789
480807
|
writeFileSync_DEPRECATED(filepath, content, {
|
|
480790
480808
|
encoding: "utf-8",
|
|
@@ -481007,7 +481025,7 @@ __export(exports_export, {
|
|
|
481007
481025
|
extractFirstPrompt: () => extractFirstPrompt,
|
|
481008
481026
|
call: () => call62
|
|
481009
481027
|
});
|
|
481010
|
-
import { join as
|
|
481028
|
+
import { join as join130 } from "path";
|
|
481011
481029
|
function formatTimestamp(date6) {
|
|
481012
481030
|
const year = date6.getFullYear();
|
|
481013
481031
|
const month = String(date6.getMonth() + 1).padStart(2, "0");
|
|
@@ -481051,7 +481069,7 @@ async function call62(onDone, context2, args) {
|
|
|
481051
481069
|
const filename = args.trim();
|
|
481052
481070
|
if (filename) {
|
|
481053
481071
|
const finalFilename = filename.endsWith(".txt") ? filename : filename.replace(/\.[^.]+$/, "") + ".txt";
|
|
481054
|
-
const filepath =
|
|
481072
|
+
const filepath = join130(getCwd(), finalFilename);
|
|
481055
481073
|
try {
|
|
481056
481074
|
writeFileSync_DEPRECATED(filepath, content, {
|
|
481057
481075
|
encoding: "utf-8",
|
|
@@ -483204,7 +483222,7 @@ var require_asciichart = __commonJS((exports) => {
|
|
|
483204
483222
|
// src/utils/statsCache.ts
|
|
483205
483223
|
import { randomBytes as randomBytes20 } from "crypto";
|
|
483206
483224
|
import { open as open15 } from "fs/promises";
|
|
483207
|
-
import { join as
|
|
483225
|
+
import { join as join131 } from "path";
|
|
483208
483226
|
async function withStatsCacheLock(fn) {
|
|
483209
483227
|
while (statsCacheLockPromise) {
|
|
483210
483228
|
await statsCacheLockPromise;
|
|
@@ -483221,7 +483239,7 @@ async function withStatsCacheLock(fn) {
|
|
|
483221
483239
|
}
|
|
483222
483240
|
}
|
|
483223
483241
|
function getStatsCachePath() {
|
|
483224
|
-
return
|
|
483242
|
+
return join131(getVivusConfigHomeDir(), STATS_CACHE_FILENAME);
|
|
483225
483243
|
}
|
|
483226
483244
|
function getEmptyCache() {
|
|
483227
483245
|
return {
|
|
@@ -483889,12 +483907,12 @@ var init_ansiToPng = __esm(() => {
|
|
|
483889
483907
|
// src/utils/screenshotClipboard.ts
|
|
483890
483908
|
import { mkdir as mkdir38, unlink as unlink20, writeFile as writeFile39 } from "fs/promises";
|
|
483891
483909
|
import { tmpdir as tmpdir10 } from "os";
|
|
483892
|
-
import { join as
|
|
483910
|
+
import { join as join132 } from "path";
|
|
483893
483911
|
async function copyAnsiToClipboard(ansiText, options2) {
|
|
483894
483912
|
try {
|
|
483895
|
-
const tempDir =
|
|
483913
|
+
const tempDir = join132(tmpdir10(), "vivus-screenshots");
|
|
483896
483914
|
await mkdir38(tempDir, { recursive: true });
|
|
483897
|
-
const pngPath =
|
|
483915
|
+
const pngPath = join132(tempDir, `screenshot-${Date.now()}.png`);
|
|
483898
483916
|
const pngBuffer = ansiToPng(ansiText, options2);
|
|
483899
483917
|
await writeFile39(pngPath, pngBuffer);
|
|
483900
483918
|
const result = await copyPngToClipboard(pngPath);
|
|
@@ -483965,7 +483983,7 @@ var init_screenshotClipboard = __esm(() => {
|
|
|
483965
483983
|
|
|
483966
483984
|
// src/utils/stats.ts
|
|
483967
483985
|
import { open as open16 } from "fs/promises";
|
|
483968
|
-
import { basename as basename39, join as
|
|
483986
|
+
import { basename as basename39, join as join133, sep as sep31 } from "path";
|
|
483969
483987
|
async function processSessionFiles(sessionFiles, options2 = {}) {
|
|
483970
483988
|
const { fromDate, toDate } = options2;
|
|
483971
483989
|
const fs10 = getFsImplementation();
|
|
@@ -484143,17 +484161,17 @@ async function getAllSessionFiles() {
|
|
|
484143
484161
|
return [];
|
|
484144
484162
|
throw e;
|
|
484145
484163
|
}
|
|
484146
|
-
const projectDirs = allEntries.filter((dirent) => dirent.isDirectory()).map((dirent) =>
|
|
484164
|
+
const projectDirs = allEntries.filter((dirent) => dirent.isDirectory()).map((dirent) => join133(projectsDir, dirent.name));
|
|
484147
484165
|
const projectResults = await Promise.all(projectDirs.map(async (projectDir) => {
|
|
484148
484166
|
try {
|
|
484149
484167
|
const entries = await fs10.readdir(projectDir);
|
|
484150
|
-
const mainFiles = entries.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".jsonl")).map((dirent) =>
|
|
484168
|
+
const mainFiles = entries.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".jsonl")).map((dirent) => join133(projectDir, dirent.name));
|
|
484151
484169
|
const sessionDirs = entries.filter((dirent) => dirent.isDirectory());
|
|
484152
484170
|
const subagentResults = await Promise.all(sessionDirs.map(async (sessionDir) => {
|
|
484153
|
-
const subagentsDir =
|
|
484171
|
+
const subagentsDir = join133(projectDir, sessionDir.name, "subagents");
|
|
484154
484172
|
try {
|
|
484155
484173
|
const subagentEntries = await fs10.readdir(subagentsDir);
|
|
484156
|
-
return subagentEntries.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".jsonl") && dirent.name.startsWith("agent-")).map((dirent) =>
|
|
484174
|
+
return subagentEntries.filter((dirent) => dirent.isFile() && dirent.name.endsWith(".jsonl") && dirent.name.startsWith("agent-")).map((dirent) => join133(subagentsDir, dirent.name));
|
|
484157
484175
|
} catch {
|
|
484158
484176
|
return [];
|
|
484159
484177
|
}
|
|
@@ -486033,7 +486051,7 @@ import {
|
|
|
486033
486051
|
writeFile as writeFile40
|
|
486034
486052
|
} from "fs/promises";
|
|
486035
486053
|
import { tmpdir as tmpdir11 } from "os";
|
|
486036
|
-
import { extname as extname12, join as
|
|
486054
|
+
import { extname as extname12, join as join134 } from "path";
|
|
486037
486055
|
function getAnalysisModel() {
|
|
486038
486056
|
return getDefaultOpusModel();
|
|
486039
486057
|
}
|
|
@@ -486041,13 +486059,13 @@ function getInsightsModel() {
|
|
|
486041
486059
|
return getDefaultOpusModel();
|
|
486042
486060
|
}
|
|
486043
486061
|
function getDataDir() {
|
|
486044
|
-
return
|
|
486062
|
+
return join134(getVivusConfigHomeDir(), "usage-data");
|
|
486045
486063
|
}
|
|
486046
486064
|
function getFacetsDir() {
|
|
486047
|
-
return
|
|
486065
|
+
return join134(getDataDir(), "facets");
|
|
486048
486066
|
}
|
|
486049
486067
|
function getSessionMetaDir() {
|
|
486050
|
-
return
|
|
486068
|
+
return join134(getDataDir(), "session-meta");
|
|
486051
486069
|
}
|
|
486052
486070
|
function getLanguageFromPath(filePath) {
|
|
486053
486071
|
const ext = extname12(filePath).toLowerCase();
|
|
@@ -486392,7 +486410,7 @@ async function formatTranscriptWithSummarization(log) {
|
|
|
486392
486410
|
`);
|
|
486393
486411
|
}
|
|
486394
486412
|
async function loadCachedFacets(sessionId) {
|
|
486395
|
-
const facetPath =
|
|
486413
|
+
const facetPath = join134(getFacetsDir(), `${sessionId}.json`);
|
|
486396
486414
|
try {
|
|
486397
486415
|
const content = await readFile46(facetPath, { encoding: "utf-8" });
|
|
486398
486416
|
const parsed = jsonParse(content);
|
|
@@ -486411,14 +486429,14 @@ async function saveFacets(facets) {
|
|
|
486411
486429
|
try {
|
|
486412
486430
|
await mkdir39(getFacetsDir(), { recursive: true });
|
|
486413
486431
|
} catch {}
|
|
486414
|
-
const facetPath =
|
|
486432
|
+
const facetPath = join134(getFacetsDir(), `${facets.session_id}.json`);
|
|
486415
486433
|
await writeFile40(facetPath, jsonStringify(facets, null, 2), {
|
|
486416
486434
|
encoding: "utf-8",
|
|
486417
486435
|
mode: 384
|
|
486418
486436
|
});
|
|
486419
486437
|
}
|
|
486420
486438
|
async function loadCachedSessionMeta(sessionId) {
|
|
486421
|
-
const metaPath =
|
|
486439
|
+
const metaPath = join134(getSessionMetaDir(), `${sessionId}.json`);
|
|
486422
486440
|
try {
|
|
486423
486441
|
const content = await readFile46(metaPath, { encoding: "utf-8" });
|
|
486424
486442
|
return jsonParse(content);
|
|
@@ -486430,7 +486448,7 @@ async function saveSessionMeta(meta) {
|
|
|
486430
486448
|
try {
|
|
486431
486449
|
await mkdir39(getSessionMetaDir(), { recursive: true });
|
|
486432
486450
|
} catch {}
|
|
486433
|
-
const metaPath =
|
|
486451
|
+
const metaPath = join134(getSessionMetaDir(), `${meta.session_id}.json`);
|
|
486434
486452
|
await writeFile40(metaPath, jsonStringify(meta, null, 2), {
|
|
486435
486453
|
encoding: "utf-8",
|
|
486436
486454
|
mode: 384
|
|
@@ -487487,7 +487505,7 @@ function generateHtmlReport(data, insights) {
|
|
|
487487
487505
|
</html>`;
|
|
487488
487506
|
}
|
|
487489
487507
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
487490
|
-
const version3 = typeof MACRO !== "undefined" ? "1.1.
|
|
487508
|
+
const version3 = typeof MACRO !== "undefined" ? "1.1.31+c38c44f" : "unknown";
|
|
487491
487509
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
487492
487510
|
const facets_summary = {
|
|
487493
487511
|
total: facets.size,
|
|
@@ -487538,7 +487556,7 @@ async function scanAllSessions() {
|
|
|
487538
487556
|
} catch {
|
|
487539
487557
|
return [];
|
|
487540
487558
|
}
|
|
487541
|
-
const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) =>
|
|
487559
|
+
const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join134(projectsDir, dirent.name));
|
|
487542
487560
|
const allSessions = [];
|
|
487543
487561
|
for (let i2 = 0;i2 < projectDirs.length; i2++) {
|
|
487544
487562
|
const sessionFiles = await getSessionFilesWithMtime(projectDirs[i2]);
|
|
@@ -487560,7 +487578,7 @@ async function scanAllSessions() {
|
|
|
487560
487578
|
async function generateUsageReport(options2) {
|
|
487561
487579
|
let remoteStats;
|
|
487562
487580
|
if (process.env.USER_TYPE === "ant" && options2?.collectRemote) {
|
|
487563
|
-
const destDir =
|
|
487581
|
+
const destDir = join134(getVivusConfigHomeDir(), "projects");
|
|
487564
487582
|
const { hosts, totalCopied } = await collectAllRemoteHostData(destDir);
|
|
487565
487583
|
remoteStats = { hosts, totalCopied };
|
|
487566
487584
|
}
|
|
@@ -487699,7 +487717,7 @@ async function generateUsageReport(options2) {
|
|
|
487699
487717
|
try {
|
|
487700
487718
|
await mkdir39(getDataDir(), { recursive: true });
|
|
487701
487719
|
} catch {}
|
|
487702
|
-
const htmlPath =
|
|
487720
|
+
const htmlPath = join134(getDataDir(), "report.html");
|
|
487703
487721
|
await writeFile40(htmlPath, htmlReport, {
|
|
487704
487722
|
encoding: "utf-8",
|
|
487705
487723
|
mode: 384
|
|
@@ -487795,13 +487813,13 @@ var init_insights = __esm(() => {
|
|
|
487795
487813
|
} : async () => 0;
|
|
487796
487814
|
collectFromRemoteHost = process.env.USER_TYPE === "ant" ? async (homespace, destDir) => {
|
|
487797
487815
|
const result = { copied: 0, skipped: 0 };
|
|
487798
|
-
const tempDir = await mkdtemp(
|
|
487816
|
+
const tempDir = await mkdtemp(join134(tmpdir11(), "vivus-hs-"));
|
|
487799
487817
|
try {
|
|
487800
487818
|
const scpResult = await execFileNoThrow("scp", ["-rq", `${homespace}.coder:/root/.vivus/projects/`, tempDir], { timeout: 300000 });
|
|
487801
487819
|
if (scpResult.code !== 0) {
|
|
487802
487820
|
return result;
|
|
487803
487821
|
}
|
|
487804
|
-
const projectsDir =
|
|
487822
|
+
const projectsDir = join134(tempDir, "projects");
|
|
487805
487823
|
let projectDirents;
|
|
487806
487824
|
try {
|
|
487807
487825
|
projectDirents = await readdir28(projectsDir, { withFileTypes: true });
|
|
@@ -487810,11 +487828,11 @@ var init_insights = __esm(() => {
|
|
|
487810
487828
|
}
|
|
487811
487829
|
await Promise.all(projectDirents.map(async (dirent) => {
|
|
487812
487830
|
const projectName = dirent.name;
|
|
487813
|
-
const projectPath =
|
|
487831
|
+
const projectPath = join134(projectsDir, projectName);
|
|
487814
487832
|
if (!dirent.isDirectory())
|
|
487815
487833
|
return;
|
|
487816
487834
|
const destProjectName = `${projectName}__${homespace}`;
|
|
487817
|
-
const destProjectPath =
|
|
487835
|
+
const destProjectPath = join134(destDir, destProjectName);
|
|
487818
487836
|
try {
|
|
487819
487837
|
await mkdir39(destProjectPath, { recursive: true });
|
|
487820
487838
|
} catch {}
|
|
@@ -487828,8 +487846,8 @@ var init_insights = __esm(() => {
|
|
|
487828
487846
|
const fileName = fileDirent.name;
|
|
487829
487847
|
if (!fileName.endsWith(".jsonl"))
|
|
487830
487848
|
return;
|
|
487831
|
-
const srcFile =
|
|
487832
|
-
const destFile =
|
|
487849
|
+
const srcFile = join134(projectPath, fileName);
|
|
487850
|
+
const destFile = join134(destProjectPath, fileName);
|
|
487833
487851
|
try {
|
|
487834
487852
|
await copyFile10(srcFile, destFile, fsConstants7.COPYFILE_EXCL);
|
|
487835
487853
|
result.copied++;
|
|
@@ -488775,7 +488793,7 @@ import {
|
|
|
488775
488793
|
unlink as unlink22,
|
|
488776
488794
|
writeFile as writeFile41
|
|
488777
488795
|
} from "fs/promises";
|
|
488778
|
-
import { basename as basename40, dirname as dirname56, join as
|
|
488796
|
+
import { basename as basename40, dirname as dirname56, join as join135 } from "path";
|
|
488779
488797
|
function isTranscriptMessage(entry) {
|
|
488780
488798
|
return entry.type === "user" || entry.type === "assistant" || entry.type === "attachment" || entry.type === "system";
|
|
488781
488799
|
}
|
|
@@ -488789,18 +488807,18 @@ function isEphemeralToolProgress(dataType) {
|
|
|
488789
488807
|
return typeof dataType === "string" && EPHEMERAL_PROGRESS_TYPES.has(dataType);
|
|
488790
488808
|
}
|
|
488791
488809
|
function getProjectsDir2() {
|
|
488792
|
-
return
|
|
488810
|
+
return join135(getVivusConfigHomeDir(), "projects");
|
|
488793
488811
|
}
|
|
488794
488812
|
function getTranscriptPath() {
|
|
488795
488813
|
const projectDir = getSessionProjectDir() ?? getProjectDir2(getOriginalCwd());
|
|
488796
|
-
return
|
|
488814
|
+
return join135(projectDir, `${getSessionId()}.jsonl`);
|
|
488797
488815
|
}
|
|
488798
488816
|
function getTranscriptPathForSession(sessionId) {
|
|
488799
488817
|
if (sessionId === getSessionId()) {
|
|
488800
488818
|
return getTranscriptPath();
|
|
488801
488819
|
}
|
|
488802
488820
|
const projectDir = getProjectDir2(getOriginalCwd());
|
|
488803
|
-
return
|
|
488821
|
+
return join135(projectDir, `${sessionId}.jsonl`);
|
|
488804
488822
|
}
|
|
488805
488823
|
function setAgentTranscriptSubdir(agentId, subdir) {
|
|
488806
488824
|
agentTranscriptSubdirs.set(agentId, subdir);
|
|
@@ -488812,8 +488830,8 @@ function getAgentTranscriptPath(agentId) {
|
|
|
488812
488830
|
const projectDir = getSessionProjectDir() ?? getProjectDir2(getOriginalCwd());
|
|
488813
488831
|
const sessionId = getSessionId();
|
|
488814
488832
|
const subdir = agentTranscriptSubdirs.get(agentId);
|
|
488815
|
-
const base2 = subdir ?
|
|
488816
|
-
return
|
|
488833
|
+
const base2 = subdir ? join135(projectDir, sessionId, "subagents", subdir) : join135(projectDir, sessionId, "subagents");
|
|
488834
|
+
return join135(base2, `agent-${agentId}.jsonl`);
|
|
488817
488835
|
}
|
|
488818
488836
|
function getAgentMetadataPath(agentId) {
|
|
488819
488837
|
return getAgentTranscriptPath(agentId).replace(/\.jsonl$/, ".meta.json");
|
|
@@ -488836,10 +488854,10 @@ async function readAgentMetadata(agentId) {
|
|
|
488836
488854
|
}
|
|
488837
488855
|
function getRemoteAgentsDir() {
|
|
488838
488856
|
const projectDir = getSessionProjectDir() ?? getProjectDir2(getOriginalCwd());
|
|
488839
|
-
return
|
|
488857
|
+
return join135(projectDir, getSessionId(), "remote-agents");
|
|
488840
488858
|
}
|
|
488841
488859
|
function getRemoteAgentMetadataPath(taskId) {
|
|
488842
|
-
return
|
|
488860
|
+
return join135(getRemoteAgentsDir(), `remote-agent-${taskId}.meta.json`);
|
|
488843
488861
|
}
|
|
488844
488862
|
async function writeRemoteAgentMetadata(taskId, metadata) {
|
|
488845
488863
|
const path23 = getRemoteAgentMetadataPath(taskId);
|
|
@@ -488882,7 +488900,7 @@ async function listRemoteAgentMetadata() {
|
|
|
488882
488900
|
if (!entry.isFile() || !entry.name.endsWith(".meta.json"))
|
|
488883
488901
|
continue;
|
|
488884
488902
|
try {
|
|
488885
|
-
const raw = await readFile47(
|
|
488903
|
+
const raw = await readFile47(join135(dir, entry.name), "utf-8");
|
|
488886
488904
|
results.push(JSON.parse(raw));
|
|
488887
488905
|
} catch (e) {
|
|
488888
488906
|
logForDebugging(`listRemoteAgentMetadata: skipping ${entry.name}: ${String(e)}`);
|
|
@@ -488892,7 +488910,7 @@ async function listRemoteAgentMetadata() {
|
|
|
488892
488910
|
}
|
|
488893
488911
|
function sessionIdExists(sessionId) {
|
|
488894
488912
|
const projectDir = getProjectDir2(getOriginalCwd());
|
|
488895
|
-
const sessionFile =
|
|
488913
|
+
const sessionFile = join135(projectDir, `${sessionId}.jsonl`);
|
|
488896
488914
|
const fs10 = getFsImplementation();
|
|
488897
488915
|
try {
|
|
488898
488916
|
fs10.statSync(sessionFile);
|
|
@@ -490861,7 +490879,7 @@ async function loadTranscriptFile(filePath, opts) {
|
|
|
490861
490879
|
};
|
|
490862
490880
|
}
|
|
490863
490881
|
async function loadSessionFile(sessionId) {
|
|
490864
|
-
const sessionFile =
|
|
490882
|
+
const sessionFile = join135(getSessionProjectDir() ?? getProjectDir2(getOriginalCwd()), `${sessionId}.jsonl`);
|
|
490865
490883
|
return loadTranscriptFile(sessionFile);
|
|
490866
490884
|
}
|
|
490867
490885
|
function clearSessionMessagesCache() {
|
|
@@ -490929,7 +490947,7 @@ async function loadAllProjectsMessageLogsFull(limit) {
|
|
|
490929
490947
|
} catch {
|
|
490930
490948
|
return [];
|
|
490931
490949
|
}
|
|
490932
|
-
const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) =>
|
|
490950
|
+
const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join135(projectsDir, dirent.name));
|
|
490933
490951
|
const logsPerProject = await Promise.all(projectDirs.map((projectDir) => getLogsWithoutIndex(projectDir, limit)));
|
|
490934
490952
|
const allLogs = logsPerProject.flat();
|
|
490935
490953
|
const deduped = new Map;
|
|
@@ -490954,7 +490972,7 @@ async function loadAllProjectsMessageLogsProgressive(limit, initialEnrichCount =
|
|
|
490954
490972
|
} catch {
|
|
490955
490973
|
return { logs: [], allStatLogs: [], nextIndex: 0 };
|
|
490956
490974
|
}
|
|
490957
|
-
const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) =>
|
|
490975
|
+
const projectDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join135(projectsDir, dirent.name));
|
|
490958
490976
|
const rawLogs = [];
|
|
490959
490977
|
for (const projectDir of projectDirs) {
|
|
490960
490978
|
rawLogs.push(...await getSessionFilesLite(projectDir, limit));
|
|
@@ -491015,7 +491033,7 @@ async function getStatOnlyLogsForWorktrees(worktreePaths, limit) {
|
|
|
491015
491033
|
for (const { path: wtPath, prefix } of indexed) {
|
|
491016
491034
|
if (dirName === prefix || dirName.startsWith(prefix + "-")) {
|
|
491017
491035
|
seenDirs.add(dirName);
|
|
491018
|
-
allLogs.push(...await getSessionFilesLite(
|
|
491036
|
+
allLogs.push(...await getSessionFilesLite(join135(projectsDir, dirent.name), undefined, wtPath));
|
|
491019
491037
|
break;
|
|
491020
491038
|
}
|
|
491021
491039
|
}
|
|
@@ -491084,7 +491102,7 @@ async function loadSubagentTranscripts(agentIds) {
|
|
|
491084
491102
|
return transcripts;
|
|
491085
491103
|
}
|
|
491086
491104
|
async function loadAllSubagentTranscriptsFromDisk() {
|
|
491087
|
-
const subagentsDir =
|
|
491105
|
+
const subagentsDir = join135(getSessionProjectDir() ?? getProjectDir2(getOriginalCwd()), getSessionId(), "subagents");
|
|
491088
491106
|
let entries;
|
|
491089
491107
|
try {
|
|
491090
491108
|
entries = await readdir29(subagentsDir, { withFileTypes: true });
|
|
@@ -491212,7 +491230,7 @@ async function getSessionFilesWithMtime(projectDir) {
|
|
|
491212
491230
|
const sessionId = validateUuid2(basename40(dirent.name, ".jsonl"));
|
|
491213
491231
|
if (!sessionId)
|
|
491214
491232
|
continue;
|
|
491215
|
-
candidates.push({ sessionId, filePath:
|
|
491233
|
+
candidates.push({ sessionId, filePath: join135(projectDir, dirent.name) });
|
|
491216
491234
|
}
|
|
491217
491235
|
await Promise.all(candidates.map(async ({ sessionId, filePath }) => {
|
|
491218
491236
|
try {
|
|
@@ -491598,7 +491616,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
491598
491616
|
init_settings2();
|
|
491599
491617
|
init_slowOperations();
|
|
491600
491618
|
init_uuid();
|
|
491601
|
-
VERSION5 = typeof MACRO !== "undefined" ? "1.1.
|
|
491619
|
+
VERSION5 = typeof MACRO !== "undefined" ? "1.1.31+c38c44f" : "unknown";
|
|
491602
491620
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
491603
491621
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
491604
491622
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -491610,7 +491628,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
491610
491628
|
MAX_TRANSCRIPT_READ_BYTES = 50 * 1024 * 1024;
|
|
491611
491629
|
agentTranscriptSubdirs = new Map;
|
|
491612
491630
|
getProjectDir2 = memoize_default((projectDir) => {
|
|
491613
|
-
return
|
|
491631
|
+
return join135(getProjectsDir2(), sanitizePath2(projectDir));
|
|
491614
491632
|
});
|
|
491615
491633
|
METADATA_TYPE_MARKERS = [
|
|
491616
491634
|
'"type":"summary"',
|
|
@@ -491854,7 +491872,7 @@ import {
|
|
|
491854
491872
|
dirname as dirname57,
|
|
491855
491873
|
extname as extname13,
|
|
491856
491874
|
isAbsolute as isAbsolute25,
|
|
491857
|
-
join as
|
|
491875
|
+
join as join136,
|
|
491858
491876
|
parse as parse12,
|
|
491859
491877
|
relative as relative26,
|
|
491860
491878
|
sep as sep32
|
|
@@ -492099,7 +492117,7 @@ async function processMdRules({
|
|
|
492099
492117
|
throw e;
|
|
492100
492118
|
}
|
|
492101
492119
|
for (const entry of entries) {
|
|
492102
|
-
const entryPath =
|
|
492120
|
+
const entryPath = join136(rulesDir, entry.name);
|
|
492103
492121
|
const { resolvedPath: resolvedEntryPath, isSymlink: isSymlink2 } = safeResolvePath(fs10, entryPath);
|
|
492104
492122
|
const stats2 = isSymlink2 ? await fs10.stat(resolvedEntryPath) : null;
|
|
492105
492123
|
const isDirectory = stats2 ? stats2.isDirectory() : entry.isDirectory();
|
|
@@ -492170,16 +492188,16 @@ async function getManagedAndUserConditionalRules(targetPath, processedPaths) {
|
|
|
492170
492188
|
async function getMemoryFilesForNestedDirectory(dir, targetPath, processedPaths) {
|
|
492171
492189
|
const result = [];
|
|
492172
492190
|
if (isSettingSourceEnabled("projectSettings")) {
|
|
492173
|
-
const projectPath =
|
|
492191
|
+
const projectPath = join136(dir, "VIVUS.md");
|
|
492174
492192
|
result.push(...await processMemoryFile(projectPath, "Project", processedPaths, false));
|
|
492175
|
-
const dotVivusPath =
|
|
492193
|
+
const dotVivusPath = join136(dir, ".vivus", "VIVUS.md");
|
|
492176
492194
|
result.push(...await processMemoryFile(dotVivusPath, "Project", processedPaths, false));
|
|
492177
492195
|
}
|
|
492178
492196
|
if (isSettingSourceEnabled("localSettings")) {
|
|
492179
|
-
const localPath =
|
|
492197
|
+
const localPath = join136(dir, "VIVUS.local.md");
|
|
492180
492198
|
result.push(...await processMemoryFile(localPath, "Local", processedPaths, false));
|
|
492181
492199
|
}
|
|
492182
|
-
const rulesDir =
|
|
492200
|
+
const rulesDir = join136(dir, ".vivus", "rules");
|
|
492183
492201
|
const unconditionalProcessedPaths = new Set(processedPaths);
|
|
492184
492202
|
result.push(...await processMdRules({
|
|
492185
492203
|
rulesDir,
|
|
@@ -492195,7 +492213,7 @@ async function getMemoryFilesForNestedDirectory(dir, targetPath, processedPaths)
|
|
|
492195
492213
|
return result;
|
|
492196
492214
|
}
|
|
492197
492215
|
async function getConditionalRulesForCwdLevelDirectory(dir, targetPath, processedPaths) {
|
|
492198
|
-
const rulesDir =
|
|
492216
|
+
const rulesDir = join136(dir, ".vivus", "rules");
|
|
492199
492217
|
return processConditionedMdRules(targetPath, rulesDir, "Project", processedPaths, false);
|
|
492200
492218
|
}
|
|
492201
492219
|
async function processConditionedMdRules(targetPath, rulesDir, type, processedPaths, includeExternal) {
|
|
@@ -492440,11 +492458,11 @@ var init_vivusmd = __esm(() => {
|
|
|
492440
492458
|
for (const dir of dirs.reverse()) {
|
|
492441
492459
|
const skipProject = isNestedWorktree && pathInWorkingPath(dir, canonicalRoot) && !pathInWorkingPath(dir, gitRoot);
|
|
492442
492460
|
if (isSettingSourceEnabled("projectSettings") && !skipProject) {
|
|
492443
|
-
const projectPath =
|
|
492461
|
+
const projectPath = join136(dir, "VIVUS.md");
|
|
492444
492462
|
result.push(...await processMemoryFile(projectPath, "Project", processedPaths, includeExternal));
|
|
492445
|
-
const dotVivusPath =
|
|
492463
|
+
const dotVivusPath = join136(dir, ".vivus", "VIVUS.md");
|
|
492446
492464
|
result.push(...await processMemoryFile(dotVivusPath, "Project", processedPaths, includeExternal));
|
|
492447
|
-
const rulesDir =
|
|
492465
|
+
const rulesDir = join136(dir, ".vivus", "rules");
|
|
492448
492466
|
result.push(...await processMdRules({
|
|
492449
492467
|
rulesDir,
|
|
492450
492468
|
type: "Project",
|
|
@@ -492454,18 +492472,18 @@ var init_vivusmd = __esm(() => {
|
|
|
492454
492472
|
}));
|
|
492455
492473
|
}
|
|
492456
492474
|
if (isSettingSourceEnabled("localSettings")) {
|
|
492457
|
-
const localPath =
|
|
492475
|
+
const localPath = join136(dir, "VIVUS.local.md");
|
|
492458
492476
|
result.push(...await processMemoryFile(localPath, "Local", processedPaths, includeExternal));
|
|
492459
492477
|
}
|
|
492460
492478
|
}
|
|
492461
492479
|
if (isEnvTruthy(process.env.VIVUS_CODE_ADDITIONAL_DIRECTORIES_VIVUS_MD)) {
|
|
492462
492480
|
const additionalDirs = getAdditionalDirectoriesForVivusMd();
|
|
492463
492481
|
for (const dir of additionalDirs) {
|
|
492464
|
-
const projectPath =
|
|
492482
|
+
const projectPath = join136(dir, "VIVUS.md");
|
|
492465
492483
|
result.push(...await processMemoryFile(projectPath, "Project", processedPaths, includeExternal));
|
|
492466
|
-
const dotVivusPath =
|
|
492484
|
+
const dotVivusPath = join136(dir, ".vivus", "VIVUS.md");
|
|
492467
492485
|
result.push(...await processMemoryFile(dotVivusPath, "Project", processedPaths, includeExternal));
|
|
492468
|
-
const rulesDir =
|
|
492486
|
+
const rulesDir = join136(dir, ".vivus", "rules");
|
|
492469
492487
|
result.push(...await processMdRules({
|
|
492470
492488
|
rulesDir,
|
|
492471
492489
|
type: "Project",
|
|
@@ -493032,7 +493050,7 @@ __export(exports_upstreamproxy, {
|
|
|
493032
493050
|
});
|
|
493033
493051
|
import { mkdir as mkdir41, readFile as readFile48, unlink as unlink23, writeFile as writeFile42 } from "fs/promises";
|
|
493034
493052
|
import { homedir as homedir34 } from "os";
|
|
493035
|
-
import { join as
|
|
493053
|
+
import { join as join137 } from "path";
|
|
493036
493054
|
async function initUpstreamProxy(opts) {
|
|
493037
493055
|
if (!isEnvTruthy(process.env.VIVUS_CODE_REMOTE)) {
|
|
493038
493056
|
return state;
|
|
@@ -493053,7 +493071,7 @@ async function initUpstreamProxy(opts) {
|
|
|
493053
493071
|
}
|
|
493054
493072
|
setNonDumpable();
|
|
493055
493073
|
const baseUrl = opts?.ccrBaseUrl ?? process.env.ANTHROPIC_BASE_URL ?? "https://api.anthropic.com";
|
|
493056
|
-
const caBundlePath = opts?.caBundlePath ??
|
|
493074
|
+
const caBundlePath = opts?.caBundlePath ?? join137(homedir34(), ".ccr", "ca-bundle.crt");
|
|
493057
493075
|
const caOk = await downloadCaBundle(baseUrl, opts?.systemCaPath ?? SYSTEM_CA_BUNDLE, caBundlePath);
|
|
493058
493076
|
if (!caOk)
|
|
493059
493077
|
return state;
|
|
@@ -493153,7 +493171,7 @@ async function downloadCaBundle(baseUrl, systemCaPath, outPath) {
|
|
|
493153
493171
|
}
|
|
493154
493172
|
const ccrCa = await resp.text();
|
|
493155
493173
|
const systemCa = await readFile48(systemCaPath, "utf8").catch(() => "");
|
|
493156
|
-
await mkdir41(
|
|
493174
|
+
await mkdir41(join137(outPath, ".."), { recursive: true });
|
|
493157
493175
|
await writeFile42(outPath, systemCa + `
|
|
493158
493176
|
` + ccrCa, "utf8");
|
|
493159
493177
|
return true;
|
|
@@ -494470,7 +494488,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
494470
494488
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
494471
494489
|
apiKeySource: getAnthropicApiKeyWithSource().source,
|
|
494472
494490
|
betas: getSdkBetas(),
|
|
494473
|
-
vivus_code_version: "1.1.
|
|
494491
|
+
vivus_code_version: "1.1.31+c38c44f",
|
|
494474
494492
|
output_style: outputStyle2,
|
|
494475
494493
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
494476
494494
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
|
|
@@ -500850,7 +500868,7 @@ var init_ShowInIDEPrompt = __esm(() => {
|
|
|
500850
500868
|
|
|
500851
500869
|
// src/components/permissions/FilePermissionDialog/permissionOptions.tsx
|
|
500852
500870
|
import { homedir as homedir35 } from "os";
|
|
500853
|
-
import { basename as basename45, join as
|
|
500871
|
+
import { basename as basename45, join as join138, sep as sep33 } from "path";
|
|
500854
500872
|
function isInVivusFolder(filePath) {
|
|
500855
500873
|
const absolutePath = expandPath(filePath);
|
|
500856
500874
|
const vivusFolderPath = expandPath(`${getOriginalCwd()}/.vivus`);
|
|
@@ -500860,7 +500878,7 @@ function isInVivusFolder(filePath) {
|
|
|
500860
500878
|
}
|
|
500861
500879
|
function isInGlobalVivusFolder(filePath) {
|
|
500862
500880
|
const absolutePath = expandPath(filePath);
|
|
500863
|
-
const globalVivusFolderPath =
|
|
500881
|
+
const globalVivusFolderPath = join138(homedir35(), ".vivus");
|
|
500864
500882
|
const normalizedAbsolutePath = normalizeCaseForComparison2(absolutePath);
|
|
500865
500883
|
const normalizedGlobalVivusFolderPath = normalizeCaseForComparison2(globalVivusFolderPath);
|
|
500866
500884
|
return normalizedAbsolutePath.startsWith(normalizedGlobalVivusFolderPath + sep33.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalVivusFolderPath + "/");
|
|
@@ -509098,7 +509116,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
509098
509116
|
function getSemverPart(version3) {
|
|
509099
509117
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
509100
509118
|
}
|
|
509101
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.1.
|
|
509119
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.1.31+c38c44f") {
|
|
509102
509120
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react228.useState(() => getSemverPart(initialVersion));
|
|
509103
509121
|
if (!updatedVersion) {
|
|
509104
509122
|
return null;
|
|
@@ -509138,7 +509156,7 @@ function AutoUpdater({
|
|
|
509138
509156
|
return;
|
|
509139
509157
|
}
|
|
509140
509158
|
if (false) {}
|
|
509141
|
-
const currentVersion = "1.1.
|
|
509159
|
+
const currentVersion = "1.1.31+c38c44f";
|
|
509142
509160
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
509143
509161
|
let latestVersion = await getLatestVersion(channel);
|
|
509144
509162
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -509351,12 +509369,12 @@ function NativeAutoUpdater({
|
|
|
509351
509369
|
logEvent("tengu_native_auto_updater_start", {});
|
|
509352
509370
|
try {
|
|
509353
509371
|
const maxVersion = await getMaxVersion();
|
|
509354
|
-
if (maxVersion && gt("1.1.
|
|
509372
|
+
if (maxVersion && gt("1.1.31+c38c44f", maxVersion)) {
|
|
509355
509373
|
const msg = await getMaxVersionMessage();
|
|
509356
509374
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
509357
509375
|
}
|
|
509358
509376
|
const result = await installLatest(channel);
|
|
509359
|
-
const currentVersion = "1.1.
|
|
509377
|
+
const currentVersion = "1.1.31+c38c44f";
|
|
509360
509378
|
const latencyMs = Date.now() - startTime;
|
|
509361
509379
|
if (result.lockFailed) {
|
|
509362
509380
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -509493,17 +509511,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
509493
509511
|
const maxVersion = await getMaxVersion();
|
|
509494
509512
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
509495
509513
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
509496
|
-
if (gte("1.1.
|
|
509497
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.
|
|
509514
|
+
if (gte("1.1.31+c38c44f", maxVersion)) {
|
|
509515
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.31+c38c44f"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
509498
509516
|
setUpdateAvailable(false);
|
|
509499
509517
|
return;
|
|
509500
509518
|
}
|
|
509501
509519
|
latest = maxVersion;
|
|
509502
509520
|
}
|
|
509503
|
-
const hasUpdate = latest && !gte("1.1.
|
|
509521
|
+
const hasUpdate = latest && !gte("1.1.31+c38c44f", latest) && !shouldSkipVersion(latest);
|
|
509504
509522
|
setUpdateAvailable(!!hasUpdate);
|
|
509505
509523
|
if (hasUpdate) {
|
|
509506
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.
|
|
509524
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.31+c38c44f"} -> ${latest}`);
|
|
509507
509525
|
}
|
|
509508
509526
|
};
|
|
509509
509527
|
$2[0] = t1;
|
|
@@ -509537,7 +509555,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
509537
509555
|
wrap: "truncate",
|
|
509538
509556
|
children: [
|
|
509539
509557
|
"currentVersion: ",
|
|
509540
|
-
"1.1.
|
|
509558
|
+
"1.1.31+c38c44f"
|
|
509541
509559
|
]
|
|
509542
509560
|
}, undefined, true, undefined, this);
|
|
509543
509561
|
$2[3] = verbose;
|
|
@@ -517467,7 +517485,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
517467
517485
|
project_dir: getOriginalCwd(),
|
|
517468
517486
|
added_dirs: addedDirs
|
|
517469
517487
|
},
|
|
517470
|
-
version: "1.1.
|
|
517488
|
+
version: "1.1.31+c38c44f",
|
|
517471
517489
|
output_style: {
|
|
517472
517490
|
name: outputStyleName
|
|
517473
517491
|
},
|
|
@@ -523563,9 +523581,9 @@ function initSkillImprovement() {
|
|
|
523563
523581
|
async function applySkillImprovement(skillName, updates) {
|
|
523564
523582
|
if (!skillName)
|
|
523565
523583
|
return;
|
|
523566
|
-
const { join:
|
|
523584
|
+
const { join: join139 } = await import("path");
|
|
523567
523585
|
const fs10 = await import("fs/promises");
|
|
523568
|
-
const filePath =
|
|
523586
|
+
const filePath = join139(getCwd(), ".vivus", "skills", skillName, "SKILL.md");
|
|
523569
523587
|
let currentContent;
|
|
523570
523588
|
try {
|
|
523571
523589
|
currentContent = await fs10.readFile(filePath, "utf-8");
|
|
@@ -523719,7 +523737,7 @@ function useMoreRight(_args) {
|
|
|
523719
523737
|
// src/utils/cleanup.ts
|
|
523720
523738
|
import * as fs10 from "fs/promises";
|
|
523721
523739
|
import { homedir as homedir36 } from "os";
|
|
523722
|
-
import { join as
|
|
523740
|
+
import { join as join139 } from "path";
|
|
523723
523741
|
function getCutoffDate() {
|
|
523724
523742
|
const settings = getSettings_DEPRECATED() || {};
|
|
523725
523743
|
const cleanupPeriodDays = settings.cleanupPeriodDays ?? DEFAULT_CLEANUP_PERIOD_DAYS;
|
|
@@ -523744,7 +523762,7 @@ async function cleanupOldFilesInDirectory(dirPath, cutoffDate, isMessagePath) {
|
|
|
523744
523762
|
try {
|
|
523745
523763
|
const timestamp = convertFileNameToDate(file2.name);
|
|
523746
523764
|
if (timestamp < cutoffDate) {
|
|
523747
|
-
await getFsImplementation().unlink(
|
|
523765
|
+
await getFsImplementation().unlink(join139(dirPath, file2.name));
|
|
523748
523766
|
if (isMessagePath) {
|
|
523749
523767
|
result.messages++;
|
|
523750
523768
|
} else {
|
|
@@ -523775,7 +523793,7 @@ async function cleanupOldMessageFiles() {
|
|
|
523775
523793
|
} catch {
|
|
523776
523794
|
return result;
|
|
523777
523795
|
}
|
|
523778
|
-
const mcpLogDirs = dirents.filter((dirent) => dirent.isDirectory() && dirent.name.startsWith("mcp-logs-")).map((dirent) =>
|
|
523796
|
+
const mcpLogDirs = dirents.filter((dirent) => dirent.isDirectory() && dirent.name.startsWith("mcp-logs-")).map((dirent) => join139(baseCachePath, dirent.name));
|
|
523779
523797
|
for (const mcpLogDir of mcpLogDirs) {
|
|
523780
523798
|
result = addCleanupResults(result, await cleanupOldFilesInDirectory(mcpLogDir, cutoffDate, true));
|
|
523781
523799
|
await tryRmdir(mcpLogDir, fsImpl);
|
|
@@ -523814,7 +523832,7 @@ async function cleanupOldSessionFiles() {
|
|
|
523814
523832
|
for (const projectDirent of projectDirents) {
|
|
523815
523833
|
if (!projectDirent.isDirectory())
|
|
523816
523834
|
continue;
|
|
523817
|
-
const projectDir =
|
|
523835
|
+
const projectDir = join139(projectsDir, projectDirent.name);
|
|
523818
523836
|
let entries;
|
|
523819
523837
|
try {
|
|
523820
523838
|
entries = await fsImpl.readdir(projectDir);
|
|
@@ -523828,15 +523846,15 @@ async function cleanupOldSessionFiles() {
|
|
|
523828
523846
|
continue;
|
|
523829
523847
|
}
|
|
523830
523848
|
try {
|
|
523831
|
-
if (await unlinkIfOld(
|
|
523849
|
+
if (await unlinkIfOld(join139(projectDir, entry.name), cutoffDate, fsImpl)) {
|
|
523832
523850
|
result.messages++;
|
|
523833
523851
|
}
|
|
523834
523852
|
} catch {
|
|
523835
523853
|
result.errors++;
|
|
523836
523854
|
}
|
|
523837
523855
|
} else if (entry.isDirectory()) {
|
|
523838
|
-
const sessionDir =
|
|
523839
|
-
const toolResultsDir =
|
|
523856
|
+
const sessionDir = join139(projectDir, entry.name);
|
|
523857
|
+
const toolResultsDir = join139(sessionDir, TOOL_RESULTS_SUBDIR);
|
|
523840
523858
|
let toolDirs;
|
|
523841
523859
|
try {
|
|
523842
523860
|
toolDirs = await fsImpl.readdir(toolResultsDir);
|
|
@@ -523847,14 +523865,14 @@ async function cleanupOldSessionFiles() {
|
|
|
523847
523865
|
for (const toolEntry of toolDirs) {
|
|
523848
523866
|
if (toolEntry.isFile()) {
|
|
523849
523867
|
try {
|
|
523850
|
-
if (await unlinkIfOld(
|
|
523868
|
+
if (await unlinkIfOld(join139(toolResultsDir, toolEntry.name), cutoffDate, fsImpl)) {
|
|
523851
523869
|
result.messages++;
|
|
523852
523870
|
}
|
|
523853
523871
|
} catch {
|
|
523854
523872
|
result.errors++;
|
|
523855
523873
|
}
|
|
523856
523874
|
} else if (toolEntry.isDirectory()) {
|
|
523857
|
-
const toolDirPath =
|
|
523875
|
+
const toolDirPath = join139(toolResultsDir, toolEntry.name);
|
|
523858
523876
|
let toolFiles;
|
|
523859
523877
|
try {
|
|
523860
523878
|
toolFiles = await fsImpl.readdir(toolDirPath);
|
|
@@ -523865,7 +523883,7 @@ async function cleanupOldSessionFiles() {
|
|
|
523865
523883
|
if (!tf.isFile())
|
|
523866
523884
|
continue;
|
|
523867
523885
|
try {
|
|
523868
|
-
if (await unlinkIfOld(
|
|
523886
|
+
if (await unlinkIfOld(join139(toolDirPath, tf.name), cutoffDate, fsImpl)) {
|
|
523869
523887
|
result.messages++;
|
|
523870
523888
|
}
|
|
523871
523889
|
} catch {
|
|
@@ -523897,7 +523915,7 @@ async function cleanupSingleDirectory(dirPath, extension2, removeEmptyDir = true
|
|
|
523897
523915
|
if (!dirent.isFile() || !dirent.name.endsWith(extension2))
|
|
523898
523916
|
continue;
|
|
523899
523917
|
try {
|
|
523900
|
-
if (await unlinkIfOld(
|
|
523918
|
+
if (await unlinkIfOld(join139(dirPath, dirent.name), cutoffDate, fsImpl)) {
|
|
523901
523919
|
result.messages++;
|
|
523902
523920
|
}
|
|
523903
523921
|
} catch {
|
|
@@ -523910,7 +523928,7 @@ async function cleanupSingleDirectory(dirPath, extension2, removeEmptyDir = true
|
|
|
523910
523928
|
return result;
|
|
523911
523929
|
}
|
|
523912
523930
|
function cleanupOldPlanFiles() {
|
|
523913
|
-
const plansDir =
|
|
523931
|
+
const plansDir = join139(getVivusConfigHomeDir(), "plans");
|
|
523914
523932
|
return cleanupSingleDirectory(plansDir, ".md");
|
|
523915
523933
|
}
|
|
523916
523934
|
async function cleanupOldFileHistoryBackups() {
|
|
@@ -523919,14 +523937,14 @@ async function cleanupOldFileHistoryBackups() {
|
|
|
523919
523937
|
const fsImpl = getFsImplementation();
|
|
523920
523938
|
try {
|
|
523921
523939
|
const configDir = getVivusConfigHomeDir();
|
|
523922
|
-
const fileHistoryStorageDir =
|
|
523940
|
+
const fileHistoryStorageDir = join139(configDir, "file-history");
|
|
523923
523941
|
let dirents;
|
|
523924
523942
|
try {
|
|
523925
523943
|
dirents = await fsImpl.readdir(fileHistoryStorageDir);
|
|
523926
523944
|
} catch {
|
|
523927
523945
|
return result;
|
|
523928
523946
|
}
|
|
523929
|
-
const fileHistorySessionsDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) =>
|
|
523947
|
+
const fileHistorySessionsDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join139(fileHistoryStorageDir, dirent.name));
|
|
523930
523948
|
await Promise.all(fileHistorySessionsDirs.map(async (fileHistorySessionDir) => {
|
|
523931
523949
|
try {
|
|
523932
523950
|
const stats2 = await fsImpl.stat(fileHistorySessionDir);
|
|
@@ -523953,14 +523971,14 @@ async function cleanupOldSessionEnvDirs() {
|
|
|
523953
523971
|
const fsImpl = getFsImplementation();
|
|
523954
523972
|
try {
|
|
523955
523973
|
const configDir = getVivusConfigHomeDir();
|
|
523956
|
-
const sessionEnvBaseDir =
|
|
523974
|
+
const sessionEnvBaseDir = join139(configDir, "session-env");
|
|
523957
523975
|
let dirents;
|
|
523958
523976
|
try {
|
|
523959
523977
|
dirents = await fsImpl.readdir(sessionEnvBaseDir);
|
|
523960
523978
|
} catch {
|
|
523961
523979
|
return result;
|
|
523962
523980
|
}
|
|
523963
|
-
const sessionEnvDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) =>
|
|
523981
|
+
const sessionEnvDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join139(sessionEnvBaseDir, dirent.name));
|
|
523964
523982
|
for (const sessionEnvDir of sessionEnvDirs) {
|
|
523965
523983
|
try {
|
|
523966
523984
|
const stats2 = await fsImpl.stat(sessionEnvDir);
|
|
@@ -523982,7 +524000,7 @@ async function cleanupOldDebugLogs() {
|
|
|
523982
524000
|
const cutoffDate = getCutoffDate();
|
|
523983
524001
|
const result = { messages: 0, errors: 0 };
|
|
523984
524002
|
const fsImpl = getFsImplementation();
|
|
523985
|
-
const debugDir =
|
|
524003
|
+
const debugDir = join139(getVivusConfigHomeDir(), "debug");
|
|
523986
524004
|
let dirents;
|
|
523987
524005
|
try {
|
|
523988
524006
|
dirents = await fsImpl.readdir(debugDir);
|
|
@@ -523994,7 +524012,7 @@ async function cleanupOldDebugLogs() {
|
|
|
523994
524012
|
continue;
|
|
523995
524013
|
}
|
|
523996
524014
|
try {
|
|
523997
|
-
if (await unlinkIfOld(
|
|
524015
|
+
if (await unlinkIfOld(join139(debugDir, dirent.name), cutoffDate, fsImpl)) {
|
|
523998
524016
|
result.messages++;
|
|
523999
524017
|
}
|
|
524000
524018
|
} catch {
|
|
@@ -524004,7 +524022,7 @@ async function cleanupOldDebugLogs() {
|
|
|
524004
524022
|
return result;
|
|
524005
524023
|
}
|
|
524006
524024
|
async function cleanupNpmCacheForAnthropicPackages() {
|
|
524007
|
-
const markerPath =
|
|
524025
|
+
const markerPath = join139(getVivusConfigHomeDir(), ".npm-cache-cleanup");
|
|
524008
524026
|
try {
|
|
524009
524027
|
const stat45 = await fs10.stat(markerPath);
|
|
524010
524028
|
if (Date.now() - stat45.mtimeMs < ONE_DAY_MS) {
|
|
@@ -524019,7 +524037,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
|
|
|
524019
524037
|
return;
|
|
524020
524038
|
}
|
|
524021
524039
|
logForDebugging("npm cache cleanup: starting");
|
|
524022
|
-
const npmCachePath =
|
|
524040
|
+
const npmCachePath = join139(homedir36(), ".npm", "_cacache");
|
|
524023
524041
|
const NPM_CACHE_RETENTION_COUNT = 5;
|
|
524024
524042
|
const startTime = Date.now();
|
|
524025
524043
|
try {
|
|
@@ -524074,7 +524092,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
|
|
|
524074
524092
|
}
|
|
524075
524093
|
}
|
|
524076
524094
|
async function cleanupOldVersionsThrottled() {
|
|
524077
|
-
const markerPath =
|
|
524095
|
+
const markerPath = join139(getVivusConfigHomeDir(), ".version-cleanup");
|
|
524078
524096
|
try {
|
|
524079
524097
|
const stat45 = await fs10.stat(markerPath);
|
|
524080
524098
|
if (Date.now() - stat45.mtimeMs < ONE_DAY_MS) {
|
|
@@ -527305,7 +527323,7 @@ __export(exports_asciicast, {
|
|
|
527305
527323
|
_resetRecordingStateForTesting: () => _resetRecordingStateForTesting
|
|
527306
527324
|
});
|
|
527307
527325
|
import { appendFile as appendFile6, rename as rename10 } from "fs/promises";
|
|
527308
|
-
import { basename as basename54, dirname as dirname58, join as
|
|
527326
|
+
import { basename as basename54, dirname as dirname58, join as join141 } from "path";
|
|
527309
527327
|
function getRecordFilePath() {
|
|
527310
527328
|
if (recordingState.filePath !== null) {
|
|
527311
527329
|
return recordingState.filePath;
|
|
@@ -527316,10 +527334,10 @@ function getRecordFilePath() {
|
|
|
527316
527334
|
if (!isEnvTruthy(process.env.VIVUS_CODE_TERMINAL_RECORDING)) {
|
|
527317
527335
|
return null;
|
|
527318
527336
|
}
|
|
527319
|
-
const projectsDir =
|
|
527320
|
-
const projectDir =
|
|
527337
|
+
const projectsDir = join141(getVivusConfigHomeDir(), "projects");
|
|
527338
|
+
const projectDir = join141(projectsDir, sanitizePath2(getOriginalCwd()));
|
|
527321
527339
|
recordingState.timestamp = Date.now();
|
|
527322
|
-
recordingState.filePath =
|
|
527340
|
+
recordingState.filePath = join141(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
|
|
527323
527341
|
return recordingState.filePath;
|
|
527324
527342
|
}
|
|
527325
527343
|
function _resetRecordingStateForTesting() {
|
|
@@ -527328,13 +527346,13 @@ function _resetRecordingStateForTesting() {
|
|
|
527328
527346
|
}
|
|
527329
527347
|
function getSessionRecordingPaths() {
|
|
527330
527348
|
const sessionId = getSessionId();
|
|
527331
|
-
const projectsDir =
|
|
527332
|
-
const projectDir =
|
|
527349
|
+
const projectsDir = join141(getVivusConfigHomeDir(), "projects");
|
|
527350
|
+
const projectDir = join141(projectsDir, sanitizePath2(getOriginalCwd()));
|
|
527333
527351
|
try {
|
|
527334
527352
|
const entries = getFsImplementation().readdirSync(projectDir);
|
|
527335
527353
|
const names = typeof entries[0] === "string" ? entries : entries.map((e) => e.name);
|
|
527336
527354
|
const files2 = names.filter((f) => f.startsWith(sessionId) && f.endsWith(".cast")).sort();
|
|
527337
|
-
return files2.map((f) =>
|
|
527355
|
+
return files2.map((f) => join141(projectDir, f));
|
|
527338
527356
|
} catch {
|
|
527339
527357
|
return [];
|
|
527340
527358
|
}
|
|
@@ -527344,9 +527362,9 @@ async function renameRecordingForSession() {
|
|
|
527344
527362
|
if (!oldPath || recordingState.timestamp === 0) {
|
|
527345
527363
|
return;
|
|
527346
527364
|
}
|
|
527347
|
-
const projectsDir =
|
|
527348
|
-
const projectDir =
|
|
527349
|
-
const newPath =
|
|
527365
|
+
const projectsDir = join141(getVivusConfigHomeDir(), "projects");
|
|
527366
|
+
const projectDir = join141(projectsDir, sanitizePath2(getOriginalCwd()));
|
|
527367
|
+
const newPath = join141(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
|
|
527350
527368
|
if (oldPath === newPath) {
|
|
527351
527369
|
return;
|
|
527352
527370
|
}
|
|
@@ -528967,7 +528985,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
|
|
|
528967
528985
|
} catch {}
|
|
528968
528986
|
const data = {
|
|
528969
528987
|
trigger,
|
|
528970
|
-
version: "1.1.
|
|
528988
|
+
version: "1.1.31+c38c44f",
|
|
528971
528989
|
platform: process.platform,
|
|
528972
528990
|
transcript,
|
|
528973
528991
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -530253,7 +530271,7 @@ var init_useChromeExtensionNotification = __esm(() => {
|
|
|
530253
530271
|
});
|
|
530254
530272
|
|
|
530255
530273
|
// src/utils/plugins/officialMarketplaceStartupCheck.ts
|
|
530256
|
-
import { join as
|
|
530274
|
+
import { join as join142 } from "path";
|
|
530257
530275
|
function isOfficialMarketplaceAutoInstallDisabled() {
|
|
530258
530276
|
return isEnvTruthy(process.env.VIVUS_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL);
|
|
530259
530277
|
}
|
|
@@ -530336,7 +530354,7 @@ async function checkAndInstallOfficialMarketplace() {
|
|
|
530336
530354
|
return { installed: false, skipped: true, reason: "policy_blocked" };
|
|
530337
530355
|
}
|
|
530338
530356
|
const cacheDir = getMarketplacesCacheDir();
|
|
530339
|
-
const installLocation =
|
|
530357
|
+
const installLocation = join142(cacheDir, OFFICIAL_MARKETPLACE_NAME);
|
|
530340
530358
|
const gcsSha = await fetchOfficialMarketplaceFromGcs(installLocation, cacheDir);
|
|
530341
530359
|
if (gcsSha !== null) {
|
|
530342
530360
|
const known = await loadKnownMarketplacesConfig();
|
|
@@ -533357,7 +533375,7 @@ var init_usePluginRecommendationBase = __esm(() => {
|
|
|
533357
533375
|
});
|
|
533358
533376
|
|
|
533359
533377
|
// src/hooks/useLspPluginRecommendation.tsx
|
|
533360
|
-
import { extname as extname15, join as
|
|
533378
|
+
import { extname as extname15, join as join143 } from "path";
|
|
533361
533379
|
function useLspPluginRecommendation() {
|
|
533362
533380
|
const $2 = import_compiler_runtime356.c(12);
|
|
533363
533381
|
const trackedFiles = useAppState(_temp244);
|
|
@@ -533442,7 +533460,7 @@ function useLspPluginRecommendation() {
|
|
|
533442
533460
|
case "yes": {
|
|
533443
533461
|
installPluginAndNotify(pluginId, pluginName, "lsp-plugin", addNotification, async (pluginData) => {
|
|
533444
533462
|
logForDebugging(`[useLspPluginRecommendation] Installing plugin: ${pluginId}`);
|
|
533445
|
-
const localSourcePath = typeof pluginData.entry.source === "string" ?
|
|
533463
|
+
const localSourcePath = typeof pluginData.entry.source === "string" ? join143(pluginData.marketplaceInstallLocation, pluginData.entry.source) : undefined;
|
|
533446
533464
|
await cacheAndRegisterPlugin(pluginId, pluginData.entry, "user", undefined, localSourcePath);
|
|
533447
533465
|
const settings = getSettingsForSource("userSettings");
|
|
533448
533466
|
updateSettingsForSource("userSettings", {
|
|
@@ -536286,7 +536304,7 @@ var exports_REPL = {};
|
|
|
536286
536304
|
__export(exports_REPL, {
|
|
536287
536305
|
REPL: () => REPL
|
|
536288
536306
|
});
|
|
536289
|
-
import { dirname as dirname60, join as
|
|
536307
|
+
import { dirname as dirname60, join as join144 } from "path";
|
|
536290
536308
|
import { tmpdir as tmpdir12 } from "os";
|
|
536291
536309
|
import { writeFile as writeFile44 } from "fs/promises";
|
|
536292
536310
|
import { randomUUID as randomUUID48 } from "crypto";
|
|
@@ -538882,7 +538900,7 @@ Note: ctrl + z now suspends Vivus, ctrl + _ undoes input.
|
|
|
538882
538900
|
const w = Math.max(80, (process.stdout.columns ?? 80) - 6);
|
|
538883
538901
|
const raw = await renderMessagesToPlainText(deferredMessages, tools, w);
|
|
538884
538902
|
const text2 = raw.replace(/[ \t]+$/gm, "");
|
|
538885
|
-
const path25 =
|
|
538903
|
+
const path25 = join144(tmpdir12(), `cc-transcript-${Date.now()}.txt`);
|
|
538886
538904
|
await writeFile44(path25, text2);
|
|
538887
538905
|
const opened = openFileInExternalEditor(path25);
|
|
538888
538906
|
setStatus(opened ? `opening ${path25}` : `wrote ${path25} · no $VISUAL/$EDITOR set`);
|
|
@@ -540386,7 +540404,7 @@ function WelcomeV2() {
|
|
|
540386
540404
|
dimColor: true,
|
|
540387
540405
|
children: [
|
|
540388
540406
|
"v",
|
|
540389
|
-
"1.1.
|
|
540407
|
+
"1.1.31+c38c44f",
|
|
540390
540408
|
" "
|
|
540391
540409
|
]
|
|
540392
540410
|
}, undefined, true, undefined, this)
|
|
@@ -540586,7 +540604,7 @@ function WelcomeV2() {
|
|
|
540586
540604
|
dimColor: true,
|
|
540587
540605
|
children: [
|
|
540588
540606
|
"v",
|
|
540589
|
-
"1.1.
|
|
540607
|
+
"1.1.31+c38c44f",
|
|
540590
540608
|
" "
|
|
540591
540609
|
]
|
|
540592
540610
|
}, undefined, true, undefined, this)
|
|
@@ -540812,7 +540830,7 @@ function AppleTerminalWelcomeV2(t0) {
|
|
|
540812
540830
|
dimColor: true,
|
|
540813
540831
|
children: [
|
|
540814
540832
|
"v",
|
|
540815
|
-
"1.1.
|
|
540833
|
+
"1.1.31+c38c44f",
|
|
540816
540834
|
" "
|
|
540817
540835
|
]
|
|
540818
540836
|
}, undefined, true, undefined, this);
|
|
@@ -541066,7 +541084,7 @@ function AppleTerminalWelcomeV2(t0) {
|
|
|
541066
541084
|
dimColor: true,
|
|
541067
541085
|
children: [
|
|
541068
541086
|
"v",
|
|
541069
|
-
"1.1.
|
|
541087
|
+
"1.1.31+c38c44f",
|
|
541070
541088
|
" "
|
|
541071
541089
|
]
|
|
541072
541090
|
}, undefined, true, undefined, this);
|
|
@@ -544082,12 +544100,12 @@ function cliOk(msg) {
|
|
|
544082
544100
|
}
|
|
544083
544101
|
|
|
544084
544102
|
// src/utils/errorLogSink.ts
|
|
544085
|
-
import { dirname as dirname62, join as
|
|
544103
|
+
import { dirname as dirname62, join as join145 } from "path";
|
|
544086
544104
|
function getErrorsPath() {
|
|
544087
|
-
return
|
|
544105
|
+
return join145(CACHE_PATHS.errors(), DATE + ".jsonl");
|
|
544088
544106
|
}
|
|
544089
544107
|
function getMCPLogsPath(serverName) {
|
|
544090
|
-
return
|
|
544108
|
+
return join145(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
|
|
544091
544109
|
}
|
|
544092
544110
|
function createJsonlWriter(options2) {
|
|
544093
544111
|
const writer = createBufferedWriter(options2);
|
|
@@ -544131,7 +544149,7 @@ function appendToLog(path25, message) {
|
|
|
544131
544149
|
cwd: getFsImplementation().cwd(),
|
|
544132
544150
|
userType: process.env.USER_TYPE,
|
|
544133
544151
|
sessionId: getSessionId(),
|
|
544134
|
-
version: "1.1.
|
|
544152
|
+
version: "1.1.31+c38c44f"
|
|
544135
544153
|
};
|
|
544136
544154
|
getLogWriter(path25).write(messageWithTimestamp);
|
|
544137
544155
|
}
|
|
@@ -544430,7 +544448,7 @@ var init_sessionMemory = __esm(() => {
|
|
|
544430
544448
|
// src/utils/iTermBackup.ts
|
|
544431
544449
|
import { copyFile as copyFile11, stat as stat47 } from "fs/promises";
|
|
544432
544450
|
import { homedir as homedir38 } from "os";
|
|
544433
|
-
import { join as
|
|
544451
|
+
import { join as join146 } from "path";
|
|
544434
544452
|
function markITerm2SetupComplete() {
|
|
544435
544453
|
saveGlobalConfig((current) => ({
|
|
544436
544454
|
...current,
|
|
@@ -544445,7 +544463,7 @@ function getIterm2RecoveryInfo() {
|
|
|
544445
544463
|
};
|
|
544446
544464
|
}
|
|
544447
544465
|
function getITerm2PlistPath() {
|
|
544448
|
-
return
|
|
544466
|
+
return join146(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
|
|
544449
544467
|
}
|
|
544450
544468
|
async function checkAndRestoreITerm2Backup() {
|
|
544451
544469
|
const { inProgress, backupPath } = getIterm2RecoveryInfo();
|
|
@@ -547810,7 +547828,7 @@ var init_idleTimeout = __esm(() => {
|
|
|
547810
547828
|
// src/bridge/inboundAttachments.ts
|
|
547811
547829
|
import { randomUUID as randomUUID51 } from "crypto";
|
|
547812
547830
|
import { mkdir as mkdir42, writeFile as writeFile46 } from "fs/promises";
|
|
547813
|
-
import { basename as basename55, join as
|
|
547831
|
+
import { basename as basename55, join as join147 } from "path";
|
|
547814
547832
|
function debug(msg) {
|
|
547815
547833
|
logForDebugging(`[bridge:inbound-attach] ${msg}`);
|
|
547816
547834
|
}
|
|
@@ -547826,7 +547844,7 @@ function sanitizeFileName(name) {
|
|
|
547826
547844
|
return base2 || "attachment";
|
|
547827
547845
|
}
|
|
547828
547846
|
function uploadsDir() {
|
|
547829
|
-
return
|
|
547847
|
+
return join147(getVivusConfigHomeDir(), "uploads", getSessionId());
|
|
547830
547848
|
}
|
|
547831
547849
|
async function resolveOne(att) {
|
|
547832
547850
|
const token = getBridgeAccessToken();
|
|
@@ -547855,7 +547873,7 @@ async function resolveOne(att) {
|
|
|
547855
547873
|
const safeName = sanitizeFileName(att.file_name);
|
|
547856
547874
|
const prefix = (att.file_uuid.slice(0, 8) || randomUUID51().slice(0, 8)).replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
547857
547875
|
const dir = uploadsDir();
|
|
547858
|
-
const outPath =
|
|
547876
|
+
const outPath = join147(dir, `${prefix}-${safeName}`);
|
|
547859
547877
|
try {
|
|
547860
547878
|
await mkdir42(dir, { recursive: true });
|
|
547861
547879
|
await writeFile46(outPath, data);
|
|
@@ -547955,7 +547973,7 @@ var init_sessionUrl = __esm(() => {
|
|
|
547955
547973
|
|
|
547956
547974
|
// src/utils/plugins/zipCacheAdapters.ts
|
|
547957
547975
|
import { readFile as readFile50 } from "fs/promises";
|
|
547958
|
-
import { join as
|
|
547976
|
+
import { join as join148 } from "path";
|
|
547959
547977
|
async function readZipCacheKnownMarketplaces() {
|
|
547960
547978
|
try {
|
|
547961
547979
|
const content = await readFile50(getZipCacheKnownMarketplacesPath(), "utf-8");
|
|
@@ -547980,13 +547998,13 @@ async function saveMarketplaceJsonToZipCache(marketplaceName, installLocation) {
|
|
|
547980
547998
|
const content = await readMarketplaceJsonContent(installLocation);
|
|
547981
547999
|
if (content !== null) {
|
|
547982
548000
|
const relPath = getMarketplaceJsonRelativePath(marketplaceName);
|
|
547983
|
-
await atomicWriteToZipCache(
|
|
548001
|
+
await atomicWriteToZipCache(join148(zipCachePath, relPath), content);
|
|
547984
548002
|
}
|
|
547985
548003
|
}
|
|
547986
548004
|
async function readMarketplaceJsonContent(dir) {
|
|
547987
548005
|
const candidates = [
|
|
547988
|
-
|
|
547989
|
-
|
|
548006
|
+
join148(dir, ".vivus-plugin", "marketplace.json"),
|
|
548007
|
+
join148(dir, "marketplace.json"),
|
|
547990
548008
|
dir
|
|
547991
548009
|
];
|
|
547992
548010
|
for (const candidate of candidates) {
|
|
@@ -548116,8 +548134,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
548116
548134
|
}
|
|
548117
548135
|
async function checkEnvLessBridgeMinVersion() {
|
|
548118
548136
|
const cfg = await getEnvLessBridgeConfig();
|
|
548119
|
-
if (cfg.min_version && lt("1.1.
|
|
548120
|
-
return `Your version of Vivus (${"1.1.
|
|
548137
|
+
if (cfg.min_version && lt("1.1.31+c38c44f", cfg.min_version)) {
|
|
548138
|
+
return `Your version of Vivus (${"1.1.31+c38c44f"}) is too old for Remote Control.
|
|
548121
548139
|
Version ${cfg.min_version} or higher is required. Run \`vivus update\` to update.`;
|
|
548122
548140
|
}
|
|
548123
548141
|
return null;
|
|
@@ -548445,9 +548463,9 @@ __export(exports_bridgePointer, {
|
|
|
548445
548463
|
BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
|
|
548446
548464
|
});
|
|
548447
548465
|
import { mkdir as mkdir43, readFile as readFile51, stat as stat48, unlink as unlink24, writeFile as writeFile47 } from "fs/promises";
|
|
548448
|
-
import { dirname as dirname63, join as
|
|
548466
|
+
import { dirname as dirname63, join as join149 } from "path";
|
|
548449
548467
|
function getBridgePointerPath(dir) {
|
|
548450
|
-
return
|
|
548468
|
+
return join149(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
|
|
548451
548469
|
}
|
|
548452
548470
|
async function writeBridgePointer(dir, pointer) {
|
|
548453
548471
|
const path25 = getBridgePointerPath(dir);
|
|
@@ -548591,7 +548609,7 @@ async function initBridgeCore(params) {
|
|
|
548591
548609
|
const rawApi = createBridgeApiClient({
|
|
548592
548610
|
baseUrl,
|
|
548593
548611
|
getAccessToken,
|
|
548594
|
-
runnerVersion: "1.1.
|
|
548612
|
+
runnerVersion: "1.1.31+c38c44f",
|
|
548595
548613
|
onDebug: logForDebugging,
|
|
548596
548614
|
onAuth401,
|
|
548597
548615
|
getTrustedDeviceToken
|
|
@@ -554256,7 +554274,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
|
|
|
554256
554274
|
setCwd(cwd3);
|
|
554257
554275
|
const server = new Server({
|
|
554258
554276
|
name: "vivus/tengu",
|
|
554259
|
-
version: "1.1.
|
|
554277
|
+
version: "1.1.31+c38c44f"
|
|
554260
554278
|
}, {
|
|
554261
554279
|
capabilities: {
|
|
554262
554280
|
tools: {}
|
|
@@ -554388,14 +554406,14 @@ __export(exports_vivusDesktop, {
|
|
|
554388
554406
|
});
|
|
554389
554407
|
import { readdir as readdir30, readFile as readFile53, stat as stat50 } from "fs/promises";
|
|
554390
554408
|
import { homedir as homedir39 } from "os";
|
|
554391
|
-
import { join as
|
|
554409
|
+
import { join as join150 } from "path";
|
|
554392
554410
|
async function getVivusDesktopConfigPath() {
|
|
554393
554411
|
const platform5 = getPlatform();
|
|
554394
554412
|
if (!SUPPORTED_PLATFORMS.includes(platform5)) {
|
|
554395
554413
|
throw new Error(`Unsupported platform: ${platform5} - Vivus Desktop integration only works on macOS and WSL.`);
|
|
554396
554414
|
}
|
|
554397
554415
|
if (platform5 === "macos") {
|
|
554398
|
-
return
|
|
554416
|
+
return join150(homedir39(), "Library", "Application Support", "Vivus", "vivus_desktop_config.json");
|
|
554399
554417
|
}
|
|
554400
554418
|
const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
|
|
554401
554419
|
if (windowsHome) {
|
|
@@ -554414,7 +554432,7 @@ async function getVivusDesktopConfigPath() {
|
|
|
554414
554432
|
if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
|
|
554415
554433
|
continue;
|
|
554416
554434
|
}
|
|
554417
|
-
const potentialConfigPath =
|
|
554435
|
+
const potentialConfigPath = join150(usersDir, user.name, "AppData", "Roaming", "Vivus", "vivus_desktop_config.json");
|
|
554418
554436
|
try {
|
|
554419
554437
|
await stat50(potentialConfigPath);
|
|
554420
554438
|
return potentialConfigPath;
|
|
@@ -555323,12 +555341,12 @@ __export(exports_install, {
|
|
|
555323
555341
|
install: () => install
|
|
555324
555342
|
});
|
|
555325
555343
|
import { homedir as homedir40 } from "node:os";
|
|
555326
|
-
import { join as
|
|
555344
|
+
import { join as join151 } from "node:path";
|
|
555327
555345
|
function getInstallationPath2() {
|
|
555328
555346
|
const isWindows2 = env3.platform === "win32";
|
|
555329
555347
|
const homeDir = homedir40();
|
|
555330
555348
|
if (isWindows2) {
|
|
555331
|
-
const windowsPath =
|
|
555349
|
+
const windowsPath = join151(homeDir, ".local", "bin", "vivus.exe");
|
|
555332
555350
|
return windowsPath.replace(/\//g, "\\");
|
|
555333
555351
|
}
|
|
555334
555352
|
return "~/.local/bin/vivus";
|
|
@@ -555867,7 +555885,7 @@ __export(exports_update, {
|
|
|
555867
555885
|
});
|
|
555868
555886
|
async function update() {
|
|
555869
555887
|
logEvent("tengu_update_check", {});
|
|
555870
|
-
writeToStdout(`Current version: ${"1.1.
|
|
555888
|
+
writeToStdout(`Current version: ${"1.1.31+c38c44f"}
|
|
555871
555889
|
`);
|
|
555872
555890
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
555873
555891
|
writeToStdout(`Checking for updates to ${channel} version...
|
|
@@ -555942,8 +555960,8 @@ async function update() {
|
|
|
555942
555960
|
writeToStdout(`Vivus is managed by Homebrew.
|
|
555943
555961
|
`);
|
|
555944
555962
|
const latest = await getLatestVersion(channel);
|
|
555945
|
-
if (latest && !gte("1.1.
|
|
555946
|
-
writeToStdout(`Update available: ${"1.1.
|
|
555963
|
+
if (latest && !gte("1.1.31+c38c44f", latest)) {
|
|
555964
|
+
writeToStdout(`Update available: ${"1.1.31+c38c44f"} → ${latest}
|
|
555947
555965
|
`);
|
|
555948
555966
|
writeToStdout(`
|
|
555949
555967
|
`);
|
|
@@ -555959,8 +555977,8 @@ async function update() {
|
|
|
555959
555977
|
writeToStdout(`Vivus is managed by winget.
|
|
555960
555978
|
`);
|
|
555961
555979
|
const latest = await getLatestVersion(channel);
|
|
555962
|
-
if (latest && !gte("1.1.
|
|
555963
|
-
writeToStdout(`Update available: ${"1.1.
|
|
555980
|
+
if (latest && !gte("1.1.31+c38c44f", latest)) {
|
|
555981
|
+
writeToStdout(`Update available: ${"1.1.31+c38c44f"} → ${latest}
|
|
555964
555982
|
`);
|
|
555965
555983
|
writeToStdout(`
|
|
555966
555984
|
`);
|
|
@@ -555976,8 +555994,8 @@ async function update() {
|
|
|
555976
555994
|
writeToStdout(`Vivus is managed by apk.
|
|
555977
555995
|
`);
|
|
555978
555996
|
const latest = await getLatestVersion(channel);
|
|
555979
|
-
if (latest && !gte("1.1.
|
|
555980
|
-
writeToStdout(`Update available: ${"1.1.
|
|
555997
|
+
if (latest && !gte("1.1.31+c38c44f", latest)) {
|
|
555998
|
+
writeToStdout(`Update available: ${"1.1.31+c38c44f"} → ${latest}
|
|
555981
555999
|
`);
|
|
555982
556000
|
writeToStdout(`
|
|
555983
556001
|
`);
|
|
@@ -556042,11 +556060,11 @@ async function update() {
|
|
|
556042
556060
|
`);
|
|
556043
556061
|
await gracefulShutdown(1);
|
|
556044
556062
|
}
|
|
556045
|
-
if (result.latestVersion === "1.1.
|
|
556046
|
-
writeToStdout(source_default.green(`Vivus is up to date (${"1.1.
|
|
556063
|
+
if (result.latestVersion === "1.1.31+c38c44f") {
|
|
556064
|
+
writeToStdout(source_default.green(`Vivus is up to date (${"1.1.31+c38c44f"})`) + `
|
|
556047
556065
|
`);
|
|
556048
556066
|
} else {
|
|
556049
|
-
writeToStdout(source_default.green(`Successfully updated from ${"1.1.
|
|
556067
|
+
writeToStdout(source_default.green(`Successfully updated from ${"1.1.31+c38c44f"} to version ${result.latestVersion}`) + `
|
|
556050
556068
|
`);
|
|
556051
556069
|
await regenerateCompletionCache();
|
|
556052
556070
|
}
|
|
@@ -556103,12 +556121,12 @@ async function update() {
|
|
|
556103
556121
|
`);
|
|
556104
556122
|
await gracefulShutdown(1);
|
|
556105
556123
|
}
|
|
556106
|
-
if (latestVersion === "1.1.
|
|
556107
|
-
writeToStdout(source_default.green(`Vivus is up to date (${"1.1.
|
|
556124
|
+
if (latestVersion === "1.1.31+c38c44f") {
|
|
556125
|
+
writeToStdout(source_default.green(`Vivus is up to date (${"1.1.31+c38c44f"})`) + `
|
|
556108
556126
|
`);
|
|
556109
556127
|
await gracefulShutdown(0);
|
|
556110
556128
|
}
|
|
556111
|
-
writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.
|
|
556129
|
+
writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.31+c38c44f"})
|
|
556112
556130
|
`);
|
|
556113
556131
|
writeToStdout(`Installing update...
|
|
556114
556132
|
`);
|
|
@@ -556153,7 +556171,7 @@ async function update() {
|
|
|
556153
556171
|
logForDebugging(`update: Installation status: ${status2}`);
|
|
556154
556172
|
switch (status2) {
|
|
556155
556173
|
case "success":
|
|
556156
|
-
writeToStdout(source_default.green(`Successfully updated from ${"1.1.
|
|
556174
|
+
writeToStdout(source_default.green(`Successfully updated from ${"1.1.31+c38c44f"} to version ${latestVersion}`) + `
|
|
556157
556175
|
`);
|
|
556158
556176
|
await regenerateCompletionCache();
|
|
556159
556177
|
break;
|
|
@@ -557127,7 +557145,7 @@ function completeOnboarding() {
|
|
|
557127
557145
|
saveGlobalConfig((current) => ({
|
|
557128
557146
|
...current,
|
|
557129
557147
|
hasCompletedOnboarding: true,
|
|
557130
|
-
lastOnboardingVersion: "1.1.
|
|
557148
|
+
lastOnboardingVersion: "1.1.31+c38c44f"
|
|
557131
557149
|
}));
|
|
557132
557150
|
}
|
|
557133
557151
|
function showDialog(root2, renderer) {
|
|
@@ -561301,7 +561319,7 @@ ${customInstructions}` : customInstructions;
|
|
|
561301
561319
|
}
|
|
561302
561320
|
}
|
|
561303
561321
|
logForDiagnosticsNoPII("info", "started", {
|
|
561304
|
-
version: "1.1.
|
|
561322
|
+
version: "1.1.31+c38c44f",
|
|
561305
561323
|
is_native_binary: isInBundledMode()
|
|
561306
561324
|
});
|
|
561307
561325
|
registerCleanup(async () => {
|
|
@@ -562085,7 +562103,7 @@ Usage: vivus --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
562085
562103
|
pendingHookMessages
|
|
562086
562104
|
}, renderAndRun);
|
|
562087
562105
|
}
|
|
562088
|
-
}).version("1.1.
|
|
562106
|
+
}).version("1.1.31+c38c44f (Vivus)", "-v, --version", "Output the version number");
|
|
562089
562107
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
562090
562108
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
562091
562109
|
if (canUserConfigureAdvisor()) {
|