oh-my-opencode 5.0.0-beta.8 → 5.0.0-beta.81

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 (1236) hide show
  1. package/.agents/command/publish.md +59 -23
  2. package/.agents/command/remove-deadcode.md +1 -1
  3. package/.agents/skills/codex-qa/scripts/lsp-e2e.sh +1 -3
  4. package/.agents/skills/hyperplan/SKILL.md +5 -5
  5. package/.agents/skills/opencode-qa/scripts/lsp-e2e.sh +1 -1
  6. package/.agents/skills/pre-publish-review/SKILL.md +9 -12
  7. package/.agents/skills/publish/SKILL.md +59 -23
  8. package/.agents/skills/remove-deadcode/SKILL.md +1 -1
  9. package/.agents/skills/security-research/SKILL.md +4 -4
  10. package/.agents/skills/senpi-qa/SKILL.md +80 -0
  11. package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs +65 -0
  12. package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs +171 -0
  13. package/.agents/skills/tech-debt-audit/SKILL.md +6 -76
  14. package/.opencode/command/publish.md +59 -23
  15. package/.opencode/skills/pre-publish-review/SKILL.md +9 -12
  16. package/README.ja.md +66 -61
  17. package/README.ko.md +67 -62
  18. package/README.md +108 -182
  19. package/README.ru.md +63 -61
  20. package/README.zh-cn.md +62 -61
  21. package/THIRD-PARTY-NOTICES.md +35 -105
  22. package/dist/agents/atlas/agent.d.ts +0 -1
  23. package/dist/agents/gpt-prompt-identity.d.ts +1 -1
  24. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +15 -4
  25. package/dist/agents/types.d.ts +4 -2
  26. package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
  27. package/dist/cli/doctor/checks/browser-provider.d.ts +2 -0
  28. package/dist/cli/doctor/checks/index.d.ts +2 -0
  29. package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
  30. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  31. package/dist/cli/doctor/framework/constants.d.ts +5 -0
  32. package/dist/cli/doctor/framework/types.d.ts +2 -0
  33. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  34. package/dist/cli/index.js +59118 -63486
  35. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  36. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  37. package/dist/cli/runtime-commands.d.ts +1 -1
  38. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  39. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  40. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  41. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  42. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  43. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  44. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  45. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  46. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  47. package/dist/cli-node/index.js +58841 -63186
  48. package/dist/config/index.d.ts +1 -1
  49. package/dist/config/schema/agent-names.d.ts +0 -1
  50. package/dist/config/schema/background-task.d.ts +1 -0
  51. package/dist/config/schema/browser-automation.d.ts +0 -2
  52. package/dist/config/schema/commands.d.ts +1 -1
  53. package/dist/config/schema/hooks.d.ts +1 -2
  54. package/dist/config/schema/oh-my-opencode-config.d.ts +5 -12
  55. package/dist/config/schema/ulw-execute.d.ts +5 -0
  56. package/dist/config/schema.d.ts +0 -1
  57. package/dist/config/validate.d.ts +2 -0
  58. package/dist/config-migration/category-deep-split.d.ts +3 -0
  59. package/dist/config-migration/migration-plans.d.ts +1 -0
  60. package/dist/create-hooks.d.ts +3 -2
  61. package/dist/features/background-agent/compaction-aware-message-resolver.d.ts +1 -0
  62. package/dist/features/background-agent/constants.d.ts +0 -7
  63. package/dist/features/background-agent/error-classifier.d.ts +1 -0
  64. package/dist/features/background-agent/manager.d.ts +9 -1
  65. package/dist/features/background-agent/parent-wake-dispatched-tracker.d.ts +0 -1
  66. package/dist/features/background-agent/parent-wake-notifier-types.d.ts +1 -1
  67. package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +1 -1
  68. package/dist/features/background-agent/parent-wake-session-inspector.d.ts +1 -1
  69. package/dist/features/background-agent/subagent-spawn-limits.d.ts +8 -0
  70. package/dist/features/background-agent/types.d.ts +4 -0
  71. package/dist/features/boulder-state/storage.d.ts +1 -1
  72. package/dist/features/btw-side/btw-command-draft.d.ts +7 -0
  73. package/dist/features/btw-side/context-injector.d.ts +15 -0
  74. package/dist/features/btw-side/index.d.ts +8 -0
  75. package/dist/features/btw-side/metadata.d.ts +15 -0
  76. package/dist/features/btw-side/parent-context-budget.d.ts +9 -0
  77. package/dist/features/btw-side/server-session-registry.d.ts +8 -0
  78. package/dist/features/btw-side/tui-adoption-cache.d.ts +13 -0
  79. package/dist/features/btw-side/tui-adoption-guard.d.ts +5 -0
  80. package/dist/features/btw-side/tui-controller-types.d.ts +68 -0
  81. package/dist/features/btw-side/tui-controller.d.ts +19 -0
  82. package/dist/features/btw-side/tui-escape-return.d.ts +12 -0
  83. package/dist/features/btw-side/tui-keymap.d.ts +17 -0
  84. package/dist/features/btw-side/tui-parent-validator.d.ts +6 -0
  85. package/dist/features/btw-side/tui-picker-options.d.ts +20 -0
  86. package/dist/features/btw-side/tui-picker.d.ts +9 -0
  87. package/dist/features/btw-side/tui-prompt-queue.d.ts +8 -0
  88. package/dist/features/btw-side/tui-session-bridge.d.ts +11 -0
  89. package/dist/features/btw-side/tui-session-catalog.d.ts +35 -0
  90. package/dist/features/btw-side/tui-side-removal.d.ts +11 -0
  91. package/dist/features/btw-side/tui-side-start.d.ts +9 -0
  92. package/dist/features/btw-side/tui-wiring.d.ts +8 -0
  93. package/dist/features/builtin-commands/templates/hyperplan.d.ts +1 -1
  94. package/dist/features/builtin-commands/templates/refactor-sections/team-mode-addendum.d.ts +1 -1
  95. package/dist/features/builtin-commands/templates/remove-ai-slops.d.ts +1 -1
  96. package/dist/features/builtin-commands/templates/ulw-execute.d.ts +1 -0
  97. package/dist/features/builtin-commands/types.d.ts +1 -1
  98. package/dist/features/claude-tasks/storage.d.ts +7 -2
  99. package/dist/features/hook-message-injector/index.d.ts +1 -0
  100. package/dist/features/hook-message-injector/sdk-message-lookup.d.ts +1 -0
  101. package/dist/features/monitor/manager-internals.d.ts +1 -1
  102. package/dist/features/monitor/output-injector-types.d.ts +1 -1
  103. package/dist/features/opengateway-provider/index.d.ts +13 -0
  104. package/dist/features/task-toast-manager/manager.d.ts +0 -24
  105. package/dist/features/team-mode/tools/lifecycle-inline-spec.d.ts +1 -1
  106. package/dist/features/team-mode/tools/messaging-fallback-wake.d.ts +17 -0
  107. package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +3 -0
  108. package/dist/features/team-mode/tools/messaging-runtime.d.ts +7 -0
  109. package/dist/hooks/anthropic-context-window-limit-recovery/message-storage-directory.d.ts +0 -3
  110. package/dist/hooks/anthropic-context-window-limit-recovery/state.d.ts +1 -0
  111. package/dist/hooks/anthropic-context-window-limit-recovery/storage/empty-messages.d.ts +0 -1
  112. package/dist/hooks/anthropic-context-window-limit-recovery/tool-result-storage.d.ts +11 -0
  113. package/dist/hooks/atlas/atlas-hook.d.ts +1 -0
  114. package/dist/hooks/atlas/atlas-lifecycle-store.d.ts +50 -0
  115. package/dist/hooks/atlas/event-handler.d.ts +1 -0
  116. package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
  117. package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
  118. package/dist/hooks/atlas/tool-execute-before.d.ts +3 -0
  119. package/dist/hooks/atlas/types.d.ts +1 -0
  120. package/dist/hooks/claude-code-hooks/session-hook-state.d.ts +1 -0
  121. package/dist/hooks/claude-code-hooks/stop.d.ts +2 -0
  122. package/dist/hooks/claude-code-hooks/todo.d.ts +0 -1
  123. package/dist/hooks/claude-code-hooks/transcript.d.ts +2 -0
  124. package/dist/hooks/comment-checker/__fixtures__/download-probe.fixture.d.ts +1 -0
  125. package/dist/hooks/compaction-context-injector/validated-model.d.ts +2 -0
  126. package/dist/hooks/fsync-skip-warning/index.d.ts +4 -0
  127. package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +1 -0
  128. package/dist/hooks/hashline-edit-diff-enhancer/pending-captures.d.ts +13 -0
  129. package/dist/hooks/index.d.ts +1 -2
  130. package/dist/hooks/keyword-detector/hook.d.ts +9 -0
  131. package/dist/hooks/keyword-detector/ultrawork/index.d.ts +2 -0
  132. package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +0 -1
  133. package/dist/hooks/model-fallback/hook.d.ts +1 -1
  134. package/dist/hooks/plan-format-validator/hook.d.ts +19 -0
  135. package/dist/hooks/prometheus-md-only/agent-resolution.d.ts +2 -2
  136. package/dist/hooks/runtime-fallback/chat-message-handler.d.ts +2 -0
  137. package/dist/hooks/runtime-fallback/retry-model-payload.d.ts +1 -0
  138. package/dist/hooks/runtime-fallback/runtime-model-settings.d.ts +6 -0
  139. package/dist/hooks/runtime-fallback/session-status-handler.d.ts +1 -1
  140. package/dist/hooks/runtime-fallback/types.d.ts +3 -1
  141. package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +1 -1
  142. package/dist/hooks/todo-continuation-enforcer/types.d.ts +1 -0
  143. package/dist/hooks/{start-work → ulw-execute}/context-info-builder.d.ts +1 -1
  144. package/dist/hooks/{start-work → ulw-execute}/index.d.ts +1 -1
  145. package/dist/hooks/ulw-execute/ulw-execute-hook.d.ts +23 -0
  146. package/dist/hooks/unstable-agent-babysitter/task-message-analyzer.d.ts +1 -0
  147. package/dist/index.js +34199 -28037
  148. package/dist/mcp/index.d.ts +0 -4
  149. package/dist/mcp/types.d.ts +0 -1
  150. package/dist/oh-my-opencode.schema.json +28 -59
  151. package/dist/plugin/chat-message/types.d.ts +6 -4
  152. package/dist/plugin/chat-message/ulw-execute-message.d.ts +5 -0
  153. package/dist/plugin/event-session-lifecycle.d.ts +1 -0
  154. package/dist/plugin/hooks/create-core-hooks.d.ts +2 -2
  155. package/dist/plugin/hooks/create-session-hooks.d.ts +2 -3
  156. package/dist/plugin/hooks/create-transform-hooks.d.ts +2 -0
  157. package/dist/plugin/messages-transform.d.ts +1 -0
  158. package/dist/plugin/stop-continuation.d.ts +3 -0
  159. package/dist/plugin/system-transform.d.ts +5 -1
  160. package/dist/plugin-config/omo-config-chain.d.ts +1 -0
  161. package/dist/plugin-dispose.d.ts +3 -0
  162. package/dist/shared/agent-tool-restrictions.d.ts +0 -1
  163. package/dist/shared/compaction-agent-config-checkpoint.d.ts +1 -0
  164. package/dist/shared/index.d.ts +2 -0
  165. package/dist/shared/legacy-plugin-warning.d.ts +2 -1
  166. package/dist/shared/omo-process-sweep.d.ts +2 -4
  167. package/dist/shared/plugin-entry-migrator.d.ts +4 -3
  168. package/dist/shared/plugin-entry-shape.d.ts +6 -0
  169. package/dist/shared/runtime-fallback-retry-marker.d.ts +16 -0
  170. package/dist/shared/shell-env.d.ts +1 -1
  171. package/dist/skills/ast-grep/AGENTS.md +51 -0
  172. package/dist/skills/ast-grep/SKILL.md +13 -1
  173. package/dist/skills/coding-agent-sessions/AGENTS.md +62 -0
  174. package/dist/skills/coding-agent-sessions/SKILL.md +1 -1
  175. package/dist/skills/data-scientist/SKILL.md +99 -239
  176. package/dist/skills/data-scientist/references/execution-surfaces.md +91 -0
  177. package/dist/skills/data-scientist/references/placement.md +74 -0
  178. package/dist/skills/data-scientist/references/polars-lane.md +95 -0
  179. package/dist/skills/data-scientist/references/uv-setup.md +1 -1
  180. package/dist/skills/data-scientist/references/visualization.md +64 -0
  181. package/dist/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  182. package/dist/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  183. package/dist/skills/debugging/SKILL.md +3 -1
  184. package/dist/skills/debugging/references/methodology/00-setup.md +12 -0
  185. package/dist/skills/debugging/references/methodology/02-investigate.md +26 -5
  186. package/dist/skills/debugging/references/runtimes/go.md +15 -1
  187. package/dist/skills/debugging/references/runtimes/native-binary.md +38 -0
  188. package/dist/skills/debugging/references/runtimes/node.md +25 -0
  189. package/dist/skills/debugging/references/runtimes/python.md +13 -0
  190. package/dist/skills/debugging/references/runtimes/rust.md +41 -0
  191. package/dist/skills/debugging/references/scripts/dap.mjs +267 -0
  192. package/dist/skills/debugging/references/scripts/dap.test.ts +86 -0
  193. package/dist/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  194. package/dist/skills/debugging/references/tools/dap.md +103 -0
  195. package/dist/skills/debugging/references/tools/frida.md +193 -0
  196. package/dist/skills/debugging/references/tools/playwright-cli.md +79 -161
  197. package/dist/skills/frontend/ATTRIBUTION.md +10 -0
  198. package/dist/skills/frontend/SKILL.md +8 -3
  199. package/dist/skills/frontend/references/design/README.md +13 -4
  200. package/dist/skills/frontend/references/design/_INDEX.md +1 -0
  201. package/dist/skills/frontend/references/design/ambience-skill.md +145 -0
  202. package/dist/skills/frontend/references/design/aside.md +1 -1
  203. package/dist/skills/frontend/references/design/clone-from-url.md +1 -1
  204. package/dist/skills/frontend/references/design/design-system-architecture.md +1 -0
  205. package/dist/skills/frontend/references/design/interaction-skill.md +2 -0
  206. package/dist/skills/frontend/references/design/print-paged-media.md +76 -0
  207. package/dist/skills/frontend/references/designpowers/README.md +1 -1
  208. package/dist/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  209. package/dist/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  210. package/dist/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  211. package/dist/skills/frontend/references/designpowers/orchestration.md +1 -1
  212. package/dist/skills/frontend/references/designpowers/routing.md +5 -5
  213. package/dist/skills/frontend/references/perfection/README.md +1 -0
  214. package/dist/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  215. package/dist/skills/git-master/SKILL.md +1 -1
  216. package/dist/skills/init-deep/SKILL.md +14 -14
  217. package/dist/skills/lsp-setup/SKILL.md +1 -1
  218. package/dist/skills/programming/SKILL.md +1 -1
  219. package/dist/skills/refactor/SKILL.md +5 -5
  220. package/dist/skills/remove-ai-slops/SKILL.md +5 -5
  221. package/dist/skills/review-work/SKILL.md +101 -419
  222. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +32 -86
  223. package/dist/skills/ultimate-browsing/SKILL.md +32 -27
  224. package/dist/skills/ultimate-browsing/engine/AGENTS.md +111 -0
  225. package/dist/skills/ultimate-browsing/engine/templates/package.json +2 -2
  226. package/dist/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  227. package/dist/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  228. package/dist/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  229. package/dist/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  230. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +86 -95
  231. package/dist/skills/ultimate-browsing/references/insane-search/README.md +18 -5
  232. package/dist/skills/ultimate-browsing/references/insane-search/playwright.md +16 -13
  233. package/dist/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  234. package/dist/skills/{start-work → ulw-execute}/SKILL.md +24 -22
  235. package/dist/skills/ulw-plan/SKILL.md +5 -6
  236. package/dist/skills/ulw-plan/references/full-workflow.md +6 -5
  237. package/dist/skills/ulw-plan/references/intent-unclear.md +2 -2
  238. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -1
  239. package/dist/skills/ulw-research/SKILL.md +10 -5
  240. package/dist/skills/visual-qa/AGENTS.md +58 -0
  241. package/dist/skills/visual-qa/SKILL.md +4 -3
  242. package/dist/skills/visual-qa/references/browser-setup.md +75 -0
  243. package/dist/tools/delegate-task/builtin-categories.d.ts +3 -1
  244. package/dist/tools/delegate-task/builtin-category-definition.d.ts +2 -1
  245. package/dist/tools/delegate-task/constants.d.ts +2 -2
  246. package/dist/tools/delegate-task/openai-categories.d.ts +10 -3
  247. package/dist/tools/delegate-task/sync-session-cleanup.d.ts +3 -0
  248. package/dist/tools/delegate-task/sync-session-poller.d.ts +1 -0
  249. package/dist/tools/delegate-task/tool-description.d.ts +3 -1
  250. package/dist/tools/delegate-task/types.d.ts +4 -0
  251. package/dist/tools/session-manager/directory-filter.d.ts +2 -0
  252. package/dist/tui.d.ts +12 -0
  253. package/dist/tui.js +22186 -30577
  254. package/package.json +51 -50
  255. package/packages/git-bash-mcp/dist/cli.js +6 -1
  256. package/packages/git-bash-mcp/package.json +1 -1
  257. package/packages/lsp-core/src/index.ts +1 -0
  258. package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +9 -1
  259. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +100 -28
  260. package/packages/lsp-core/src/lsp/client-diagnostics-pull-timeout.test.ts +64 -0
  261. package/packages/lsp-core/src/lsp/client-wrapper-outside-cwd.test.ts +78 -0
  262. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +103 -6
  263. package/packages/lsp-core/src/lsp/client-wrapper.ts +50 -16
  264. package/packages/lsp-core/src/lsp/client.ts +32 -3
  265. package/packages/lsp-core/src/lsp/connection.ts +16 -0
  266. package/packages/lsp-core/src/lsp/constants.ts +6 -0
  267. package/packages/lsp-core/src/lsp/controlled-clock-test-support.ts +90 -0
  268. package/packages/lsp-core/src/lsp/errors.ts +15 -0
  269. package/packages/lsp-core/src/lsp/fixtures/workspace-edit-server.mjs +10 -3
  270. package/packages/lsp-core/src/lsp/format-document.test.ts +143 -0
  271. package/packages/lsp-core/src/lsp/format-document.ts +90 -0
  272. package/packages/lsp-core/src/lsp/json-rpc-connection.ts +11 -6
  273. package/packages/lsp-core/src/lsp/manager-lifecycle.test.ts +262 -0
  274. package/packages/lsp-core/src/lsp/manager-max-clients.test.ts +151 -0
  275. package/packages/lsp-core/src/lsp/manager.ts +138 -12
  276. package/packages/lsp-core/src/lsp/outside-context-workspace.ts +33 -0
  277. package/packages/lsp-core/src/lsp/server-definitions.ts +29 -0
  278. package/packages/lsp-core/src/lsp/server-installation.test.ts +376 -0
  279. package/packages/lsp-core/src/lsp/server-installation.ts +200 -27
  280. package/packages/lsp-core/src/lsp/server-resolution-local-binary.test.ts +170 -0
  281. package/packages/lsp-core/src/lsp/server-resolution.ts +18 -5
  282. package/packages/lsp-core/src/lsp/timer-provider.ts +13 -0
  283. package/packages/lsp-core/src/lsp/transport-request-timeout.test.ts +73 -0
  284. package/packages/lsp-core/src/lsp/transport.ts +16 -2
  285. package/packages/lsp-core/src/lsp/types.ts +8 -0
  286. package/packages/lsp-core/src/lsp/workspace-apply-edit-test-support.ts +29 -1
  287. package/packages/lsp-core/src/lsp/workspace-document-state.test.ts +84 -1
  288. package/packages/lsp-core/src/lsp/workspace-document-state.ts +35 -11
  289. package/packages/lsp-core/src/lsp/workspace-markers.ts +18 -0
  290. package/packages/lsp-core/src/mcp.ts +3 -0
  291. package/packages/lsp-core/src/request-context.test.ts +29 -0
  292. package/packages/lsp-core/src/request-context.ts +1 -1
  293. package/packages/lsp-core/src/tool-surface.test.ts +13 -1
  294. package/packages/lsp-core/src/tools/definitions.ts +14 -0
  295. package/packages/lsp-core/src/tools/format.test.ts +56 -0
  296. package/packages/lsp-core/src/tools/format.ts +56 -0
  297. package/packages/lsp-core/src/tools/index.ts +1 -0
  298. package/packages/lsp-core/src/tools/parameters.test.ts +51 -0
  299. package/packages/lsp-core/src/tools/types.ts +10 -0
  300. package/packages/lsp-daemon/dist/cli.js +1421 -960
  301. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  302. package/packages/lsp-daemon/dist/client.js +956 -498
  303. package/packages/lsp-daemon/dist/daemon-client.d.ts +3 -0
  304. package/packages/lsp-daemon/dist/daemon-client.js +23 -3
  305. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  306. package/packages/lsp-daemon/dist/ensure-daemon.js +27 -5
  307. package/packages/lsp-daemon/dist/index.js +860 -407
  308. package/packages/lsp-daemon/dist/ownership.js +2 -2
  309. package/packages/lsp-daemon/dist/proxy.js +3 -0
  310. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  311. package/packages/lsp-daemon/package.json +5 -4
  312. package/packages/lsp-tools-mcp/dist/cli.js +764 -341
  313. package/packages/lsp-tools-mcp/dist/lsp/manager.js +274 -138
  314. package/packages/lsp-tools-mcp/dist/mcp.js +789 -368
  315. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  316. package/packages/lsp-tools-mcp/dist/tools.js +719 -302
  317. package/packages/lsp-tools-mcp/package.json +5 -4
  318. package/packages/omo-codex/THIRD-PARTY-NOTICES.md +4 -21
  319. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  320. package/packages/omo-codex/plugin/.mcp.json +0 -6
  321. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  322. package/packages/omo-codex/plugin/README.md +6 -2
  323. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8402 -408
  324. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  325. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  326. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  327. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -1
  328. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  329. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  330. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  331. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  332. package/packages/omo-codex/plugin/components/comment-checker/package.json +6 -5
  333. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  334. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  335. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  336. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  337. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  338. package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +1 -1
  339. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -1
  340. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  341. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  342. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +2 -1
  343. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
  344. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  345. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  346. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
  347. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
  348. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
  349. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
  350. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  351. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +6 -5
  352. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +32 -28
  353. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
  354. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  355. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +137 -28
  356. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +4 -2
  357. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  358. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  359. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  360. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +977 -545
  361. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  362. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  363. package/packages/omo-codex/plugin/components/lsp/package.json +6 -5
  364. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  365. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  366. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  367. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  368. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  369. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  370. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  371. package/packages/omo-codex/plugin/components/rules/README.md +2 -0
  372. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  373. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +123 -0
  374. package/packages/omo-codex/plugin/components/rules/dist/cli.js +91 -68
  375. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  376. package/packages/omo-codex/plugin/components/rules/package.json +8 -7
  377. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  378. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  379. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +15 -5
  380. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  381. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  382. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  383. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
  384. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  385. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  386. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  387. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  388. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  389. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  390. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  391. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  392. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
  393. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -3
  394. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  395. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  396. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  397. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  398. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +29 -6
  399. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  400. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  401. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  402. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
  403. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  404. package/packages/omo-codex/plugin/components/teammode/package.json +6 -5
  405. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +4 -10
  406. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  407. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  408. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +5328 -1382
  409. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +5524 -1579
  410. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  411. package/packages/omo-codex/plugin/components/telemetry/package.json +6 -5
  412. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  413. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  414. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  415. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  416. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  417. package/packages/omo-codex/plugin/components/ultrawork/README.md +2 -0
  418. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  419. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
  420. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  421. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  422. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  423. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  424. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  425. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  426. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
  427. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
  428. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
  429. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +4 -4
  430. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  431. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +500 -4
  432. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  433. package/packages/omo-codex/plugin/components/ultrawork/package.json +6 -6
  434. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  435. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +4 -5
  436. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +5 -5
  437. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +2 -2
  438. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  439. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  440. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  441. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  442. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  443. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  444. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  445. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  446. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +4 -4
  447. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  448. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +6 -6
  449. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  450. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +11 -11
  451. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
  452. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -0
  453. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +13 -12
  454. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  455. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  456. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +4 -4
  457. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  458. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  459. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +1 -1
  460. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  461. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +4 -11
  462. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +24 -22
  463. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  464. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +17 -1
  465. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  466. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  467. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +44 -27
  468. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +18 -0
  469. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +30 -0
  470. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
  471. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
  472. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
  473. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
  474. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
  475. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
  476. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +57 -46
  477. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
  478. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
  479. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  480. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  481. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  482. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
  483. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2191 -737
  484. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  485. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +28 -8
  486. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +8 -5
  487. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +35 -23
  488. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
  489. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
  490. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +25 -9
  491. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
  492. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
  493. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
  494. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
  495. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
  496. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +24 -12
  497. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.d.ts +4 -0
  498. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.js +39 -0
  499. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +2 -0
  500. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +19 -4
  501. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.d.ts +19 -0
  502. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.js +108 -0
  503. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +6 -2
  504. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +54 -25
  505. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
  506. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
  507. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +10 -7
  508. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +121 -100
  509. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.d.ts +16 -0
  510. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.js +115 -0
  511. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +18 -0
  512. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +41 -0
  513. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  514. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  515. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  516. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  517. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  518. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  519. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  520. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  521. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +72 -117
  522. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
  523. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +25 -13
  524. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
  525. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +157 -0
  526. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +381 -0
  527. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +127 -0
  528. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +130 -0
  529. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
  530. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
  531. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
  532. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.d.ts +5 -0
  533. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.js +67 -0
  534. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +7 -1
  535. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +188 -59
  536. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +2 -0
  537. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +22 -0
  538. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +19 -0
  539. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +259 -0
  540. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +7 -0
  541. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +41 -0
  542. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +4 -4
  543. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
  544. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
  545. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
  546. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
  547. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +11 -11
  548. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +28 -23
  549. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
  550. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
  551. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +19 -0
  552. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +83 -0
  553. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +18 -5
  554. package/packages/omo-codex/plugin/components/ulw-loop/package.json +7 -6
  555. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +7 -2
  556. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +33 -10
  557. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +52 -0
  558. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
  559. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
  560. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  561. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +59 -77
  562. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
  563. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
  564. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  565. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +52 -46
  566. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
  567. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
  568. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +51 -33
  569. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  570. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
  571. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +27 -9
  572. package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
  573. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
  574. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +23 -16
  575. package/packages/omo-codex/plugin/components/ulw-loop/src/ledger.ts +38 -0
  576. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +32 -4
  577. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-commit.ts +132 -0
  578. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +67 -54
  579. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
  580. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +140 -119
  581. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-log.ts +112 -0
  582. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +61 -0
  583. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  584. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  585. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +71 -15
  586. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  587. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +92 -136
  588. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +38 -13
  589. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +218 -0
  590. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +156 -0
  591. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +143 -0
  592. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
  593. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-budget-io.ts +59 -0
  594. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +196 -52
  595. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +22 -0
  596. package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +257 -0
  597. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +45 -0
  598. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +4 -4
  599. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
  600. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
  601. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +12 -10
  602. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +27 -22
  603. package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
  604. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +115 -0
  605. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  606. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +131 -82
  607. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
  608. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
  609. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
  610. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
  611. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
  612. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
  613. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
  614. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
  615. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
  616. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
  617. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
  618. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
  619. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
  620. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +37 -2
  621. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +88 -11
  622. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  623. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/barrier.ts +13 -0
  624. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
  625. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-child.ts +65 -0
  626. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-cli-qa.mjs +76 -0
  627. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-crash.ts +23 -0
  628. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +58 -0
  629. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-writer.ts +65 -0
  630. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/lease-clock.ts +23 -0
  631. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
  632. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -0
  633. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
  634. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  635. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-log.test.ts +252 -0
  636. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-recovery.test.ts +190 -0
  637. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
  638. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +74 -25
  639. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-legacy-projection.test.ts +228 -0
  640. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-newest.test.ts +72 -0
  641. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  642. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  643. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
  644. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
  645. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  646. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +51 -2
  647. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  648. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  649. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +58 -3
  650. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
  651. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-completed-plan.test.ts +43 -0
  652. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
  653. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +174 -0
  654. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
  655. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +169 -0
  656. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +450 -7
  657. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +113 -0
  658. package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +310 -0
  659. package/packages/omo-codex/plugin/components/ulw-loop/test/status-next-actions-surface.test.ts +133 -0
  660. package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +12 -12
  661. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +12 -6
  662. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  663. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
  664. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +13 -8
  665. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  666. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  667. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  668. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  669. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  670. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  671. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  672. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  673. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
  674. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  675. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  676. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  677. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  678. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  679. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  680. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  681. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  682. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  683. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  684. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  685. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  686. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  687. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  688. package/packages/omo-codex/plugin/package-lock.json +992 -681
  689. package/packages/omo-codex/plugin/package.json +6 -3
  690. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  691. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  692. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  693. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  694. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  695. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  696. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
  697. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
  698. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
  699. package/packages/omo-codex/plugin/scripts/sync-skills.d.mts +4 -0
  700. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +111 -64
  701. package/packages/omo-codex/plugin/shared/package.json +3 -4
  702. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  703. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  704. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  705. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  706. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +13 -1
  707. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  708. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  709. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  710. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  711. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  712. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  713. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  714. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  715. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  716. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  717. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +3 -1
  718. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  719. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +26 -5
  720. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  721. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  722. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  723. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  724. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  725. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  726. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  727. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  728. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  729. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +79 -161
  730. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +10 -0
  731. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +8 -3
  732. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +13 -4
  733. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  734. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +145 -0
  735. package/packages/omo-codex/plugin/skills/frontend/references/design/aside.md +1 -1
  736. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  737. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +1 -0
  738. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +2 -0
  739. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  740. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  741. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  742. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  743. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  744. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  745. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  746. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -0
  747. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  748. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  749. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +20 -18
  750. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +4 -2
  751. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  752. package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -1
  753. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +11 -9
  754. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +11 -9
  755. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +116 -424
  756. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +32 -86
  757. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +32 -27
  758. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +111 -0
  759. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +2 -2
  760. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  761. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  762. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  763. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  764. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +86 -95
  765. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +18 -5
  766. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +16 -13
  767. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  768. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +44 -27
  769. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +35 -36
  770. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  771. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +31 -2
  772. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +33 -10
  773. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +4 -5
  774. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +5 -5
  775. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +2 -2
  776. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  777. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +16 -9
  778. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  779. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +10 -7
  780. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +75 -0
  781. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  782. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  783. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +16 -51
  784. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  785. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  786. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
  787. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  788. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  789. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  790. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -29
  791. package/packages/omo-codex/plugin/test/bootstrap-default-role.test.mjs +66 -0
  792. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  793. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  794. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  795. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  796. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +100 -2
  797. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
  798. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  799. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  800. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
  801. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
  802. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  803. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
  804. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +168 -0
  805. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +54 -24
  806. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +18 -119
  807. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  808. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  809. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  810. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  811. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  812. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -5
  813. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  814. package/packages/omo-codex/scripts/AGENTS.md +36 -0
  815. package/packages/omo-codex/scripts/check-model-catalog-parity.mjs +42 -0
  816. package/packages/omo-codex/scripts/install-cache-copy.test.mjs +27 -1
  817. package/packages/omo-codex/scripts/install-config-autonomous-features.test.mjs +1 -1
  818. package/packages/omo-codex/scripts/install-config-autonomous.test.mjs +2 -1
  819. package/packages/omo-codex/scripts/install-config-git-bash.test.mjs +0 -23
  820. package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +5 -5
  821. package/packages/omo-codex/scripts/install-config.test.mjs +15 -17
  822. package/packages/omo-codex/scripts/install-dist/install-local.mjs +16149 -4304
  823. package/packages/omo-codex/scripts/install-generated-bundle.test.mjs +3 -4
  824. package/packages/omo-codex/scripts/install-git-bash-mcp-env.test.mjs +1 -25
  825. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
  826. package/packages/omo-codex/scripts/install-mcp-runtime.test.mjs +0 -36
  827. package/packages/omo-codex/scripts/install-packaged-local.test.mjs +1 -6
  828. package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +44 -34
  829. package/packages/shared-skills/package.json +7 -1
  830. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  831. package/packages/shared-skills/skill-source-filter.mjs +44 -0
  832. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  833. package/packages/shared-skills/skills/ast-grep/SKILL.md +13 -1
  834. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  835. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  836. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  837. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  838. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  839. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  840. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  841. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  842. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  843. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  844. package/packages/shared-skills/skills/debugging/SKILL.md +3 -1
  845. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  846. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +26 -5
  847. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  848. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  849. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  850. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  851. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  852. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  853. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  854. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  855. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  856. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  857. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +79 -161
  858. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +10 -0
  859. package/packages/shared-skills/skills/frontend/SKILL.md +8 -3
  860. package/packages/shared-skills/skills/frontend/references/design/README.md +13 -4
  861. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  862. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +145 -0
  863. package/packages/shared-skills/skills/frontend/references/design/aside.md +1 -1
  864. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  865. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +1 -0
  866. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +2 -0
  867. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  868. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  869. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  870. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  871. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  872. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  873. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  874. package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -0
  875. package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  876. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  877. package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
  878. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  879. package/packages/shared-skills/skills/programming/SKILL.md +1 -1
  880. package/packages/shared-skills/skills/refactor/SKILL.md +5 -5
  881. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +5 -5
  882. package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
  883. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +32 -86
  884. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +32 -27
  885. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +111 -0
  886. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +2 -2
  887. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  888. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  889. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  890. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  891. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +86 -95
  892. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +18 -5
  893. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +16 -13
  894. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  895. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +24 -22
  896. package/packages/shared-skills/skills/ulw-plan/SKILL.md +5 -6
  897. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +6 -5
  898. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +2 -2
  899. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -1
  900. package/packages/shared-skills/skills/ulw-research/SKILL.md +10 -5
  901. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  902. package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
  903. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +75 -0
  904. package/postinstall.mjs +2 -0
  905. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  906. package/script/qa/xterm-live-terminal.mjs +18 -2
  907. package/.agents/skills/work-with-pr-workspace/evals/evals.json +0 -76
  908. package/.agents/skills/work-with-pr-workspace/iteration-1/benchmark.json +0 -138
  909. package/.agents/skills/work-with-pr-workspace/iteration-1/benchmark.md +0 -42
  910. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/eval_metadata.json +0 -57
  911. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/grading.json +0 -15
  912. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/code-changes.md +0 -454
  913. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/execution-plan.md +0 -136
  914. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/pr-description.md +0 -47
  915. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/verification-strategy.md +0 -163
  916. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/timing.json +0 -1
  917. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/grading.json +0 -15
  918. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/code-changes.md +0 -615
  919. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/execution-plan.md +0 -99
  920. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/pr-description.md +0 -50
  921. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/verification-strategy.md +0 -111
  922. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/timing.json +0 -1
  923. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/eval_metadata.json +0 -37
  924. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/grading.json +0 -11
  925. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/code-changes.md +0 -205
  926. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/execution-plan.md +0 -78
  927. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/pr-description.md +0 -42
  928. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/verification-strategy.md +0 -87
  929. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/timing.json +0 -1
  930. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/grading.json +0 -11
  931. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/code-changes.md +0 -334
  932. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/execution-plan.md +0 -86
  933. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/pr-description.md +0 -23
  934. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/verification-strategy.md +0 -119
  935. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/timing.json +0 -1
  936. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/eval_metadata.json +0 -32
  937. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/grading.json +0 -10
  938. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/code-changes.md +0 -221
  939. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/execution-plan.md +0 -104
  940. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/pr-description.md +0 -41
  941. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/verification-strategy.md +0 -84
  942. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/timing.json +0 -1
  943. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/grading.json +0 -10
  944. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/code-changes.md +0 -342
  945. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/execution-plan.md +0 -131
  946. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/pr-description.md +0 -39
  947. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/verification-strategy.md +0 -128
  948. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/timing.json +0 -1
  949. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/eval_metadata.json +0 -32
  950. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/grading.json +0 -10
  951. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/code-changes.md +0 -143
  952. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/execution-plan.md +0 -82
  953. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/pr-description.md +0 -51
  954. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/verification-strategy.md +0 -69
  955. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/timing.json +0 -1
  956. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/grading.json +0 -10
  957. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/code-changes.md +0 -252
  958. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/execution-plan.md +0 -83
  959. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/pr-description.md +0 -33
  960. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/verification-strategy.md +0 -101
  961. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/timing.json +0 -1
  962. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/eval_metadata.json +0 -32
  963. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/grading.json +0 -10
  964. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/code-changes.md +0 -387
  965. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/execution-plan.md +0 -112
  966. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/pr-description.md +0 -51
  967. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/verification-strategy.md +0 -75
  968. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/timing.json +0 -1
  969. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/grading.json +0 -10
  970. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/code-changes.md +0 -529
  971. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/execution-plan.md +0 -127
  972. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/pr-description.md +0 -42
  973. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/verification-strategy.md +0 -120
  974. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/timing.json +0 -1
  975. package/.agents/skills/work-with-pr-workspace/iteration-1/review.html +0 -1326
  976. package/.opencode/skills/work-with-pr-workspace/evals/evals.json +0 -76
  977. package/.opencode/skills/work-with-pr-workspace/iteration-1/benchmark.json +0 -138
  978. package/.opencode/skills/work-with-pr-workspace/iteration-1/benchmark.md +0 -42
  979. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/eval_metadata.json +0 -57
  980. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/grading.json +0 -15
  981. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/code-changes.md +0 -454
  982. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/execution-plan.md +0 -136
  983. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/pr-description.md +0 -47
  984. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/outputs/verification-strategy.md +0 -163
  985. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/with_skill/timing.json +0 -1
  986. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/grading.json +0 -15
  987. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/code-changes.md +0 -615
  988. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/execution-plan.md +0 -99
  989. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/pr-description.md +0 -50
  990. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/outputs/verification-strategy.md +0 -111
  991. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-1/without_skill/timing.json +0 -1
  992. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/eval_metadata.json +0 -37
  993. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/grading.json +0 -11
  994. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/code-changes.md +0 -205
  995. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/execution-plan.md +0 -78
  996. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/pr-description.md +0 -42
  997. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/outputs/verification-strategy.md +0 -87
  998. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/with_skill/timing.json +0 -1
  999. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/grading.json +0 -11
  1000. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/code-changes.md +0 -334
  1001. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/execution-plan.md +0 -86
  1002. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/pr-description.md +0 -23
  1003. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/outputs/verification-strategy.md +0 -119
  1004. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-2/without_skill/timing.json +0 -1
  1005. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/eval_metadata.json +0 -32
  1006. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/grading.json +0 -10
  1007. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/code-changes.md +0 -221
  1008. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/execution-plan.md +0 -104
  1009. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/pr-description.md +0 -41
  1010. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/verification-strategy.md +0 -84
  1011. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/timing.json +0 -1
  1012. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/grading.json +0 -10
  1013. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/code-changes.md +0 -342
  1014. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/execution-plan.md +0 -131
  1015. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/pr-description.md +0 -39
  1016. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/verification-strategy.md +0 -128
  1017. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/timing.json +0 -1
  1018. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/eval_metadata.json +0 -32
  1019. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/grading.json +0 -10
  1020. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/code-changes.md +0 -143
  1021. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/execution-plan.md +0 -82
  1022. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/pr-description.md +0 -51
  1023. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/outputs/verification-strategy.md +0 -69
  1024. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/with_skill/timing.json +0 -1
  1025. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/grading.json +0 -10
  1026. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/code-changes.md +0 -252
  1027. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/execution-plan.md +0 -83
  1028. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/pr-description.md +0 -33
  1029. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/outputs/verification-strategy.md +0 -101
  1030. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-4/without_skill/timing.json +0 -1
  1031. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/eval_metadata.json +0 -32
  1032. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/grading.json +0 -10
  1033. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/code-changes.md +0 -387
  1034. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/execution-plan.md +0 -112
  1035. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/pr-description.md +0 -51
  1036. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/outputs/verification-strategy.md +0 -75
  1037. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/with_skill/timing.json +0 -1
  1038. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/grading.json +0 -10
  1039. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/code-changes.md +0 -529
  1040. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/execution-plan.md +0 -127
  1041. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/pr-description.md +0 -42
  1042. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/outputs/verification-strategy.md +0 -120
  1043. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-5/without_skill/timing.json +0 -1
  1044. package/.opencode/skills/work-with-pr-workspace/iteration-1/review.html +0 -1326
  1045. package/dist/config/schema/codegraph.d.ts +0 -12
  1046. package/dist/config/schema/start-work.d.ts +0 -5
  1047. package/dist/features/builtin-commands/templates/start-work.d.ts +0 -1
  1048. package/dist/features/builtin-skills/index.d.ts +0 -1
  1049. package/dist/features/builtin-skills/skill-file-loader.d.ts +0 -1
  1050. package/dist/features/builtin-skills/skills/agent-browser-skill.d.ts +0 -1
  1051. package/dist/features/builtin-skills/skills/agent-browser-template.d.ts +0 -1
  1052. package/dist/features/builtin-skills/skills/debugging.d.ts +0 -1
  1053. package/dist/features/builtin-skills/skills/dev-browser.d.ts +0 -1
  1054. package/dist/features/builtin-skills/skills/frontend.d.ts +0 -1
  1055. package/dist/features/builtin-skills/skills/git-master-sections/commit-atomic-planning.d.ts +0 -1
  1056. package/dist/features/builtin-skills/skills/git-master-sections/commit-context-analysis.d.ts +0 -1
  1057. package/dist/features/builtin-skills/skills/git-master-sections/commit-execution-verification.d.ts +0 -1
  1058. package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +0 -1
  1059. package/dist/features/builtin-skills/skills/git-master-sections/history-search-workflow.d.ts +0 -1
  1060. package/dist/features/builtin-skills/skills/git-master-sections/overview.d.ts +0 -1
  1061. package/dist/features/builtin-skills/skills/git-master-sections/quick-reference.d.ts +0 -1
  1062. package/dist/features/builtin-skills/skills/git-master-sections/rebase-workflow.d.ts +0 -1
  1063. package/dist/features/builtin-skills/skills/git-master-skill-metadata.d.ts +0 -1
  1064. package/dist/features/builtin-skills/skills/git-master.d.ts +0 -1
  1065. package/dist/features/builtin-skills/skills/index.d.ts +0 -1
  1066. package/dist/features/builtin-skills/skills/init-deep.d.ts +0 -1
  1067. package/dist/features/builtin-skills/skills/playwright-cli.d.ts +0 -1
  1068. package/dist/features/builtin-skills/skills/playwright-mcp-skill.d.ts +0 -1
  1069. package/dist/features/builtin-skills/skills/playwright.d.ts +0 -1
  1070. package/dist/features/builtin-skills/skills/remove-ai-slops.d.ts +0 -1
  1071. package/dist/features/builtin-skills/skills/review-work.d.ts +0 -1
  1072. package/dist/features/builtin-skills/skills/security-research.d.ts +0 -1
  1073. package/dist/features/builtin-skills/skills/security-review.d.ts +0 -1
  1074. package/dist/features/builtin-skills/skills/team-mode.d.ts +0 -1
  1075. package/dist/features/builtin-skills/skills/visual-qa.d.ts +0 -1
  1076. package/dist/features/builtin-skills/skills.d.ts +0 -1
  1077. package/dist/features/builtin-skills/types.d.ts +0 -1
  1078. package/dist/features/claude-code-plugin-loader/agent-loader.d.ts +0 -1
  1079. package/dist/features/claude-code-plugin-loader/command-loader.d.ts +0 -1
  1080. package/dist/features/claude-code-plugin-loader/discovery-core.d.ts +0 -1
  1081. package/dist/features/claude-code-plugin-loader/discovery-paths.d.ts +0 -1
  1082. package/dist/features/claude-code-plugin-loader/discovery.d.ts +0 -1
  1083. package/dist/features/claude-code-plugin-loader/hook-loader.d.ts +0 -1
  1084. package/dist/features/claude-code-plugin-loader/index.d.ts +0 -1
  1085. package/dist/features/claude-code-plugin-loader/install-path-resolver.d.ts +0 -1
  1086. package/dist/features/claude-code-plugin-loader/installed-plugin-database.d.ts +0 -1
  1087. package/dist/features/claude-code-plugin-loader/loaded-plugin.d.ts +0 -1
  1088. package/dist/features/claude-code-plugin-loader/loader.d.ts +0 -1
  1089. package/dist/features/claude-code-plugin-loader/mcp-server-loader.d.ts +0 -1
  1090. package/dist/features/claude-code-plugin-loader/plugin-key.d.ts +0 -1
  1091. package/dist/features/claude-code-plugin-loader/plugin-manifest.d.ts +0 -1
  1092. package/dist/features/claude-code-plugin-loader/plugin-path-resolver.d.ts +0 -1
  1093. package/dist/features/claude-code-plugin-loader/plugin-settings.d.ts +0 -1
  1094. package/dist/features/claude-code-plugin-loader/scope-filter.d.ts +0 -1
  1095. package/dist/features/claude-code-plugin-loader/skill-loader.d.ts +0 -1
  1096. package/dist/features/claude-code-plugin-loader/types.d.ts +0 -1
  1097. package/dist/hooks/codegraph-bootstrap/command-runner.d.ts +0 -17
  1098. package/dist/hooks/codegraph-bootstrap/hook.d.ts +0 -35
  1099. package/dist/hooks/codegraph-bootstrap/index.d.ts +0 -1
  1100. package/dist/hooks/codegraph-bootstrap/project-root.d.ts +0 -1
  1101. package/dist/hooks/codegraph-bootstrap/status.d.ts +0 -11
  1102. package/dist/hooks/ralph-loop/completion-promise-detector-test-input.d.ts +0 -11
  1103. package/dist/hooks/ralph-loop/loop-session-recovery.d.ts +0 -7
  1104. package/dist/hooks/start-work/start-work-hook.d.ts +0 -23
  1105. package/dist/mcp/codegraph.d.ts +0 -16
  1106. package/dist/plugin/chat-message/start-work-message.d.ts +0 -5
  1107. package/dist/shared/prompt-async-gate/message-inspection-error.d.ts +0 -1
  1108. package/dist/shared/prompt-async-gate/pending-tool-turn.d.ts +0 -1
  1109. package/dist/shared/prompt-async-gate/prompt-message-state.d.ts +0 -1
  1110. package/dist/shared/prompt-async-gate/queue.d.ts +0 -1
  1111. package/dist/shared/prompt-async-gate/recent-dispatches.d.ts +0 -1
  1112. package/dist/shared/prompt-async-gate/reservations.d.ts +0 -1
  1113. package/dist/shared/prompt-async-gate/semantic-dedupe.d.ts +0 -1
  1114. package/dist/shared/prompt-async-gate/session-idle-dispatch.d.ts +0 -1
  1115. package/dist/shared/prompt-async-gate/timing.d.ts +0 -1
  1116. package/dist/shared/prompt-async-gate/types.d.ts +0 -1
  1117. package/dist/skills/data-scientist/references/common-scenarios.md +0 -176
  1118. package/dist/skills/data-scientist/references/execution-templates.md +0 -197
  1119. package/dist/skills/data-scientist/references/integration-patterns.md +0 -153
  1120. package/dist/skills/data-scientist/references/performance-benchmarks.md +0 -37
  1121. package/dist/skills/visual-qa/references/agent-browser-setup.md +0 -45
  1122. package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
  1123. package/dist/tools/call-omo-agent/message-storage-directory.d.ts +0 -1
  1124. package/dist/tools/delegate-task/anthropic-categories.d.ts +0 -2
  1125. package/dist/tools/delegate-task/model-string-parser.d.ts +0 -1
  1126. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  1127. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  1128. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  1129. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  1130. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  1131. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  1132. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  1133. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  1134. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12244
  1135. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9842
  1136. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  1137. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  1138. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  1139. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  1140. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  1141. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  1142. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  1143. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  1144. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  1145. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  1146. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  1147. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  1148. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  1149. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  1150. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  1151. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  1152. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  1153. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  1154. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  1155. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  1156. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  1157. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  1158. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  1159. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  1160. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  1161. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  1162. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  1163. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  1164. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  1165. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  1166. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  1167. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  1168. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  1169. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  1170. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  1171. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  1172. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  1173. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  1174. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  1175. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  1176. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  1177. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  1178. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  1179. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  1180. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  1181. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  1182. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  1183. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  1184. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  1185. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  1186. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  1187. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  1188. package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -477
  1189. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  1190. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  1191. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  1192. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  1193. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  1194. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  1195. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  1196. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  1197. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  1198. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  1199. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  1200. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  1201. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  1202. package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +0 -45
  1203. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  1204. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  1205. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  1206. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  1207. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
  1208. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  1209. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  1210. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  1211. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  1212. package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +0 -45
  1213. /package/dist/hooks/{start-work → ulw-execute}/context-info-formatters.d.ts +0 -0
  1214. /package/dist/hooks/{start-work → ulw-execute}/explicit-plan-context.d.ts +0 -0
  1215. /package/dist/hooks/{start-work → ulw-execute}/notepad-scaffold.d.ts +0 -0
  1216. /package/dist/hooks/{start-work → ulw-execute}/parse-user-request.d.ts +0 -0
  1217. /package/dist/hooks/{start-work → ulw-execute}/plan-discovery-context.d.ts +0 -0
  1218. /package/dist/hooks/{start-work → ulw-execute}/plan-selection.d.ts +0 -0
  1219. /package/dist/hooks/{start-work → ulw-execute}/session-plan-affinity.d.ts +0 -0
  1220. /package/dist/hooks/{start-work → ulw-execute}/work-initializer.d.ts +0 -0
  1221. /package/dist/hooks/{start-work → ulw-execute}/worktree-block.d.ts +0 -0
  1222. /package/dist/hooks/{start-work → ulw-execute}/worktree-detector.d.ts +0 -0
  1223. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  1224. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  1225. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  1226. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  1227. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  1228. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  1229. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  1230. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  1231. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  1232. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  1233. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  1234. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  1235. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  1236. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  // ../lsp-core/src/lsp/client-wrapper.ts
2
- import { existsSync as existsSync9, realpathSync as realpathSync4, statSync as statSync3 } from "node:fs";
3
- import { basename as basename3, dirname as dirname6, join as join4, resolve as resolve7 } from "node:path";
2
+ import { existsSync as existsSync10, realpathSync as realpathSync5, statSync as statSync3 } from "node:fs";
3
+ import { basename as basename3, dirname as dirname8, join as join5, resolve as resolve8 } from "node:path";
4
4
 
5
5
  // ../lsp-core/src/request-context.ts
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -9,18 +9,17 @@ import { homedir } from "node:os";
9
9
  import { basename, delimiter, dirname, isAbsolute, join, relative, resolve } from "node:path";
10
10
 
11
11
  class LspRequestContextParseError extends Error {
12
- code;
13
- name = "LspRequestContextParseError";
14
12
  constructor(code, message) {
15
13
  super(message);
16
14
  this.code = code;
15
+ this.name = "LspRequestContextParseError";
17
16
  }
18
17
  }
19
18
 
20
19
  class LspRequestContextUnavailableError extends Error {
21
- name = "LspRequestContextUnavailableError";
22
20
  constructor() {
23
21
  super("LSP request context is required. Standalone MCP startup must install one with runWithRequestContext(createStandaloneMcpRequestContext()).");
22
+ this.name = "LspRequestContextUnavailableError";
24
23
  }
25
24
  }
26
25
  var storage = new AsyncLocalStorage;
@@ -50,7 +49,7 @@ function contextEnv(key) {
50
49
  }
51
50
  function createStandaloneMcpRequestContext(input = {}) {
52
51
  const env = input.env ?? process.env;
53
- const cwd = canonicalCwd(input.cwd ?? process.cwd());
52
+ const cwd = canonicalCwd(input.cwd ?? env["LSP_TOOLS_MCP_CWD"] ?? process.cwd());
54
53
  const home = input.homeDir ?? homedir();
55
54
  const projectConfigPaths = translateProjectConfigEnv(env["LSP_TOOLS_MCP_PROJECT_CONFIG"], cwd);
56
55
  const userConfigPath = translateHomeConfigEnv(env["LSP_TOOLS_MCP_USER_CONFIG"], home, ".codex/lsp-client.json");
@@ -193,22 +192,15 @@ function effectiveExtension(filePath) {
193
192
 
194
193
  // ../lsp-core/src/lsp/errors.ts
195
194
  class LspConnectionClosedError extends Error {
196
- serverId;
197
- root;
198
- name = "LspConnectionClosedError";
199
195
  constructor(serverId, root, message) {
200
196
  super(message ?? `LSP connection closed for ${serverId} at ${root}`);
201
197
  this.serverId = serverId;
202
198
  this.root = root;
199
+ this.name = "LspConnectionClosedError";
203
200
  }
204
201
  }
205
202
 
206
203
  class LspProcessExitedError extends Error {
207
- serverId;
208
- root;
209
- exitCode;
210
- stderrTail;
211
- name = "LspProcessExitedError";
212
204
  constructor(serverId, root, exitCode, stderrTail) {
213
205
  const stderrSuffix = stderrTail ? `
214
206
  stderr tail: ${stderrTail}` : "";
@@ -217,46 +209,59 @@ stderr tail: ${stderrTail}` : "";
217
209
  this.root = root;
218
210
  this.exitCode = exitCode;
219
211
  this.stderrTail = stderrTail;
212
+ this.name = "LspProcessExitedError";
220
213
  }
221
214
  }
222
215
 
223
216
  class LspRequestTimeoutError extends Error {
224
- method;
225
- stderrTail;
226
- name = "LspRequestTimeoutError";
227
217
  constructor(method, stderrTail) {
228
218
  const stderrSuffix = stderrTail ? `
229
219
  recent stderr: ${stderrTail}` : "";
230
220
  super(`LSP request timeout (method: ${method})${stderrSuffix}`);
231
221
  this.method = method;
232
222
  this.stderrTail = stderrTail;
223
+ this.name = "LspRequestTimeoutError";
233
224
  }
234
225
  }
235
226
 
236
227
  class LspInvalidPathError extends Error {
237
- name = "LspInvalidPathError";
228
+ constructor() {
229
+ super(...arguments);
230
+ this.name = "LspInvalidPathError";
231
+ }
238
232
  }
239
233
 
240
234
  class LspServerLookupError extends Error {
241
- lookup;
242
- name = "LspServerLookupError";
243
235
  constructor(message, lookup) {
244
236
  super(message);
245
237
  this.lookup = lookup;
238
+ this.name = "LspServerLookupError";
246
239
  }
247
240
  }
248
241
 
249
242
  class LspServerInitializingError extends Error {
250
- originalError;
251
- name = "LspServerInitializingError";
252
243
  constructor(originalError) {
253
244
  super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
254
245
  this.originalError = originalError;
246
+ this.name = "LspServerInitializingError";
255
247
  }
256
248
  }
257
249
 
258
250
  class LspProcessSpawnError extends Error {
259
- name = "LspProcessSpawnError";
251
+ constructor() {
252
+ super(...arguments);
253
+ this.name = "LspProcessSpawnError";
254
+ }
255
+ }
256
+
257
+ class LspClientRespawnBudgetExceededError extends Error {
258
+ constructor(serverId, root, retryLimit) {
259
+ super(`LSP server ${serverId} at ${root} failed to stay alive; respawn budget exhausted ` + `(${retryLimit} consecutive dead generations). Retrying after the cooldown may succeed.`);
260
+ this.serverId = serverId;
261
+ this.root = root;
262
+ this.retryLimit = retryLimit;
263
+ this.name = "LspClientRespawnBudgetExceededError";
264
+ }
260
265
  }
261
266
  function isLspDeadConnectionError(err) {
262
267
  return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
@@ -279,6 +284,13 @@ import { pathToFileURL as pathToFileURL3 } from "node:url";
279
284
  // ../lsp-core/src/lsp/connection.ts
280
285
  import { pathToFileURL } from "node:url";
281
286
 
287
+ // ../lsp-core/src/lsp/timer-provider.ts
288
+ var realTimerProvider = {
289
+ now: () => Date.now(),
290
+ setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
291
+ clearTimeout: (handle) => clearTimeout(handle)
292
+ };
293
+
282
294
  // ../lsp-core/src/lsp/constants.ts
283
295
  var DEFAULT_MAX_REFERENCES = 200;
284
296
  var DEFAULT_MAX_SYMBOLS = 200;
@@ -287,9 +299,12 @@ var DEFAULT_MAX_DIRECTORY_FILES = 50;
287
299
  var REQUEST_TIMEOUT_MS = 15000;
288
300
  var INIT_TIMEOUT_MS = 60000;
289
301
  var IDLE_TIMEOUT_MS = 5 * 60000;
302
+ var MAX_RESIDENT_CLIENTS = 6;
290
303
  var REAPER_INTERVAL_MS = 60000;
291
304
  var STOP_HARD_KILL_TIMEOUT_MS = 5000;
292
305
  var STOP_SIGKILL_GRACE_MS = 1000;
306
+ var CLIENT_RESPAWN_RETRY_LIMIT = 2;
307
+ var CLIENT_RESPAWN_COOLDOWN_MS = 60000;
293
308
 
294
309
  // ../lsp-core/src/lsp/json-rpc-connection.ts
295
310
  var HEADER_SEPARATOR = `\r
@@ -301,20 +316,31 @@ var METHOD_NOT_FOUND = -32601;
301
316
  var INTERNAL_ERROR = -32603;
302
317
 
303
318
  class JsonRpcConnection {
304
- reader;
305
- writer;
306
- pendingRequests = new Map;
307
- notificationHandlers = new Map;
308
- requestHandlers = new Map;
309
- closeHandlers = [];
310
- errorHandlers = [];
311
- inputBuffer = Buffer.alloc(0);
312
- nextRequestId = 1;
313
- listening = false;
314
- disposed = false;
315
319
  constructor(reader, writer) {
316
320
  this.reader = reader;
317
321
  this.writer = writer;
322
+ this.pendingRequests = new Map;
323
+ this.notificationHandlers = new Map;
324
+ this.requestHandlers = new Map;
325
+ this.closeHandlers = [];
326
+ this.errorHandlers = [];
327
+ this.inputBuffer = Buffer.alloc(0);
328
+ this.nextRequestId = 1;
329
+ this.listening = false;
330
+ this.disposed = false;
331
+ this.handleData = (chunk) => {
332
+ const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
333
+ this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
334
+ this.drainInputBuffer();
335
+ };
336
+ this.handleClose = () => {
337
+ for (const handler of this.closeHandlers) {
338
+ handler();
339
+ }
340
+ };
341
+ this.handleStreamError = (error) => {
342
+ this.emitError(error);
343
+ };
318
344
  }
319
345
  listen() {
320
346
  if (this.listening)
@@ -349,7 +375,8 @@ class JsonRpcConnection {
349
375
  let cancelAfterWrite = false;
350
376
  let settled = false;
351
377
  const writeCancel = () => this.writeMessage({ jsonrpc: "2.0", method: "$/cancelRequest", params: { id } });
352
- const responsePromise = new Promise((resolve2, reject) => {
378
+ let rejectAfterCancelWrite;
379
+ const responsePromise = new Promise((resolve, reject) => {
353
380
  const cleanup = () => {
354
381
  options.signal?.removeEventListener("abort", onAbort);
355
382
  };
@@ -360,22 +387,26 @@ class JsonRpcConnection {
360
387
  this.pendingRequests.delete(key);
361
388
  cleanup();
362
389
  const rejectCancelled = () => reject(abortError(options.signal));
390
+ rejectAfterCancelWrite = async () => {
391
+ try {
392
+ await writeCancel();
393
+ } catch (error) {
394
+ this.emitError(toError(error));
395
+ }
396
+ rejectCancelled();
397
+ };
363
398
  if (!requestWritten) {
364
399
  cancelAfterWrite = true;
365
- rejectCancelled();
366
400
  return;
367
401
  }
368
- writeCancel().then(rejectCancelled, (error) => {
369
- this.emitError(toError(error));
370
- rejectCancelled();
371
- });
402
+ rejectAfterCancelWrite();
372
403
  };
373
404
  const onAbort = () => settleCancel();
374
405
  this.pendingRequests.set(key, {
375
406
  resolve(result) {
376
407
  settled = true;
377
408
  cleanup();
378
- resolve2(result);
409
+ resolve(result);
379
410
  },
380
411
  reject(error) {
381
412
  settled = true;
@@ -396,7 +427,7 @@ class JsonRpcConnection {
396
427
  await this.writeMessage(message);
397
428
  requestWritten = true;
398
429
  if (cancelAfterWrite)
399
- await writeCancel();
430
+ await rejectAfterCancelWrite?.();
400
431
  } catch (error) {
401
432
  if (settled)
402
433
  return responsePromise;
@@ -435,19 +466,6 @@ class JsonRpcConnection {
435
466
  this.notificationHandlers.clear();
436
467
  this.requestHandlers.clear();
437
468
  }
438
- handleData = (chunk) => {
439
- const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
440
- this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
441
- this.drainInputBuffer();
442
- };
443
- handleClose = () => {
444
- for (const handler of this.closeHandlers) {
445
- handler();
446
- }
447
- };
448
- handleStreamError = (error) => {
449
- this.emitError(error);
450
- };
451
469
  drainInputBuffer() {
452
470
  while (true) {
453
471
  const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR);
@@ -547,13 +565,13 @@ class JsonRpcConnection {
547
565
  const payload = `Content-Length: ${Buffer.byteLength(body, "utf8")}\r
548
566
  \r
549
567
  ${body}`;
550
- return new Promise((resolve2, reject) => {
568
+ return new Promise((resolve, reject) => {
551
569
  this.writer.write(payload, (error) => {
552
570
  if (error) {
553
571
  reject(error);
554
572
  return;
555
573
  }
556
- resolve2();
574
+ resolve();
557
575
  });
558
576
  });
559
577
  }
@@ -640,9 +658,9 @@ function validateCwd(cwd) {
640
658
  }
641
659
  }
642
660
  function wrap(proc) {
643
- const exitedPromise = new Promise((resolve2) => {
644
- proc.once("close", (code) => resolve2(code ?? 0));
645
- proc.once("error", () => resolve2(1));
661
+ const exitedPromise = new Promise((resolve) => {
662
+ proc.once("close", (code) => resolve(code ?? 0));
663
+ proc.once("error", () => resolve(1));
646
664
  });
647
665
  if (!proc.stdin || !proc.stdout || !proc.stderr) {
648
666
  throw new LspProcessSpawnError("Spawned process is missing one of stdin/stdout/stderr pipes");
@@ -795,33 +813,29 @@ function isPosition(value) {
795
813
 
796
814
  // ../lsp-core/src/lsp/transport.ts
797
815
  class LspClientNotStartedError extends Error {
798
- serverId;
799
- root;
800
- name = "LspClientNotStartedError";
801
816
  constructor(serverId, root) {
802
817
  super("LSP client not started");
803
818
  this.serverId = serverId;
804
819
  this.root = root;
820
+ this.name = "LspClientNotStartedError";
805
821
  }
806
822
  }
807
823
 
808
824
  class LspClientTransport {
809
- root;
810
- server;
811
- proc = null;
812
- connection = null;
813
- stderrBuffer = [];
814
- processExited = false;
815
- diagnosticsStore = new Map;
816
- requestTimeoutMs;
817
- initializeTimeoutMs;
818
- workspaceApplyEditHandler = null;
819
- diagnosticPullSupported = false;
820
825
  constructor(root, server, timeouts = {}) {
821
826
  this.root = root;
822
827
  this.server = server;
828
+ this.proc = null;
829
+ this.connection = null;
830
+ this.stderrBuffer = [];
831
+ this.processExited = false;
832
+ this.diagnosticsStore = new Map;
833
+ this.workspaceApplyEditHandler = null;
834
+ this.diagnosticPullSupported = false;
835
+ this.documentFormattingSupported = false;
823
836
  this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
824
837
  this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
838
+ this.timerProvider = timeouts.timerProvider ?? realTimerProvider;
825
839
  }
826
840
  pid() {
827
841
  return this.proc?.pid;
@@ -841,6 +855,12 @@ class LspClientTransport {
841
855
  isDiagnosticPullSupported() {
842
856
  return this.diagnosticPullSupported;
843
857
  }
858
+ setDocumentFormattingSupported(supported) {
859
+ this.documentFormattingSupported = supported;
860
+ }
861
+ isDocumentFormattingSupported() {
862
+ return this.documentFormattingSupported;
863
+ }
844
864
  handlePublishDiagnostics(params) {
845
865
  this.diagnosticsStore.set(params.uri, [...params.diagnostics]);
846
866
  }
@@ -916,7 +936,7 @@ class LspClientTransport {
916
936
  const options = args[1];
917
937
  const timeoutMs = options?.timeoutMs ?? this.requestTimeoutMs;
918
938
  const timeoutController = new AbortController;
919
- const timeoutHandle = setTimeout(() => {
939
+ const timeoutHandle = this.timerProvider.setTimeout(() => {
920
940
  const stderrTail = this.stderrBuffer.slice(-5).join(`
921
941
  `);
922
942
  timeoutController.abort(new LspRequestTimeoutError(method, stderrTail || undefined));
@@ -935,7 +955,7 @@ class LspClientTransport {
935
955
  }
936
956
  throw error;
937
957
  } finally {
938
- clearTimeout(timeoutHandle);
958
+ this.timerProvider.clearTimeout(timeoutHandle);
939
959
  combinedSignal.dispose();
940
960
  }
941
961
  }
@@ -986,8 +1006,8 @@ class LspClientTransport {
986
1006
  try {
987
1007
  proc.kill();
988
1008
  let timeoutId;
989
- const timeoutPromise = new Promise((resolve2) => {
990
- timeoutId = setTimeout(resolve2, STOP_HARD_KILL_TIMEOUT_MS);
1009
+ const timeoutPromise = new Promise((resolve) => {
1010
+ timeoutId = setTimeout(resolve, STOP_HARD_KILL_TIMEOUT_MS);
991
1011
  });
992
1012
  await Promise.race([
993
1013
  proc.exited.then(() => {
@@ -1003,7 +1023,7 @@ class LspClientTransport {
1003
1023
  proc.kill("SIGKILL");
1004
1024
  await Promise.race([
1005
1025
  proc.exited,
1006
- new Promise((resolve2) => setTimeout(resolve2, STOP_SIGKILL_GRACE_MS))
1026
+ new Promise((resolve) => setTimeout(resolve, STOP_SIGKILL_GRACE_MS))
1007
1027
  ]);
1008
1028
  } catch (error) {
1009
1029
  reportBestEffortCleanupError("hard process kill", error instanceof Error ? error : String(error));
@@ -1054,6 +1074,14 @@ function supportsDiagnosticPull(capabilities) {
1054
1074
  return false;
1055
1075
  return Object.hasOwn(capabilities, "diagnosticProvider");
1056
1076
  }
1077
+ function supportsDocumentFormatting(capabilities) {
1078
+ if (capabilities === undefined)
1079
+ return false;
1080
+ const provider = capabilities.documentFormattingProvider;
1081
+ if (provider === undefined || provider === null || provider === false)
1082
+ return false;
1083
+ return provider === true || typeof provider === "object";
1084
+ }
1057
1085
 
1058
1086
  class LspClientConnection extends LspClientTransport {
1059
1087
  async initialize() {
@@ -1070,6 +1098,7 @@ class LspClientConnection extends LspClientTransport {
1070
1098
  references: {},
1071
1099
  documentSymbol: { hierarchicalDocumentSymbolSupport: true },
1072
1100
  publishDiagnostics: {},
1101
+ formatting: { dynamicRegistration: false },
1073
1102
  rename: {
1074
1103
  prepareSupport: true,
1075
1104
  prepareSupportDefaultBehavior: 1
@@ -1111,6 +1140,7 @@ class LspClientConnection extends LspClientTransport {
1111
1140
  initializationOptions: this.server.initialization
1112
1141
  }, { timeoutMs: this.initializeTimeoutMs });
1113
1142
  this.setDiagnosticPullSupported(supportsDiagnosticPull(result?.capabilities));
1143
+ this.setDocumentFormattingSupported(supportsDocumentFormatting(result?.capabilities));
1114
1144
  await this.sendNotification("initialized", {});
1115
1145
  await this.sendNotification("workspace/didChangeConfiguration", {
1116
1146
  settings: { json: { validate: { enable: true } } }
@@ -1306,6 +1336,17 @@ function canonicalPath(filePath) {
1306
1336
  return absolute;
1307
1337
  }
1308
1338
  }
1339
+ function normalizeDocumentUri(uri) {
1340
+ let decoded = uri;
1341
+ try {
1342
+ decoded = decodeURIComponent(uri);
1343
+ } catch {
1344
+ decoded = uri;
1345
+ }
1346
+ if (process.platform !== "win32")
1347
+ return decoded;
1348
+ return decoded.replace(/^(file:\/\/\/)([a-z]):/, (_match, prefix, drive) => `${prefix}${drive.toUpperCase()}:`);
1349
+ }
1309
1350
  function isSameOrDescendant(candidate, parent) {
1310
1351
  const suffix = relative2(parent, candidate);
1311
1352
  return suffix === "" || !suffix.startsWith("..") && suffix !== "..";
@@ -1316,17 +1357,18 @@ function movedPath(candidate, oldPath, newPath) {
1316
1357
  }
1317
1358
 
1318
1359
  class WorkspaceDocumentState {
1319
- sendNotification;
1320
- clearDiagnostics;
1321
- openDocuments = new Map;
1322
- openByUri = new Map;
1323
- openPromises = new Map;
1324
- now;
1325
- versionlessPublishQuiescenceMs;
1326
1360
  constructor(sendNotification, clearDiagnostics, options = {}) {
1327
1361
  this.sendNotification = sendNotification;
1328
1362
  this.clearDiagnostics = clearDiagnostics;
1329
- this.now = options.now ?? (() => Date.now());
1363
+ this.openDocuments = new Map;
1364
+ this.openByUri = new Map;
1365
+ this.openPromises = new Map;
1366
+ this.timerProvider = options.timerProvider ?? {
1367
+ now: options.now ?? (() => Date.now()),
1368
+ setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
1369
+ clearTimeout: (handle) => clearTimeout(handle)
1370
+ };
1371
+ this.now = () => this.timerProvider.now();
1330
1372
  this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
1331
1373
  }
1332
1374
  async openFile(filePath) {
@@ -1348,7 +1390,7 @@ class WorkspaceDocumentState {
1348
1390
  return this.openDocuments.get(canonicalPath(filePath))?.version;
1349
1391
  }
1350
1392
  getStoredDiagnostics(uri) {
1351
- const state = this.openByUri.get(uri);
1393
+ const state = this.openByUri.get(normalizeDocumentUri(uri));
1352
1394
  if (!state)
1353
1395
  return [];
1354
1396
  return state.lastPublish?.diagnostics ?? state.pullCache?.diagnostics ?? [];
@@ -1370,13 +1412,13 @@ class WorkspaceDocumentState {
1370
1412
  return state !== undefined && state.uri === snapshot.uri && state.version === snapshot.version && state.generation === snapshot.documentGeneration;
1371
1413
  }
1372
1414
  getPullCache(snapshot) {
1373
- const state = this.openByUri.get(snapshot.uri);
1415
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1374
1416
  if (!state?.pullCache || state.pullCache.documentVersion !== snapshot.version)
1375
1417
  return null;
1376
1418
  return state.pullCache;
1377
1419
  }
1378
1420
  recordPullDiagnostics(snapshot, report) {
1379
- const state = this.openByUri.get(snapshot.uri);
1421
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1380
1422
  if (!state)
1381
1423
  return;
1382
1424
  state.pullCache = {
@@ -1386,7 +1428,7 @@ class WorkspaceDocumentState {
1386
1428
  };
1387
1429
  }
1388
1430
  recordPublishedDiagnostics(params) {
1389
- const state = this.openByUri.get(params.uri);
1431
+ const state = this.openByUri.get(normalizeDocumentUri(params.uri));
1390
1432
  if (!state)
1391
1433
  return;
1392
1434
  state.publishGeneration += 1;
@@ -1400,7 +1442,7 @@ class WorkspaceDocumentState {
1400
1442
  this.notifyWaiters(state);
1401
1443
  }
1402
1444
  resolvePushDiagnostics(snapshot) {
1403
- const state = this.openByUri.get(snapshot.uri);
1445
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1404
1446
  if (!state?.lastPublish)
1405
1447
  return { status: "missing" };
1406
1448
  const publish = state.lastPublish;
@@ -1414,20 +1456,22 @@ class WorkspaceDocumentState {
1414
1456
  return waitMs === 0 ? { status: "ready", diagnostics: publish.diagnostics } : { status: "wait", waitMs };
1415
1457
  }
1416
1458
  waitForDiagnosticsActivity(snapshot, timeoutMs) {
1417
- const state = this.openByUri.get(snapshot.uri);
1459
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1418
1460
  if (!state || timeoutMs <= 0)
1419
1461
  return Promise.resolve();
1462
+ if (state.publishGeneration !== snapshot.publishGeneration)
1463
+ return Promise.resolve();
1420
1464
  return new Promise((resolveActivity) => {
1421
1465
  let settled = false;
1422
1466
  const finish = () => {
1423
1467
  if (settled)
1424
1468
  return;
1425
1469
  settled = true;
1426
- clearTimeout(timer);
1470
+ this.timerProvider.clearTimeout(timer);
1427
1471
  state.waiters.delete(finish);
1428
1472
  resolveActivity();
1429
1473
  };
1430
- const timer = setTimeout(finish, timeoutMs);
1474
+ const timer = this.timerProvider.setTimeout(finish, timeoutMs);
1431
1475
  if (typeof timer.unref === "function")
1432
1476
  timer.unref();
1433
1477
  state.waiters.add(finish);
@@ -1535,7 +1579,7 @@ class WorkspaceDocumentState {
1535
1579
  waiters: new Set
1536
1580
  };
1537
1581
  this.openDocuments.set(path, state);
1538
- this.openByUri.set(state.uri, state);
1582
+ this.openByUri.set(normalizeDocumentUri(state.uri), state);
1539
1583
  this.notifyWaiters(state);
1540
1584
  await this.sendNotification("textDocument/didOpen", {
1541
1585
  textDocument: { uri: state.uri, languageId: state.languageId, version: state.version, text }
@@ -1560,7 +1604,7 @@ class WorkspaceDocumentState {
1560
1604
  }
1561
1605
  async closeDocument(state) {
1562
1606
  this.openDocuments.delete(state.path);
1563
- this.openByUri.delete(state.uri);
1607
+ this.openByUri.delete(normalizeDocumentUri(state.uri));
1564
1608
  this.clearDiagnostics(state.uri);
1565
1609
  this.notifyWaiters(state);
1566
1610
  await this.sendNotification("textDocument/didClose", { textDocument: { uri: state.uri } });
@@ -1589,13 +1633,11 @@ import { dirname as dirname2, isAbsolute as isAbsolute2, relative as relative3,
1589
1633
  import { fileURLToPath } from "node:url";
1590
1634
 
1591
1635
  class WorkspaceEditPathError extends Error {
1592
- path;
1593
- detail;
1594
- name = "WorkspaceEditPathError";
1595
1636
  constructor(path, detail) {
1596
1637
  super(`${detail}: ${path}`);
1597
1638
  this.path = path;
1598
1639
  this.detail = detail;
1640
+ this.name = "WorkspaceEditPathError";
1599
1641
  }
1600
1642
  }
1601
1643
  function isPathInsideWorkspace(filePath, workspaceRoot) {
@@ -1887,13 +1929,11 @@ function canonicalFingerprint(operations) {
1887
1929
 
1888
1930
  // ../lsp-core/src/lsp/workspace-edit-types.ts
1889
1931
  class WorkspaceEditValidationError extends Error {
1890
- changeIndex;
1891
- detail;
1892
- name = "WorkspaceEditValidationError";
1893
1932
  constructor(changeIndex, detail) {
1894
1933
  super(`change ${changeIndex}: ${detail}`);
1895
1934
  this.changeIndex = changeIndex;
1896
1935
  this.detail = detail;
1936
+ this.name = "WorkspaceEditValidationError";
1897
1937
  }
1898
1938
  }
1899
1939
 
@@ -1979,14 +2019,14 @@ function parseSinglePathResource(input, kind) {
1979
2019
  return;
1980
2020
  }
1981
2021
  if (kind === "create") {
1982
- const options2 = parseOptions(change["options"], ["overwrite", "ignoreIfExists"], changeIndex);
2022
+ const options = parseOptions(change["options"], ["overwrite", "ignoreIfExists"], changeIndex);
1983
2023
  target.operations.push({
1984
2024
  kind,
1985
2025
  changeIndex,
1986
2026
  path: resolvedPath.path,
1987
2027
  reportedPath: resolvedPath.requestedPath,
1988
- overwrite: options2["overwrite"] ?? false,
1989
- ignoreIfExists: options2["ignoreIfExists"] ?? false,
2028
+ overwrite: options["overwrite"] ?? false,
2029
+ ignoreIfExists: options["ignoreIfExists"] ?? false,
1990
2030
  followedSymbolicLink: resolvedPath.followedSymbolicLink
1991
2031
  });
1992
2032
  return;
@@ -2391,10 +2431,9 @@ function simulateDelete(operation, virtual) {
2391
2431
  import { existsSync as existsSync5, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
2392
2432
  import { dirname as dirname4, resolve as resolve5 } from "node:path";
2393
2433
  class WorkspaceSnapshotBuilder {
2394
- workspaceRoot;
2395
- snapshots = new Map;
2396
2434
  constructor(workspaceRoot) {
2397
2435
  this.workspaceRoot = workspaceRoot;
2436
+ this.snapshots = new Map;
2398
2437
  }
2399
2438
  build(operations) {
2400
2439
  this.add(this.workspaceRoot, false);
@@ -2438,8 +2477,10 @@ function snapshotOperations(operations, workspaceRoot) {
2438
2477
 
2439
2478
  // ../lsp-core/src/lsp/workspace-edit-plan.ts
2440
2479
  class PlanPathIndex {
2441
- firstChangeByPath = new Map;
2442
- reportedPathByCanonical = new Map;
2480
+ constructor() {
2481
+ this.firstChangeByPath = new Map;
2482
+ this.reportedPathByCanonical = new Map;
2483
+ }
2443
2484
  build(operations) {
2444
2485
  for (const operation of operations) {
2445
2486
  switch (operation.kind) {
@@ -2455,11 +2496,11 @@ class PlanPathIndex {
2455
2496
  }
2456
2497
  }
2457
2498
  }
2458
- add(path, reportedPath2, changeIndex) {
2499
+ add(path, reportedPath, changeIndex) {
2459
2500
  if (!this.firstChangeByPath.has(path))
2460
2501
  this.firstChangeByPath.set(path, changeIndex);
2461
2502
  if (!this.reportedPathByCanonical.has(path))
2462
- this.reportedPathByCanonical.set(path, reportedPath2);
2503
+ this.reportedPathByCanonical.set(path, reportedPath);
2463
2504
  }
2464
2505
  }
2465
2506
  function fingerprintWorkspaceEdit(edit, workspaceRoot) {
@@ -2528,14 +2569,11 @@ function isRecord4(value) {
2528
2569
  }
2529
2570
 
2530
2571
  class WorkspaceMutationController {
2531
- workspaceRoot;
2532
- documents;
2533
- activeLease = null;
2534
- nextLeaseId = 1;
2535
- io;
2536
2572
  constructor(workspaceRoot, documents) {
2537
2573
  this.workspaceRoot = workspaceRoot;
2538
2574
  this.documents = documents;
2575
+ this.activeLease = null;
2576
+ this.nextLeaseId = 1;
2539
2577
  }
2540
2578
  setIo(io) {
2541
2579
  this.io = io;
@@ -2574,8 +2612,8 @@ class WorkspaceMutationController {
2574
2612
  };
2575
2613
  }
2576
2614
  lease.phase = "applying";
2577
- lease.applyCompletion = new Promise((resolve6) => {
2578
- lease.resolveApply = resolve6;
2615
+ lease.applyCompletion = new Promise((resolve) => {
2616
+ lease.resolveApply = resolve;
2579
2617
  });
2580
2618
  const edit = isRecord4(params) ? params["edit"] : undefined;
2581
2619
  const record = edit === undefined ? { fingerprint: null, result: failure("workspace/applyEdit params.edit is required", 0) } : await this.applyEdit(edit, lease);
@@ -2648,14 +2686,12 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
2648
2686
  var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
2649
2687
 
2650
2688
  class LspClient extends LspClientConnection {
2651
- diagnosticPullErrors = [];
2652
- documents;
2653
- workspaceMutations;
2654
- diagnosticsFreshnessTimeoutMs;
2655
2689
  constructor(root, server, options = {}) {
2656
2690
  super(root, server, options);
2691
+ this.diagnosticPullErrors = [];
2657
2692
  this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
2658
2693
  this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
2694
+ timerProvider: this.timerProvider,
2659
2695
  versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
2660
2696
  });
2661
2697
  this.workspaceMutations = new WorkspaceMutationController(root, this.documents);
@@ -2708,6 +2744,18 @@ class LspClient extends LspClientConnection {
2708
2744
  textDocument: { uri: pathToFileURL3(absPath).href }
2709
2745
  }, options);
2710
2746
  }
2747
+ async formatDocument(filePath, options, signal) {
2748
+ if (!this.isDocumentFormattingSupported())
2749
+ return null;
2750
+ const absPath = this.resolveWorkspacePath(filePath);
2751
+ await this.openFile(absPath);
2752
+ const requestOptions = signal === undefined ? {} : { signal };
2753
+ const edits = await this.sendRequest("textDocument/formatting", {
2754
+ textDocument: { uri: pathToFileURL3(absPath).href },
2755
+ options
2756
+ }, requestOptions);
2757
+ return edits ?? [];
2758
+ }
2711
2759
  async workspaceSymbols(query, signal) {
2712
2760
  const options = signal === undefined ? {} : { signal };
2713
2761
  return this.sendRequest("workspace/symbol", { query }, options);
@@ -2747,7 +2795,7 @@ class LspClient extends LspClientConnection {
2747
2795
  const absPath = this.resolveWorkspacePath(filePath);
2748
2796
  const uri = pathToFileURL3(absPath).href;
2749
2797
  await this.openFile(absPath);
2750
- const deadlineAt = Date.now() + this.diagnosticsFreshnessTimeoutMs;
2798
+ const deadlineAt = this.timerProvider.now() + this.diagnosticsFreshnessTimeoutMs;
2751
2799
  for (;; ) {
2752
2800
  signal?.throwIfAborted();
2753
2801
  const snapshot = this.documents.captureDiagnosticSnapshot(absPath);
@@ -2760,13 +2808,13 @@ class LspClient extends LspClientConnection {
2760
2808
  if (!pushFallbackOnly) {
2761
2809
  const cached = this.documents.getPullCache(snapshot);
2762
2810
  try {
2763
- const remainingMs2 = deadlineAt - Date.now();
2764
- if (remainingMs2 <= 0)
2811
+ const remainingMs = deadlineAt - this.timerProvider.now();
2812
+ if (remainingMs <= 0)
2765
2813
  return this.freshnessTimeout(absPath);
2766
2814
  const result = await this.sendRequest("textDocument/diagnostic", {
2767
2815
  textDocument: { uri },
2768
2816
  ...cached?.resultId === undefined ? {} : { previousResultId: cached.resultId }
2769
- }, { timeoutMs: remainingMs2, ...signal === undefined ? {} : { signal } });
2817
+ }, { timeoutMs: remainingMs, ...signal === undefined ? {} : { signal } });
2770
2818
  if (!this.documents.isCurrentSnapshot(snapshot))
2771
2819
  continue;
2772
2820
  const report = this.parseDiagnosticPullReport(result);
@@ -2795,7 +2843,7 @@ class LspClient extends LspClientConnection {
2795
2843
  }
2796
2844
  if (!pushFallbackOnly)
2797
2845
  continue;
2798
- const remainingMs = deadlineAt - Date.now();
2846
+ const remainingMs = deadlineAt - this.timerProvider.now();
2799
2847
  if (remainingMs <= 0) {
2800
2848
  if (!this.isDiagnosticPullSupported() && snapshot.publishGeneration === 0) {
2801
2849
  const cached = this.documents.getPullCache(snapshot);
@@ -2847,7 +2895,7 @@ function waitForDiagnosticsActivity(wait, signal) {
2847
2895
  return wait;
2848
2896
  if (signal.aborted)
2849
2897
  return Promise.reject(abortError2(signal));
2850
- return new Promise((resolve7, reject) => {
2898
+ return new Promise((resolve, reject) => {
2851
2899
  const onAbort = () => {
2852
2900
  signal.removeEventListener("abort", onAbort);
2853
2901
  reject(abortError2(signal));
@@ -2855,7 +2903,7 @@ function waitForDiagnosticsActivity(wait, signal) {
2855
2903
  signal.addEventListener("abort", onAbort, { once: true });
2856
2904
  wait.then(() => {
2857
2905
  signal.removeEventListener("abort", onAbort);
2858
- resolve7();
2906
+ resolve();
2859
2907
  }, (error) => {
2860
2908
  signal.removeEventListener("abort", onAbort);
2861
2909
  reject(error);
@@ -2923,7 +2971,7 @@ async function stopClientBestEffort(client) {
2923
2971
  function awaitWithSignal(promise, signal) {
2924
2972
  if (!signal)
2925
2973
  return promise;
2926
- return new Promise((resolve7, reject) => {
2974
+ return new Promise((resolve, reject) => {
2927
2975
  let settled = false;
2928
2976
  const onAbort = () => {
2929
2977
  if (settled)
@@ -2941,7 +2989,7 @@ function awaitWithSignal(promise, signal) {
2941
2989
  return;
2942
2990
  settled = true;
2943
2991
  signal.removeEventListener("abort", onAbort);
2944
- resolve7(value);
2992
+ resolve(value);
2945
2993
  }, (err) => {
2946
2994
  if (settled)
2947
2995
  return;
@@ -2953,18 +3001,16 @@ function awaitWithSignal(promise, signal) {
2953
3001
  }
2954
3002
 
2955
3003
  class LspManager {
2956
- clients = new Map;
2957
- reaperHandle = null;
2958
- signalDisposer = null;
2959
- disposed = false;
2960
- idleTimeoutMs;
2961
- initTimeoutMs;
2962
- reaperIntervalMs;
2963
- clientFactory;
2964
- now;
2965
3004
  constructor(options = {}) {
3005
+ this.clients = new Map;
3006
+ this.pendingStops = new Map;
3007
+ this.respawnBudgets = new Map;
3008
+ this.reaperHandle = null;
3009
+ this.signalDisposer = null;
3010
+ this.disposed = false;
2966
3011
  this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
2967
3012
  this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
3013
+ this.maxResidentClients = options.maxResidentClients ?? MAX_RESIDENT_CLIENTS;
2968
3014
  this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
2969
3015
  this.clientFactory = options.clientFactory ?? ((root, server) => new LspClient(root, server));
2970
3016
  this.now = options.now ?? (() => Date.now());
@@ -2984,24 +3030,79 @@ class LspManager {
2984
3030
  getKey(root, serverId) {
2985
3031
  return `${root}::${serverId}`;
2986
3032
  }
3033
+ tombstoneStop(key, client) {
3034
+ const stop = stopClientBestEffort(client);
3035
+ this.pendingStops.set(key, stop);
3036
+ stop.finally(() => {
3037
+ if (this.pendingStops.get(key) === stop) {
3038
+ this.pendingStops.delete(key);
3039
+ }
3040
+ });
3041
+ return stop;
3042
+ }
3043
+ recordDeadGeneration(key) {
3044
+ let budget = this.respawnBudgets.get(key);
3045
+ if (budget === undefined) {
3046
+ budget = { deadGenerations: 0, exhaustedAt: null };
3047
+ this.respawnBudgets.set(key, budget);
3048
+ }
3049
+ budget.deadGenerations += 1;
3050
+ }
3051
+ markHealthyGeneration(key) {
3052
+ this.respawnBudgets.delete(key);
3053
+ }
3054
+ ensureRespawnAllowed(key, root, serverId) {
3055
+ const budget = this.respawnBudgets.get(key);
3056
+ if (budget === undefined || budget.deadGenerations < CLIENT_RESPAWN_RETRY_LIMIT)
3057
+ return;
3058
+ if (budget.exhaustedAt === null) {
3059
+ budget.exhaustedAt = this.now();
3060
+ throw new LspClientRespawnBudgetExceededError(serverId, root, CLIENT_RESPAWN_RETRY_LIMIT);
3061
+ }
3062
+ if (this.now() - budget.exhaustedAt < CLIENT_RESPAWN_COOLDOWN_MS) {
3063
+ throw new LspClientRespawnBudgetExceededError(serverId, root, CLIENT_RESPAWN_RETRY_LIMIT);
3064
+ }
3065
+ budget.deadGenerations = 0;
3066
+ budget.exhaustedAt = null;
3067
+ }
2987
3068
  reapStale() {
2988
3069
  const t = this.now();
2989
3070
  for (const [key, managed] of this.clients) {
2990
3071
  if (managed.isInitializing && managed.initializingSince !== null && t - managed.initializingSince > this.initTimeoutMs) {
2991
- stopClientBestEffort(managed.client);
2992
3072
  this.clients.delete(key);
3073
+ this.tombstoneStop(key, managed.client);
2993
3074
  continue;
2994
3075
  }
2995
3076
  if (!managed.isInitializing && managed.refCount === 0 && managed.pendingWaiters === 0 && t - managed.lastUsedAt > this.idleTimeoutMs) {
2996
- stopClientBestEffort(managed.client);
2997
3077
  this.clients.delete(key);
3078
+ this.tombstoneStop(key, managed.client);
3079
+ }
3080
+ }
3081
+ }
3082
+ evictForAdmission() {
3083
+ while (this.clients.size >= this.maxResidentClients) {
3084
+ const victim = this.leastRecentlyUsedIdleClient();
3085
+ if (!victim)
3086
+ return;
3087
+ this.clients.delete(victim.key);
3088
+ this.tombstoneStop(victim.key, victim.managed.client);
3089
+ }
3090
+ }
3091
+ leastRecentlyUsedIdleClient() {
3092
+ let candidate = null;
3093
+ for (const [key, managed] of this.clients) {
3094
+ if (managed.refCount > 0 || managed.pendingWaiters > 0 || managed.isInitializing)
3095
+ continue;
3096
+ if (candidate === null || managed.lastUsedAt < candidate.managed.lastUsedAt) {
3097
+ candidate = { key, managed };
2998
3098
  }
2999
3099
  }
3100
+ return candidate;
3000
3101
  }
3001
3102
  async tryDeleteIfOrphaned(key, managed) {
3002
3103
  if (managed.refCount === 0 && managed.pendingWaiters === 0 && !managed.isInitializing && this.clients.get(key) === managed) {
3003
3104
  this.clients.delete(key);
3004
- await stopClientBestEffort(managed.client);
3105
+ await this.tombstoneStop(key, managed.client);
3005
3106
  }
3006
3107
  }
3007
3108
  async getClient(root, server, signal) {
@@ -3010,12 +3111,22 @@ class LspManager {
3010
3111
  }
3011
3112
  signal?.throwIfAborted();
3012
3113
  const key = this.getKey(root, server.id);
3114
+ for (;; ) {
3115
+ const pendingStop = this.pendingStops.get(key);
3116
+ if (pendingStop === undefined)
3117
+ break;
3118
+ await awaitWithSignal(pendingStop, signal);
3119
+ signal?.throwIfAborted();
3120
+ }
3121
+ if (this.disposed) {
3122
+ throw new Error("LspManager has been disposed");
3123
+ }
3013
3124
  let managed = this.clients.get(key);
3014
3125
  if (managed) {
3015
3126
  const t = this.now();
3016
3127
  if (managed.isInitializing && managed.initializingSince !== null && t - managed.initializingSince > this.initTimeoutMs) {
3017
- await stopClientBestEffort(managed.client);
3018
3128
  this.clients.delete(key);
3129
+ await this.tombstoneStop(key, managed.client);
3019
3130
  managed = undefined;
3020
3131
  }
3021
3132
  }
@@ -3036,14 +3147,20 @@ class LspManager {
3036
3147
  signal.throwIfAborted();
3037
3148
  }
3038
3149
  if (!managed.client.isAlive()) {
3039
- await stopClientBestEffort(managed.client);
3040
- this.clients.delete(key);
3150
+ this.recordDeadGeneration(key);
3151
+ if (this.clients.get(key) === managed) {
3152
+ this.clients.delete(key);
3153
+ }
3154
+ await this.tombstoneStop(key, managed.client);
3041
3155
  return this.getClient(root, server, signal);
3042
3156
  }
3157
+ this.markHealthyGeneration(key);
3043
3158
  managed.refCount++;
3044
3159
  managed.lastUsedAt = this.now();
3045
3160
  return managed.client;
3046
3161
  }
3162
+ this.evictForAdmission();
3163
+ this.ensureRespawnAllowed(key, root, server.id);
3047
3164
  const client = this.clientFactory(root, server);
3048
3165
  const initStartedAt = this.now();
3049
3166
  const initPromise = (async () => {
@@ -3067,7 +3184,7 @@ class LspManager {
3067
3184
  if (this.clients.get(key) === newManaged) {
3068
3185
  this.clients.delete(key);
3069
3186
  }
3070
- await stopClientBestEffort(client);
3187
+ await this.tombstoneStop(key, client);
3071
3188
  throw err;
3072
3189
  }
3073
3190
  newManaged.pendingWaiters--;
@@ -3078,6 +3195,15 @@ class LspManager {
3078
3195
  await this.tryDeleteIfOrphaned(key, newManaged);
3079
3196
  signal.throwIfAborted();
3080
3197
  }
3198
+ if (!client.isAlive()) {
3199
+ this.recordDeadGeneration(key);
3200
+ if (this.clients.get(key) === newManaged) {
3201
+ this.clients.delete(key);
3202
+ }
3203
+ await this.tombstoneStop(key, client);
3204
+ return this.getClient(root, server, signal);
3205
+ }
3206
+ this.markHealthyGeneration(key);
3081
3207
  newManaged.refCount++;
3082
3208
  newManaged.lastUsedAt = this.now();
3083
3209
  return client;
@@ -3098,14 +3224,20 @@ class LspManager {
3098
3224
  if (client && managed.client !== client)
3099
3225
  return;
3100
3226
  this.clients.delete(key);
3101
- stopClientBestEffort(managed.client);
3227
+ this.tombstoneStop(key, managed.client);
3102
3228
  }
3103
3229
  warmupClient(root, server) {
3104
3230
  if (this.disposed)
3105
3231
  return;
3106
3232
  const key = this.getKey(root, server.id);
3107
- if (this.clients.has(key))
3233
+ if (this.clients.has(key) || this.pendingStops.has(key))
3108
3234
  return;
3235
+ this.evictForAdmission();
3236
+ try {
3237
+ this.ensureRespawnAllowed(key, root, server.id);
3238
+ } catch {
3239
+ return;
3240
+ }
3109
3241
  const client = this.clientFactory(root, server);
3110
3242
  const initStartedAt = this.now();
3111
3243
  const initPromise = (async () => {
@@ -3131,7 +3263,7 @@ class LspManager {
3131
3263
  if (this.clients.get(key) === managed) {
3132
3264
  this.clients.delete(key);
3133
3265
  }
3134
- stopClientBestEffort(client);
3266
+ this.tombstoneStop(key, client);
3135
3267
  });
3136
3268
  }
3137
3269
  isServerInitializing(root, serverId) {
@@ -3175,8 +3307,11 @@ class LspManager {
3175
3307
  for (const managed of this.clients.values()) {
3176
3308
  stopPromises.push(stopClientBestEffort(managed.client));
3177
3309
  }
3310
+ const tombstonedStops = [...this.pendingStops.values()];
3178
3311
  this.clients.clear();
3179
- await Promise.allSettled(stopPromises);
3312
+ this.respawnBudgets.clear();
3313
+ await Promise.allSettled([...stopPromises, ...tombstonedStops]);
3314
+ this.pendingStops.clear();
3180
3315
  }
3181
3316
  }
3182
3317
  var _defaultInstance = null;
@@ -3194,57 +3329,52 @@ async function disposeDefaultLspManager() {
3194
3329
  }
3195
3330
  }
3196
3331
 
3197
- // ../lsp-core/src/lsp/server-install-state.ts
3198
- import { existsSync as existsSync6, mkdirSync, readFileSync as readFileSync3, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
3199
- import { dirname as dirname5 } from "node:path";
3200
- function getInstallDecisionsPath() {
3201
- return lspRequestContext().installDecisionsPath;
3202
- }
3203
- function loadInstallDecisions() {
3204
- const path = getInstallDecisionsPath();
3205
- if (!existsSync6(path))
3206
- return {};
3207
- try {
3208
- const parsed = JSON.parse(readFileSync3(path, "utf8"));
3209
- return isInstallDecisions(parsed) ? parsed : {};
3210
- } catch {
3211
- return {};
3332
+ // ../lsp-core/src/lsp/outside-context-workspace.ts
3333
+ import { existsSync as existsSync6, realpathSync as realpathSync4 } from "node:fs";
3334
+ import { dirname as dirname5, join as join3 } from "node:path";
3335
+
3336
+ // ../lsp-core/src/lsp/workspace-markers.ts
3337
+ var GIT_WORKSPACE_MARKER = ".git";
3338
+ var PROJECT_WORKSPACE_MARKERS = [
3339
+ "package.json",
3340
+ "pyproject.toml",
3341
+ "Cargo.toml",
3342
+ "go.mod",
3343
+ "pom.xml",
3344
+ "build.gradle"
3345
+ ];
3346
+ var WORKSPACE_MARKERS = [GIT_WORKSPACE_MARKER, ...PROJECT_WORKSPACE_MARKERS];
3347
+
3348
+ // ../lsp-core/src/lsp/outside-context-workspace.ts
3349
+ function findWorkspaceRootOutsideContext(directory) {
3350
+ const marked = nearestMarkedAncestor(directory);
3351
+ if (marked !== undefined)
3352
+ return marked;
3353
+ return realpathSync4(nearestExistingAncestor(directory));
3354
+ }
3355
+ function nearestMarkedAncestor(directory) {
3356
+ let current = directory;
3357
+ for (;; ) {
3358
+ if (existsSync6(current) && WORKSPACE_MARKERS.some((marker) => existsSync6(join3(current, marker)))) {
3359
+ return realpathSync4(current);
3360
+ }
3361
+ const parent = dirname5(current);
3362
+ if (parent === current)
3363
+ return;
3364
+ current = parent;
3212
3365
  }
3213
3366
  }
3214
- function loadInstallDecision(serverId) {
3215
- return loadInstallDecisions()[serverId];
3216
- }
3217
- function recordInstallDecision(serverId, decision, decidedAt = new Date().toISOString()) {
3218
- const decisions = loadInstallDecisions();
3219
- decisions[serverId] = { decision, decidedAt };
3220
- writeInstallDecisions(decisions);
3221
- }
3222
- function isInstallDecision(value) {
3223
- return value === "declined" || value === "allowed";
3224
- }
3225
- function writeInstallDecisions(decisions) {
3226
- const path = getInstallDecisionsPath();
3227
- mkdirSync(dirname5(path), { recursive: true });
3228
- const tmpPath = `${path}.tmp`;
3229
- writeFileSync2(tmpPath, `${JSON.stringify(decisions, null, 2)}
3230
- `, "utf8");
3231
- renameSync2(tmpPath, path);
3232
- }
3233
- function isInstallDecisions(value) {
3234
- return isRecord5(value) && Object.values(value).every(isInstallDecisionRecord);
3235
- }
3236
- function isInstallDecisionRecord(value) {
3237
- if (!isRecord5(value))
3238
- return false;
3239
- return isInstallDecision(value["decision"]) && typeof value["decidedAt"] === "string";
3240
- }
3241
- function isRecord5(value) {
3242
- return typeof value === "object" && value !== null && !Array.isArray(value);
3367
+ function nearestExistingAncestor(directory) {
3368
+ let current = directory;
3369
+ while (!existsSync6(current)) {
3370
+ const parent = dirname5(current);
3371
+ if (parent === current)
3372
+ return current;
3373
+ current = parent;
3374
+ }
3375
+ return current;
3243
3376
  }
3244
3377
 
3245
- // ../lsp-core/src/lsp/config-loader.ts
3246
- import { existsSync as existsSync7, readFileSync as readFileSync4 } from "node:fs";
3247
-
3248
3378
  // ../lsp-core/src/lsp/server-definitions.ts
3249
3379
  var LSP_INSTALL_HINTS = {
3250
3380
  typescript: "npm install -g typescript-language-server typescript",
@@ -3290,6 +3420,26 @@ var LSP_INSTALL_HINTS = {
3290
3420
  julials: `julia -e 'using Pkg; Pkg.add("LanguageServer")'`,
3291
3421
  razor: "Razor runs through the Roslyn language server (cohosting). " + "Install: dotnet tool install -g roslyn-language-server --prerelease (requires v5.8.0+). See https://github.com/dotnet/razor"
3292
3422
  };
3423
+ var LSP_LOCAL_INSTALL_HINTS = {
3424
+ typescript: "bun add -d typescript-language-server typescript",
3425
+ vue: "bun add -d @vue/language-server",
3426
+ eslint: "bun add -d vscode-langservers-extracted",
3427
+ oxlint: "bun add -d oxlint",
3428
+ biome: "bun add -d @biomejs/biome",
3429
+ svelte: "bun add -d svelte-language-server",
3430
+ astro: "bun add -d @astrojs/language-server",
3431
+ bash: "bun add -d bash-language-server",
3432
+ "bash-ls": "bun add -d bash-language-server",
3433
+ "yaml-ls": "bun add -d yaml-language-server",
3434
+ php: "bun add -d intelephense",
3435
+ prisma: "bun add -d prisma",
3436
+ dockerfile: "bun add -d dockerfile-language-server-nodejs",
3437
+ pyright: "uv add --dev pyright",
3438
+ basedpyright: "uv add --dev basedpyright",
3439
+ ruff: "uv add --dev ruff",
3440
+ ty: "uv add --dev ty",
3441
+ "ruby-lsp": "bundle add ruby-lsp --group development"
3442
+ };
3293
3443
  var BUILTIN_SERVERS = {
3294
3444
  typescript: {
3295
3445
  command: ["typescript-language-server", "--stdio"],
@@ -3392,7 +3542,56 @@ var BUILTIN_SERVERS = {
3392
3542
  }
3393
3543
  };
3394
3544
 
3545
+ // ../lsp-core/src/lsp/server-install-state.ts
3546
+ import { existsSync as existsSync7, mkdirSync, readFileSync as readFileSync3, renameSync as renameSync2, writeFileSync as writeFileSync2 } from "node:fs";
3547
+ import { dirname as dirname6 } from "node:path";
3548
+ function getInstallDecisionsPath() {
3549
+ return lspRequestContext().installDecisionsPath;
3550
+ }
3551
+ function loadInstallDecisions() {
3552
+ const path = getInstallDecisionsPath();
3553
+ if (!existsSync7(path))
3554
+ return {};
3555
+ try {
3556
+ const parsed = JSON.parse(readFileSync3(path, "utf8"));
3557
+ return isInstallDecisions(parsed) ? parsed : {};
3558
+ } catch {
3559
+ return {};
3560
+ }
3561
+ }
3562
+ function loadInstallDecision(serverId) {
3563
+ return loadInstallDecisions()[serverId];
3564
+ }
3565
+ function recordInstallDecision(serverId, decision, decidedAt = new Date().toISOString()) {
3566
+ const decisions = loadInstallDecisions();
3567
+ decisions[serverId] = { decision, decidedAt };
3568
+ writeInstallDecisions(decisions);
3569
+ }
3570
+ function isInstallDecision(value) {
3571
+ return value === "declined" || value === "allowed";
3572
+ }
3573
+ function writeInstallDecisions(decisions) {
3574
+ const path = getInstallDecisionsPath();
3575
+ mkdirSync(dirname6(path), { recursive: true });
3576
+ const tmpPath = `${path}.tmp`;
3577
+ writeFileSync2(tmpPath, `${JSON.stringify(decisions, null, 2)}
3578
+ `, "utf8");
3579
+ renameSync2(tmpPath, path);
3580
+ }
3581
+ function isInstallDecisions(value) {
3582
+ return isRecord5(value) && Object.values(value).every(isInstallDecisionRecord);
3583
+ }
3584
+ function isInstallDecisionRecord(value) {
3585
+ if (!isRecord5(value))
3586
+ return false;
3587
+ return isInstallDecision(value["decision"]) && typeof value["decidedAt"] === "string";
3588
+ }
3589
+ function isRecord5(value) {
3590
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3591
+ }
3592
+
3395
3593
  // ../lsp-core/src/lsp/config-loader.ts
3594
+ import { existsSync as existsSync8, readFileSync as readFileSync4 } from "node:fs";
3396
3595
  function getProjectConfigPaths() {
3397
3596
  return lspRequestContext().projectConfigPaths;
3398
3597
  }
@@ -3400,7 +3599,7 @@ function getUserConfigPath() {
3400
3599
  return lspRequestContext().userConfigPath;
3401
3600
  }
3402
3601
  function loadJsonFile(path) {
3403
- if (!existsSync7(path))
3602
+ if (!existsSync8(path))
3404
3603
  return null;
3405
3604
  try {
3406
3605
  const parsed = JSON.parse(readFileSync4(path, "utf-8"));
@@ -3482,7 +3681,7 @@ function createServerFromEntry(id, entry, source) {
3482
3681
  if (source === "project") {
3483
3682
  if (!builtin)
3484
3683
  return null;
3485
- const server2 = createServer({
3684
+ const server = createServer({
3486
3685
  id,
3487
3686
  command: builtin.command,
3488
3687
  extensions: entry.extensions ?? builtin.extensions,
@@ -3490,20 +3689,20 @@ function createServerFromEntry(id, entry, source) {
3490
3689
  source
3491
3690
  });
3492
3691
  if (entry.initialization !== undefined) {
3493
- server2.initialization = entry.initialization;
3692
+ server.initialization = entry.initialization;
3494
3693
  }
3495
- return server2;
3694
+ return server;
3496
3695
  }
3497
3696
  if (entry.command && entry.extensions) {
3498
- const server2 = createServer({
3697
+ const server = createServer({
3499
3698
  id,
3500
3699
  command: entry.command,
3501
3700
  extensions: entry.extensions,
3502
3701
  priority: entry.priority ?? 0,
3503
3702
  source
3504
3703
  });
3505
- applyOptionalServerFields(server2, entry);
3506
- return server2;
3704
+ applyOptionalServerFields(server, entry);
3705
+ return server;
3507
3706
  }
3508
3707
  if (!builtin)
3509
3708
  return null;
@@ -3588,54 +3787,155 @@ function getDisabledServerIds() {
3588
3787
  }
3589
3788
 
3590
3789
  // ../lsp-core/src/lsp/server-installation.ts
3591
- import { existsSync as existsSync8 } from "node:fs";
3592
- import { delimiter as delimiter3, join as join3 } from "node:path";
3593
- function isServerInstalled(command, _workingDirectory) {
3594
- if (command.length === 0)
3595
- return false;
3596
- const [cmd] = command;
3597
- if (!cmd)
3598
- return false;
3599
- if (cmd.includes("/") || cmd.includes("\\")) {
3600
- if (existsSync8(cmd))
3601
- return true;
3790
+ import { existsSync as existsSync9 } from "node:fs";
3791
+ import { delimiter as delimiter3, dirname as dirname7, isAbsolute as isAbsolute3, join as join4, resolve as resolve7 } from "node:path";
3792
+ var LOCAL_BIN_RULES = [
3793
+ {
3794
+ markers: ["package.json", "bun.lock", "bun.lockb", "package-lock.json", "yarn.lock", "pnpm-lock.yaml"],
3795
+ binDirs: [join4("node_modules", ".bin")]
3796
+ },
3797
+ {
3798
+ markers: [
3799
+ "pyproject.toml",
3800
+ "ty.toml",
3801
+ "requirements.txt",
3802
+ "setup.py",
3803
+ "setup.cfg",
3804
+ "Pipfile",
3805
+ "pyrightconfig.json",
3806
+ "ruff.toml",
3807
+ ".ruff.toml"
3808
+ ],
3809
+ binDirs: [
3810
+ join4(".venv", "bin"),
3811
+ join4(".venv", "Scripts"),
3812
+ join4("venv", "bin"),
3813
+ join4("venv", "Scripts"),
3814
+ join4(".env", "bin"),
3815
+ join4(".env", "Scripts")
3816
+ ]
3817
+ },
3818
+ {
3819
+ markers: ["Gemfile", "Gemfile.lock"],
3820
+ binDirs: [join4("vendor", "bundle", "bin"), "bin"]
3821
+ },
3822
+ {
3823
+ markers: ["go.mod", "go.sum", "go.work"],
3824
+ binDirs: ["bin"]
3825
+ }
3826
+ ];
3827
+ var resolutionCache = new Map;
3828
+ var probeCount = 0;
3829
+ function probe(path) {
3830
+ probeCount += 1;
3831
+ return existsSync9(path);
3832
+ }
3833
+ function executableSuffixes(platform, pathExt) {
3834
+ if (platform !== "win32")
3835
+ return [""];
3836
+ const configured = pathExt ?? process.env["PATHEXT"] ?? "";
3837
+ const systemExts = configured.split(";").filter((entry) => entry.length > 0).map((entry) => entry.toLowerCase());
3838
+ return [...new Set(["", ...systemExts, ".exe", ".cmd", ".bat", ".ps1"])];
3839
+ }
3840
+ function probeWithSuffixes(directory, command, suffixes) {
3841
+ for (const suffix of suffixes) {
3842
+ const candidate = join4(directory, command + suffix);
3843
+ if (probe(candidate))
3844
+ return candidate;
3602
3845
  }
3603
- const isWindows = process.platform === "win32";
3604
- let exts = [""];
3605
- if (isWindows) {
3606
- const pathExt = process.env["PATHEXT"] ?? "";
3607
- if (pathExt) {
3608
- const systemExts = pathExt.split(";").filter(Boolean);
3609
- exts = [...new Set([...exts, ...systemExts, ".exe", ".cmd", ".bat", ".ps1"])];
3610
- } else {
3611
- exts = ["", ".exe", ".cmd", ".bat", ".ps1"];
3846
+ return null;
3847
+ }
3848
+ function resolveLocal(command, workingDirectory, suffixes, stopAt) {
3849
+ const boundary = stopAt === undefined ? undefined : resolve7(stopAt);
3850
+ let current = resolve7(workingDirectory);
3851
+ while (true) {
3852
+ for (const rule of LOCAL_BIN_RULES) {
3853
+ if (!rule.markers.some((marker) => probe(join4(current, marker))))
3854
+ continue;
3855
+ for (const binDir of rule.binDirs) {
3856
+ const found = probeWithSuffixes(join4(current, binDir), command, suffixes);
3857
+ if (found !== null)
3858
+ return found;
3859
+ }
3612
3860
  }
3861
+ if (probe(join4(current, ".git")))
3862
+ return null;
3863
+ if (boundary !== undefined && current === boundary)
3864
+ return null;
3865
+ const parent = dirname7(current);
3866
+ if (parent === current)
3867
+ return null;
3868
+ current = parent;
3613
3869
  }
3614
- let pathEnv = process.env["PATH"] ?? "";
3615
- if (isWindows && !pathEnv) {
3870
+ }
3871
+ function resolveFromPath(command, suffixes, platform, pathEnvOverride) {
3872
+ let pathEnv = pathEnvOverride ?? process.env["PATH"] ?? "";
3873
+ if (platform === "win32" && !pathEnv) {
3616
3874
  pathEnv = process.env["Path"] ?? "";
3617
3875
  }
3618
- const paths = pathEnv.split(delimiter3);
3619
- for (const p of paths) {
3620
- for (const suffix of exts) {
3621
- if (existsSync8(join3(p, cmd + suffix))) {
3622
- return true;
3623
- }
3624
- }
3876
+ for (const entry of pathEnv.split(delimiter3)) {
3877
+ if (entry.length === 0)
3878
+ continue;
3879
+ const found = probeWithSuffixes(entry, command, suffixes);
3880
+ if (found !== null)
3881
+ return found;
3625
3882
  }
3626
- if (cmd === "node")
3627
- return true;
3628
- return false;
3883
+ return null;
3884
+ }
3885
+ function resolveServerBinary(command, workingDirectory, options = {}) {
3886
+ if (command.length === 0)
3887
+ return null;
3888
+ const [cmd] = command;
3889
+ if (cmd === undefined || cmd.length === 0)
3890
+ return null;
3891
+ const platform = options.platform ?? process.platform;
3892
+ const suffixes = executableSuffixes(platform, options.pathExt);
3893
+ if (cmd.includes("/") || cmd.includes("\\")) {
3894
+ const explicit = isAbsolute3(cmd) ? cmd : resolve7(workingDirectory ?? process.cwd(), cmd);
3895
+ return probe(explicit) ? explicit : null;
3896
+ }
3897
+ const cacheKey = JSON.stringify([
3898
+ workingDirectory ?? "",
3899
+ cmd,
3900
+ platform,
3901
+ options.stopAt ?? "",
3902
+ options.pathExt ?? "",
3903
+ options.pathEnv ?? process.env["PATH"] ?? ""
3904
+ ]);
3905
+ const cached = resolutionCache.get(cacheKey);
3906
+ if (cached !== undefined)
3907
+ return cached;
3908
+ let resolved = null;
3909
+ if (workingDirectory !== undefined && workingDirectory.length > 0) {
3910
+ resolved = resolveLocal(cmd, workingDirectory, suffixes, options.stopAt);
3911
+ }
3912
+ resolved ??= resolveFromPath(cmd, suffixes, platform, options.pathEnv);
3913
+ if (resolved === null && cmd === "node")
3914
+ resolved = cmd;
3915
+ resolutionCache.set(cacheKey, resolved);
3916
+ return resolved;
3917
+ }
3918
+ function isServerInstalled(command, workingDirectory, options = {}) {
3919
+ if (command.length === 0)
3920
+ return false;
3921
+ return resolveServerBinary(command, workingDirectory, options) !== null;
3629
3922
  }
3630
3923
 
3631
3924
  // ../lsp-core/src/lsp/server-resolution.ts
3925
+ function withResolvedCommand(command, binaryPath) {
3926
+ return [binaryPath, ...command.slice(1)];
3927
+ }
3632
3928
  function findServerForExtension(ext) {
3633
3929
  const servers = getMergedServers();
3930
+ const workingDirectory = contextCwd();
3634
3931
  for (const server of servers) {
3635
- if (server.extensions.includes(ext) && isServerInstalled(server.command)) {
3932
+ if (!server.extensions.includes(ext))
3933
+ continue;
3934
+ const binaryPath = resolveServerBinary(server.command, workingDirectory);
3935
+ if (binaryPath !== null) {
3636
3936
  const resolvedServer = {
3637
3937
  id: server.id,
3638
- command: server.command,
3938
+ command: withResolvedCommand(server.command, binaryPath),
3639
3939
  extensions: server.extensions,
3640
3940
  priority: server.priority
3641
3941
  };
@@ -3682,6 +3982,7 @@ function findServerForExtension(ext) {
3682
3982
  function getAllServers() {
3683
3983
  const servers = getMergedServers();
3684
3984
  const disabled = getDisabledServerIds();
3985
+ const workingDirectory = contextCwd();
3685
3986
  const result = [];
3686
3987
  const seen = new Set;
3687
3988
  for (const server of servers) {
@@ -3689,7 +3990,7 @@ function getAllServers() {
3689
3990
  continue;
3690
3991
  result.push({
3691
3992
  id: server.id,
3692
- installed: isServerInstalled(server.command),
3993
+ installed: isServerInstalled(server.command, workingDirectory),
3693
3994
  extensions: server.extensions,
3694
3995
  disabled: false,
3695
3996
  source: server.source,
@@ -3703,7 +4004,7 @@ function getAllServers() {
3703
4004
  const builtin = BUILTIN_SERVERS[id];
3704
4005
  result.push({
3705
4006
  id,
3706
- installed: builtin ? isServerInstalled(builtin.command) : false,
4007
+ installed: builtin ? isServerInstalled(builtin.command, workingDirectory) : false,
3707
4008
  extensions: builtin?.extensions ?? [],
3708
4009
  disabled: true,
3709
4010
  source: "disabled",
@@ -3714,7 +4015,6 @@ function getAllServers() {
3714
4015
  }
3715
4016
 
3716
4017
  // ../lsp-core/src/lsp/client-wrapper.ts
3717
- var WORKSPACE_MARKERS = [".git", "package.json", "pyproject.toml", "Cargo.toml", "go.mod", "pom.xml", "build.gradle"];
3718
4018
  function isDirectoryPath(filePath) {
3719
4019
  try {
3720
4020
  return statSync3(filePath).isDirectory();
@@ -3727,36 +4027,40 @@ function findWorkspaceRoot(filePath) {
3727
4027
  const abs = resolveReadablePathInsideContext(filePath);
3728
4028
  let dir = abs;
3729
4029
  if (!isDirectoryPath(dir)) {
3730
- dir = dirname6(dir);
4030
+ dir = dirname8(dir);
3731
4031
  }
4032
+ if (!isPathInside(cwd, abs))
4033
+ return findWorkspaceRootOutsideContext(dir);
3732
4034
  const fallbackRoot = nearestExistingDirectoryInsideContext(dir, cwd) ?? cwd;
4035
+ let nearestPackageRoot;
3733
4036
  while (isPathInside(cwd, dir)) {
3734
4037
  const canonicalDir = existingDirectoryInsideContext(dir, cwd);
3735
4038
  if (canonicalDir !== undefined) {
3736
- for (const marker of WORKSPACE_MARKERS) {
3737
- if (existsSync9(join4(dir, marker))) {
3738
- return canonicalDir;
3739
- }
4039
+ if (existsSync10(join5(dir, GIT_WORKSPACE_MARKER))) {
4040
+ return canonicalDir;
4041
+ }
4042
+ if (nearestPackageRoot === undefined && hasProjectWorkspaceMarker(dir)) {
4043
+ nearestPackageRoot = canonicalDir;
3740
4044
  }
3741
4045
  }
3742
4046
  if (dir === cwd)
3743
4047
  break;
3744
- dir = dirname6(dir);
4048
+ dir = dirname8(dir);
3745
4049
  }
3746
- return fallbackRoot;
4050
+ return nearestPackageRoot ?? fallbackRoot;
4051
+ }
4052
+ function hasProjectWorkspaceMarker(directory) {
4053
+ return PROJECT_WORKSPACE_MARKERS.some((marker) => existsSync10(join5(directory, marker)));
3747
4054
  }
3748
4055
  function resolveReadablePathInsideContext(filePath) {
3749
4056
  const cwd = contextCwd();
3750
- const abs = resolve7(cwd, filePath);
4057
+ const abs = resolve8(cwd, filePath);
3751
4058
  if (isPathInside(cwd, abs))
3752
4059
  return abs;
3753
4060
  const rebased = rebaseThroughCanonicalAncestor(abs, cwd);
3754
4061
  if (rebased !== undefined)
3755
4062
  return rebased;
3756
- const canonical = canonicalizeExistingOrNearestAncestor(abs);
3757
- if (isPathInside(cwd, canonical))
3758
- return canonical;
3759
- throw new LspInvalidPathError(`LSP file path must be inside request cwd: ${filePath}`);
4063
+ return canonicalizeExistingOrNearestAncestor(abs);
3760
4064
  }
3761
4065
  function resolvePathInsideContext(filePath) {
3762
4066
  const cwd = contextCwd();
@@ -3771,12 +4075,12 @@ function rebaseThroughCanonicalAncestor(path, cwd) {
3771
4075
  let current = path;
3772
4076
  const suffix = [];
3773
4077
  while (true) {
3774
- if (existsSync9(current)) {
3775
- const canonical = realpathSync4(current);
4078
+ if (existsSync10(current)) {
4079
+ const canonical = realpathSync5(current);
3776
4080
  if (isPathInside(cwd, canonical))
3777
- return suffix.length === 0 ? canonical : join4(canonical, ...suffix);
4081
+ return suffix.length === 0 ? canonical : join5(canonical, ...suffix);
3778
4082
  }
3779
- const parent = dirname6(current);
4083
+ const parent = dirname8(current);
3780
4084
  if (parent === current)
3781
4085
  return;
3782
4086
  suffix.unshift(basename3(current));
@@ -3784,9 +4088,9 @@ function rebaseThroughCanonicalAncestor(path, cwd) {
3784
4088
  }
3785
4089
  }
3786
4090
  function existingDirectoryInsideContext(directory, cwd) {
3787
- if (!existsSync9(directory))
4091
+ if (!existsSync10(directory))
3788
4092
  return;
3789
- const canonical = realpathSync4(directory);
4093
+ const canonical = realpathSync5(directory);
3790
4094
  if (!statSync3(canonical).isDirectory())
3791
4095
  return;
3792
4096
  return isPathInside(cwd, canonical) ? canonical : undefined;
@@ -3799,7 +4103,7 @@ function nearestExistingDirectoryInsideContext(directory, cwd) {
3799
4103
  return canonical;
3800
4104
  if (current === cwd)
3801
4105
  return;
3802
- current = dirname6(current);
4106
+ current = dirname8(current);
3803
4107
  }
3804
4108
  return;
3805
4109
  }
@@ -3826,6 +4130,19 @@ function formatServerLookupError(result) {
3826
4130
  ].join(`
3827
4131
  `);
3828
4132
  }
4133
+ function formatInstallOptions(serverId, installHint) {
4134
+ const localHint = LSP_LOCAL_INSTALL_HINTS[serverId];
4135
+ if (localHint === undefined) {
4136
+ return ["To install, run:", ` ${installHint}`];
4137
+ }
4138
+ return [
4139
+ "To install in THIS repository (preferred — no global install needed):",
4140
+ ` ${localHint}`,
4141
+ "",
4142
+ "Or install it globally:",
4143
+ ` ${installHint}`
4144
+ ];
4145
+ }
3829
4146
  function formatNotInstalled(result) {
3830
4147
  const { server, installHint } = result;
3831
4148
  const extensions = server.extensions.join(", ");
@@ -3840,19 +4157,19 @@ function formatNotInstalled(result) {
3840
4157
  `Command not found: ${server.command[0]}`,
3841
4158
  ""
3842
4159
  ];
4160
+ const installOptions = formatInstallOptions(server.id, installHint);
3843
4161
  if (decision === "allowed") {
3844
4162
  return [
3845
4163
  ...header,
3846
4164
  "The user has pre-authorized LSP installation. Run the install command, then retry this tool:",
3847
- ` ${installHint}`
4165
+ ...installOptions.slice(1)
3848
4166
  ].join(`
3849
4167
  `);
3850
4168
  }
3851
4169
  if (!context.capabilities.installDecisionTool) {
3852
4170
  return [
3853
4171
  ...header,
3854
- "To install, run:",
3855
- ` ${installHint}`,
4172
+ ...installOptions,
3856
4173
  "",
3857
4174
  "ACTION REQUIRED — ASK THE USER whether to install this LSP server.",
3858
4175
  "Install-decision recording is unavailable in this harness; proceed without LSP if the user declines."
@@ -3861,8 +4178,7 @@ function formatNotInstalled(result) {
3861
4178
  }
3862
4179
  return [
3863
4180
  ...header,
3864
- "To install, run:",
3865
- ` ${installHint}`,
4181
+ ...installOptions,
3866
4182
  "",
3867
4183
  "ACTION REQUIRED — ASK THE USER whether to install this LSP server.",
3868
4184
  "- If the user agrees: run the install command above, then retry this tool.",
@@ -3917,8 +4233,8 @@ async function withLspClient(filePath, fn, toolName, options = {}) {
3917
4233
  }
3918
4234
 
3919
4235
  // ../lsp-core/src/lsp/directory-diagnostics.ts
3920
- import { existsSync as existsSync10, lstatSync as lstatSync4, readdirSync as readdirSync3 } from "node:fs";
3921
- import { join as join5, resolve as resolve8 } from "node:path";
4236
+ import { existsSync as existsSync11, lstatSync as lstatSync4, readdirSync as readdirSync3 } from "node:fs";
4237
+ import { join as join6, resolve as resolve9 } from "node:path";
3922
4238
 
3923
4239
  // ../lsp-core/src/lsp/formatters.ts
3924
4240
  import { fileURLToPath as fileURLToPath2 } from "node:url";
@@ -3933,10 +4249,10 @@ function uriToPath(uri) {
3933
4249
  }
3934
4250
  function formatLocation(loc) {
3935
4251
  if ("targetUri" in loc) {
3936
- const uri2 = uriToPath(loc.targetUri);
3937
- const line2 = loc.targetRange.start.line + 1;
3938
- const char2 = loc.targetRange.start.character;
3939
- return `${uri2}:${line2}:${char2}`;
4252
+ const uri = uriToPath(loc.targetUri);
4253
+ const line = loc.targetRange.start.line + 1;
4254
+ const char = loc.targetRange.start.character;
4255
+ return `${uri}:${line}:${char}`;
3940
4256
  }
3941
4257
  const uri = uriToPath(loc.uri);
3942
4258
  const line = loc.range.start.line + 1;
@@ -4048,7 +4364,7 @@ function collectFilesWithExtension(dir, extension, maxFiles) {
4048
4364
  for (const entry of entries) {
4049
4365
  if (files.length >= maxFiles)
4050
4366
  return;
4051
- const fullPath = join5(currentDir, entry);
4367
+ const fullPath = join6(currentDir, entry);
4052
4368
  let stat;
4053
4369
  try {
4054
4370
  stat = lstatSync4(fullPath);
@@ -4073,8 +4389,8 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
4073
4389
  if (!extension.startsWith(".")) {
4074
4390
  throw new LspInvalidPathError(`Extension must start with a dot (e.g., ".ts", not "${extension}"). Use ".${extension}" instead.`);
4075
4391
  }
4076
- const absDir = resolve8(options.workspaceRoot ?? contextCwd(), directory);
4077
- if (!existsSync10(absDir)) {
4392
+ const absDir = resolve9(options.workspaceRoot ?? contextCwd(), directory);
4393
+ if (!existsSync11(absDir)) {
4078
4394
  throw new LspInvalidPathError(`Directory does not exist: ${absDir}`);
4079
4395
  }
4080
4396
  const serverResult = options.server === undefined ? findServerForExtension(extension) : { status: "found", server: options.server };
@@ -4161,7 +4477,7 @@ async function aggregateDiagnosticsForDirectory(directory, extension, severity,
4161
4477
 
4162
4478
  // ../lsp-core/src/lsp/infer-extension.ts
4163
4479
  import { lstatSync as lstatSync5, readdirSync as readdirSync4 } from "node:fs";
4164
- import { join as join6 } from "node:path";
4480
+ import { join as join7 } from "node:path";
4165
4481
  var SKIP_DIRECTORIES2 = new Set(["node_modules", ".git", "dist", "build", ".next", "out"]);
4166
4482
  var MAX_SCAN_ENTRIES = 500;
4167
4483
  function inferExtensionFromDirectory(directory) {
@@ -4179,7 +4495,7 @@ function inferExtensionFromDirectory(directory) {
4179
4495
  for (const entry of entries) {
4180
4496
  if (scanned >= MAX_SCAN_ENTRIES)
4181
4497
  return;
4182
- const fullPath = join6(dir, entry);
4498
+ const fullPath = join7(dir, entry);
4183
4499
  let stat;
4184
4500
  try {
4185
4501
  stat = lstatSync5(fullPath);
@@ -4338,8 +4654,8 @@ function clientOptions(signal) {
4338
4654
  }
4339
4655
 
4340
4656
  // ../lsp-core/src/tools/result.ts
4341
- function text(text2, details, isError = false) {
4342
- return { content: [{ type: "text", text: text2 }], details, isError };
4657
+ function text(text, details, isError = false) {
4658
+ return { content: [{ type: "text", text }], details, isError };
4343
4659
  }
4344
4660
 
4345
4661
  // ../lsp-core/src/tools/diagnostics.ts
@@ -4359,7 +4675,7 @@ async function executeLspDiagnostics(params, signal) {
4359
4675
  const extension = inferExtensionFromDirectory(absPath);
4360
4676
  if (!extension) {
4361
4677
  const message = `No supported source files found in directory: ${absPath}`;
4362
- const details3 = {
4678
+ const details = {
4363
4679
  filePath,
4364
4680
  severity,
4365
4681
  mode: "directory",
@@ -4369,24 +4685,24 @@ async function executeLspDiagnostics(params, signal) {
4369
4685
  error: message,
4370
4686
  errorKind: "no_files"
4371
4687
  };
4372
- return text(message, details3);
4688
+ return text(message, details);
4373
4689
  }
4374
- const output2 = await aggregateDiagnosticsForDirectory(absPath, extension, severity, undefined, signal === undefined ? {} : { signal });
4375
- const details2 = {
4690
+ const output = await aggregateDiagnosticsForDirectory(absPath, extension, severity, undefined, signal === undefined ? {} : { signal });
4691
+ const details = {
4376
4692
  filePath,
4377
4693
  severity,
4378
4694
  mode: "directory",
4379
4695
  diagnostics: [],
4380
- totalDiagnostics: output2.totalDiagnostics,
4696
+ totalDiagnostics: output.totalDiagnostics,
4381
4697
  truncated: false,
4382
- fileFailures: [...output2.fileFailures]
4698
+ fileFailures: [...output.fileFailures]
4383
4699
  };
4384
- return text(output2.output, details2);
4700
+ return text(output.output, details);
4385
4701
  }
4386
4702
  const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.diagnostics(resolvedFilePath, signal), "diagnostics", clientOptions(signal));
4387
4703
  if (result.transientError) {
4388
4704
  const message = result.transientError.message;
4389
- const details2 = {
4705
+ const details = {
4390
4706
  filePath,
4391
4707
  severity,
4392
4708
  mode: "file",
@@ -4396,7 +4712,7 @@ async function executeLspDiagnostics(params, signal) {
4396
4712
  error: message,
4397
4713
  errorKind: result.transientError.kind
4398
4714
  };
4399
- return text(message, details2, true);
4715
+ return text(message, details, true);
4400
4716
  }
4401
4717
  const diagnostics = filterDiagnosticsBySeverity(asDiagnosticArray(result), severity);
4402
4718
  const total = diagnostics.length;
@@ -4430,6 +4746,96 @@ async function executeLspDiagnostics(params, signal) {
4430
4746
  throw error;
4431
4747
  }
4432
4748
  }
4749
+ // ../lsp-core/src/lsp/format-document.ts
4750
+ import { readFileSync as readFileSync5, renameSync as renameSync3, unlinkSync, writeFileSync as writeFileSync3 } from "node:fs";
4751
+ var DEFAULT_FORMATTING_OPTIONS = {
4752
+ tabSize: 4,
4753
+ insertSpaces: false,
4754
+ trimTrailingWhitespace: true,
4755
+ insertFinalNewline: true,
4756
+ trimFinalNewlines: true
4757
+ };
4758
+ var UNCHANGED = { status: "unchanged", linesAdded: 0, linesRemoved: 0 };
4759
+ async function formatDocumentWithClient(client, filePath, options = {}) {
4760
+ const edits = await client.formatDocument(filePath, options.formattingOptions ?? DEFAULT_FORMATTING_OPTIONS, options.signal);
4761
+ if (edits === null)
4762
+ return { status: "unavailable", reason: "capability_not_advertised" };
4763
+ if (edits.length === 0)
4764
+ return UNCHANGED;
4765
+ const before = readFileSync5(filePath, "utf-8");
4766
+ const normalized = normalizeTextEdits(before, edits, 0);
4767
+ if (normalized.text === before)
4768
+ return UNCHANGED;
4769
+ writeAtomically(filePath, normalized.text);
4770
+ await client.openFile(filePath);
4771
+ return {
4772
+ status: "formatted",
4773
+ ...lineDelta(normalized.edits)
4774
+ };
4775
+ }
4776
+ function lineDelta(edits) {
4777
+ let linesAdded = 0;
4778
+ let linesRemoved = 0;
4779
+ for (const edit of edits) {
4780
+ linesRemoved += edit.range.end.line - edit.range.start.line + 1;
4781
+ linesAdded += edit.newText.split(`
4782
+ `).length;
4783
+ }
4784
+ return { linesAdded, linesRemoved };
4785
+ }
4786
+ function writeAtomically(filePath, content) {
4787
+ const tempPath = `${filePath}.omo-format.tmp`;
4788
+ writeFileSync3(tempPath, content, "utf-8");
4789
+ try {
4790
+ renameSync3(tempPath, filePath);
4791
+ } catch (error) {
4792
+ try {
4793
+ unlinkSync(tempPath);
4794
+ } catch {}
4795
+ throw error;
4796
+ }
4797
+ }
4798
+
4799
+ // ../lsp-core/src/tools/format.ts
4800
+ async function executeLspFormat(params, signal) {
4801
+ const filePath = requireString(params, "filePath");
4802
+ try {
4803
+ const result = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => formatDocumentWithClient(client, resolvedFilePath, signal === undefined ? {} : { signal }), "format", clientOptions(signal));
4804
+ return text(describeResult(filePath, result), formatDetails(filePath, result));
4805
+ } catch (error) {
4806
+ const missingDependency = missingDependencyResult(error, {
4807
+ filePath,
4808
+ status: "unavailable",
4809
+ reason: "server_unavailable",
4810
+ linesAdded: 0,
4811
+ linesRemoved: 0
4812
+ });
4813
+ if (missingDependency)
4814
+ return missingDependency;
4815
+ throw error;
4816
+ }
4817
+ }
4818
+ function formatDetails(filePath, result) {
4819
+ if (result.status === "unavailable") {
4820
+ return { filePath, status: "unavailable", reason: result.reason, linesAdded: 0, linesRemoved: 0 };
4821
+ }
4822
+ return {
4823
+ filePath,
4824
+ status: result.status,
4825
+ linesAdded: result.linesAdded,
4826
+ linesRemoved: result.linesRemoved
4827
+ };
4828
+ }
4829
+ function describeResult(filePath, result) {
4830
+ if (result.status === "unavailable") {
4831
+ return `Formatting unavailable for ${filePath}: the language server does not advertise documentFormattingProvider.`;
4832
+ }
4833
+ if (result.status === "unchanged") {
4834
+ return `Already formatted: ${filePath}`;
4835
+ }
4836
+ return `Formatted ${filePath} (+${result.linesAdded}/-${result.linesRemoved} lines)`;
4837
+ }
4838
+
4433
4839
  // ../lsp-core/src/tools/install-decision.ts
4434
4840
  async function executeLspInstallDecision(params) {
4435
4841
  const serverId = requireString(params, "server_id");
@@ -4623,8 +5029,8 @@ async function executeLspSymbols(params, signal) {
4623
5029
  errorKind: "missing_query"
4624
5030
  });
4625
5031
  }
4626
- const symbols2 = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
4627
- return formatSymbolsResult(filePath, scope, symbols2, limit, query);
5032
+ const symbols = await withLspClient(filePath, async (client) => client.workspaceSymbols(query, signal), "workspaceSymbols", clientOptions(signal));
5033
+ return formatSymbolsResult(filePath, scope, symbols, limit, query);
4628
5034
  }
4629
5035
  const symbols = await withLspClient(filePath, async (client, _workspaceRoot, resolvedFilePath) => client.documentSymbols(resolvedFilePath, signal), "documentSymbols", clientOptions(signal));
4630
5036
  return formatSymbolsResult(filePath, scope, symbols, limit);
@@ -4762,6 +5168,16 @@ var LSP_MCP_TOOLS = [
4762
5168
  }, ["filePath", "line", "character", "newName"]),
4763
5169
  execute: executeLspRename
4764
5170
  },
5171
+ {
5172
+ name: "format",
5173
+ aliases: ["lsp_format"],
5174
+ title: "LSP Format",
5175
+ description: "Format a source file with its language server and write the returned edits to disk.",
5176
+ inputSchema: objectSchema({
5177
+ filePath: { type: "string", description: "Source file path to format." }
5178
+ }, ["filePath"]),
5179
+ execute: executeLspFormat
5180
+ },
4765
5181
  {
4766
5182
  name: "install_decision",
4767
5183
  aliases: ["lsp_install_decision"],
@@ -4795,16 +5211,17 @@ function coerceToolArguments(value) {
4795
5211
  return isRecord7(value) ? value : {};
4796
5212
  }
4797
5213
  export {
4798
- isRecord7 as isRecord,
4799
- executeLspTool,
4800
- executeLspSymbols,
4801
- executeLspStatus,
4802
- executeLspRename,
4803
- executeLspPrepareRename,
4804
- executeLspInstallDecision,
4805
- executeLspGotoDefinition,
4806
- executeLspFindReferences,
4807
- executeLspDiagnostics,
5214
+ LSP_MCP_TOOLS,
4808
5215
  coerceToolArguments,
4809
- LSP_MCP_TOOLS
5216
+ executeLspDiagnostics,
5217
+ executeLspFindReferences,
5218
+ executeLspFormat,
5219
+ executeLspGotoDefinition,
5220
+ executeLspInstallDecision,
5221
+ executeLspPrepareRename,
5222
+ executeLspRename,
5223
+ executeLspStatus,
5224
+ executeLspSymbols,
5225
+ executeLspTool,
5226
+ isRecord7 as isRecord
4810
5227
  };