oh-my-opencode 3.15.0 → 3.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -48336,7 +48336,6 @@ var init_opencode_storage_paths = __esm(() => {
48336
48336
  // src/shared/opencode-message-dir.ts
48337
48337
  var init_opencode_message_dir = __esm(() => {
48338
48338
  init_opencode_storage_paths();
48339
- init_opencode_storage_detection();
48340
48339
  init_logger();
48341
48340
  });
48342
48341
 
@@ -49465,6 +49464,10 @@ var init_detect_current_config = __esm(() => {
49465
49464
 
49466
49465
  // src/cli/config-manager/bun-install.ts
49467
49466
  import { existsSync as existsSync9 } from "fs";
49467
+ import { join as join8 } from "path";
49468
+ function getDefaultWorkspaceDir() {
49469
+ return join8(getOpenCodeCacheDir(), "packages");
49470
+ }
49468
49471
  function readProcessOutput(stream) {
49469
49472
  if (!stream) {
49470
49473
  return Promise.resolve("");
@@ -49487,7 +49490,7 @@ function logCapturedOutputOnFailure(outputMode, output) {
49487
49490
  }
49488
49491
  async function runBunInstallWithDetails(options) {
49489
49492
  const outputMode = options?.outputMode ?? "pipe";
49490
- const cacheDir = options?.workspaceDir ?? getOpenCodeCacheDir();
49493
+ const cacheDir = options?.workspaceDir ?? getDefaultWorkspaceDir();
49491
49494
  const packageJsonPath = `${cacheDir}/package.json`;
49492
49495
  if (!existsSync9(packageJsonPath)) {
49493
49496
  return {
@@ -49633,13 +49636,14 @@ function getWindowsAppdataDir() {
49633
49636
  return null;
49634
49637
  return process.env.APPDATA ?? path4.join(os3.homedir(), "AppData", "Roaming");
49635
49638
  }
49636
- var PACKAGE_NAME = "oh-my-opencode", NPM_REGISTRY_URL, NPM_FETCH_TIMEOUT = 5000, CACHE_DIR, VERSION_FILE, USER_CONFIG_DIR, USER_OPENCODE_CONFIG, USER_OPENCODE_CONFIG_JSONC, INSTALLED_PACKAGE_JSON;
49639
+ var PACKAGE_NAME = "oh-my-openagent", NPM_REGISTRY_URL, NPM_FETCH_TIMEOUT = 5000, CACHE_ROOT_DIR, CACHE_DIR, VERSION_FILE, USER_CONFIG_DIR, USER_OPENCODE_CONFIG, USER_OPENCODE_CONFIG_JSONC, INSTALLED_PACKAGE_JSON;
49637
49640
  var init_constants3 = __esm(() => {
49638
49641
  init_data_path();
49639
49642
  init_opencode_config_dir();
49640
49643
  NPM_REGISTRY_URL = `https://registry.npmjs.org/-/package/${PACKAGE_NAME}/dist-tags`;
49641
- CACHE_DIR = getOpenCodeCacheDir();
49642
- VERSION_FILE = path4.join(CACHE_DIR, "version");
49644
+ CACHE_ROOT_DIR = getOpenCodeCacheDir();
49645
+ CACHE_DIR = path4.join(CACHE_ROOT_DIR, "packages");
49646
+ VERSION_FILE = path4.join(CACHE_ROOT_DIR, "version");
49643
49647
  USER_CONFIG_DIR = getOpenCodeConfigDir({ binary: "opencode" });
49644
49648
  USER_OPENCODE_CONFIG = path4.join(USER_CONFIG_DIR, "opencode.json");
49645
49649
  USER_OPENCODE_CONFIG_JSONC = path4.join(USER_CONFIG_DIR, "opencode.jsonc");
@@ -49986,11 +49990,28 @@ function getIntentVersion(pluginInfo) {
49986
49990
  }
49987
49991
  return pluginInfo.pinnedVersion;
49988
49992
  }
49993
+ function writeCachePackageJson(cachePackageJsonPath, pkgJson) {
49994
+ const tmpPath = `${cachePackageJsonPath}.${crypto.randomUUID()}`;
49995
+ try {
49996
+ fs9.mkdirSync(path8.dirname(cachePackageJsonPath), { recursive: true });
49997
+ fs9.writeFileSync(tmpPath, JSON.stringify(pkgJson, null, 2));
49998
+ fs9.renameSync(tmpPath, cachePackageJsonPath);
49999
+ return { synced: true, error: null };
50000
+ } catch (err) {
50001
+ log("[auto-update-checker] Failed to write cache package.json:", err);
50002
+ safeUnlink(tmpPath);
50003
+ return { synced: false, error: "write_error", message: "Failed to write cache package.json" };
50004
+ }
50005
+ }
49989
50006
  function syncCachePackageJsonToIntent(pluginInfo) {
49990
50007
  const cachePackageJsonPath = path8.join(CACHE_DIR, "package.json");
50008
+ const intentVersion = getIntentVersion(pluginInfo);
49991
50009
  if (!fs9.existsSync(cachePackageJsonPath)) {
49992
- log("[auto-update-checker] Cache package.json not found, nothing to sync");
49993
- return { synced: false, error: "file_not_found", message: "Cache package.json not found" };
50010
+ log("[auto-update-checker] Cache package.json missing, creating workspace package.json", { intentVersion });
50011
+ return {
50012
+ ...writeCachePackageJson(cachePackageJsonPath, { dependencies: { [PACKAGE_NAME]: intentVersion } }),
50013
+ message: `Created cache package.json with: ${intentVersion}`
50014
+ };
49994
50015
  }
49995
50016
  let content;
49996
50017
  let pkgJson;
@@ -50007,11 +50028,20 @@ function syncCachePackageJsonToIntent(pluginInfo) {
50007
50028
  return { synced: false, error: "parse_error", message: "Failed to parse cache package.json (malformed JSON)" };
50008
50029
  }
50009
50030
  if (!pkgJson || !pkgJson.dependencies?.[PACKAGE_NAME]) {
50010
- log("[auto-update-checker] Plugin not in cache package.json dependencies, nothing to sync");
50011
- return { synced: false, error: "plugin_not_in_deps", message: "Plugin not in cache package.json dependencies" };
50031
+ log("[auto-update-checker] Plugin missing from cache package.json dependencies, adding dependency", { intentVersion });
50032
+ const nextPkgJson = {
50033
+ ...pkgJson ?? {},
50034
+ dependencies: {
50035
+ ...pkgJson?.dependencies ?? {},
50036
+ [PACKAGE_NAME]: intentVersion
50037
+ }
50038
+ };
50039
+ return {
50040
+ ...writeCachePackageJson(cachePackageJsonPath, nextPkgJson),
50041
+ message: `Added ${PACKAGE_NAME}: ${intentVersion}`
50042
+ };
50012
50043
  }
50013
50044
  const currentVersion = pkgJson.dependencies[PACKAGE_NAME];
50014
- const intentVersion = getIntentVersion(pluginInfo);
50015
50045
  if (currentVersion === intentVersion) {
50016
50046
  log("[auto-update-checker] Cache package.json already matches intent:", intentVersion);
50017
50047
  return { synced: false, error: null, message: `Already matches intent: ${intentVersion}` };
@@ -50024,16 +50054,10 @@ function syncCachePackageJsonToIntent(pluginInfo) {
50024
50054
  log(`[auto-update-checker] Updating cache package.json: "${currentVersion}" \u2192 "${intentVersion}"`);
50025
50055
  }
50026
50056
  pkgJson.dependencies[PACKAGE_NAME] = intentVersion;
50027
- const tmpPath = `${cachePackageJsonPath}.${crypto.randomUUID()}`;
50028
- try {
50029
- fs9.writeFileSync(tmpPath, JSON.stringify(pkgJson, null, 2));
50030
- fs9.renameSync(tmpPath, cachePackageJsonPath);
50031
- return { synced: true, error: null, message: `Updated: "${currentVersion}" \u2192 "${intentVersion}"` };
50032
- } catch (err) {
50033
- log("[auto-update-checker] Failed to write cache package.json:", err);
50034
- safeUnlink(tmpPath);
50035
- return { synced: false, error: "write_error", message: "Failed to write cache package.json" };
50036
- }
50057
+ return {
50058
+ ...writeCachePackageJson(cachePackageJsonPath, pkgJson),
50059
+ message: `Updated: "${currentVersion}" \u2192 "${intentVersion}"`
50060
+ };
50037
50061
  }
50038
50062
  var EXACT_SEMVER_REGEX2;
50039
50063
  var init_sync_package_json = __esm(() => {
@@ -50160,13 +50184,16 @@ var init_update_toasts = __esm(() => {
50160
50184
 
50161
50185
  // src/hooks/auto-update-checker/hook/background-update-check.ts
50162
50186
  import { existsSync as existsSync21 } from "fs";
50163
- import { join as join19 } from "path";
50187
+ import { join as join20 } from "path";
50188
+ function getCacheWorkspaceDir(deps) {
50189
+ return deps.join(deps.getOpenCodeCacheDir(), "packages");
50190
+ }
50164
50191
  function getPinnedVersionToastMessage(latestVersion) {
50165
50192
  return `Update available: ${latestVersion} (version pinned, update manually)`;
50166
50193
  }
50167
50194
  function resolveActiveInstallWorkspace(deps) {
50168
50195
  const configPaths = deps.getOpenCodeConfigPaths({ binary: "opencode" });
50169
- const cacheDir = deps.getOpenCodeCacheDir();
50196
+ const cacheDir = getCacheWorkspaceDir(deps);
50170
50197
  const configInstallPath = deps.join(configPaths.configDir, "node_modules", PACKAGE_NAME, "package.json");
50171
50198
  const cacheInstallPath = deps.join(cacheDir, "node_modules", PACKAGE_NAME, "package.json");
50172
50199
  if (deps.existsSync(configInstallPath)) {
@@ -50177,6 +50204,11 @@ function resolveActiveInstallWorkspace(deps) {
50177
50204
  deps.log(`[auto-update-checker] Active workspace: cache-dir (${cacheDir})`);
50178
50205
  return cacheDir;
50179
50206
  }
50207
+ const cachePackageJsonPath = deps.join(cacheDir, "package.json");
50208
+ if (deps.existsSync(cachePackageJsonPath)) {
50209
+ deps.log(`[auto-update-checker] Active workspace: cache-dir (${cacheDir}, package.json present)`);
50210
+ return cacheDir;
50211
+ }
50180
50212
  deps.log(`[auto-update-checker] Active workspace: config-dir (default, no install detected)`);
50181
50213
  return configPaths.configDir;
50182
50214
  }
@@ -50193,6 +50225,14 @@ async function runBunInstallSafe(workspaceDir, deps) {
50193
50225
  return false;
50194
50226
  }
50195
50227
  }
50228
+ async function primeCacheWorkspace(activeWorkspace, deps) {
50229
+ const cacheWorkspace = getCacheWorkspaceDir(deps);
50230
+ if (activeWorkspace === cacheWorkspace) {
50231
+ return true;
50232
+ }
50233
+ deps.log(`[auto-update-checker] Priming cache workspace after install: ${cacheWorkspace}`);
50234
+ return runBunInstallSafe(cacheWorkspace, deps);
50235
+ }
50196
50236
  function createBackgroundUpdateCheckRunner(overrides = {}) {
50197
50237
  const deps = { ...defaultDeps, ...overrides };
50198
50238
  return async function runBackgroundUpdateCheck(ctx, autoUpdate, getToastMessage) {
@@ -50238,6 +50278,12 @@ function createBackgroundUpdateCheckRunner(overrides = {}) {
50238
50278
  const activeWorkspace = resolveActiveInstallWorkspace(deps);
50239
50279
  const installSuccess = await runBunInstallSafe(activeWorkspace, deps);
50240
50280
  if (installSuccess) {
50281
+ const cachePrimed = await primeCacheWorkspace(activeWorkspace, deps);
50282
+ if (!cachePrimed) {
50283
+ await deps.showUpdateAvailableToast(ctx, latestVersion, getToastMessage);
50284
+ deps.log("[auto-update-checker] cache workspace priming failed after install");
50285
+ return;
50286
+ }
50241
50287
  await deps.showAutoUpdatedToast(ctx, currentVersion, latestVersion);
50242
50288
  deps.log(`[auto-update-checker] Update installed: ${currentVersion} \u2192 ${latestVersion}`);
50243
50289
  return;
@@ -50257,7 +50303,7 @@ var init_background_update_check = __esm(() => {
50257
50303
  init_update_toasts();
50258
50304
  defaultDeps = {
50259
50305
  existsSync: existsSync21,
50260
- join: join19,
50306
+ join: join20,
50261
50307
  runBunInstallWithDetails,
50262
50308
  log,
50263
50309
  getOpenCodeCacheDir,
@@ -50537,7 +50583,7 @@ var {
50537
50583
  // package.json
50538
50584
  var package_default = {
50539
50585
  name: "oh-my-opencode",
50540
- version: "3.15.0",
50586
+ version: "3.15.1",
50541
50587
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
50542
50588
  main: "./dist/index.js",
50543
50589
  types: "dist/index.d.ts",
@@ -50615,17 +50661,17 @@ var package_default = {
50615
50661
  typescript: "^5.7.3"
50616
50662
  },
50617
50663
  optionalDependencies: {
50618
- "oh-my-opencode-darwin-arm64": "3.15.0",
50619
- "oh-my-opencode-darwin-x64": "3.15.0",
50620
- "oh-my-opencode-darwin-x64-baseline": "3.15.0",
50621
- "oh-my-opencode-linux-arm64": "3.15.0",
50622
- "oh-my-opencode-linux-arm64-musl": "3.15.0",
50623
- "oh-my-opencode-linux-x64": "3.15.0",
50624
- "oh-my-opencode-linux-x64-baseline": "3.15.0",
50625
- "oh-my-opencode-linux-x64-musl": "3.15.0",
50626
- "oh-my-opencode-linux-x64-musl-baseline": "3.15.0",
50627
- "oh-my-opencode-windows-x64": "3.15.0",
50628
- "oh-my-opencode-windows-x64-baseline": "3.15.0"
50664
+ "oh-my-opencode-darwin-arm64": "3.15.1",
50665
+ "oh-my-opencode-darwin-x64": "3.15.1",
50666
+ "oh-my-opencode-darwin-x64-baseline": "3.15.1",
50667
+ "oh-my-opencode-linux-arm64": "3.15.1",
50668
+ "oh-my-opencode-linux-arm64-musl": "3.15.1",
50669
+ "oh-my-opencode-linux-x64": "3.15.1",
50670
+ "oh-my-opencode-linux-x64-baseline": "3.15.1",
50671
+ "oh-my-opencode-linux-x64-musl": "3.15.1",
50672
+ "oh-my-opencode-linux-x64-musl-baseline": "3.15.1",
50673
+ "oh-my-opencode-windows-x64": "3.15.1",
50674
+ "oh-my-opencode-windows-x64-baseline": "3.15.1"
50629
50675
  },
50630
50676
  overrides: {
50631
50677
  "@opencode-ai/sdk": "^1.2.24"
@@ -66429,11 +66475,11 @@ init_shared();
66429
66475
  init_logger();
66430
66476
  init_write_file_atomically();
66431
66477
  import { existsSync as existsSync10, readFileSync as readFileSync8, renameSync as renameSync2, rmSync } from "fs";
66432
- import { join as join8, dirname, basename } from "path";
66478
+ import { join as join9, dirname, basename } from "path";
66433
66479
  function buildCanonicalPath(legacyPath) {
66434
66480
  const dir = dirname(legacyPath);
66435
66481
  const ext = basename(legacyPath).includes(".jsonc") ? ".jsonc" : ".json";
66436
- return join8(dir, `${CONFIG_BASENAME}${ext}`);
66482
+ return join9(dir, `${CONFIG_BASENAME}${ext}`);
66437
66483
  }
66438
66484
  function archiveLegacyConfigFile(legacyPath) {
66439
66485
  const backupPath = `${legacyPath}.bak`;
@@ -68107,7 +68153,7 @@ var import_picocolors9 = __toESM(require_picocolors(), 1);
68107
68153
 
68108
68154
  // src/cli/run/opencode-binary-resolver.ts
68109
68155
  init_spawn_with_windows_hide();
68110
- import { delimiter, dirname as dirname3, join as join10 } from "path";
68156
+ import { delimiter, dirname as dirname3, join as join11 } from "path";
68111
68157
  var OPENCODE_COMMANDS = ["opencode", "opencode-desktop"];
68112
68158
  var WINDOWS_SUFFIXES = ["", ".exe", ".cmd", ".bat", ".ps1"];
68113
68159
  function getCommandCandidates(platform) {
@@ -68130,7 +68176,7 @@ function collectCandidateBinaryPaths(pathEnv, which = Bun.which, platform = proc
68130
68176
  }
68131
68177
  for (const entry of (pathEnv ?? "").split(delimiter).filter(Boolean)) {
68132
68178
  for (const command of commandCandidates) {
68133
- addCandidate(join10(entry, command));
68179
+ addCandidate(join11(entry, command));
68134
68180
  }
68135
68181
  }
68136
68182
  return candidates;
@@ -68514,10 +68560,10 @@ var NOTEPAD_DIR = "notepads";
68514
68560
  var NOTEPAD_BASE_PATH = `${BOULDER_DIR}/${NOTEPAD_DIR}`;
68515
68561
  // src/features/boulder-state/storage.ts
68516
68562
  import { existsSync as existsSync12, readFileSync as readFileSync10, writeFileSync as writeFileSync5, mkdirSync as mkdirSync4, readdirSync } from "fs";
68517
- import { dirname as dirname4, join as join11, basename as basename3 } from "path";
68563
+ import { dirname as dirname4, join as join12, basename as basename3 } from "path";
68518
68564
  var RESERVED_KEYS = new Set(["__proto__", "prototype", "constructor"]);
68519
68565
  function getBoulderFilePath(directory) {
68520
- return join11(directory, BOULDER_DIR, BOULDER_FILE);
68566
+ return join12(directory, BOULDER_DIR, BOULDER_FILE);
68521
68567
  }
68522
68568
  function readBoulderState(directory) {
68523
68569
  const filePath = getBoulderFilePath(directory);
@@ -68564,9 +68610,9 @@ function getPlanProgress(planPath) {
68564
68610
  var CONTINUATION_MARKER_DIR = ".sisyphus/run-continuation";
68565
68611
  // src/features/run-continuation-state/storage.ts
68566
68612
  import { existsSync as existsSync13, mkdirSync as mkdirSync5, readFileSync as readFileSync11, rmSync as rmSync2, writeFileSync as writeFileSync6 } from "fs";
68567
- import { join as join12 } from "path";
68613
+ import { join as join13 } from "path";
68568
68614
  function getMarkerPath(directory, sessionID) {
68569
- return join12(directory, CONTINUATION_MARKER_DIR, `${sessionID}.json`);
68615
+ return join13(directory, CONTINUATION_MARKER_DIR, `${sessionID}.json`);
68570
68616
  }
68571
68617
  function readContinuationMarker(directory, sessionID) {
68572
68618
  const markerPath = getMarkerPath(directory, sessionID);
@@ -68599,7 +68645,7 @@ function getActiveContinuationMarkerReason(marker) {
68599
68645
  // src/hooks/ralph-loop/storage.ts
68600
68646
  init_frontmatter();
68601
68647
  import { existsSync as existsSync14, readFileSync as readFileSync12, writeFileSync as writeFileSync7, unlinkSync, mkdirSync as mkdirSync6 } from "fs";
68602
- import { dirname as dirname5, join as join13 } from "path";
68648
+ import { dirname as dirname5, join as join14 } from "path";
68603
68649
 
68604
68650
  // src/hooks/ralph-loop/constants.ts
68605
68651
  var DEFAULT_STATE_FILE = ".sisyphus/ralph-loop.local.md";
@@ -68608,7 +68654,7 @@ var DEFAULT_COMPLETION_PROMISE = "DONE";
68608
68654
 
68609
68655
  // src/hooks/ralph-loop/storage.ts
68610
68656
  function getStateFilePath(directory, customPath) {
68611
- return customPath ? join13(directory, customPath) : join13(directory, DEFAULT_STATE_FILE);
68657
+ return customPath ? join14(directory, customPath) : join14(directory, DEFAULT_STATE_FILE);
68612
68658
  }
68613
68659
  function readState(directory, customPath) {
68614
68660
  const filePath = getStateFilePath(directory, customPath);
@@ -69328,24 +69374,24 @@ import { existsSync as existsSync25, readFileSync as readFileSync22 } from "fs";
69328
69374
  init_spawn_with_windows_hide();
69329
69375
  import { existsSync as existsSync22 } from "fs";
69330
69376
  import { homedir as homedir5 } from "os";
69331
- import { join as join20 } from "path";
69377
+ import { join as join21 } from "path";
69332
69378
  function getDesktopAppPaths(platform) {
69333
69379
  const home = homedir5();
69334
69380
  switch (platform) {
69335
69381
  case "darwin":
69336
69382
  return [
69337
69383
  "/Applications/OpenCode.app/Contents/MacOS/OpenCode",
69338
- join20(home, "Applications", "OpenCode.app", "Contents", "MacOS", "OpenCode")
69384
+ join21(home, "Applications", "OpenCode.app", "Contents", "MacOS", "OpenCode")
69339
69385
  ];
69340
69386
  case "win32": {
69341
69387
  const programFiles = process.env.ProgramFiles;
69342
69388
  const localAppData = process.env.LOCALAPPDATA;
69343
69389
  const paths = [];
69344
69390
  if (programFiles) {
69345
- paths.push(join20(programFiles, "OpenCode", "OpenCode.exe"));
69391
+ paths.push(join21(programFiles, "OpenCode", "OpenCode.exe"));
69346
69392
  }
69347
69393
  if (localAppData) {
69348
- paths.push(join20(localAppData, "OpenCode", "OpenCode.exe"));
69394
+ paths.push(join21(localAppData, "OpenCode", "OpenCode.exe"));
69349
69395
  }
69350
69396
  return paths;
69351
69397
  }
@@ -69353,8 +69399,8 @@ function getDesktopAppPaths(platform) {
69353
69399
  return [
69354
69400
  "/usr/bin/opencode",
69355
69401
  "/usr/lib/opencode/opencode",
69356
- join20(home, "Applications", "opencode-desktop-linux-x86_64.AppImage"),
69357
- join20(home, "Applications", "opencode-desktop-linux-aarch64.AppImage")
69402
+ join21(home, "Applications", "opencode-desktop-linux-x86_64.AppImage"),
69403
+ join21(home, "Applications", "opencode-desktop-linux-aarch64.AppImage")
69358
69404
  ];
69359
69405
  default:
69360
69406
  return [];
@@ -69505,21 +69551,21 @@ init_checker();
69505
69551
  init_auto_update_checker();
69506
69552
  import { existsSync as existsSync24, readFileSync as readFileSync21 } from "fs";
69507
69553
  import { homedir as homedir6 } from "os";
69508
- import { join as join21 } from "path";
69554
+ import { join as join22 } from "path";
69509
69555
  init_shared();
69510
69556
  function getPlatformDefaultCacheDir(platform = process.platform) {
69511
69557
  if (platform === "darwin")
69512
- return join21(homedir6(), "Library", "Caches");
69558
+ return join22(homedir6(), "Library", "Caches");
69513
69559
  if (platform === "win32")
69514
- return process.env.LOCALAPPDATA ?? join21(homedir6(), "AppData", "Local");
69515
- return join21(homedir6(), ".cache");
69560
+ return process.env.LOCALAPPDATA ?? join22(homedir6(), "AppData", "Local");
69561
+ return join22(homedir6(), ".cache");
69516
69562
  }
69517
69563
  function resolveOpenCodeCacheDir() {
69518
69564
  const xdgCacheHome = process.env.XDG_CACHE_HOME;
69519
69565
  if (xdgCacheHome)
69520
- return join21(xdgCacheHome, "opencode");
69566
+ return join22(xdgCacheHome, "opencode");
69521
69567
  const fromShared = getOpenCodeCacheDir();
69522
- const platformDefault = join21(getPlatformDefaultCacheDir(), "opencode");
69568
+ const platformDefault = join22(getPlatformDefaultCacheDir(), "opencode");
69523
69569
  if (existsSync24(fromShared) || !existsSync24(platformDefault))
69524
69570
  return fromShared;
69525
69571
  return platformDefault;
@@ -69552,13 +69598,13 @@ function getLoadedPluginVersion() {
69552
69598
  const candidates = [
69553
69599
  {
69554
69600
  cacheDir: configDir,
69555
- cachePackagePath: join21(configDir, "package.json"),
69556
- installedPackagePath: join21(configDir, "node_modules", PACKAGE_NAME2, "package.json")
69601
+ cachePackagePath: join22(configDir, "package.json"),
69602
+ installedPackagePath: join22(configDir, "node_modules", PACKAGE_NAME2, "package.json")
69557
69603
  },
69558
69604
  {
69559
69605
  cacheDir,
69560
- cachePackagePath: join21(cacheDir, "package.json"),
69561
- installedPackagePath: join21(cacheDir, "node_modules", PACKAGE_NAME2, "package.json")
69606
+ cachePackagePath: join22(cacheDir, "package.json"),
69607
+ installedPackagePath: join22(cacheDir, "node_modules", PACKAGE_NAME2, "package.json")
69562
69608
  }
69563
69609
  ];
69564
69610
  const selectedCandidate = candidates.find((candidate) => existsSync24(candidate.installedPackagePath)) ?? candidates[0];
@@ -69708,22 +69754,22 @@ async function checkSystem() {
69708
69754
 
69709
69755
  // src/cli/doctor/checks/config.ts
69710
69756
  import { readFileSync as readFileSync25 } from "fs";
69711
- import { join as join25 } from "path";
69757
+ import { join as join26 } from "path";
69712
69758
  init_shared();
69713
69759
 
69714
69760
  // src/cli/doctor/checks/model-resolution-cache.ts
69715
69761
  init_shared();
69716
69762
  import { existsSync as existsSync26, readFileSync as readFileSync23 } from "fs";
69717
69763
  import { homedir as homedir7 } from "os";
69718
- import { join as join22 } from "path";
69764
+ import { join as join23 } from "path";
69719
69765
  function getOpenCodeCacheDir2() {
69720
69766
  const xdgCache = process.env.XDG_CACHE_HOME;
69721
69767
  if (xdgCache)
69722
- return join22(xdgCache, "opencode");
69723
- return join22(homedir7(), ".cache", "opencode");
69768
+ return join23(xdgCache, "opencode");
69769
+ return join23(homedir7(), ".cache", "opencode");
69724
69770
  }
69725
69771
  function loadAvailableModelsFromCache() {
69726
- const cacheFile = join22(getOpenCodeCacheDir2(), "models.json");
69772
+ const cacheFile = join23(getOpenCodeCacheDir2(), "models.json");
69727
69773
  if (!existsSync26(cacheFile)) {
69728
69774
  return { providers: [], modelCount: 0, cacheExists: false };
69729
69775
  }
@@ -69751,9 +69797,9 @@ init_model_capabilities();
69751
69797
  // src/cli/doctor/checks/model-resolution-config.ts
69752
69798
  init_shared();
69753
69799
  import { readFileSync as readFileSync24 } from "fs";
69754
- import { join as join23 } from "path";
69800
+ import { join as join24 } from "path";
69755
69801
  var USER_CONFIG_DIR2 = getOpenCodeConfigPaths({ binary: "opencode", version: null }).configDir;
69756
- var PROJECT_CONFIG_DIR = join23(process.cwd(), ".opencode");
69802
+ var PROJECT_CONFIG_DIR = join24(process.cwd(), ".opencode");
69757
69803
  function loadOmoConfig() {
69758
69804
  const projectDetected = detectPluginConfigFile(PROJECT_CONFIG_DIR);
69759
69805
  if (projectDetected.format !== "none") {
@@ -69778,7 +69824,7 @@ function loadOmoConfig() {
69778
69824
 
69779
69825
  // src/cli/doctor/checks/model-resolution-details.ts
69780
69826
  init_shared();
69781
- import { join as join24 } from "path";
69827
+ import { join as join25 } from "path";
69782
69828
 
69783
69829
  // src/cli/doctor/checks/model-resolution-variant.ts
69784
69830
  function formatModelWithVariant(model, variant) {
@@ -69820,7 +69866,7 @@ function formatCapabilityResolutionLabel(mode) {
69820
69866
  }
69821
69867
  function buildModelResolutionDetails(options) {
69822
69868
  const details = [];
69823
- const cacheFile = join24(getOpenCodeCacheDir(), "models.json");
69869
+ const cacheFile = join25(getOpenCodeCacheDir(), "models.json");
69824
69870
  details.push("\u2550\u2550\u2550 Available Models (from cache) \u2550\u2550\u2550");
69825
69871
  details.push("");
69826
69872
  if (options.available.cacheExists) {
@@ -69976,7 +70022,7 @@ async function checkModels() {
69976
70022
 
69977
70023
  // src/cli/doctor/checks/config.ts
69978
70024
  var USER_CONFIG_DIR3 = getOpenCodeConfigDir({ binary: "opencode" });
69979
- var PROJECT_CONFIG_DIR2 = join25(process.cwd(), ".opencode");
70025
+ var PROJECT_CONFIG_DIR2 = join26(process.cwd(), ".opencode");
69980
70026
  function findConfigPath() {
69981
70027
  const projectConfig = detectPluginConfigFile(PROJECT_CONFIG_DIR2);
69982
70028
  if (projectConfig.format !== "none")
@@ -70098,7 +70144,7 @@ async function checkConfig() {
70098
70144
  init_spawn_with_windows_hide();
70099
70145
  import { existsSync as existsSync27 } from "fs";
70100
70146
  import { createRequire } from "module";
70101
- import { dirname as dirname8, join as join26 } from "path";
70147
+ import { dirname as dirname9, join as join27 } from "path";
70102
70148
  async function checkBinaryExists(binary2) {
70103
70149
  try {
70104
70150
  const path10 = Bun.which(binary2);
@@ -70155,11 +70201,11 @@ async function checkAstGrepNapi() {
70155
70201
  };
70156
70202
  } catch {
70157
70203
  const { existsSync: existsSync28 } = await import("fs");
70158
- const { join: join27 } = await import("path");
70204
+ const { join: join28 } = await import("path");
70159
70205
  const { homedir: homedir8 } = await import("os");
70160
70206
  const pathsToCheck = [
70161
- join27(homedir8(), ".config", "opencode", "node_modules", "@ast-grep", "napi"),
70162
- join27(process.cwd(), "node_modules", "@ast-grep", "napi")
70207
+ join28(homedir8(), ".config", "opencode", "node_modules", "@ast-grep", "napi"),
70208
+ join28(process.cwd(), "node_modules", "@ast-grep", "napi")
70163
70209
  ];
70164
70210
  for (const napiPath of pathsToCheck) {
70165
70211
  if (existsSync28(napiPath)) {
@@ -70187,7 +70233,7 @@ function findCommentCheckerPackageBinary() {
70187
70233
  try {
70188
70234
  const require2 = createRequire(import.meta.url);
70189
70235
  const pkgPath = require2.resolve("@code-yeongyu/comment-checker/package.json");
70190
- const binaryPath = join26(dirname8(pkgPath), "bin", binaryName);
70236
+ const binaryPath = join27(dirname9(pkgPath), "bin", binaryName);
70191
70237
  if (existsSync27(binaryPath))
70192
70238
  return binaryPath;
70193
70239
  } catch {}
@@ -70346,7 +70392,7 @@ var BUILTIN_SERVERS = {
70346
70392
  };
70347
70393
  // src/tools/lsp/server-config-loader.ts
70348
70394
  import { existsSync as existsSync28, readFileSync as readFileSync26 } from "fs";
70349
- import { join as join27 } from "path";
70395
+ import { join as join28 } from "path";
70350
70396
  init_shared();
70351
70397
  init_jsonc_parser();
70352
70398
  function loadJsonFile(path10) {
@@ -70362,9 +70408,9 @@ function getConfigPaths2() {
70362
70408
  const cwd = process.cwd();
70363
70409
  const configDir = getOpenCodeConfigDir({ binary: "opencode" });
70364
70410
  return {
70365
- project: detectPluginConfigFile(join27(cwd, ".opencode")).path,
70411
+ project: detectPluginConfigFile(join28(cwd, ".opencode")).path,
70366
70412
  user: detectPluginConfigFile(configDir).path,
70367
- opencode: detectConfigFile(join27(configDir, "opencode")).path
70413
+ opencode: detectConfigFile(join28(configDir, "opencode")).path
70368
70414
  };
70369
70415
  }
70370
70416
  function loadAllConfigs() {
@@ -70434,20 +70480,20 @@ function getMergedServers() {
70434
70480
 
70435
70481
  // src/tools/lsp/server-installation.ts
70436
70482
  import { existsSync as existsSync29 } from "fs";
70437
- import { delimiter as delimiter2, join as join29 } from "path";
70483
+ import { delimiter as delimiter2, join as join30 } from "path";
70438
70484
 
70439
70485
  // src/tools/lsp/server-path-bases.ts
70440
70486
  init_shared();
70441
- import { join as join28 } from "path";
70487
+ import { join as join29 } from "path";
70442
70488
  function getLspServerAdditionalPathBases(workingDirectory) {
70443
70489
  const configDir = getOpenCodeConfigDir({ binary: "opencode" });
70444
- const dataDir = join28(getDataDir(), "opencode");
70490
+ const dataDir = join29(getDataDir(), "opencode");
70445
70491
  return [
70446
- join28(workingDirectory, "node_modules", ".bin"),
70447
- join28(configDir, "bin"),
70448
- join28(configDir, "node_modules", ".bin"),
70449
- join28(dataDir, "bin"),
70450
- join28(dataDir, "bin", "node_modules", ".bin")
70492
+ join29(workingDirectory, "node_modules", ".bin"),
70493
+ join29(configDir, "bin"),
70494
+ join29(configDir, "node_modules", ".bin"),
70495
+ join29(dataDir, "bin"),
70496
+ join29(dataDir, "bin", "node_modules", ".bin")
70451
70497
  ];
70452
70498
  }
70453
70499
 
@@ -70478,14 +70524,14 @@ function isServerInstalled(command) {
70478
70524
  const paths = pathEnv.split(delimiter2);
70479
70525
  for (const p2 of paths) {
70480
70526
  for (const suffix of exts) {
70481
- if (existsSync29(join29(p2, cmd + suffix))) {
70527
+ if (existsSync29(join30(p2, cmd + suffix))) {
70482
70528
  return true;
70483
70529
  }
70484
70530
  }
70485
70531
  }
70486
70532
  for (const base of getLspServerAdditionalPathBases(process.cwd())) {
70487
70533
  for (const suffix of exts) {
70488
- if (existsSync29(join29(base, cmd + suffix))) {
70534
+ if (existsSync29(join30(base, cmd + suffix))) {
70489
70535
  return true;
70490
70536
  }
70491
70537
  }
@@ -70549,13 +70595,13 @@ function getInstalledLspServers() {
70549
70595
  init_shared();
70550
70596
  import { existsSync as existsSync30, readFileSync as readFileSync27 } from "fs";
70551
70597
  import { homedir as homedir8 } from "os";
70552
- import { join as join30 } from "path";
70598
+ import { join as join31 } from "path";
70553
70599
  var BUILTIN_MCP_SERVERS = ["context7", "grep_app"];
70554
70600
  function getMcpConfigPaths() {
70555
70601
  return [
70556
- join30(homedir8(), ".claude", ".mcp.json"),
70557
- join30(process.cwd(), ".mcp.json"),
70558
- join30(process.cwd(), ".claude", ".mcp.json")
70602
+ join31(homedir8(), ".claude", ".mcp.json"),
70603
+ join31(process.cwd(), ".mcp.json"),
70604
+ join31(process.cwd(), ".claude", ".mcp.json")
70559
70605
  ];
70560
70606
  }
70561
70607
  function loadUserMcpConfig() {
@@ -71017,11 +71063,11 @@ async function refreshModelCapabilities(options, deps = {}) {
71017
71063
 
71018
71064
  // src/features/mcp-oauth/storage.ts
71019
71065
  init_shared();
71020
- import { chmodSync, existsSync as existsSync31, mkdirSync as mkdirSync7, readFileSync as readFileSync28, unlinkSync as unlinkSync4, writeFileSync as writeFileSync10 } from "fs";
71021
- import { dirname as dirname9, join as join31 } from "path";
71066
+ import { chmodSync, existsSync as existsSync31, mkdirSync as mkdirSync8, readFileSync as readFileSync28, unlinkSync as unlinkSync4, writeFileSync as writeFileSync10 } from "fs";
71067
+ import { dirname as dirname10, join as join32 } from "path";
71022
71068
  var STORAGE_FILE_NAME = "mcp-oauth.json";
71023
71069
  function getMcpOauthStoragePath() {
71024
- return join31(getOpenCodeConfigDir({ binary: "opencode" }), STORAGE_FILE_NAME);
71070
+ return join32(getOpenCodeConfigDir({ binary: "opencode" }), STORAGE_FILE_NAME);
71025
71071
  }
71026
71072
  function normalizeHost(serverHost) {
71027
71073
  let host = serverHost.trim();
@@ -71071,9 +71117,9 @@ function readStore() {
71071
71117
  function writeStore(store2) {
71072
71118
  const filePath = getMcpOauthStoragePath();
71073
71119
  try {
71074
- const dir = dirname9(filePath);
71120
+ const dir = dirname10(filePath);
71075
71121
  if (!existsSync31(dir)) {
71076
- mkdirSync7(dir, { recursive: true });
71122
+ mkdirSync8(dir, { recursive: true });
71077
71123
  }
71078
71124
  writeFileSync10(filePath, JSON.stringify(store2, null, 2), { encoding: "utf-8", mode: 384 });
71079
71125
  chmodSync(filePath, 384);
@@ -1,7 +1,7 @@
1
1
  import type { PluginEntryInfo } from "./plugin-entry";
2
2
  export interface SyncResult {
3
3
  synced: boolean;
4
- error: "file_not_found" | "plugin_not_in_deps" | "parse_error" | "write_error" | null;
4
+ error: "parse_error" | "write_error" | null;
5
5
  message?: string;
6
6
  }
7
7
  export declare function syncCachePackageJsonToIntent(pluginInfo: PluginEntryInfo): SyncResult;
@@ -1,6 +1,7 @@
1
- export declare const PACKAGE_NAME = "oh-my-opencode";
2
- export declare const NPM_REGISTRY_URL = "https://registry.npmjs.org/-/package/oh-my-opencode/dist-tags";
1
+ export declare const PACKAGE_NAME = "oh-my-openagent";
2
+ export declare const NPM_REGISTRY_URL = "https://registry.npmjs.org/-/package/oh-my-openagent/dist-tags";
3
3
  export declare const NPM_FETCH_TIMEOUT = 5000;
4
+ export declare const CACHE_ROOT_DIR: string;
4
5
  export declare const CACHE_DIR: string;
5
6
  export declare const VERSION_FILE: string;
6
7
  export declare function getWindowsAppdataDir(): string | null;
@@ -1,15 +1,16 @@
1
- import type { SessionState, Todo } from "./types";
1
+ import type { ContinuationProgressOptions, SessionState, Todo } from "./types";
2
2
  export interface ContinuationProgressUpdate {
3
3
  previousIncompleteCount?: number;
4
4
  previousStagnationCount: number;
5
5
  stagnationCount: number;
6
6
  hasProgressed: boolean;
7
- progressSource: "none" | "todo";
7
+ progressSource: "none" | "todo" | "activity";
8
8
  }
9
9
  export interface SessionStateStore {
10
10
  getState: (sessionID: string) => SessionState;
11
11
  getExistingState: (sessionID: string) => SessionState | undefined;
12
- trackContinuationProgress: (sessionID: string, incompleteCount: number, todos?: Todo[]) => ContinuationProgressUpdate;
12
+ recordActivity: (sessionID: string) => void;
13
+ trackContinuationProgress: (sessionID: string, incompleteCount: number, todos?: Todo[], options?: ContinuationProgressOptions) => ContinuationProgressUpdate;
13
14
  resetContinuationProgress: (sessionID: string) => void;
14
15
  cancelCountdown: (sessionID: string) => void;
15
16
  cleanup: (sessionID: string) => void;
@@ -71,3 +71,6 @@ export interface ResolveLatestMessageInfoResult {
71
71
  resolvedInfo?: ResolvedMessageInfo;
72
72
  encounteredCompaction: boolean;
73
73
  }
74
+ export interface ContinuationProgressOptions {
75
+ allowActivityProgress?: boolean;
76
+ }