lazycodex-ai 5.1.2 → 5.1.3
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 +99 -77
- package/dist/cli-node/index.js +99 -77
- package/package.json +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +33 -7
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +4 -4
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
package/dist/cli-node/index.js
CHANGED
|
@@ -65,7 +65,7 @@ var package_default;
|
|
|
65
65
|
var init_package = __esm(() => {
|
|
66
66
|
package_default = {
|
|
67
67
|
name: "oh-my-opencode",
|
|
68
|
-
version: "5.1.
|
|
68
|
+
version: "5.1.3",
|
|
69
69
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
70
70
|
main: "./dist/index.js",
|
|
71
71
|
types: "dist/index.d.ts",
|
|
@@ -242,7 +242,7 @@ var init_package = __esm(() => {
|
|
|
242
242
|
},
|
|
243
243
|
devDependencies: {
|
|
244
244
|
"@clack/prompts": "^1.8.1",
|
|
245
|
-
"@code-yeongyu/senpi": "2026.9.29-
|
|
245
|
+
"@code-yeongyu/senpi": "2026.9.29-4",
|
|
246
246
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
247
247
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
248
248
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -300,18 +300,18 @@ var init_package = __esm(() => {
|
|
|
300
300
|
typescript: "^7.0.2"
|
|
301
301
|
},
|
|
302
302
|
optionalDependencies: {
|
|
303
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
304
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
305
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
306
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
307
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
308
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
309
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
310
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
311
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
312
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
313
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
314
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
303
|
+
"oh-my-opencode-darwin-arm64": "5.1.3",
|
|
304
|
+
"oh-my-opencode-darwin-x64": "5.1.3",
|
|
305
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.3",
|
|
306
|
+
"oh-my-opencode-linux-arm64": "5.1.3",
|
|
307
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.3",
|
|
308
|
+
"oh-my-opencode-linux-x64": "5.1.3",
|
|
309
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.3",
|
|
310
|
+
"oh-my-opencode-linux-x64-musl": "5.1.3",
|
|
311
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.3",
|
|
312
|
+
"oh-my-opencode-windows-arm64": "5.1.3",
|
|
313
|
+
"oh-my-opencode-windows-x64": "5.1.3",
|
|
314
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.3"
|
|
315
315
|
},
|
|
316
316
|
overrides: {
|
|
317
317
|
hono: "^4.13.8",
|
|
@@ -89099,7 +89099,7 @@ var package_default2;
|
|
|
89099
89099
|
var init_package2 = __esm(() => {
|
|
89100
89100
|
package_default2 = {
|
|
89101
89101
|
name: "@oh-my-opencode/omo-codex",
|
|
89102
|
-
version: "5.1.
|
|
89102
|
+
version: "5.1.3",
|
|
89103
89103
|
type: "module",
|
|
89104
89104
|
private: true,
|
|
89105
89105
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -106532,15 +106532,10 @@ async function checkDeprecatedReasoningKeys() {
|
|
|
106532
106532
|
}
|
|
106533
106533
|
|
|
106534
106534
|
// packages/omo-opencode/src/cli/doctor/checks/dependencies.ts
|
|
106535
|
-
init_src();
|
|
106536
106535
|
import { existsSync as existsSync55 } from "node:fs";
|
|
106537
|
-
import { createRequire as
|
|
106536
|
+
import { createRequire as createRequire4 } from "node:module";
|
|
106538
106537
|
import { homedir as homedir20 } from "node:os";
|
|
106539
|
-
import {
|
|
106540
|
-
|
|
106541
|
-
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
106542
|
-
import { join as join87 } from "path";
|
|
106543
|
-
import { homedir as homedir19, tmpdir as tmpdir4 } from "os";
|
|
106538
|
+
import { join as join89 } from "node:path";
|
|
106544
106539
|
// packages/comment-checker-core/src/release.ts
|
|
106545
106540
|
import { join as join85 } from "node:path";
|
|
106546
106541
|
var COMMENT_CHECKER_RELEASE_VERSION = "0.8.0";
|
|
@@ -106567,12 +106562,45 @@ function isCachedCommentCheckerCurrent(cacheDir, readFile = (path) => readFileSy
|
|
|
106567
106562
|
return false;
|
|
106568
106563
|
}
|
|
106569
106564
|
}
|
|
106565
|
+
// packages/comment-checker-core/src/package-binary.ts
|
|
106566
|
+
import { createRequire as createRequire3 } from "node:module";
|
|
106567
|
+
import { dirname as dirname33, join as join87 } from "node:path";
|
|
106568
|
+
var COMMENT_CHECKER_PACKAGE_NAME = "@code-yeongyu/comment-checker";
|
|
106569
|
+
function isModuleResolutionMiss(error) {
|
|
106570
|
+
return error instanceof Error || typeof error === "object" && error !== null && "name" in error && error.name === "ResolveMessage";
|
|
106571
|
+
}
|
|
106572
|
+
function findCommentCheckerPackageBinary(input) {
|
|
106573
|
+
const packageName = input.packageName ?? COMMENT_CHECKER_PACKAGE_NAME;
|
|
106574
|
+
const platformKey = `${input.platform ?? process.platform}-${input.arch ?? process.arch}`;
|
|
106575
|
+
const packageDir = dirname33(input.packageJsonPath);
|
|
106576
|
+
const candidates = [
|
|
106577
|
+
resolvePlatformPackageBinary(input.packageJsonPath, `${packageName}-${platformKey}`, input.binaryName),
|
|
106578
|
+
join87(packageDir, "vendor", platformKey, input.binaryName),
|
|
106579
|
+
join87(packageDir, "bin", input.binaryName)
|
|
106580
|
+
];
|
|
106581
|
+
return candidates.find((candidate) => candidate !== null && input.existsSync(candidate)) ?? null;
|
|
106582
|
+
}
|
|
106583
|
+
function resolvePlatformPackageBinary(packageJsonPath, platformPackageName, binaryName) {
|
|
106584
|
+
try {
|
|
106585
|
+
const manifestPath = createRequire3(packageJsonPath).resolve(`${platformPackageName}/package.json`);
|
|
106586
|
+
return join87(dirname33(manifestPath), "bin", binaryName);
|
|
106587
|
+
} catch (error) {
|
|
106588
|
+
if (isModuleResolutionMiss(error))
|
|
106589
|
+
return null;
|
|
106590
|
+
throw error;
|
|
106591
|
+
}
|
|
106592
|
+
}
|
|
106593
|
+
// packages/omo-opencode/src/cli/doctor/checks/dependencies.ts
|
|
106594
|
+
init_src();
|
|
106595
|
+
|
|
106570
106596
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
106597
|
+
import { join as join88 } from "path";
|
|
106598
|
+
import { homedir as homedir19, tmpdir as tmpdir4 } from "os";
|
|
106571
106599
|
init_binary_downloader();
|
|
106572
106600
|
init_logger2();
|
|
106573
106601
|
init_plugin_identity();
|
|
106574
106602
|
var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
|
|
106575
|
-
var DEBUG_FILE =
|
|
106603
|
+
var DEBUG_FILE = join88(tmpdir4(), "comment-checker-debug.log");
|
|
106576
106604
|
function getCacheDir2() {
|
|
106577
106605
|
return commentCheckerCacheDir({
|
|
106578
106606
|
platform: process.platform,
|
|
@@ -106631,7 +106659,7 @@ async function getBinaryVersion(binary) {
|
|
|
106631
106659
|
}
|
|
106632
106660
|
}
|
|
106633
106661
|
async function checkAstGrepCli() {
|
|
106634
|
-
const runtimeDir = astGrepRuntimeDir(
|
|
106662
|
+
const runtimeDir = astGrepRuntimeDir(join89(homedir20(), ".omo"));
|
|
106635
106663
|
const sgPath = findSgBinarySync({ runtimeDir });
|
|
106636
106664
|
if (sgPath === null) {
|
|
106637
106665
|
return {
|
|
@@ -106653,20 +106681,14 @@ async function checkAstGrepCli() {
|
|
|
106653
106681
|
};
|
|
106654
106682
|
}
|
|
106655
106683
|
function resolveCommentCheckerPackageJson() {
|
|
106656
|
-
const require2 =
|
|
106684
|
+
const require2 = createRequire4(import.meta.url);
|
|
106657
106685
|
return require2.resolve("@code-yeongyu/comment-checker/package.json");
|
|
106658
106686
|
}
|
|
106659
|
-
function
|
|
106687
|
+
function findCommentCheckerPackageBinary2(baseDirOverride, resolvePackageJsonPath = resolveCommentCheckerPackageJson) {
|
|
106660
106688
|
const binaryName = process.platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
106661
|
-
const platformKey = `${process.platform}-${process.arch === "x64" ? "x64" : process.arch}`;
|
|
106662
106689
|
try {
|
|
106663
|
-
const
|
|
106664
|
-
|
|
106665
|
-
if (existsSync55(vendorPath))
|
|
106666
|
-
return vendorPath;
|
|
106667
|
-
const binPath = join88(packageDir, "bin", binaryName);
|
|
106668
|
-
if (existsSync55(binPath))
|
|
106669
|
-
return binPath;
|
|
106690
|
+
const packageJsonPath = baseDirOverride === undefined ? resolvePackageJsonPath() : join89(baseDirOverride, "package.json");
|
|
106691
|
+
return findCommentCheckerPackageBinary({ packageJsonPath, binaryName, existsSync: existsSync55 });
|
|
106670
106692
|
} catch (error) {
|
|
106671
106693
|
if (!(error instanceof Error) && !isModuleResolutionFailure(error))
|
|
106672
106694
|
throw error;
|
|
@@ -106686,7 +106708,7 @@ async function checkCommentChecker() {
|
|
|
106686
106708
|
};
|
|
106687
106709
|
}
|
|
106688
106710
|
const binaryCheck = await checkBinaryExists("comment-checker");
|
|
106689
|
-
const resolvedPath = binaryCheck.exists ? binaryCheck.path :
|
|
106711
|
+
const resolvedPath = binaryCheck.exists ? binaryCheck.path : findCommentCheckerPackageBinary2();
|
|
106690
106712
|
if (!resolvedPath) {
|
|
106691
106713
|
return {
|
|
106692
106714
|
name: "Comment Checker",
|
|
@@ -106812,7 +106834,7 @@ async function getGhCliInfo(dependencies = {}) {
|
|
|
106812
106834
|
init_zod();
|
|
106813
106835
|
init_opencode_config_dir();
|
|
106814
106836
|
import { existsSync as existsSync56, readFileSync as readFileSync38 } from "node:fs";
|
|
106815
|
-
import { delimiter as delimiter3, dirname as
|
|
106837
|
+
import { delimiter as delimiter3, dirname as dirname35, resolve as resolve23 } from "node:path";
|
|
106816
106838
|
import { fileURLToPath as fileURLToPath7 } from "node:url";
|
|
106817
106839
|
|
|
106818
106840
|
// packages/omo-opencode/src/mcp/cli-suffix.ts
|
|
@@ -106943,7 +106965,7 @@ var LSP_BOOTSTRAP_SCRIPT = [
|
|
|
106943
106965
|
].join(";");
|
|
106944
106966
|
function getModuleDirectory(moduleUrl) {
|
|
106945
106967
|
try {
|
|
106946
|
-
return
|
|
106968
|
+
return dirname35(fileURLToPath7(moduleUrl));
|
|
106947
106969
|
} catch (error) {
|
|
106948
106970
|
if (!(error instanceof Error))
|
|
106949
106971
|
throw error;
|
|
@@ -107040,13 +107062,13 @@ function getInstalledLspServers(options = {}) {
|
|
|
107040
107062
|
init_shared();
|
|
107041
107063
|
import { existsSync as existsSync57, readFileSync as readFileSync39 } from "node:fs";
|
|
107042
107064
|
import { homedir as homedir21 } from "node:os";
|
|
107043
|
-
import { join as
|
|
107065
|
+
import { join as join90 } from "node:path";
|
|
107044
107066
|
var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
|
|
107045
107067
|
function getMcpConfigPaths() {
|
|
107046
107068
|
return [
|
|
107047
|
-
|
|
107048
|
-
|
|
107049
|
-
|
|
107069
|
+
join90(homedir21(), ".claude", ".mcp.json"),
|
|
107070
|
+
join90(process.cwd(), ".mcp.json"),
|
|
107071
|
+
join90(process.cwd(), ".claude", ".mcp.json")
|
|
107050
107072
|
];
|
|
107051
107073
|
}
|
|
107052
107074
|
function loadUserMcpConfig() {
|
|
@@ -107328,7 +107350,7 @@ init_src();
|
|
|
107328
107350
|
import { existsSync as existsSync59 } from "node:fs";
|
|
107329
107351
|
import { lstat as lstat16, readdir as readdir14, readFile as readFile30 } from "node:fs/promises";
|
|
107330
107352
|
import { homedir as homedir23 } from "node:os";
|
|
107331
|
-
import { basename as basename12, join as
|
|
107353
|
+
import { basename as basename12, join as join91, resolve as resolve24 } from "node:path";
|
|
107332
107354
|
// packages/omo-opencode/package.json
|
|
107333
107355
|
var package_default3 = {
|
|
107334
107356
|
name: "@oh-my-opencode/omo-opencode",
|
|
@@ -107397,13 +107419,13 @@ var CODEX_BIN_NAMES = [
|
|
|
107397
107419
|
"omo-git-bash-hook"
|
|
107398
107420
|
];
|
|
107399
107421
|
async function gatherCodexSummary(deps = {}) {
|
|
107400
|
-
const codexHome = resolve24(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
107422
|
+
const codexHome = resolve24(deps.codexHome ?? process.env.CODEX_HOME ?? join91(homedir23(), ".codex"));
|
|
107401
107423
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
107402
107424
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
107403
107425
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
107404
|
-
const manifest = pluginRoot === null ? null : await readJson(
|
|
107405
|
-
const installSnapshot = pluginRoot === null ? null : await readJson(
|
|
107406
|
-
const configPath =
|
|
107426
|
+
const manifest = pluginRoot === null ? null : await readJson(join91(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
107427
|
+
const installSnapshot = pluginRoot === null ? null : await readJson(join91(pluginRoot, "lazycodex-install.json"));
|
|
107428
|
+
const configPath = join91(codexHome, "config.toml");
|
|
107407
107429
|
const pluginVersion = stringField(manifest, "version");
|
|
107408
107430
|
return {
|
|
107409
107431
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
@@ -107460,7 +107482,7 @@ function buildCodexIssues(summary) {
|
|
|
107460
107482
|
if (summary.pluginRoot === null) {
|
|
107461
107483
|
issues.push({
|
|
107462
107484
|
title: "OMO Codex plugin is not installed",
|
|
107463
|
-
description: `Expected cached plugin at ${
|
|
107485
|
+
description: `Expected cached plugin at ${join91("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
|
|
107464
107486
|
fix: "Run: npx lazycodex-ai install",
|
|
107465
107487
|
severity: "error",
|
|
107466
107488
|
affects: ["plugin loading"]
|
|
@@ -107525,12 +107547,12 @@ function buildCodexIssues(summary) {
|
|
|
107525
107547
|
return issues;
|
|
107526
107548
|
}
|
|
107527
107549
|
async function resolveInstalledPluginRoot(codexHome) {
|
|
107528
|
-
const pluginRoot =
|
|
107550
|
+
const pluginRoot = join91(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
|
|
107529
107551
|
if (!existsSync59(pluginRoot))
|
|
107530
107552
|
return null;
|
|
107531
107553
|
const versions = await readdir14(pluginRoot, { withFileTypes: true });
|
|
107532
107554
|
const candidates = versions.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
|
|
107533
|
-
return candidates.length === 0 ? null :
|
|
107555
|
+
return candidates.length === 0 ? null : join91(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
|
|
107534
107556
|
}
|
|
107535
107557
|
async function readCodexConfigSummary(configPath) {
|
|
107536
107558
|
if (!existsSync59(configPath)) {
|
|
@@ -107558,13 +107580,13 @@ async function readCodexConfigSummary(configPath) {
|
|
|
107558
107580
|
async function readLinkedBins(binDir) {
|
|
107559
107581
|
const linked = [];
|
|
107560
107582
|
for (const name of CODEX_BIN_NAMES) {
|
|
107561
|
-
if (await pathExists3(
|
|
107583
|
+
if (await pathExists3(join91(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
|
|
107562
107584
|
linked.push(name);
|
|
107563
107585
|
}
|
|
107564
107586
|
return linked;
|
|
107565
107587
|
}
|
|
107566
107588
|
async function readLinkedAgents(codexHome) {
|
|
107567
|
-
const agentsDir =
|
|
107589
|
+
const agentsDir = join91(codexHome, "agents");
|
|
107568
107590
|
if (!existsSync59(agentsDir))
|
|
107569
107591
|
return [];
|
|
107570
107592
|
const entries = await readdir14(agentsDir, { withFileTypes: true });
|
|
@@ -107698,7 +107720,7 @@ function resolveLatestVersion(input) {
|
|
|
107698
107720
|
init_src();
|
|
107699
107721
|
import { readdir as readdir15, readFile as readFile31, stat as stat7 } from "node:fs/promises";
|
|
107700
107722
|
import { homedir as homedir24 } from "node:os";
|
|
107701
|
-
import { dirname as
|
|
107723
|
+
import { dirname as dirname36, isAbsolute as isAbsolute14, join as join92, relative as relative9, resolve as resolve25, sep as sep9 } from "node:path";
|
|
107702
107724
|
var CODEX_COMPONENTS_CHECK_ID = "codex-components";
|
|
107703
107725
|
var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
|
|
107704
107726
|
var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
|
|
@@ -107708,7 +107730,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
107708
107730
|
const env = deps.env ?? process.env;
|
|
107709
107731
|
const platform = deps.platform ?? process.platform;
|
|
107710
107732
|
const arch = deps.arch ?? process.arch;
|
|
107711
|
-
const codexHome = resolve25(deps.codexHome ?? env["CODEX_HOME"] ??
|
|
107733
|
+
const codexHome = resolve25(deps.codexHome ?? env["CODEX_HOME"] ?? join92(homedir24(), ".codex"));
|
|
107712
107734
|
const summary = await gatherCodexSummary({ ...deps, codexHome });
|
|
107713
107735
|
if (summary.pluginRoot === null) {
|
|
107714
107736
|
return {
|
|
@@ -107733,7 +107755,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
107733
107755
|
});
|
|
107734
107756
|
}
|
|
107735
107757
|
const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
|
|
107736
|
-
const runtimeSgPath =
|
|
107758
|
+
const runtimeSgPath = join92(runtimeSgDir, sgBinaryName(platform));
|
|
107737
107759
|
const sg = findSgBinarySync({
|
|
107738
107760
|
arch,
|
|
107739
107761
|
env,
|
|
@@ -107772,7 +107794,7 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
107772
107794
|
const manifest = await readJson2(manifestPath);
|
|
107773
107795
|
if (manifest === null || !isRecord18(manifest["mcpServers"]))
|
|
107774
107796
|
continue;
|
|
107775
|
-
const manifestRoot =
|
|
107797
|
+
const manifestRoot = dirname36(manifestPath);
|
|
107776
107798
|
const isRootManifest = resolve25(manifestRoot) === resolve25(pluginRoot);
|
|
107777
107799
|
for (const server of Object.values(manifest["mcpServers"])) {
|
|
107778
107800
|
if (!isRecord18(server) || !Array.isArray(server["args"]))
|
|
@@ -107793,7 +107815,7 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
107793
107815
|
continue;
|
|
107794
107816
|
const commands = [];
|
|
107795
107817
|
collectHookCommands(manifest, commands);
|
|
107796
|
-
const hookPluginRoot =
|
|
107818
|
+
const hookPluginRoot = dirname36(dirname36(hookManifestPath));
|
|
107797
107819
|
for (const command of commands) {
|
|
107798
107820
|
for (const relativePath of extractPluginRootPaths(command)) {
|
|
107799
107821
|
referencedCount += 1;
|
|
@@ -107832,7 +107854,7 @@ async function classifyBundleTarget(bundleRoot, baseRoot, relativePath, allowEsc
|
|
|
107832
107854
|
}
|
|
107833
107855
|
async function findHookManifestPaths(root) {
|
|
107834
107856
|
const paths = await findManifestPaths(root, "hooks.json");
|
|
107835
|
-
return paths.filter((path) =>
|
|
107857
|
+
return paths.filter((path) => dirname36(path).endsWith(`${sep9}hooks`));
|
|
107836
107858
|
}
|
|
107837
107859
|
async function findManifestPaths(root, manifestName) {
|
|
107838
107860
|
let entries;
|
|
@@ -107845,7 +107867,7 @@ async function findManifestPaths(root, manifestName) {
|
|
|
107845
107867
|
for (const entry of entries) {
|
|
107846
107868
|
if (entry.name === "node_modules" || entry.name === ".git")
|
|
107847
107869
|
continue;
|
|
107848
|
-
const entryPath =
|
|
107870
|
+
const entryPath = join92(root, entry.name);
|
|
107849
107871
|
if (entry.isDirectory()) {
|
|
107850
107872
|
paths.push(...await findManifestPaths(entryPath, manifestName));
|
|
107851
107873
|
continue;
|
|
@@ -107889,18 +107911,18 @@ function isPluginRuntimePathArg(arg) {
|
|
|
107889
107911
|
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute14(arg));
|
|
107890
107912
|
}
|
|
107891
107913
|
function runtimeSgDirectory(codexHome, platform, arch) {
|
|
107892
|
-
return
|
|
107914
|
+
return join92(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
|
|
107893
107915
|
}
|
|
107894
107916
|
function describeSgSource(sgPath, env, runtimeSgDir, platform) {
|
|
107895
107917
|
const override = env[SG_PATH_ENV_KEY]?.trim();
|
|
107896
107918
|
if (override !== undefined && override.length > 0 && sgPath === override)
|
|
107897
107919
|
return `env override ${SG_PATH_ENV_KEY}`;
|
|
107898
|
-
if (sgPath ===
|
|
107920
|
+
if (sgPath === join92(runtimeSgDir, sgBinaryName(platform)))
|
|
107899
107921
|
return "runtime dir";
|
|
107900
107922
|
return "PATH";
|
|
107901
107923
|
}
|
|
107902
107924
|
async function readBootstrapStateSummary(codexHome) {
|
|
107903
|
-
const statePath =
|
|
107925
|
+
const statePath = join92(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
|
|
107904
107926
|
const raw = await readJson2(statePath);
|
|
107905
107927
|
if (raw === null)
|
|
107906
107928
|
return null;
|
|
@@ -107979,16 +108001,16 @@ function isRecord18(value) {
|
|
|
107979
108001
|
import { existsSync as existsSync60 } from "node:fs";
|
|
107980
108002
|
import { readFile as readFile32 } from "node:fs/promises";
|
|
107981
108003
|
import { homedir as homedir25 } from "node:os";
|
|
107982
|
-
import { join as
|
|
108004
|
+
import { join as join93, resolve as resolve26 } from "node:path";
|
|
107983
108005
|
var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
|
|
107984
108006
|
var CHECK_NAME = "codex-runtime-wrapper";
|
|
107985
108007
|
var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
|
|
107986
108008
|
async function checkCodexRuntimeWrapper(deps = {}) {
|
|
107987
|
-
const codexHome = resolve26(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
108009
|
+
const codexHome = resolve26(deps.codexHome ?? process.env.CODEX_HOME ?? join93(homedir25(), ".codex"));
|
|
107988
108010
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
107989
108011
|
const platform = deps.platform ?? process.platform;
|
|
107990
|
-
const wrapperPath =
|
|
107991
|
-
const legacyWrapperPath =
|
|
108012
|
+
const wrapperPath = join93(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
|
|
108013
|
+
const legacyWrapperPath = join93(binDir, platform === "win32" ? "omo.cmd" : "omo");
|
|
107992
108014
|
const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
|
|
107993
108015
|
const issues = [];
|
|
107994
108016
|
if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
|
|
@@ -108524,12 +108546,12 @@ import {
|
|
|
108524
108546
|
unlinkSync as unlinkSync9,
|
|
108525
108547
|
writeFileSync as writeFileSync14
|
|
108526
108548
|
} from "node:fs";
|
|
108527
|
-
import { basename as basename13, dirname as
|
|
108549
|
+
import { basename as basename13, dirname as dirname37, join as join96 } from "node:path";
|
|
108528
108550
|
|
|
108529
108551
|
// packages/mcp-client-core/src/config-dir.ts
|
|
108530
108552
|
import { existsSync as existsSync61, realpathSync as realpathSync10 } from "node:fs";
|
|
108531
108553
|
import { homedir as homedir26 } from "node:os";
|
|
108532
|
-
import { join as
|
|
108554
|
+
import { join as join94, resolve as resolve27 } from "node:path";
|
|
108533
108555
|
function resolveConfigPath2(pathValue) {
|
|
108534
108556
|
const resolvedPath = resolve27(pathValue);
|
|
108535
108557
|
if (!existsSync61(resolvedPath))
|
|
@@ -108547,13 +108569,13 @@ function getOpenCodeCliConfigDir(env = process.env) {
|
|
|
108547
108569
|
if (customConfigDir) {
|
|
108548
108570
|
return resolveConfigPath2(customConfigDir);
|
|
108549
108571
|
}
|
|
108550
|
-
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() ||
|
|
108551
|
-
return resolveConfigPath2(
|
|
108572
|
+
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join94(homedir26(), ".config");
|
|
108573
|
+
return resolveConfigPath2(join94(xdgConfigDir, "opencode"));
|
|
108552
108574
|
}
|
|
108553
108575
|
|
|
108554
108576
|
// packages/mcp-client-core/src/mcp-oauth/storage-index.ts
|
|
108555
108577
|
import { chmodSync as chmodSync4, existsSync as existsSync62, readFileSync as readFileSync41, renameSync as renameSync7, writeFileSync as writeFileSync13 } from "node:fs";
|
|
108556
|
-
import { join as
|
|
108578
|
+
import { join as join95 } from "node:path";
|
|
108557
108579
|
var INDEX_FILE_NAME = "index.json";
|
|
108558
108580
|
function isTokenIndex(value) {
|
|
108559
108581
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
@@ -108561,7 +108583,7 @@ function isTokenIndex(value) {
|
|
|
108561
108583
|
return Object.values(value).every((entry) => typeof entry === "string");
|
|
108562
108584
|
}
|
|
108563
108585
|
function getIndexPath(storageDir) {
|
|
108564
|
-
return
|
|
108586
|
+
return join95(storageDir, INDEX_FILE_NAME);
|
|
108565
108587
|
}
|
|
108566
108588
|
function readTokenIndex(storageDir) {
|
|
108567
108589
|
const indexPath = getIndexPath(storageDir);
|
|
@@ -108605,16 +108627,16 @@ function deleteTokenIndexEntry(storageDir, hash) {
|
|
|
108605
108627
|
var STORAGE_DIR_NAME = "mcp-oauth";
|
|
108606
108628
|
var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
|
|
108607
108629
|
function getMcpOauthStorageDir() {
|
|
108608
|
-
return
|
|
108630
|
+
return join96(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
|
|
108609
108631
|
}
|
|
108610
108632
|
function getMcpOauthServerHash(serverHost, resource) {
|
|
108611
108633
|
return createHash7("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
|
|
108612
108634
|
}
|
|
108613
108635
|
function getMcpOauthStoragePath(serverHost, resource) {
|
|
108614
|
-
return
|
|
108636
|
+
return join96(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
|
|
108615
108637
|
}
|
|
108616
108638
|
function getLegacyStoragePath() {
|
|
108617
|
-
return
|
|
108639
|
+
return join96(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
|
|
108618
108640
|
}
|
|
108619
108641
|
function normalizeHost2(serverHost) {
|
|
108620
108642
|
let host = serverHost.trim();
|
|
@@ -108708,7 +108730,7 @@ function readLegacyStore() {
|
|
|
108708
108730
|
}
|
|
108709
108731
|
function writeTokenFile(filePath, token) {
|
|
108710
108732
|
try {
|
|
108711
|
-
const dir =
|
|
108733
|
+
const dir = dirname37(filePath);
|
|
108712
108734
|
if (!existsSync63(dir)) {
|
|
108713
108735
|
mkdirSync17(dir, { recursive: true });
|
|
108714
108736
|
}
|
|
@@ -108793,7 +108815,7 @@ function listTokensByHost(serverHost) {
|
|
|
108793
108815
|
for (const [hash, indexedKey] of Object.entries(index)) {
|
|
108794
108816
|
if (!indexedKey.startsWith(prefix))
|
|
108795
108817
|
continue;
|
|
108796
|
-
const indexedToken = readTokenFile(
|
|
108818
|
+
const indexedToken = readTokenFile(join96(getMcpOauthStorageDir(), `${hash}.json`));
|
|
108797
108819
|
if (indexedToken)
|
|
108798
108820
|
result[indexedKey] = indexedToken;
|
|
108799
108821
|
}
|
|
@@ -108808,7 +108830,7 @@ function listAllTokens() {
|
|
|
108808
108830
|
for (const entry of readdirSync13(dir, { withFileTypes: true })) {
|
|
108809
108831
|
if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
|
|
108810
108832
|
continue;
|
|
108811
|
-
const token = readTokenFile(
|
|
108833
|
+
const token = readTokenFile(join96(dir, entry.name));
|
|
108812
108834
|
const hash = basename13(entry.name, ".json");
|
|
108813
108835
|
if (token)
|
|
108814
108836
|
result[index[hash] ?? hash] = token;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lazycodex-ai",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.3",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
|
|
9
9
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
|
|
10
10
|
"timeout": 30,
|
|
11
|
-
"statusMessage": "(OmO 5.1.
|
|
11
|
+
"statusMessage": "(OmO 5.1.3) Checking Bootstrap Provisioning"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -146,6 +146,34 @@ function joinPatchLines(lines) {
|
|
|
146
146
|
`)}
|
|
147
147
|
`;
|
|
148
148
|
}
|
|
149
|
+
// ../../comment-checker-core/src/package-binary.ts
|
|
150
|
+
import { createRequire } from "node:module";
|
|
151
|
+
import { dirname, join } from "node:path";
|
|
152
|
+
var COMMENT_CHECKER_PACKAGE_NAME = "@code-yeongyu/comment-checker";
|
|
153
|
+
function isModuleResolutionMiss(error) {
|
|
154
|
+
return error instanceof Error || typeof error === "object" && error !== null && "name" in error && error.name === "ResolveMessage";
|
|
155
|
+
}
|
|
156
|
+
function findCommentCheckerPackageBinary(input) {
|
|
157
|
+
const packageName = input.packageName ?? COMMENT_CHECKER_PACKAGE_NAME;
|
|
158
|
+
const platformKey = `${input.platform ?? process.platform}-${input.arch ?? process.arch}`;
|
|
159
|
+
const packageDir = dirname(input.packageJsonPath);
|
|
160
|
+
const candidates = [
|
|
161
|
+
resolvePlatformPackageBinary(input.packageJsonPath, `${packageName}-${platformKey}`, input.binaryName),
|
|
162
|
+
join(packageDir, "vendor", platformKey, input.binaryName),
|
|
163
|
+
join(packageDir, "bin", input.binaryName)
|
|
164
|
+
];
|
|
165
|
+
return candidates.find((candidate) => candidate !== null && input.existsSync(candidate)) ?? null;
|
|
166
|
+
}
|
|
167
|
+
function resolvePlatformPackageBinary(packageJsonPath, platformPackageName, binaryName) {
|
|
168
|
+
try {
|
|
169
|
+
const manifestPath = createRequire(packageJsonPath).resolve(`${platformPackageName}/package.json`);
|
|
170
|
+
return join(dirname(manifestPath), "bin", binaryName);
|
|
171
|
+
} catch (error) {
|
|
172
|
+
if (isModuleResolutionMiss(error))
|
|
173
|
+
return null;
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
149
177
|
// components/comment-checker/src/hook-input.ts
|
|
150
178
|
function toHookInput(request, context) {
|
|
151
179
|
return {
|
|
@@ -302,8 +330,7 @@ function getContentText(content) {
|
|
|
302
330
|
// components/comment-checker/src/runner.ts
|
|
303
331
|
import { spawn } from "node:child_process";
|
|
304
332
|
import { existsSync } from "node:fs";
|
|
305
|
-
import { createRequire } from "node:module";
|
|
306
|
-
import { dirname, join } from "node:path";
|
|
333
|
+
import { createRequire as createRequire2 } from "node:module";
|
|
307
334
|
var MAX_PROCESS_OUTPUT_BYTES = 64 * 1024;
|
|
308
335
|
async function runCommentChecker2(input, options = {}) {
|
|
309
336
|
const binaryPath = options.binaryPath ?? (options.resolveBinary ? options.resolveBinary() : resolveCommentCheckerBinary2());
|
|
@@ -361,7 +388,7 @@ function resolveCommentCheckerBinary2() {
|
|
|
361
388
|
}
|
|
362
389
|
function resolvePackageApiBinary() {
|
|
363
390
|
try {
|
|
364
|
-
const require2 =
|
|
391
|
+
const require2 = createRequire2(import.meta.url);
|
|
365
392
|
const packageExports = require2(commentCheckerPackageName());
|
|
366
393
|
if (!isCommentCheckerPackage(packageExports))
|
|
367
394
|
return;
|
|
@@ -373,10 +400,9 @@ function resolvePackageApiBinary() {
|
|
|
373
400
|
}
|
|
374
401
|
function resolvePackageBinary(binaryName) {
|
|
375
402
|
try {
|
|
376
|
-
const require2 =
|
|
377
|
-
const
|
|
378
|
-
|
|
379
|
-
return existsSync(binaryPath) ? binaryPath : undefined;
|
|
403
|
+
const require2 = createRequire2(import.meta.url);
|
|
404
|
+
const packageJsonPath = require2.resolve(`${commentCheckerPackageName()}/package.json`);
|
|
405
|
+
return findCommentCheckerPackageBinary({ packageJsonPath, binaryName, existsSync }) ?? undefined;
|
|
380
406
|
} catch {
|
|
381
407
|
return;
|
|
382
408
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
import { findCommentCheckerPackageBinary } from "@oh-my-opencode/comment-checker-core";
|
|
5
6
|
|
|
6
7
|
import type { CommentCheckerHookInput } from "./core.js";
|
|
7
8
|
|
|
@@ -108,9 +109,8 @@ function resolvePackageApiBinary(): string | undefined {
|
|
|
108
109
|
function resolvePackageBinary(binaryName: string): string | undefined {
|
|
109
110
|
try {
|
|
110
111
|
const require = createRequire(import.meta.url);
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
return existsSync(binaryPath) ? binaryPath : undefined;
|
|
112
|
+
const packageJsonPath = require.resolve(`${commentCheckerPackageName()}/package.json`);
|
|
113
|
+
return findCommentCheckerPackageBinary({ packageJsonPath, binaryName, existsSync }) ?? undefined;
|
|
114
114
|
} catch {
|
|
115
115
|
return undefined;
|
|
116
116
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
|
|
10
10
|
"timeout": 5,
|
|
11
|
-
"statusMessage": "(OmO 5.1.
|
|
11
|
+
"statusMessage": "(OmO 5.1.3) Recommending Git Bash MCP"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"type": "command",
|
|
21
21
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
22
22
|
"timeout": 5,
|
|
23
|
-
"statusMessage": "(OmO 5.1.
|
|
23
|
+
"statusMessage": "(OmO 5.1.3) Resetting Git Bash MCP Reminder"
|
|
24
24
|
}
|
|
25
25
|
]
|
|
26
26
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
|
|
10
10
|
"timeout": 10,
|
|
11
|
-
"statusMessage": "(OmO 5.1.
|
|
11
|
+
"statusMessage": "(OmO 5.1.3) Verifying LazyCodex Executor Evidence"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|