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

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 (145) hide show
  1. package/.agents/skills/senpi-qa/SKILL.md +80 -0
  2. package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs +65 -0
  3. package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs +171 -0
  4. package/README.ja.md +25 -21
  5. package/README.ko.md +25 -21
  6. package/README.md +26 -22
  7. package/README.ru.md +24 -20
  8. package/README.zh-cn.md +25 -21
  9. package/dist/cli/index.js +16747 -15223
  10. package/dist/cli-node/index.js +16898 -15374
  11. package/dist/create-hooks.d.ts +1 -0
  12. package/dist/features/btw-side/btw-command-draft.d.ts +7 -0
  13. package/dist/features/btw-side/context-injector.d.ts +15 -0
  14. package/dist/features/btw-side/index.d.ts +8 -0
  15. package/dist/features/btw-side/metadata.d.ts +15 -0
  16. package/dist/features/btw-side/parent-context-budget.d.ts +9 -0
  17. package/dist/features/btw-side/server-session-registry.d.ts +8 -0
  18. package/dist/features/btw-side/tui-adoption-cache.d.ts +13 -0
  19. package/dist/features/btw-side/tui-adoption-guard.d.ts +5 -0
  20. package/dist/features/btw-side/tui-controller-types.d.ts +68 -0
  21. package/dist/features/btw-side/tui-controller.d.ts +19 -0
  22. package/dist/features/btw-side/tui-escape-return.d.ts +12 -0
  23. package/dist/features/btw-side/tui-keymap.d.ts +17 -0
  24. package/dist/features/btw-side/tui-parent-validator.d.ts +6 -0
  25. package/dist/features/btw-side/tui-picker-options.d.ts +20 -0
  26. package/dist/features/btw-side/tui-picker.d.ts +9 -0
  27. package/dist/features/btw-side/tui-prompt-queue.d.ts +8 -0
  28. package/dist/features/btw-side/tui-session-bridge.d.ts +11 -0
  29. package/dist/features/btw-side/tui-session-catalog.d.ts +35 -0
  30. package/dist/features/btw-side/tui-side-removal.d.ts +11 -0
  31. package/dist/features/btw-side/tui-side-start.d.ts +9 -0
  32. package/dist/features/btw-side/tui-wiring.d.ts +8 -0
  33. package/dist/features/opengateway-provider/index.d.ts +13 -0
  34. package/dist/hooks/runtime-fallback/chat-message-handler.d.ts +2 -0
  35. package/dist/hooks/runtime-fallback/retry-model-payload.d.ts +1 -0
  36. package/dist/hooks/runtime-fallback/runtime-model-settings.d.ts +6 -0
  37. package/dist/hooks/runtime-fallback/session-status-handler.d.ts +1 -1
  38. package/dist/hooks/runtime-fallback/types.d.ts +3 -1
  39. package/dist/index.js +10814 -6018
  40. package/dist/plugin/event-session-lifecycle.d.ts +1 -0
  41. package/dist/plugin/hooks/create-core-hooks.d.ts +1 -0
  42. package/dist/plugin/hooks/create-transform-hooks.d.ts +2 -0
  43. package/dist/plugin/messages-transform.d.ts +1 -0
  44. package/dist/shared/index.d.ts +1 -0
  45. package/dist/shared/runtime-fallback-retry-marker.d.ts +16 -0
  46. package/dist/skills/frontend/SKILL.md +1 -0
  47. package/dist/skills/frontend/references/design/print-paged-media.md +76 -0
  48. package/dist/skills/ulw-research/SKILL.md +1 -1
  49. package/dist/skills/visual-qa/SKILL.md +3 -2
  50. package/dist/tui.js +8273 -8493
  51. package/package.json +30 -29
  52. package/packages/git-bash-mcp/dist/cli.js +5 -1
  53. package/packages/git-bash-mcp/package.json +1 -1
  54. package/packages/lsp-daemon/dist/cli.js +86 -114
  55. package/packages/lsp-daemon/dist/client.js +87 -118
  56. package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
  57. package/packages/lsp-daemon/dist/index.js +93 -123
  58. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  59. package/packages/lsp-tools-mcp/dist/cli.js +67 -94
  60. package/packages/lsp-tools-mcp/dist/lsp/manager.js +62 -92
  61. package/packages/lsp-tools-mcp/dist/mcp.js +69 -96
  62. package/packages/lsp-tools-mcp/dist/request-context.js +11 -12
  63. package/packages/lsp-tools-mcp/dist/tools.js +73 -104
  64. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  65. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +30 -29
  66. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  67. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  69. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +86 -65
  70. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +86 -66
  71. package/packages/omo-codex/plugin/components/codegraph/package.json +4 -4
  72. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +1 -0
  73. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +1 -0
  74. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  75. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  76. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  77. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  78. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  79. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  80. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  81. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  82. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  83. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  84. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +70 -107
  85. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  86. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  87. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  88. package/packages/omo-codex/plugin/components/rules/dist/cli.js +14 -12
  89. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  90. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  91. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  92. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +5 -5
  93. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  94. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  95. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2266 -405
  96. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2270 -409
  97. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  98. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  99. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  100. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -5
  101. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +1 -3
  102. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
  103. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  104. package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
  105. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
  106. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
  107. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  108. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  109. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  110. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  111. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  112. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  113. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  114. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  115. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  116. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  117. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  118. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  119. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  120. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  121. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  122. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  123. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  124. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  125. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  126. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  127. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  128. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  129. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  130. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  131. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  132. package/packages/omo-codex/plugin/package-lock.json +661 -375
  133. package/packages/omo-codex/plugin/package.json +1 -1
  134. package/packages/omo-codex/plugin/shared/package.json +2 -3
  135. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -0
  136. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  137. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +1 -1
  138. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
  139. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2410 -504
  140. package/packages/shared-skills/skills/frontend/SKILL.md +1 -0
  141. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  142. package/packages/shared-skills/skills/ulw-research/SKILL.md +1 -1
  143. package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
  144. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  145. package/script/qa/xterm-live-terminal.mjs +18 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.12",
3
+ "version": "5.0.0-beta.14",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -137,7 +137,7 @@
137
137
  "test": "bun test",
138
138
  "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
139
139
  "test:fast": "bun run script/test-fast.ts",
140
- "test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test packages/omo-senpi",
140
+ "test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
141
141
  "test:windows-codex": "bun run test:codex",
142
142
  "build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
143
143
  "build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
@@ -162,26 +162,26 @@
162
162
  },
163
163
  "homepage": "https://github.com/code-yeongyu/oh-my-openagent#readme",
164
164
  "dependencies": {
165
- "@clack/prompts": "^1.4.0",
165
+ "@clack/prompts": "^1.7.0",
166
166
  "@code-yeongyu/comment-checker": "^0.8.0",
167
- "@modelcontextprotocol/sdk": "^1.29.0",
168
- "@opencode-ai/plugin": "1.15.13",
169
- "@opencode-ai/sdk": "1.15.13",
170
- "@opentui/core": "^0.2.16",
171
- "@opentui/keymap": "^0.2.16",
172
- "@opentui/solid": "^0.2.16",
173
- "commander": "^14.0.3",
167
+ "@modelcontextprotocol/sdk": "^1.30.0",
168
+ "@opencode-ai/plugin": "1.18.19",
169
+ "@opencode-ai/sdk": "1.18.19",
170
+ "@opentui/core": "^0.5.6",
171
+ "@opentui/keymap": "^0.5.6",
172
+ "@opentui/solid": "^0.5.6",
173
+ "commander": "^15.0.0",
174
174
  "detect-libc": "^2.1.2",
175
175
  "diff": "^9.0.0",
176
- "js-yaml": "^4.1.1",
176
+ "js-yaml": "^5.0.0",
177
177
  "jsonc-parser": "^3.3.1",
178
178
  "picocolors": "^1.1.1",
179
- "picomatch": "^4.0.4",
180
- "posthog-node": "^5.34.3",
179
+ "picomatch": "^4.0.5",
180
+ "posthog-node": "^5.49.2",
181
181
  "zod": "^4.4.3"
182
182
  },
183
183
  "devDependencies": {
184
- "@code-yeongyu/senpi": "2026.8.19",
184
+ "@code-yeongyu/senpi": "2026.8.21-2",
185
185
  "@oh-my-opencode/agents-md-core": "workspace:*",
186
186
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
187
187
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -216,24 +216,24 @@
216
216
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
217
217
  "@xterm/addon-unicode11": "^0.9.0",
218
218
  "@xterm/xterm": "^6.0.0",
219
- "bun-types": "1.3.14",
219
+ "bun-types": "1.4.0",
220
220
  "node-pty": "^1.1.0",
221
- "puppeteer-core": "^25.3.0",
221
+ "puppeteer-core": "^25.8.0",
222
222
  "typescript": "^7.0.2"
223
223
  },
224
224
  "optionalDependencies": {
225
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.12",
226
- "oh-my-opencode-darwin-x64": "5.0.0-beta.12",
227
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.12",
228
- "oh-my-opencode-linux-arm64": "5.0.0-beta.12",
229
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.12",
230
- "oh-my-opencode-linux-x64": "5.0.0-beta.12",
231
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.12",
232
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.12",
233
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.12",
234
- "oh-my-opencode-windows-arm64": "5.0.0-beta.12",
235
- "oh-my-opencode-windows-x64": "5.0.0-beta.12",
236
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.12"
225
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.14",
226
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.14",
227
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.14",
228
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.14",
229
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.14",
230
+ "oh-my-opencode-linux-x64": "5.0.0-beta.14",
231
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.14",
232
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.14",
233
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.14",
234
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.14",
235
+ "oh-my-opencode-windows-x64": "5.0.0-beta.14",
236
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.14"
237
237
  },
238
238
  "overrides": {
239
239
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -244,7 +244,8 @@
244
244
  "@hono/node-server": "^1.19.13",
245
245
  "express-rate-limit": "^8.5.1",
246
246
  "fast-uri": "^3.1.2",
247
- "path-to-regexp": "^8.4.2"
247
+ "path-to-regexp": "^8.4.2",
248
+ "@types/node": "26.2.0"
248
249
  },
249
250
  "trustedDependencies": [
250
251
  "@code-yeongyu/comment-checker"
@@ -276,7 +276,11 @@ function createParentWatchdog(config, onDeadParent) {
276
276
  const probeAlive = config.probeAlive ?? isProcessAlive;
277
277
  let fired = false;
278
278
  const timer = setInterval(() => {
279
- if (fired || probeAlive(parentPid))
279
+ if (fired)
280
+ return;
281
+ const alive = probeAlive(parentPid);
282
+ config.onPoll?.(alive);
283
+ if (alive)
280
284
  return;
281
285
  fired = true;
282
286
  onDeadParent(parentPid, pollIntervalMs);
@@ -22,6 +22,6 @@
22
22
  "@oh-my-opencode/utils": "workspace:*"
23
23
  },
24
24
  "devDependencies": {
25
- "bun-types": "1.3.12"
25
+ "bun-types": "1.4.0"
26
26
  }
27
27
  }
@@ -280,7 +280,11 @@ function createParentWatchdog(config, onDeadParent) {
280
280
  const probeAlive = config.probeAlive ?? isProcessAlive;
281
281
  let fired = false;
282
282
  const timer = setInterval(() => {
283
- if (fired || probeAlive(parentPid))
283
+ if (fired)
284
+ return;
285
+ const alive = probeAlive(parentPid);
286
+ config.onPoll?.(alive);
287
+ if (alive)
284
288
  return;
285
289
  fired = true;
286
290
  onDeadParent(parentPid, pollIntervalMs);
@@ -325,18 +329,17 @@ import { homedir } from "node:os";
325
329
  import { basename, delimiter, dirname, isAbsolute, join, relative, resolve } from "node:path";
326
330
 
327
331
  class LspRequestContextParseError extends Error {
328
- code;
329
- name = "LspRequestContextParseError";
330
332
  constructor(code, message) {
331
333
  super(message);
332
334
  this.code = code;
335
+ this.name = "LspRequestContextParseError";
333
336
  }
334
337
  }
335
338
 
336
339
  class LspRequestContextUnavailableError extends Error {
337
- name = "LspRequestContextUnavailableError";
338
340
  constructor() {
339
341
  super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
342
+ this.name = "LspRequestContextUnavailableError";
340
343
  }
341
344
  }
342
345
  var storage = new AsyncLocalStorage;
@@ -499,22 +502,15 @@ function effectiveExtension(filePath) {
499
502
 
500
503
  // ../lsp-core/src/lsp/errors.ts
501
504
  class LspConnectionClosedError extends Error {
502
- serverId;
503
- root;
504
- name = "LspConnectionClosedError";
505
505
  constructor(serverId, root, message) {
506
506
  super(message ?? `LSP connection closed for ${serverId} at ${root}`);
507
507
  this.serverId = serverId;
508
508
  this.root = root;
509
+ this.name = "LspConnectionClosedError";
509
510
  }
510
511
  }
511
512
 
512
513
  class LspProcessExitedError extends Error {
513
- serverId;
514
- root;
515
- exitCode;
516
- stderrTail;
517
- name = "LspProcessExitedError";
518
514
  constructor(serverId, root, exitCode, stderrTail) {
519
515
  const stderrSuffix = stderrTail ? `
520
516
  stderr tail: ${stderrTail}` : "";
@@ -523,46 +519,49 @@ stderr tail: ${stderrTail}` : "";
523
519
  this.root = root;
524
520
  this.exitCode = exitCode;
525
521
  this.stderrTail = stderrTail;
522
+ this.name = "LspProcessExitedError";
526
523
  }
527
524
  }
528
525
 
529
526
  class LspRequestTimeoutError extends Error {
530
- method;
531
- stderrTail;
532
- name = "LspRequestTimeoutError";
533
527
  constructor(method, stderrTail) {
534
528
  const stderrSuffix = stderrTail ? `
535
529
  recent stderr: ${stderrTail}` : "";
536
530
  super(`LSP request timeout (method: ${method})${stderrSuffix}`);
537
531
  this.method = method;
538
532
  this.stderrTail = stderrTail;
533
+ this.name = "LspRequestTimeoutError";
539
534
  }
540
535
  }
541
536
 
542
537
  class LspInvalidPathError extends Error {
543
- name = "LspInvalidPathError";
538
+ constructor() {
539
+ super(...arguments);
540
+ this.name = "LspInvalidPathError";
541
+ }
544
542
  }
545
543
 
546
544
  class LspServerLookupError extends Error {
547
- lookup;
548
- name = "LspServerLookupError";
549
545
  constructor(message, lookup) {
550
546
  super(message);
551
547
  this.lookup = lookup;
548
+ this.name = "LspServerLookupError";
552
549
  }
553
550
  }
554
551
 
555
552
  class LspServerInitializingError extends Error {
556
- originalError;
557
- name = "LspServerInitializingError";
558
553
  constructor(originalError) {
559
554
  super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
560
555
  this.originalError = originalError;
556
+ this.name = "LspServerInitializingError";
561
557
  }
562
558
  }
563
559
 
564
560
  class LspProcessSpawnError extends Error {
565
- name = "LspProcessSpawnError";
561
+ constructor() {
562
+ super(...arguments);
563
+ this.name = "LspProcessSpawnError";
564
+ }
566
565
  }
567
566
  function isLspDeadConnectionError(err) {
568
567
  return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
@@ -607,20 +606,31 @@ var METHOD_NOT_FOUND = -32601;
607
606
  var INTERNAL_ERROR = -32603;
608
607
 
609
608
  class JsonRpcConnection {
610
- reader;
611
- writer;
612
- pendingRequests = new Map;
613
- notificationHandlers = new Map;
614
- requestHandlers = new Map;
615
- closeHandlers = [];
616
- errorHandlers = [];
617
- inputBuffer = Buffer.alloc(0);
618
- nextRequestId = 1;
619
- listening = false;
620
- disposed = false;
621
609
  constructor(reader, writer) {
622
610
  this.reader = reader;
623
611
  this.writer = writer;
612
+ this.pendingRequests = new Map;
613
+ this.notificationHandlers = new Map;
614
+ this.requestHandlers = new Map;
615
+ this.closeHandlers = [];
616
+ this.errorHandlers = [];
617
+ this.inputBuffer = Buffer.alloc(0);
618
+ this.nextRequestId = 1;
619
+ this.listening = false;
620
+ this.disposed = false;
621
+ this.handleData = (chunk) => {
622
+ const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
623
+ this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
624
+ this.drainInputBuffer();
625
+ };
626
+ this.handleClose = () => {
627
+ for (const handler of this.closeHandlers) {
628
+ handler();
629
+ }
630
+ };
631
+ this.handleStreamError = (error) => {
632
+ this.emitError(error);
633
+ };
624
634
  }
625
635
  listen() {
626
636
  if (this.listening)
@@ -741,19 +751,6 @@ class JsonRpcConnection {
741
751
  this.notificationHandlers.clear();
742
752
  this.requestHandlers.clear();
743
753
  }
744
- handleData = (chunk) => {
745
- const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
746
- this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
747
- this.drainInputBuffer();
748
- };
749
- handleClose = () => {
750
- for (const handler of this.closeHandlers) {
751
- handler();
752
- }
753
- };
754
- handleStreamError = (error) => {
755
- this.emitError(error);
756
- };
757
754
  drainInputBuffer() {
758
755
  while (true) {
759
756
  const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR2);
@@ -1101,31 +1098,25 @@ function isPosition(value) {
1101
1098
 
1102
1099
  // ../lsp-core/src/lsp/transport.ts
1103
1100
  class LspClientNotStartedError extends Error {
1104
- serverId;
1105
- root;
1106
- name = "LspClientNotStartedError";
1107
1101
  constructor(serverId, root) {
1108
1102
  super("LSP client not started");
1109
1103
  this.serverId = serverId;
1110
1104
  this.root = root;
1105
+ this.name = "LspClientNotStartedError";
1111
1106
  }
1112
1107
  }
1113
1108
 
1114
1109
  class LspClientTransport {
1115
- root;
1116
- server;
1117
- proc = null;
1118
- connection = null;
1119
- stderrBuffer = [];
1120
- processExited = false;
1121
- diagnosticsStore = new Map;
1122
- requestTimeoutMs;
1123
- initializeTimeoutMs;
1124
- workspaceApplyEditHandler = null;
1125
- diagnosticPullSupported = false;
1126
1110
  constructor(root, server2, timeouts = {}) {
1127
1111
  this.root = root;
1128
1112
  this.server = server2;
1113
+ this.proc = null;
1114
+ this.connection = null;
1115
+ this.stderrBuffer = [];
1116
+ this.processExited = false;
1117
+ this.diagnosticsStore = new Map;
1118
+ this.workspaceApplyEditHandler = null;
1119
+ this.diagnosticPullSupported = false;
1129
1120
  this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
1130
1121
  this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
1131
1122
  }
@@ -1622,16 +1613,12 @@ function movedPath(candidate, oldPath, newPath) {
1622
1613
  }
1623
1614
 
1624
1615
  class WorkspaceDocumentState {
1625
- sendNotification;
1626
- clearDiagnostics;
1627
- openDocuments = new Map;
1628
- openByUri = new Map;
1629
- openPromises = new Map;
1630
- now;
1631
- versionlessPublishQuiescenceMs;
1632
1616
  constructor(sendNotification, clearDiagnostics, options = {}) {
1633
1617
  this.sendNotification = sendNotification;
1634
1618
  this.clearDiagnostics = clearDiagnostics;
1619
+ this.openDocuments = new Map;
1620
+ this.openByUri = new Map;
1621
+ this.openPromises = new Map;
1635
1622
  this.now = options.now ?? (() => Date.now());
1636
1623
  this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
1637
1624
  }
@@ -1895,13 +1882,11 @@ import { dirname as dirname2, isAbsolute as isAbsolute2, relative as relative3,
1895
1882
  import { fileURLToPath } from "node:url";
1896
1883
 
1897
1884
  class WorkspaceEditPathError extends Error {
1898
- path;
1899
- detail;
1900
- name = "WorkspaceEditPathError";
1901
1885
  constructor(path, detail) {
1902
1886
  super(`${detail}: ${path}`);
1903
1887
  this.path = path;
1904
1888
  this.detail = detail;
1889
+ this.name = "WorkspaceEditPathError";
1905
1890
  }
1906
1891
  }
1907
1892
  function isPathInsideWorkspace(filePath, workspaceRoot) {
@@ -2193,13 +2178,11 @@ function canonicalFingerprint(operations) {
2193
2178
 
2194
2179
  // ../lsp-core/src/lsp/workspace-edit-types.ts
2195
2180
  class WorkspaceEditValidationError extends Error {
2196
- changeIndex;
2197
- detail;
2198
- name = "WorkspaceEditValidationError";
2199
2181
  constructor(changeIndex, detail) {
2200
2182
  super(`change ${changeIndex}: ${detail}`);
2201
2183
  this.changeIndex = changeIndex;
2202
2184
  this.detail = detail;
2185
+ this.name = "WorkspaceEditValidationError";
2203
2186
  }
2204
2187
  }
2205
2188
 
@@ -2697,10 +2680,9 @@ function simulateDelete(operation, virtual) {
2697
2680
  import { existsSync as existsSync5, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
2698
2681
  import { dirname as dirname4, resolve as resolve5 } from "node:path";
2699
2682
  class WorkspaceSnapshotBuilder {
2700
- workspaceRoot;
2701
- snapshots = new Map;
2702
2683
  constructor(workspaceRoot) {
2703
2684
  this.workspaceRoot = workspaceRoot;
2685
+ this.snapshots = new Map;
2704
2686
  }
2705
2687
  build(operations) {
2706
2688
  this.add(this.workspaceRoot, false);
@@ -2744,8 +2726,10 @@ function snapshotOperations(operations, workspaceRoot) {
2744
2726
 
2745
2727
  // ../lsp-core/src/lsp/workspace-edit-plan.ts
2746
2728
  class PlanPathIndex {
2747
- firstChangeByPath = new Map;
2748
- reportedPathByCanonical = new Map;
2729
+ constructor() {
2730
+ this.firstChangeByPath = new Map;
2731
+ this.reportedPathByCanonical = new Map;
2732
+ }
2749
2733
  build(operations) {
2750
2734
  for (const operation of operations) {
2751
2735
  switch (operation.kind) {
@@ -2834,14 +2818,11 @@ function isRecord4(value) {
2834
2818
  }
2835
2819
 
2836
2820
  class WorkspaceMutationController {
2837
- workspaceRoot;
2838
- documents;
2839
- activeLease = null;
2840
- nextLeaseId = 1;
2841
- io;
2842
2821
  constructor(workspaceRoot, documents) {
2843
2822
  this.workspaceRoot = workspaceRoot;
2844
2823
  this.documents = documents;
2824
+ this.activeLease = null;
2825
+ this.nextLeaseId = 1;
2845
2826
  }
2846
2827
  setIo(io) {
2847
2828
  this.io = io;
@@ -2954,12 +2935,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
2954
2935
  var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
2955
2936
 
2956
2937
  class LspClient extends LspClientConnection {
2957
- diagnosticPullErrors = [];
2958
- documents;
2959
- workspaceMutations;
2960
- diagnosticsFreshnessTimeoutMs;
2961
2938
  constructor(root, server2, options = {}) {
2962
2939
  super(root, server2, options);
2940
+ this.diagnosticPullErrors = [];
2963
2941
  this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
2964
2942
  this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
2965
2943
  versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
@@ -3259,16 +3237,11 @@ function awaitWithSignal(promise, signal) {
3259
3237
  }
3260
3238
 
3261
3239
  class LspManager {
3262
- clients = new Map;
3263
- reaperHandle = null;
3264
- signalDisposer = null;
3265
- disposed = false;
3266
- idleTimeoutMs;
3267
- initTimeoutMs;
3268
- reaperIntervalMs;
3269
- clientFactory;
3270
- now;
3271
3240
  constructor(options = {}) {
3241
+ this.clients = new Map;
3242
+ this.reaperHandle = null;
3243
+ this.signalDisposer = null;
3244
+ this.disposed = false;
3272
3245
  this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
3273
3246
  this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
3274
3247
  this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
@@ -5206,7 +5179,6 @@ import { join as join8 } from "node:path";
5206
5179
 
5207
5180
  // src/daemon-request-error.ts
5208
5181
  class DaemonRequestError extends Error {
5209
- requestWritten;
5210
5182
  constructor(message, requestWritten) {
5211
5183
  super(message);
5212
5184
  this.name = "DaemonRequestError";
@@ -5229,7 +5201,6 @@ class DaemonRequestCancelledError extends DaemonRequestError {
5229
5201
  }
5230
5202
 
5231
5203
  class DaemonRequestTimedOutError extends DaemonRequestError {
5232
- timeoutMs;
5233
5204
  constructor(requestWritten, timeoutMs) {
5234
5205
  super("daemon request timed out", requestWritten);
5235
5206
  this.name = "DaemonRequestTimedOutError";
@@ -5308,14 +5279,12 @@ var PROTOCOL_ERROR_CODE = -32002;
5308
5279
  var AUTH_TOKEN_BYTES = 32;
5309
5280
 
5310
5281
  class UnsafePrivateDirectoryError extends Error {
5311
- path;
5312
- reason;
5313
- name = "UnsafePrivateDirectoryError";
5314
- code = "unsafe_private_directory";
5315
5282
  constructor(path, reason) {
5316
5283
  super(`unsafe private directory ${path}: ${reason}`);
5317
5284
  this.path = path;
5318
5285
  this.reason = reason;
5286
+ this.name = "UnsafePrivateDirectoryError";
5287
+ this.code = "unsafe_private_directory";
5319
5288
  }
5320
5289
  }
5321
5290
  function authEnvelope(token) {
@@ -5499,20 +5468,18 @@ var OMO_LSP_DAEMON_VERSION = "OMO_LSP_DAEMON_VERSION";
5499
5468
  var DAEMON_VERSION_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
5500
5469
 
5501
5470
  class InvalidRuntimeOverrideError extends Error {
5502
- code = "invalid_runtime_override";
5503
- reason;
5504
5471
  constructor(reason, message) {
5505
5472
  super(message);
5473
+ this.code = "invalid_runtime_override";
5506
5474
  this.name = "InvalidRuntimeOverrideError";
5507
5475
  this.reason = reason;
5508
5476
  }
5509
5477
  }
5510
5478
 
5511
5479
  class InvalidDaemonVersionError extends Error {
5512
- code = "invalid_daemon_version";
5513
- version;
5514
5480
  constructor(version) {
5515
5481
  super("LSP daemon version must match [A-Za-z0-9][A-Za-z0-9._+-]{0,127}");
5482
+ this.code = "invalid_daemon_version";
5516
5483
  this.name = "InvalidDaemonVersionError";
5517
5484
  this.version = version;
5518
5485
  }
@@ -5558,10 +5525,9 @@ var requireFromHere = createRequire(import.meta.url);
5558
5525
  var MAX_SOCKET_PATH_LENGTH = 100;
5559
5526
 
5560
5527
  class InvalidDaemonDirectoryError extends Error {
5561
- code = "invalid_daemon_directory";
5562
- directory;
5563
5528
  constructor(directory) {
5564
5529
  super(`${OMO_LSP_DAEMON_DIR} must be an absolute path`);
5530
+ this.code = "invalid_daemon_directory";
5565
5531
  this.name = "InvalidDaemonDirectoryError";
5566
5532
  this.directory = directory;
5567
5533
  }
@@ -5756,7 +5722,8 @@ function spawnDaemonProcess(paths) {
5756
5722
  try {
5757
5723
  const child = spawn2(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
5758
5724
  detached: true,
5759
- stdio: ["ignore", logFd, logFd]
5725
+ stdio: ["ignore", logFd, logFd],
5726
+ windowsHide: true
5760
5727
  });
5761
5728
  child.once("spawn", () => closeSync2(logFd));
5762
5729
  child.once("error", (error) => {
@@ -5869,7 +5836,10 @@ function parsePingResponse(message) {
5869
5836
  var CONTEXT_KEY = "_context";
5870
5837
 
5871
5838
  class InvalidDaemonRequestError extends Error {
5872
- name = "InvalidDaemonRequestError";
5839
+ constructor() {
5840
+ super(...arguments);
5841
+ this.name = "InvalidDaemonRequestError";
5842
+ }
5873
5843
  }
5874
5844
  function extractRequestContext(raw) {
5875
5845
  if (!isPlainRecord(raw) || raw["method"] !== "tools/call")
@@ -6342,17 +6312,19 @@ function errorCode3(error) {
6342
6312
 
6343
6313
  // src/ownership.ts
6344
6314
  class DaemonAlreadyRunningError extends Error {
6345
- name = "DaemonAlreadyRunningError";
6346
- code = "daemon_already_running";
6315
+ constructor() {
6316
+ super(...arguments);
6317
+ this.name = "DaemonAlreadyRunningError";
6318
+ this.code = "daemon_already_running";
6319
+ }
6347
6320
  }
6348
6321
 
6349
6322
  class DaemonStartupDeferredError extends Error {
6350
- reason;
6351
- name = "DaemonStartupDeferredError";
6352
- code = "daemon_startup_deferred";
6353
6323
  constructor(reason) {
6354
6324
  super(`LSP daemon startup deferred: ${reason}`);
6355
6325
  this.reason = reason;
6326
+ this.name = "DaemonStartupDeferredError";
6327
+ this.code = "daemon_startup_deferred";
6356
6328
  }
6357
6329
  }
6358
6330
  async function acquireStartupLease(paths, pingOwner) {
@@ -6649,7 +6621,7 @@ function defaultReadProcFile(path2) {
6649
6621
  }
6650
6622
  function defaultExecuteForStdout(file, args) {
6651
6623
  return new Promise((resolve9) => {
6652
- execFile(file, [...args], { encoding: "utf8", maxBuffer: 1024 * 1024, timeout: 1000 }, (error, stdout) => {
6624
+ execFile(file, [...args], { encoding: "utf8", maxBuffer: 1024 * 1024, timeout: 1000, windowsHide: true }, (error, stdout) => {
6653
6625
  if (error !== null) {
6654
6626
  resolve9(null);
6655
6627
  return;