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
@@ -271,7 +271,11 @@ function createParentWatchdog(config, onDeadParent) {
271
271
  const probeAlive = config.probeAlive ?? isProcessAlive;
272
272
  let fired = false;
273
273
  const timer = setInterval(() => {
274
- if (fired || probeAlive(parentPid))
274
+ if (fired)
275
+ return;
276
+ const alive = probeAlive(parentPid);
277
+ config.onPoll?.(alive);
278
+ if (alive)
275
279
  return;
276
280
  fired = true;
277
281
  onDeadParent(parentPid, pollIntervalMs);
@@ -306,8 +310,8 @@ function createIdleTimer(idleTimeoutMs, log, onTimeout) {
306
310
  };
307
311
  }
308
312
  // ../lsp-core/src/lsp/client-wrapper.ts
309
- import { existsSync as existsSync9, statSync as statSync3 } from "node:fs";
310
- import { dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
313
+ import { existsSync as existsSync10, realpathSync as realpathSync5, statSync as statSync3 } from "node:fs";
314
+ import { basename as basename3, dirname as dirname7, join as join5, resolve as resolve7 } from "node:path";
311
315
 
312
316
  // ../lsp-core/src/request-context.ts
313
317
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -316,18 +320,17 @@ import { homedir } from "node:os";
316
320
  import { basename, delimiter, dirname, isAbsolute, join, relative, resolve } from "node:path";
317
321
 
318
322
  class LspRequestContextParseError extends Error {
319
- code;
320
- name = "LspRequestContextParseError";
321
323
  constructor(code, message) {
322
324
  super(message);
323
325
  this.code = code;
326
+ this.name = "LspRequestContextParseError";
324
327
  }
325
328
  }
326
329
 
327
330
  class LspRequestContextUnavailableError extends Error {
328
- name = "LspRequestContextUnavailableError";
329
331
  constructor() {
330
332
  super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
333
+ this.name = "LspRequestContextUnavailableError";
331
334
  }
332
335
  }
333
336
  var storage = new AsyncLocalStorage;
@@ -500,22 +503,15 @@ function effectiveExtension(filePath) {
500
503
 
501
504
  // ../lsp-core/src/lsp/errors.ts
502
505
  class LspConnectionClosedError extends Error {
503
- serverId;
504
- root;
505
- name = "LspConnectionClosedError";
506
506
  constructor(serverId, root, message) {
507
507
  super(message ?? `LSP connection closed for ${serverId} at ${root}`);
508
508
  this.serverId = serverId;
509
509
  this.root = root;
510
+ this.name = "LspConnectionClosedError";
510
511
  }
511
512
  }
512
513
 
513
514
  class LspProcessExitedError extends Error {
514
- serverId;
515
- root;
516
- exitCode;
517
- stderrTail;
518
- name = "LspProcessExitedError";
519
515
  constructor(serverId, root, exitCode, stderrTail) {
520
516
  const stderrSuffix = stderrTail ? `
521
517
  stderr tail: ${stderrTail}` : "";
@@ -524,46 +520,49 @@ stderr tail: ${stderrTail}` : "";
524
520
  this.root = root;
525
521
  this.exitCode = exitCode;
526
522
  this.stderrTail = stderrTail;
523
+ this.name = "LspProcessExitedError";
527
524
  }
528
525
  }
529
526
 
530
527
  class LspRequestTimeoutError extends Error {
531
- method;
532
- stderrTail;
533
- name = "LspRequestTimeoutError";
534
528
  constructor(method, stderrTail) {
535
529
  const stderrSuffix = stderrTail ? `
536
530
  recent stderr: ${stderrTail}` : "";
537
531
  super(`LSP request timeout (method: ${method})${stderrSuffix}`);
538
532
  this.method = method;
539
533
  this.stderrTail = stderrTail;
534
+ this.name = "LspRequestTimeoutError";
540
535
  }
541
536
  }
542
537
 
543
538
  class LspInvalidPathError extends Error {
544
- name = "LspInvalidPathError";
539
+ constructor() {
540
+ super(...arguments);
541
+ this.name = "LspInvalidPathError";
542
+ }
545
543
  }
546
544
 
547
545
  class LspServerLookupError extends Error {
548
- lookup;
549
- name = "LspServerLookupError";
550
546
  constructor(message, lookup) {
551
547
  super(message);
552
548
  this.lookup = lookup;
549
+ this.name = "LspServerLookupError";
553
550
  }
554
551
  }
555
552
 
556
553
  class LspServerInitializingError extends Error {
557
- originalError;
558
- name = "LspServerInitializingError";
559
554
  constructor(originalError) {
560
555
  super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
561
556
  this.originalError = originalError;
557
+ this.name = "LspServerInitializingError";
562
558
  }
563
559
  }
564
560
 
565
561
  class LspProcessSpawnError extends Error {
566
- name = "LspProcessSpawnError";
562
+ constructor() {
563
+ super(...arguments);
564
+ this.name = "LspProcessSpawnError";
565
+ }
567
566
  }
568
567
  function isLspDeadConnectionError(err) {
569
568
  return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
@@ -608,20 +607,31 @@ var METHOD_NOT_FOUND = -32601;
608
607
  var INTERNAL_ERROR = -32603;
609
608
 
610
609
  class JsonRpcConnection {
611
- reader;
612
- writer;
613
- pendingRequests = new Map;
614
- notificationHandlers = new Map;
615
- requestHandlers = new Map;
616
- closeHandlers = [];
617
- errorHandlers = [];
618
- inputBuffer = Buffer.alloc(0);
619
- nextRequestId = 1;
620
- listening = false;
621
- disposed = false;
622
610
  constructor(reader, writer) {
623
611
  this.reader = reader;
624
612
  this.writer = writer;
613
+ this.pendingRequests = new Map;
614
+ this.notificationHandlers = new Map;
615
+ this.requestHandlers = new Map;
616
+ this.closeHandlers = [];
617
+ this.errorHandlers = [];
618
+ this.inputBuffer = Buffer.alloc(0);
619
+ this.nextRequestId = 1;
620
+ this.listening = false;
621
+ this.disposed = false;
622
+ this.handleData = (chunk) => {
623
+ const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
624
+ this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
625
+ this.drainInputBuffer();
626
+ };
627
+ this.handleClose = () => {
628
+ for (const handler of this.closeHandlers) {
629
+ handler();
630
+ }
631
+ };
632
+ this.handleStreamError = (error) => {
633
+ this.emitError(error);
634
+ };
625
635
  }
626
636
  listen() {
627
637
  if (this.listening)
@@ -742,19 +752,6 @@ class JsonRpcConnection {
742
752
  this.notificationHandlers.clear();
743
753
  this.requestHandlers.clear();
744
754
  }
745
- handleData = (chunk) => {
746
- const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
747
- this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
748
- this.drainInputBuffer();
749
- };
750
- handleClose = () => {
751
- for (const handler of this.closeHandlers) {
752
- handler();
753
- }
754
- };
755
- handleStreamError = (error) => {
756
- this.emitError(error);
757
- };
758
755
  drainInputBuffer() {
759
756
  while (true) {
760
757
  const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR2);
@@ -1102,31 +1099,25 @@ function isPosition(value) {
1102
1099
 
1103
1100
  // ../lsp-core/src/lsp/transport.ts
1104
1101
  class LspClientNotStartedError extends Error {
1105
- serverId;
1106
- root;
1107
- name = "LspClientNotStartedError";
1108
1102
  constructor(serverId, root) {
1109
1103
  super("LSP client not started");
1110
1104
  this.serverId = serverId;
1111
1105
  this.root = root;
1106
+ this.name = "LspClientNotStartedError";
1112
1107
  }
1113
1108
  }
1114
1109
 
1115
1110
  class LspClientTransport {
1116
- root;
1117
- server;
1118
- proc = null;
1119
- connection = null;
1120
- stderrBuffer = [];
1121
- processExited = false;
1122
- diagnosticsStore = new Map;
1123
- requestTimeoutMs;
1124
- initializeTimeoutMs;
1125
- workspaceApplyEditHandler = null;
1126
- diagnosticPullSupported = false;
1127
1111
  constructor(root, server2, timeouts = {}) {
1128
1112
  this.root = root;
1129
1113
  this.server = server2;
1114
+ this.proc = null;
1115
+ this.connection = null;
1116
+ this.stderrBuffer = [];
1117
+ this.processExited = false;
1118
+ this.diagnosticsStore = new Map;
1119
+ this.workspaceApplyEditHandler = null;
1120
+ this.diagnosticPullSupported = false;
1130
1121
  this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
1131
1122
  this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
1132
1123
  }
@@ -1623,16 +1614,12 @@ function movedPath(candidate, oldPath, newPath) {
1623
1614
  }
1624
1615
 
1625
1616
  class WorkspaceDocumentState {
1626
- sendNotification;
1627
- clearDiagnostics;
1628
- openDocuments = new Map;
1629
- openByUri = new Map;
1630
- openPromises = new Map;
1631
- now;
1632
- versionlessPublishQuiescenceMs;
1633
1617
  constructor(sendNotification, clearDiagnostics, options = {}) {
1634
1618
  this.sendNotification = sendNotification;
1635
1619
  this.clearDiagnostics = clearDiagnostics;
1620
+ this.openDocuments = new Map;
1621
+ this.openByUri = new Map;
1622
+ this.openPromises = new Map;
1636
1623
  this.now = options.now ?? (() => Date.now());
1637
1624
  this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
1638
1625
  }
@@ -1896,13 +1883,11 @@ import { dirname as dirname2, isAbsolute as isAbsolute2, relative as relative3,
1896
1883
  import { fileURLToPath } from "node:url";
1897
1884
 
1898
1885
  class WorkspaceEditPathError extends Error {
1899
- path;
1900
- detail;
1901
- name = "WorkspaceEditPathError";
1902
1886
  constructor(path, detail) {
1903
1887
  super(`${detail}: ${path}`);
1904
1888
  this.path = path;
1905
1889
  this.detail = detail;
1890
+ this.name = "WorkspaceEditPathError";
1906
1891
  }
1907
1892
  }
1908
1893
  function isPathInsideWorkspace(filePath, workspaceRoot) {
@@ -2194,13 +2179,11 @@ function canonicalFingerprint(operations) {
2194
2179
 
2195
2180
  // ../lsp-core/src/lsp/workspace-edit-types.ts
2196
2181
  class WorkspaceEditValidationError extends Error {
2197
- changeIndex;
2198
- detail;
2199
- name = "WorkspaceEditValidationError";
2200
2182
  constructor(changeIndex, detail) {
2201
2183
  super(`change ${changeIndex}: ${detail}`);
2202
2184
  this.changeIndex = changeIndex;
2203
2185
  this.detail = detail;
2186
+ this.name = "WorkspaceEditValidationError";
2204
2187
  }
2205
2188
  }
2206
2189
 
@@ -2698,10 +2681,9 @@ function simulateDelete(operation, virtual) {
2698
2681
  import { existsSync as existsSync5, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
2699
2682
  import { dirname as dirname4, resolve as resolve5 } from "node:path";
2700
2683
  class WorkspaceSnapshotBuilder {
2701
- workspaceRoot;
2702
- snapshots = new Map;
2703
2684
  constructor(workspaceRoot) {
2704
2685
  this.workspaceRoot = workspaceRoot;
2686
+ this.snapshots = new Map;
2705
2687
  }
2706
2688
  build(operations) {
2707
2689
  this.add(this.workspaceRoot, false);
@@ -2745,8 +2727,10 @@ function snapshotOperations(operations, workspaceRoot) {
2745
2727
 
2746
2728
  // ../lsp-core/src/lsp/workspace-edit-plan.ts
2747
2729
  class PlanPathIndex {
2748
- firstChangeByPath = new Map;
2749
- reportedPathByCanonical = new Map;
2730
+ constructor() {
2731
+ this.firstChangeByPath = new Map;
2732
+ this.reportedPathByCanonical = new Map;
2733
+ }
2750
2734
  build(operations) {
2751
2735
  for (const operation of operations) {
2752
2736
  switch (operation.kind) {
@@ -2835,14 +2819,11 @@ function isRecord4(value) {
2835
2819
  }
2836
2820
 
2837
2821
  class WorkspaceMutationController {
2838
- workspaceRoot;
2839
- documents;
2840
- activeLease = null;
2841
- nextLeaseId = 1;
2842
- io;
2843
2822
  constructor(workspaceRoot, documents) {
2844
2823
  this.workspaceRoot = workspaceRoot;
2845
2824
  this.documents = documents;
2825
+ this.activeLease = null;
2826
+ this.nextLeaseId = 1;
2846
2827
  }
2847
2828
  setIo(io) {
2848
2829
  this.io = io;
@@ -2955,12 +2936,9 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
2955
2936
  var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
2956
2937
 
2957
2938
  class LspClient extends LspClientConnection {
2958
- diagnosticPullErrors = [];
2959
- documents;
2960
- workspaceMutations;
2961
- diagnosticsFreshnessTimeoutMs;
2962
2939
  constructor(root, server2, options = {}) {
2963
2940
  super(root, server2, options);
2941
+ this.diagnosticPullErrors = [];
2964
2942
  this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
2965
2943
  this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
2966
2944
  versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
@@ -3260,16 +3238,11 @@ function awaitWithSignal(promise, signal) {
3260
3238
  }
3261
3239
 
3262
3240
  class LspManager {
3263
- clients = new Map;
3264
- reaperHandle = null;
3265
- signalDisposer = null;
3266
- disposed = false;
3267
- idleTimeoutMs;
3268
- initTimeoutMs;
3269
- reaperIntervalMs;
3270
- clientFactory;
3271
- now;
3272
3241
  constructor(options = {}) {
3242
+ this.clients = new Map;
3243
+ this.reaperHandle = null;
3244
+ this.signalDisposer = null;
3245
+ this.disposed = false;
3273
3246
  this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
3274
3247
  this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
3275
3248
  this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
@@ -3501,15 +3474,52 @@ async function disposeDefaultLspManager() {
3501
3474
  }
3502
3475
  }
3503
3476
 
3477
+ // ../lsp-core/src/lsp/outside-context-workspace.ts
3478
+ import { existsSync as existsSync6, realpathSync as realpathSync4 } from "node:fs";
3479
+ import { dirname as dirname5, join as join3 } from "node:path";
3480
+
3481
+ // ../lsp-core/src/lsp/workspace-markers.ts
3482
+ var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
3483
+
3484
+ // ../lsp-core/src/lsp/outside-context-workspace.ts
3485
+ function findWorkspaceRootOutsideContext(directory) {
3486
+ const marked = nearestMarkedAncestor(directory);
3487
+ if (marked !== undefined)
3488
+ return marked;
3489
+ return realpathSync4(nearestExistingAncestor(directory));
3490
+ }
3491
+ function nearestMarkedAncestor(directory) {
3492
+ let current = directory;
3493
+ for (;; ) {
3494
+ if (existsSync6(current) && WORKSPACE_MARKERS.some((marker) => existsSync6(join3(current, marker)))) {
3495
+ return realpathSync4(current);
3496
+ }
3497
+ const parent = dirname5(current);
3498
+ if (parent === current)
3499
+ return;
3500
+ current = parent;
3501
+ }
3502
+ }
3503
+ function nearestExistingAncestor(directory) {
3504
+ let current = directory;
3505
+ while (!existsSync6(current)) {
3506
+ const parent = dirname5(current);
3507
+ if (parent === current)
3508
+ return current;
3509
+ current = parent;
3510
+ }
3511
+ return current;
3512
+ }
3513
+
3504
3514
  // ../lsp-core/src/lsp/server-install-state.ts
3505
- import { existsSync as existsSync6, mkdirSync, readFileSync as readFileSync3, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
3506
- import { dirname as dirname5 } from "node:path";
3515
+ import { existsSync as existsSync7, mkdirSync, readFileSync as readFileSync3, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
3516
+ import { dirname as dirname6 } from "node:path";
3507
3517
  function getInstallDecisionsPath() {
3508
3518
  return lspRequestContext().installDecisionsPath;
3509
3519
  }
3510
3520
  function loadInstallDecisions() {
3511
3521
  const path = getInstallDecisionsPath();
3512
- if (!existsSync6(path))
3522
+ if (!existsSync7(path))
3513
3523
  return {};
3514
3524
  try {
3515
3525
  const parsed = JSON.parse(readFileSync3(path, "utf8"));
@@ -3531,7 +3541,7 @@ function isInstallDecision(value) {
3531
3541
  }
3532
3542
  function writeInstallDecisions(decisions) {
3533
3543
  const path = getInstallDecisionsPath();
3534
- mkdirSync(dirname5(path), { recursive: true });
3544
+ mkdirSync(dirname6(path), { recursive: true });
3535
3545
  const tmpPath = `${path}.tmp`;
3536
3546
  writeFileSync2(tmpPath, `${JSON.stringify(decisions, null, 2)}
3537
3547
  `, "utf8");
@@ -3550,7 +3560,7 @@ function isRecord5(value) {
3550
3560
  }
3551
3561
 
3552
3562
  // ../lsp-core/src/lsp/config-loader.ts
3553
- import { existsSync as existsSync7, readFileSync as readFileSync4 } from "node:fs";
3563
+ import { existsSync as existsSync8, readFileSync as readFileSync4 } from "node:fs";
3554
3564
 
3555
3565
  // ../lsp-core/src/lsp/server-definitions.ts
3556
3566
  var LSP_INSTALL_HINTS = {
@@ -3707,7 +3717,7 @@ function getUserConfigPath() {
3707
3717
  return lspRequestContext().userConfigPath;
3708
3718
  }
3709
3719
  function loadJsonFile(path) {
3710
- if (!existsSync7(path))
3720
+ if (!existsSync8(path))
3711
3721
  return null;
3712
3722
  try {
3713
3723
  const parsed = JSON.parse(readFileSync4(path, "utf-8"));
@@ -3895,8 +3905,8 @@ function getDisabledServerIds() {
3895
3905
  }
3896
3906
 
3897
3907
  // ../lsp-core/src/lsp/server-installation.ts
3898
- import { existsSync as existsSync8 } from "node:fs";
3899
- import { delimiter as delimiter3, join as join3 } from "node:path";
3908
+ import { existsSync as existsSync9 } from "node:fs";
3909
+ import { delimiter as delimiter3, join as join4 } from "node:path";
3900
3910
  function isServerInstalled(command, _workingDirectory) {
3901
3911
  if (command.length === 0)
3902
3912
  return false;
@@ -3904,7 +3914,7 @@ function isServerInstalled(command, _workingDirectory) {
3904
3914
  if (!cmd)
3905
3915
  return false;
3906
3916
  if (cmd.includes("/") || cmd.includes("\\")) {
3907
- if (existsSync8(cmd))
3917
+ if (existsSync9(cmd))
3908
3918
  return true;
3909
3919
  }
3910
3920
  const isWindows = process.platform === "win32";
@@ -3925,7 +3935,7 @@ function isServerInstalled(command, _workingDirectory) {
3925
3935
  const paths = pathEnv.split(delimiter3);
3926
3936
  for (const p of paths) {
3927
3937
  for (const suffix of exts) {
3928
- if (existsSync8(join3(p, cmd + suffix))) {
3938
+ if (existsSync9(join4(p, cmd + suffix))) {
3929
3939
  return true;
3930
3940
  }
3931
3941
  }
@@ -4021,7 +4031,6 @@ function getAllServers() {
4021
4031
  }
4022
4032
 
4023
4033
  // ../lsp-core/src/lsp/client-wrapper.ts
4024
- var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
4025
4034
  function isDirectoryPath(filePath) {
4026
4035
  try {
4027
4036
  return statSync3(filePath).isDirectory();
@@ -4030,32 +4039,85 @@ function isDirectoryPath(filePath) {
4030
4039
  }
4031
4040
  }
4032
4041
  function findWorkspaceRoot(filePath) {
4033
- const abs = resolvePathInsideContext(filePath);
4042
+ const cwd = contextCwd();
4043
+ const abs = resolveReadablePathInsideContext(filePath);
4034
4044
  let dir = abs;
4035
4045
  if (!isDirectoryPath(dir)) {
4036
- dir = dirname6(dir);
4037
- }
4038
- let prevDir = "";
4039
- while (dir !== prevDir) {
4040
- for (const marker of WORKSPACE_MARKERS) {
4041
- if (existsSync9(join4(dir, marker))) {
4042
- return dir;
4046
+ dir = dirname7(dir);
4047
+ }
4048
+ if (!isPathInside(cwd, abs))
4049
+ return findWorkspaceRootOutsideContext(dir);
4050
+ const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
4051
+ while (isPathInside(cwd, dir)) {
4052
+ const canonicalDir = existingDirectoryInsideContext(dir, cwd);
4053
+ if (canonicalDir !== undefined) {
4054
+ for (const marker of WORKSPACE_MARKERS) {
4055
+ if (existsSync10(join5(dir, marker))) {
4056
+ return canonicalDir;
4057
+ }
4043
4058
  }
4044
4059
  }
4045
- prevDir = dir;
4046
- dir = dirname6(dir);
4060
+ if (dir === cwd)
4061
+ break;
4062
+ dir = dirname7(dir);
4047
4063
  }
4048
- return dirname6(abs);
4064
+ return fallbackRoot;
4049
4065
  }
4050
- function resolvePathInsideContext(filePath) {
4066
+ function resolveReadablePathInsideContext(filePath) {
4051
4067
  const cwd = contextCwd();
4052
4068
  const abs = resolve7(cwd, filePath);
4069
+ if (isPathInside(cwd, abs))
4070
+ return abs;
4071
+ const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
4072
+ if (rebased !== undefined)
4073
+ return rebased;
4074
+ return canonicalizeExistingOrNearestAncestor(abs);
4075
+ }
4076
+ function resolvePathInsideContext(filePath) {
4077
+ const cwd = contextCwd();
4078
+ const abs = resolveReadablePathInsideContext(filePath);
4053
4079
  const canonical = canonicalizeExistingOrNearestAncestor(abs);
4054
4080
  if (!isPathInside(cwd, canonical)) {
4055
4081
  throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
4056
4082
  }
4057
4083
  return canonical;
4058
4084
  }
4085
+ function rebaseThroughCanonicalAncestor(path, cwd) {
4086
+ let current = path;
4087
+ const suffix = [];
4088
+ while (true) {
4089
+ if (existsSync10(current)) {
4090
+ const canonical = realpathSync5(current);
4091
+ if (isPathInside(cwd, canonical))
4092
+ return suffix.length === 0 ? canonical : join5(canonical, ...suffix);
4093
+ }
4094
+ const parent = dirname7(current);
4095
+ if (parent === current)
4096
+ return;
4097
+ suffix.unshift(basename3(current));
4098
+ current = parent;
4099
+ }
4100
+ }
4101
+ function existingDirectoryInsideContext(directory, cwd) {
4102
+ if (!existsSync10(directory))
4103
+ return;
4104
+ const canonical = realpathSync5(directory);
4105
+ if (!statSync3(canonical).isDirectory())
4106
+ return;
4107
+ return isPathInside(cwd, canonical) ? canonical : undefined;
4108
+ }
4109
+ function nearestExistingDirectoryInsideContext(directory, cwd) {
4110
+ let current = directory;
4111
+ while (isPathInside(cwd, current)) {
4112
+ const canonical = existingDirectoryInsideContext(current, cwd);
4113
+ if (canonical !== undefined)
4114
+ return canonical;
4115
+ if (current === cwd)
4116
+ return;
4117
+ current = dirname7(current);
4118
+ }
4119
+ return;
4120
+ }
4059
4121
  function formatServerLookupError(result) {
4060
4122
  if (result.status === "not_installed") {
4061
4123
  return formatNotInstalled(result);
@@ -4126,7 +4188,7 @@ function formatNotInstalled(result) {
4126
4188
  ].join(`
4127
4189
  `);
4128
4190
  }
4129
- var READ_ONLY_RETRY_TOOLS = new Set([
4191
+ var READ_ONLY_TOOLS = new Set([
4130
4192
  "diagnostics",
4131
4193
  "definition",
4132
4194
  "references",
@@ -4135,7 +4197,7 @@ var READ_ONLY_RETRY_TOOLS = new Set([
4135
4197
  "prepareRename"
4136
4198
  ]);
4137
4199
  async function withLspClient(filePath, fn, toolName, options = {}) {
4138
- const absPath = resolvePathInsideContext(filePath);
4200
+ const absPath = READ_ONLY_TOOLS.has(toolName) ? resolveReadablePathInsideContext(filePath) : resolvePathInsideContext(filePath);
4139
4201
  if (isDirectoryPath(absPath)) {
4140
4202
  throw new LspInvalidPathError("Directory paths are not supported by this LSP tool. " + "Use lsp.diagnostics with a directory path for directory diagnostics.");
4141
4203
  }
@@ -4150,9 +4212,9 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
4150
4212
  const acquireAndCall = async (allowRetry) => {
4151
4213
  const client = await manager.getClient(root, server2, options.signal);
4152
4214
  try {
4153
- return await fn(client, root);
4215
+ return await fn(client, root, absPath);
4154
4216
  } catch (err) {
4155
- if (allowRetry && READ_ONLY_RETRY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
4217
+ if (allowRetry && READ_ONLY_TOOLS.has(toolName) && isLspDeadConnectionError(err)) {
4156
4218
  manager.invalidateClient(root, server2.id, client);
4157
4219
  return acquireAndCall(false);
4158
4220
  }
@@ -4170,8 +4232,8 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
4170
4232
  }
4171
4233
 
4172
4234
  // ../lsp-core/src/lsp/directory-diagnostics.ts
4173
- import { existsSync as existsSync10, lstatSync as lstatSync4, readdirSync as readdirSync3 } from "node:fs";
4174
- import { join as join5, resolve as resolve8 } from "node:path";
4235
+ import { existsSync as existsSync11, lstatSync as lstatSync4, readdirSync as readdirSync3 } from "node:fs";
4236
+ import { join as join6, resolve as resolve8 } from "node:path";
4175
4237
 
4176
4238
  // ../lsp-core/src/lsp/formatters.ts
4177
4239
  import { fileURLToPath as fileURLToPath2 } from "node:url";
@@ -4301,7 +4363,7 @@ function collectFilesWithExtension(dir, extension, maxFiles) {
4301
4363
  for (const entry of entries) {
4302
4364
  if (files.length >= maxFiles)
4303
4365
  return;
4304
- const fullPath = join5(currentDir, entry);
4366
+ const fullPath = join6(currentDir, entry);
4305
4367
  let stat;
4306
4368
  try {
4307
4369
  stat = lstatSync4(fullPath);
@@ -4327,7 +4389,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
4327
4389
  throw new LspInvalidPathError(`Extension must start with a dot (e.g., ".ts", not "${extension}"). Use ".${extension}" instead.`);
4328
4390
  }
4329
4391
  const absDir = resolve8(options.workspaceRoot ?? contextCwd(), directory);
4330
- if (!existsSync10(absDir)) {
4392
+ if (!existsSync11(absDir)) {
4331
4393
  throw new LspInvalidPathError(`Directory does not exist: ${absDir}`);
4332
4394
  }
4333
4395
  const serverResult = options.server === undefined ? findServerForExtension(extension) : { status: "found", server: options.server };
@@ -4414,7 +4476,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
4414
4476
 
4415
4477
  // ../lsp-core/src/lsp/infer-extension.ts
4416
4478
  import { lstatSync as lstatSync5, readdirSync as readdirSync4 } from "node:fs";
4417
- import { join as join6 } from "node:path";
4479
+ import { join as join7 } from "node:path";
4418
4480
  var SKIP_DIRECTORIES2 = new Set(["node_modules", ".git", "dist", "build", ".next", "out"]);
4419
4481
  var MAX_SCAN_ENTRIES = 500;
4420
4482
  function inferExtensionFromDirectory(directory) {
@@ -4432,7 +4494,7 @@ function inferExtensionFromDirectory(directory) {
4432
4494
  for (const entry of entries) {
4433
4495
  if (scanned >= MAX_SCAN_ENTRIES)
4434
4496
  return;
4435
- const fullPath = join6(dir, entry);
4497
+ const fullPath = join7(dir, entry);
4436
4498
  let stat;
4437
4499
  try {
4438
4500
  stat = lstatSync5(fullPath);
@@ -4607,7 +4669,7 @@ async function executeLspDiagnostics(params, signal) {
4607
4669
  const filePath = requireString(params, "filePath");
4608
4670
  const severity = severityFilter(params);
4609
4671
  try {
4610
- const absPath = resolvePathInsideContext(filePath);
4672
+ const absPath = resolveReadablePathInsideContext(filePath);
4611
4673
  if (isDirectoryPath(absPath)) {
4612
4674
  const extension = inferExtensionFromDirectory(absPath);
4613
4675
  if (!extension) {
@@ -4636,7 +4698,7 @@ async function executeLspDiagnostics(params, signal) {
4636
4698
  };
4637
4699
  return text(output2.output, details2);
4638
4700
  }
4639
- const result = await withLspClient(filePath, async (client) => client.diagnostics(filePath, signal), "diagnostics", clientOptions(signal));
4701
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
4640
4702
  if (result.transientError) {
4641
4703
  const message = result.transientError.message;
4642
4704
  const details2 = {
@@ -4711,7 +4773,7 @@ async function executeLspGotoDefinition(params, signal) {
4711
4773
  const line = requireNumber(params, "line");
4712
4774
  const character = requireNumber(params, "character");
4713
4775
  try {
4714
- const result = await withLspClient(filePath, async (client) => client.definition(filePath, line, character, signal), "definition", clientOptions(signal));
4776
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.definition(resolvedFilePath, line, character, signal), "definition", clientOptions(signal));
4715
4777
  const locations = !result ? [] : Array.isArray(result) ? result : [result];
4716
4778
  const details = { filePath, line, character, locations };
4717
4779
  if (locations.length === 0)
@@ -4736,7 +4798,7 @@ async function executeLspFindReferences(params, signal) {
4736
4798
  const character = requireNumber(params, "character");
4737
4799
  const includeDeclaration = optionalBoolean(params, "includeDeclaration") ?? true;
4738
4800
  try {
4739
- const result = await withLspClient(filePath, async (client) => client.references(filePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
4801
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.references(resolvedFilePath, line, character, includeDeclaration, signal), "references", clientOptions(signal));
4740
4802
  const references = Array.isArray(result) ? result : [];
4741
4803
  const total = references.length;
4742
4804
  const truncated = total > DEFAULT_MAX_REFERENCES;
@@ -4778,7 +4840,7 @@ async function executeLspPrepareRename(params, signal) {
4778
4840
  const line = requireNumber(params, "line");
4779
4841
  const character = requireNumber(params, "character");
4780
4842
  try {
4781
- const result = await withLspClient(filePath, async (client) => client.prepareRename(filePath, line, character, signal), "prepareRename", clientOptions(signal));
4843
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.prepareRename(resolvedFilePath, line, character, signal), "prepareRename", clientOptions(signal));
4782
4844
  const details = { filePath, line, character, result };
4783
4845
  return text(formatPrepareRenameResult(result), details);
4784
4846
  } catch (error) {
@@ -4799,7 +4861,7 @@ async function executeLspRename(params, signal) {
4799
4861
  const character = requireNumber(params, "character");
4800
4862
  const newName = requireString(params, "newName");
4801
4863
  try {
4802
- const result = await withLspClient(filePath, async (client) => client.rename(filePath, line, character, newName, signal), "rename", clientOptions(signal));
4864
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.rename(resolvedFilePath, line, character, newName, signal), "rename", clientOptions(signal));
4803
4865
  const details = { filePath, line, character, newName, apply: result.apply, edit: result.edit };
4804
4866
  return text(formatApplyResult(result.apply), details, !result.apply.success);
4805
4867
  } catch (error) {
@@ -4879,7 +4941,7 @@ async function executeLspSymbols(params, signal) {
4879
4941
  const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
4880
4942
  return formatSymbolsResult(filePath, scope, symbols2, limit, query);
4881
4943
  }
4882
- const symbols = await withLspClient(filePath, async (client) => client.documentSymbols(filePath, signal), "documentSymbols", clientOptions(signal));
4944
+ const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
4883
4945
  return formatSymbolsResult(filePath, scope, symbols, limit);
4884
4946
  } catch (error) {
4885
4947
  const query = optionalString(params, "query");
@@ -5122,6 +5184,6 @@ function requestedProtocolVersion(params) {
5122
5184
  return params["protocolVersion"];
5123
5185
  }
5124
5186
  export {
5125
- runMcpStdioServer,
5126
- handleLspMcpRequest
5187
+ handleLspMcpRequest,
5188
+ runMcpStdioServer
5127
5189
  };