oh-my-opencode 5.0.0-beta.2 → 5.0.0-beta.21

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 (460) hide show
  1. package/.agents/command/publish.md +44 -16
  2. package/.agents/skills/publish/SKILL.md +44 -16
  3. package/.agents/skills/senpi-qa/SKILL.md +80 -0
  4. package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs +65 -0
  5. package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs +171 -0
  6. package/.agents/skills/work-with-pr/SKILL.md +37 -23
  7. package/.opencode/command/publish.md +44 -16
  8. package/.opencode/skills/work-with-pr/SKILL.md +37 -23
  9. package/README.ja.md +25 -21
  10. package/README.ko.md +25 -21
  11. package/README.md +38 -23
  12. package/README.ru.md +24 -20
  13. package/README.zh-cn.md +25 -21
  14. package/dist/agents/atlas/agent.d.ts +0 -1
  15. package/dist/agents/sisyphus/grok-4.d.ts +20 -0
  16. package/dist/agents/sisyphus/index.d.ts +2 -0
  17. package/dist/agents/sisyphus-agent-config.d.ts +6 -0
  18. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  19. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +15 -4
  20. package/dist/agents/types.d.ts +2 -2
  21. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  22. package/dist/cli/index.js +23057 -20893
  23. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  24. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  25. package/dist/cli/runtime-commands.d.ts +1 -1
  26. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  27. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  28. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  29. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  30. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  31. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  32. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  33. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  34. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  35. package/dist/cli-node/index.js +23093 -20929
  36. package/dist/config/schema/commands.d.ts +1 -1
  37. package/dist/config/schema/hooks.d.ts +1 -1
  38. package/dist/config/schema/oh-my-opencode-config.d.ts +4 -1
  39. package/dist/config/schema/ulw-execute.d.ts +5 -0
  40. package/dist/config/validate.d.ts +2 -0
  41. package/dist/create-hooks.d.ts +3 -1
  42. package/dist/features/btw-side/btw-command-draft.d.ts +7 -0
  43. package/dist/features/btw-side/context-injector.d.ts +15 -0
  44. package/dist/features/btw-side/index.d.ts +8 -0
  45. package/dist/features/btw-side/metadata.d.ts +15 -0
  46. package/dist/features/btw-side/parent-context-budget.d.ts +9 -0
  47. package/dist/features/btw-side/server-session-registry.d.ts +8 -0
  48. package/dist/features/btw-side/tui-adoption-cache.d.ts +13 -0
  49. package/dist/features/btw-side/tui-adoption-guard.d.ts +5 -0
  50. package/dist/features/btw-side/tui-controller-types.d.ts +68 -0
  51. package/dist/features/btw-side/tui-controller.d.ts +19 -0
  52. package/dist/features/btw-side/tui-escape-return.d.ts +12 -0
  53. package/dist/features/btw-side/tui-keymap.d.ts +17 -0
  54. package/dist/features/btw-side/tui-parent-validator.d.ts +6 -0
  55. package/dist/features/btw-side/tui-picker-options.d.ts +20 -0
  56. package/dist/features/btw-side/tui-picker.d.ts +9 -0
  57. package/dist/features/btw-side/tui-prompt-queue.d.ts +8 -0
  58. package/dist/features/btw-side/tui-session-bridge.d.ts +11 -0
  59. package/dist/features/btw-side/tui-session-catalog.d.ts +35 -0
  60. package/dist/features/btw-side/tui-side-removal.d.ts +11 -0
  61. package/dist/features/btw-side/tui-side-start.d.ts +9 -0
  62. package/dist/features/btw-side/tui-wiring.d.ts +8 -0
  63. package/dist/features/builtin-commands/templates/ulw-execute.d.ts +1 -0
  64. package/dist/features/builtin-commands/types.d.ts +1 -1
  65. package/dist/features/opengateway-provider/index.d.ts +13 -0
  66. package/dist/hooks/atlas/atlas-hook.d.ts +1 -0
  67. package/dist/hooks/atlas/atlas-lifecycle-store.d.ts +50 -0
  68. package/dist/hooks/atlas/event-handler.d.ts +1 -0
  69. package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
  70. package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
  71. package/dist/hooks/atlas/tool-execute-before.d.ts +3 -0
  72. package/dist/hooks/atlas/types.d.ts +1 -0
  73. package/dist/hooks/index.d.ts +1 -1
  74. package/dist/hooks/prometheus-md-only/agent-resolution.d.ts +2 -2
  75. package/dist/hooks/runtime-fallback/chat-message-handler.d.ts +2 -0
  76. package/dist/hooks/runtime-fallback/retry-model-payload.d.ts +1 -0
  77. package/dist/hooks/runtime-fallback/runtime-model-settings.d.ts +6 -0
  78. package/dist/hooks/runtime-fallback/session-status-handler.d.ts +1 -1
  79. package/dist/hooks/runtime-fallback/types.d.ts +3 -1
  80. package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +1 -1
  81. package/dist/hooks/{start-work → ulw-execute}/context-info-builder.d.ts +1 -1
  82. package/dist/hooks/{start-work → ulw-execute}/index.d.ts +1 -1
  83. package/dist/hooks/ulw-execute/ulw-execute-hook.d.ts +23 -0
  84. package/dist/index.js +11724 -6355
  85. package/dist/oh-my-opencode.schema.json +15 -2
  86. package/dist/plugin/chat-message/types.d.ts +3 -3
  87. package/dist/plugin/chat-message/ulw-execute-message.d.ts +5 -0
  88. package/dist/plugin/event-session-lifecycle.d.ts +1 -0
  89. package/dist/plugin/hooks/create-core-hooks.d.ts +2 -1
  90. package/dist/plugin/hooks/create-session-hooks.d.ts +2 -2
  91. package/dist/plugin/hooks/create-transform-hooks.d.ts +2 -0
  92. package/dist/plugin/messages-transform.d.ts +1 -0
  93. package/dist/shared/index.d.ts +1 -0
  94. package/dist/shared/normalize-sdk-response.d.ts +1 -0
  95. package/dist/shared/runtime-fallback-retry-marker.d.ts +16 -0
  96. package/dist/shared/shell-env.d.ts +1 -1
  97. package/dist/skills/ast-grep/AGENTS.md +51 -0
  98. package/dist/skills/coding-agent-sessions/AGENTS.md +62 -0
  99. package/dist/skills/coding-agent-sessions/SKILL.md +3 -2
  100. package/dist/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  101. package/dist/skills/coding-agent-sessions/references/senpi.md +4 -4
  102. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  103. package/dist/skills/frontend/SKILL.md +11 -7
  104. package/dist/skills/frontend/references/design/_INDEX.md +1 -0
  105. package/dist/skills/frontend/references/design/print-paged-media.md +76 -0
  106. package/dist/skills/frontend/references/design/stylegallery.md +80 -0
  107. package/dist/skills/frontend/references/designpowers/README.md +1 -1
  108. package/dist/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  109. package/dist/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  110. package/dist/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  111. package/dist/skills/frontend/references/designpowers/orchestration.md +1 -1
  112. package/dist/skills/frontend/references/designpowers/routing.md +5 -5
  113. package/dist/skills/review-work/SKILL.md +3 -3
  114. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  115. package/dist/skills/ultimate-browsing/SKILL.md +2 -0
  116. package/dist/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  117. package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
  118. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  119. package/dist/skills/{start-work → ulw-execute}/SKILL.md +9 -8
  120. package/dist/skills/ulw-plan/SKILL.md +6 -6
  121. package/dist/skills/ulw-plan/references/full-workflow.md +31 -7
  122. package/dist/skills/ulw-plan/references/intent-clear.md +2 -1
  123. package/dist/skills/ulw-plan/references/intent-unclear.md +5 -5
  124. package/dist/skills/ulw-research/SKILL.md +1 -1
  125. package/dist/skills/visual-qa/AGENTS.md +58 -0
  126. package/dist/skills/visual-qa/SKILL.md +3 -2
  127. package/dist/tools/delegate-task/builtin-categories.d.ts +1 -0
  128. package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -0
  129. package/dist/tools/delegate-task/tool-description.d.ts +3 -1
  130. package/dist/tui.js +8824 -8906
  131. package/package.json +38 -35
  132. package/packages/git-bash-mcp/dist/cli.js +5 -1
  133. package/packages/git-bash-mcp/package.json +1 -1
  134. package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +44 -0
  135. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +0 -28
  136. package/packages/lsp-core/src/lsp/client-wrapper-outside-cwd.test.ts +78 -0
  137. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +66 -13
  138. package/packages/lsp-core/src/lsp/client-wrapper.ts +70 -18
  139. package/packages/lsp-core/src/lsp/outside-context-workspace.ts +33 -0
  140. package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +20 -1
  141. package/packages/lsp-core/src/lsp/workspace-markers.ts +1 -0
  142. package/packages/lsp-core/src/tools/diagnostics.ts +3 -3
  143. package/packages/lsp-core/src/tools/navigation.ts +4 -2
  144. package/packages/lsp-core/src/tools/rename.ts +4 -2
  145. package/packages/lsp-core/src/tools/symbols.ts +1 -1
  146. package/packages/lsp-daemon/dist/cli.js +246 -185
  147. package/packages/lsp-daemon/dist/client.js +222 -164
  148. package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
  149. package/packages/lsp-daemon/dist/index.js +236 -177
  150. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  151. package/packages/lsp-tools-mcp/dist/cli.js +198 -136
  152. package/packages/lsp-tools-mcp/dist/lsp/manager.js +62 -92
  153. package/packages/lsp-tools-mcp/dist/mcp.js +200 -138
  154. package/packages/lsp-tools-mcp/dist/request-context.js +11 -12
  155. package/packages/lsp-tools-mcp/dist/tools.js +204 -146
  156. package/packages/omo-codex/THIRD-PARTY-NOTICES.md +4 -4
  157. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -4
  158. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  159. package/packages/omo-codex/plugin/README.md +1 -1
  160. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +32 -31
  161. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  162. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  163. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  164. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +224 -81
  165. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +224 -82
  166. package/packages/omo-codex/plugin/components/codegraph/package.json +4 -4
  167. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +1 -0
  168. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +1 -0
  169. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  170. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  171. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  172. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  173. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  174. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  175. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  176. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  177. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  178. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  179. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  180. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  181. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  182. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +1 -5
  183. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +1 -5
  184. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  185. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  186. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +1 -5
  187. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +4 -21
  188. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  189. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  190. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  191. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +217 -171
  192. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  193. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  194. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  195. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  196. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  197. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  198. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  199. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  200. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  201. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  202. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  203. package/packages/omo-codex/plugin/components/rules/dist/cli.js +57 -42
  204. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  205. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  206. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  207. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  208. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +6 -2
  209. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  210. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  211. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  212. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
  213. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  214. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  215. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  216. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  217. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  218. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  219. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  220. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  221. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
  222. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +1 -2
  223. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  224. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  225. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  226. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  227. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +1 -2
  228. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  229. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  230. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  231. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
  232. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  233. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  234. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +3 -9
  235. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  236. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  237. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2433 -422
  238. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2437 -426
  239. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  240. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  241. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  242. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  243. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  244. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  245. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +5 -0
  246. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  247. package/packages/omo-codex/plugin/components/ultrawork/directive.md +13 -1
  248. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  249. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -5
  250. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +13 -1
  251. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -6
  252. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +31 -7
  253. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  254. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +5 -5
  255. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  256. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  257. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  258. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +5 -4
  259. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  260. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +5 -5
  261. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  262. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +6 -6
  263. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +12 -12
  264. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +28 -0
  265. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +12 -12
  266. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  267. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  268. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +3 -3
  269. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  270. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  271. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  272. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +1 -4
  273. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +8 -22
  274. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +16 -0
  275. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
  276. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  277. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +13 -1
  278. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2 -4
  279. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +1 -1
  280. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
  281. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
  282. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  283. package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
  284. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +3 -2
  285. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
  286. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -0
  287. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +3 -1
  288. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  289. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
  290. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +3 -3
  291. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  292. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
  293. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
  294. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +18 -0
  295. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  296. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
  297. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  298. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +8 -5
  299. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  300. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +4 -5
  301. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  302. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  303. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  304. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  305. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  306. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  307. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  308. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  309. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  310. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  311. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  312. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  313. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  314. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  315. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  316. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  317. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  318. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  319. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  320. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +17 -0
  321. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  322. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  323. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  324. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  325. package/packages/omo-codex/plugin/package-lock.json +681 -395
  326. package/packages/omo-codex/plugin/package.json +2 -2
  327. package/packages/omo-codex/plugin/scripts/AGENTS.md +40 -0
  328. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -1
  329. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +11 -11
  330. package/packages/omo-codex/plugin/shared/package.json +3 -4
  331. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  332. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  333. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
  334. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  335. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
  336. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  337. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +11 -7
  338. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  339. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  340. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  341. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  342. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  343. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  344. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  345. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  346. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  347. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +4 -4
  348. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  349. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -0
  350. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  351. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  352. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  353. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +13 -1
  354. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +12 -11
  355. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  356. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -2
  357. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
  358. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -0
  359. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -6
  360. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +31 -7
  361. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  362. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +5 -5
  363. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +1 -1
  364. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  365. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
  366. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  367. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  368. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +8 -28
  369. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
  370. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  371. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  372. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  373. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  374. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -1
  375. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
  376. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +4 -4
  377. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  378. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  379. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
  380. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +12 -12
  381. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -119
  382. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  383. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  384. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  385. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  386. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  387. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +0 -3
  388. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  389. package/packages/omo-codex/scripts/AGENTS.md +36 -0
  390. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2601 -528
  391. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
  392. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  393. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  394. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
  395. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  396. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
  397. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  398. package/packages/shared-skills/skills/frontend/SKILL.md +11 -7
  399. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  400. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  401. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  402. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  403. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  404. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  405. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  406. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  407. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  408. package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
  409. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  410. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -0
  411. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  412. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  413. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  414. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +9 -8
  415. package/packages/shared-skills/skills/ulw-plan/SKILL.md +6 -6
  416. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +31 -7
  417. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  418. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +5 -5
  419. package/packages/shared-skills/skills/ulw-research/SKILL.md +1 -1
  420. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  421. package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
  422. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  423. package/script/qa/xterm-live-terminal.mjs +18 -2
  424. package/dist/config/schema/start-work.d.ts +0 -5
  425. package/dist/features/builtin-commands/templates/start-work.d.ts +0 -1
  426. package/dist/hooks/start-work/start-work-hook.d.ts +0 -23
  427. package/dist/plugin/chat-message/start-work-message.d.ts +0 -5
  428. package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
  429. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  430. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  431. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  432. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  433. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  434. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  435. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
  436. /package/dist/hooks/{start-work → ulw-execute}/context-info-formatters.d.ts +0 -0
  437. /package/dist/hooks/{start-work → ulw-execute}/explicit-plan-context.d.ts +0 -0
  438. /package/dist/hooks/{start-work → ulw-execute}/notepad-scaffold.d.ts +0 -0
  439. /package/dist/hooks/{start-work → ulw-execute}/parse-user-request.d.ts +0 -0
  440. /package/dist/hooks/{start-work → ulw-execute}/plan-discovery-context.d.ts +0 -0
  441. /package/dist/hooks/{start-work → ulw-execute}/plan-selection.d.ts +0 -0
  442. /package/dist/hooks/{start-work → ulw-execute}/session-plan-affinity.d.ts +0 -0
  443. /package/dist/hooks/{start-work → ulw-execute}/work-initializer.d.ts +0 -0
  444. /package/dist/hooks/{start-work → ulw-execute}/worktree-block.d.ts +0 -0
  445. /package/dist/hooks/{start-work → ulw-execute}/worktree-detector.d.ts +0 -0
  446. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  447. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  448. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/LICENSE +0 -0
  449. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  450. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +0 -0
  451. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  452. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  453. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  454. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  455. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  456. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  457. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  458. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  459. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  460. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -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 realpathSync6 } 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, statSync as statSync4 } from "node:fs";
46
- import { 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,32 +62,33 @@ 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
 
78
80
  class LspRequestContextParseError extends Error {
79
- code;
80
- name = "LspRequestContextParseError";
81
81
  constructor(code, message) {
82
82
  super(message);
83
83
  this.code = code;
84
+ this.name = "LspRequestContextParseError";
84
85
  }
85
86
  }
86
87
 
87
88
  class LspRequestContextUnavailableError extends Error {
88
- name = "LspRequestContextUnavailableError";
89
89
  constructor() {
90
90
  super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
91
+ this.name = "LspRequestContextUnavailableError";
91
92
  }
92
93
  }
93
94
  var storage = new AsyncLocalStorage;
@@ -214,7 +215,6 @@ function isPlainRecord(value) {
214
215
  }
215
216
 
216
217
  class DaemonRequestError extends Error {
217
- requestWritten;
218
218
  constructor(message, requestWritten) {
219
219
  super(message);
220
220
  this.name = "DaemonRequestError";
@@ -237,7 +237,6 @@ class DaemonRequestCancelledError extends DaemonRequestError {
237
237
  }
238
238
 
239
239
  class DaemonRequestTimedOutError extends DaemonRequestError {
240
- timeoutMs;
241
240
  constructor(requestWritten, timeoutMs) {
242
241
  super("daemon request timed out", requestWritten);
243
242
  this.name = "DaemonRequestTimedOutError";
@@ -314,20 +313,18 @@ var OMO_LSP_DAEMON_VERSION = "OMO_LSP_DAEMON_VERSION";
314
313
  var DAEMON_VERSION_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
315
314
 
316
315
  class InvalidRuntimeOverrideError extends Error {
317
- code = "invalid_runtime_override";
318
- reason;
319
316
  constructor(reason, message) {
320
317
  super(message);
318
+ this.code = "invalid_runtime_override";
321
319
  this.name = "InvalidRuntimeOverrideError";
322
320
  this.reason = reason;
323
321
  }
324
322
  }
325
323
 
326
324
  class InvalidDaemonVersionError extends Error {
327
- code = "invalid_daemon_version";
328
- version;
329
325
  constructor(version) {
330
326
  super("LSP daemon version must match [A-Za-z0-9][A-Za-z0-9._+-]{0,127}");
327
+ this.code = "invalid_daemon_version";
331
328
  this.name = "InvalidDaemonVersionError";
332
329
  this.version = version;
333
330
  }
@@ -371,10 +368,9 @@ var requireFromHere = createRequire(import.meta.url);
371
368
  var MAX_SOCKET_PATH_LENGTH = 100;
372
369
 
373
370
  class InvalidDaemonDirectoryError extends Error {
374
- code = "invalid_daemon_directory";
375
- directory;
376
371
  constructor(directory) {
377
372
  super(`${OMO_LSP_DAEMON_DIR} must be an absolute path`);
373
+ this.code = "invalid_daemon_directory";
378
374
  this.name = "InvalidDaemonDirectoryError";
379
375
  this.directory = directory;
380
376
  }
@@ -565,7 +561,8 @@ function spawnDaemonProcess(paths) {
565
561
  try {
566
562
  const child = spawn(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
567
563
  detached: true,
568
- stdio: ["ignore", logFd, logFd]
564
+ stdio: ["ignore", logFd, logFd],
565
+ windowsHide: true
569
566
  });
570
567
  child.once("spawn", () => closeSync2(logFd));
571
568
  child.once("error", (error) => {
@@ -686,22 +683,15 @@ function effectiveExtension(filePath) {
686
683
  }
687
684
 
688
685
  class LspConnectionClosedError extends Error {
689
- serverId;
690
- root;
691
- name = "LspConnectionClosedError";
692
686
  constructor(serverId, root, message) {
693
687
  super(message ?? `LSP connection closed for ${serverId} at ${root}`);
694
688
  this.serverId = serverId;
695
689
  this.root = root;
690
+ this.name = "LspConnectionClosedError";
696
691
  }
697
692
  }
698
693
 
699
694
  class LspProcessExitedError extends Error {
700
- serverId;
701
- root;
702
- exitCode;
703
- stderrTail;
704
- name = "LspProcessExitedError";
705
695
  constructor(serverId, root, exitCode, stderrTail) {
706
696
  const stderrSuffix = stderrTail ? `
707
697
  stderr tail: ${stderrTail}` : "";
@@ -710,46 +700,49 @@ stderr tail: ${stderrTail}` : "";
710
700
  this.root = root;
711
701
  this.exitCode = exitCode;
712
702
  this.stderrTail = stderrTail;
703
+ this.name = "LspProcessExitedError";
713
704
  }
714
705
  }
715
706
 
716
707
  class LspRequestTimeoutError extends Error {
717
- method;
718
- stderrTail;
719
- name = "LspRequestTimeoutError";
720
708
  constructor(method, stderrTail) {
721
709
  const stderrSuffix = stderrTail ? `
722
710
  recent stderr: ${stderrTail}` : "";
723
711
  super(`LSP request timeout (method: ${method})${stderrSuffix}`);
724
712
  this.method = method;
725
713
  this.stderrTail = stderrTail;
714
+ this.name = "LspRequestTimeoutError";
726
715
  }
727
716
  }
728
717
 
729
718
  class LspInvalidPathError extends Error {
730
- name = "LspInvalidPathError";
719
+ constructor() {
720
+ super(...arguments);
721
+ this.name = "LspInvalidPathError";
722
+ }
731
723
  }
732
724
 
733
725
  class LspServerLookupError extends Error {
734
- lookup;
735
- name = "LspServerLookupError";
736
726
  constructor(message, lookup) {
737
727
  super(message);
738
728
  this.lookup = lookup;
729
+ this.name = "LspServerLookupError";
739
730
  }
740
731
  }
741
732
 
742
733
  class LspServerInitializingError extends Error {
743
- originalError;
744
- name = "LspServerInitializingError";
745
734
  constructor(originalError) {
746
735
  super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
747
736
  this.originalError = originalError;
737
+ this.name = "LspServerInitializingError";
748
738
  }
749
739
  }
750
740
 
751
741
  class LspProcessSpawnError extends Error {
752
- name = "LspProcessSpawnError";
742
+ constructor() {
743
+ super(...arguments);
744
+ this.name = "LspProcessSpawnError";
745
+ }
753
746
  }
754
747
  function isLspDeadConnectionError(err) {
755
748
  return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
@@ -781,20 +774,31 @@ var METHOD_NOT_FOUND = -32601;
781
774
  var INTERNAL_ERROR = -32603;
782
775
 
783
776
  class JsonRpcConnection {
784
- reader;
785
- writer;
786
- pendingRequests = new Map;
787
- notificationHandlers = new Map;
788
- requestHandlers = new Map;
789
- closeHandlers = [];
790
- errorHandlers = [];
791
- inputBuffer = Buffer.alloc(0);
792
- nextRequestId = 1;
793
- listening = false;
794
- disposed = false;
795
777
  constructor(reader, writer) {
796
778
  this.reader = reader;
797
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
+ };
798
802
  }
799
803
  listen() {
800
804
  if (this.listening)
@@ -915,19 +919,6 @@ class JsonRpcConnection {
915
919
  this.notificationHandlers.clear();
916
920
  this.requestHandlers.clear();
917
921
  }
918
- handleData = (chunk) => {
919
- const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
920
- this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
921
- this.drainInputBuffer();
922
- };
923
- handleClose = () => {
924
- for (const handler of this.closeHandlers) {
925
- handler();
926
- }
927
- };
928
- handleStreamError = (error) => {
929
- this.emitError(error);
930
- };
931
922
  drainInputBuffer() {
932
923
  while (true) {
933
924
  const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR2);
@@ -1267,31 +1258,25 @@ function isPosition(value) {
1267
1258
  }
1268
1259
 
1269
1260
  class LspClientNotStartedError extends Error {
1270
- serverId;
1271
- root;
1272
- name = "LspClientNotStartedError";
1273
1261
  constructor(serverId, root) {
1274
1262
  super("LSP client not started");
1275
1263
  this.serverId = serverId;
1276
1264
  this.root = root;
1265
+ this.name = "LspClientNotStartedError";
1277
1266
  }
1278
1267
  }
1279
1268
 
1280
1269
  class LspClientTransport {
1281
- root;
1282
- server;
1283
- proc = null;
1284
- connection = null;
1285
- stderrBuffer = [];
1286
- processExited = false;
1287
- diagnosticsStore = new Map;
1288
- requestTimeoutMs;
1289
- initializeTimeoutMs;
1290
- workspaceApplyEditHandler = null;
1291
- diagnosticPullSupported = false;
1292
1270
  constructor(root, server2, timeouts = {}) {
1293
1271
  this.root = root;
1294
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;
1295
1280
  this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
1296
1281
  this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
1297
1282
  }
@@ -1777,16 +1762,12 @@ function movedPath(candidate, oldPath, newPath) {
1777
1762
  }
1778
1763
 
1779
1764
  class WorkspaceDocumentState {
1780
- sendNotification;
1781
- clearDiagnostics;
1782
- openDocuments = new Map;
1783
- openByUri = new Map;
1784
- openPromises = new Map;
1785
- now;
1786
- versionlessPublishQuiescenceMs;
1787
1765
  constructor(sendNotification, clearDiagnostics, options = {}) {
1788
1766
  this.sendNotification = sendNotification;
1789
1767
  this.clearDiagnostics = clearDiagnostics;
1768
+ this.openDocuments = new Map;
1769
+ this.openByUri = new Map;
1770
+ this.openPromises = new Map;
1790
1771
  this.now = options.now ?? (() => Date.now());
1791
1772
  this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
1792
1773
  }
@@ -2040,13 +2021,11 @@ function workspaceApplyEditConcurrentFailureReason(phase) {
2040
2021
  }
2041
2022
 
2042
2023
  class WorkspaceEditPathError extends Error {
2043
- path;
2044
- detail;
2045
- name = "WorkspaceEditPathError";
2046
2024
  constructor(path2, detail) {
2047
2025
  super(`${detail}: ${path2}`);
2048
2026
  this.path = path2;
2049
2027
  this.detail = detail;
2028
+ this.name = "WorkspaceEditPathError";
2050
2029
  }
2051
2030
  }
2052
2031
  function isPathInsideWorkspace(filePath, workspaceRoot) {
@@ -2332,13 +2311,11 @@ function canonicalFingerprint(operations) {
2332
2311
  }
2333
2312
 
2334
2313
  class WorkspaceEditValidationError extends Error {
2335
- changeIndex;
2336
- detail;
2337
- name = "WorkspaceEditValidationError";
2338
2314
  constructor(changeIndex, detail) {
2339
2315
  super(`change ${changeIndex}: ${detail}`);
2340
2316
  this.changeIndex = changeIndex;
2341
2317
  this.detail = detail;
2318
+ this.name = "WorkspaceEditValidationError";
2342
2319
  }
2343
2320
  }
2344
2321
  function isRecord3(value) {
@@ -2820,10 +2797,9 @@ function simulateDelete(operation, virtual) {
2820
2797
  }
2821
2798
 
2822
2799
  class WorkspaceSnapshotBuilder {
2823
- workspaceRoot;
2824
- snapshots = new Map;
2825
2800
  constructor(workspaceRoot) {
2826
2801
  this.workspaceRoot = workspaceRoot;
2802
+ this.snapshots = new Map;
2827
2803
  }
2828
2804
  build(operations) {
2829
2805
  this.add(this.workspaceRoot, false);
@@ -2866,8 +2842,10 @@ function snapshotOperations(operations, workspaceRoot) {
2866
2842
  }
2867
2843
 
2868
2844
  class PlanPathIndex {
2869
- firstChangeByPath = new Map;
2870
- reportedPathByCanonical = new Map;
2845
+ constructor() {
2846
+ this.firstChangeByPath = new Map;
2847
+ this.reportedPathByCanonical = new Map;
2848
+ }
2871
2849
  build(operations) {
2872
2850
  for (const operation of operations) {
2873
2851
  switch (operation.kind) {
@@ -2954,14 +2932,11 @@ function isRecord4(value) {
2954
2932
  }
2955
2933
 
2956
2934
  class WorkspaceMutationController {
2957
- workspaceRoot;
2958
- documents;
2959
- activeLease = null;
2960
- nextLeaseId = 1;
2961
- io;
2962
2935
  constructor(workspaceRoot, documents) {
2963
2936
  this.workspaceRoot = workspaceRoot;
2964
2937
  this.documents = documents;
2938
+ this.activeLease = null;
2939
+ this.nextLeaseId = 1;
2965
2940
  }
2966
2941
  setIo(io) {
2967
2942
  this.io = io;
@@ -3072,12 +3047,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
3072
3047
  var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
3073
3048
 
3074
3049
  class LspClient extends LspClientConnection {
3075
- diagnosticPullErrors = [];
3076
- documents;
3077
- workspaceMutations;
3078
- diagnosticsFreshnessTimeoutMs;
3079
3050
  constructor(root, server2, options = {}) {
3080
3051
  super(root, server2, options);
3052
+ this.diagnosticPullErrors = [];
3081
3053
  this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
3082
3054
  this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
3083
3055
  versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
@@ -3373,16 +3345,11 @@ function awaitWithSignal2(promise, signal) {
3373
3345
  }
3374
3346
 
3375
3347
  class LspManager {
3376
- clients = new Map;
3377
- reaperHandle = null;
3378
- signalDisposer = null;
3379
- disposed = false;
3380
- idleTimeoutMs;
3381
- initTimeoutMs;
3382
- reaperIntervalMs;
3383
- clientFactory;
3384
- now;
3385
3348
  constructor(options = {}) {
3349
+ this.clients = new Map;
3350
+ this.reaperHandle = null;
3351
+ this.signalDisposer = null;
3352
+ this.disposed = false;
3386
3353
  this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
3387
3354
  this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
3388
3355
  this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
@@ -3606,12 +3573,41 @@ function getLspManager() {
3606
3573
  }
3607
3574
  return _defaultInstance;
3608
3575
  }
3576
+ var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
3577
+ function findWorkspaceRootOutsideContext(directory) {
3578
+ const marked = nearestMarkedAncestor(directory);
3579
+ if (marked !== undefined)
3580
+ return marked;
3581
+ return realpathSync4(nearestExistingAncestor(directory));
3582
+ }
3583
+ function nearestMarkedAncestor(directory) {
3584
+ let current = directory;
3585
+ for (;; ) {
3586
+ if (existsSync7(current) && WORKSPACE_MARKERS.some((marker) => existsSync7(join3(current, marker)))) {
3587
+ return realpathSync4(current);
3588
+ }
3589
+ const parent = dirname7(current);
3590
+ if (parent === current)
3591
+ return;
3592
+ current = parent;
3593
+ }
3594
+ }
3595
+ function nearestExistingAncestor(directory) {
3596
+ let current = directory;
3597
+ while (!existsSync7(current)) {
3598
+ const parent = dirname7(current);
3599
+ if (parent === current)
3600
+ return current;
3601
+ current = parent;
3602
+ }
3603
+ return current;
3604
+ }
3609
3605
  function getInstallDecisionsPath() {
3610
3606
  return lspRequestContext().installDecisionsPath;
3611
3607
  }
3612
3608
  function loadInstallDecisions() {
3613
3609
  const path2 = getInstallDecisionsPath();
3614
- if (!existsSync7(path2))
3610
+ if (!existsSync8(path2))
3615
3611
  return {};
3616
3612
  try {
3617
3613
  const parsed = JSON.parse(readFileSync4(path2, "utf8"));
@@ -3633,7 +3629,7 @@ function isInstallDecision(value) {
3633
3629
  }
3634
3630
  function writeInstallDecisions(decisions) {
3635
3631
  const path2 = getInstallDecisionsPath();
3636
- mkdirSync3(dirname7(path2), { recursive: true });
3632
+ mkdirSync3(dirname8(path2), { recursive: true });
3637
3633
  const tmpPath = `${path2}.tmp`;
3638
3634
  writeFileSync2(tmpPath, `${JSON.stringify(decisions, null, 2)}
3639
3635
  `, "utf8");
@@ -3802,7 +3798,7 @@ function getUserConfigPath() {
3802
3798
  return lspRequestContext().userConfigPath;
3803
3799
  }
3804
3800
  function loadJsonFile(path2) {
3805
- if (!existsSync8(path2))
3801
+ if (!existsSync9(path2))
3806
3802
  return null;
3807
3803
  try {
3808
3804
  const parsed = JSON.parse(readFileSync5(path2, "utf-8"));
@@ -3995,7 +3991,7 @@ function isServerInstalled(command, _workingDirectory) {
3995
3991
  if (!cmd)
3996
3992
  return false;
3997
3993
  if (cmd.includes("/") || cmd.includes("\\")) {
3998
- if (existsSync9(cmd))
3994
+ if (existsSync10(cmd))
3999
3995
  return true;
4000
3996
  }
4001
3997
  const isWindows = process.platform === "win32";
@@ -4016,7 +4012,7 @@ function isServerInstalled(command, _workingDirectory) {
4016
4012
  const paths = pathEnv.split(delimiter3);
4017
4013
  for (const p of paths) {
4018
4014
  for (const suffix of exts) {
4019
- if (existsSync9(join3(p, cmd + suffix))) {
4015
+ if (existsSync10(join4(p, cmd + suffix))) {
4020
4016
  return true;
4021
4017
  }
4022
4018
  }
@@ -4108,7 +4104,6 @@ function getAllServers() {
4108
4104
  }
4109
4105
  return result;
4110
4106
  }
4111
- var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
4112
4107
  function isDirectoryPath(filePath) {
4113
4108
  try {
4114
4109
  return statSync4(filePath).isDirectory();
@@ -4117,32 +4112,85 @@ function isDirectoryPath(filePath) {
4117
4112
  }
4118
4113
  }
4119
4114
  function findWorkspaceRoot(filePath) {
4120
- const abs = resolvePathInsideContext(filePath);
4115
+ const cwd = contextCwd();
4116
+ const abs = resolveReadablePathInsideContext(filePath);
4121
4117
  let dir = abs;
4122
4118
  if (!isDirectoryPath(dir)) {
4123
- dir = dirname8(dir);
4124
- }
4125
- let prevDir = "";
4126
- while (dir !== prevDir) {
4127
- for (const marker of WORKSPACE_MARKERS) {
4128
- if (existsSync10(join4(dir, marker))) {
4129
- return dir;
4119
+ dir = dirname9(dir);
4120
+ }
4121
+ if (!isPathInside(cwd, abs))
4122
+ return findWorkspaceRootOutsideContext(dir);
4123
+ const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
4124
+ while (isPathInside(cwd, dir)) {
4125
+ const canonicalDir = existingDirectoryInsideContext(dir, cwd);
4126
+ if (canonicalDir !== undefined) {
4127
+ for (const marker of WORKSPACE_MARKERS) {
4128
+ if (existsSync11(join5(dir, marker))) {
4129
+ return canonicalDir;
4130
+ }
4130
4131
  }
4131
4132
  }
4132
- prevDir = dir;
4133
- dir = dirname8(dir);
4133
+ if (dir === cwd)
4134
+ break;
4135
+ dir = dirname9(dir);
4134
4136
  }
4135
- return dirname8(abs);
4137
+ return fallbackRoot;
4136
4138
  }
4137
- function resolvePathInsideContext(filePath) {
4139
+ function resolveReadablePathInsideContext(filePath) {
4138
4140
  const cwd = contextCwd();
4139
4141
  const abs = resolve7(cwd, filePath);
4142
+ if (isPathInside(cwd, abs))
4143
+ return abs;
4144
+ const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
4145
+ if (rebased !== undefined)
4146
+ return rebased;
4147
+ return canonicalizeExistingOrNearestAncestor(abs);
4148
+ }
4149
+ function resolvePathInsideContext(filePath) {
4150
+ const cwd = contextCwd();
4151
+ const abs = resolveReadablePathInsideContext(filePath);
4140
4152
  const canonical = canonicalizeExistingOrNearestAncestor(abs);
4141
4153
  if (!isPathInside(cwd, canonical)) {
4142
4154
  throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
4143
4155
  }
4144
4156
  return canonical;
4145
4157
  }
4158
+ function rebaseThroughCanonicalAncestor(path2, cwd) {
4159
+ let current = path2;
4160
+ const suffix = [];
4161
+ while (true) {
4162
+ if (existsSync11(current)) {
4163
+ const canonical = realpathSync5(current);
4164
+ if (isPathInside(cwd, canonical))
4165
+ return suffix.length === 0 ? canonical : join5(canonical, ...suffix);
4166
+ }
4167
+ const parent = dirname9(current);
4168
+ if (parent === current)
4169
+ return;
4170
+ suffix.unshift(basename3(current));
4171
+ current = parent;
4172
+ }
4173
+ }
4174
+ function existingDirectoryInsideContext(directory, cwd) {
4175
+ if (!existsSync11(directory))
4176
+ return;
4177
+ const canonical = realpathSync5(directory);
4178
+ if (!statSync4(canonical).isDirectory())
4179
+ return;
4180
+ return isPathInside(cwd, canonical) ? canonical : undefined;
4181
+ }
4182
+ function nearestExistingDirectoryInsideContext(directory, cwd) {
4183
+ let current = directory;
4184
+ while (isPathInside(cwd, current)) {
4185
+ const canonical = existingDirectoryInsideContext(current, cwd);
4186
+ if (canonical !== undefined)
4187
+ return canonical;
4188
+ if (current === cwd)
4189
+ return;
4190
+ current = dirname9(current);
4191
+ }
4192
+ return;
4193
+ }
4146
4194
  function formatServerLookupError(result) {
4147
4195
  if (result.status === "not_installed") {
4148
4196
  return formatNotInstalled(result);
@@ -4213,7 +4261,7 @@ function formatNotInstalled(result) {
4213
4261
  ].join(`
4214
4262
  `);
4215
4263
  }
4216
- var READ_ONLY_RETRY_TOOLS = new Set([
4264
+ var READ_ONLY_TOOLS = new Set([
4217
4265
  "diagnostics",
4218
4266
  "definition",
4219
4267
  "references",
@@ -4222,7 +4270,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
4222
4270
  "prepareRename"
4223
4271
  ]);
4224
4272
  async function withLspClient(filePath, fn, toolName, options = {}) {
4225
- const absPath = resolvePathInsideContext(filePath);
4273
+ const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
4226
4274
  if (isDirectoryPath(absPath)) {
4227
4275
  throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
4228
4276
  }
@@ -4237,9 +4285,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
4237
4285
  const acquireAndCall = async (allowRetry) => {
4238
4286
  const client = await manager.getClient(root, server2, options.signal);
4239
4287
  try {
4240
- return await fn(client, root);
4288
+ return await fn(client, root, absPath);
4241
4289
  } catch (err) {
4242
- if (allowRetry && READ_ONLY_RETRY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
4290
+ if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
4243
4291
  manager.invalidateClient(root, server2.id, client);
4244
4292
  return acquireAndCall(false);
4245
4293
  }
@@ -4379,7 +4427,7 @@ function collectFilesWithExtension(dir, extension, maxFiles) {
4379
4427
  for (const entry of entries) {
4380
4428
  if (files.length >= maxFiles)
4381
4429
  return;
4382
- const fullPath = join5(currentDir, entry);
4430
+ const fullPath = join6(currentDir, entry);
4383
4431
  let stat;
4384
4432
  try {
4385
4433
  stat = lstatSync5(fullPath);
@@ -4405,7 +4453,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
4405
4453
  throw new LspInvalidPathError(`Extension must start with a dot (e.g., ".ts", not "${extension}"). Use ".${extension}" instead.`);
4406
4454
  }
4407
4455
  const absDir = resolve8(options.workspaceRoot ?? contextCwd(), directory);
4408
- if (!existsSync11(absDir)) {
4456
+ if (!existsSync12(absDir)) {
4409
4457
  throw new LspInvalidPathError(`Directory does not exist: ${absDir}`);
4410
4458
  }
4411
4459
  const serverResult = options.server === undefined ? findServerForExtension(extension) : { status: "found", server: options.server };
@@ -4506,7 +4554,7 @@ function inferExtensionFromDirectory(directory) {
4506
4554
  for (const entry of entries) {
4507
4555
  if (scanned >= MAX_SCAN_ENTRIES)
4508
4556
  return;
4509
- const fullPath = join6(dir, entry);
4557
+ const fullPath = join7(dir, entry);
4510
4558
  let stat;
4511
4559
  try {
4512
4560
  stat = lstatSync6(fullPath);
@@ -4669,7 +4717,7 @@ async function executeLspDiagnostics(params, signal) {
4669
4717
  const filePath = requireString(params, "filePath");
4670
4718
  const severity = severityFilter(params);
4671
4719
  try {
4672
- const absPath = resolvePathInsideContext(filePath);
4720
+ const absPath = resolveReadablePathInsideContext(filePath);
4673
4721
  if (isDirectoryPath(absPath)) {
4674
4722
  const extension = inferExtensionFromDirectory(absPath);
4675
4723
  if (!extension) {
@@ -4698,7 +4746,7 @@ async function executeLspDiagnostics(params, signal) {
4698
4746
  };
4699
4747
  return text(output2.output, details2);
4700
4748
  }
4701
- const result = await withLspClient(filePath, async (client) => client.diagnostics(filePath, signal), "diagnostics", clientOptions(signal));
4749
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
4702
4750
  if (result.transientError) {
4703
4751
  const message = result.transientError.message;
4704
4752
  const details2 = {
@@ -4770,7 +4818,7 @@ async function executeLspGotoDefinition(params, signal) {
4770
4818
  const line = requireNumber(params, "line");
4771
4819
  const character = requireNumber(params, "character");
4772
4820
  try {
4773
- const result = await withLspClient(filePath, async (client) => client.definition(filePath, line, character, signal), "definition", clientOptions(signal));
4821
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
4774
4822
  const locations = !result ? [] : Array.isArray(result) ? result : [result];
4775
4823
  const details = { filePath, line, character, locations };
4776
4824
  if (locations.length === 0)
@@ -4795,7 +4843,7 @@ async function executeLspFindReferences(params, signal) {
4795
4843
  const character = requireNumber(params, "character");
4796
4844
  const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
4797
4845
  try {
4798
- const result = await withLspClient(filePath, async (client) => client.references(filePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
4846
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
4799
4847
  const references = Array.isArray(result) ? result : [];
4800
4848
  const total = references.length;
4801
4849
  const truncated = total > DEFAULT_MAX_REFERENCES;
@@ -4835,7 +4883,7 @@ async function executeLspPrepareRename(params, signal) {
4835
4883
  const line = requireNumber(params, "line");
4836
4884
  const character = requireNumber(params, "character");
4837
4885
  try {
4838
- const result = await withLspClient(filePath, async (client) => client.prepareRename(filePath, line, character, signal), "prepareRename", clientOptions(signal));
4886
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
4839
4887
  const details = { filePath, line, character, result };
4840
4888
  return text(formatPrepareRenameResult(result), details);
4841
4889
  } catch (error) {
@@ -4856,7 +4904,7 @@ async function executeLspRename(params, signal) {
4856
4904
  const character = requireNumber(params, "character");
4857
4905
  const newName = requireString(params, "newName");
4858
4906
  try {
4859
- const result = await withLspClient(filePath, async (client) => client.rename(filePath, line, character, newName, signal), "rename", clientOptions(signal));
4907
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
4860
4908
  const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
4861
4909
  return text(formatApplyResult(result.apply), details, !result.apply.success);
4862
4910
  } catch (error) {
@@ -4930,7 +4978,7 @@ async function executeLspSymbols(params, signal) {
4930
4978
  const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
4931
4979
  return formatSymbolsResult(filePath, scope, symbols2, limit, query);
4932
4980
  }
4933
- const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(filePath, signal), "documentSymbols", clientOptions(signal));
4981
+ const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
4934
4982
  return formatSymbolsResult(filePath, scope, symbols, limit);
4935
4983
  } catch (error) {
4936
4984
  const query = optionalString(params, "query");
@@ -5251,10 +5299,9 @@ var OMO_LSP_DAEMON_VERSION2 = "OMO_LSP_DAEMON_VERSION";
5251
5299
  var DAEMON_VERSION_PATTERN2 = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
5252
5300
 
5253
5301
  class InvalidRuntimeOverrideError2 extends Error {
5254
- code = "invalid_runtime_override";
5255
- reason;
5256
5302
  constructor(reason, message) {
5257
5303
  super(message);
5304
+ this.code = "invalid_runtime_override";
5258
5305
  this.name = "InvalidRuntimeOverrideError";
5259
5306
  this.reason = reason;
5260
5307
  }
@@ -5400,15 +5447,14 @@ function extensionKey(filePath) {
5400
5447
  }
5401
5448
  // ../../../../lsp-core/src/request-context.ts
5402
5449
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
5403
- import { existsSync as existsSync12, realpathSync as realpathSync4, statSync as statSync6 } from "node:fs";
5404
- import { basename as basename3, delimiter as delimiter4, dirname as dirname2, isAbsolute as isAbsolute6, join as join7, relative as relative5, resolve as resolve9 } from "node:path";
5450
+ import { existsSync as existsSync13, realpathSync as realpathSync6, statSync as statSync6 } from "node:fs";
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";
5405
5452
 
5406
5453
  class LspRequestContextParseError2 extends Error {
5407
- code;
5408
- name = "LspRequestContextParseError";
5409
5454
  constructor(code, message) {
5410
5455
  super(message);
5411
5456
  this.code = code;
5457
+ this.name = "LspRequestContextParseError";
5412
5458
  }
5413
5459
  }
5414
5460
  var storage2 = new AsyncLocalStorage2;
@@ -5444,25 +5490,25 @@ function parseLspRequestContext2(value) {
5444
5490
  }
5445
5491
  function canonicalCwd2(cwd) {
5446
5492
  const resolved = resolve9(cwd);
5447
- if (!existsSync12(resolved) || !statSync6(resolved).isDirectory()) {
5493
+ if (!existsSync13(resolved) || !statSync6(resolved).isDirectory()) {
5448
5494
  throw new LspRequestContextParseError2("invalid_cwd", `LSP request cwd must be an existing directory: ${cwd}`);
5449
5495
  }
5450
- return realpathSync4(resolved);
5496
+ return realpathSync6(resolved);
5451
5497
  }
5452
5498
  function canonicalizeExistingOrNearestAncestor2(path2) {
5453
5499
  let current = resolve9(path2);
5454
5500
  const suffix = [];
5455
5501
  while (true) {
5456
5502
  try {
5457
- const existing = realpathSync4(current);
5458
- return suffix.length === 0 ? existing : join7(existing, ...suffix);
5503
+ const existing = realpathSync6(current);
5504
+ return suffix.length === 0 ? existing : join8(existing, ...suffix);
5459
5505
  } catch (error) {
5460
5506
  if (!isMissingPathError2(error))
5461
5507
  throw error;
5462
5508
  const parent = dirname2(current);
5463
5509
  if (parent === current)
5464
5510
  throw error;
5465
- suffix.unshift(basename3(current));
5511
+ suffix.unshift(basename4(current));
5466
5512
  current = parent;
5467
5513
  }
5468
5514
  }
@@ -5523,9 +5569,9 @@ function errorCode2(error) {
5523
5569
  }
5524
5570
 
5525
5571
  // src/daemon-cli-path.ts
5526
- import { existsSync as existsSync14, readFileSync as readFileSync6 } from "node:fs";
5572
+ import { existsSync as existsSync15, readFileSync as readFileSync6 } from "node:fs";
5527
5573
  import { createRequire as createRequire2 } from "node:module";
5528
- import { dirname as dirname9, join as join9 } from "node:path";
5574
+ import { dirname as dirname10, join as join10 } from "node:path";
5529
5575
  import { fileURLToPath as fileURLToPath4 } from "node:url";
5530
5576
  var requireFromHere2 = createRequire2(import.meta.url);
5531
5577
  var PACKAGE_LSP_DAEMON_CLI = "@code-yeongyu/lsp-daemon/cli";
@@ -5547,7 +5593,7 @@ function resolveLspDaemonCli() {
5547
5593
  if (packageCli !== null)
5548
5594
  return resolveConfiguredLspDaemonCli(packageCli);
5549
5595
  const bundledCli = fileURLToPath4(new URL("../../lsp-daemon/dist/cli.js", import.meta.url));
5550
- if (existsSync14(bundledCli))
5596
+ if (existsSync15(bundledCli))
5551
5597
  return resolveConfiguredLspDaemonCli(bundledCli);
5552
5598
  return resolveConfiguredLspDaemonCli(bundledCli);
5553
5599
  }
@@ -5572,7 +5618,7 @@ function resolveConfiguredLspDaemonCli(cliPath) {
5572
5618
  }
5573
5619
  function readDaemonPackageVersion(cliPath) {
5574
5620
  try {
5575
- const parsed = JSON.parse(readFileSync6(join9(dirname9(cliPath), "package.json"), "utf8"));
5621
+ const parsed = JSON.parse(readFileSync6(join10(dirname10(cliPath), "package.json"), "utf8"));
5576
5622
  if (isRecord9(parsed) && typeof parsed["version"] === "string" && parsed["version"].length > 0) {
5577
5623
  return parsed["version"];
5578
5624
  }
@@ -5589,7 +5635,7 @@ function isRecord9(value) {
5589
5635
  // src/lsp-session-state.ts
5590
5636
  import { mkdirSync as mkdirSync4, readFileSync as readFileSync8, writeFileSync as writeFileSync3 } from "node:fs";
5591
5637
  import { homedir } from "node:os";
5592
- import { dirname as dirname11, join as join10 } from "node:path";
5638
+ import { dirname as dirname12, join as join11 } from "node:path";
5593
5639
  function sessionIdFrom(input) {
5594
5640
  return typeof input.session_id === "string" && input.session_id.length > 0 ? input.session_id : undefined;
5595
5641
  }
@@ -5615,8 +5661,8 @@ function isLspDaemonUnreachableDiagnostics(diagnostics) {
5615
5661
  return diagnostics.includes("LSP daemon unreachable");
5616
5662
  }
5617
5663
  function sessionStatePath(sessionId) {
5618
- const root = process.env["PLUGIN_DATA"] ?? join10(homedir(), ".codex", "codex-lsp");
5619
- return join10(root, "sessions", `${safePathSegment(sessionId)}.json`);
5664
+ const root = process.env["PLUGIN_DATA"] ?? join11(homedir(), ".codex", "codex-lsp");
5665
+ return join11(root, "sessions", `${safePathSegment(sessionId)}.json`);
5620
5666
  }
5621
5667
  function readSessionState(path2) {
5622
5668
  try {
@@ -5631,7 +5677,7 @@ function readSessionState(path2) {
5631
5677
  }
5632
5678
  }
5633
5679
  function writeSessionState(path2, state) {
5634
- mkdirSync4(dirname11(path2), { recursive: true });
5680
+ mkdirSync4(dirname12(path2), { recursive: true });
5635
5681
  writeFileSync3(path2, `${JSON.stringify(state)}
5636
5682
  `);
5637
5683
  }
@@ -5775,13 +5821,13 @@ function notConfiguredAvailability(details) {
5775
5821
  return typeof extension === "string" && extension.length > 0 ? { extension } : undefined;
5776
5822
  }
5777
5823
  function codexLspRequestContext(env = process.env, cwd = process.cwd()) {
5778
- const canonicalCwd3 = realpathSync6(resolve11(cwd));
5779
- const codexHome = resolve11(env["CODEX_HOME"]?.trim() || join11(homedir3(), ".codex"));
5824
+ const canonicalCwd3 = realpathSync8(resolve11(cwd));
5825
+ const codexHome = resolve11(env["CODEX_HOME"]?.trim() || join12(homedir3(), ".codex"));
5780
5826
  return parseLspRequestContext2({
5781
5827
  cwd: canonicalCwd3,
5782
- projectConfigPaths: [join11(canonicalCwd3, ".codex", "lsp-client.json")],
5783
- userConfigPath: join11(codexHome, "lsp-client.json"),
5784
- installDecisionsPath: join11(codexHome, "lsp-install-decisions.json"),
5828
+ projectConfigPaths: [join12(canonicalCwd3, ".codex", "lsp-client.json")],
5829
+ userConfigPath: join12(codexHome, "lsp-client.json"),
5830
+ installDecisionsPath: join12(codexHome, "lsp-install-decisions.json"),
5785
5831
  capabilities: { installDecisionTool: true }
5786
5832
  });
5787
5833
  }
@@ -5957,7 +6003,7 @@ main().catch((error) => {
5957
6003
  });
5958
6004
  async function runPackageLspMcpCli() {
5959
6005
  const cliPath = resolveLspDaemonCliPath();
5960
- const child = spawn3(execPath2, [cliPath, "mcp"], { stdio: "inherit" });
6006
+ const child = spawn3(execPath2, [cliPath, "mcp"], { stdio: "inherit", windowsHide: true });
5961
6007
  await new Promise((resolve10, reject) => {
5962
6008
  child.once("error", reject);
5963
6009
  child.once("exit", (code, signal) => {