lazycodex-ai 5.0.0-beta.4 → 5.0.0-beta.42

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 (551) 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/config-manager/parse-opencode-config-file.d.ts +2 -1
  7. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  8. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  9. package/dist/cli/index.js +67006 -64814
  10. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  11. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  12. package/dist/cli/runtime-commands.d.ts +1 -1
  13. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  14. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  15. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  16. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  17. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  18. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  19. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  20. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  21. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  22. package/dist/cli-node/index.js +67283 -65068
  23. package/package.json +9 -9
  24. package/packages/git-bash-mcp/dist/cli.js +6 -1
  25. package/packages/lsp-daemon/dist/cli.js +804 -329
  26. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  27. package/packages/lsp-daemon/dist/client.js +764 -286
  28. package/packages/lsp-daemon/dist/daemon-client.d.ts +1 -0
  29. package/packages/lsp-daemon/dist/daemon-client.js +3 -0
  30. package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
  31. package/packages/lsp-daemon/dist/index.js +768 -295
  32. package/packages/lsp-daemon/dist/proxy.js +3 -0
  33. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  34. package/packages/lsp-daemon/package.json +1 -1
  35. package/packages/lsp-tools-mcp/dist/cli.js +723 -250
  36. package/packages/lsp-tools-mcp/dist/lsp/manager.js +259 -125
  37. package/packages/lsp-tools-mcp/dist/mcp.js +725 -252
  38. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  39. package/packages/lsp-tools-mcp/dist/tools.js +729 -260
  40. package/packages/lsp-tools-mcp/package.json +1 -1
  41. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  42. package/packages/omo-codex/plugin/.mcp.json +0 -6
  43. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  44. package/packages/omo-codex/plugin/README.md +2 -2
  45. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +45 -49
  46. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  47. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  49. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  50. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  51. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  52. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  53. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  54. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  55. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  56. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  57. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  58. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  59. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  60. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  61. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  62. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +1 -5
  63. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +1 -5
  64. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  65. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  66. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +1 -5
  67. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +4 -21
  68. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +1 -1
  69. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  70. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  71. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  72. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +752 -300
  73. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  74. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  75. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  76. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  77. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  78. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  79. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  80. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  81. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  82. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  83. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  84. package/packages/omo-codex/plugin/components/rules/dist/cli.js +60 -45
  85. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  86. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  87. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  88. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  89. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +9 -5
  90. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  91. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  92. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  93. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
  94. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  95. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  96. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  97. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  98. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  99. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  100. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  101. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  102. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
  103. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +1 -2
  104. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  105. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  106. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  107. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  108. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +5 -6
  109. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  110. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  111. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  112. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
  113. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  114. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  115. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +4 -10
  116. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  117. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  118. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2463 -437
  119. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2467 -441
  120. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  121. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  122. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  123. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  124. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  125. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  126. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  127. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  128. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +489 -4
  129. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  130. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -6
  131. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  132. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -7
  133. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +31 -7
  134. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  135. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +5 -5
  136. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  137. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  138. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  139. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  140. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  141. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  142. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  143. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +2 -2
  144. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  145. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +5 -5
  146. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  147. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +6 -6
  148. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +12 -12
  149. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +28 -0
  150. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +12 -12
  151. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  152. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  153. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +3 -3
  154. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  155. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  156. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  157. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +1 -4
  158. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +8 -22
  159. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  160. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
  161. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  162. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  163. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +15 -3
  164. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +12 -0
  165. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +45 -0
  166. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +9 -0
  167. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +15 -0
  168. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +15 -1
  169. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +8 -0
  170. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +120 -0
  171. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +40 -39
  172. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +7 -2
  173. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  174. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  175. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
  176. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +958 -342
  177. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  178. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +27 -6
  179. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +13 -0
  180. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +15 -1
  181. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
  182. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
  183. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +17 -2
  184. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +13 -0
  185. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +19 -0
  186. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  187. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  188. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  189. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  190. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  191. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  192. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  193. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  194. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +69 -111
  195. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +4 -2
  196. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +185 -14
  197. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
  198. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
  199. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
  200. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +18 -0
  201. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +65 -0
  202. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  203. package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
  204. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +4 -3
  205. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
  206. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -1
  207. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +81 -0
  208. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +7 -0
  209. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +31 -1
  210. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  211. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +38 -71
  212. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +7 -2
  213. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  214. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
  215. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +3 -5
  216. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +34 -5
  217. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +26 -1
  218. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
  220. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
  221. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +18 -3
  222. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +27 -0
  223. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  224. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  225. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +68 -15
  226. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  227. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +82 -131
  228. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +4 -2
  229. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +187 -12
  230. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
  231. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +3 -3
  232. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +95 -0
  233. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  234. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +133 -1
  235. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +137 -0
  236. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
  237. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +26 -2
  238. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +183 -0
  239. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +37 -2
  240. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +18 -0
  241. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  242. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +7 -3
  243. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +105 -0
  244. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
  245. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  246. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  247. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  248. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  249. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +46 -2
  250. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  251. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  252. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +48 -3
  253. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +318 -1
  254. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +8 -5
  255. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  256. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
  257. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +13 -8
  258. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  259. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  260. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  261. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  262. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  263. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  264. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  265. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  266. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  267. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  268. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  269. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  270. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  271. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  272. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  273. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  274. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  275. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +17 -0
  276. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  277. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  278. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  279. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  280. package/packages/omo-codex/plugin/model-catalog.json +3 -3
  281. package/packages/omo-codex/plugin/package-lock.json +676 -524
  282. package/packages/omo-codex/plugin/package.json +2 -3
  283. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  284. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  285. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  286. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  287. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  288. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +3 -3
  289. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +42 -31
  290. package/packages/omo-codex/plugin/shared/package.json +3 -4
  291. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  292. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  293. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  294. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  295. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +1 -1
  296. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  297. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
  298. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  299. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
  300. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  301. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  302. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  303. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  304. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  305. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  306. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  307. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  308. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  309. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +3 -1
  310. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  311. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +21 -0
  312. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  313. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  314. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  315. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  316. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  317. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  318. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  319. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  320. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  321. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +12 -8
  322. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  323. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  324. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  325. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  326. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  327. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  328. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  329. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  330. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  331. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  332. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +14 -14
  333. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
  334. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  335. package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -1
  336. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -1
  337. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +1 -1
  338. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +101 -419
  339. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +38 -11
  340. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +26 -9
  341. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  342. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  343. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +23 -18
  344. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  345. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +15 -3
  346. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +19 -26
  347. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  348. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +4 -3
  349. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
  350. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -1
  351. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -7
  352. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +31 -7
  353. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  354. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +5 -5
  355. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +8 -3
  356. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  357. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +4 -3
  358. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  359. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  360. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +9 -48
  361. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  362. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  363. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +1 -1
  364. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  365. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  366. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  367. package/packages/omo-codex/plugin/test/auto-update.test.mjs +2 -27
  368. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  369. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  370. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  371. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  372. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
  373. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +4 -5
  374. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  375. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  376. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +8 -8
  377. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  378. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
  379. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +24 -14
  380. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +14 -119
  381. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  382. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  383. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  384. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  385. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  386. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -5
  387. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  388. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2818 -913
  389. package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +15 -10
  390. package/packages/shared-skills/package.json +7 -1
  391. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  392. package/packages/shared-skills/skills/ast-grep/SKILL.md +1 -1
  393. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  394. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
  395. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  396. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
  397. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  398. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  399. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  400. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  401. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  402. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  403. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  404. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  405. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  406. package/packages/shared-skills/skills/debugging/SKILL.md +3 -1
  407. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  408. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +21 -0
  409. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  410. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  411. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  412. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  413. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  414. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  415. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  416. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  417. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  418. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  419. package/packages/shared-skills/skills/frontend/SKILL.md +12 -8
  420. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  421. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  422. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  423. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  424. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  425. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  426. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  427. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  428. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  429. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  430. package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
  431. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  432. package/packages/shared-skills/skills/programming/SKILL.md +1 -1
  433. package/packages/shared-skills/skills/refactor/SKILL.md +1 -1
  434. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
  435. package/packages/shared-skills/skills/review-work/SKILL.md +100 -418
  436. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +38 -11
  437. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +26 -9
  438. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  439. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  440. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +23 -18
  441. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  442. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +17 -16
  443. package/packages/shared-skills/skills/ulw-plan/SKILL.md +7 -8
  444. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +31 -7
  445. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  446. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +5 -5
  447. package/packages/shared-skills/skills/ulw-research/SKILL.md +8 -3
  448. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  449. package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
  450. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  451. package/script/qa/xterm-live-terminal.mjs +18 -2
  452. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  453. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  454. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  455. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  456. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  457. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  458. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  459. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  460. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12136
  461. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9734
  462. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  463. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  464. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  465. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  466. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  467. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  468. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  469. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  470. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  471. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  472. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  473. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  474. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  475. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  476. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  477. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  478. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  479. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  480. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  481. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  482. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  483. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  484. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  485. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  486. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  487. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  488. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  489. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  490. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  491. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  492. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  493. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  494. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  495. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  496. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  497. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  498. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  499. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  500. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  501. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  502. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  503. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  504. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  505. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  506. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  507. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  508. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  509. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  510. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  511. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  512. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  513. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  514. package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -471
  515. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  516. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  517. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  518. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  519. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  520. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  521. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  522. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  523. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  524. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  525. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  526. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  527. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  528. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  529. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  530. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  531. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  532. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
  533. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  534. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  535. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  536. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  537. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  538. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  539. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  540. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  541. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +0 -0
  542. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  543. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  544. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  545. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  546. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  547. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  548. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  549. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  550. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  551. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -15,103 +15,25 @@ const agentSchemaKeys = new Set([
15
15
  "developer_instructions",
16
16
  ]);
17
17
 
18
+ // `includes` entries below are machine-consumed tokens only: EVIDENCE_RECORDED is the sentinel the
19
+ // lazycodex-executor-verify SubagentStop hook greps from worker messages; recommendation, blockers,
20
+ // codeQualityStatus, not_applicable, surfaceEvidence, and adversarialCases are fields the ulw-loop
21
+ // quality gate parses out of reviewer/QA reports; <attemptDir>/<goalId>-code-review.md and
22
+ // -manual-qa.md are the artifact names the ulw-loop spawn guard requires before a gate-reviewer
23
+ // spawn; currentAttemptDir is a field of `ulw-loop status --json`.
18
24
  const lazycodexAgentInvariants = new Map([
19
- [
20
- "explorer.toml",
21
- {
22
- model: "gpt-5.6-luna",
23
- effort: "low",
24
- includes: [/Read-only/, /working tree/, /rg/],
25
- },
26
- ],
27
- [
28
- "librarian.toml",
29
- {
30
- model: "gpt-5.6-luna",
31
- effort: "low",
32
- includes: [/Read-only/, /SHA-pinned GitHub permalink/, /external/],
33
- },
34
- ],
35
- [
36
- "metis.toml",
37
- {
38
- model: "gpt-5.6-sol",
39
- effort: "high",
40
- includes: [/pre-planning analyst/i, /contradictions/, /Read-only/],
41
- },
42
- ],
43
- [
44
- "momus.toml",
45
- {
46
- model: "gpt-5.6-terra",
47
- effort: "high",
48
- includes: [/plan reviewer/i, /OKAY, ITERATE, or REJECT/, /Read-only/],
49
- },
50
- ],
51
- [
52
- "plan.toml",
53
- {
54
- model: "gpt-5.6-sol",
55
- effort: "high",
56
- includes: [/strategic planning consultant/i, /\.omo\/plans\/<slug>\.md/, /never implements/i],
57
- },
58
- ],
59
- [
60
- "lazycodex-worker-low.toml",
61
- {
62
- model: "gpt-5.6-luna",
63
- effort: "high",
64
- includes: [/EVIDENCE_RECORDED: <path>/, /low-difficulty/i, /smallest correct change/i],
65
- },
66
- ],
67
- [
68
- "lazycodex-worker-medium.toml",
69
- {
70
- model: "gpt-5.6-terra",
71
- effort: "high",
72
- includes: [/EVIDENCE_RECORDED: <path>/, /medium-difficulty/i, /smallest correct change/i],
73
- },
74
- ],
75
- [
76
- "lazycodex-worker-high.toml",
77
- {
78
- model: "gpt-5.6-sol",
79
- effort: "medium",
80
- includes: [/EVIDENCE_RECORDED: <path>/, /high-difficulty/i, /smallest correct change/i],
81
- },
82
- ],
83
- [
84
- "lazycodex-clone-fidelity-reviewer.toml",
85
- {
86
- model: "gpt-5.6-terra",
87
- effort: "high",
88
- includes: [/recommendation/, /blockers/, /\.omo\/evidence\/<goal>-clone-fidelity\.md/],
89
- },
90
- ],
91
- [
92
- "lazycodex-code-reviewer.toml",
93
- {
94
- model: "gpt-5.6-terra",
95
- effort: "medium",
96
- includes: [/codeQualityStatus/, /recommendation/, /<attemptDir>\/<goalId>-code-review\.md/, /currentAttemptDir/],
97
- },
98
- ],
99
- [
100
- "lazycodex-qa-executor.toml",
101
- {
102
- model: "gpt-5.6-luna",
103
- effort: "high",
104
- includes: [/not_applicable/, /surfaceEvidence/, /adversarialCases/, /<attemptDir>\/<goalId>-manual-qa\.md/],
105
- },
106
- ],
107
- [
108
- "lazycodex-gate-reviewer.toml",
109
- {
110
- model: "gpt-5.6-sol",
111
- effort: "low",
112
- includes: [/APPROVE\/REJECT/, /blockers/, /<attemptDir>\/<goalId>-gate-review\.md/, /currentAttemptDir/],
113
- },
114
- ],
25
+ ["explorer.toml", { model: "gpt-5.6-luna", effort: "low" }],
26
+ ["librarian.toml", { model: "gpt-5.6-luna", effort: "low" }],
27
+ ["metis.toml", { model: "gpt-5.6-sol", effort: "high" }],
28
+ ["momus.toml", { model: "gpt-5.6-terra", effort: "high" }],
29
+ ["plan.toml", { model: "gpt-5.6-sol", effort: "high" }],
30
+ ["lazycodex-worker-low.toml", { model: "gpt-5.6-luna", effort: "high", includes: [/EVIDENCE_RECORDED: <path>/] }],
31
+ ["lazycodex-worker-medium.toml", { model: "gpt-5.6-terra", effort: "high", includes: [/EVIDENCE_RECORDED: <path>/] }],
32
+ ["lazycodex-worker-high.toml", { model: "gpt-5.6-sol", effort: "medium", includes: [/EVIDENCE_RECORDED: <path>/] }],
33
+ ["lazycodex-clone-fidelity-reviewer.toml", { model: "gpt-5.6-terra", effort: "high", includes: [/recommendation/, /blockers/] }],
34
+ ["lazycodex-code-reviewer.toml", { model: "gpt-5.6-terra", effort: "medium", includes: [/codeQualityStatus/, /recommendation/, /<attemptDir>\/<goalId>-code-review\.md/, /currentAttemptDir/] }],
35
+ ["lazycodex-qa-executor.toml", { model: "gpt-5.6-luna", effort: "high", includes: [/not_applicable/, /surfaceEvidence/, /adversarialCases/, /<attemptDir>\/<goalId>-manual-qa\.md/] }],
36
+ ["lazycodex-gate-reviewer.toml", { model: "gpt-5.6-sol", effort: "low", includes: [/blockers/, /currentAttemptDir/] }],
115
37
  ]);
116
38
 
117
39
  const externalSourceTokenPattern = new RegExp(
@@ -156,7 +78,6 @@ test("#given bundled Codex agents #when components/ultrawork/agents directory is
156
78
  }
157
79
  }
158
80
  });
159
-
160
81
  test("#given bundled agent TOMLs #when nickname_candidates are inspected #then they use only the codex-accepted charset", async () => {
161
82
  // given: codex_app_server ignores a role whose nickname has characters outside
162
83
  // ASCII letters, digits, spaces, hyphens, underscores (observed live in task-15 QA)
@@ -174,16 +95,6 @@ test("#given bundled agent TOMLs #when nickname_candidates are inspected #then t
174
95
  }
175
96
  });
176
97
 
177
- test("#given planner agent prompt #when inspected #then generated artifacts stay under .omo", async () => {
178
- const prompt = await readFile(join(root, "components", "ultrawork", "agents", "plan.toml"), "utf8");
179
-
180
- assert.match(prompt, /\.omo\/plans\/<slug>\.md/);
181
- assert.match(prompt, /<attemptDir>\/task-<N>-<slug>\.<ext>/);
182
- assert.match(prompt, /\.omo\/evidence\/ulw\/<session>\/<goalId>\/a<attempt>/);
183
- assert.doesNotMatch(prompt, /(?<!\.omo\/)plans\/<slug>\.md/);
184
- assert.doesNotMatch(prompt, /(?<!\.omo\/)evidence\/task-/);
185
- });
186
-
187
98
  test("#given lazycodex agent prompts #when inspected #then each role pins model effort and evidence discipline", async () => {
188
99
  const agentsDir = join(root, "components", "ultrawork", "agents");
189
100
 
@@ -197,73 +108,8 @@ test("#given lazycodex agent prompts #when inspected #then each role pins model
197
108
  assert.doesNotMatch(prompt, /^blocking\s*=/m);
198
109
  assert.doesNotMatch(prompt, externalSourceTokenPattern);
199
110
 
200
- for (const pattern of invariant.includes) {
111
+ for (const pattern of invariant.includes ?? []) {
201
112
  assert.match(prompt, pattern, `${fileName} must include ${pattern}`);
202
113
  }
203
114
  }
204
115
  });
205
-
206
- test("#given LazyCodex reviewer prompts #when inspected #then anti-slop review coverage is required", async () => {
207
- const agentsDir = join(root, "components", "ultrawork", "agents");
208
- const codeReviewer = await readFile(join(agentsDir, "lazycodex-code-reviewer.toml"), "utf8");
209
- const gateReviewer = await readFile(join(agentsDir, "lazycodex-gate-reviewer.toml"), "utf8");
210
-
211
- assert.match(codeReviewer, /remove-ai-slops/);
212
- assert.match(codeReviewer, /programming/);
213
- assert.match(codeReviewer, /load or consult/);
214
- assert.match(codeReviewer, /documented criteria/);
215
- assert.match(codeReviewer, /violates either skill perspective/);
216
- assert.match(codeReviewer, /overfit\/slop review pass/);
217
- assert.match(codeReviewer, /deletion-only tests/);
218
- assert.match(codeReviewer, /tests that merely verify a requested removal/);
219
- assert.match(codeReviewer, /tautological tests/);
220
- assert.match(codeReviewer, /mirror implementation constants/);
221
- assert.match(codeReviewer, /unnecessary production data extraction, parsing, or normalization/);
222
- assert.match(codeReviewer, /false confidence/);
223
-
224
- assert.match(gateReviewer, /remove-ai-slops/);
225
- assert.match(gateReviewer, /programming/);
226
- assert.match(gateReviewer, /load or consult/);
227
- assert.match(gateReviewer, /documented criteria/);
228
- assert.match(gateReviewer, /Run the `remove-ai-slops`/);
229
- assert.match(gateReviewer, /Apply the `programming`/);
230
- assert.match(gateReviewer, /overfit\/slop pass yourself/);
231
- assert.match(gateReviewer, /tests that merely verify a requested removal/);
232
- assert.match(gateReviewer, /deletion-only/);
233
- assert.match(gateReviewer, /tautological/);
234
- assert.match(gateReviewer, /implementation-mirroring tests/);
235
- assert.match(gateReviewer, /unnecessary production extraction, parsing, or normalization/);
236
-
237
- const directPassIndex = gateReviewer.indexOf("overfit/slop pass yourself");
238
- const reportCoverageIndex = gateReviewer.indexOf("Then confirm the code review report");
239
- assert.notEqual(directPassIndex, -1);
240
- assert.notEqual(reportCoverageIndex, -1);
241
- assert.ok(
242
- directPassIndex < reportCoverageIndex,
243
- "gate reviewer must perform the overfit/slop pass directly before checking report coverage",
244
- );
245
- });
246
-
247
- test("#given done-gate reviewer prompts #when inspected #then burden of proof is approve-unless-cited and reject priors are gone", async () => {
248
- const agentsDir = join(root, "components", "ultrawork", "agents");
249
- const gateReviewer = await readFile(join(agentsDir, "lazycodex-gate-reviewer.toml"), "utf8");
250
- const qaExecutor = await readFile(join(agentsDir, "lazycodex-qa-executor.toml"), "utf8");
251
- const codeReviewer = await readFile(join(agentsDir, "lazycodex-code-reviewer.toml"), "utf8");
252
-
253
- assert.match(gateReviewer, /APPROVE unless you can cite/);
254
- assert.match(gateReviewer, /violatedCriterion/);
255
- assert.match(gateReviewer, /evidencePointer/);
256
- assert.match(gateReviewer, /top blockers inline/);
257
- assert.match(gateReviewer, /is a NOTE, not a blocker/);
258
- assert.match(gateReviewer, /You do NOT check/);
259
- assert.doesNotMatch(gateReviewer, /Assume the work has already failed/);
260
- assert.doesNotMatch(gateReviewer, /Return exactly one recommendation: APPROVE\/REJECT\./);
261
-
262
- assert.match(qaExecutor, /one-line reason/);
263
- assert.match(qaExecutor, /rejecting a legitimately untriggered class is itself an error/);
264
- assert.doesNotMatch(qaExecutor, /Trust nothing\./);
265
-
266
- assert.match(codeReviewer, /MEDIUM by default/);
267
- assert.doesNotMatch(codeReviewer, /Treat useless tests or needless production complexity as CRITICAL\/HIGH/);
268
- });
269
-
@@ -30,9 +30,8 @@ test("#given isolated components #when hooks are inspected #then commands stay i
30
30
  const componentMarkers = [
31
31
  "components/comment-checker/dist/cli.js",
32
32
  "components/lsp/dist/cli.js",
33
- "components/codegraph/dist/cli.js",
34
33
  "components/rules/dist/cli.js",
35
- "components/start-work-continuation/dist/cli.js",
34
+ "components/ulw-execute-continuation/dist/cli.js",
36
35
  "components/telemetry/dist/cli.js",
37
36
  "components/teammode/dist/cli.js",
38
37
  "components/ulw-loop/dist/cli.js",
@@ -48,7 +47,7 @@ test("#given isolated components #when hooks are inspected #then commands stay i
48
47
  assert.equal(await exists("scripts/migrate-codex-config.mjs"), true);
49
48
  });
50
49
 
51
- test("#given aggregate Stop hooks #when inspected #then start-work continuation and ulw-loop resume are separate groups", async () => {
50
+ test("#given aggregate Stop hooks #when inspected #then ulw-execute continuation and ulw-loop resume are separate groups", async () => {
52
51
  // given
53
52
  const manifests = await readAggregateHookManifests();
54
53
 
@@ -60,11 +59,11 @@ test("#given aggregate Stop hooks #when inspected #then start-work continuation
60
59
 
61
60
  // then
62
61
  assert.equal(stopCommands.length, 2);
63
- assert.ok(stopCommands.some((command) => command.includes("start-work-continuation/dist/cli.js")));
62
+ assert.ok(stopCommands.some((command) => command.includes("ulw-execute-continuation/dist/cli.js")));
64
63
  assert.ok(stopCommands.some((command) => command.includes("ulw-loop/dist/cli.js\" hook stop")));
65
64
  });
66
65
 
67
- test("#given aggregate SubagentStop hooks #when inspected #then start-work and LazyCodex executor verifier are separate groups", async () => {
66
+ test("#given aggregate SubagentStop hooks #when inspected #then ulw-execute and LazyCodex executor verifier are separate groups", async () => {
68
67
  // given
69
68
  const manifests = await readAggregateHookManifests();
70
69
 
@@ -84,7 +83,7 @@ test("#given aggregate SubagentStop hooks #when inspected #then start-work and L
84
83
  assert.equal(verifierGroups.length, 1);
85
84
  assert.equal(verifierGroups[0]?.groupIndex, 0);
86
85
  assert.equal(verifierGroups[0]?.handler.timeout, 10);
87
- assert.match(verifierGroups[0]?.handler.statusMessage ?? "", /^\(OmO [^)]+\) Verifying LazyCodex Executor Evidence$/);
86
+ assert.match(verifierGroups[0]?.handler.statusMessage ?? "", /\S/);
88
87
  });
89
88
 
90
89
  test("#given aggregate PostCompact hooks #when hooks are inspected #then LSP diagnostics cache reset is registered", async () => {
@@ -100,7 +99,7 @@ test("#given aggregate PostCompact hooks #when hooks are inspected #then LSP dia
100
99
 
101
100
  // then
102
101
  assert.equal(lspPostCompactHooks.length, 1);
103
- assert.match(lspPostCompactHooks[0]?.handler.statusMessage ?? "", /^\(OmO [^)]+\) Resetting LSP Diagnostics Cache$/);
102
+ assert.match(lspPostCompactHooks[0]?.handler.statusMessage ?? "", /\S/);
104
103
  });
105
104
 
106
105
  test("#given aggregate hook commands #when inspected #then every command exposes a Codex status message", async () => {
@@ -142,23 +141,6 @@ test("#given component hook commands #when inspected #then standalone packages e
142
141
  assert.deepEqual(missingStatusMessages, []);
143
142
  });
144
143
 
145
- test("#given hook status messages #when inspected #then labels describe OMO responsibilities instead of the hook runner", async () => {
146
- // given
147
- const componentHooks = await readComponentHookManifests();
148
-
149
- // when
150
- const commandHooks = [
151
- ...(await readAggregateCommandHooks()),
152
- ...componentHooks.flatMap(({ source, hooks }) => collectCommandHooks(hooks, source)),
153
- ];
154
- const genericStatusMessages = commandHooks
155
- .filter(({ handler }) => typeof handler.statusMessage !== "string" || /\bhook\b/i.test(handler.statusMessage))
156
- .map(hookLocation);
157
-
158
- // then
159
- assert.deepEqual(genericStatusMessages, []);
160
- });
161
-
162
144
  test("#given aggregate OMO plugin is enabled #when hooks are inspected #then shell guidance and ulw-loop guard are registered", async () => {
163
145
  // given
164
146
  const manifests = await readAggregateHookManifests();
@@ -169,9 +151,7 @@ test("#given aggregate OMO plugin is enabled #when hooks are inspected #then she
169
151
 
170
152
  // then
171
153
  assert.match(text, /components\/git-bash\/dist\/cli\.js/);
172
- assert.match(text, /Recommending Git Bash MCP/);
173
154
  assert.match(text, /hook post-compact/);
174
- assert.match(text, /Resetting Git Bash MCP Reminder/);
175
155
  assert.match(text, /components\/ulw-loop\/dist\/cli\.js/);
176
156
  assert.match(text, /hook pre-tool-use/);
177
157
  assert.deepEqual(preToolUseGroups.map((group) => group.matcher), [
@@ -221,7 +201,6 @@ test("#given aggregate SessionStart hooks #when inspected #then LazyCodex auto-u
221
201
  // then
222
202
  assert.equal(autoUpdateGroup?.matcher, "^startup$");
223
203
  assert.match(text, /scripts\/auto-update\.mjs/);
224
- assert.match(text, /Checking Auto Update/);
225
204
  assert(sessionStartCommands.some((command) => command.includes("scripts/auto-update.mjs")));
226
205
  });
227
206
 
@@ -240,34 +219,16 @@ test("#given aggregate SessionStart hooks #when inspected #then cold-start-prone
240
219
  const coldStartHooks = sessionStartHooks.filter(
241
220
  ({ command }) =>
242
221
  command.includes("components/telemetry/dist/cli.js") ||
243
- command.includes("scripts/auto-update.mjs") ||
244
- command.includes("components/codegraph/dist/cli.js"),
222
+ command.includes("scripts/auto-update.mjs"),
245
223
  );
246
224
 
247
225
  // then
248
- assert.equal(coldStartHooks.length, 3);
226
+ assert.equal(coldStartHooks.length, 2);
249
227
  for (const hook of coldStartHooks) {
250
228
  assert.equal(hook.timeout, 15, `${hook.source} must carry timeout 15 for cold-start headroom`);
251
229
  }
252
230
  });
253
231
 
254
- test("#given aggregate PostToolUse hooks #when inspected #then CodeGraph init guidance is registered for CodeGraph tools", async () => {
255
- // given
256
- const commandHooks = await readAggregateCommandHooks();
257
-
258
- // when
259
- const codegraphPostToolUseHooks = commandHooks.filter(
260
- (hook) =>
261
- hook.eventName === "PostToolUse" &&
262
- hook.handler.command === 'node "${PLUGIN_ROOT}/components/codegraph/dist/cli.js" hook post-tool-use',
263
- );
264
-
265
- // then
266
- assert.equal(codegraphPostToolUseHooks.length, 1);
267
- assert.equal(codegraphPostToolUseHooks[0]?.matcher, "^(codegraph[._].*|mcp__codegraph__.*)$");
268
- assert.match(codegraphPostToolUseHooks[0]?.handler.statusMessage ?? "", /^\(OmO [^)]+\) Checking CodeGraph Init Guidance$/);
269
- });
270
-
271
232
  test("#given aggregate PostToolUse hooks #when inspected #then thread title hygiene is registered for created Codex threads", async () => {
272
233
  // given
273
234
  const commandHooks = await readAggregateCommandHooks();
@@ -282,7 +243,7 @@ test("#given aggregate PostToolUse hooks #when inspected #then thread title hygi
282
243
  // then
283
244
  assert.equal(threadTitleHooks.length, 1);
284
245
  assert.equal(threadTitleHooks[0]?.matcher, "^(create_thread|codex_app\\.create_thread)$");
285
- assert.match(threadTitleHooks[0]?.handler.statusMessage ?? "", /^\(OmO [^)]+\) Checking Thread Title Hygiene$/);
246
+ assert.match(threadTitleHooks[0]?.handler.statusMessage ?? "", /\S/);
286
247
  });
287
248
 
288
249
  test("#given aggregate plugin packaging #when inspected #then hooks and compatibility sentinels stay Python-free", async () => {
@@ -17,7 +17,7 @@ test("#given aggregate plugin manifest #when inspected #then it owns the omo nam
17
17
  // then
18
18
  assert.equal(manifest.name, "omo");
19
19
  assert(Array.isArray(hookPaths));
20
- assert.equal(hookPaths.length, 23);
20
+ assert.equal(hookPaths.length, 21);
21
21
  assert(hookPaths.every((hookPath) => typeof hookPath === "string" && hookPath.startsWith("./hooks/")));
22
22
  assert(!hookPaths.includes("./hooks/hooks.json"));
23
23
  assert(!hookPaths.includes("./hooks/user-prompt-submit-selecting-lazycodex-workflow.json"));
@@ -54,16 +54,15 @@ test("#given component directories #when scanned #then only intentional resource
54
54
  // then
55
55
  assert.deepEqual(componentNames, [
56
56
  "bootstrap",
57
- "codegraph",
58
57
  "comment-checker",
59
58
  "git-bash",
60
59
  "lazycodex-executor-verify",
61
60
  "lsp",
62
61
  "rules",
63
- "start-work-continuation",
64
62
  "teammode",
65
63
  "telemetry",
66
64
  "ultrawork",
65
+ "ulw-execute-continuation",
67
66
  "ulw-loop",
68
67
  ]);
69
68
  for (const name of componentNames) {
@@ -18,14 +18,13 @@ test("#given aggregate MCP config #when inspected #then code MCPs reference pack
18
18
  // when
19
19
  const lspServer = mcp.mcpServers.lsp;
20
20
  const gitBashServer = mcp.mcpServers.git_bash;
21
- const codegraphServer = mcp.mcpServers.codegraph;
22
21
  const codeMcpNames = Object.keys(mcp.mcpServers)
23
- .filter((name) => name === "lsp" || name === "git_bash" || name === "codegraph")
22
+ .filter((name) => name === "lsp" || name === "git_bash")
24
23
  .sort();
25
24
  const componentLocalMcpSources = lspSources.filter((name) => name.startsWith("lazy-mcp") || name === "lazy-lsp-mcp.ts");
26
25
 
27
26
  // then
28
- assert.deepEqual(codeMcpNames, ["codegraph", "git_bash", "lsp"]);
27
+ assert.deepEqual(codeMcpNames, ["git_bash", "lsp"]);
29
28
  assert.equal(packageJson.workspaces.includes("components/lsp/packages/lsp-tools-mcp"), false);
30
29
  assert.deepEqual(packageJson.dependencies, { "@oh-my-opencode/shared-skills": "file:../../shared-skills" });
31
30
  assert.doesNotMatch(bundledMcpBuildScript, new RegExp(["ast", "grep", "mcp"].join("-")));
@@ -38,10 +37,6 @@ test("#given aggregate MCP config #when inspected #then code MCPs reference pack
38
37
  assert.equal(gitBashServer.command, "node");
39
38
  assert.deepEqual(gitBashServer.args, ["../../git-bash-mcp/dist/cli.js", "mcp"]);
40
39
  assert.equal(gitBashServer.cwd, ".");
41
- assert.equal(codegraphServer.command, "node");
42
- assert.deepEqual(codegraphServer.args, ["components/codegraph/dist/serve.js"]);
43
- assert.equal(codegraphServer.cwd, ".");
44
- assert.equal(codegraphServer.required, false);
45
40
  assert.deepEqual(componentLocalMcpSources, []);
46
41
  });
47
42
 
@@ -9,7 +9,7 @@ test("#given bundled model catalog #when inspected #then default verifier and wo
9
9
  const catalog = JSON.parse(await readFile(join(root, "model-catalog.json"), "utf8"));
10
10
 
11
11
  assert.equal(catalog.current.model, "gpt-5.6-sol");
12
- assert.equal(catalog.current.model_context_window, 372000);
12
+ assert.equal(catalog.current.model_context_window, 650000);
13
13
  assert.equal(catalog.current.model_reasoning_effort, "high");
14
14
  assert.equal(catalog.current.plan_mode_reasoning_effort, "xhigh");
15
15
  assert.deepEqual(catalog.roles.default, catalog.current);
@@ -1,10 +1,8 @@
1
1
  import { readdir, readFile, stat } from "node:fs/promises";
2
- import { dirname, join } from "node:path";
2
+ import { basename, dirname, join, sep } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
-
5
4
  export const root = dirname(dirname(fileURLToPath(import.meta.url)));
6
5
  export const repoRoot = join(root, "..", "..", "..");
7
-
8
6
  export async function readJson(relativePath) {
9
7
  return JSON.parse(await readFile(join(root, relativePath), "utf8"));
10
8
  }
@@ -79,18 +77,182 @@ export function hookLocation({ source, eventName, groupIndex, handlerIndex, hand
79
77
  return `${source}:${eventName}:${groupIndex}:${handlerIndex}:${handler.command}`;
80
78
  }
81
79
 
82
- export function findInvalidSpawnAgentRoleParameters(content) {
83
- return [...content.matchAll(/spawn_agent\([^)\n]*(?:agent_type|model|reasoning_effort)\s*=/g)].map((match) => match[0]);
80
+ const SPAWN_AGENT_START = /(?:(?<receiver>\b[A-Za-z_]\w*)\s*\.\s*)?(?<callee>\bspawn_agent)\s*\(/g;
81
+
82
+ async function collectFiles(directory, predicate) {
83
+ let entries;
84
+ try {
85
+ entries = await readdir(directory, { withFileTypes: true });
86
+ } catch (error) {
87
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") return [];
88
+ throw error;
89
+ }
90
+
91
+ const files = [];
92
+ for (const entry of entries) {
93
+ const path = join(directory, entry.name);
94
+ if (entry.isDirectory()) files.push(...(await collectFiles(path, predicate)));
95
+ else if (entry.isFile() && predicate(path)) files.push(path);
96
+ }
97
+ return files;
84
98
  }
85
99
 
86
- export function findSpawnAgentCallsWithoutForkContextFalse(content) {
87
- const missingForkContext = [];
88
- const regex = /spawn_agent\(([^)]*)\)/g;
89
- for (const match of content.matchAll(regex)) {
90
- const call = match[0];
91
- if (!/"fork_context"\s*:\s*false|fork_context:\s*false|fork_context=false|"fork_turns"\s*:\s*"none"|fork_turns:\s*"none"|fork_turns="none"/.test(call)) {
92
- missingForkContext.push(call);
100
+ export async function listShippedSpawnPromptFiles() {
101
+ const skillFiles = [
102
+ ...(await collectFiles(join(root, "skills"), (path) => basename(path) === "SKILL.md")),
103
+ ...(await collectFiles(
104
+ join(root, "components"),
105
+ (path) => path.includes(`${sep}skills${sep}`) && basename(path) === "SKILL.md",
106
+ )),
107
+ ];
108
+ const hephaestusRules = await collectFiles(
109
+ join(root, "components", "rules", "bundled-rules", "hephaestus"),
110
+ (path) => path.endsWith(".md"),
111
+ );
112
+ return [...skillFiles, ...hephaestusRules].sort();
113
+ }
114
+
115
+ export function findSpawnAgentCalls(content) {
116
+ const calls = [];
117
+ for (const match of content.matchAll(SPAWN_AGENT_START)) {
118
+ const openingParenthesis = match.index + match[0].lastIndexOf("(");
119
+ let depth = 1;
120
+ let quote = null;
121
+ let escaped = false;
122
+
123
+ for (let index = openingParenthesis + 1; index < content.length; index += 1) {
124
+ const character = content[index];
125
+ if (quote !== null) {
126
+ if (escaped) escaped = false;
127
+ else if (character === "\\") escaped = true;
128
+ else if (character === quote) quote = null;
129
+ continue;
130
+ }
131
+ if (character === '"' || character === "'" || character === "`") {
132
+ quote = character;
133
+ continue;
134
+ }
135
+ if (character === "(") depth += 1;
136
+ else if (character === ")") depth -= 1;
137
+ if (depth !== 0) continue;
138
+
139
+ const { receiver = null, callee } = match.groups;
140
+ calls.push({ call: content.slice(match.index, index + 1), index: match.index, receiver, callee });
141
+ break;
93
142
  }
94
143
  }
95
- return missingForkContext;
144
+ return calls;
96
145
  }
146
+
147
+ function tokensForSpawnCall(call) {
148
+ const tokens = [];
149
+ let braceDepth = 0;
150
+ let bracketDepth = 0;
151
+ let parenthesisDepth = 0;
152
+
153
+ for (let index = call.indexOf("(") + 1; index < call.length - 1; ) {
154
+ const character = call[index];
155
+ if (/\s/.test(character)) {
156
+ index += 1;
157
+ continue;
158
+ }
159
+ if (character === '"' || character === "'" || character === "`") {
160
+ const start = index;
161
+ const quote = character;
162
+ let value = "";
163
+ index += 1;
164
+ while (index < call.length - 1) {
165
+ const current = call[index];
166
+ if (current === "\\" && index + 1 < call.length - 1) {
167
+ value += call[index + 1];
168
+ index += 2;
169
+ continue;
170
+ }
171
+ index += 1;
172
+ if (current === quote) break;
173
+ value += current;
174
+ }
175
+ tokens.push({ type: "string", value, start, end: index, braceDepth, bracketDepth, parenthesisDepth });
176
+ continue;
177
+ }
178
+ if (/[A-Za-z_]/.test(character)) {
179
+ const start = index;
180
+ while (/[A-Za-z0-9_]/.test(call[index] ?? "")) index += 1;
181
+ tokens.push({ type: "identifier", value: call.slice(start, index), start, end: index,
182
+ braceDepth, bracketDepth, parenthesisDepth });
183
+ continue;
184
+ }
185
+
186
+ if (character === "{") braceDepth += 1;
187
+ else if (character === "}") braceDepth -= 1;
188
+ else if (character === "[") bracketDepth += 1;
189
+ else if (character === "]") bracketDepth -= 1;
190
+ else if (character === "(") parenthesisDepth += 1;
191
+ else if (character === ")") parenthesisDepth -= 1;
192
+ else if (character === ":" || character === "=") {
193
+ tokens.push({ type: "separator", value: character, start: index, end: index + 1,
194
+ braceDepth, bracketDepth, parenthesisDepth });
195
+ }
196
+ index += 1;
197
+ }
198
+ return tokens;
199
+ }
200
+
201
+ function spawnParameters(call) {
202
+ const tokens = tokensForSpawnCall(call);
203
+ const parameters = [];
204
+ for (let index = 0; index < tokens.length - 2; index += 1) {
205
+ const key = tokens[index];
206
+ const separator = tokens[index + 1];
207
+ const value = tokens[index + 2];
208
+ const isArgumentScope = key.parenthesisDepth === 0 && key.bracketDepth === 0 && key.braceDepth <= 1;
209
+ const isSameScope =
210
+ separator.braceDepth === key.braceDepth && separator.bracketDepth === key.bracketDepth &&
211
+ separator.parenthesisDepth === key.parenthesisDepth && value.braceDepth === key.braceDepth &&
212
+ value.bracketDepth === key.bracketDepth &&
213
+ value.parenthesisDepth === key.parenthesisDepth;
214
+ const isAdjacent = /^\s*$/.test(call.slice(key.end, separator.start)) &&
215
+ /^\s*$/.test(call.slice(separator.end, value.start));
216
+ if (!isArgumentScope || !isSameScope || !isAdjacent || separator.type !== "separator") continue;
217
+ parameters.push({ name: key.value, value, direct: key.braceDepth === 0 });
218
+ }
219
+ return parameters;
220
+ }
221
+
222
+ export function hasSpawnIsolationArgument(call) {
223
+ return spawnParameters(call).some(
224
+ ({ name, value }) => (name === "fork_context" && value.type === "identifier" && value.value === "false") ||
225
+ (name === "fork_turns" && value.type === "string" && value.value === "none"),
226
+ );
227
+ }
228
+
229
+ export function findSpawnAgentCallsWithoutIsolation(content) {
230
+ return findSpawnAgentCalls(content).filter(({ call }) => !hasSpawnIsolationArgument(call));
231
+ }
232
+
233
+ export function findSpawnAgentCallsWithUnsupportedParameters(content) {
234
+ return findSpawnAgentCalls(content).flatMap((entry) => {
235
+ const allowsObjectAgentType = entry.receiver === "multi_agent_v1";
236
+ const parameters = spawnParameters(entry.call)
237
+ .filter(({ name, direct }) => name === "model" || name === "reasoning_effort" ||
238
+ (name === "agent_type" && (direct || !allowsObjectAgentType)))
239
+ .map(({ name }) => name);
240
+ return parameters.length === 0 ? [] : [{ ...entry, parameters }];
241
+ });
242
+ }
243
+
244
+ async function findShippedSpawnViolations(findViolations) {
245
+ const violations = [];
246
+ for (const path of await listShippedSpawnPromptFiles()) {
247
+ const content = await readFile(path, "utf8");
248
+ for (const violation of findViolations(content)) {
249
+ const line = content.slice(0, violation.index).split("\n").length;
250
+ violations.push({ path, line, ...violation });
251
+ }
252
+ }
253
+ return violations;
254
+ }
255
+
256
+ export const findShippedSpawnIsolationViolations = () => findShippedSpawnViolations(findSpawnAgentCallsWithoutIsolation);
257
+ export const findShippedUnsupportedSpawnParameterViolations = () =>
258
+ findShippedSpawnViolations(findSpawnAgentCallsWithUnsupportedParameters);