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.
Files changed (2) hide show
  1. package/dist/main.js +603 -585
  2. 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:05:22.500Z
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.29+0781d19"}`;
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.29+0781d19"} (${process.env.USER_TYPE}, ${process.env.VIVUS_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
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.29+0781d19"}${suffix}`;
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.29+0781d19",
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.29+0781d19".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
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.29+0781d19",
119647
+ version: "1.1.31+c38c44f",
119648
119648
  versionBase: getVersionBase(),
119649
- buildTime: "2026-06-23T19:05:21.699Z",
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.29+0781d19"
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.29+0781d19");
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 redirectStrayClaudeMemoryPath(absPath) {
121062
+ function redirectStrayClaudePath(absPath) {
121063
121063
  if (typeof absPath !== "string" || !absPath)
121064
121064
  return absPath;
121065
- const m = absPath.match(/[/\\]\.claude[/\\]projects[/\\][^/\\]+[/\\]memory[/\\](.+)$/);
121066
- if (!m)
121067
- return absPath;
121068
- const rest = m[1].replace(/[/\\]+$/, "");
121069
- if (!rest)
121070
- return absPath;
121071
- return join23(getAutoMemPath(), rest);
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.29+0781d19"}.${fingerprint}`;
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.29+0781d19";
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 join49 } from "path";
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 : join49(currentCwd, 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 join50 } from "path";
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 = join50(os3.homedir(), fileName);
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 = join50(getVivusConfigHomeDir(), "shell-snapshots");
210071
+ const snapshotsDir = join51(getVivusConfigHomeDir(), "shell-snapshots");
210054
210072
  logForDebugging(`Snapshots directory: ${snapshotsDir}`);
210055
- const shellSnapshotPath = join50(snapshotsDir, `snapshot-${shellType}-${timestamp}-${randomId}.sh`);
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 join51 } from "path";
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 = join51(getToolResultsDir(), `pdf-${uuid3}`);
211214
+ const outputDir = join52(getToolResultsDir(), `pdf-${uuid3}`);
211197
211215
  await mkdir12(outputDir, { recursive: true });
211198
- const prefix = join51(outputDir, "page");
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 join52 } from "path";
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 join52(getVivusConfigHomeDir(), "keybindings.json");
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 join54 } from "path";
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 join54(getTasksDir(taskListId), HIGH_WATER_MARK_FILE);
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 = join54(dir, file2);
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 join54(getVivusConfigHomeDir(), "tasks", sanitizePathComponent(taskListId));
215178
+ return join55(getVivusConfigHomeDir(), "tasks", sanitizePathComponent(taskListId));
215161
215179
  }
215162
215180
  function getTaskPath(taskListId, taskId) {
215163
- return join54(getTasksDir(taskListId), `${sanitizePathComponent(taskId)}.json`);
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 join54(getTasksDir(taskListId), ".lock");
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 join55 } from "path";
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 ? join55(home, "AppData", "Roaming") : join55(home, "AppData", "Local");
233517
+ const appDataBase = config3.windows.useRoaming ? join56(home, "AppData", "Roaming") : join56(home, "AppData", "Local");
233500
233518
  paths2.push({
233501
233519
  browser: browserId,
233502
- path: join55(appDataBase, ...config3.windows.dataPath)
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: join55(home, ...dataPath)
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: join55(home, ...config3.macos.nativeMessagingPath)
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: join55(home, ...config3.linux.nativeMessagingPath)
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 ? join55(home, "AppData", "Roaming") : join55(home, "AppData", "Local");
233593
- const dataPath = join55(appDataBase, ...config3.windows.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 join55(getSocketDir(), `${process.pid}.sock`);
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(join55(socketDir, file2));
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 = join55(tmpdir5(), legacyName);
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 join56 } from "path";
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 = join56(pluginPath, relativePath);
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 join57, parse as parse8 } from "path";
234322
+ import { dirname as dirname25, join as join58, parse as parse8 } from "path";
234305
234323
  function getEnterpriseMcpFilePath() {
234306
- return join57(getManagedFilePath(), "managed-mcp.json");
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 = join57(getCwd(), ".mcp.json");
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 = join57(getCwd(), ".mcp.json");
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 = join57(dir, ".mcp.json");
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 join58 } from "path";
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 join58(getCwd(), ".mcp.json");
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 join59 } from "path";
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 = join59(vivusDir, `mcp-refresh-${sanitizedKey}.lock`);
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 join60 } from "path";
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 = join60(getToolResultsDir(), `${persistId}.${ext}`);
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.29+0781d19");
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.29+0781d19");
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 join61 } from "path";
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 join61(getVivusConfigHomeDir(), "mcp-needs-auth-cache.json");
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.29+0781d19",
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.29+0781d19",
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 join62 } from "path";
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 || join62(homeDir, "AppData", "Roaming");
244465
- const localAppData = process.env.LOCALAPPDATA || join62(homeDir, "AppData", "Local");
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(join62(homeDir, "Library", "Application Support", "JetBrains"), join62(homeDir, "Library", "Application Support"));
244486
+ directories.push(join63(homeDir, "Library", "Application Support", "JetBrains"), join63(homeDir, "Library", "Application Support"));
244469
244487
  if (ideName.toLowerCase() === "androidstudio") {
244470
- directories.push(join62(homeDir, "Library", "Application Support", "Google"));
244488
+ directories.push(join63(homeDir, "Library", "Application Support", "Google"));
244471
244489
  }
244472
244490
  break;
244473
244491
  case "win32":
244474
- directories.push(join62(appData, "JetBrains"), join62(localAppData, "JetBrains"), join62(appData));
244492
+ directories.push(join63(appData, "JetBrains"), join63(localAppData, "JetBrains"), join63(appData));
244475
244493
  if (ideName.toLowerCase() === "androidstudio") {
244476
- directories.push(join62(localAppData, "Google"));
244494
+ directories.push(join63(localAppData, "Google"));
244477
244495
  }
244478
244496
  break;
244479
244497
  case "linux":
244480
- directories.push(join62(homeDir, ".config", "JetBrains"), join62(homeDir, ".local", "share", "JetBrains"));
244498
+ directories.push(join63(homeDir, ".config", "JetBrains"), join63(homeDir, ".local", "share", "JetBrains"));
244481
244499
  for (const pattern of idePatterns) {
244482
- directories.push(join62(homeDir, "." + pattern));
244500
+ directories.push(join63(homeDir, "." + pattern));
244483
244501
  }
244484
244502
  if (ideName.toLowerCase() === "androidstudio") {
244485
- directories.push(join62(homeDir, ".config", "Google"));
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 = join62(baseDir, entry.name);
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 = join62(dir, "plugins");
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 = join62(dir, PLUGIN_PREFIX);
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 join63, sep as pathSeparator, resolve as resolve21 } from "path";
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 = join63(ideLockFilePath, file2.name);
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 = [join63(getVivusConfigHomeDir(), "ide")];
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(join63(usersDir, user.name, ".vivus", "ide"));
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.29+0781d19";
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 = join63(os4.homedir(), ".npmrc");
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 = join63(os4.tmpdir(), `vivus-${version2}-${Date.now()}.vsix`);
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 join64 } from "path";
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 = join64(memoryDir, relativePath);
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 join65 } from "path";
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 = join65(getTeamsDir(), safeTeam, "inboxes");
249397
- const fullPath = join65(inboxDir, `${safeAgentName}.json`);
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 = join65(getTeamsDir(), safeTeam, "inboxes");
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 join66 } from "path";
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 join66(getVivusConfigHomeDir(), "dump-prompts", `${agentIdOrSessionId ?? getSessionId()}.jsonl`);
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 join67 } from "path";
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 join67(getVivusConfigHomeDir(), CACHE_FILENAME);
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 join68 } from "path";
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: join68(baseTmpDir, screenshotFilename),
256619
- linux: join68(baseTmpDir, screenshotFilename),
256620
- win32: join68(baseTmpDir, screenshotFilename)
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 join69 } from "path";
256817
+ import { join as join70 } from "path";
256800
256818
  function getImageStoreDir() {
256801
- return join69(getVivusConfigHomeDir(), IMAGE_STORE_DIR, getSessionId());
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 join69(getImageStoreDir(), `${imageId}.${extension2}`);
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 = join69(getVivusConfigHomeDir(), IMAGE_STORE_DIR);
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 = join69(baseDir, sessionDir.name);
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 join70 } from "path";
257268
+ import { join as join71 } from "path";
257251
257269
  function getSteps() {
257252
- const hasVivusMd = getFsImplementation().existsSync(join70(getCwd(), "VIVUS.md"));
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 join71 } from "path";
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 join71(homedir19(), "Library", "Preferences", "com.apple.Terminal.plist");
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 join72 } from "path";
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 = join72(home, ".vivus");
257426
+ const vivusDir = join73(home, ".vivus");
257409
257427
  if (shell.endsWith("/zsh") || shell.endsWith("/zsh.exe")) {
257410
- const cacheFile = join72(vivusDir, "completion.zsh");
257428
+ const cacheFile = join73(vivusDir, "completion.zsh");
257411
257429
  return {
257412
257430
  name: "zsh",
257413
- rcFile: join72(home, ".zshrc"),
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 = join72(vivusDir, "completion.bash");
257438
+ const cacheFile = join73(vivusDir, "completion.bash");
257421
257439
  return {
257422
257440
  name: "bash",
257423
- rcFile: join72(home, ".bashrc"),
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 || join72(home, ".config");
257431
- const cacheFile = join72(vivusDir, "completion.fish");
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: join72(xdg, "fish", "config.fish"),
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 join73 } from "path";
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 = join73(homedir21(), platform4() === "win32" ? join73("AppData", "Roaming", editorDir, "User") : platform4() === "darwin" ? join73("Library", "Application Support", editorDir, "User") : join73(".config", editorDir, "User"));
257620
- const keybindingsPath = join73(userDirPath, "keybindings.json");
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(join73(xdgConfigHome, "alacritty", "alacritty.toml"));
257779
+ configPaths.push(join74(xdgConfigHome, "alacritty", "alacritty.toml"));
257762
257780
  } else {
257763
- configPaths.push(join73(homedir21(), ".config", "alacritty", "alacritty.toml"));
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(join73(appData, "alacritty", "alacritty.toml"));
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 = join73(homedir21(), ".config", "zed");
257830
- const keymapPath = join73(zedDir, "keymap.json");
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 join74 } from "path";
257930
+ import { join as join75 } from "path";
257913
257931
  function getPasteStoreDir() {
257914
- return join74(getVivusConfigHomeDir(), PASTE_STORE_DIR);
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 join74(getPasteStoreDir(), `${hash2}.txt`);
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 = join74(pasteDir, file2);
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 join75 } from "path";
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 = join75(getVivusConfigHomeDir(), "history.jsonl");
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 = join75(getVivusConfigHomeDir(), "history.jsonl");
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.29+0781d19");
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.29+0781d19"
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.29+0781d19");
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.29+0781d19");
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.29+0781d19");
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 join76 } from "path";
301635
+ import { join as join77 } from "path";
301618
301636
  function getLocalInstallDir() {
301619
- return join76(getVivusConfigHomeDir(), "local");
301637
+ return join77(getVivusConfigHomeDir(), "local");
301620
301638
  }
301621
301639
  function getLocalVivusPath() {
301622
- return join76(getLocalInstallDir(), "vivus");
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(join76(localInstallDir, "package.json"), jsonStringify({ name: "vivus-local", version: "0.0.1", private: true }, null, 2));
301643
- const wrapperPath = join76(localInstallDir, "vivus");
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(join76(getLocalInstallDir(), "node_modules", ".bin", "vivus"));
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 join77 } from "path";
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: join77(zshConfigDir, ".zshrc"),
301715
- bash: join77(home, ".bashrc"),
301716
- fish: join77(home, ".config/fish/config.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 join78 } from "path";
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.29+0781d19", versionConfig.minVersion)) {
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.29+0781d19"}) needs an update.
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 join78(getVivusConfigHomeDir(), ".update.lock");
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.29+0781d19"
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.29+0781d19"
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 join79, posix as posix5, win32 as win323 } from "path";
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(join79(homedir23(), ".local/bin/vivus"));
302357
- return join79(homedir23(), ".local/bin/vivus");
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 = join79(homedir23(), ".vivus", "local");
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 ? join79(npmPrefix, "vivus") : join79(npmPrefix, "bin", "vivus");
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 ? join79(npmPrefix, "node_modules", packageName) : join79(npmPrefix, "lib", "node_modules", packageName);
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 = join79(homedir23(), ".local", "bin", "vivus");
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 = join79(homedir23(), ".local", "share", "vivus");
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(join79(getManagedFilePath(), "managed-settings.json"), "utf-8");
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 = join79(homeDir, ".local", "bin");
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.29+0781d19" : "unknown";
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 join80 } from "path";
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 ?? join80(home, ".local", "state");
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 ?? join80(home, ".cache");
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 ?? join80(home, ".local", "share");
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 join80(home, ".local", "bin");
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 join81 } from "path";
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(join81(stagingPath, "package.json"), jsonStringify(packageJson, null, 2), { encoding: "utf8", flush: true });
302828
- writeFileSync_DEPRECATED(join81(stagingPath, "package-lock.json"), jsonStringify(packageLock, null, 2), { encoding: "utf8", flush: true });
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 = join81(stagingPath, binaryName);
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 join82 } from "path";
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 = join82(locksDir, lockFile);
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 = join82(locksDir, lockEntry);
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 join83, resolve as resolve22 } from "path";
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: join83(getXDGDataHome(), "vivus", "versions"),
303259
- staging: join83(getXDGCacheHome(), "vivus", "staging"),
303260
- locks: join83(getXDGStateHome(), "vivus", "locks"),
303261
- executable: join83(getUserBinDir(), executableName)
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 = join83(dirs.versions, version2);
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: join83(dirs.staging, version2),
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 = join83(stagingPath, "node_modules", "@anthropic-ai");
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 = join83(nodeModulesDir, nativePackage, "cli");
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 = join83(stagingPath, binaryName);
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.29+0781d19", maxVersion)) {
303501
- logForDebugging(`Native installer: current version ${"1.1.29+0781d19"} is already at or above maxVersion ${maxVersion}, skipping update`);
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.29+0781d19" && await versionIsAvailable(version2) && await isPossibleVivusBinary(executablePath)) {
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 join83(dirs.locks, `${versionName}.lock`);
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(join83(executableDir, file2));
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 = join83(dirs.staging, entry);
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 = join83(dirs.versions, entry);
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 = join83(globalPrefix, "vivus.cmd");
304177
- const binPs1 = join83(globalPrefix, "vivus.ps1");
304178
- const binExe = join83(globalPrefix, "vivus");
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 = join83(globalPrefix, "bin", "vivus");
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") ? join83(globalPrefix, "node_modules", packageName) : join83(globalPrefix, "lib", "node_modules", packageName);
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 = join83(homedir24(), ".vivus", "local");
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 join84, relative as relative7, resolve as resolve23 } from "path";
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 = join84(plugin.path, ".lsp.json");
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 join85, relative as relative8, sep as sep12 } from "path";
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(join85(gitDir, file2)).then(() => true).catch(() => false)));
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 = redirectStrayClaudeMemoryPath(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 = redirectStrayClaudeMemoryPath(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 join86, normalize as normalize12, relative as relative11, sep as sep15 } from "path";
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(join86(getPluginsDirectory(), "cache"));
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 join87, sep as sep16 } from "path";
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 : join87(searchDir, 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 join88 } from "path";
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 join88(getTeamsDir(), sanitizeName(teamName));
336949
+ return join89(getTeamsDir(), sanitizeName(teamName));
336932
336950
  }
336933
336951
  function getTeamFilePath(teamName) {
336934
- return join88(getTeamDir(teamName), "config.json");
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 = join88(worktreePath, ".git");
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 = join88(worktreeGitDir, "..", "..");
337133
- mainRepoPath = join88(mainGitDir, "..");
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 join89 } from "path";
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 = join89(skillsPath, "SKILL.md");
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 = join89(skillsPath, entry.name);
339111
- const skillFilePath = join89(skillDirPath, "SKILL.md");
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 = join89(plugin.path, metadata.source);
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 join90 } from "path";
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 = join90(cachePath, marketplace);
339512
+ const marketplacePath = join91(cachePath, marketplace);
339495
339513
  for (const plugin of await readSubdirs(marketplacePath)) {
339496
- const pluginPath = join90(marketplacePath, plugin);
339514
+ const pluginPath = join91(marketplacePath, plugin);
339497
339515
  for (const version2 of await readSubdirs(pluginPath)) {
339498
- const versionPath = join90(pluginPath, version2);
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 join90(versionPath, ORPHANED_AT_FILENAME2);
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 join91, resolve as resolve29, sep as sep18 } from "path";
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 = join91(installLocation, ".gcs-sha");
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 = join91(staging, rel);
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(join91(staging, ".gcs-sha"), sha);
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 join92, resolve as resolve30, sep as sep19 } from "path";
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 join92(getPluginsDirectory(), "known_marketplaces.json");
339743
+ return join93(getPluginsDirectory(), "known_marketplaces.json");
339726
339744
  }
339727
339745
  function getMarketplacesCacheDir() {
339728
- return join92(getPluginsDirectory(), "marketplaces");
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 = join92(configFile, "..");
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 = join92(seedDir, "known_marketplaces.json");
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 = join92(seedDir, "marketplaces", name);
339882
- const jsonCandidate = join92(seedDir, "marketplaces", `${name}.json`);
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(join92(cwd2, ".gitmodules")).then(() => true, () => false);
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 = join92(cachePath, "..");
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 = join92(cacheDir, `${tempName}.json`);
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 = join92(cacheDir, tempName);
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 = join92(temporaryCachePath, source.path || ".vivus-plugin/marketplace.json");
340405
+ marketplacePath = join93(temporaryCachePath, source.path || ".vivus-plugin/marketplace.json");
340388
340406
  break;
340389
340407
  }
340390
340408
  case "git": {
340391
- temporaryCachePath = join92(cacheDir, tempName);
340409
+ temporaryCachePath = join93(cacheDir, tempName);
340392
340410
  cleanupNeeded = true;
340393
340411
  await cacheMarketplaceFromGit(source.url, temporaryCachePath, source.ref, source.sparsePaths, onProgress);
340394
- marketplacePath = join92(temporaryCachePath, source.path || ".vivus-plugin/marketplace.json");
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 = join92(absPath, ".vivus-plugin", "marketplace.json");
340410
- const claudePath = join92(absPath, ".claude-plugin", "marketplace.json");
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 = join92(cacheDir, source.name);
340423
- marketplacePath = join92(temporaryCachePath, ".vivus-plugin", "marketplace.json");
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 = join92(cacheDir, marketplace.name);
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 = join92(cacheDir, name);
340597
+ const cachePath = join93(cacheDir, name);
340580
340598
  await fs8.rm(cachePath, { recursive: true, force: true });
340581
- const jsonCachePath = join92(cacheDir, `${name}.json`);
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 = join92(installLocation, ".vivus-plugin", "marketplace.json");
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 = join92(installLocation, ".claude-plugin", "marketplace.json");
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 join93 } from "path";
340960
+ import { dirname as dirname40, join as join94 } from "path";
340943
340961
  function getInstalledPluginsFilePath() {
340944
- return join93(getPluginsDirectory(), "installed_plugins.json");
340962
+ return join94(getPluginsDirectory(), "installed_plugins.json");
340945
340963
  }
340946
340964
  function getInstalledPluginsV2FilePath() {
340947
- return join93(getPluginsDirectory(), "installed_plugins_v2.json");
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 = join93(cachePath, entry);
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 = join93(entryPath, subDirent.name);
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 = join93(pluginCachePath, ".vivus-plugin", "plugin.json");
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 = join93(marketplaceInstallLocation, entry.source);
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 = join93(cachePath, sanitizedName);
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 join94, relative as relative15, sep as sep21 } from "path";
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 join94(getAttributionRepoRoot(), filePath);
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 = join94(cwd2, file2);
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(join94(gitDir, indicator));
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 join95,
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 join95(getManagedFilePath(), ".vivus", dir);
352274
+ return join96(getManagedFilePath(), ".vivus", dir);
352257
352275
  case "userSettings":
352258
- return join95(getVivusConfigHomeDir(), dir);
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 = join95(basePath, entry.name);
352429
- const skillFilePath = join95(skillDirPath, "SKILL.md");
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 = join95(currentDir, ".vivus", "skills");
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 = join95(getVivusConfigHomeDir(), "skills");
352708
- const managedSkillsDir = join95(getManagedFilePath(), ".vivus", "skills");
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(join95(dir, ".vivus", "skills"), "projectSettings")));
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(join95(dir, ".vivus", "skills"), "projectSettings"))) : Promise.resolve([]),
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 join96 } from "path";
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 = join96(process.env.VIVUS_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${fixtureName}-${hash2}.json`);
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 = join96(process.env.VIVUS_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${dehydratedInput.map((_) => createHash20("sha1").update(jsonStringify(_)).digest("hex").slice(0, 6)).join("-")}.json`);
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 join97 } from "path";
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 = join97(getVivusConfigHomeDir(), "session-memory", "config", "template.md");
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 = join97(getVivusConfigHomeDir(), "session-memory", "config", "prompt.md");
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 join98 } from "path";
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 = join98(projectDir, name);
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 join99 } from "path";
357994
+ import { join as join100 } from "path";
357977
357995
  function lockPath() {
357978
- return join99(getAutoMemPath(), LOCK_FILE);
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:05:21.699Z").getTime();
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 join100, relative as relative17 } from "path";
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 join100(getVivusTempDir(), "speculation", String(process.pid), id);
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 = join100(overlayPath, rel);
360907
- const dest = join100(cwd2, rel);
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 = join100(overlayPath, rel);
361175
+ const overlayFile = join101(overlayPath, rel);
361158
361176
  await mkdir25(dirname43(overlayFile), { recursive: true });
361159
361177
  try {
361160
- await copyFile8(join100(cwd2, rel), overlayFile);
361178
+ await copyFile8(join101(cwd2, rel), overlayFile);
361161
361179
  } catch {}
361162
361180
  writtenPathsRef.current.add(rel);
361163
361181
  }
361164
- input = { ...input, [pathKey2]: join100(overlayPath, rel) };
361182
+ input = { ...input, [pathKey2]: join101(overlayPath, rel) };
361165
361183
  } else {
361166
361184
  if (writtenPathsRef.current.has(rel)) {
361167
- input = { ...input, [pathKey2]: join100(overlayPath, rel) };
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 join102 } from "path";
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 join102(tmpdir7(), `${prefix}-${id}${extension2}`);
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 join103(output, replacement);
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 = join103(output, rule.append(self2.options));
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 join103(output, replacement) {
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 join103 } from "path";
391865
+ import { join as join104 } from "path";
391848
391866
  function getSessionsDir() {
391849
- return join103(getVivusConfigHomeDir(), "sessions");
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 = join103(dir, `${process.pid}.json`);
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 = join103(getSessionsDir(), `${process.pid}.json`);
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(join103(dir, file2)).catch(() => {});
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 join104, resolve as resolve35, sep as sep24 } from "path";
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 = join104(current, ".vivus", subdir);
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 = join104(currentDir, entry.name);
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 = join104(getVivusConfigHomeDir(), subdir);
393755
- const managedDir = join104(getManagedFilePath(), ".vivus", subdir);
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(join104(gitRoot, ".vivus", subdir));
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 = join104(canonicalRoot, ".vivus", subdir);
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 join105 } from "path";
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 = join105(repoRootPath, dir);
401099
- const destPath = join105(worktreePath, dir);
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 join105(repoRoot, ".vivus", "worktrees");
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 join105(worktreesDir(repoRoot), flattenSlug(slug));
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(join105(repoRoot, ".worktreeinclude"), "utf-8");
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 = join105(repoRoot, relativePath);
401269
- const destPath = join105(worktreePath, relativePath);
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 = join105(repoRoot, localSettingsRelativePath);
401303
+ const sourceSettingsLocal = join106(repoRoot, localSettingsRelativePath);
401286
401304
  try {
401287
- const destSettingsLocal = join105(worktreePath, localSettingsRelativePath);
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 = join105(repoRoot, ".husky");
401298
- const gitHooksPath = join105(repoRoot, ".git", "hooks");
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 = join105(dir, slug);
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 join106, normalize as normalize14, posix as posix8, sep as sep25 } from "path";
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(join106(getOriginalCwd(), ".vivus", "skills")),
405811
+ dir: expandPath(join107(getOriginalCwd(), ".vivus", "skills")),
405794
405812
  prefix: "/.vivus/skills/"
405795
405813
  },
405796
405814
  {
405797
- dir: expandPath(join106(homedir29(), ".vivus", "skills")),
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 = join106(getOriginalCwd(), ".vivus", "commands");
405853
- const agentsDir = join106(getOriginalCwd(), ".vivus", "agents");
405854
- const skillsDir = join106(getOriginalCwd(), ".vivus", "skills");
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 = join106(getPlansDirectory(), getPlanSlug());
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 join106(getProjectDir2(getCwd()), getSessionId(), "session-memory") + sep25;
405881
+ return join107(getProjectDir2(getCwd()), getSessionId(), "session-memory") + sep25;
405864
405882
  }
405865
405883
  function getSessionMemoryPath() {
405866
- return join106(getSessionMemoryDir(), "summary.md");
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 join106(getVivusTempDir(), sanitizePath2(getOriginalCwd())) + sep25;
405906
+ return join107(getVivusTempDir(), sanitizePath2(getOriginalCwd())) + sep25;
405889
405907
  }
405890
405908
  function getScratchpadDir() {
405891
- return join106(getProjectTempDir(), getSessionId(), "scratchpad");
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(join106(getOriginalCwd(), ".vivus", "launch.json"))) {
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 = join106(getVivusConfigHomeDir(), "tasks") + sep25;
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 = join106(getVivusConfigHomeDir(), "teams") + sep25;
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 join106(resolvedBaseTmpDir, getVivusTempDirName()) + sep25;
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 join106(getVivusTempDir(), "bundled-skills", "1.1.29+0781d19", nonce);
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 join107, sep as sep26 } from "path";
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: join107(dirPath, entry.name),
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: join107(dirPath, entry.name),
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.29+0781d19",
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.29+0781d19"
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.29+0781d19"}
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 join109 } from "path";
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 = join109(getVivusConfigHomeDir(), "magic-docs", "prompt.md");
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 join110 } from "path";
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 = join110(COPY_DIR, filename);
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 = join110(tmpdir9(), "vivus");
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 join111 } from "path";
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 = join111(localAppData, "AnthropicVivus");
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.29+0781d19"
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.29+0781d19",
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.29+0781d19";
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 join112 } from "path";
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 = join112(getVivusConfigHomeDir(), "agents");
421144
- const projectAgentsDir = join112(getOriginalCwd(), ".vivus", "agents");
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 = join112(getXDGStateHome(), "vivus", "locks");
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 join113 } from "path";
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 = join113(getVivusConfigHomeDir(), "VIVUS.md");
422053
- const projectMemoryPath = join113(getOriginalCwd(), "VIVUS.md");
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.29+0781d19"}`,
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 join114 } from "path";
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: join114(marketplaceInstallLocation, entry.source),
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 join115 } from "path";
433241
+ import { join as join116 } from "path";
433224
433242
  function getInstallCountsCachePath() {
433225
- return join115(getPluginsDirectory(), INSTALL_COUNTS_CACHE_FILENAME);
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 join116 } from "path";
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 = join116(marketplaceDir, entry.source);
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 = join116(sourcePath, ".vivus-plugin", "plugin.json");
436465
- const claudeManifestPath = join116(sourcePath, ".claude-plugin", "plugin.json");
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 join117 } from "path";
437707
+ import { join as join118 } from "path";
437690
437708
  function getFlaggedPluginsPath() {
437691
- return join117(getPluginsDirectory(), FLAGGED_PLUGINS_FILENAME);
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 join120 } from "path";
447817
+ import { dirname as dirname53, join as join121 } from "path";
447800
447818
  function getChangelogCachePath() {
447801
- return join120(getVivusConfigHomeDir(), "cache", "changelog.md");
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.29+0781d19") {
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.29+0781d19") {
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.29+0781d19";
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.29+0781d19") {
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.29+0781d19") {
451337
+ if (current.lastReleaseNotesSeen === "1.1.31+c38c44f") {
451320
451338
  return current;
451321
451339
  }
451322
451340
  return {
451323
451341
  ...current,
451324
- lastReleaseNotesSeen: "1.1.29+0781d19"
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 join121 } from "path";
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 = join121(thinkbackPlugin.path, "skills", SKILL_NAME);
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 = join121(skillDir, "year_in_review.js");
464466
- const playerPath = join121(skillDir, "player.js");
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 = join121(skillDir, "year_in_review.html");
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 = join121(skillDir, "year_in_review.js");
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 join122 } from "path";
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 = join122(firstInstall.installPath, "skills", SKILL_NAME2);
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 join123 } from "path";
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 join123(getVivusConfigHomeDir(), AGENT_PATHS.AGENTS_DIR);
471486
+ return join124(getVivusConfigHomeDir(), AGENT_PATHS.AGENTS_DIR);
471469
471487
  case "projectSettings":
471470
- return join123(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
471488
+ return join124(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
471471
471489
  case "policySettings":
471472
- return join123(getManagedFilePath(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
471490
+ return join124(getManagedFilePath(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
471473
471491
  case "localSettings":
471474
- return join123(getCwd(), AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
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 join123(".", AGENT_PATHS.FOLDER_NAME, AGENT_PATHS.AGENTS_DIR);
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 join123(dirPath, `${agent.agentType}.md`);
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 join123(dirPath, `${filename}.md`);
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 join123(dirPath, `${agent.agentType}.md`);
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 join123(dirPath, `${filename}.md`);
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 join124 } from "path";
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.29+0781d19"
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 = join124(dumpDir, heapFilename);
477640
- const diagPath = join124(dumpDir, diagFilename);
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.29+0781d19"} (built ${"2026-06-23T19:05:21.699Z"})`
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 join125 } from "path";
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 = join125(browserBasePath, profile, "Extensions", extensionId);
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 join126 } from "path";
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 = join126(__filename3, "..");
479595
- const cliPath = join126(__dirname3, "cli.js");
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 || join126(home, "AppData", "Local");
479618
- return [join126(appData, "Vivus", "ChromeNativeHost")];
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 = join126(manifestDir, NATIVE_HOST_MANIFEST_NAME);
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 = join126(manifestDirs[0], NATIVE_HOST_MANIFEST_NAME);
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 = join126(getVivusConfigHomeDir(), "chrome");
479697
- const wrapperPath = platform5 === "windows" ? join126(chromeDir, "chrome-native-host.bat") : join126(chromeDir, "chrome-native-host");
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 join127, normalize as normalize15, sep as pathSep2 } from "path";
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 join127(getBundledSkillsRoot(), skillName);
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 join127(baseDir, normalized);
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 join128 } from "path";
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 = join128(getCwd(), finalFilename);
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 join129 } from "path";
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 = join129(getCwd(), finalFilename);
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 join130 } from "path";
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 join130(getVivusConfigHomeDir(), STATS_CACHE_FILENAME);
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 join131 } from "path";
483910
+ import { join as join132 } from "path";
483893
483911
  async function copyAnsiToClipboard(ansiText, options2) {
483894
483912
  try {
483895
- const tempDir = join131(tmpdir10(), "vivus-screenshots");
483913
+ const tempDir = join132(tmpdir10(), "vivus-screenshots");
483896
483914
  await mkdir38(tempDir, { recursive: true });
483897
- const pngPath = join131(tempDir, `screenshot-${Date.now()}.png`);
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 join132, sep as sep31 } from "path";
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) => join132(projectsDir, dirent.name));
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) => join132(projectDir, dirent.name));
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 = join132(projectDir, sessionDir.name, "subagents");
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) => join132(subagentsDir, dirent.name));
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 join133 } from "path";
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 join133(getVivusConfigHomeDir(), "usage-data");
486062
+ return join134(getVivusConfigHomeDir(), "usage-data");
486045
486063
  }
486046
486064
  function getFacetsDir() {
486047
- return join133(getDataDir(), "facets");
486065
+ return join134(getDataDir(), "facets");
486048
486066
  }
486049
486067
  function getSessionMetaDir() {
486050
- return join133(getDataDir(), "session-meta");
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 = join133(getFacetsDir(), `${sessionId}.json`);
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 = join133(getFacetsDir(), `${facets.session_id}.json`);
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 = join133(getSessionMetaDir(), `${sessionId}.json`);
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 = join133(getSessionMetaDir(), `${meta.session_id}.json`);
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.29+0781d19" : "unknown";
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) => join133(projectsDir, dirent.name));
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 = join133(getVivusConfigHomeDir(), "projects");
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 = join133(getDataDir(), "report.html");
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(join133(tmpdir11(), "vivus-hs-"));
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 = join133(tempDir, "projects");
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 = join133(projectsDir, projectName);
487831
+ const projectPath = join134(projectsDir, projectName);
487814
487832
  if (!dirent.isDirectory())
487815
487833
  return;
487816
487834
  const destProjectName = `${projectName}__${homespace}`;
487817
- const destProjectPath = join133(destDir, destProjectName);
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 = join133(projectPath, fileName);
487832
- const destFile = join133(destProjectPath, fileName);
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 join134 } from "path";
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 join134(getVivusConfigHomeDir(), "projects");
488810
+ return join135(getVivusConfigHomeDir(), "projects");
488793
488811
  }
488794
488812
  function getTranscriptPath() {
488795
488813
  const projectDir = getSessionProjectDir() ?? getProjectDir2(getOriginalCwd());
488796
- return join134(projectDir, `${getSessionId()}.jsonl`);
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 join134(projectDir, `${sessionId}.jsonl`);
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 ? join134(projectDir, sessionId, "subagents", subdir) : join134(projectDir, sessionId, "subagents");
488816
- return join134(base2, `agent-${agentId}.jsonl`);
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 join134(projectDir, getSessionId(), "remote-agents");
488857
+ return join135(projectDir, getSessionId(), "remote-agents");
488840
488858
  }
488841
488859
  function getRemoteAgentMetadataPath(taskId) {
488842
- return join134(getRemoteAgentsDir(), `remote-agent-${taskId}.meta.json`);
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(join134(dir, entry.name), "utf-8");
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 = join134(projectDir, `${sessionId}.jsonl`);
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 = join134(getSessionProjectDir() ?? getProjectDir2(getOriginalCwd()), `${sessionId}.jsonl`);
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) => join134(projectsDir, dirent.name));
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) => join134(projectsDir, dirent.name));
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(join134(projectsDir, dirent.name), undefined, wtPath));
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 = join134(getSessionProjectDir() ?? getProjectDir2(getOriginalCwd()), getSessionId(), "subagents");
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: join134(projectDir, dirent.name) });
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.29+0781d19" : "unknown";
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 join134(getProjectsDir2(), sanitizePath2(projectDir));
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 join135,
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 = join135(rulesDir, entry.name);
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 = join135(dir, "VIVUS.md");
492191
+ const projectPath = join136(dir, "VIVUS.md");
492174
492192
  result.push(...await processMemoryFile(projectPath, "Project", processedPaths, false));
492175
- const dotVivusPath = join135(dir, ".vivus", "VIVUS.md");
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 = join135(dir, "VIVUS.local.md");
492197
+ const localPath = join136(dir, "VIVUS.local.md");
492180
492198
  result.push(...await processMemoryFile(localPath, "Local", processedPaths, false));
492181
492199
  }
492182
- const rulesDir = join135(dir, ".vivus", "rules");
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 = join135(dir, ".vivus", "rules");
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 = join135(dir, "VIVUS.md");
492461
+ const projectPath = join136(dir, "VIVUS.md");
492444
492462
  result.push(...await processMemoryFile(projectPath, "Project", processedPaths, includeExternal));
492445
- const dotVivusPath = join135(dir, ".vivus", "VIVUS.md");
492463
+ const dotVivusPath = join136(dir, ".vivus", "VIVUS.md");
492446
492464
  result.push(...await processMemoryFile(dotVivusPath, "Project", processedPaths, includeExternal));
492447
- const rulesDir = join135(dir, ".vivus", "rules");
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 = join135(dir, "VIVUS.local.md");
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 = join135(dir, "VIVUS.md");
492482
+ const projectPath = join136(dir, "VIVUS.md");
492465
492483
  result.push(...await processMemoryFile(projectPath, "Project", processedPaths, includeExternal));
492466
- const dotVivusPath = join135(dir, ".vivus", "VIVUS.md");
492484
+ const dotVivusPath = join136(dir, ".vivus", "VIVUS.md");
492467
492485
  result.push(...await processMemoryFile(dotVivusPath, "Project", processedPaths, includeExternal));
492468
- const rulesDir = join135(dir, ".vivus", "rules");
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 join136 } from "path";
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 ?? join136(homedir34(), ".ccr", "ca-bundle.crt");
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(join136(outPath, ".."), { recursive: true });
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.29+0781d19",
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 join137, sep as sep33 } from "path";
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 = join137(homedir35(), ".vivus");
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.29+0781d19") {
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.29+0781d19";
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.29+0781d19", maxVersion)) {
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.29+0781d19";
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.29+0781d19", maxVersion)) {
509497
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.29+0781d19"} is already at or above maxVersion ${maxVersion}, skipping update`);
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.29+0781d19", latest) && !shouldSkipVersion(latest);
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.29+0781d19"} -> ${latest}`);
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.29+0781d19"
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.29+0781d19",
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: join138 } = await import("path");
523584
+ const { join: join139 } = await import("path");
523567
523585
  const fs10 = await import("fs/promises");
523568
- const filePath = join138(getCwd(), ".vivus", "skills", skillName, "SKILL.md");
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 join138 } from "path";
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(join138(dirPath, file2.name));
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) => join138(baseCachePath, dirent.name));
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 = join138(projectsDir, projectDirent.name);
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(join138(projectDir, entry.name), cutoffDate, fsImpl)) {
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 = join138(projectDir, entry.name);
523839
- const toolResultsDir = join138(sessionDir, TOOL_RESULTS_SUBDIR);
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(join138(toolResultsDir, toolEntry.name), cutoffDate, fsImpl)) {
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 = join138(toolResultsDir, toolEntry.name);
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(join138(toolDirPath, tf.name), cutoffDate, fsImpl)) {
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(join138(dirPath, dirent.name), cutoffDate, fsImpl)) {
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 = join138(getVivusConfigHomeDir(), "plans");
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 = join138(configDir, "file-history");
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) => join138(fileHistoryStorageDir, dirent.name));
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 = join138(configDir, "session-env");
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) => join138(sessionEnvBaseDir, dirent.name));
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 = join138(getVivusConfigHomeDir(), "debug");
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(join138(debugDir, dirent.name), cutoffDate, fsImpl)) {
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 = join138(getVivusConfigHomeDir(), ".npm-cache-cleanup");
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 = join138(homedir36(), ".npm", "_cacache");
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 = join138(getVivusConfigHomeDir(), ".version-cleanup");
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 join140 } from "path";
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 = join140(getVivusConfigHomeDir(), "projects");
527320
- const projectDir = join140(projectsDir, sanitizePath2(getOriginalCwd()));
527337
+ const projectsDir = join141(getVivusConfigHomeDir(), "projects");
527338
+ const projectDir = join141(projectsDir, sanitizePath2(getOriginalCwd()));
527321
527339
  recordingState.timestamp = Date.now();
527322
- recordingState.filePath = join140(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
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 = join140(getVivusConfigHomeDir(), "projects");
527332
- const projectDir = join140(projectsDir, sanitizePath2(getOriginalCwd()));
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) => join140(projectDir, 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 = join140(getVivusConfigHomeDir(), "projects");
527348
- const projectDir = join140(projectsDir, sanitizePath2(getOriginalCwd()));
527349
- const newPath = join140(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
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.29+0781d19",
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 join141 } from "path";
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 = join141(cacheDir, OFFICIAL_MARKETPLACE_NAME);
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 join142 } from "path";
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" ? join142(pluginData.marketplaceInstallLocation, pluginData.entry.source) : undefined;
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 join143 } from "path";
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 = join143(tmpdir12(), `cc-transcript-${Date.now()}.txt`);
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.29+0781d19",
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.29+0781d19",
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.29+0781d19",
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.29+0781d19",
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 join144 } from "path";
544103
+ import { dirname as dirname62, join as join145 } from "path";
544086
544104
  function getErrorsPath() {
544087
- return join144(CACHE_PATHS.errors(), DATE + ".jsonl");
544105
+ return join145(CACHE_PATHS.errors(), DATE + ".jsonl");
544088
544106
  }
544089
544107
  function getMCPLogsPath(serverName) {
544090
- return join144(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
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.29+0781d19"
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 join145 } from "path";
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 join145(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
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 join146 } from "path";
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 join146(getVivusConfigHomeDir(), "uploads", getSessionId());
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 = join146(dir, `${prefix}-${safeName}`);
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 join147 } from "path";
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(join147(zipCachePath, relPath), content);
548001
+ await atomicWriteToZipCache(join148(zipCachePath, relPath), content);
547984
548002
  }
547985
548003
  }
547986
548004
  async function readMarketplaceJsonContent(dir) {
547987
548005
  const candidates = [
547988
- join147(dir, ".vivus-plugin", "marketplace.json"),
547989
- join147(dir, "marketplace.json"),
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.29+0781d19", cfg.min_version)) {
548120
- return `Your version of Vivus (${"1.1.29+0781d19"}) is too old for Remote Control.
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 join148 } from "path";
548466
+ import { dirname as dirname63, join as join149 } from "path";
548449
548467
  function getBridgePointerPath(dir) {
548450
- return join148(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
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.29+0781d19",
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.29+0781d19"
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 join149 } from "path";
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 join149(homedir39(), "Library", "Application Support", "Vivus", "vivus_desktop_config.json");
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 = join149(usersDir, user.name, "AppData", "Roaming", "Vivus", "vivus_desktop_config.json");
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 join150 } from "node:path";
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 = join150(homeDir, ".local", "bin", "vivus.exe");
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.29+0781d19"}
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.29+0781d19", latest)) {
555946
- writeToStdout(`Update available: ${"1.1.29+0781d19"} → ${latest}
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.29+0781d19", latest)) {
555963
- writeToStdout(`Update available: ${"1.1.29+0781d19"} → ${latest}
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.29+0781d19", latest)) {
555980
- writeToStdout(`Update available: ${"1.1.29+0781d19"} → ${latest}
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.29+0781d19") {
556046
- writeToStdout(source_default.green(`Vivus is up to date (${"1.1.29+0781d19"})`) + `
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.29+0781d19"} to version ${result.latestVersion}`) + `
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.29+0781d19") {
556107
- writeToStdout(source_default.green(`Vivus is up to date (${"1.1.29+0781d19"})`) + `
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.29+0781d19"})
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.29+0781d19"} to version ${latestVersion}`) + `
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.29+0781d19"
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.29+0781d19",
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.29+0781d19 (Vivus)", "-v, --version", "Output the version number");
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()) {