lazycodex-ai 5.0.0-beta.49 → 5.0.0-beta.50

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 (108) hide show
  1. package/dist/cli/index.js +4682 -14969
  2. package/dist/cli-node/index.js +4727 -15014
  3. package/package.json +1 -1
  4. package/packages/lsp-daemon/dist/cli.js +181 -181
  5. package/packages/lsp-daemon/dist/client.js +232 -232
  6. package/packages/lsp-daemon/dist/index.js +132 -132
  7. package/packages/lsp-tools-mcp/dist/cli.js +103 -101
  8. package/packages/lsp-tools-mcp/dist/lsp/manager.js +14 -14
  9. package/packages/lsp-tools-mcp/dist/mcp.js +129 -129
  10. package/packages/lsp-tools-mcp/dist/tools.js +47 -47
  11. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  12. package/packages/omo-codex/plugin/README.md +4 -0
  13. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +151 -102
  14. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  15. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  19. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  21. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
  22. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +35 -24
  23. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +31 -21
  24. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
  25. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  26. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +31 -23
  28. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
  29. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  30. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +133 -7
  31. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +3 -1
  32. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  33. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +298 -298
  34. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  35. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/rules/README.md +2 -0
  37. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +123 -0
  38. package/packages/omo-codex/plugin/components/rules/dist/cli.js +38 -30
  39. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  40. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +6 -0
  42. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -2
  43. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +24 -0
  44. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  45. package/packages/omo-codex/plugin/components/teammode/package.json +2 -2
  46. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +66 -357
  47. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +66 -358
  48. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  49. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  50. package/packages/omo-codex/plugin/components/ultrawork/README.md +2 -0
  51. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  52. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
  53. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  54. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  55. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  56. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  57. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  58. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  59. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
  60. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
  61. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
  62. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
  63. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  64. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  65. package/packages/omo-codex/plugin/components/ulw-execute-continuation/dist/cli.js +3 -3
  66. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  67. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +63 -63
  69. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  70. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  80. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  82. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  83. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  92. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  93. package/packages/omo-codex/plugin/package-lock.json +16 -16
  94. package/packages/omo-codex/plugin/package.json +1 -1
  95. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  96. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
  97. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +18 -90
  98. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
  99. package/packages/omo-codex/plugin/shared/package.json +1 -1
  100. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +3 -1
  101. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +12 -12
  102. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
  103. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -4
  104. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +25 -1
  105. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
  106. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
  107. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
  108. package/packages/omo-codex/scripts/install-dist/install-local.mjs +318 -569
@@ -376,7 +376,7 @@ class JsonRpcConnection {
376
376
  let settled = false;
377
377
  const writeCancel = () => this.writeMessage({ jsonrpc: "2.0", method: "$/cancelRequest", params: { id } });
378
378
  let rejectAfterCancelWrite;
379
- const responsePromise = new Promise((resolve2, reject) => {
379
+ const responsePromise = new Promise((resolve, reject) => {
380
380
  const cleanup = () => {
381
381
  options.signal?.removeEventListener("abort", onAbort);
382
382
  };
@@ -406,7 +406,7 @@ class JsonRpcConnection {
406
406
  resolve(result) {
407
407
  settled = true;
408
408
  cleanup();
409
- resolve2(result);
409
+ resolve(result);
410
410
  },
411
411
  reject(error) {
412
412
  settled = true;
@@ -565,13 +565,13 @@ class JsonRpcConnection {
565
565
  const payload = `Content-Length: ${Buffer.byteLength(body, "utf8")}\r
566
566
  \r
567
567
  ${body}`;
568
- return new Promise((resolve2, reject) => {
568
+ return new Promise((resolve, reject) => {
569
569
  this.writer.write(payload, (error) => {
570
570
  if (error) {
571
571
  reject(error);
572
572
  return;
573
573
  }
574
- resolve2();
574
+ resolve();
575
575
  });
576
576
  });
577
577
  }
@@ -658,9 +658,9 @@ function validateCwd(cwd) {
658
658
  }
659
659
  }
660
660
  function wrap(proc) {
661
- const exitedPromise = new Promise((resolve2) => {
662
- proc.once("close", (code) => resolve2(code ?? 0));
663
- proc.once("error", () => resolve2(1));
661
+ const exitedPromise = new Promise((resolve) => {
662
+ proc.once("close", (code) => resolve(code ?? 0));
663
+ proc.once("error", () => resolve(1));
664
664
  });
665
665
  if (!proc.stdin || !proc.stdout || !proc.stderr) {
666
666
  throw new LspProcessSpawnError("Spawned process is missing one of stdin/stdout/stderr pipes");
@@ -1006,8 +1006,8 @@ class LspClientTransport {
1006
1006
  try {
1007
1007
  proc.kill();
1008
1008
  let timeoutId;
1009
- const timeoutPromise = new Promise((resolve2) => {
1010
- timeoutId = setTimeout(resolve2, STOP_HARD_KILL_TIMEOUT_MS);
1009
+ const timeoutPromise = new Promise((resolve) => {
1010
+ timeoutId = setTimeout(resolve, STOP_HARD_KILL_TIMEOUT_MS);
1011
1011
  });
1012
1012
  await Promise.race([
1013
1013
  proc.exited.then(() => {
@@ -1023,7 +1023,7 @@ class LspClientTransport {
1023
1023
  proc.kill("SIGKILL");
1024
1024
  await Promise.race([
1025
1025
  proc.exited,
1026
- new Promise((resolve2) => setTimeout(resolve2, STOP_SIGKILL_GRACE_MS))
1026
+ new Promise((resolve) => setTimeout(resolve, STOP_SIGKILL_GRACE_MS))
1027
1027
  ]);
1028
1028
  } catch (error) {
1029
1029
  reportBestEffortCleanupError("hard process kill", error instanceof Error ? error : String(error));
@@ -2017,14 +2017,14 @@ function parseSinglePathResource(input, kind) {
2017
2017
  return;
2018
2018
  }
2019
2019
  if (kind === "create") {
2020
- const options2 = parseOptions(change["options"], ["overwrite", "ignoreIfExists"], changeIndex);
2020
+ const options = parseOptions(change["options"], ["overwrite", "ignoreIfExists"], changeIndex);
2021
2021
  target.operations.push({
2022
2022
  kind,
2023
2023
  changeIndex,
2024
2024
  path: resolvedPath.path,
2025
2025
  reportedPath: resolvedPath.requestedPath,
2026
- overwrite: options2["overwrite"] ?? false,
2027
- ignoreIfExists: options2["ignoreIfExists"] ?? false,
2026
+ overwrite: options["overwrite"] ?? false,
2027
+ ignoreIfExists: options["ignoreIfExists"] ?? false,
2028
2028
  followedSymbolicLink: resolvedPath.followedSymbolicLink
2029
2029
  });
2030
2030
  return;
@@ -2494,11 +2494,11 @@ class PlanPathIndex {
2494
2494
  }
2495
2495
  }
2496
2496
  }
2497
- add(path, reportedPath2, changeIndex) {
2497
+ add(path, reportedPath, changeIndex) {
2498
2498
  if (!this.firstChangeByPath.has(path))
2499
2499
  this.firstChangeByPath.set(path, changeIndex);
2500
2500
  if (!this.reportedPathByCanonical.has(path))
2501
- this.reportedPathByCanonical.set(path, reportedPath2);
2501
+ this.reportedPathByCanonical.set(path, reportedPath);
2502
2502
  }
2503
2503
  }
2504
2504
  function fingerprintWorkspaceEdit(edit, workspaceRoot) {
@@ -2610,8 +2610,8 @@ class WorkspaceMutationController {
2610
2610
  };
2611
2611
  }
2612
2612
  lease.phase = "applying";
2613
- lease.applyCompletion = new Promise((resolve6) => {
2614
- lease.resolveApply = resolve6;
2613
+ lease.applyCompletion = new Promise((resolve) => {
2614
+ lease.resolveApply = resolve;
2615
2615
  });
2616
2616
  const edit = isRecord4(params) ? params["edit"] : undefined;
2617
2617
  const record = edit === undefined ? { fingerprint: null, result: failure("workspace/applyEdit params.edit is required", 0) } : await this.applyEdit(edit, lease);
@@ -2806,13 +2806,13 @@ class LspClient extends LspClientConnection {
2806
2806
  if (!pushFallbackOnly) {
2807
2807
  const cached = this.documents.getPullCache(snapshot);
2808
2808
  try {
2809
- const remainingMs2 = deadlineAt - this.timerProvider.now();
2810
- if (remainingMs2 <= 0)
2809
+ const remainingMs = deadlineAt - this.timerProvider.now();
2810
+ if (remainingMs <= 0)
2811
2811
  return this.freshnessTimeout(absPath);
2812
2812
  const result = await this.sendRequest("textDocument/diagnostic", {
2813
2813
  textDocument: { uri },
2814
2814
  ...cached?.resultId === undefined ? {} : { previousResultId: cached.resultId }
2815
- }, { timeoutMs: remainingMs2, ...signal === undefined ? {} : { signal } });
2815
+ }, { timeoutMs: remainingMs, ...signal === undefined ? {} : { signal } });
2816
2816
  if (!this.documents.isCurrentSnapshot(snapshot))
2817
2817
  continue;
2818
2818
  const report = this.parseDiagnosticPullReport(result);
@@ -2893,7 +2893,7 @@ function waitForDiagnosticsActivity(wait, signal) {
2893
2893
  return wait;
2894
2894
  if (signal.aborted)
2895
2895
  return Promise.reject(abortError2(signal));
2896
- return new Promise((resolve7, reject) => {
2896
+ return new Promise((resolve, reject) => {
2897
2897
  const onAbort = () => {
2898
2898
  signal.removeEventListener("abort", onAbort);
2899
2899
  reject(abortError2(signal));
@@ -2901,7 +2901,7 @@ function waitForDiagnosticsActivity(wait, signal) {
2901
2901
  signal.addEventListener("abort", onAbort, { once: true });
2902
2902
  wait.then(() => {
2903
2903
  signal.removeEventListener("abort", onAbort);
2904
- resolve7();
2904
+ resolve();
2905
2905
  }, (error) => {
2906
2906
  signal.removeEventListener("abort", onAbort);
2907
2907
  reject(error);
@@ -2969,7 +2969,7 @@ async function stopClientBestEffort(client) {
2969
2969
  function awaitWithSignal(promise, signal) {
2970
2970
  if (!signal)
2971
2971
  return promise;
2972
- return new Promise((resolve7, reject) => {
2972
+ return new Promise((resolve, reject) => {
2973
2973
  let settled = false;
2974
2974
  const onAbort = () => {
2975
2975
  if (settled)
@@ -2987,7 +2987,7 @@ function awaitWithSignal(promise, signal) {
2987
2987
  return;
2988
2988
  settled = true;
2989
2989
  signal.removeEventListener("abort", onAbort);
2990
- resolve7(value);
2990
+ resolve(value);
2991
2991
  }, (err) => {
2992
2992
  if (settled)
2993
2993
  return;
@@ -3679,7 +3679,7 @@ function createServerFromEntry(id, entry, source) {
3679
3679
  if (source === "project") {
3680
3680
  if (!builtin)
3681
3681
  return null;
3682
- const server2 = createServer({
3682
+ const server = createServer({
3683
3683
  id,
3684
3684
  command: builtin.command,
3685
3685
  extensions: entry.extensions ?? builtin.extensions,
@@ -3687,20 +3687,20 @@ function createServerFromEntry(id, entry, source) {
3687
3687
  source
3688
3688
  });
3689
3689
  if (entry.initialization !== undefined) {
3690
- server2.initialization = entry.initialization;
3690
+ server.initialization = entry.initialization;
3691
3691
  }
3692
- return server2;
3692
+ return server;
3693
3693
  }
3694
3694
  if (entry.command && entry.extensions) {
3695
- const server2 = createServer({
3695
+ const server = createServer({
3696
3696
  id,
3697
3697
  command: entry.command,
3698
3698
  extensions: entry.extensions,
3699
3699
  priority: entry.priority ?? 0,
3700
3700
  source
3701
3701
  });
3702
- applyOptionalServerFields(server2, entry);
3703
- return server2;
3702
+ applyOptionalServerFields(server, entry);
3703
+ return server;
3704
3704
  }
3705
3705
  if (!builtin)
3706
3706
  return null;
@@ -4247,10 +4247,10 @@ function uriToPath(uri) {
4247
4247
  }
4248
4248
  function formatLocation(loc) {
4249
4249
  if ("targetUri" in loc) {
4250
- const uri2 = uriToPath(loc.targetUri);
4251
- const line2 = loc.targetRange.start.line + 1;
4252
- const char2 = loc.targetRange.start.character;
4253
- return `${uri2}:${line2}:${char2}`;
4250
+ const uri = uriToPath(loc.targetUri);
4251
+ const line = loc.targetRange.start.line + 1;
4252
+ const char = loc.targetRange.start.character;
4253
+ return `${uri}:${line}:${char}`;
4254
4254
  }
4255
4255
  const uri = uriToPath(loc.uri);
4256
4256
  const line = loc.range.start.line + 1;
@@ -4652,8 +4652,8 @@ function clientOptions(signal) {
4652
4652
  }
4653
4653
 
4654
4654
  // ../lsp-core/src/tools/result.ts
4655
- function text(text2, details, isError = false) {
4656
- return { content: [{ type: "text", text: text2 }], details, isError };
4655
+ function text(text, details, isError = false) {
4656
+ return { content: [{ type: "text", text }], details, isError };
4657
4657
  }
4658
4658
 
4659
4659
  // ../lsp-core/src/tools/diagnostics.ts
@@ -4673,7 +4673,7 @@ async function executeLspDiagnostics(params, signal) {
4673
4673
  const extension = inferExtensionFromDirectory(absPath);
4674
4674
  if (!extension) {
4675
4675
  const message = `No supported source files found in directory: ${absPath}`;
4676
- const details3 = {
4676
+ const details = {
4677
4677
  filePath,
4678
4678
  severity,
4679
4679
  mode: "directory",
@@ -4683,24 +4683,24 @@ async function executeLspDiagnostics(params, signal) {
4683
4683
  error: message,
4684
4684
  errorKind: "no_files"
4685
4685
  };
4686
- return text(message, details3);
4686
+ return text(message, details);
4687
4687
  }
4688
- const output2 = await aggregateDiagnosticsForDirectory(absPath, extension, severity, undefined, signal === undefined ? {} : { signal });
4689
- const details2 = {
4688
+ const output = await aggregateDiagnosticsForDirectory(absPath, extension, severity, undefined, signal === undefined ? {} : { signal });
4689
+ const details = {
4690
4690
  filePath,
4691
4691
  severity,
4692
4692
  mode: "directory",
4693
4693
  diagnostics: [],
4694
- totalDiagnostics: output2.totalDiagnostics,
4694
+ totalDiagnostics: output.totalDiagnostics,
4695
4695
  truncated: false,
4696
- fileFailures: [...output2.fileFailures]
4696
+ fileFailures: [...output.fileFailures]
4697
4697
  };
4698
- return text(output2.output, details2);
4698
+ return text(output.output, details);
4699
4699
  }
4700
4700
  const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
4701
4701
  if (result.transientError) {
4702
4702
  const message = result.transientError.message;
4703
- const details2 = {
4703
+ const details = {
4704
4704
  filePath,
4705
4705
  severity,
4706
4706
  mode: "file",
@@ -4710,7 +4710,7 @@ async function executeLspDiagnostics(params, signal) {
4710
4710
  error: message,
4711
4711
  errorKind: result.transientError.kind
4712
4712
  };
4713
- return text(message, details2, true);
4713
+ return text(message, details, true);
4714
4714
  }
4715
4715
  const diagnostics = filterDiagnosticsBySeverity(asDiagnosticArray(result), severity);
4716
4716
  const total = diagnostics.length;
@@ -5027,8 +5027,8 @@ async function executeLspSymbols(params, signal) {
5027
5027
  errorKind: "missing_query"
5028
5028
  });
5029
5029
  }
5030
- const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
5031
- return formatSymbolsResult(filePath, scope, symbols2, limit, query);
5030
+ const symbols = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
5031
+ return formatSymbolsResult(filePath, scope, symbols, limit, query);
5032
5032
  }
5033
5033
  const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
5034
5034
  return formatSymbolsResult(filePath, scope, symbols, limit);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.49",
3
+ "version": "5.0.0-beta.50",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -15,6 +15,10 @@ Internally each component remains isolated under `components/`:
15
15
 
16
16
  The root plugin manifest exports one Codex plugin named `omo`, with aggregate hooks, skills, and plugin-scoped MCP servers for `grep_app`, `context7`, `git_bash`, and `lsp`. AST-aware search ships as the `ast-grep` skill, not as an MCP server.
17
17
 
18
+ ## Default model
19
+
20
+ `model-catalog.json` (version `2026-09-08.gpt-6-astra-600k-high`) is the managed default the installer and the SessionStart config migration apply: `gpt-6-astra`, 600k context window, `high` reasoning, `xhigh` plan-mode reasoning. Managed legacy profiles, including `legacy.gpt-5.6-sol-650k-high` for configs still on `gpt-5.6-sol`, are upgraded to the current values; a root model outside the catalog is preserved. Neither the installer nor the migration writes or raises subagent thread caps (`agents.max_threads`, `features.multi_agent_v2.max_concurrent_threads_per_session`). They remove only the values LazyCodex itself wrote earlier (`1000`, `16`), with one exception: on a `multi_agent_v2`-preferred model such as `gpt-6-astra`, the V1-only `agents.max_threads` key is removed whatever its value, since Codex rejects it under V2. Every other user-set value is left alone.
21
+
18
22
  ## Telemetry
19
23
 
20
24
  The bundled telemetry component emits the anonymous `omo_codex_daily_active` event at most once per UTC day per machine when the Codex `SessionStart` hook runs. It uses `sha256("omo-codex:" + hostname)` as the distinct ID, disables PostHog person profiles, and stores daily deduplication state in `$XDG_DATA_HOME/omo-codex/posthog-activity.json` or `~/.local/share/omo-codex/posthog-activity.json`.