lazycodex-ai 5.0.0-beta.2 → 5.0.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/README.ja.md +25 -21
  2. package/README.ko.md +25 -21
  3. package/README.md +38 -23
  4. package/README.ru.md +24 -20
  5. package/README.zh-cn.md +25 -21
  6. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  7. package/dist/cli/index.js +23057 -20893
  8. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  9. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  10. package/dist/cli/runtime-commands.d.ts +1 -1
  11. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  12. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  13. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  14. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  15. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  16. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  17. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  18. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  19. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  20. package/dist/cli-node/index.js +23093 -20929
  21. package/package.json +8 -7
  22. package/packages/git-bash-mcp/dist/cli.js +5 -1
  23. package/packages/lsp-daemon/dist/cli.js +246 -185
  24. package/packages/lsp-daemon/dist/client.js +222 -164
  25. package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
  26. package/packages/lsp-daemon/dist/index.js +236 -177
  27. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  28. package/packages/lsp-tools-mcp/dist/cli.js +198 -136
  29. package/packages/lsp-tools-mcp/dist/lsp/manager.js +62 -92
  30. package/packages/lsp-tools-mcp/dist/mcp.js +200 -138
  31. package/packages/lsp-tools-mcp/dist/request-context.js +11 -12
  32. package/packages/lsp-tools-mcp/dist/tools.js +204 -146
  33. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -4
  34. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  35. package/packages/omo-codex/plugin/README.md +1 -1
  36. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +32 -31
  37. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  38. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  40. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +224 -81
  41. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +224 -82
  42. package/packages/omo-codex/plugin/components/codegraph/package.json +4 -4
  43. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +1 -0
  44. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +1 -0
  45. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  46. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  47. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  48. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  49. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  50. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  51. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  52. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  53. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  54. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  55. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  56. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  57. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  58. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +1 -5
  59. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +1 -5
  60. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  61. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  62. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +1 -5
  63. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +4 -21
  64. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  65. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  66. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  67. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +217 -171
  68. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  69. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  70. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  71. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  72. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  73. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  74. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  75. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  76. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  77. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  78. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  79. package/packages/omo-codex/plugin/components/rules/dist/cli.js +57 -42
  80. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  81. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  82. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  83. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  84. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +6 -2
  85. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  86. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  87. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  88. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
  89. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  90. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  91. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  92. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  93. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  94. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  95. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  96. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  97. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
  98. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +1 -2
  99. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  100. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  101. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  102. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  103. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +1 -2
  104. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  105. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  106. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  107. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
  108. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  109. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  110. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +3 -9
  111. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  112. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  113. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2433 -422
  114. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2437 -426
  115. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  116. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  117. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  118. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  119. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  120. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  121. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +5 -0
  122. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  123. package/packages/omo-codex/plugin/components/ultrawork/directive.md +13 -1
  124. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  125. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -5
  126. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +13 -1
  127. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -6
  128. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +31 -7
  129. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  130. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +5 -5
  131. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  132. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  133. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  134. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +5 -4
  135. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  136. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +5 -5
  137. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  138. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +6 -6
  139. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +12 -12
  140. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +28 -0
  141. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +12 -12
  142. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  143. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  144. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +3 -3
  145. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  146. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  147. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  148. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +1 -4
  149. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +8 -22
  150. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +16 -0
  151. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
  152. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  153. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +13 -1
  154. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2 -4
  155. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +1 -1
  156. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
  157. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
  158. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  159. package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
  160. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +3 -2
  161. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
  162. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -0
  163. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +3 -1
  164. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  165. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
  166. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +3 -3
  167. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  168. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
  169. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
  170. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +18 -0
  171. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  172. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
  173. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  174. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +8 -5
  175. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  176. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +4 -5
  177. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  178. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  179. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  180. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  181. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  182. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  183. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  184. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  185. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  186. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  187. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  188. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  189. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  190. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  191. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  192. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  193. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  194. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  195. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  196. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +17 -0
  197. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  198. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  199. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  200. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  201. package/packages/omo-codex/plugin/package-lock.json +681 -395
  202. package/packages/omo-codex/plugin/package.json +2 -2
  203. package/packages/omo-codex/plugin/scripts/AGENTS.md +40 -0
  204. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -1
  205. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +11 -11
  206. package/packages/omo-codex/plugin/shared/package.json +3 -4
  207. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  208. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  209. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
  210. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  211. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
  212. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  213. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +11 -7
  214. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  215. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  216. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  217. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  218. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  219. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  220. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  221. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  222. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  223. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +4 -4
  224. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  225. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -0
  226. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  227. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  228. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  229. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +13 -1
  230. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +12 -11
  231. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  232. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -2
  233. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
  234. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -0
  235. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -6
  236. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +31 -7
  237. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  238. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +5 -5
  239. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +1 -1
  240. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  241. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
  242. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  243. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  244. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +8 -28
  245. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
  246. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  247. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  248. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  249. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  250. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -1
  251. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
  252. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +4 -4
  253. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  254. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  255. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
  256. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +12 -12
  257. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -119
  258. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  259. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  260. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  261. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  262. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  263. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +0 -3
  264. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  265. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2601 -528
  266. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  267. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  268. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
  269. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  270. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
  271. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  272. package/packages/shared-skills/skills/frontend/SKILL.md +11 -7
  273. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  274. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  275. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  276. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  277. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  278. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  279. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  280. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  281. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  282. package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
  283. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  284. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -0
  285. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  286. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  287. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  288. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +9 -8
  289. package/packages/shared-skills/skills/ulw-plan/SKILL.md +6 -6
  290. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +31 -7
  291. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  292. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +5 -5
  293. package/packages/shared-skills/skills/ulw-research/SKILL.md +1 -1
  294. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  295. package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
  296. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  297. package/script/qa/xterm-live-terminal.mjs +18 -2
  298. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  299. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  300. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  301. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  302. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  303. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  304. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
  305. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  306. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  307. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/LICENSE +0 -0
  308. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  309. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +0 -0
  310. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  311. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  312. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  313. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  314. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  315. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  316. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  317. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  318. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  319. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -2,7 +2,7 @@ import { existsSync, readFileSync } from "node:fs";
2
2
  import { createRequire } from "node:module";
3
3
  import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- import { OMO_LSP_DAEMON_CLI, OMO_LSP_DAEMON_VERSION, resolveDaemonRuntime, } from "@code-yeongyu/lsp-daemon/client";
5
+ import { OMO_LSP_DAEMON_CLI, OMO_LSP_DAEMON_VERSION, resolveDaemonRuntime } from "@code-yeongyu/lsp-daemon/client";
6
6
  const requireFromHere = createRequire(import.meta.url);
7
7
  const PACKAGE_LSP_DAEMON_CLI = "@code-yeongyu/lsp-daemon/cli";
8
8
  export function ensureLspDaemonCliEnv(env = process.env) {
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.0.0-beta.2) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.21) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.0.0-beta.2) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.21) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.0.0-beta.2",
3
+ "version": "5.0.0-beta.21",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -54,10 +54,10 @@
54
54
  "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon"
55
55
  },
56
56
  "devDependencies": {
57
- "@biomejs/biome": "2.4.16",
58
- "@types/node": "^25.9.3",
59
- "typescript": "^6.0.3",
60
- "vitest": "^4.1.8"
57
+ "@biomejs/biome": "2.5.9",
58
+ "@types/node": "^26.2.0",
59
+ "typescript": "^7.0.2",
60
+ "vitest": "^4.1.11"
61
61
  },
62
62
  "engines": {
63
63
  "node": ">=20.0.0"
@@ -33,7 +33,7 @@ main().catch((error: unknown) => {
33
33
 
34
34
  async function runPackageLspMcpCli(): Promise<void> {
35
35
  const cliPath = resolveLspDaemonCliPath();
36
- const child = spawn(execPath, [cliPath, "mcp"], { stdio: "inherit" });
36
+ const child = spawn(execPath, [cliPath, "mcp"], { stdio: "inherit", windowsHide: true });
37
37
  await new Promise<void>((resolve, reject) => {
38
38
  child.once("error", reject);
39
39
  child.once("exit", (code, signal) => {
@@ -4,7 +4,7 @@ import { join, resolve } from "node:path";
4
4
 
5
5
  import { callDiagnosticsViaDaemon } from "@code-yeongyu/lsp-daemon/client";
6
6
  import { collectPostEditDiagnostics, type PostEditDiagnosticsOutcome } from "@oh-my-opencode/lsp-core/post-edit";
7
- import { parseLspRequestContext, type LspRequestContext } from "@oh-my-opencode/lsp-core/request-context";
7
+ import { type LspRequestContext, parseLspRequestContext } from "@oh-my-opencode/lsp-core/request-context";
8
8
 
9
9
  import { ensureLspDaemonCliEnv } from "./daemon-cli-path.js";
10
10
  import {
@@ -3,11 +3,7 @@ import { createRequire } from "node:module";
3
3
  import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
 
6
- import {
7
- OMO_LSP_DAEMON_CLI,
8
- OMO_LSP_DAEMON_VERSION,
9
- resolveDaemonRuntime,
10
- } from "@code-yeongyu/lsp-daemon/client";
6
+ import { OMO_LSP_DAEMON_CLI, OMO_LSP_DAEMON_VERSION, resolveDaemonRuntime } from "@code-yeongyu/lsp-daemon/client";
11
7
 
12
8
  const requireFromHere = createRequire(import.meta.url);
13
9
 
@@ -1,9 +1,8 @@
1
1
  import { mkdtempSync, rmSync } from "node:fs";
2
2
  import { tmpdir } from "node:os";
3
3
  import path from "node:path";
4
-
5
- import { afterEach, describe, expect, it } from "vitest";
6
4
  import type { PostEditDiagnosticsOutcome } from "@oh-my-opencode/lsp-core/post-edit";
5
+ import { afterEach, describe, expect, it } from "vitest";
7
6
 
8
7
  import { runLspPostCompactHook, runLspPostToolUseHook } from "../src/codex-hook.js";
9
8
 
@@ -149,11 +148,11 @@ describe("codex PostToolUse unavailable LSP suppression", () => {
149
148
  const input = postToolUseInput("session-daemon-down-probe", ".omo/ulw-loop/evidence/note.md");
150
149
  let calls = 0;
151
150
 
152
- await withPluginData(pluginData, async () => {
153
- await runLspPostToolUseHook(input, async () => {
154
- calls += 1;
155
- return markdownNotConfigured();
156
- });
151
+ await withPluginData(pluginData, async () => {
152
+ await runLspPostToolUseHook(input, async () => {
153
+ calls += 1;
154
+ return markdownNotConfigured();
155
+ });
157
156
  await runLspPostToolUseHook(input, async () => {
158
157
  calls += 1;
159
158
  return "error[markdown] (1000) at 1:1: cached call should have been skipped.";
@@ -1,9 +1,8 @@
1
1
  import { mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs";
2
2
  import { tmpdir } from "node:os";
3
3
  import path from "node:path";
4
-
5
- import { afterEach, describe, expect, it } from "vitest";
6
4
  import type { PostEditDiagnosticsOutcome } from "@oh-my-opencode/lsp-core/post-edit";
5
+ import { afterEach, describe, expect, it } from "vitest";
7
6
 
8
7
  import { codexLspRequestContext, extractMutatedFilePaths, runLspPostToolUseHook } from "../src/codex-hook.js";
9
8
 
@@ -2,6 +2,7 @@ import { describe, expect, it } from "vitest";
2
2
  import {
3
3
  listDirectoryEntries,
4
4
  readHooksJson,
5
+ readJsonFile,
5
6
  readMcpJson,
6
7
  readPackageJson,
7
8
  readTextFile,
@@ -44,7 +45,16 @@ describe("plugin package metadata", () => {
44
45
  expect(postCompactCommand).toBe(`node "${pluginRoot}/dist/cli.js" hook post-compact`);
45
46
  expect(lspServer?.command).toBe("node");
46
47
  expect(lspServer?.args).toEqual(["../../../../lsp-daemon/dist/cli.js", "mcp"]);
47
- expect(lspServer?.startup_timeout_sec).toBe(10);
48
+ expect(readJsonFile(".mcp.json")).toEqual({
49
+ mcpServers: {
50
+ lsp: {
51
+ command: "node",
52
+ args: ["../../../../lsp-daemon/dist/cli.js", "mcp"],
53
+ cwd: ".",
54
+ startup_timeout_sec: 10,
55
+ },
56
+ },
57
+ });
48
58
  expect(cliSource).not.toContain("./lazy-lsp-mcp.js");
49
59
  expect(cliSource).toContain("resolveLspDaemonCliPath");
50
60
  expect(daemonCliPathSource).toContain("@code-yeongyu/lsp-daemon/cli");
@@ -10,6 +10,17 @@ Conventions for human contributors and AI agents working on this repository.
10
10
  - Tabs for indentation. Double quotes for strings.
11
11
  - Tests use vitest with `#given .. #when .. #then` descriptions or plain `// given / // when / // then` body comments.
12
12
 
13
+ ## Layout
14
+
15
+ - `src/cli.ts`: bin `omo-rules`; routes `hook session-start` / `hook user-prompt-submit` / `hook post-tool-use` / `hook post-compact`.
16
+ - `src/codex-hook.ts`: the four lifecycle hook functions (`runSessionStartHook`, `runUserPromptSubmitHook`, `runPostToolUseHook`, `runPostCompactHook`) — config, engine load, budgets, dedup, output formatting. Main behavioral hotspot.
17
+ - `src/persistent-cache.ts` + `src/session-state-lock.ts`: persisted static/dynamic dedup, target fingerprints, post-compact claims (`withPostCompactBudget`, `claimPostCompactPending`), `withSessionStateLock` (`SESSION_STATE_LOCK_CONTENDED`).
18
+ - `src/tool-paths.ts`: Codex file path extraction for reads, edits, `apply_patch`, shell-style tools (`extractCodexToolPaths`).
19
+ - `src/transcript-search.ts` / `src/transcript-rule-filter.ts`: transcript scanning and filtering.
20
+ - `src/rules-engine-factory.ts`: bridges `@oh-my-opencode/rules-engine` (discovery, parsing, matching, config).
21
+ - `bundled-rules/`: shipped Markdown rules (`hephaestus/`, `windows-git-bash.md`); ordering and platform candidates pinned by tests.
22
+ - `hooks/hooks.json`: registration. `scripts/bench-codex-rules.mjs`: benchmark.
23
+
13
24
  ## Commands
14
25
 
15
26
  - `npm install` - install dependencies.
@@ -17,6 +28,7 @@ Conventions for human contributors and AI agents working on this repository.
17
28
  - `npm run typecheck` - strict TypeScript check.
18
29
  - `npm run check` - type check, biome, and build.
19
30
  - `npm pack --dry-run` - release package smoke test.
31
+ - `npm run bench` - builds then runs the rules benchmark (`node scripts/bench-codex-rules.mjs`).
20
32
  - `node dist/cli.js hook session-start < fixture.json` - smoke-test static rule injection.
21
33
  - `node dist/cli.js hook post-tool-use < fixture.json` - smoke-test dynamic rule injection.
22
34
 
@@ -1,9 +1,9 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.15/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.9/schema.json",
3
3
  "linter": {
4
4
  "enabled": true,
5
5
  "rules": {
6
- "recommended": true,
6
+ "preset": "recommended",
7
7
  "style": {
8
8
  "noDefaultExport": "error",
9
9
  "noEnum": "error",
@@ -19,20 +19,22 @@ var __toESM = (mod, isNodeMode, target) => {
19
19
  }
20
20
  target = mod != null ? __create(__getProtoOf(mod)) : {};
21
21
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
22
- for (let key of __getOwnPropNames(mod))
23
- if (!__hasOwnProp.call(to, key))
24
- __defProp(to, key, {
25
- get: __accessProp.bind(mod, key),
26
- enumerable: true
27
- });
22
+ if (mod && typeof mod === "object" || typeof mod === "function") {
23
+ for (let key of __getOwnPropNames(mod))
24
+ if (!__hasOwnProp.call(to, key))
25
+ __defProp(to, key, {
26
+ get: __accessProp.bind(mod, key),
27
+ enumerable: true
28
+ });
29
+ }
28
30
  if (canCache)
29
31
  cache.set(mod, to);
30
32
  return to;
31
33
  };
32
34
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
33
35
 
34
- // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/constants.js
35
- var require_constants = __commonJS((exports, module) => {
36
+ // ../../../node_modules/.bun/picomatch@4.0.7/node_modules/picomatch/lib/constants.js
37
+ var require_constants = __commonJS(function(exports, module) {
36
38
  var WIN_SLASH = "\\\\/";
37
39
  var WIN_NO_SLASH = `[^${WIN_SLASH}]`;
38
40
  var DEFAULT_MAX_EXTGLOB_RECURSION = 0;
@@ -176,8 +178,8 @@ var require_constants = __commonJS((exports, module) => {
176
178
  };
177
179
  });
178
180
 
179
- // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/utils.js
180
- var require_utils = __commonJS((exports) => {
181
+ // ../../../node_modules/.bun/picomatch@4.0.7/node_modules/picomatch/lib/utils.js
182
+ var require_utils = __commonJS(function(exports) {
181
183
  var {
182
184
  REGEX_BACKSLASH,
183
185
  REGEX_REMOVE_BACKSLASH,
@@ -239,8 +241,8 @@ var require_utils = __commonJS((exports) => {
239
241
  };
240
242
  });
241
243
 
242
- // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/scan.js
243
- var require_scan = __commonJS((exports, module) => {
244
+ // ../../../node_modules/.bun/picomatch@4.0.7/node_modules/picomatch/lib/scan.js
245
+ var require_scan = __commonJS(function(exports, module) {
244
246
  var utils = require_utils();
245
247
  var {
246
248
  CHAR_ASTERISK,
@@ -270,7 +272,7 @@ var require_scan = __commonJS((exports, module) => {
270
272
  var scan = (input, options) => {
271
273
  const opts = options || {};
272
274
  const length = input.length - 1;
273
- const scanToEnd = opts.parts === true || opts.scanToEnd === true;
275
+ const scanToEnd = opts.parts === true || opts.tokens === true || opts.scanToEnd === true;
274
276
  const slashes = [];
275
277
  const tokens = [];
276
278
  const parts = [];
@@ -377,14 +379,18 @@ var require_scan = __commonJS((exports, module) => {
377
379
  negatedExtglob = true;
378
380
  }
379
381
  if (scanToEnd === true) {
382
+ let parens = 0;
380
383
  while (eos() !== true && (code = advance())) {
381
384
  if (code === CHAR_BACKWARD_SLASH) {
382
385
  backslashes = token.backslashes = true;
383
- code = advance();
386
+ advance();
384
387
  continue;
385
388
  }
386
- if (code === CHAR_RIGHT_PARENTHESES) {
387
- isGlob = token.isGlob = true;
389
+ if (code === CHAR_LEFT_PARENTHESES) {
390
+ parens++;
391
+ continue;
392
+ }
393
+ if (code === CHAR_RIGHT_PARENTHESES && --parens === 0) {
388
394
  finished = true;
389
395
  break;
390
396
  }
@@ -439,13 +445,18 @@ var require_scan = __commonJS((exports, module) => {
439
445
  if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
440
446
  isGlob = token.isGlob = true;
441
447
  if (scanToEnd === true) {
448
+ let parens = 1;
442
449
  while (eos() !== true && (code = advance())) {
443
- if (code === CHAR_LEFT_PARENTHESES) {
450
+ if (code === CHAR_BACKWARD_SLASH) {
444
451
  backslashes = token.backslashes = true;
445
- code = advance();
452
+ advance();
453
+ continue;
454
+ }
455
+ if (code === CHAR_LEFT_PARENTHESES) {
456
+ parens++;
446
457
  continue;
447
458
  }
448
- if (code === CHAR_RIGHT_PARENTHESES) {
459
+ if (code === CHAR_RIGHT_PARENTHESES && --parens === 0) {
449
460
  finished = true;
450
461
  break;
451
462
  }
@@ -519,32 +530,31 @@ var require_scan = __commonJS((exports, module) => {
519
530
  if (opts.parts === true || opts.tokens === true) {
520
531
  let prevIndex;
521
532
  for (let idx = 0;idx < slashes.length; idx++) {
522
- const n = prevIndex ? prevIndex + 1 : start;
533
+ const n2 = prevIndex !== undefined ? prevIndex + 1 : start;
523
534
  const i = slashes[idx];
524
- const value = input.slice(n, i);
535
+ const value2 = input.slice(n2, i);
525
536
  if (opts.tokens) {
526
537
  if (idx === 0 && start !== 0) {
527
538
  tokens[idx].isPrefix = true;
528
539
  tokens[idx].value = prefix;
529
540
  } else {
530
- tokens[idx].value = value;
541
+ tokens[idx].value = value2;
531
542
  }
532
543
  depth(tokens[idx]);
533
544
  state.maxDepth += tokens[idx].depth;
534
545
  }
535
- if (idx !== 0 || value !== "") {
536
- parts.push(value);
546
+ if (i >= start) {
547
+ parts.push(value2);
548
+ prevIndex = i;
537
549
  }
538
- prevIndex = i;
539
550
  }
540
- if (prevIndex && prevIndex + 1 < input.length) {
541
- const value = input.slice(prevIndex + 1);
542
- parts.push(value);
543
- if (opts.tokens) {
544
- tokens[tokens.length - 1].value = value;
545
- depth(tokens[tokens.length - 1]);
546
- state.maxDepth += tokens[tokens.length - 1].depth;
547
- }
551
+ const n = prevIndex !== undefined ? prevIndex + 1 : start;
552
+ const value = input.slice(n);
553
+ parts.push(value);
554
+ if (opts.tokens && prevIndex && prevIndex + 1 < input.length) {
555
+ tokens[tokens.length - 1].value = value;
556
+ depth(tokens[tokens.length - 1]);
557
+ state.maxDepth += tokens[tokens.length - 1].depth;
548
558
  }
549
559
  state.slashes = slashes;
550
560
  state.parts = parts;
@@ -554,8 +564,8 @@ var require_scan = __commonJS((exports, module) => {
554
564
  module.exports = scan;
555
565
  });
556
566
 
557
- // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/parse.js
558
- var require_parse = __commonJS((exports, module) => {
567
+ // ../../../node_modules/.bun/picomatch@4.0.7/node_modules/picomatch/lib/parse.js
568
+ var require_parse = __commonJS(function(exports, module) {
559
569
  var constants = require_constants();
560
570
  var utils = require_utils();
561
571
  var {
@@ -1386,6 +1396,7 @@ var require_parse = __commonJS((exports, module) => {
1386
1396
  rest = rest.slice(3);
1387
1397
  consume("/**", 3);
1388
1398
  }
1399
+ const isEnd = eos() || state.parens > 0 && rest === ")".repeat(state.parens) && !extglobs.some((extglob) => extglob.type === "negate");
1389
1400
  if (prior.type === "bos" && eos()) {
1390
1401
  prev.type = "globstar";
1391
1402
  prev.value += value;
@@ -1395,7 +1406,7 @@ var require_parse = __commonJS((exports, module) => {
1395
1406
  consume(value);
1396
1407
  continue;
1397
1408
  }
1398
- if (prior.type === "slash" && prior.prev.type !== "bos" && !afterStar && eos()) {
1409
+ if (prior.type === "slash" && prior.prev.type !== "bos" && !afterStar && isEnd) {
1399
1410
  state.output = state.output.slice(0, -(prior.output + prev.output).length);
1400
1411
  prior.output = `(?:${prior.output}`;
1401
1412
  prev.type = "globstar";
@@ -1573,8 +1584,8 @@ var require_parse = __commonJS((exports, module) => {
1573
1584
  module.exports = parse;
1574
1585
  });
1575
1586
 
1576
- // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/lib/picomatch.js
1577
- var require_picomatch = __commonJS((exports, module) => {
1587
+ // ../../../node_modules/.bun/picomatch@4.0.7/node_modules/picomatch/lib/picomatch.js
1588
+ var require_picomatch = __commonJS(function(exports, module) {
1578
1589
  var scan = require_scan();
1579
1590
  var parse = require_parse();
1580
1591
  var utils = require_utils();
@@ -1713,8 +1724,8 @@ var require_picomatch = __commonJS((exports, module) => {
1713
1724
  module.exports = picomatch;
1714
1725
  });
1715
1726
 
1716
- // ../../../node_modules/.bun/picomatch@4.0.5/node_modules/picomatch/index.js
1717
- var require_picomatch2 = __commonJS((exports, module) => {
1727
+ // ../../../node_modules/.bun/picomatch@4.0.7/node_modules/picomatch/index.js
1728
+ var require_picomatch2 = __commonJS(function(exports, module) {
1718
1729
  var pico = require_picomatch();
1719
1730
  var utils = require_utils();
1720
1731
  function picomatch(glob, options, returnState = false) {
@@ -3883,7 +3894,11 @@ var MODEL_CONTEXT_BUDGETS = [
3883
3894
  effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT
3884
3895
  },
3885
3896
  { slug: "gpt-5.5", contextWindowTokens: 272000, effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT },
3886
- { slug: "gpt-5.6-luna-fast", contextWindowTokens: 272000, effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT },
3897
+ {
3898
+ slug: "gpt-5.6-luna-fast",
3899
+ contextWindowTokens: 272000,
3900
+ effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT
3901
+ },
3887
3902
  {
3888
3903
  slug: "codex-auto-review",
3889
3904
  contextWindowTokens: 272000,
@@ -4146,7 +4161,7 @@ function recoverDynamicRulePaths(engine, transcriptText, staticRules) {
4146
4161
  if (staticRulePaths.has(rulePath)) {
4147
4162
  continue;
4148
4163
  }
4149
- if (transcriptText !== null && transcriptText.includes(rulePath)) {
4164
+ if (transcriptText?.includes(rulePath)) {
4150
4165
  continue;
4151
4166
  }
4152
4167
  if (!existsSync4(rulePath)) {
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.2) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.21) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.2) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.21) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.0.0-beta.2) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.21) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.0.0-beta.2) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.21) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.0.0-beta.2",
3
+ "version": "5.0.0-beta.21",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -47,15 +47,15 @@
47
47
  "check": "tsc --noEmit && biome check . && npm run build"
48
48
  },
49
49
  "dependencies": {
50
- "picomatch": "^4.0.3"
50
+ "picomatch": "^4.0.7"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@oh-my-opencode/rules-engine": "file:../../../../rules-engine",
54
- "@biomejs/biome": "2.4.16",
55
- "@types/node": "^25.9.3",
56
- "@types/picomatch": "^4.0.0",
57
- "typescript": "^6.0.3",
58
- "vitest": "^4.1.8"
54
+ "@biomejs/biome": "2.5.9",
55
+ "@types/node": "^26.2.0",
56
+ "@types/picomatch": "^4.0.3",
57
+ "typescript": "^7.0.2",
58
+ "vitest": "^4.1.11"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=20.0.0"
@@ -1,6 +1,5 @@
1
- import { SOURCE_PRIORITY } from "@oh-my-opencode/rules-engine/engine";
2
- import { defaultConfig } from "@oh-my-opencode/rules-engine/engine";
3
1
  import type { PiRulesConfig, RuleSource } from "@oh-my-opencode/rules-engine/engine";
2
+ import { defaultConfig, SOURCE_PRIORITY } from "@oh-my-opencode/rules-engine/engine";
4
3
 
5
4
  export function configFromEnvironment(env: NodeJS.ProcessEnv = process.env): PiRulesConfig {
6
5
  const config = defaultConfig();
@@ -1,7 +1,7 @@
1
1
  import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
2
  import { homedir } from "node:os";
3
3
  import { dirname, join } from "node:path";
4
-
4
+ import type { Engine } from "@oh-my-opencode/rules-engine/engine";
5
5
  import {
6
6
  type PostCompactPendingKind,
7
7
  type PostCompactPendingState,
@@ -9,7 +9,6 @@ import {
9
9
  postCompactPendingKinds,
10
10
  postCompactRecoveringKinds,
11
11
  } from "./post-compact-state.js";
12
- import type { Engine } from "@oh-my-opencode/rules-engine/engine";
13
12
  import { SESSION_STATE_LOCK_CONTENDED, withSessionStateLock } from "./session-state-lock.js";
14
13
 
15
14
  export type PostCompactClaimResult = "claimed" | "not-pending" | "contended";
@@ -1,5 +1,5 @@
1
- import { hasContextPressureMarker } from "./context-pressure.js";
2
1
  import type { PiRulesConfig } from "@oh-my-opencode/rules-engine/engine";
2
+ import { hasContextPressureMarker } from "./context-pressure.js";
3
3
  import { readTranscriptSearchText } from "./transcript-search.js";
4
4
 
5
5
  export interface PostCompactBudgetContext {
@@ -33,7 +33,11 @@ const MODEL_CONTEXT_BUDGETS: readonly ModelContextBudget[] = [
33
33
  effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT,
34
34
  },
35
35
  { slug: "gpt-5.5", contextWindowTokens: 272_000, effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT },
36
- { slug: "gpt-5.6-luna-fast", contextWindowTokens: 272_000, effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT },
36
+ {
37
+ slug: "gpt-5.6-luna-fast",
38
+ contextWindowTokens: 272_000,
39
+ effectivePercent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT,
40
+ },
37
41
  {
38
42
  slug: "codex-auto-review",
39
43
  contextWindowTokens: 272_000,
@@ -1,11 +1,8 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { dirname } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
-
4
+ import { createEngine, findProjectRoot, findRuleCandidates } from "@oh-my-opencode/rules-engine/engine";
5
5
  import { configFromEnvironment } from "./config.js";
6
- import { createEngine } from "@oh-my-opencode/rules-engine/engine";
7
- import { findRuleCandidates } from "@oh-my-opencode/rules-engine/engine";
8
- import { findProjectRoot } from "@oh-my-opencode/rules-engine/engine";
9
6
 
10
7
  interface RulesEngineFactoryOptions {
11
8
  env?: NodeJS.ProcessEnv;
@@ -1,5 +1,6 @@
1
1
  import { existsSync } from "node:fs";
2
-
2
+ import type { Engine, LoadedRule, PiRulesConfig } from "@oh-my-opencode/rules-engine/engine";
3
+ import { isNeverTruncatedRule } from "@oh-my-opencode/rules-engine/engine";
3
4
  import type { CodexRulesHookOptions } from "./codex-hook-options.js";
4
5
  import { configFromEnvironment } from "./config.js";
5
6
  import { withPromptBudget } from "./event-budget.js";
@@ -7,9 +8,6 @@ import { formatAdditionalContextOutput } from "./hook-output.js";
7
8
  import { completePostCompactRecovery, hydrateEngineState, persistEngineState } from "./persistent-cache.js";
8
9
  import { withPostCompactBudget } from "./post-compact-budget.js";
9
10
  import { buildPostCompactReadDirective } from "./post-compact-directive.js";
10
- import type { Engine } from "@oh-my-opencode/rules-engine/engine";
11
- import { isNeverTruncatedRule } from "@oh-my-opencode/rules-engine/engine";
12
- import type { LoadedRule, PiRulesConfig } from "@oh-my-opencode/rules-engine/engine";
13
11
  import { createRulesEngine } from "./rules-engine-factory.js";
14
12
  import { filterRulesAlreadyInTranscript, filterRulesNotInTranscriptText } from "./transcript-rule-filter.js";
15
13
  import type { TranscriptSearchOptions } from "./transcript-search.js";
@@ -120,10 +118,7 @@ function runPostCompactRecovery(input: PostCompactRecoveryInput): string {
120
118
  engine.markStaticInjected(rule);
121
119
  }
122
120
  persistEngineState(engine, input.cachePath, input.channel);
123
- return formatAdditionalContextOutput(
124
- input.eventName,
125
- combineStaticContext(bodyBlock, directive),
126
- );
121
+ return formatAdditionalContextOutput(input.eventName, combineStaticContext(bodyBlock, directive));
127
122
  }
128
123
 
129
124
  function readRecoveryTranscriptText(transcriptPath: string | null): string | null {
@@ -153,7 +148,7 @@ function recoverDynamicRulePaths(
153
148
  if (staticRulePaths.has(rulePath)) {
154
149
  continue;
155
150
  }
156
- if (transcriptText !== null && transcriptText.includes(rulePath)) {
151
+ if (transcriptText?.includes(rulePath)) {
157
152
  continue;
158
153
  }
159
154
  if (!existsSync(rulePath)) {
@@ -1,19 +1,22 @@
1
1
  import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
+ import type { RuleCandidate } from "@oh-my-opencode/rules-engine/engine";
5
+ import {
6
+ createEngine,
7
+ defaultConfig,
8
+ type EngineDeps,
9
+ resolvePluginRulesRoot,
10
+ SOURCE_PRIORITY,
11
+ } from "@oh-my-opencode/rules-engine/engine";
4
12
  import { afterEach, describe, expect, it } from "vitest";
5
-
6
13
  import { configFromEnvironment } from "../src/config.js";
7
- import { SOURCE_PRIORITY } from "@oh-my-opencode/rules-engine/engine";
8
- import { createEngine, defaultConfig, type EngineDeps } from "@oh-my-opencode/rules-engine/engine";
9
- import { resolvePluginRulesRoot } from "@oh-my-opencode/rules-engine/engine";
10
- import type { RuleCandidate } from "@oh-my-opencode/rules-engine/engine";
11
14
 
12
15
  const projectRoot = "/tmp/codex-rules-bundled-priority";
13
16
  const bundledPath = join(projectRoot, "bundled-rules", "hephaestus.md");
14
17
  const homePath = join(projectRoot, "home", ".opencode", "rules", "hephaestus.md");
15
- const bundledBody = "Bundled baseline discipline.";
16
- const homeBody = "Home baseline discipline override.";
18
+ const bundledBody = "BUNDLED_BASELINE_SENTINEL";
19
+ const homeBody = "HOME_OVERRIDE_SENTINEL";
17
20
  const tempDirectories: string[] = [];
18
21
 
19
22
  afterEach(() => {
@@ -35,14 +38,7 @@ function globalCandidate(source: "plugin-bundled" | "~/.opencode/rules", path: s
35
38
  }
36
39
 
37
40
  function ruleMarkdown(body: string): string {
38
- return [
39
- "---",
40
- "description: OMO Hephaestus baseline discipline for Codex",
41
- "alwaysApply: true",
42
- "---",
43
- "",
44
- body,
45
- ].join("\n");
41
+ return ["---", "description: Fixture", "alwaysApply: true", "---", "", body].join("\n");
46
42
  }
47
43
 
48
44
  describe("plugin bundled rule priority", () => {
@@ -85,7 +81,6 @@ describe("plugin bundled rule priority", () => {
85
81
  // then
86
82
  expect(formatted).toContain(homePath);
87
83
  expect(formatted).toContain(homeBody);
88
- expect(formatted).not.toContain(`- [hephaestus.md]{${homePath}}`);
89
84
  expect(formatted).not.toContain(bundledPath);
90
85
  expect(formatted).not.toContain(bundledBody);
91
86
  });