oh-my-opencode 5.0.0-beta.13 → 5.0.0-beta.15

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 (116) hide show
  1. package/README.ja.md +25 -21
  2. package/README.ko.md +25 -21
  3. package/README.md +26 -22
  4. package/README.ru.md +24 -20
  5. package/README.zh-cn.md +25 -21
  6. package/dist/cli/index.js +12628 -13558
  7. package/dist/cli-node/index.js +12628 -13558
  8. package/dist/features/btw-side/tui-controller-types.d.ts +5 -0
  9. package/dist/features/btw-side/tui-controller.d.ts +8 -3
  10. package/dist/features/btw-side/tui-escape-return.d.ts +12 -0
  11. package/dist/features/btw-side/tui-keymap.d.ts +8 -1
  12. package/dist/features/btw-side/tui-picker-options.d.ts +20 -0
  13. package/dist/features/btw-side/tui-picker.d.ts +9 -0
  14. package/dist/features/btw-side/tui-session-catalog.d.ts +35 -0
  15. package/dist/features/btw-side/tui-side-start.d.ts +1 -1
  16. package/dist/features/opengateway-provider/index.d.ts +13 -0
  17. package/dist/index.js +8462 -6318
  18. package/dist/skills/frontend/SKILL.md +1 -0
  19. package/dist/skills/frontend/references/design/print-paged-media.md +76 -0
  20. package/dist/skills/ulw-research/SKILL.md +1 -1
  21. package/dist/skills/visual-qa/SKILL.md +3 -2
  22. package/dist/tui.js +3993 -5513
  23. package/package.json +22 -22
  24. package/packages/git-bash-mcp/package.json +1 -1
  25. package/packages/lsp-daemon/dist/cli.js +81 -113
  26. package/packages/lsp-daemon/dist/client.js +82 -117
  27. package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
  28. package/packages/lsp-daemon/dist/index.js +88 -122
  29. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  30. package/packages/lsp-tools-mcp/dist/cli.js +62 -93
  31. package/packages/lsp-tools-mcp/dist/lsp/manager.js +62 -92
  32. package/packages/lsp-tools-mcp/dist/mcp.js +64 -95
  33. package/packages/lsp-tools-mcp/dist/request-context.js +11 -12
  34. package/packages/lsp-tools-mcp/dist/tools.js +73 -104
  35. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  36. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +30 -29
  37. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  38. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  40. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +81 -64
  41. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +81 -65
  42. package/packages/omo-codex/plugin/components/codegraph/package.json +4 -4
  43. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +1 -0
  44. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +1 -0
  45. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  46. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  47. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  48. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  49. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  50. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  51. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  52. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  53. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  54. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  55. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +70 -107
  56. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  57. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  58. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  59. package/packages/omo-codex/plugin/components/rules/dist/cli.js +14 -12
  60. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  61. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  62. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  63. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +5 -5
  64. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  65. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  66. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +25 -25
  67. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +31 -31
  68. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  69. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  70. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  71. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -5
  72. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +1 -3
  73. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
  74. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  75. package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
  76. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
  77. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
  78. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  79. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  80. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  82. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  83. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  103. package/packages/omo-codex/plugin/package-lock.json +661 -375
  104. package/packages/omo-codex/plugin/package.json +1 -1
  105. package/packages/omo-codex/plugin/shared/package.json +2 -3
  106. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -0
  107. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  108. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +1 -1
  109. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
  110. package/packages/omo-codex/scripts/install-dist/install-local.mjs +53 -53
  111. package/packages/shared-skills/skills/frontend/SKILL.md +1 -0
  112. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  113. package/packages/shared-skills/skills/ulw-research/SKILL.md +1 -1
  114. package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
  115. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  116. package/script/qa/xterm-live-terminal.mjs +18 -2
@@ -78,18 +78,17 @@ import { statSync as statSync5 } from "node:fs";
78
78
  import { isAbsolute as isAbsolute5 } from "node:path";
79
79
 
80
80
  class LspRequestContextParseError extends Error {
81
- code;
82
- name = "LspRequestContextParseError";
83
81
  constructor(code, message) {
84
82
  super(message);
85
83
  this.code = code;
84
+ this.name = "LspRequestContextParseError";
86
85
  }
87
86
  }
88
87
 
89
88
  class LspRequestContextUnavailableError extends Error {
90
- name = "LspRequestContextUnavailableError";
91
89
  constructor() {
92
90
  super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
91
+ this.name = "LspRequestContextUnavailableError";
93
92
  }
94
93
  }
95
94
  var storage = new AsyncLocalStorage;
@@ -216,7 +215,6 @@ function isPlainRecord(value) {
216
215
  }
217
216
 
218
217
  class DaemonRequestError extends Error {
219
- requestWritten;
220
218
  constructor(message, requestWritten) {
221
219
  super(message);
222
220
  this.name = "DaemonRequestError";
@@ -239,7 +237,6 @@ class DaemonRequestCancelledError extends DaemonRequestError {
239
237
  }
240
238
 
241
239
  class DaemonRequestTimedOutError extends DaemonRequestError {
242
- timeoutMs;
243
240
  constructor(requestWritten, timeoutMs) {
244
241
  super("daemon request timed out", requestWritten);
245
242
  this.name = "DaemonRequestTimedOutError";
@@ -316,20 +313,18 @@ var OMO_LSP_DAEMON_VERSION = "OMO_LSP_DAEMON_VERSION";
316
313
  var DAEMON_VERSION_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
317
314
 
318
315
  class InvalidRuntimeOverrideError extends Error {
319
- code = "invalid_runtime_override";
320
- reason;
321
316
  constructor(reason, message) {
322
317
  super(message);
318
+ this.code = "invalid_runtime_override";
323
319
  this.name = "InvalidRuntimeOverrideError";
324
320
  this.reason = reason;
325
321
  }
326
322
  }
327
323
 
328
324
  class InvalidDaemonVersionError extends Error {
329
- code = "invalid_daemon_version";
330
- version;
331
325
  constructor(version) {
332
326
  super("LSP daemon version must match [A-Za-z0-9][A-Za-z0-9._+-]{0,127}");
327
+ this.code = "invalid_daemon_version";
333
328
  this.name = "InvalidDaemonVersionError";
334
329
  this.version = version;
335
330
  }
@@ -373,10 +368,9 @@ var requireFromHere = createRequire(import.meta.url);
373
368
  var MAX_SOCKET_PATH_LENGTH = 100;
374
369
 
375
370
  class InvalidDaemonDirectoryError extends Error {
376
- code = "invalid_daemon_directory";
377
- directory;
378
371
  constructor(directory) {
379
372
  super(`${OMO_LSP_DAEMON_DIR} must be an absolute path`);
373
+ this.code = "invalid_daemon_directory";
380
374
  this.name = "InvalidDaemonDirectoryError";
381
375
  this.directory = directory;
382
376
  }
@@ -567,7 +561,8 @@ function spawnDaemonProcess(paths) {
567
561
  try {
568
562
  const child = spawn(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
569
563
  detached: true,
570
- stdio: ["ignore", logFd, logFd]
564
+ stdio: ["ignore", logFd, logFd],
565
+ windowsHide: true
571
566
  });
572
567
  child.once("spawn", () => closeSync2(logFd));
573
568
  child.once("error", (error) => {
@@ -688,22 +683,15 @@ function effectiveExtension(filePath) {
688
683
  }
689
684
 
690
685
  class LspConnectionClosedError extends Error {
691
- serverId;
692
- root;
693
- name = "LspConnectionClosedError";
694
686
  constructor(serverId, root, message) {
695
687
  super(message ?? `LSP connection closed for ${serverId} at ${root}`);
696
688
  this.serverId = serverId;
697
689
  this.root = root;
690
+ this.name = "LspConnectionClosedError";
698
691
  }
699
692
  }
700
693
 
701
694
  class LspProcessExitedError extends Error {
702
- serverId;
703
- root;
704
- exitCode;
705
- stderrTail;
706
- name = "LspProcessExitedError";
707
695
  constructor(serverId, root, exitCode, stderrTail) {
708
696
  const stderrSuffix = stderrTail ? `
709
697
  stderr tail: ${stderrTail}` : "";
@@ -712,46 +700,49 @@ stderr tail: ${stderrTail}` : "";
712
700
  this.root = root;
713
701
  this.exitCode = exitCode;
714
702
  this.stderrTail = stderrTail;
703
+ this.name = "LspProcessExitedError";
715
704
  }
716
705
  }
717
706
 
718
707
  class LspRequestTimeoutError extends Error {
719
- method;
720
- stderrTail;
721
- name = "LspRequestTimeoutError";
722
708
  constructor(method, stderrTail) {
723
709
  const stderrSuffix = stderrTail ? `
724
710
  recent stderr: ${stderrTail}` : "";
725
711
  super(`LSP request timeout (method: ${method})${stderrSuffix}`);
726
712
  this.method = method;
727
713
  this.stderrTail = stderrTail;
714
+ this.name = "LspRequestTimeoutError";
728
715
  }
729
716
  }
730
717
 
731
718
  class LspInvalidPathError extends Error {
732
- name = "LspInvalidPathError";
719
+ constructor() {
720
+ super(...arguments);
721
+ this.name = "LspInvalidPathError";
722
+ }
733
723
  }
734
724
 
735
725
  class LspServerLookupError extends Error {
736
- lookup;
737
- name = "LspServerLookupError";
738
726
  constructor(message, lookup) {
739
727
  super(message);
740
728
  this.lookup = lookup;
729
+ this.name = "LspServerLookupError";
741
730
  }
742
731
  }
743
732
 
744
733
  class LspServerInitializingError extends Error {
745
- originalError;
746
- name = "LspServerInitializingError";
747
734
  constructor(originalError) {
748
735
  super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
749
736
  this.originalError = originalError;
737
+ this.name = "LspServerInitializingError";
750
738
  }
751
739
  }
752
740
 
753
741
  class LspProcessSpawnError extends Error {
754
- name = "LspProcessSpawnError";
742
+ constructor() {
743
+ super(...arguments);
744
+ this.name = "LspProcessSpawnError";
745
+ }
755
746
  }
756
747
  function isLspDeadConnectionError(err) {
757
748
  return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
@@ -783,20 +774,31 @@ var METHOD_NOT_FOUND = -32601;
783
774
  var INTERNAL_ERROR = -32603;
784
775
 
785
776
  class JsonRpcConnection {
786
- reader;
787
- writer;
788
- pendingRequests = new Map;
789
- notificationHandlers = new Map;
790
- requestHandlers = new Map;
791
- closeHandlers = [];
792
- errorHandlers = [];
793
- inputBuffer = Buffer.alloc(0);
794
- nextRequestId = 1;
795
- listening = false;
796
- disposed = false;
797
777
  constructor(reader, writer) {
798
778
  this.reader = reader;
799
779
  this.writer = writer;
780
+ this.pendingRequests = new Map;
781
+ this.notificationHandlers = new Map;
782
+ this.requestHandlers = new Map;
783
+ this.closeHandlers = [];
784
+ this.errorHandlers = [];
785
+ this.inputBuffer = Buffer.alloc(0);
786
+ this.nextRequestId = 1;
787
+ this.listening = false;
788
+ this.disposed = false;
789
+ this.handleData = (chunk) => {
790
+ const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
791
+ this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
792
+ this.drainInputBuffer();
793
+ };
794
+ this.handleClose = () => {
795
+ for (const handler of this.closeHandlers) {
796
+ handler();
797
+ }
798
+ };
799
+ this.handleStreamError = (error) => {
800
+ this.emitError(error);
801
+ };
800
802
  }
801
803
  listen() {
802
804
  if (this.listening)
@@ -917,19 +919,6 @@ class JsonRpcConnection {
917
919
  this.notificationHandlers.clear();
918
920
  this.requestHandlers.clear();
919
921
  }
920
- handleData = (chunk) => {
921
- const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
922
- this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
923
- this.drainInputBuffer();
924
- };
925
- handleClose = () => {
926
- for (const handler of this.closeHandlers) {
927
- handler();
928
- }
929
- };
930
- handleStreamError = (error) => {
931
- this.emitError(error);
932
- };
933
922
  drainInputBuffer() {
934
923
  while (true) {
935
924
  const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR2);
@@ -1269,31 +1258,25 @@ function isPosition(value) {
1269
1258
  }
1270
1259
 
1271
1260
  class LspClientNotStartedError extends Error {
1272
- serverId;
1273
- root;
1274
- name = "LspClientNotStartedError";
1275
1261
  constructor(serverId, root) {
1276
1262
  super("LSP client not started");
1277
1263
  this.serverId = serverId;
1278
1264
  this.root = root;
1265
+ this.name = "LspClientNotStartedError";
1279
1266
  }
1280
1267
  }
1281
1268
 
1282
1269
  class LspClientTransport {
1283
- root;
1284
- server;
1285
- proc = null;
1286
- connection = null;
1287
- stderrBuffer = [];
1288
- processExited = false;
1289
- diagnosticsStore = new Map;
1290
- requestTimeoutMs;
1291
- initializeTimeoutMs;
1292
- workspaceApplyEditHandler = null;
1293
- diagnosticPullSupported = false;
1294
1270
  constructor(root, server2, timeouts = {}) {
1295
1271
  this.root = root;
1296
1272
  this.server = server2;
1273
+ this.proc = null;
1274
+ this.connection = null;
1275
+ this.stderrBuffer = [];
1276
+ this.processExited = false;
1277
+ this.diagnosticsStore = new Map;
1278
+ this.workspaceApplyEditHandler = null;
1279
+ this.diagnosticPullSupported = false;
1297
1280
  this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
1298
1281
  this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
1299
1282
  }
@@ -1779,16 +1762,12 @@ function movedPath(candidate, oldPath, newPath) {
1779
1762
  }
1780
1763
 
1781
1764
  class WorkspaceDocumentState {
1782
- sendNotification;
1783
- clearDiagnostics;
1784
- openDocuments = new Map;
1785
- openByUri = new Map;
1786
- openPromises = new Map;
1787
- now;
1788
- versionlessPublishQuiescenceMs;
1789
1765
  constructor(sendNotification, clearDiagnostics, options = {}) {
1790
1766
  this.sendNotification = sendNotification;
1791
1767
  this.clearDiagnostics = clearDiagnostics;
1768
+ this.openDocuments = new Map;
1769
+ this.openByUri = new Map;
1770
+ this.openPromises = new Map;
1792
1771
  this.now = options.now ?? (() => Date.now());
1793
1772
  this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
1794
1773
  }
@@ -2042,13 +2021,11 @@ function workspaceApplyEditConcurrentFailureReason(phase) {
2042
2021
  }
2043
2022
 
2044
2023
  class WorkspaceEditPathError extends Error {
2045
- path;
2046
- detail;
2047
- name = "WorkspaceEditPathError";
2048
2024
  constructor(path2, detail) {
2049
2025
  super(`${detail}: ${path2}`);
2050
2026
  this.path = path2;
2051
2027
  this.detail = detail;
2028
+ this.name = "WorkspaceEditPathError";
2052
2029
  }
2053
2030
  }
2054
2031
  function isPathInsideWorkspace(filePath, workspaceRoot) {
@@ -2334,13 +2311,11 @@ function canonicalFingerprint(operations) {
2334
2311
  }
2335
2312
 
2336
2313
  class WorkspaceEditValidationError extends Error {
2337
- changeIndex;
2338
- detail;
2339
- name = "WorkspaceEditValidationError";
2340
2314
  constructor(changeIndex, detail) {
2341
2315
  super(`change ${changeIndex}: ${detail}`);
2342
2316
  this.changeIndex = changeIndex;
2343
2317
  this.detail = detail;
2318
+ this.name = "WorkspaceEditValidationError";
2344
2319
  }
2345
2320
  }
2346
2321
  function isRecord3(value) {
@@ -2822,10 +2797,9 @@ function simulateDelete(operation, virtual) {
2822
2797
  }
2823
2798
 
2824
2799
  class WorkspaceSnapshotBuilder {
2825
- workspaceRoot;
2826
- snapshots = new Map;
2827
2800
  constructor(workspaceRoot) {
2828
2801
  this.workspaceRoot = workspaceRoot;
2802
+ this.snapshots = new Map;
2829
2803
  }
2830
2804
  build(operations) {
2831
2805
  this.add(this.workspaceRoot, false);
@@ -2868,8 +2842,10 @@ function snapshotOperations(operations, workspaceRoot) {
2868
2842
  }
2869
2843
 
2870
2844
  class PlanPathIndex {
2871
- firstChangeByPath = new Map;
2872
- reportedPathByCanonical = new Map;
2845
+ constructor() {
2846
+ this.firstChangeByPath = new Map;
2847
+ this.reportedPathByCanonical = new Map;
2848
+ }
2873
2849
  build(operations) {
2874
2850
  for (const operation of operations) {
2875
2851
  switch (operation.kind) {
@@ -2956,14 +2932,11 @@ function isRecord4(value) {
2956
2932
  }
2957
2933
 
2958
2934
  class WorkspaceMutationController {
2959
- workspaceRoot;
2960
- documents;
2961
- activeLease = null;
2962
- nextLeaseId = 1;
2963
- io;
2964
2935
  constructor(workspaceRoot, documents) {
2965
2936
  this.workspaceRoot = workspaceRoot;
2966
2937
  this.documents = documents;
2938
+ this.activeLease = null;
2939
+ this.nextLeaseId = 1;
2967
2940
  }
2968
2941
  setIo(io) {
2969
2942
  this.io = io;
@@ -3074,12 +3047,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
3074
3047
  var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
3075
3048
 
3076
3049
  class LspClient extends LspClientConnection {
3077
- diagnosticPullErrors = [];
3078
- documents;
3079
- workspaceMutations;
3080
- diagnosticsFreshnessTimeoutMs;
3081
3050
  constructor(root, server2, options = {}) {
3082
3051
  super(root, server2, options);
3052
+ this.diagnosticPullErrors = [];
3083
3053
  this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
3084
3054
  this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
3085
3055
  versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
@@ -3375,16 +3345,11 @@ function awaitWithSignal2(promise, signal) {
3375
3345
  }
3376
3346
 
3377
3347
  class LspManager {
3378
- clients = new Map;
3379
- reaperHandle = null;
3380
- signalDisposer = null;
3381
- disposed = false;
3382
- idleTimeoutMs;
3383
- initTimeoutMs;
3384
- reaperIntervalMs;
3385
- clientFactory;
3386
- now;
3387
3348
  constructor(options = {}) {
3349
+ this.clients = new Map;
3350
+ this.reaperHandle = null;
3351
+ this.signalDisposer = null;
3352
+ this.disposed = false;
3388
3353
  this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
3389
3354
  this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
3390
3355
  this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
@@ -5334,10 +5299,9 @@ var OMO_LSP_DAEMON_VERSION2 = "OMO_LSP_DAEMON_VERSION";
5334
5299
  var DAEMON_VERSION_PATTERN2 = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
5335
5300
 
5336
5301
  class InvalidRuntimeOverrideError2 extends Error {
5337
- code = "invalid_runtime_override";
5338
- reason;
5339
5302
  constructor(reason, message) {
5340
5303
  super(message);
5304
+ this.code = "invalid_runtime_override";
5341
5305
  this.name = "InvalidRuntimeOverrideError";
5342
5306
  this.reason = reason;
5343
5307
  }
@@ -5487,11 +5451,10 @@ import { existsSync as existsSync13, realpathSync as realpathSync6, statSync as
5487
5451
  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";
5488
5452
 
5489
5453
  class LspRequestContextParseError2 extends Error {
5490
- code;
5491
- name = "LspRequestContextParseError";
5492
5454
  constructor(code, message) {
5493
5455
  super(message);
5494
5456
  this.code = code;
5457
+ this.name = "LspRequestContextParseError";
5495
5458
  }
5496
5459
  }
5497
5460
  var storage2 = new AsyncLocalStorage2;
@@ -6040,7 +6003,7 @@ main().catch((error) => {
6040
6003
  });
6041
6004
  async function runPackageLspMcpCli() {
6042
6005
  const cliPath = resolveLspDaemonCliPath();
6043
- const child = spawn3(execPath2, [cliPath, "mcp"], { stdio: "inherit" });
6006
+ const child = spawn3(execPath2, [cliPath, "mcp"], { stdio: "inherit", windowsHide: true });
6044
6007
  await new Promise((resolve10, reject) => {
6045
6008
  child.once("error", reject);
6046
6009
  child.once("exit", (code, signal) => {
@@ -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.13) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.15) 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.13) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.15) 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.13",
3
+ "version": "5.0.0-beta.15",
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",
@@ -54,10 +54,10 @@
54
54
  "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon"
55
55
  },
56
56
  "devDependencies": {
57
- "@biomejs/biome": "2.4.16",
58
- "@types/node": "^25.9.3",
59
- "typescript": "^6.0.3",
60
- "vitest": "^4.1.8"
57
+ "@biomejs/biome": "2.5.9",
58
+ "@types/node": "^26.2.0",
59
+ "typescript": "^7.0.2",
60
+ "vitest": "^4.1.11"
61
61
  },
62
62
  "engines": {
63
63
  "node": ">=20.0.0"
@@ -33,7 +33,7 @@ main().catch((error: unknown) => {
33
33
 
34
34
  async function runPackageLspMcpCli(): Promise<void> {
35
35
  const cliPath = resolveLspDaemonCliPath();
36
- const child = spawn(execPath, [cliPath, "mcp"], { stdio: "inherit" });
36
+ const child = spawn(execPath, [cliPath, "mcp"], { stdio: "inherit", windowsHide: true });
37
37
  await new Promise<void>((resolve, reject) => {
38
38
  child.once("error", reject);
39
39
  child.once("exit", (code, signal) => {
@@ -19,12 +19,14 @@ var __toESM = (mod, isNodeMode, target) => {
19
19
  }
20
20
  target = mod != null ? __create(__getProtoOf(mod)) : {};
21
21
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
22
- for (let key of __getOwnPropNames(mod))
23
- if (!__hasOwnProp.call(to, key))
24
- __defProp(to, key, {
25
- get: __accessProp.bind(mod, key),
26
- enumerable: true
27
- });
22
+ if (mod && typeof mod === "object" || typeof mod === "function") {
23
+ for (let key of __getOwnPropNames(mod))
24
+ if (!__hasOwnProp.call(to, key))
25
+ __defProp(to, key, {
26
+ get: __accessProp.bind(mod, key),
27
+ enumerable: true
28
+ });
29
+ }
28
30
  if (canCache)
29
31
  cache.set(mod, to);
30
32
  return to;
@@ -32,7 +34,7 @@ var __toESM = (mod, isNodeMode, target) => {
32
34
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
33
35
 
34
36
  // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/constants.js
35
- var require_constants = __commonJS((exports, module) => {
37
+ var require_constants = __commonJS(function(exports, module) {
36
38
  var WIN_SLASH = "\\\\/";
37
39
  var WIN_NO_SLASH = `[^${WIN_SLASH}]`;
38
40
  var DEFAULT_MAX_EXTGLOB_RECURSION = 0;
@@ -177,7 +179,7 @@ var require_constants = __commonJS((exports, module) => {
177
179
  });
178
180
 
179
181
  // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/utils.js
180
- var require_utils = __commonJS((exports) => {
182
+ var require_utils = __commonJS(function(exports) {
181
183
  var {
182
184
  REGEX_BACKSLASH,
183
185
  REGEX_REMOVE_BACKSLASH,
@@ -240,7 +242,7 @@ var require_utils = __commonJS((exports) => {
240
242
  });
241
243
 
242
244
  // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/scan.js
243
- var require_scan = __commonJS((exports, module) => {
245
+ var require_scan = __commonJS(function(exports, module) {
244
246
  var utils = require_utils();
245
247
  var {
246
248
  CHAR_ASTERISK,
@@ -555,7 +557,7 @@ var require_scan = __commonJS((exports, module) => {
555
557
  });
556
558
 
557
559
  // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/parse.js
558
- var require_parse = __commonJS((exports, module) => {
560
+ var require_parse = __commonJS(function(exports, module) {
559
561
  var constants = require_constants();
560
562
  var utils = require_utils();
561
563
  var {
@@ -1574,7 +1576,7 @@ var require_parse = __commonJS((exports, module) => {
1574
1576
  });
1575
1577
 
1576
1578
  // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/picomatch.js
1577
- var require_picomatch = __commonJS((exports, module) => {
1579
+ var require_picomatch = __commonJS(function(exports, module) {
1578
1580
  var scan = require_scan();
1579
1581
  var parse = require_parse();
1580
1582
  var utils = require_utils();
@@ -1714,7 +1716,7 @@ var require_picomatch = __commonJS((exports, module) => {
1714
1716
  });
1715
1717
 
1716
1718
  // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/index.js
1717
- var require_picomatch2 = __commonJS((exports, module) => {
1719
+ var require_picomatch2 = __commonJS(function(exports, module) {
1718
1720
  var pico = require_picomatch();
1719
1721
  var utils = require_utils();
1720
1722
  function picomatch(glob, options, returnState = false) {
@@ -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.13) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.15) 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.13) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.15) 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.13) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.15) 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.13) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.15) 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.13",
3
+ "version": "5.0.0-beta.15",
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",
@@ -47,15 +47,15 @@
47
47
  "check": "tsc --noEmit && biome check . && npm run build"
48
48
  },
49
49
  "dependencies": {
50
- "picomatch": "^4.0.3"
50
+ "picomatch": "^4.0.5"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@oh-my-opencode/rules-engine": "file:../../../../rules-engine",
54
- "@biomejs/biome": "2.4.16",
55
- "@types/node": "^25.9.3",
56
- "@types/picomatch": "^4.0.0",
57
- "typescript": "^6.0.3",
58
- "vitest": "^4.1.8"
54
+ "@biomejs/biome": "2.5.9",
55
+ "@types/node": "^26.2.0",
56
+ "@types/picomatch": "^4.0.3",
57
+ "typescript": "^7.0.2",
58
+ "vitest": "^4.1.11"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=20.0.0"
@@ -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.13) Checking Start-Work Continuation"
10
+ "statusMessage": "(OmO 5.0.0-beta.15) 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.13) Checking Start-Work Continuation"
22
+ "statusMessage": "(OmO 5.0.0-beta.15) 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.13",
3
+ "version": "5.0.0-beta.15",
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",
@@ -42,10 +42,10 @@
42
42
  "NOTICE"
43
43
  ],
44
44
  "devDependencies": {
45
- "@biomejs/biome": "2.4.16",
46
- "@types/node": "^25.9.3",
47
- "typescript": "^6.0.3",
48
- "vitest": "^4.1.8"
45
+ "@biomejs/biome": "2.5.9",
46
+ "@types/node": "^26.2.0",
47
+ "typescript": "^7.0.2",
48
+ "vitest": "^4.1.11"
49
49
  },
50
50
  "engines": {
51
51
  "node": ">=20.0.0"
@@ -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.13) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.15) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }