lazycodex-ai 5.0.0-beta.87 → 5.0.0-beta.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/cli/index.js +90 -73
  2. package/dist/cli-node/index.js +90 -73
  3. package/package.json +1 -1
  4. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  5. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  6. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  7. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  8. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  9. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  10. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  11. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  12. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  13. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  14. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  15. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  17. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  19. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  21. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  23. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  25. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  27. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  28. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  29. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  30. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  31. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  32. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  33. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  34. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  35. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  36. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  37. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  38. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  49. package/packages/omo-codex/plugin/package-lock.json +12 -12
  50. package/packages/omo-codex/plugin/package.json +1 -1
  51. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  52. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +2 -1
  53. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +30 -7
  54. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +17 -5
  55. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  56. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  57. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +2 -1
  58. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +30 -7
  59. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +17 -5
@@ -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.0.0-beta.87",
68
+ version: "5.0.0-beta.88",
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",
@@ -248,7 +248,7 @@ var init_package = __esm(() => {
248
248
  zod: "^4.6.5"
249
249
  },
250
250
  devDependencies: {
251
- "@code-yeongyu/senpi": "2026.9.23-4",
251
+ "@code-yeongyu/senpi": "2026.9.23-5",
252
252
  "@oh-my-opencode/agents-md-core": "workspace:*",
253
253
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
254
254
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -289,18 +289,18 @@ var init_package = __esm(() => {
289
289
  typescript: "^7.0.2"
290
290
  },
291
291
  optionalDependencies: {
292
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.87",
293
- "oh-my-opencode-darwin-x64": "5.0.0-beta.87",
294
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.87",
295
- "oh-my-opencode-linux-arm64": "5.0.0-beta.87",
296
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.87",
297
- "oh-my-opencode-linux-x64": "5.0.0-beta.87",
298
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.87",
299
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.87",
300
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.87",
301
- "oh-my-opencode-windows-arm64": "5.0.0-beta.87",
302
- "oh-my-opencode-windows-x64": "5.0.0-beta.87",
303
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.87"
292
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.88",
293
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.88",
294
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.88",
295
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.88",
296
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.88",
297
+ "oh-my-opencode-linux-x64": "5.0.0-beta.88",
298
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.88",
299
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.88",
300
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.88",
301
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.88",
302
+ "oh-my-opencode-windows-x64": "5.0.0-beta.88",
303
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.88"
304
304
  },
305
305
  overrides: {
306
306
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -88838,7 +88838,7 @@ var package_default2;
88838
88838
  var init_package2 = __esm(() => {
88839
88839
  package_default2 = {
88840
88840
  name: "@oh-my-opencode/omo-codex",
88841
- version: "5.0.0-beta.87",
88841
+ version: "5.0.0-beta.88",
88842
88842
  type: "module",
88843
88843
  private: true,
88844
88844
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -105442,28 +105442,41 @@ init_src();
105442
105442
  import { existsSync as existsSync53 } from "node:fs";
105443
105443
  import { createRequire as createRequire3 } from "node:module";
105444
105444
  import { homedir as homedir19 } from "node:os";
105445
- import { dirname as dirname31, join as join82 } from "node:path";
105445
+ import { dirname as dirname31, join as join83 } from "node:path";
105446
105446
 
105447
+ // packages/omo-opencode/src/hooks/comment-checker/downloader.ts
105448
+ import { join as join82 } from "path";
105449
+ import { homedir as homedir18, tmpdir as tmpdir4 } from "os";
105450
+ // packages/comment-checker-core/src/release.ts
105451
+ import { join as join81 } from "node:path";
105452
+ function commentCheckerBinaryName(platform) {
105453
+ return platform === "win32" ? "comment-checker.exe" : "comment-checker";
105454
+ }
105455
+ function commentCheckerCacheDir(input) {
105456
+ if (input.platform === "win32") {
105457
+ const localAppData = input.env.LOCALAPPDATA || input.env.APPDATA;
105458
+ const base = localAppData || join81(input.homedir, "AppData", "Local");
105459
+ return join81(base, input.cacheDirName, "bin");
105460
+ }
105461
+ const base = input.env.XDG_CACHE_HOME || join81(input.homedir, ".cache");
105462
+ return join81(base, input.cacheDirName, "bin");
105463
+ }
105447
105464
  // packages/omo-opencode/src/hooks/comment-checker/downloader.ts
105448
105465
  init_binary_downloader();
105449
105466
  init_logger2();
105450
105467
  init_plugin_identity();
105451
- import { join as join81 } from "path";
105452
- import { homedir as homedir18, tmpdir as tmpdir4 } from "os";
105453
105468
  var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
105454
- var DEBUG_FILE = join81(tmpdir4(), "comment-checker-debug.log");
105469
+ var DEBUG_FILE = join82(tmpdir4(), "comment-checker-debug.log");
105455
105470
  function getCacheDir2() {
105456
- if (process.platform === "win32") {
105457
- const localAppData = process.env.LOCALAPPDATA || process.env.APPDATA;
105458
- const base = localAppData || join81(homedir18(), "AppData", "Local");
105459
- return join81(base, CACHE_DIR_NAME, "bin");
105460
- }
105461
- const xdgCache = process.env.XDG_CACHE_HOME;
105462
- const base = xdgCache || join81(homedir18(), ".cache");
105463
- return join81(base, CACHE_DIR_NAME, "bin");
105471
+ return commentCheckerCacheDir({
105472
+ platform: process.platform,
105473
+ env: process.env,
105474
+ homedir: homedir18(),
105475
+ cacheDirName: CACHE_DIR_NAME
105476
+ });
105464
105477
  }
105465
105478
  function getBinaryName() {
105466
- return process.platform === "win32" ? "comment-checker.exe" : "comment-checker";
105479
+ return commentCheckerBinaryName(process.platform);
105467
105480
  }
105468
105481
  function getCachedBinaryPath2() {
105469
105482
  return getCachedBinaryPath(getCacheDir2(), getBinaryName());
@@ -105510,7 +105523,7 @@ async function getBinaryVersion(binary) {
105510
105523
  }
105511
105524
  }
105512
105525
  async function checkAstGrepCli() {
105513
- const runtimeDir = astGrepRuntimeDir(join82(homedir19(), ".omo"));
105526
+ const runtimeDir = astGrepRuntimeDir(join83(homedir19(), ".omo"));
105514
105527
  const sgPath = findSgBinarySync({ runtimeDir });
105515
105528
  if (sgPath === null) {
105516
105529
  return {
@@ -105540,10 +105553,10 @@ function findCommentCheckerPackageBinary(baseDirOverride, resolvePackageJsonPath
105540
105553
  const platformKey = `${process.platform}-${process.arch === "x64" ? "x64" : process.arch}`;
105541
105554
  try {
105542
105555
  const packageDir = baseDirOverride ?? dirname31(resolvePackageJsonPath());
105543
- const vendorPath = join82(packageDir, "vendor", platformKey, binaryName);
105556
+ const vendorPath = join83(packageDir, "vendor", platformKey, binaryName);
105544
105557
  if (existsSync53(vendorPath))
105545
105558
  return vendorPath;
105546
- const binPath = join82(packageDir, "bin", binaryName);
105559
+ const binPath = join83(packageDir, "bin", binaryName);
105547
105560
  if (existsSync53(binPath))
105548
105561
  return binPath;
105549
105562
  } catch (error) {
@@ -105919,13 +105932,13 @@ function getInstalledLspServers(options = {}) {
105919
105932
  init_shared();
105920
105933
  import { existsSync as existsSync55, readFileSync as readFileSync35 } from "node:fs";
105921
105934
  import { homedir as homedir20 } from "node:os";
105922
- import { join as join83 } from "node:path";
105935
+ import { join as join84 } from "node:path";
105923
105936
  var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
105924
105937
  function getMcpConfigPaths() {
105925
105938
  return [
105926
- join83(homedir20(), ".claude", ".mcp.json"),
105927
- join83(process.cwd(), ".mcp.json"),
105928
- join83(process.cwd(), ".claude", ".mcp.json")
105939
+ join84(homedir20(), ".claude", ".mcp.json"),
105940
+ join84(process.cwd(), ".mcp.json"),
105941
+ join84(process.cwd(), ".claude", ".mcp.json")
105929
105942
  ];
105930
105943
  }
105931
105944
  function loadUserMcpConfig() {
@@ -106207,7 +106220,7 @@ init_src();
106207
106220
  import { existsSync as existsSync57 } from "node:fs";
106208
106221
  import { lstat as lstat16, readdir as readdir14, readFile as readFile28 } from "node:fs/promises";
106209
106222
  import { homedir as homedir22 } from "node:os";
106210
- import { basename as basename11, join as join84, resolve as resolve23 } from "node:path";
106223
+ import { basename as basename11, join as join85, resolve as resolve23 } from "node:path";
106211
106224
  // packages/omo-opencode/package.json
106212
106225
  var package_default3 = {
106213
106226
  name: "@oh-my-opencode/omo-opencode",
@@ -106219,6 +106232,10 @@ var package_default3 = {
106219
106232
  "./config-migration": {
106220
106233
  types: "./src/config-migration/index.ts",
106221
106234
  import: "./src/config-migration/index.ts"
106235
+ },
106236
+ "./binary-downloader": {
106237
+ types: "./src/shared/binary-downloader.ts",
106238
+ import: "./src/shared/binary-downloader.ts"
106222
106239
  }
106223
106240
  },
106224
106241
  scripts: {
@@ -106273,13 +106290,13 @@ var CODEX_BIN_NAMES = [
106273
106290
  "omo-git-bash-hook"
106274
106291
  ];
106275
106292
  async function gatherCodexSummary(deps = {}) {
106276
- const codexHome = resolve23(deps.codexHome ?? process.env.CODEX_HOME ?? join84(homedir22(), ".codex"));
106293
+ const codexHome = resolve23(deps.codexHome ?? process.env.CODEX_HOME ?? join85(homedir22(), ".codex"));
106277
106294
  const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
106278
106295
  const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
106279
106296
  const pluginRoot = await resolveInstalledPluginRoot(codexHome);
106280
- const manifest = pluginRoot === null ? null : await readJson(join84(pluginRoot, ".codex-plugin", "plugin.json"));
106281
- const installSnapshot = pluginRoot === null ? null : await readJson(join84(pluginRoot, "lazycodex-install.json"));
106282
- const configPath = join84(codexHome, "config.toml");
106297
+ const manifest = pluginRoot === null ? null : await readJson(join85(pluginRoot, ".codex-plugin", "plugin.json"));
106298
+ const installSnapshot = pluginRoot === null ? null : await readJson(join85(pluginRoot, "lazycodex-install.json"));
106299
+ const configPath = join85(codexHome, "config.toml");
106283
106300
  const pluginVersion = stringField(manifest, "version");
106284
106301
  return {
106285
106302
  codexPath: detection.found && "path" in detection ? detection.path : null,
@@ -106336,7 +106353,7 @@ function buildCodexIssues(summary) {
106336
106353
  if (summary.pluginRoot === null) {
106337
106354
  issues.push({
106338
106355
  title: "OMO Codex plugin is not installed",
106339
- description: `Expected cached plugin at ${join84("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
106356
+ description: `Expected cached plugin at ${join85("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
106340
106357
  fix: "Run: npx lazycodex-ai install",
106341
106358
  severity: "error",
106342
106359
  affects: ["plugin loading"]
@@ -106401,12 +106418,12 @@ function buildCodexIssues(summary) {
106401
106418
  return issues;
106402
106419
  }
106403
106420
  async function resolveInstalledPluginRoot(codexHome) {
106404
- const pluginRoot = join84(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
106421
+ const pluginRoot = join85(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
106405
106422
  if (!existsSync57(pluginRoot))
106406
106423
  return null;
106407
106424
  const versions = await readdir14(pluginRoot, { withFileTypes: true });
106408
106425
  const candidates = versions.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
106409
- return candidates.length === 0 ? null : join84(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
106426
+ return candidates.length === 0 ? null : join85(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
106410
106427
  }
106411
106428
  async function readCodexConfigSummary(configPath) {
106412
106429
  if (!existsSync57(configPath)) {
@@ -106434,13 +106451,13 @@ async function readCodexConfigSummary(configPath) {
106434
106451
  async function readLinkedBins(binDir) {
106435
106452
  const linked = [];
106436
106453
  for (const name of CODEX_BIN_NAMES) {
106437
- if (await pathExists2(join84(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
106454
+ if (await pathExists2(join85(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
106438
106455
  linked.push(name);
106439
106456
  }
106440
106457
  return linked;
106441
106458
  }
106442
106459
  async function readLinkedAgents(codexHome) {
106443
- const agentsDir = join84(codexHome, "agents");
106460
+ const agentsDir = join85(codexHome, "agents");
106444
106461
  if (!existsSync57(agentsDir))
106445
106462
  return [];
106446
106463
  const entries = await readdir14(agentsDir, { withFileTypes: true });
@@ -106574,7 +106591,7 @@ function resolveLatestVersion(input) {
106574
106591
  init_src();
106575
106592
  import { readdir as readdir15, readFile as readFile29, stat as stat7 } from "node:fs/promises";
106576
106593
  import { homedir as homedir23 } from "node:os";
106577
- import { dirname as dirname33, isAbsolute as isAbsolute13, join as join85, relative as relative9, resolve as resolve24, sep as sep9 } from "node:path";
106594
+ import { dirname as dirname33, isAbsolute as isAbsolute13, join as join86, relative as relative9, resolve as resolve24, sep as sep9 } from "node:path";
106578
106595
  var CODEX_COMPONENTS_CHECK_ID = "codex-components";
106579
106596
  var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
106580
106597
  var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
@@ -106584,7 +106601,7 @@ async function checkCodexComponents(deps = {}) {
106584
106601
  const env = deps.env ?? process.env;
106585
106602
  const platform = deps.platform ?? process.platform;
106586
106603
  const arch = deps.arch ?? process.arch;
106587
- const codexHome = resolve24(deps.codexHome ?? env["CODEX_HOME"] ?? join85(homedir23(), ".codex"));
106604
+ const codexHome = resolve24(deps.codexHome ?? env["CODEX_HOME"] ?? join86(homedir23(), ".codex"));
106588
106605
  const summary = await gatherCodexSummary({ ...deps, codexHome });
106589
106606
  if (summary.pluginRoot === null) {
106590
106607
  return {
@@ -106609,7 +106626,7 @@ async function checkCodexComponents(deps = {}) {
106609
106626
  });
106610
106627
  }
106611
106628
  const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
106612
- const runtimeSgPath = join85(runtimeSgDir, sgBinaryName(platform));
106629
+ const runtimeSgPath = join86(runtimeSgDir, sgBinaryName(platform));
106613
106630
  const sg = findSgBinarySync({
106614
106631
  arch,
106615
106632
  env,
@@ -106646,12 +106663,12 @@ async function auditBundleTargets(pluginRoot) {
106646
106663
  let referencedCount = 0;
106647
106664
  for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
106648
106665
  const manifest = await readJson2(manifestPath);
106649
- if (manifest === null || !isRecord17(manifest["mcpServers"]))
106666
+ if (manifest === null || !isRecord18(manifest["mcpServers"]))
106650
106667
  continue;
106651
106668
  const manifestRoot = dirname33(manifestPath);
106652
106669
  const isRootManifest = resolve24(manifestRoot) === resolve24(pluginRoot);
106653
106670
  for (const server of Object.values(manifest["mcpServers"])) {
106654
- if (!isRecord17(server) || !Array.isArray(server["args"]))
106671
+ if (!isRecord18(server) || !Array.isArray(server["args"]))
106655
106672
  continue;
106656
106673
  for (const arg of server["args"]) {
106657
106674
  if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
@@ -106721,7 +106738,7 @@ async function findManifestPaths(root, manifestName) {
106721
106738
  for (const entry of entries) {
106722
106739
  if (entry.name === "node_modules" || entry.name === ".git")
106723
106740
  continue;
106724
- const entryPath = join85(root, entry.name);
106741
+ const entryPath = join86(root, entry.name);
106725
106742
  if (entry.isDirectory()) {
106726
106743
  paths.push(...await findManifestPaths(entryPath, manifestName));
106727
106744
  continue;
@@ -106737,7 +106754,7 @@ function collectHookCommands(value, commands) {
106737
106754
  collectHookCommands(item, commands);
106738
106755
  return;
106739
106756
  }
106740
- if (!isRecord17(value))
106757
+ if (!isRecord18(value))
106741
106758
  return;
106742
106759
  if (value["type"] === "command") {
106743
106760
  if (typeof value["command"] === "string")
@@ -106765,18 +106782,18 @@ function isPluginRuntimePathArg(arg) {
106765
106782
  return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute13(arg));
106766
106783
  }
106767
106784
  function runtimeSgDirectory(codexHome, platform, arch) {
106768
- return join85(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
106785
+ return join86(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
106769
106786
  }
106770
106787
  function describeSgSource(sgPath, env, runtimeSgDir, platform) {
106771
106788
  const override = env[SG_PATH_ENV_KEY]?.trim();
106772
106789
  if (override !== undefined && override.length > 0 && sgPath === override)
106773
106790
  return `env override ${SG_PATH_ENV_KEY}`;
106774
- if (sgPath === join85(runtimeSgDir, sgBinaryName(platform)))
106791
+ if (sgPath === join86(runtimeSgDir, sgBinaryName(platform)))
106775
106792
  return "runtime dir";
106776
106793
  return "PATH";
106777
106794
  }
106778
106795
  async function readBootstrapStateSummary(codexHome) {
106779
- const statePath = join85(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
106796
+ const statePath = join86(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
106780
106797
  const raw = await readJson2(statePath);
106781
106798
  if (raw === null)
106782
106799
  return null;
@@ -106792,7 +106809,7 @@ function parseDegradedEntries(value) {
106792
106809
  return [];
106793
106810
  const entries = [];
106794
106811
  for (const item of value) {
106795
- if (!isRecord17(item))
106812
+ if (!isRecord18(item))
106796
106813
  continue;
106797
106814
  if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
106798
106815
  continue;
@@ -106826,7 +106843,7 @@ function degradedDetailLines(entries) {
106826
106843
  async function readJson2(path) {
106827
106844
  try {
106828
106845
  const parsed = JSON.parse(await readFile29(path, "utf8"));
106829
- return isRecord17(parsed) ? parsed : null;
106846
+ return isRecord18(parsed) ? parsed : null;
106830
106847
  } catch (error) {
106831
106848
  if (error instanceof Error)
106832
106849
  return null;
@@ -106847,7 +106864,7 @@ function normalizeRelative(root, target) {
106847
106864
  function normalizePathSeparators(path) {
106848
106865
  return path.split("\\").join("/");
106849
106866
  }
106850
- function isRecord17(value) {
106867
+ function isRecord18(value) {
106851
106868
  return typeof value === "object" && value !== null && !Array.isArray(value);
106852
106869
  }
106853
106870
 
@@ -106855,16 +106872,16 @@ function isRecord17(value) {
106855
106872
  import { existsSync as existsSync58 } from "node:fs";
106856
106873
  import { readFile as readFile30 } from "node:fs/promises";
106857
106874
  import { homedir as homedir24 } from "node:os";
106858
- import { join as join86, resolve as resolve25 } from "node:path";
106875
+ import { join as join87, resolve as resolve25 } from "node:path";
106859
106876
  var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
106860
106877
  var CHECK_NAME = "codex-runtime-wrapper";
106861
106878
  var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
106862
106879
  async function checkCodexRuntimeWrapper(deps = {}) {
106863
- const codexHome = resolve25(deps.codexHome ?? process.env.CODEX_HOME ?? join86(homedir24(), ".codex"));
106880
+ const codexHome = resolve25(deps.codexHome ?? process.env.CODEX_HOME ?? join87(homedir24(), ".codex"));
106864
106881
  const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
106865
106882
  const platform = deps.platform ?? process.platform;
106866
- const wrapperPath = join86(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
106867
- const legacyWrapperPath = join86(binDir, platform === "win32" ? "omo.cmd" : "omo");
106883
+ const wrapperPath = join87(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
106884
+ const legacyWrapperPath = join87(binDir, platform === "win32" ? "omo.cmd" : "omo");
106868
106885
  const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
106869
106886
  const issues = [];
106870
106887
  if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
@@ -107400,12 +107417,12 @@ import {
107400
107417
  unlinkSync as unlinkSync9,
107401
107418
  writeFileSync as writeFileSync12
107402
107419
  } from "node:fs";
107403
- import { basename as basename12, dirname as dirname34, join as join89 } from "node:path";
107420
+ import { basename as basename12, dirname as dirname34, join as join90 } from "node:path";
107404
107421
 
107405
107422
  // packages/mcp-client-core/src/config-dir.ts
107406
107423
  import { existsSync as existsSync59, realpathSync as realpathSync8 } from "node:fs";
107407
107424
  import { homedir as homedir25 } from "node:os";
107408
- import { join as join87, resolve as resolve26 } from "node:path";
107425
+ import { join as join88, resolve as resolve26 } from "node:path";
107409
107426
  function resolveConfigPath2(pathValue) {
107410
107427
  const resolvedPath = resolve26(pathValue);
107411
107428
  if (!existsSync59(resolvedPath))
@@ -107423,13 +107440,13 @@ function getOpenCodeCliConfigDir(env = process.env) {
107423
107440
  if (customConfigDir) {
107424
107441
  return resolveConfigPath2(customConfigDir);
107425
107442
  }
107426
- const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join87(homedir25(), ".config");
107427
- return resolveConfigPath2(join87(xdgConfigDir, "opencode"));
107443
+ const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join88(homedir25(), ".config");
107444
+ return resolveConfigPath2(join88(xdgConfigDir, "opencode"));
107428
107445
  }
107429
107446
 
107430
107447
  // packages/mcp-client-core/src/mcp-oauth/storage-index.ts
107431
107448
  import { chmodSync as chmodSync4, existsSync as existsSync60, readFileSync as readFileSync37, renameSync as renameSync6, writeFileSync as writeFileSync11 } from "node:fs";
107432
- import { join as join88 } from "node:path";
107449
+ import { join as join89 } from "node:path";
107433
107450
  var INDEX_FILE_NAME = "index.json";
107434
107451
  function isTokenIndex(value) {
107435
107452
  if (typeof value !== "object" || value === null || Array.isArray(value))
@@ -107437,7 +107454,7 @@ function isTokenIndex(value) {
107437
107454
  return Object.values(value).every((entry) => typeof entry === "string");
107438
107455
  }
107439
107456
  function getIndexPath(storageDir) {
107440
- return join88(storageDir, INDEX_FILE_NAME);
107457
+ return join89(storageDir, INDEX_FILE_NAME);
107441
107458
  }
107442
107459
  function readTokenIndex(storageDir) {
107443
107460
  const indexPath = getIndexPath(storageDir);
@@ -107481,16 +107498,16 @@ function deleteTokenIndexEntry(storageDir, hash) {
107481
107498
  var STORAGE_DIR_NAME = "mcp-oauth";
107482
107499
  var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
107483
107500
  function getMcpOauthStorageDir() {
107484
- return join89(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
107501
+ return join90(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
107485
107502
  }
107486
107503
  function getMcpOauthServerHash(serverHost, resource) {
107487
107504
  return createHash7("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
107488
107505
  }
107489
107506
  function getMcpOauthStoragePath(serverHost, resource) {
107490
- return join89(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
107507
+ return join90(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
107491
107508
  }
107492
107509
  function getLegacyStoragePath() {
107493
- return join89(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
107510
+ return join90(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
107494
107511
  }
107495
107512
  function normalizeHost2(serverHost) {
107496
107513
  let host = serverHost.trim();
@@ -107669,7 +107686,7 @@ function listTokensByHost(serverHost) {
107669
107686
  for (const [hash, indexedKey] of Object.entries(index)) {
107670
107687
  if (!indexedKey.startsWith(prefix))
107671
107688
  continue;
107672
- const indexedToken = readTokenFile(join89(getMcpOauthStorageDir(), `${hash}.json`));
107689
+ const indexedToken = readTokenFile(join90(getMcpOauthStorageDir(), `${hash}.json`));
107673
107690
  if (indexedToken)
107674
107691
  result[indexedKey] = indexedToken;
107675
107692
  }
@@ -107684,7 +107701,7 @@ function listAllTokens() {
107684
107701
  for (const entry of readdirSync12(dir, { withFileTypes: true })) {
107685
107702
  if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
107686
107703
  continue;
107687
- const token = readTokenFile(join89(dir, entry.name));
107704
+ const token = readTokenFile(join90(dir, entry.name));
107688
107705
  const hash = basename12(entry.name, ".json");
107689
107706
  if (token)
107690
107707
  result[index[hash] ?? hash] = token;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazycodex-ai",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -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.0.0-beta.87) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.88) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.87) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.88) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -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.0.0-beta.87) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.88) 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.0.0-beta.87) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.88) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -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.0.0-beta.87) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.88) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.0.0-beta.87",
4
- "inputDigest": "sha256:72acd620e3bb18d2b7ff2299536bc0c48b009811a865fa1504e934010d24ea98",
3
+ "version": "5.0.0-beta.88",
4
+ "inputDigest": "sha256:ebe9028d50ae97761a5b14dcb9e372ffead6731df3fdbed1beb944a71f9f0bb2",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.0.0-beta.87) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.88) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.0.0-beta.87) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.88) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.87) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.88) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.87) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.88) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.0.0-beta.87) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.88) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.0.0-beta.87) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.88) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.87) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.88) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.88",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,