lazycodex-ai 5.0.0-beta.9 → 5.0.0

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 (869) hide show
  1. package/README.ja.md +64 -69
  2. package/README.ko.md +65 -70
  3. package/README.md +108 -182
  4. package/README.ru.md +60 -68
  5. package/README.zh-cn.md +60 -69
  6. package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
  7. package/dist/cli/config-manager/refresh-opencode-plugin-sandbox.d.ts +31 -0
  8. package/dist/cli/doctor/checks/browser-provider.d.ts +2 -0
  9. package/dist/cli/doctor/checks/index.d.ts +2 -0
  10. package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
  11. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  12. package/dist/cli/doctor/checks/tui-plugin-config.d.ts +11 -0
  13. package/dist/cli/doctor/framework/constants.d.ts +5 -0
  14. package/dist/cli/doctor/framework/types.d.ts +2 -0
  15. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  16. package/dist/cli/index.js +60340 -63161
  17. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  18. package/dist/cli/install-native/index.d.ts +12 -0
  19. package/dist/cli/install-native/legacy-omo-bin.d.ts +27 -0
  20. package/dist/cli/install-native/offer-native-setup.d.ts +31 -0
  21. package/dist/cli/install-native/omo-bin-test-fixtures.d.ts +35 -0
  22. package/dist/cli/install-native/plan.d.ts +21 -0
  23. package/dist/cli/install-native/repair-legacy-omo-bin.d.ts +26 -0
  24. package/dist/cli/install-native/run-native-install.d.ts +33 -0
  25. package/dist/cli/install-native/verify-omo-command.d.ts +22 -0
  26. package/dist/cli/install-native-dev/index.d.ts +4 -0
  27. package/dist/cli/native-dev-platform-flag.d.ts +5 -0
  28. package/dist/cli/native-edition-hint.d.ts +10 -0
  29. package/dist/cli/runtime-commands.d.ts +1 -1
  30. package/dist/cli/types.d.ts +3 -2
  31. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  32. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  33. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  34. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  35. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  36. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  37. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  38. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  39. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  40. package/dist/cli-node/index.js +61667 -64465
  41. package/package.json +15 -14
  42. package/packages/git-bash-mcp/dist/cli.js +6 -1
  43. package/packages/lsp-daemon/dist/cli.js +1421 -960
  44. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  45. package/packages/lsp-daemon/dist/client.js +956 -498
  46. package/packages/lsp-daemon/dist/daemon-client.d.ts +3 -0
  47. package/packages/lsp-daemon/dist/daemon-client.js +23 -3
  48. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  49. package/packages/lsp-daemon/dist/ensure-daemon.js +27 -5
  50. package/packages/lsp-daemon/dist/index.js +860 -407
  51. package/packages/lsp-daemon/dist/ownership.js +2 -2
  52. package/packages/lsp-daemon/dist/proxy.js +3 -0
  53. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  54. package/packages/lsp-daemon/package.json +5 -4
  55. package/packages/lsp-tools-mcp/dist/cli.js +764 -341
  56. package/packages/lsp-tools-mcp/dist/lsp/manager.js +274 -138
  57. package/packages/lsp-tools-mcp/dist/mcp.js +789 -368
  58. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  59. package/packages/lsp-tools-mcp/dist/tools.js +719 -302
  60. package/packages/lsp-tools-mcp/package.json +5 -4
  61. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  62. package/packages/omo-codex/plugin/.mcp.json +0 -6
  63. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  64. package/packages/omo-codex/plugin/README.md +6 -2
  65. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8504 -408
  66. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  67. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  69. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -1
  70. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  71. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  72. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  73. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  74. package/packages/omo-codex/plugin/components/comment-checker/package.json +6 -5
  75. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  76. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  77. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  78. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  79. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  80. package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +1 -1
  81. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -1
  82. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  83. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  84. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +2 -1
  85. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
  86. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  87. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  88. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
  89. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
  90. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
  91. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
  92. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  93. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +6 -5
  94. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +32 -28
  95. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
  96. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  97. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +134 -11
  98. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  99. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +7 -5
  100. package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/SKILL.md +5 -5
  101. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  102. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  103. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  104. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +977 -545
  105. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  106. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  107. package/packages/omo-codex/plugin/components/lsp/package.json +6 -5
  108. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  109. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  110. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  111. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  112. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  113. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  114. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  115. package/packages/omo-codex/plugin/components/rules/README.md +2 -0
  116. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  117. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -1
  118. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +127 -0
  119. package/packages/omo-codex/plugin/components/rules/dist/cli.js +103 -68
  120. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  121. package/packages/omo-codex/plugin/components/rules/package.json +8 -7
  122. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  123. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  124. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +27 -5
  125. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  126. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  127. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +1 -2
  128. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  129. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  130. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  131. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +2 -3
  132. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -3
  133. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  134. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  135. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  136. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +29 -6
  137. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  138. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  139. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  140. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -2
  141. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  142. package/packages/omo-codex/plugin/components/teammode/package.json +6 -5
  143. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +1 -1
  144. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  145. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  146. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +5328 -1382
  147. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +5524 -1579
  148. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  149. package/packages/omo-codex/plugin/components/telemetry/package.json +6 -5
  150. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  151. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  152. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  153. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  154. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  155. package/packages/omo-codex/plugin/components/ultrawork/README.md +3 -1
  156. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  157. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
  158. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  159. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  160. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  161. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  162. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  163. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  164. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
  165. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
  166. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
  167. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +20 -7
  168. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  169. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +478 -4
  170. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  171. package/packages/omo-codex/plugin/components/ultrawork/package.json +6 -6
  172. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  173. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +9 -10
  174. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +17 -13
  175. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +5 -6
  176. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +4 -4
  177. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  178. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  179. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  180. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  181. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  182. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  183. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  184. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +4 -4
  185. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  186. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +6 -6
  187. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  188. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +13 -13
  189. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
  190. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -0
  191. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +13 -12
  192. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  193. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  194. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +4 -4
  195. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  196. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  197. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +1 -1
  198. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  199. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +4 -8
  200. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +22 -6
  201. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  202. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +17 -1
  203. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  204. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  205. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +102 -107
  206. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +18 -0
  207. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +30 -0
  208. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
  209. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
  210. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
  211. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
  212. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
  213. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
  214. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +57 -46
  215. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
  216. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
  217. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  218. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  220. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
  221. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2205 -737
  222. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  223. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +28 -8
  224. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +8 -5
  225. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +35 -23
  226. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
  227. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
  228. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +25 -9
  229. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
  230. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
  231. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
  232. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
  233. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
  234. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +24 -12
  235. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.d.ts +4 -0
  236. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.js +39 -0
  237. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +2 -0
  238. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +19 -4
  239. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.d.ts +19 -0
  240. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.js +108 -0
  241. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +6 -2
  242. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +54 -25
  243. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
  244. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
  245. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +10 -7
  246. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +121 -100
  247. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.d.ts +16 -0
  248. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.js +115 -0
  249. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +18 -0
  250. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +41 -0
  251. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  252. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  253. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  254. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  255. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  256. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  257. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  258. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  259. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +72 -117
  260. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
  261. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +25 -13
  262. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
  263. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +157 -0
  264. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +381 -0
  265. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +127 -0
  266. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +130 -0
  267. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
  268. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
  269. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
  270. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.d.ts +5 -0
  271. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.js +67 -0
  272. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +7 -1
  273. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +190 -59
  274. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +2 -0
  275. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +22 -0
  276. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +19 -0
  277. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +259 -0
  278. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +7 -0
  279. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +41 -0
  280. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +4 -4
  281. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
  282. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
  283. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
  284. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
  285. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +11 -11
  286. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +28 -23
  287. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
  288. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
  289. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +21 -0
  290. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +100 -0
  291. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +18 -5
  292. package/packages/omo-codex/plugin/components/ulw-loop/package.json +7 -6
  293. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +7 -2
  294. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
  295. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +34 -11
  296. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +52 -0
  297. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
  298. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
  299. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  300. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +59 -77
  301. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
  302. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
  303. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  304. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +52 -46
  305. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
  306. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
  307. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +51 -33
  308. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  309. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
  310. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +27 -9
  311. package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
  312. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
  313. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +23 -16
  314. package/packages/omo-codex/plugin/components/ulw-loop/src/ledger.ts +38 -0
  315. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +32 -4
  316. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-commit.ts +132 -0
  317. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +67 -54
  318. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
  319. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +140 -119
  320. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-log.ts +112 -0
  321. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +61 -0
  322. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  323. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  324. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +71 -15
  325. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  326. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +92 -136
  327. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +38 -13
  328. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +218 -0
  329. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +156 -0
  330. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +143 -0
  331. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
  332. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-budget-io.ts +59 -0
  333. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +201 -52
  334. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +22 -0
  335. package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +257 -0
  336. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +45 -0
  337. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +4 -4
  338. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
  339. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
  340. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +12 -10
  341. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +27 -22
  342. package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
  343. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +133 -0
  344. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +131 -82
  345. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
  346. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
  347. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
  348. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
  349. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
  350. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
  351. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
  352. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
  353. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
  354. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
  355. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
  356. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
  357. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
  358. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +35 -0
  359. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +88 -11
  360. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/barrier.ts +13 -0
  361. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
  362. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-child.ts +65 -0
  363. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-cli-qa.mjs +76 -0
  364. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-crash.ts +23 -0
  365. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +58 -0
  366. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-writer.ts +65 -0
  367. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/lease-clock.ts +23 -0
  368. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
  369. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -0
  370. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +3 -2
  371. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  372. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-log.test.ts +252 -0
  373. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-recovery.test.ts +190 -0
  374. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
  375. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +74 -25
  376. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-legacy-projection.test.ts +228 -0
  377. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-newest.test.ts +72 -0
  378. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  379. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  380. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
  381. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
  382. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  383. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +51 -2
  384. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  385. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  386. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +58 -3
  387. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
  388. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-completed-plan.test.ts +43 -0
  389. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
  390. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +174 -0
  391. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
  392. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +169 -0
  393. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
  394. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +452 -7
  395. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +113 -0
  396. package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +310 -0
  397. package/packages/omo-codex/plugin/components/ulw-loop/test/status-next-actions-surface.test.ts +133 -0
  398. package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +12 -12
  399. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +12 -6
  400. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  401. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +113 -0
  402. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
  403. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  404. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  405. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  406. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  407. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  408. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  409. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  410. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  411. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
  412. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  413. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  414. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  415. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  416. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  417. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  418. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  419. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  420. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  421. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  422. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  423. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  424. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  425. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  426. package/packages/omo-codex/plugin/package-lock.json +992 -681
  427. package/packages/omo-codex/plugin/package.json +6 -3
  428. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  429. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  430. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  431. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  432. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  433. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
  434. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  435. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
  436. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
  437. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
  438. package/packages/omo-codex/plugin/scripts/sync-skills.d.mts +4 -0
  439. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +114 -67
  440. package/packages/omo-codex/plugin/shared/package.json +3 -4
  441. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  442. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  443. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  444. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  445. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +13 -1
  446. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +37 -0
  447. package/packages/omo-codex/plugin/skills/browser/SKILL.md +109 -0
  448. package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
  449. package/packages/omo-codex/plugin/skills/browser/references/commands.md +105 -0
  450. package/packages/omo-codex/plugin/skills/browser/references/install.md +97 -0
  451. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +62 -0
  452. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
  453. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +61 -0
  454. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +62 -0
  455. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +61 -0
  456. package/packages/omo-codex/plugin/skills/browser/references/remote.md +25 -0
  457. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
  458. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
  459. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  460. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +57 -0
  461. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +50 -0
  462. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -0
  463. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  464. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  465. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  466. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  467. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  468. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  469. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  470. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  471. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  472. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  473. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +5 -3
  474. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  475. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +26 -5
  476. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
  477. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
  478. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  479. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  480. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  481. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  482. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  483. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  484. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  485. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +104 -0
  486. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  487. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  488. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +10 -0
  489. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +8 -3
  490. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +13 -4
  491. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  492. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +146 -0
  493. package/packages/omo-codex/plugin/skills/frontend/references/design/aside.md +1 -1
  494. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  495. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +30 -6
  496. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +19 -5
  497. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  498. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  499. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  500. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  501. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  502. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  503. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  504. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -0
  505. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  506. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  507. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +20 -18
  508. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  509. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +7 -5
  510. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +5 -5
  511. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  512. package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
  513. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
  514. package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
  515. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
  516. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
  517. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
  518. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
  519. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
  520. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
  521. package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
  522. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
  523. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
  524. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
  525. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
  526. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
  527. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  528. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  529. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  530. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
  531. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +11 -9
  532. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +11 -9
  533. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +116 -424
  534. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
  535. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +40 -28
  536. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +2 -1
  537. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +2 -2
  538. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  539. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  540. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  541. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  542. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
  543. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +14 -7
  544. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
  545. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  546. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +102 -107
  547. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +38 -39
  548. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  549. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +31 -2
  550. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
  551. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +34 -11
  552. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +9 -10
  553. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +17 -13
  554. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +5 -6
  555. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +4 -4
  556. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  557. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  558. package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +63 -0
  559. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +52 -33
  560. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +187 -0
  561. package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +66 -0
  562. package/packages/omo-codex/plugin/skills/ulw-research/scripts/cli-support.mjs +102 -0
  563. package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +162 -0
  564. package/packages/omo-codex/plugin/skills/ulw-research/scripts/css-lite.mjs +204 -0
  565. package/packages/omo-codex/plugin/skills/ulw-research/scripts/design-spec.mjs +161 -0
  566. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entities.mjs +39 -0
  567. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entry-guard.mjs +21 -0
  568. package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
  569. package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract.mjs +229 -0
  570. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-figures.mjs +173 -0
  571. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-layout.mjs +146 -0
  572. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +167 -0
  573. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-structure.mjs +118 -0
  574. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-text.mjs +190 -0
  575. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +239 -0
  576. package/packages/omo-codex/plugin/skills/ulw-research/scripts/layout-probe.mjs +83 -0
  577. package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +250 -0
  578. package/packages/omo-codex/plugin/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
  579. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
  580. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +61 -0
  581. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  582. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +10 -7
  583. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +77 -0
  584. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  585. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +12 -12
  586. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +13 -28
  587. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  588. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  589. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
  590. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -29
  591. package/packages/omo-codex/plugin/test/bootstrap-default-role.test.mjs +66 -0
  592. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  593. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  594. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  595. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  596. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +100 -2
  597. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
  598. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  599. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
  600. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
  601. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
  602. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +81 -3
  603. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +57 -26
  604. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +37 -0
  605. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
  606. package/packages/omo-codex/scripts/install-dist/install-local.mjs +16238 -4291
  607. package/packages/{omo-codex/plugin/components/ultrawork/directive.md → prompts-core/prompts/ultrawork/codex.md} +102 -107
  608. package/packages/shared-skills/package.json +7 -1
  609. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  610. package/packages/shared-skills/skill-source-filter.mjs +44 -0
  611. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  612. package/packages/shared-skills/skills/ast-grep/SKILL.md +13 -1
  613. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +37 -0
  614. package/packages/shared-skills/skills/browser/SKILL.md +109 -0
  615. package/packages/shared-skills/skills/browser/references/commands.md +105 -0
  616. package/packages/shared-skills/skills/browser/references/install.md +97 -0
  617. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +62 -0
  618. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
  619. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +61 -0
  620. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +62 -0
  621. package/packages/shared-skills/skills/browser/references/recipes/1password.md +61 -0
  622. package/packages/shared-skills/skills/browser/references/remote.md +25 -0
  623. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
  624. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
  625. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  626. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +57 -0
  627. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +50 -0
  628. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
  629. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  630. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  631. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  632. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  633. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  634. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  635. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  636. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  637. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  638. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  639. package/packages/shared-skills/skills/debugging/SKILL.md +5 -3
  640. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  641. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +26 -5
  642. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
  643. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
  644. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  645. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  646. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  647. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  648. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  649. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  650. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  651. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  652. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +104 -0
  653. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  654. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  655. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +10 -0
  656. package/packages/shared-skills/skills/frontend/SKILL.md +8 -3
  657. package/packages/shared-skills/skills/frontend/references/design/README.md +13 -4
  658. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  659. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +146 -0
  660. package/packages/shared-skills/skills/frontend/references/design/aside.md +1 -1
  661. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  662. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +30 -6
  663. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +19 -5
  664. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  665. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  666. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  667. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  668. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  669. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  670. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  671. package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -0
  672. package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  673. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  674. package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
  675. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  676. package/packages/shared-skills/skills/programming/SKILL.md +12 -18
  677. package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
  678. package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
  679. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
  680. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
  681. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
  682. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
  683. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
  684. package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
  685. package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
  686. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
  687. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
  688. package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
  689. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
  690. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
  691. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  692. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  693. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  694. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  695. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
  696. package/packages/shared-skills/skills/refactor/SKILL.md +5 -5
  697. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +5 -5
  698. package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
  699. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
  700. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +40 -28
  701. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +2 -1
  702. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +2 -2
  703. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  704. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  705. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  706. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  707. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
  708. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +14 -7
  709. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
  710. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  711. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +27 -25
  712. package/packages/shared-skills/skills/ulw-plan/SKILL.md +10 -11
  713. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +18 -13
  714. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +5 -6
  715. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +4 -4
  716. package/packages/shared-skills/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  717. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  718. package/packages/shared-skills/skills/ulw-research/AGENTS.md +63 -0
  719. package/packages/shared-skills/skills/ulw-research/SKILL.md +47 -30
  720. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +187 -0
  721. package/packages/shared-skills/skills/ulw-research/references/report-gates.md +66 -0
  722. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.mjs +102 -0
  723. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.test.ts +88 -0
  724. package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +162 -0
  725. package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +177 -0
  726. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.mjs +204 -0
  727. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.test.ts +159 -0
  728. package/packages/shared-skills/skills/ulw-research/scripts/design-spec.mjs +161 -0
  729. package/packages/shared-skills/skills/ulw-research/scripts/design-spec.test.ts +162 -0
  730. package/packages/shared-skills/skills/ulw-research/scripts/entities.mjs +39 -0
  731. package/packages/shared-skills/skills/ulw-research/scripts/entry-guard.mjs +21 -0
  732. package/packages/shared-skills/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
  733. package/packages/shared-skills/skills/ulw-research/scripts/format-extract.mjs +229 -0
  734. package/packages/shared-skills/skills/ulw-research/scripts/format-extract.test.ts +243 -0
  735. package/packages/shared-skills/skills/ulw-research/scripts/gates-figures.mjs +173 -0
  736. package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.mjs +146 -0
  737. package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.test.ts +236 -0
  738. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +167 -0
  739. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.test.ts +265 -0
  740. package/packages/shared-skills/skills/ulw-research/scripts/gates-structure.mjs +118 -0
  741. package/packages/shared-skills/skills/ulw-research/scripts/gates-text.mjs +190 -0
  742. package/packages/shared-skills/skills/ulw-research/scripts/glossary-vocabulary.test.ts +43 -0
  743. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +239 -0
  744. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.test.ts +191 -0
  745. package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.mjs +83 -0
  746. package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.test.ts +89 -0
  747. package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +250 -0
  748. package/packages/shared-skills/skills/ulw-research/scripts/outcome.test.ts +281 -0
  749. package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
  750. package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.test.ts +246 -0
  751. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
  752. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +61 -0
  753. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +213 -0
  754. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/assets/figure-1.svg +1 -0
  755. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/bad-report.html +44 -0
  756. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/boxes.json +90 -0
  757. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/design-spec.md +29 -0
  758. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/good-report.html +57 -0
  759. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference-report.html +86 -0
  760. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference.md +23 -0
  761. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  762. package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
  763. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +77 -0
  764. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  765. package/script/qa/xterm-live-terminal.mjs +18 -2
  766. package/dist/cli/install-senpi/index.d.ts +0 -1
  767. package/dist/cli/senpi-platform-flag.d.ts +0 -4
  768. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  769. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  770. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  771. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  772. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  773. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  774. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  775. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  776. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12244
  777. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9842
  778. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  779. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  780. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  781. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  782. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  783. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  784. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  785. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  786. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  787. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  788. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  789. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  790. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  791. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  792. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  793. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  794. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  795. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  796. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  797. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  798. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  799. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  800. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  801. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  802. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  803. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  804. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  805. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  806. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  807. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  808. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  809. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  810. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  811. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  812. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  813. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  814. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  815. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  816. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  817. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  818. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  819. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  820. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  821. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  822. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  823. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  824. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  825. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  826. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  827. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  828. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  829. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  830. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -484
  831. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  832. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  833. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  834. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  835. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  836. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  837. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  838. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  839. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  840. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  841. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  842. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  843. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -194
  844. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  845. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  846. package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +0 -45
  847. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  848. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  849. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  850. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  851. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  852. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  853. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -194
  854. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  855. package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +0 -45
  856. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  857. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  858. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  859. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  860. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  861. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  862. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  863. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  864. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  865. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  866. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  867. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  868. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  869. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -15,6 +15,13 @@ import { pathToFileURL as pathToFileURL3 } from "node:url";
15
15
  // ../lsp-core/src/lsp/connection.ts
16
16
  import { pathToFileURL } from "node:url";
17
17
 
18
+ // ../lsp-core/src/lsp/timer-provider.ts
19
+ var realTimerProvider = {
20
+ now: () => Date.now(),
21
+ setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
22
+ clearTimeout: (handle) => clearTimeout(handle)
23
+ };
24
+
18
25
  // ../lsp-core/src/lsp/constants.ts
19
26
  var DEFAULT_MAX_REFERENCES = 200;
20
27
  var DEFAULT_MAX_SYMBOLS = 200;
@@ -23,28 +30,24 @@ var DEFAULT_MAX_DIRECTORY_FILES = 50;
23
30
  var REQUEST_TIMEOUT_MS = 15000;
24
31
  var INIT_TIMEOUT_MS = 60000;
25
32
  var IDLE_TIMEOUT_MS = 5 * 60000;
33
+ var MAX_RESIDENT_CLIENTS = 6;
26
34
  var REAPER_INTERVAL_MS = 60000;
27
35
  var STOP_HARD_KILL_TIMEOUT_MS = 5000;
28
36
  var STOP_SIGKILL_GRACE_MS = 1000;
37
+ var CLIENT_RESPAWN_RETRY_LIMIT = 2;
38
+ var CLIENT_RESPAWN_COOLDOWN_MS = 60000;
29
39
 
30
40
  // ../lsp-core/src/lsp/errors.ts
31
41
  class LspConnectionClosedError extends Error {
32
- serverId;
33
- root;
34
- name = "LspConnectionClosedError";
35
42
  constructor(serverId, root, message) {
36
43
  super(message ?? `LSP connection closed for ${serverId} at ${root}`);
37
44
  this.serverId = serverId;
38
45
  this.root = root;
46
+ this.name = "LspConnectionClosedError";
39
47
  }
40
48
  }
41
49
 
42
50
  class LspProcessExitedError extends Error {
43
- serverId;
44
- root;
45
- exitCode;
46
- stderrTail;
47
- name = "LspProcessExitedError";
48
51
  constructor(serverId, root, exitCode, stderrTail) {
49
52
  const stderrSuffix = stderrTail ? `
50
53
  stderr tail: ${stderrTail}` : "";
@@ -53,46 +56,59 @@ stderr tail: ${stderrTail}` : "";
53
56
  this.root = root;
54
57
  this.exitCode = exitCode;
55
58
  this.stderrTail = stderrTail;
59
+ this.name = "LspProcessExitedError";
56
60
  }
57
61
  }
58
62
 
59
63
  class LspRequestTimeoutError extends Error {
60
- method;
61
- stderrTail;
62
- name = "LspRequestTimeoutError";
63
64
  constructor(method, stderrTail) {
64
65
  const stderrSuffix = stderrTail ? `
65
66
  recent stderr: ${stderrTail}` : "";
66
67
  super(`LSP request timeout (method: ${method})${stderrSuffix}`);
67
68
  this.method = method;
68
69
  this.stderrTail = stderrTail;
70
+ this.name = "LspRequestTimeoutError";
69
71
  }
70
72
  }
71
73
 
72
74
  class LspInvalidPathError extends Error {
73
- name = "LspInvalidPathError";
75
+ constructor() {
76
+ super(...arguments);
77
+ this.name = "LspInvalidPathError";
78
+ }
74
79
  }
75
80
 
76
81
  class LspServerLookupError extends Error {
77
- lookup;
78
- name = "LspServerLookupError";
79
82
  constructor(message, lookup) {
80
83
  super(message);
81
84
  this.lookup = lookup;
85
+ this.name = "LspServerLookupError";
82
86
  }
83
87
  }
84
88
 
85
89
  class LspServerInitializingError extends Error {
86
- originalError;
87
- name = "LspServerInitializingError";
88
90
  constructor(originalError) {
89
91
  super(`LSP server is still initializing. Please retry in a few seconds. Original error: ${originalError.message}`);
90
92
  this.originalError = originalError;
93
+ this.name = "LspServerInitializingError";
91
94
  }
92
95
  }
93
96
 
94
97
  class LspProcessSpawnError extends Error {
95
- name = "LspProcessSpawnError";
98
+ constructor() {
99
+ super(...arguments);
100
+ this.name = "LspProcessSpawnError";
101
+ }
102
+ }
103
+
104
+ class LspClientRespawnBudgetExceededError extends Error {
105
+ constructor(serverId, root, retryLimit) {
106
+ super(`LSP server ${serverId} at ${root} failed to stay alive; respawn budget exhausted ` + `(${retryLimit} consecutive dead generations). Retrying after the cooldown may succeed.`);
107
+ this.serverId = serverId;
108
+ this.root = root;
109
+ this.retryLimit = retryLimit;
110
+ this.name = "LspClientRespawnBudgetExceededError";
111
+ }
96
112
  }
97
113
  function isLspDeadConnectionError(err) {
98
114
  return err instanceof LspConnectionClosedError || err instanceof LspProcessExitedError;
@@ -108,20 +124,31 @@ var METHOD_NOT_FOUND = -32601;
108
124
  var INTERNAL_ERROR = -32603;
109
125
 
110
126
  class JsonRpcConnection {
111
- reader;
112
- writer;
113
- pendingRequests = new Map;
114
- notificationHandlers = new Map;
115
- requestHandlers = new Map;
116
- closeHandlers = [];
117
- errorHandlers = [];
118
- inputBuffer = Buffer.alloc(0);
119
- nextRequestId = 1;
120
- listening = false;
121
- disposed = false;
122
127
  constructor(reader, writer) {
123
128
  this.reader = reader;
124
129
  this.writer = writer;
130
+ this.pendingRequests = new Map;
131
+ this.notificationHandlers = new Map;
132
+ this.requestHandlers = new Map;
133
+ this.closeHandlers = [];
134
+ this.errorHandlers = [];
135
+ this.inputBuffer = Buffer.alloc(0);
136
+ this.nextRequestId = 1;
137
+ this.listening = false;
138
+ this.disposed = false;
139
+ this.handleData = (chunk) => {
140
+ const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
141
+ this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
142
+ this.drainInputBuffer();
143
+ };
144
+ this.handleClose = () => {
145
+ for (const handler of this.closeHandlers) {
146
+ handler();
147
+ }
148
+ };
149
+ this.handleStreamError = (error) => {
150
+ this.emitError(error);
151
+ };
125
152
  }
126
153
  listen() {
127
154
  if (this.listening)
@@ -156,6 +183,7 @@ class JsonRpcConnection {
156
183
  let cancelAfterWrite = false;
157
184
  let settled = false;
158
185
  const writeCancel = () => this.writeMessage({ jsonrpc: "2.0", method: "$/cancelRequest", params: { id } });
186
+ let rejectAfterCancelWrite;
159
187
  const responsePromise = new Promise((resolve, reject) => {
160
188
  const cleanup = () => {
161
189
  options.signal?.removeEventListener("abort", onAbort);
@@ -167,15 +195,19 @@ class JsonRpcConnection {
167
195
  this.pendingRequests.delete(key);
168
196
  cleanup();
169
197
  const rejectCancelled = () => reject(abortError(options.signal));
198
+ rejectAfterCancelWrite = async () => {
199
+ try {
200
+ await writeCancel();
201
+ } catch (error) {
202
+ this.emitError(toError(error));
203
+ }
204
+ rejectCancelled();
205
+ };
170
206
  if (!requestWritten) {
171
207
  cancelAfterWrite = true;
172
- rejectCancelled();
173
208
  return;
174
209
  }
175
- writeCancel().then(rejectCancelled, (error) => {
176
- this.emitError(toError(error));
177
- rejectCancelled();
178
- });
210
+ rejectAfterCancelWrite();
179
211
  };
180
212
  const onAbort = () => settleCancel();
181
213
  this.pendingRequests.set(key, {
@@ -203,7 +235,7 @@ class JsonRpcConnection {
203
235
  await this.writeMessage(message);
204
236
  requestWritten = true;
205
237
  if (cancelAfterWrite)
206
- await writeCancel();
238
+ await rejectAfterCancelWrite?.();
207
239
  } catch (error) {
208
240
  if (settled)
209
241
  return responsePromise;
@@ -242,19 +274,6 @@ class JsonRpcConnection {
242
274
  this.notificationHandlers.clear();
243
275
  this.requestHandlers.clear();
244
276
  }
245
- handleData = (chunk) => {
246
- const chunkBuffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
247
- this.inputBuffer = Buffer.concat([this.inputBuffer, chunkBuffer]);
248
- this.drainInputBuffer();
249
- };
250
- handleClose = () => {
251
- for (const handler of this.closeHandlers) {
252
- handler();
253
- }
254
- };
255
- handleStreamError = (error) => {
256
- this.emitError(error);
257
- };
258
277
  drainInputBuffer() {
259
278
  while (true) {
260
279
  const headerEnd = this.inputBuffer.indexOf(HEADER_SEPARATOR);
@@ -602,33 +621,29 @@ function isPosition(value) {
602
621
 
603
622
  // ../lsp-core/src/lsp/transport.ts
604
623
  class LspClientNotStartedError extends Error {
605
- serverId;
606
- root;
607
- name = "LspClientNotStartedError";
608
624
  constructor(serverId, root) {
609
625
  super("LSP client not started");
610
626
  this.serverId = serverId;
611
627
  this.root = root;
628
+ this.name = "LspClientNotStartedError";
612
629
  }
613
630
  }
614
631
 
615
632
  class LspClientTransport {
616
- root;
617
- server;
618
- proc = null;
619
- connection = null;
620
- stderrBuffer = [];
621
- processExited = false;
622
- diagnosticsStore = new Map;
623
- requestTimeoutMs;
624
- initializeTimeoutMs;
625
- workspaceApplyEditHandler = null;
626
- diagnosticPullSupported = false;
627
633
  constructor(root, server, timeouts = {}) {
628
634
  this.root = root;
629
635
  this.server = server;
636
+ this.proc = null;
637
+ this.connection = null;
638
+ this.stderrBuffer = [];
639
+ this.processExited = false;
640
+ this.diagnosticsStore = new Map;
641
+ this.workspaceApplyEditHandler = null;
642
+ this.diagnosticPullSupported = false;
643
+ this.documentFormattingSupported = false;
630
644
  this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
631
645
  this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
646
+ this.timerProvider = timeouts.timerProvider ?? realTimerProvider;
632
647
  }
633
648
  pid() {
634
649
  return this.proc?.pid;
@@ -648,6 +663,12 @@ class LspClientTransport {
648
663
  isDiagnosticPullSupported() {
649
664
  return this.diagnosticPullSupported;
650
665
  }
666
+ setDocumentFormattingSupported(supported) {
667
+ this.documentFormattingSupported = supported;
668
+ }
669
+ isDocumentFormattingSupported() {
670
+ return this.documentFormattingSupported;
671
+ }
651
672
  handlePublishDiagnostics(params) {
652
673
  this.diagnosticsStore.set(params.uri, [...params.diagnostics]);
653
674
  }
@@ -723,7 +744,7 @@ class LspClientTransport {
723
744
  const options = args[1];
724
745
  const timeoutMs = options?.timeoutMs ?? this.requestTimeoutMs;
725
746
  const timeoutController = new AbortController;
726
- const timeoutHandle = setTimeout(() => {
747
+ const timeoutHandle = this.timerProvider.setTimeout(() => {
727
748
  const stderrTail = this.stderrBuffer.slice(-5).join(`
728
749
  `);
729
750
  timeoutController.abort(new LspRequestTimeoutError(method, stderrTail || undefined));
@@ -742,7 +763,7 @@ class LspClientTransport {
742
763
  }
743
764
  throw error;
744
765
  } finally {
745
- clearTimeout(timeoutHandle);
766
+ this.timerProvider.clearTimeout(timeoutHandle);
746
767
  combinedSignal.dispose();
747
768
  }
748
769
  }
@@ -861,6 +882,14 @@ function supportsDiagnosticPull(capabilities) {
861
882
  return false;
862
883
  return Object.hasOwn(capabilities, "diagnosticProvider");
863
884
  }
885
+ function supportsDocumentFormatting(capabilities) {
886
+ if (capabilities === undefined)
887
+ return false;
888
+ const provider = capabilities.documentFormattingProvider;
889
+ if (provider === undefined || provider === null || provider === false)
890
+ return false;
891
+ return provider === true || typeof provider === "object";
892
+ }
864
893
 
865
894
  class LspClientConnection extends LspClientTransport {
866
895
  async initialize() {
@@ -877,6 +906,7 @@ class LspClientConnection extends LspClientTransport {
877
906
  references: {},
878
907
  documentSymbol: { hierarchicalDocumentSymbolSupport: true },
879
908
  publishDiagnostics: {},
909
+ formatting: { dynamicRegistration: false },
880
910
  rename: {
881
911
  prepareSupport: true,
882
912
  prepareSupportDefaultBehavior: 1
@@ -918,6 +948,7 @@ class LspClientConnection extends LspClientTransport {
918
948
  initializationOptions: this.server.initialization
919
949
  }, { timeoutMs: this.initializeTimeoutMs });
920
950
  this.setDiagnosticPullSupported(supportsDiagnosticPull(result?.capabilities));
951
+ this.setDocumentFormattingSupported(supportsDocumentFormatting(result?.capabilities));
921
952
  await this.sendNotification("initialized", {});
922
953
  await this.sendNotification("workspace/didChangeConfiguration", {
923
954
  settings: { json: { validate: { enable: true } } }
@@ -1123,6 +1154,17 @@ function canonicalPath(filePath) {
1123
1154
  return absolute;
1124
1155
  }
1125
1156
  }
1157
+ function normalizeDocumentUri(uri) {
1158
+ let decoded = uri;
1159
+ try {
1160
+ decoded = decodeURIComponent(uri);
1161
+ } catch {
1162
+ decoded = uri;
1163
+ }
1164
+ if (process.platform !== "win32")
1165
+ return decoded;
1166
+ return decoded.replace(/^(file:\/\/\/)([a-z]):/, (_match, prefix, drive) => `${prefix}${drive.toUpperCase()}:`);
1167
+ }
1126
1168
  function isSameOrDescendant(candidate, parent) {
1127
1169
  const suffix = relative(parent, candidate);
1128
1170
  return suffix === "" || !suffix.startsWith("..") && suffix !== "..";
@@ -1133,17 +1175,18 @@ function movedPath(candidate, oldPath, newPath) {
1133
1175
  }
1134
1176
 
1135
1177
  class WorkspaceDocumentState {
1136
- sendNotification;
1137
- clearDiagnostics;
1138
- openDocuments = new Map;
1139
- openByUri = new Map;
1140
- openPromises = new Map;
1141
- now;
1142
- versionlessPublishQuiescenceMs;
1143
1178
  constructor(sendNotification, clearDiagnostics, options = {}) {
1144
1179
  this.sendNotification = sendNotification;
1145
1180
  this.clearDiagnostics = clearDiagnostics;
1146
- this.now = options.now ?? (() => Date.now());
1181
+ this.openDocuments = new Map;
1182
+ this.openByUri = new Map;
1183
+ this.openPromises = new Map;
1184
+ this.timerProvider = options.timerProvider ?? {
1185
+ now: options.now ?? (() => Date.now()),
1186
+ setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
1187
+ clearTimeout: (handle) => clearTimeout(handle)
1188
+ };
1189
+ this.now = () => this.timerProvider.now();
1147
1190
  this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
1148
1191
  }
1149
1192
  async openFile(filePath) {
@@ -1165,7 +1208,7 @@ class WorkspaceDocumentState {
1165
1208
  return this.openDocuments.get(canonicalPath(filePath))?.version;
1166
1209
  }
1167
1210
  getStoredDiagnostics(uri) {
1168
- const state = this.openByUri.get(uri);
1211
+ const state = this.openByUri.get(normalizeDocumentUri(uri));
1169
1212
  if (!state)
1170
1213
  return [];
1171
1214
  return state.lastPublish?.diagnostics ?? state.pullCache?.diagnostics ?? [];
@@ -1187,13 +1230,13 @@ class WorkspaceDocumentState {
1187
1230
  return state !== undefined && state.uri === snapshot.uri && state.version === snapshot.version && state.generation === snapshot.documentGeneration;
1188
1231
  }
1189
1232
  getPullCache(snapshot) {
1190
- const state = this.openByUri.get(snapshot.uri);
1233
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1191
1234
  if (!state?.pullCache || state.pullCache.documentVersion !== snapshot.version)
1192
1235
  return null;
1193
1236
  return state.pullCache;
1194
1237
  }
1195
1238
  recordPullDiagnostics(snapshot, report) {
1196
- const state = this.openByUri.get(snapshot.uri);
1239
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1197
1240
  if (!state)
1198
1241
  return;
1199
1242
  state.pullCache = {
@@ -1203,7 +1246,7 @@ class WorkspaceDocumentState {
1203
1246
  };
1204
1247
  }
1205
1248
  recordPublishedDiagnostics(params) {
1206
- const state = this.openByUri.get(params.uri);
1249
+ const state = this.openByUri.get(normalizeDocumentUri(params.uri));
1207
1250
  if (!state)
1208
1251
  return;
1209
1252
  state.publishGeneration += 1;
@@ -1217,7 +1260,7 @@ class WorkspaceDocumentState {
1217
1260
  this.notifyWaiters(state);
1218
1261
  }
1219
1262
  resolvePushDiagnostics(snapshot) {
1220
- const state = this.openByUri.get(snapshot.uri);
1263
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1221
1264
  if (!state?.lastPublish)
1222
1265
  return { status: "missing" };
1223
1266
  const publish = state.lastPublish;
@@ -1231,20 +1274,22 @@ class WorkspaceDocumentState {
1231
1274
  return waitMs === 0 ? { status: "ready", diagnostics: publish.diagnostics } : { status: "wait", waitMs };
1232
1275
  }
1233
1276
  waitForDiagnosticsActivity(snapshot, timeoutMs) {
1234
- const state = this.openByUri.get(snapshot.uri);
1277
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1235
1278
  if (!state || timeoutMs <= 0)
1236
1279
  return Promise.resolve();
1280
+ if (state.publishGeneration !== snapshot.publishGeneration)
1281
+ return Promise.resolve();
1237
1282
  return new Promise((resolveActivity) => {
1238
1283
  let settled = false;
1239
1284
  const finish = () => {
1240
1285
  if (settled)
1241
1286
  return;
1242
1287
  settled = true;
1243
- clearTimeout(timer);
1288
+ this.timerProvider.clearTimeout(timer);
1244
1289
  state.waiters.delete(finish);
1245
1290
  resolveActivity();
1246
1291
  };
1247
- const timer = setTimeout(finish, timeoutMs);
1292
+ const timer = this.timerProvider.setTimeout(finish, timeoutMs);
1248
1293
  if (typeof timer.unref === "function")
1249
1294
  timer.unref();
1250
1295
  state.waiters.add(finish);
@@ -1352,7 +1397,7 @@ class WorkspaceDocumentState {
1352
1397
  waiters: new Set
1353
1398
  };
1354
1399
  this.openDocuments.set(path, state);
1355
- this.openByUri.set(state.uri, state);
1400
+ this.openByUri.set(normalizeDocumentUri(state.uri), state);
1356
1401
  this.notifyWaiters(state);
1357
1402
  await this.sendNotification("textDocument/didOpen", {
1358
1403
  textDocument: { uri: state.uri, languageId: state.languageId, version: state.version, text }
@@ -1377,7 +1422,7 @@ class WorkspaceDocumentState {
1377
1422
  }
1378
1423
  async closeDocument(state) {
1379
1424
  this.openDocuments.delete(state.path);
1380
- this.openByUri.delete(state.uri);
1425
+ this.openByUri.delete(normalizeDocumentUri(state.uri));
1381
1426
  this.clearDiagnostics(state.uri);
1382
1427
  this.notifyWaiters(state);
1383
1428
  await this.sendNotification("textDocument/didClose", { textDocument: { uri: state.uri } });
@@ -1406,13 +1451,11 @@ import { dirname, isAbsolute, relative as relative2, resolve as resolve2 } from
1406
1451
  import { fileURLToPath } from "node:url";
1407
1452
 
1408
1453
  class WorkspaceEditPathError extends Error {
1409
- path;
1410
- detail;
1411
- name = "WorkspaceEditPathError";
1412
1454
  constructor(path, detail) {
1413
1455
  super(`${detail}: ${path}`);
1414
1456
  this.path = path;
1415
1457
  this.detail = detail;
1458
+ this.name = "WorkspaceEditPathError";
1416
1459
  }
1417
1460
  }
1418
1461
  function isPathInsideWorkspace(filePath, workspaceRoot) {
@@ -1704,13 +1747,11 @@ function canonicalFingerprint(operations) {
1704
1747
 
1705
1748
  // ../lsp-core/src/lsp/workspace-edit-types.ts
1706
1749
  class WorkspaceEditValidationError extends Error {
1707
- changeIndex;
1708
- detail;
1709
- name = "WorkspaceEditValidationError";
1710
1750
  constructor(changeIndex, detail) {
1711
1751
  super(`change ${changeIndex}: ${detail}`);
1712
1752
  this.changeIndex = changeIndex;
1713
1753
  this.detail = detail;
1754
+ this.name = "WorkspaceEditValidationError";
1714
1755
  }
1715
1756
  }
1716
1757
 
@@ -1796,14 +1837,14 @@ function parseSinglePathResource(input, kind) {
1796
1837
  return;
1797
1838
  }
1798
1839
  if (kind === "create") {
1799
- const options2 = parseOptions(change["options"], ["overwrite", "ignoreIfExists"], changeIndex);
1840
+ const options = parseOptions(change["options"], ["overwrite", "ignoreIfExists"], changeIndex);
1800
1841
  target.operations.push({
1801
1842
  kind,
1802
1843
  changeIndex,
1803
1844
  path: resolvedPath.path,
1804
1845
  reportedPath: resolvedPath.requestedPath,
1805
- overwrite: options2["overwrite"] ?? false,
1806
- ignoreIfExists: options2["ignoreIfExists"] ?? false,
1846
+ overwrite: options["overwrite"] ?? false,
1847
+ ignoreIfExists: options["ignoreIfExists"] ?? false,
1807
1848
  followedSymbolicLink: resolvedPath.followedSymbolicLink
1808
1849
  });
1809
1850
  return;
@@ -2208,10 +2249,9 @@ function simulateDelete(operation, virtual) {
2208
2249
  import { existsSync as existsSync4, lstatSync as lstatSync3, readdirSync as readdirSync2 } from "node:fs";
2209
2250
  import { dirname as dirname3, resolve as resolve4 } from "node:path";
2210
2251
  class WorkspaceSnapshotBuilder {
2211
- workspaceRoot;
2212
- snapshots = new Map;
2213
2252
  constructor(workspaceRoot) {
2214
2253
  this.workspaceRoot = workspaceRoot;
2254
+ this.snapshots = new Map;
2215
2255
  }
2216
2256
  build(operations) {
2217
2257
  this.add(this.workspaceRoot, false);
@@ -2255,8 +2295,10 @@ function snapshotOperations(operations, workspaceRoot) {
2255
2295
 
2256
2296
  // ../lsp-core/src/lsp/workspace-edit-plan.ts
2257
2297
  class PlanPathIndex {
2258
- firstChangeByPath = new Map;
2259
- reportedPathByCanonical = new Map;
2298
+ constructor() {
2299
+ this.firstChangeByPath = new Map;
2300
+ this.reportedPathByCanonical = new Map;
2301
+ }
2260
2302
  build(operations) {
2261
2303
  for (const operation of operations) {
2262
2304
  switch (operation.kind) {
@@ -2272,11 +2314,11 @@ class PlanPathIndex {
2272
2314
  }
2273
2315
  }
2274
2316
  }
2275
- add(path, reportedPath2, changeIndex) {
2317
+ add(path, reportedPath, changeIndex) {
2276
2318
  if (!this.firstChangeByPath.has(path))
2277
2319
  this.firstChangeByPath.set(path, changeIndex);
2278
2320
  if (!this.reportedPathByCanonical.has(path))
2279
- this.reportedPathByCanonical.set(path, reportedPath2);
2321
+ this.reportedPathByCanonical.set(path, reportedPath);
2280
2322
  }
2281
2323
  }
2282
2324
  function fingerprintWorkspaceEdit(edit, workspaceRoot) {
@@ -2345,14 +2387,11 @@ function isRecord3(value) {
2345
2387
  }
2346
2388
 
2347
2389
  class WorkspaceMutationController {
2348
- workspaceRoot;
2349
- documents;
2350
- activeLease = null;
2351
- nextLeaseId = 1;
2352
- io;
2353
2390
  constructor(workspaceRoot, documents) {
2354
2391
  this.workspaceRoot = workspaceRoot;
2355
2392
  this.documents = documents;
2393
+ this.activeLease = null;
2394
+ this.nextLeaseId = 1;
2356
2395
  }
2357
2396
  setIo(io) {
2358
2397
  this.io = io;
@@ -2391,8 +2430,8 @@ class WorkspaceMutationController {
2391
2430
  };
2392
2431
  }
2393
2432
  lease.phase = "applying";
2394
- lease.applyCompletion = new Promise((resolve5) => {
2395
- lease.resolveApply = resolve5;
2433
+ lease.applyCompletion = new Promise((resolve) => {
2434
+ lease.resolveApply = resolve;
2396
2435
  });
2397
2436
  const edit = isRecord3(params) ? params["edit"] : undefined;
2398
2437
  const record = edit === undefined ? { fingerprint: null, result: failure("workspace/applyEdit params.edit is required", 0) } : await this.applyEdit(edit, lease);
@@ -2465,14 +2504,12 @@ var DIAGNOSTICS_FRESHNESS_TIMEOUT_MS = 3000;
2465
2504
  var VERSIONLESS_PUBLISH_QUIESCENCE_MS = 250;
2466
2505
 
2467
2506
  class LspClient extends LspClientConnection {
2468
- diagnosticPullErrors = [];
2469
- documents;
2470
- workspaceMutations;
2471
- diagnosticsFreshnessTimeoutMs;
2472
2507
  constructor(root, server, options = {}) {
2473
2508
  super(root, server, options);
2509
+ this.diagnosticPullErrors = [];
2474
2510
  this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
2475
2511
  this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
2512
+ timerProvider: this.timerProvider,
2476
2513
  versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
2477
2514
  });
2478
2515
  this.workspaceMutations = new WorkspaceMutationController(root, this.documents);
@@ -2525,6 +2562,18 @@ class LspClient extends LspClientConnection {
2525
2562
  textDocument: { uri: pathToFileURL3(absPath).href }
2526
2563
  }, options);
2527
2564
  }
2565
+ async formatDocument(filePath, options, signal) {
2566
+ if (!this.isDocumentFormattingSupported())
2567
+ return null;
2568
+ const absPath = this.resolveWorkspacePath(filePath);
2569
+ await this.openFile(absPath);
2570
+ const requestOptions = signal === undefined ? {} : { signal };
2571
+ const edits = await this.sendRequest("textDocument/formatting", {
2572
+ textDocument: { uri: pathToFileURL3(absPath).href },
2573
+ options
2574
+ }, requestOptions);
2575
+ return edits ?? [];
2576
+ }
2528
2577
  async workspaceSymbols(query, signal) {
2529
2578
  const options = signal === undefined ? {} : { signal };
2530
2579
  return this.sendRequest("workspace/symbol", { query }, options);
@@ -2564,7 +2613,7 @@ class LspClient extends LspClientConnection {
2564
2613
  const absPath = this.resolveWorkspacePath(filePath);
2565
2614
  const uri = pathToFileURL3(absPath).href;
2566
2615
  await this.openFile(absPath);
2567
- const deadlineAt = Date.now() + this.diagnosticsFreshnessTimeoutMs;
2616
+ const deadlineAt = this.timerProvider.now() + this.diagnosticsFreshnessTimeoutMs;
2568
2617
  for (;; ) {
2569
2618
  signal?.throwIfAborted();
2570
2619
  const snapshot = this.documents.captureDiagnosticSnapshot(absPath);
@@ -2577,13 +2626,13 @@ class LspClient extends LspClientConnection {
2577
2626
  if (!pushFallbackOnly) {
2578
2627
  const cached = this.documents.getPullCache(snapshot);
2579
2628
  try {
2580
- const remainingMs2 = deadlineAt - Date.now();
2581
- if (remainingMs2 <= 0)
2629
+ const remainingMs = deadlineAt - this.timerProvider.now();
2630
+ if (remainingMs <= 0)
2582
2631
  return this.freshnessTimeout(absPath);
2583
2632
  const result = await this.sendRequest("textDocument/diagnostic", {
2584
2633
  textDocument: { uri },
2585
2634
  ...cached?.resultId === undefined ? {} : { previousResultId: cached.resultId }
2586
- }, { timeoutMs: remainingMs2, ...signal === undefined ? {} : { signal } });
2635
+ }, { timeoutMs: remainingMs, ...signal === undefined ? {} : { signal } });
2587
2636
  if (!this.documents.isCurrentSnapshot(snapshot))
2588
2637
  continue;
2589
2638
  const report = this.parseDiagnosticPullReport(result);
@@ -2612,7 +2661,7 @@ class LspClient extends LspClientConnection {
2612
2661
  }
2613
2662
  if (!pushFallbackOnly)
2614
2663
  continue;
2615
- const remainingMs = deadlineAt - Date.now();
2664
+ const remainingMs = deadlineAt - this.timerProvider.now();
2616
2665
  if (remainingMs <= 0) {
2617
2666
  if (!this.isDiagnosticPullSupported() && snapshot.publishGeneration === 0) {
2618
2667
  const cached = this.documents.getPullCache(snapshot);
@@ -2664,7 +2713,7 @@ function waitForDiagnosticsActivity(wait, signal) {
2664
2713
  return wait;
2665
2714
  if (signal.aborted)
2666
2715
  return Promise.reject(abortError2(signal));
2667
- return new Promise((resolve6, reject) => {
2716
+ return new Promise((resolve, reject) => {
2668
2717
  const onAbort = () => {
2669
2718
  signal.removeEventListener("abort", onAbort);
2670
2719
  reject(abortError2(signal));
@@ -2672,7 +2721,7 @@ function waitForDiagnosticsActivity(wait, signal) {
2672
2721
  signal.addEventListener("abort", onAbort, { once: true });
2673
2722
  wait.then(() => {
2674
2723
  signal.removeEventListener("abort", onAbort);
2675
- resolve6();
2724
+ resolve();
2676
2725
  }, (error) => {
2677
2726
  signal.removeEventListener("abort", onAbort);
2678
2727
  reject(error);
@@ -2740,7 +2789,7 @@ async function stopClientBestEffort(client) {
2740
2789
  function awaitWithSignal(promise, signal) {
2741
2790
  if (!signal)
2742
2791
  return promise;
2743
- return new Promise((resolve6, reject) => {
2792
+ return new Promise((resolve, reject) => {
2744
2793
  let settled = false;
2745
2794
  const onAbort = () => {
2746
2795
  if (settled)
@@ -2758,7 +2807,7 @@ function awaitWithSignal(promise, signal) {
2758
2807
  return;
2759
2808
  settled = true;
2760
2809
  signal.removeEventListener("abort", onAbort);
2761
- resolve6(value);
2810
+ resolve(value);
2762
2811
  }, (err) => {
2763
2812
  if (settled)
2764
2813
  return;
@@ -2770,18 +2819,16 @@ function awaitWithSignal(promise, signal) {
2770
2819
  }
2771
2820
 
2772
2821
  class LspManager {
2773
- clients = new Map;
2774
- reaperHandle = null;
2775
- signalDisposer = null;
2776
- disposed = false;
2777
- idleTimeoutMs;
2778
- initTimeoutMs;
2779
- reaperIntervalMs;
2780
- clientFactory;
2781
- now;
2782
2822
  constructor(options = {}) {
2823
+ this.clients = new Map;
2824
+ this.pendingStops = new Map;
2825
+ this.respawnBudgets = new Map;
2826
+ this.reaperHandle = null;
2827
+ this.signalDisposer = null;
2828
+ this.disposed = false;
2783
2829
  this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
2784
2830
  this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
2831
+ this.maxResidentClients = options.maxResidentClients ?? MAX_RESIDENT_CLIENTS;
2785
2832
  this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
2786
2833
  this.clientFactory = options.clientFactory ?? ((root, server) => new LspClient(root, server));
2787
2834
  this.now = options.now ?? (() => Date.now());
@@ -2801,24 +2848,79 @@ class LspManager {
2801
2848
  getKey(root, serverId) {
2802
2849
  return `${root}::${serverId}`;
2803
2850
  }
2851
+ tombstoneStop(key, client) {
2852
+ const stop = stopClientBestEffort(client);
2853
+ this.pendingStops.set(key, stop);
2854
+ stop.finally(() => {
2855
+ if (this.pendingStops.get(key) === stop) {
2856
+ this.pendingStops.delete(key);
2857
+ }
2858
+ });
2859
+ return stop;
2860
+ }
2861
+ recordDeadGeneration(key) {
2862
+ let budget = this.respawnBudgets.get(key);
2863
+ if (budget === undefined) {
2864
+ budget = { deadGenerations: 0, exhaustedAt: null };
2865
+ this.respawnBudgets.set(key, budget);
2866
+ }
2867
+ budget.deadGenerations += 1;
2868
+ }
2869
+ markHealthyGeneration(key) {
2870
+ this.respawnBudgets.delete(key);
2871
+ }
2872
+ ensureRespawnAllowed(key, root, serverId) {
2873
+ const budget = this.respawnBudgets.get(key);
2874
+ if (budget === undefined || budget.deadGenerations < CLIENT_RESPAWN_RETRY_LIMIT)
2875
+ return;
2876
+ if (budget.exhaustedAt === null) {
2877
+ budget.exhaustedAt = this.now();
2878
+ throw new LspClientRespawnBudgetExceededError(serverId, root, CLIENT_RESPAWN_RETRY_LIMIT);
2879
+ }
2880
+ if (this.now() - budget.exhaustedAt < CLIENT_RESPAWN_COOLDOWN_MS) {
2881
+ throw new LspClientRespawnBudgetExceededError(serverId, root, CLIENT_RESPAWN_RETRY_LIMIT);
2882
+ }
2883
+ budget.deadGenerations = 0;
2884
+ budget.exhaustedAt = null;
2885
+ }
2804
2886
  reapStale() {
2805
2887
  const t = this.now();
2806
2888
  for (const [key, managed] of this.clients) {
2807
2889
  if (managed.isInitializing && managed.initializingSince !== null && t - managed.initializingSince > this.initTimeoutMs) {
2808
- stopClientBestEffort(managed.client);
2809
2890
  this.clients.delete(key);
2891
+ this.tombstoneStop(key, managed.client);
2810
2892
  continue;
2811
2893
  }
2812
2894
  if (!managed.isInitializing && managed.refCount === 0 && managed.pendingWaiters === 0 && t - managed.lastUsedAt > this.idleTimeoutMs) {
2813
- stopClientBestEffort(managed.client);
2814
2895
  this.clients.delete(key);
2896
+ this.tombstoneStop(key, managed.client);
2815
2897
  }
2816
2898
  }
2817
2899
  }
2900
+ evictForAdmission() {
2901
+ while (this.clients.size >= this.maxResidentClients) {
2902
+ const victim = this.leastRecentlyUsedIdleClient();
2903
+ if (!victim)
2904
+ return;
2905
+ this.clients.delete(victim.key);
2906
+ this.tombstoneStop(victim.key, victim.managed.client);
2907
+ }
2908
+ }
2909
+ leastRecentlyUsedIdleClient() {
2910
+ let candidate = null;
2911
+ for (const [key, managed] of this.clients) {
2912
+ if (managed.refCount > 0 || managed.pendingWaiters > 0 || managed.isInitializing)
2913
+ continue;
2914
+ if (candidate === null || managed.lastUsedAt < candidate.managed.lastUsedAt) {
2915
+ candidate = { key, managed };
2916
+ }
2917
+ }
2918
+ return candidate;
2919
+ }
2818
2920
  async tryDeleteIfOrphaned(key, managed) {
2819
2921
  if (managed.refCount === 0 && managed.pendingWaiters === 0 && !managed.isInitializing && this.clients.get(key) === managed) {
2820
2922
  this.clients.delete(key);
2821
- await stopClientBestEffort(managed.client);
2923
+ await this.tombstoneStop(key, managed.client);
2822
2924
  }
2823
2925
  }
2824
2926
  async getClient(root, server, signal) {
@@ -2827,12 +2929,22 @@ class LspManager {
2827
2929
  }
2828
2930
  signal?.throwIfAborted();
2829
2931
  const key = this.getKey(root, server.id);
2932
+ for (;; ) {
2933
+ const pendingStop = this.pendingStops.get(key);
2934
+ if (pendingStop === undefined)
2935
+ break;
2936
+ await awaitWithSignal(pendingStop, signal);
2937
+ signal?.throwIfAborted();
2938
+ }
2939
+ if (this.disposed) {
2940
+ throw new Error("LspManager has been disposed");
2941
+ }
2830
2942
  let managed = this.clients.get(key);
2831
2943
  if (managed) {
2832
2944
  const t = this.now();
2833
2945
  if (managed.isInitializing && managed.initializingSince !== null && t - managed.initializingSince > this.initTimeoutMs) {
2834
- await stopClientBestEffort(managed.client);
2835
2946
  this.clients.delete(key);
2947
+ await this.tombstoneStop(key, managed.client);
2836
2948
  managed = undefined;
2837
2949
  }
2838
2950
  }
@@ -2853,14 +2965,20 @@ class LspManager {
2853
2965
  signal.throwIfAborted();
2854
2966
  }
2855
2967
  if (!managed.client.isAlive()) {
2856
- await stopClientBestEffort(managed.client);
2857
- this.clients.delete(key);
2968
+ this.recordDeadGeneration(key);
2969
+ if (this.clients.get(key) === managed) {
2970
+ this.clients.delete(key);
2971
+ }
2972
+ await this.tombstoneStop(key, managed.client);
2858
2973
  return this.getClient(root, server, signal);
2859
2974
  }
2975
+ this.markHealthyGeneration(key);
2860
2976
  managed.refCount++;
2861
2977
  managed.lastUsedAt = this.now();
2862
2978
  return managed.client;
2863
2979
  }
2980
+ this.evictForAdmission();
2981
+ this.ensureRespawnAllowed(key, root, server.id);
2864
2982
  const client = this.clientFactory(root, server);
2865
2983
  const initStartedAt = this.now();
2866
2984
  const initPromise = (async () => {
@@ -2884,7 +3002,7 @@ class LspManager {
2884
3002
  if (this.clients.get(key) === newManaged) {
2885
3003
  this.clients.delete(key);
2886
3004
  }
2887
- await stopClientBestEffort(client);
3005
+ await this.tombstoneStop(key, client);
2888
3006
  throw err;
2889
3007
  }
2890
3008
  newManaged.pendingWaiters--;
@@ -2895,6 +3013,15 @@ class LspManager {
2895
3013
  await this.tryDeleteIfOrphaned(key, newManaged);
2896
3014
  signal.throwIfAborted();
2897
3015
  }
3016
+ if (!client.isAlive()) {
3017
+ this.recordDeadGeneration(key);
3018
+ if (this.clients.get(key) === newManaged) {
3019
+ this.clients.delete(key);
3020
+ }
3021
+ await this.tombstoneStop(key, client);
3022
+ return this.getClient(root, server, signal);
3023
+ }
3024
+ this.markHealthyGeneration(key);
2898
3025
  newManaged.refCount++;
2899
3026
  newManaged.lastUsedAt = this.now();
2900
3027
  return client;
@@ -2915,14 +3042,20 @@ class LspManager {
2915
3042
  if (client && managed.client !== client)
2916
3043
  return;
2917
3044
  this.clients.delete(key);
2918
- stopClientBestEffort(managed.client);
3045
+ this.tombstoneStop(key, managed.client);
2919
3046
  }
2920
3047
  warmupClient(root, server) {
2921
3048
  if (this.disposed)
2922
3049
  return;
2923
3050
  const key = this.getKey(root, server.id);
2924
- if (this.clients.has(key))
3051
+ if (this.clients.has(key) || this.pendingStops.has(key))
3052
+ return;
3053
+ this.evictForAdmission();
3054
+ try {
3055
+ this.ensureRespawnAllowed(key, root, server.id);
3056
+ } catch {
2925
3057
  return;
3058
+ }
2926
3059
  const client = this.clientFactory(root, server);
2927
3060
  const initStartedAt = this.now();
2928
3061
  const initPromise = (async () => {
@@ -2948,7 +3081,7 @@ class LspManager {
2948
3081
  if (this.clients.get(key) === managed) {
2949
3082
  this.clients.delete(key);
2950
3083
  }
2951
- stopClientBestEffort(client);
3084
+ this.tombstoneStop(key, client);
2952
3085
  });
2953
3086
  }
2954
3087
  isServerInitializing(root, serverId) {
@@ -2992,8 +3125,11 @@ class LspManager {
2992
3125
  for (const managed of this.clients.values()) {
2993
3126
  stopPromises.push(stopClientBestEffort(managed.client));
2994
3127
  }
3128
+ const tombstonedStops = [...this.pendingStops.values()];
2995
3129
  this.clients.clear();
2996
- await Promise.allSettled(stopPromises);
3130
+ this.respawnBudgets.clear();
3131
+ await Promise.allSettled([...stopPromises, ...tombstonedStops]);
3132
+ this.pendingStops.clear();
2997
3133
  }
2998
3134
  }
2999
3135
  var _defaultInstance = null;
@@ -3011,7 +3147,7 @@ async function disposeDefaultLspManager() {
3011
3147
  }
3012
3148
  }
3013
3149
  export {
3014
- getLspManager,
3150
+ LspManager,
3015
3151
  disposeDefaultLspManager,
3016
- LspManager
3152
+ getLspManager
3017
3153
  };