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 +144 -98
- package/dist/hooks/auto-update-checker/checker/sync-package-json.d.ts +1 -1
- package/dist/hooks/auto-update-checker/constants.d.ts +3 -2
- package/dist/hooks/todo-continuation-enforcer/session-state.d.ts +4 -3
- package/dist/hooks/todo-continuation-enforcer/types.d.ts +3 -0
- package/dist/index.js +299 -200
- package/package.json +12 -12
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 ??
|
|
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-
|
|
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
|
-
|
|
49642
|
-
|
|
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
|
|
49993
|
-
return {
|
|
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
|
|
50011
|
-
|
|
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
|
-
|
|
50028
|
-
|
|
50029
|
-
|
|
50030
|
-
|
|
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
|
|
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
|
|
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:
|
|
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.
|
|
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.
|
|
50619
|
-
"oh-my-opencode-darwin-x64": "3.15.
|
|
50620
|
-
"oh-my-opencode-darwin-x64-baseline": "3.15.
|
|
50621
|
-
"oh-my-opencode-linux-arm64": "3.15.
|
|
50622
|
-
"oh-my-opencode-linux-arm64-musl": "3.15.
|
|
50623
|
-
"oh-my-opencode-linux-x64": "3.15.
|
|
50624
|
-
"oh-my-opencode-linux-x64-baseline": "3.15.
|
|
50625
|
-
"oh-my-opencode-linux-x64-musl": "3.15.
|
|
50626
|
-
"oh-my-opencode-linux-x64-musl-baseline": "3.15.
|
|
50627
|
-
"oh-my-opencode-windows-x64": "3.15.
|
|
50628
|
-
"oh-my-opencode-windows-x64-baseline": "3.15.
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
68613
|
+
import { join as join13 } from "path";
|
|
68568
68614
|
function getMarkerPath(directory, sessionID) {
|
|
68569
|
-
return
|
|
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
|
|
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 ?
|
|
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
|
|
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
|
-
|
|
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(
|
|
69391
|
+
paths.push(join21(programFiles, "OpenCode", "OpenCode.exe"));
|
|
69346
69392
|
}
|
|
69347
69393
|
if (localAppData) {
|
|
69348
|
-
paths.push(
|
|
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
|
-
|
|
69357
|
-
|
|
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
|
|
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
|
|
69558
|
+
return join22(homedir6(), "Library", "Caches");
|
|
69513
69559
|
if (platform === "win32")
|
|
69514
|
-
return process.env.LOCALAPPDATA ??
|
|
69515
|
-
return
|
|
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
|
|
69566
|
+
return join22(xdgCacheHome, "opencode");
|
|
69521
69567
|
const fromShared = getOpenCodeCacheDir();
|
|
69522
|
-
const platformDefault =
|
|
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:
|
|
69556
|
-
installedPackagePath:
|
|
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:
|
|
69561
|
-
installedPackagePath:
|
|
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
|
|
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
|
|
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
|
|
69723
|
-
return
|
|
69768
|
+
return join23(xdgCache, "opencode");
|
|
69769
|
+
return join23(homedir7(), ".cache", "opencode");
|
|
69724
69770
|
}
|
|
69725
69771
|
function loadAvailableModelsFromCache() {
|
|
69726
|
-
const cacheFile =
|
|
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
|
|
69800
|
+
import { join as join24 } from "path";
|
|
69755
69801
|
var USER_CONFIG_DIR2 = getOpenCodeConfigPaths({ binary: "opencode", version: null }).configDir;
|
|
69756
|
-
var PROJECT_CONFIG_DIR =
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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:
|
|
70204
|
+
const { join: join28 } = await import("path");
|
|
70159
70205
|
const { homedir: homedir8 } = await import("os");
|
|
70160
70206
|
const pathsToCheck = [
|
|
70161
|
-
|
|
70162
|
-
|
|
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 =
|
|
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
|
|
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(
|
|
70411
|
+
project: detectPluginConfigFile(join28(cwd, ".opencode")).path,
|
|
70366
70412
|
user: detectPluginConfigFile(configDir).path,
|
|
70367
|
-
opencode: detectConfigFile(
|
|
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
|
|
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
|
|
70487
|
+
import { join as join29 } from "path";
|
|
70442
70488
|
function getLspServerAdditionalPathBases(workingDirectory) {
|
|
70443
70489
|
const configDir = getOpenCodeConfigDir({ binary: "opencode" });
|
|
70444
|
-
const dataDir =
|
|
70490
|
+
const dataDir = join29(getDataDir(), "opencode");
|
|
70445
70491
|
return [
|
|
70446
|
-
|
|
70447
|
-
|
|
70448
|
-
|
|
70449
|
-
|
|
70450
|
-
|
|
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(
|
|
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(
|
|
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
|
|
70598
|
+
import { join as join31 } from "path";
|
|
70553
70599
|
var BUILTIN_MCP_SERVERS = ["context7", "grep_app"];
|
|
70554
70600
|
function getMcpConfigPaths() {
|
|
70555
70601
|
return [
|
|
70556
|
-
|
|
70557
|
-
|
|
70558
|
-
|
|
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
|
|
71021
|
-
import { dirname as
|
|
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
|
|
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 =
|
|
71120
|
+
const dir = dirname10(filePath);
|
|
71075
71121
|
if (!existsSync31(dir)) {
|
|
71076
|
-
|
|
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: "
|
|
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-
|
|
2
|
-
export declare const NPM_REGISTRY_URL = "https://registry.npmjs.org/-/package/oh-my-
|
|
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
|
-
|
|
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;
|