oh-my-opencode 5.0.0-beta.10 → 5.0.0-beta.12

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 (73) hide show
  1. package/dist/cli/index.js +34 -86
  2. package/dist/cli-node/index.js +34 -86
  3. package/dist/index.js +80 -93
  4. package/dist/tools/delegate-task/builtin-categories.d.ts +1 -0
  5. package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -0
  6. package/dist/tools/delegate-task/tool-description.d.ts +3 -1
  7. package/dist/tui.js +19 -71
  8. package/package.json +14 -14
  9. package/packages/lsp-core/src/lsp/client-wrapper-outside-cwd.test.ts +78 -0
  10. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +6 -6
  11. package/packages/lsp-core/src/lsp/client-wrapper.ts +5 -6
  12. package/packages/lsp-core/src/lsp/outside-context-workspace.ts +33 -0
  13. package/packages/lsp-core/src/lsp/workspace-markers.ts +1 -0
  14. package/packages/lsp-daemon/dist/cli.js +94 -59
  15. package/packages/lsp-daemon/dist/client.js +72 -37
  16. package/packages/lsp-daemon/dist/index.js +78 -43
  17. package/packages/lsp-tools-mcp/dist/cli.js +68 -33
  18. package/packages/lsp-tools-mcp/dist/mcp.js +68 -33
  19. package/packages/lsp-tools-mcp/dist/tools.js +68 -33
  20. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  21. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  22. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +9 -0
  24. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +9 -0
  25. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  29. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -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 +83 -54
  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/hooks/hooks.json +4 -4
  37. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  39. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  40. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  41. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  42. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  43. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  45. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  46. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  47. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  71. package/packages/omo-codex/plugin/package-lock.json +13 -13
  72. package/packages/omo-codex/plugin/package.json +1 -1
  73. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
@@ -8,9 +8,9 @@ import { argv, execPath as execPath2, stderr } from "node:process";
8
8
  import { stdin as processStdin } from "node:process";
9
9
 
10
10
  // src/codex-hook.ts
11
- import { readFileSync as readFileSync9, realpathSync as realpathSync7 } from "node:fs";
11
+ import { readFileSync as readFileSync9, realpathSync as realpathSync8 } from "node:fs";
12
12
  import { homedir as homedir3 } from "node:os";
13
- import { join as join11, resolve as resolve11 } from "node:path";
13
+ import { join as join12, resolve as resolve11 } from "node:path";
14
14
 
15
15
  // ../../../../lsp-daemon/dist/client.js
16
16
  import { connect } from "node:net";
@@ -42,8 +42,8 @@ import * as path from "node:path";
42
42
  import { fileURLToPath } from "node:url";
43
43
  import { statSync as statSync2 } from "node:fs";
44
44
  import { isAbsolute as isAbsolute2 } from "node:path";
45
- import { existsSync as existsSync10, realpathSync as realpathSync4, statSync as statSync4 } from "node:fs";
46
- import { basename as basename3, dirname as dirname8, join as join4, resolve as resolve7 } from "node:path";
45
+ import { existsSync as existsSync11, realpathSync as realpathSync5, statSync as statSync4 } from "node:fs";
46
+ import { basename as basename3, dirname as dirname9, join as join5, resolve as resolve7 } from "node:path";
47
47
  import { basename as basename2, extname } from "node:path";
48
48
  import { resolve as resolve6 } from "node:path";
49
49
  import { pathToFileURL as pathToFileURL3 } from "node:url";
@@ -62,16 +62,18 @@ import { createHash as createHash2 } from "node:crypto";
62
62
  import { dirname as dirname5, relative as relative4, resolve as resolve4 } from "node:path";
63
63
  import { existsSync as existsSync6, lstatSync as lstatSync4, readdirSync as readdirSync2 } from "node:fs";
64
64
  import { dirname as dirname6, resolve as resolve5 } from "node:path";
65
- import { existsSync as existsSync7, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
66
- import { dirname as dirname7 } from "node:path";
67
- import { existsSync as existsSync8, readFileSync as readFileSync5 } from "node:fs";
68
- import { existsSync as existsSync9 } from "node:fs";
69
- import { delimiter as delimiter3, join as join3 } from "node:path";
70
- import { existsSync as existsSync11, lstatSync as lstatSync5, readdirSync as readdirSync3 } from "node:fs";
71
- import { join as join5, resolve as resolve8 } from "node:path";
65
+ import { existsSync as existsSync7, realpathSync as realpathSync4 } from "node:fs";
66
+ import { dirname as dirname7, join as join3 } from "node:path";
67
+ import { existsSync as existsSync8, mkdirSync as mkdirSync3, readFileSync as readFileSync4, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
68
+ import { dirname as dirname8 } from "node:path";
69
+ import { existsSync as existsSync9, readFileSync as readFileSync5 } from "node:fs";
70
+ import { existsSync as existsSync10 } from "node:fs";
71
+ import { delimiter as delimiter3, join as join4 } from "node:path";
72
+ import { existsSync as existsSync12, lstatSync as lstatSync5, readdirSync as readdirSync3 } from "node:fs";
73
+ import { join as join6, resolve as resolve8 } from "node:path";
72
74
  import { fileURLToPath as fileURLToPath3 } from "node:url";
73
75
  import { lstatSync as lstatSync6, readdirSync as readdirSync4 } from "node:fs";
74
- import { join as join6 } from "node:path";
76
+ import { join as join7 } from "node:path";
75
77
  import { statSync as statSync5 } from "node:fs";
76
78
  import { isAbsolute as isAbsolute5 } from "node:path";
77
79
 
@@ -3606,12 +3608,41 @@ function getLspManager() {
3606
3608
  }
3607
3609
  return _defaultInstance;
3608
3610
  }
3611
+ var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
3612
+ function findWorkspaceRootOutsideContext(directory) {
3613
+ const marked = nearestMarkedAncestor(directory);
3614
+ if (marked !== undefined)
3615
+ return marked;
3616
+ return realpathSync4(nearestExistingAncestor(directory));
3617
+ }
3618
+ function nearestMarkedAncestor(directory) {
3619
+ let current = directory;
3620
+ for (;; ) {
3621
+ if (existsSync7(current) && WORKSPACE_MARKERS.some((marker) => existsSync7(join3(current, marker)))) {
3622
+ return realpathSync4(current);
3623
+ }
3624
+ const parent = dirname7(current);
3625
+ if (parent === current)
3626
+ return;
3627
+ current = parent;
3628
+ }
3629
+ }
3630
+ function nearestExistingAncestor(directory) {
3631
+ let current = directory;
3632
+ while (!existsSync7(current)) {
3633
+ const parent = dirname7(current);
3634
+ if (parent === current)
3635
+ return current;
3636
+ current = parent;
3637
+ }
3638
+ return current;
3639
+ }
3609
3640
  function getInstallDecisionsPath() {
3610
3641
  return lspRequestContext().installDecisionsPath;
3611
3642
  }
3612
3643
  function loadInstallDecisions() {
3613
3644
  const path2 = getInstallDecisionsPath();
3614
- if (!existsSync7(path2))
3645
+ if (!existsSync8(path2))
3615
3646
  return {};
3616
3647
  try {
3617
3648
  const parsed = JSON.parse(readFileSync4(path2, "utf8"));
@@ -3633,7 +3664,7 @@ function isInstallDecision(value) {
3633
3664
  }
3634
3665
  function writeInstallDecisions(decisions) {
3635
3666
  const path2 = getInstallDecisionsPath();
3636
- mkdirSync3(dirname7(path2), { recursive: true });
3667
+ mkdirSync3(dirname8(path2), { recursive: true });
3637
3668
  const tmpPath = `${path2}.tmp`;
3638
3669
  writeFileSync2(tmpPath, `${JSON.stringify(decisions, null, 2)}
3639
3670
  `, "utf8");
@@ -3802,7 +3833,7 @@ function getUserConfigPath() {
3802
3833
  return lspRequestContext().userConfigPath;
3803
3834
  }
3804
3835
  function loadJsonFile(path2) {
3805
- if (!existsSync8(path2))
3836
+ if (!existsSync9(path2))
3806
3837
  return null;
3807
3838
  try {
3808
3839
  const parsed = JSON.parse(readFileSync5(path2, "utf-8"));
@@ -3995,7 +4026,7 @@ function isServerInstalled(command, _workingDirectory) {
3995
4026
  if (!cmd)
3996
4027
  return false;
3997
4028
  if (cmd.includes("/") || cmd.includes("\\")) {
3998
- if (existsSync9(cmd))
4029
+ if (existsSync10(cmd))
3999
4030
  return true;
4000
4031
  }
4001
4032
  const isWindows = process.platform === "win32";
@@ -4016,7 +4047,7 @@ function isServerInstalled(command, _workingDirectory) {
4016
4047
  const paths = pathEnv.split(delimiter3);
4017
4048
  for (const p of paths) {
4018
4049
  for (const suffix of exts) {
4019
- if (existsSync9(join3(p, cmd + suffix))) {
4050
+ if (existsSync10(join4(p, cmd + suffix))) {
4020
4051
  return true;
4021
4052
  }
4022
4053
  }
@@ -4108,7 +4139,6 @@ function getAllServers() {
4108
4139
  }
4109
4140
  return result;
4110
4141
  }
4111
- var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
4112
4142
  function isDirectoryPath(filePath) {
4113
4143
  try {
4114
4144
  return statSync4(filePath).isDirectory();
@@ -4121,21 +4151,23 @@ function findWorkspaceRoot(filePath) {
4121
4151
  const abs = resolveReadablePathInsideContext(filePath);
4122
4152
  let dir = abs;
4123
4153
  if (!isDirectoryPath(dir)) {
4124
- dir = dirname8(dir);
4154
+ dir = dirname9(dir);
4125
4155
  }
4156
+ if (!isPathInside(cwd, abs))
4157
+ return findWorkspaceRootOutsideContext(dir);
4126
4158
  const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
4127
4159
  while (isPathInside(cwd, dir)) {
4128
4160
  const canonicalDir = existingDirectoryInsideContext(dir, cwd);
4129
4161
  if (canonicalDir !== undefined) {
4130
4162
  for (const marker of WORKSPACE_MARKERS) {
4131
- if (existsSync10(join4(dir, marker))) {
4163
+ if (existsSync11(join5(dir, marker))) {
4132
4164
  return canonicalDir;
4133
4165
  }
4134
4166
  }
4135
4167
  }
4136
4168
  if (dir === cwd)
4137
4169
  break;
4138
- dir = dirname8(dir);
4170
+ dir = dirname9(dir);
4139
4171
  }
4140
4172
  return fallbackRoot;
4141
4173
  }
@@ -4147,10 +4179,7 @@ function resolveReadablePathInsideContext(filePath) {
4147
4179
  const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
4148
4180
  if (rebased !== undefined)
4149
4181
  return rebased;
4150
- const canonical = canonicalizeExistingOrNearestAncestor(abs);
4151
- if (isPathInside(cwd, canonical))
4152
- return canonical;
4153
- throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
4182
+ return canonicalizeExistingOrNearestAncestor(abs);
4154
4183
  }
4155
4184
  function resolvePathInsideContext(filePath) {
4156
4185
  const cwd = contextCwd();
@@ -4165,12 +4194,12 @@ function rebaseThroughCanonicalAncestor(path2, cwd) {
4165
4194
  let current = path2;
4166
4195
  const suffix = [];
4167
4196
  while (true) {
4168
- if (existsSync10(current)) {
4169
- const canonical = realpathSync4(current);
4197
+ if (existsSync11(current)) {
4198
+ const canonical = realpathSync5(current);
4170
4199
  if (isPathInside(cwd, canonical))
4171
- return suffix.length === 0 ? canonical : join4(canonical, ...suffix);
4200
+ return suffix.length === 0 ? canonical : join5(canonical, ...suffix);
4172
4201
  }
4173
- const parent = dirname8(current);
4202
+ const parent = dirname9(current);
4174
4203
  if (parent === current)
4175
4204
  return;
4176
4205
  suffix.unshift(basename3(current));
@@ -4178,9 +4207,9 @@ function rebaseThroughCanonicalAncestor(path2, cwd) {
4178
4207
  }
4179
4208
  }
4180
4209
  function existingDirectoryInsideContext(directory, cwd) {
4181
- if (!existsSync10(directory))
4210
+ if (!existsSync11(directory))
4182
4211
  return;
4183
- const canonical = realpathSync4(directory);
4212
+ const canonical = realpathSync5(directory);
4184
4213
  if (!statSync4(canonical).isDirectory())
4185
4214
  return;
4186
4215
  return isPathInside(cwd, canonical) ? canonical : undefined;
@@ -4193,7 +4222,7 @@ function nearestExistingDirectoryInsideContext(directory, cwd) {
4193
4222
  return canonical;
4194
4223
  if (current === cwd)
4195
4224
  return;
4196
- current = dirname8(current);
4225
+ current = dirname9(current);
4197
4226
  }
4198
4227
  return;
4199
4228
  }
@@ -4433,7 +4462,7 @@ function collectFilesWithExtension(dir, extension, maxFiles) {
4433
4462
  for (const entry of entries) {
4434
4463
  if (files.length >= maxFiles)
4435
4464
  return;
4436
- const fullPath = join5(currentDir, entry);
4465
+ const fullPath = join6(currentDir, entry);
4437
4466
  let stat;
4438
4467
  try {
4439
4468
  stat = lstatSync5(fullPath);
@@ -4459,7 +4488,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
4459
4488
  throw new LspInvalidPathError(`Extension must start with a dot (e.g., ".ts", not "${extension}"). Use ".${extension}" instead.`);
4460
4489
  }
4461
4490
  const absDir = resolve8(options.workspaceRoot ?? contextCwd(), directory);
4462
- if (!existsSync11(absDir)) {
4491
+ if (!existsSync12(absDir)) {
4463
4492
  throw new LspInvalidPathError(`Directory does not exist: ${absDir}`);
4464
4493
  }
4465
4494
  const serverResult = options.server === undefined ? findServerForExtension(extension) : { status: "found", server: options.server };
@@ -4560,7 +4589,7 @@ function inferExtensionFromDirectory(directory) {
4560
4589
  for (const entry of entries) {
4561
4590
  if (scanned >= MAX_SCAN_ENTRIES)
4562
4591
  return;
4563
- const fullPath = join6(dir, entry);
4592
+ const fullPath = join7(dir, entry);
4564
4593
  let stat;
4565
4594
  try {
4566
4595
  stat = lstatSync6(fullPath);
@@ -5454,8 +5483,8 @@ function extensionKey(filePath) {
5454
5483
  }
5455
5484
  // ../../../../lsp-core/src/request-context.ts
5456
5485
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
5457
- import { existsSync as existsSync12, realpathSync as realpathSync5, statSync as statSync6 } from "node:fs";
5458
- import { basename as basename4, delimiter as delimiter4, dirname as dirname2, isAbsolute as isAbsolute6, join as join7, relative as relative5, resolve as resolve9 } from "node:path";
5486
+ import { existsSync as existsSync13, realpathSync as realpathSync6, statSync as statSync6 } from "node:fs";
5487
+ import { basename as basename4, delimiter as delimiter4, dirname as dirname2, isAbsolute as isAbsolute6, join as join8, relative as relative5, resolve as resolve9 } from "node:path";
5459
5488
 
5460
5489
  class LspRequestContextParseError2 extends Error {
5461
5490
  code;
@@ -5498,18 +5527,18 @@ function parseLspRequestContext2(value) {
5498
5527
  }
5499
5528
  function canonicalCwd2(cwd) {
5500
5529
  const resolved = resolve9(cwd);
5501
- if (!existsSync12(resolved) || !statSync6(resolved).isDirectory()) {
5530
+ if (!existsSync13(resolved) || !statSync6(resolved).isDirectory()) {
5502
5531
  throw new LspRequestContextParseError2("invalid_cwd", `LSP request cwd must be an existing directory: ${cwd}`);
5503
5532
  }
5504
- return realpathSync5(resolved);
5533
+ return realpathSync6(resolved);
5505
5534
  }
5506
5535
  function canonicalizeExistingOrNearestAncestor2(path2) {
5507
5536
  let current = resolve9(path2);
5508
5537
  const suffix = [];
5509
5538
  while (true) {
5510
5539
  try {
5511
- const existing = realpathSync5(current);
5512
- return suffix.length === 0 ? existing : join7(existing, ...suffix);
5540
+ const existing = realpathSync6(current);
5541
+ return suffix.length === 0 ? existing : join8(existing, ...suffix);
5513
5542
  } catch (error) {
5514
5543
  if (!isMissingPathError2(error))
5515
5544
  throw error;
@@ -5577,9 +5606,9 @@ function errorCode2(error) {
5577
5606
  }
5578
5607
 
5579
5608
  // src/daemon-cli-path.ts
5580
- import { existsSync as existsSync14, readFileSync as readFileSync6 } from "node:fs";
5609
+ import { existsSync as existsSync15, readFileSync as readFileSync6 } from "node:fs";
5581
5610
  import { createRequire as createRequire2 } from "node:module";
5582
- import { dirname as dirname9, join as join9 } from "node:path";
5611
+ import { dirname as dirname10, join as join10 } from "node:path";
5583
5612
  import { fileURLToPath as fileURLToPath4 } from "node:url";
5584
5613
  var requireFromHere2 = createRequire2(import.meta.url);
5585
5614
  var PACKAGE_LSP_DAEMON_CLI = "@code-yeongyu/lsp-daemon/cli";
@@ -5601,7 +5630,7 @@ function resolveLspDaemonCli() {
5601
5630
  if (packageCli !== null)
5602
5631
  return resolveConfiguredLspDaemonCli(packageCli);
5603
5632
  const bundledCli = fileURLToPath4(new URL("../../lsp-daemon/dist/cli.js", import.meta.url));
5604
- if (existsSync14(bundledCli))
5633
+ if (existsSync15(bundledCli))
5605
5634
  return resolveConfiguredLspDaemonCli(bundledCli);
5606
5635
  return resolveConfiguredLspDaemonCli(bundledCli);
5607
5636
  }
@@ -5626,7 +5655,7 @@ function resolveConfiguredLspDaemonCli(cliPath) {
5626
5655
  }
5627
5656
  function readDaemonPackageVersion(cliPath) {
5628
5657
  try {
5629
- const parsed = JSON.parse(readFileSync6(join9(dirname9(cliPath), "package.json"), "utf8"));
5658
+ const parsed = JSON.parse(readFileSync6(join10(dirname10(cliPath), "package.json"), "utf8"));
5630
5659
  if (isRecord9(parsed) && typeof parsed["version"] === "string" && parsed["version"].length > 0) {
5631
5660
  return parsed["version"];
5632
5661
  }
@@ -5643,7 +5672,7 @@ function isRecord9(value) {
5643
5672
  // src/lsp-session-state.ts
5644
5673
  import { mkdirSync as mkdirSync4, readFileSync as readFileSync8, writeFileSync as writeFileSync3 } from "node:fs";
5645
5674
  import { homedir } from "node:os";
5646
- import { dirname as dirname11, join as join10 } from "node:path";
5675
+ import { dirname as dirname12, join as join11 } from "node:path";
5647
5676
  function sessionIdFrom(input) {
5648
5677
  return typeof input.session_id === "string" && input.session_id.length > 0 ? input.session_id : undefined;
5649
5678
  }
@@ -5669,8 +5698,8 @@ function isLspDaemonUnreachableDiagnostics(diagnostics) {
5669
5698
  return diagnostics.includes("LSP daemon unreachable");
5670
5699
  }
5671
5700
  function sessionStatePath(sessionId) {
5672
- const root = process.env["PLUGIN_DATA"] ?? join10(homedir(), ".codex", "codex-lsp");
5673
- return join10(root, "sessions", `${safePathSegment(sessionId)}.json`);
5701
+ const root = process.env["PLUGIN_DATA"] ?? join11(homedir(), ".codex", "codex-lsp");
5702
+ return join11(root, "sessions", `${safePathSegment(sessionId)}.json`);
5674
5703
  }
5675
5704
  function readSessionState(path2) {
5676
5705
  try {
@@ -5685,7 +5714,7 @@ function readSessionState(path2) {
5685
5714
  }
5686
5715
  }
5687
5716
  function writeSessionState(path2, state) {
5688
- mkdirSync4(dirname11(path2), { recursive: true });
5717
+ mkdirSync4(dirname12(path2), { recursive: true });
5689
5718
  writeFileSync3(path2, `${JSON.stringify(state)}
5690
5719
  `);
5691
5720
  }
@@ -5829,13 +5858,13 @@ function notConfiguredAvailability(details) {
5829
5858
  return typeof extension === "string" && extension.length > 0 ? { extension } : undefined;
5830
5859
  }
5831
5860
  function codexLspRequestContext(env = process.env, cwd = process.cwd()) {
5832
- const canonicalCwd3 = realpathSync7(resolve11(cwd));
5833
- const codexHome = resolve11(env["CODEX_HOME"]?.trim() || join11(homedir3(), ".codex"));
5861
+ const canonicalCwd3 = realpathSync8(resolve11(cwd));
5862
+ const codexHome = resolve11(env["CODEX_HOME"]?.trim() || join12(homedir3(), ".codex"));
5834
5863
  return parseLspRequestContext2({
5835
5864
  cwd: canonicalCwd3,
5836
- projectConfigPaths: [join11(canonicalCwd3, ".codex", "lsp-client.json")],
5837
- userConfigPath: join11(codexHome, "lsp-client.json"),
5838
- installDecisionsPath: join11(codexHome, "lsp-install-decisions.json"),
5865
+ projectConfigPaths: [join12(canonicalCwd3, ".codex", "lsp-client.json")],
5866
+ userConfigPath: join12(codexHome, "lsp-client.json"),
5867
+ installDecisionsPath: join12(codexHome, "lsp-install-decisions.json"),
5839
5868
  capabilities: { installDecisionTool: true }
5840
5869
  });
5841
5870
  }
@@ -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.10) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.12) 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.10) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.12) 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.10",
3
+ "version": "5.0.0-beta.12",
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.10) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.12) 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.10) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.12) 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.10) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.12) 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.10) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.12) 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.10",
3
+ "version": "5.0.0-beta.12",
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",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/start-work-continuation/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Checking Start-Work Continuation"
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking Start-Work Continuation"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/components/start-work-continuation/dist/cli.js\" hook subagent-stop",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.10) Checking Start-Work Continuation"
22
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking Start-Work Continuation"
23
23
  }
24
24
  ]
25
25
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-start-work-continuation",
3
- "version": "5.0.0-beta.10",
3
+ "version": "5.0.0-beta.12",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex start-work plans.",
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.10) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.12) 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.10",
3
+ "version": "5.0.0-beta.12",
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,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.0.0-beta.10",
3
+ "version": "5.0.0-beta.12",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
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 user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "5.0.0-beta.10",
3
+ "version": "5.0.0-beta.12",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
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 user-prompt-submit --with-ultrawork",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Checking Ulw-Loop Steering"
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking Ulw-Loop Steering"
11
11
  }
12
12
  ]
13
13
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.0.0-beta.10) Enforcing Unlimited Ulw-Loop Budget"
23
+ "statusMessage": "(OmO 5.0.0-beta.12) Enforcing Unlimited Ulw-Loop Budget"
24
24
  }
25
25
  ]
26
26
  },
@@ -31,7 +31,7 @@
31
31
  "type": "command",
32
32
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use-spawn",
33
33
  "timeout": 5,
34
- "statusMessage": "(OmO 5.0.0-beta.10) Guarding Ulw-Loop Spawns"
34
+ "statusMessage": "(OmO 5.0.0-beta.12) Guarding Ulw-Loop Spawns"
35
35
  }
36
36
  ]
37
37
  }
@@ -43,7 +43,7 @@
43
43
  "type": "command",
44
44
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook stop",
45
45
  "timeout": 10,
46
- "statusMessage": "(OmO 5.0.0-beta.10) Checking Ulw-Loop Resume"
46
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking Ulw-Loop Resume"
47
47
  }
48
48
  ]
49
49
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-loop",
3
- "version": "5.0.0-beta.10",
3
+ "version": "5.0.0-beta.12",
4
4
  "description": "Codex plugin: durable repo-native multi-goal orchestration with embedded success criteria and observable evidence audit.",
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}/components/git-bash/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Resetting Git Bash MCP Reminder",
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Resetting Git Bash MCP Reminder",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Resetting LSP Diagnostics Cache",
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Resetting LSP Diagnostics Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-compact",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Resetting Project Rule Cache",
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Resetting Project Rule Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/codegraph/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Checking CodeGraph Init Guidance",
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking CodeGraph Init Guidance",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\codegraph\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/comment-checker/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 30,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Checking Comments",
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking Comments",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\comment-checker\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 60,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Checking LSP Diagnostics",
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking LSP Diagnostics",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/teammode/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.10) Checking Thread Title Hygiene",
11
+ "statusMessage": "(OmO 5.0.0-beta.12) Checking Thread Title Hygiene",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\teammode\\dist\\cli.js\" hook post-tool-use"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Matching Project Rules",
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Matching Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.10) Enforcing Unlimited Goal Budget",
10
+ "statusMessage": "(OmO 5.0.0-beta.12) Enforcing Unlimited Goal Budget",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use"
12
12
  }
13
13
  ],