lazycodex-ai 5.0.0-beta.6 → 5.0.0-beta.60

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 (635) hide show
  1. package/README.ja.md +65 -60
  2. package/README.ko.md +66 -61
  3. package/README.md +65 -72
  4. package/README.ru.md +62 -60
  5. package/README.zh-cn.md +61 -60
  6. package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
  7. package/dist/cli/doctor/checks/index.d.ts +2 -0
  8. package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
  9. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  10. package/dist/cli/doctor/framework/constants.d.ts +5 -0
  11. package/dist/cli/doctor/framework/types.d.ts +2 -0
  12. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  13. package/dist/cli/index.js +51738 -59690
  14. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  15. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  16. package/dist/cli/runtime-commands.d.ts +1 -1
  17. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  18. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  19. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  20. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  21. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  22. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  23. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  24. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  25. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  26. package/dist/cli-node/index.js +50900 -58829
  27. package/package.json +11 -9
  28. package/packages/git-bash-mcp/dist/cli.js +6 -1
  29. package/packages/lsp-daemon/dist/cli.js +902 -479
  30. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  31. package/packages/lsp-daemon/dist/client.js +920 -493
  32. package/packages/lsp-daemon/dist/daemon-client.d.ts +1 -0
  33. package/packages/lsp-daemon/dist/daemon-client.js +3 -0
  34. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  35. package/packages/lsp-daemon/dist/ensure-daemon.js +10 -2
  36. package/packages/lsp-daemon/dist/index.js +824 -402
  37. package/packages/lsp-daemon/dist/ownership.js +2 -2
  38. package/packages/lsp-daemon/dist/proxy.js +3 -0
  39. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  40. package/packages/lsp-daemon/package.json +1 -1
  41. package/packages/lsp-tools-mcp/dist/cli.js +762 -341
  42. package/packages/lsp-tools-mcp/dist/lsp/manager.js +272 -138
  43. package/packages/lsp-tools-mcp/dist/mcp.js +787 -368
  44. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  45. package/packages/lsp-tools-mcp/dist/tools.js +717 -302
  46. package/packages/lsp-tools-mcp/package.json +1 -1
  47. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  48. package/packages/omo-codex/plugin/.mcp.json +0 -6
  49. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  50. package/packages/omo-codex/plugin/README.md +6 -2
  51. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +197 -148
  52. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  53. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  54. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  55. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  56. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  57. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  58. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  59. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  60. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  61. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  62. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  63. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  64. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  65. package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +1 -1
  66. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -1
  67. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  68. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  69. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +2 -1
  70. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
  71. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  72. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  73. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
  74. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
  75. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
  76. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
  77. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  78. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  79. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +32 -28
  80. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
  81. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  82. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +137 -28
  83. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +4 -2
  84. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  85. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  86. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  87. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +941 -540
  88. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  89. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  90. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  91. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  92. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  93. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  94. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  95. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  96. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  97. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  98. package/packages/omo-codex/plugin/components/rules/README.md +2 -0
  99. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  100. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +123 -0
  101. package/packages/omo-codex/plugin/components/rules/dist/cli.js +91 -68
  102. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  103. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  104. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  105. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  106. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +15 -5
  107. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  108. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  109. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  110. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
  111. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  112. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  113. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  114. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  115. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  116. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  117. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  118. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  119. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
  120. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -3
  121. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  122. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  123. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  124. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  125. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +29 -6
  126. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  127. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  128. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  129. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
  130. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  131. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  132. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +4 -10
  133. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  134. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  135. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2407 -684
  136. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2411 -689
  137. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  138. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  139. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  140. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  141. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  142. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  143. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  144. package/packages/omo-codex/plugin/components/ultrawork/README.md +2 -0
  145. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  146. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
  147. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  148. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  149. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  150. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  151. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  152. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  153. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
  154. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
  155. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
  156. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
  157. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  158. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +490 -4
  159. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  160. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -6
  161. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  162. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -7
  163. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +31 -7
  164. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  165. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +5 -5
  166. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  167. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  168. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  169. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  170. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  171. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  172. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  173. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +4 -4
  174. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  175. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +6 -6
  176. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  177. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +10 -10
  178. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
  179. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -0
  180. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +12 -12
  181. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  182. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  183. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +4 -4
  184. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  185. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  186. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +1 -1
  187. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  188. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +4 -11
  189. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +24 -22
  190. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  191. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
  192. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  193. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  194. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +26 -13
  195. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +16 -0
  196. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +25 -0
  197. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
  198. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
  199. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
  200. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
  201. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
  202. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
  203. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +50 -42
  204. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
  205. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
  206. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  207. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  208. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  209. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
  210. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +1396 -516
  211. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  212. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +28 -8
  213. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +2 -5
  214. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +24 -20
  215. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
  216. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
  217. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
  218. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +1 -0
  219. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +13 -4
  220. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +1 -0
  221. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +34 -4
  222. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +14 -0
  223. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +29 -0
  224. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  225. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  226. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  227. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  228. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  229. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  230. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  231. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  232. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +72 -117
  233. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
  234. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +16 -7
  235. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
  236. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +125 -0
  237. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +46 -0
  238. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +28 -0
  239. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +127 -0
  240. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
  241. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
  242. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
  243. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +6 -1
  244. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +195 -29
  245. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +9 -0
  246. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +227 -0
  247. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
  248. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
  249. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +20 -6
  250. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +19 -0
  251. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +75 -0
  252. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +17 -4
  253. package/packages/omo-codex/plugin/components/ulw-loop/package.json +6 -6
  254. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +10 -4
  255. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
  256. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +32 -8
  257. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +40 -0
  258. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
  259. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
  260. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  261. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +52 -73
  262. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
  263. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
  264. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  265. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +52 -46
  266. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
  267. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
  268. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +34 -28
  269. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  270. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
  271. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
  272. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +25 -4
  273. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +39 -4
  274. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +38 -0
  275. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  276. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  277. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +71 -15
  278. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  279. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +92 -136
  280. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +29 -8
  281. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +159 -0
  282. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +42 -0
  283. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +140 -0
  284. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
  285. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +205 -28
  286. package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +239 -0
  287. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
  288. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +19 -6
  289. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +107 -0
  290. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  291. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +131 -82
  292. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
  293. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
  294. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
  295. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
  296. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
  297. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
  298. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
  299. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
  300. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
  301. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
  302. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
  303. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
  304. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
  305. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +37 -2
  306. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +52 -11
  307. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  308. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
  309. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
  310. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -0
  311. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
  312. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  313. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
  314. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +36 -2
  315. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  316. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  317. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
  318. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
  319. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  320. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +51 -2
  321. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  322. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  323. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +58 -3
  324. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
  325. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
  326. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +148 -0
  327. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +444 -7
  328. package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +218 -0
  329. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +8 -5
  330. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  331. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
  332. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +13 -8
  333. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  334. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  335. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  336. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  337. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  338. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  339. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  340. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  341. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
  342. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  343. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  344. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  345. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  346. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  347. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  348. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  349. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  350. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  351. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  352. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  353. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  354. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  355. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  356. package/packages/omo-codex/plugin/package-lock.json +676 -524
  357. package/packages/omo-codex/plugin/package.json +2 -3
  358. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  359. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  360. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  361. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  362. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  363. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  364. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
  365. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
  366. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
  367. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +94 -55
  368. package/packages/omo-codex/plugin/shared/package.json +3 -4
  369. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  370. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  371. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  372. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  373. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +1 -1
  374. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  375. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  376. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  377. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  378. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  379. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  380. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  381. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  382. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  383. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  384. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +3 -1
  385. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  386. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +21 -0
  387. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  388. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  389. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  390. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  391. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  392. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  393. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  394. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  395. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  396. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +10 -0
  397. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +15 -8
  398. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +10 -2
  399. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +2 -0
  400. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +145 -0
  401. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +2 -0
  402. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  403. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  404. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  405. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  406. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  407. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  408. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  409. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  410. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  411. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +18 -16
  412. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +4 -2
  413. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  414. package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -1
  415. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +8 -6
  416. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +5 -3
  417. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +114 -422
  418. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +38 -11
  419. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +26 -9
  420. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  421. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  422. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +23 -18
  423. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  424. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +26 -13
  425. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +29 -31
  426. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  427. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +34 -4
  428. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
  429. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +32 -8
  430. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -7
  431. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +31 -7
  432. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  433. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +5 -5
  434. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +12 -5
  435. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  436. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +8 -5
  437. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  438. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  439. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +16 -51
  440. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  441. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  442. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
  443. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  444. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  445. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  446. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -29
  447. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  448. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  449. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  450. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  451. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +88 -2
  452. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
  453. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  454. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  455. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
  456. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
  457. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  458. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
  459. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +168 -0
  460. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +54 -24
  461. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +18 -119
  462. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  463. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  464. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  465. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  466. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  467. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -5
  468. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  469. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2987 -1370
  470. package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +26 -20
  471. package/packages/shared-skills/package.json +7 -1
  472. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  473. package/packages/shared-skills/skill-source-filter.mjs +44 -0
  474. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  475. package/packages/shared-skills/skills/ast-grep/SKILL.md +1 -1
  476. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  477. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  478. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  479. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  480. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  481. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  482. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  483. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  484. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  485. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  486. package/packages/shared-skills/skills/debugging/SKILL.md +3 -1
  487. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  488. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +21 -0
  489. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  490. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  491. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  492. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  493. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  494. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  495. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  496. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  497. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  498. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  499. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +10 -0
  500. package/packages/shared-skills/skills/frontend/SKILL.md +15 -8
  501. package/packages/shared-skills/skills/frontend/references/design/README.md +10 -2
  502. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +2 -0
  503. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +145 -0
  504. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +2 -0
  505. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  506. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  507. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  508. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  509. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  510. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  511. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  512. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  513. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  514. package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
  515. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  516. package/packages/shared-skills/skills/programming/SKILL.md +1 -1
  517. package/packages/shared-skills/skills/refactor/SKILL.md +4 -4
  518. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
  519. package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
  520. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +38 -11
  521. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +26 -9
  522. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  523. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  524. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +23 -18
  525. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  526. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +20 -19
  527. package/packages/shared-skills/skills/ulw-plan/SKILL.md +7 -8
  528. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +31 -7
  529. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  530. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +5 -5
  531. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  532. package/packages/shared-skills/skills/ulw-research/SKILL.md +8 -3
  533. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  534. package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
  535. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  536. package/script/qa/xterm-live-terminal.mjs +18 -2
  537. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  538. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  539. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  540. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  541. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  542. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  543. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  544. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  545. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12149
  546. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9747
  547. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  548. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  549. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  550. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  551. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  552. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  553. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  554. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  555. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  556. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  557. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  558. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  559. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  560. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  561. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  562. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  563. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  564. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  565. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  566. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  567. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  568. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  569. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  570. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  571. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  572. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  573. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  574. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  575. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  576. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  577. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  578. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  579. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  580. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  581. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  582. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  583. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  584. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  585. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  586. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  587. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  588. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  589. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  590. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  591. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  592. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  593. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  594. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  595. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  596. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  597. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  598. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  599. package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -471
  600. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  601. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  602. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  603. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  604. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  605. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  606. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  607. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  608. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  609. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  610. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  611. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  612. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  613. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  614. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  615. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  616. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  617. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
  618. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  619. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  620. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  621. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  622. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  623. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  624. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  625. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  626. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  627. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  628. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  629. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  630. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  631. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  632. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  633. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  634. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  635. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -6,6 +6,60 @@ import { join } from "node:path";
6
6
  import test from "node:test";
7
7
 
8
8
  import { migrateConfigFile } from "../scripts/migrate-codex-config.mjs";
9
+ import { ensureSubagentConcurrencyLimit } from "../scripts/migrate-codex-config/subagent-limit-guard.mjs";
10
+
11
+ for (const fixture of [
12
+ { name: "bare", key: "max_threads", v2Key: "max_concurrent_threads_per_session", before: "", equals: "=" },
13
+ { name: "double-quoted", key: '"max_threads"', v2Key: '"max_concurrent_threads_per_session"', before: "", equals: " = " },
14
+ { name: "single-quoted", key: "'max_threads'", v2Key: "'max_concurrent_threads_per_session'", before: " \t", equals: "\t= " },
15
+ { name: "escaped-quoted", key: '"max_thread\\u0073"', v2Key: '"max_concurrent_threads_per_sessio\\u006e"', before: "\t ", equals: " =\t" },
16
+ ]) {
17
+ test(`#given ${fixture.name} thread-cap keys with varied spacing #when migrating #then removes managed values and retains user values`, () => {
18
+ for (const value of [1000, 16, 6, 8, 10000]) {
19
+ const config = [
20
+ "[agents]",
21
+ `${fixture.before}${fixture.key}${fixture.equals}${value} # cap`,
22
+ "max_depth = 4",
23
+ "[agents.explorer]",
24
+ 'config_file = "./agents/explorer.toml"',
25
+ "[features.multi_agent_v2]",
26
+ "enabled = false",
27
+ `${fixture.before}${fixture.v2Key}${fixture.equals}${value} # cap`,
28
+ "usage_hint_enabled = false",
29
+ "",
30
+ ].join("\n");
31
+ const result = ensureSubagentConcurrencyLimit(config, { multiAgentVersion: "v1" });
32
+ const expected = config
33
+ .replace(value === 1000 ? `${fixture.before}${fixture.key}${fixture.equals}${value} # cap\n` : "", "")
34
+ .replace(value === 1000 || value === 16 ? `${fixture.before}${fixture.v2Key}${fixture.equals}${value} # cap\n` : "", "");
35
+ assert.equal(result, expected);
36
+ assert.deepEqual(parseTomlWithPython(result), parseTomlWithPython(expected));
37
+ assert.equal(ensureSubagentConcurrencyLimit(result, { multiAgentVersion: "v1" }), result);
38
+ }
39
+ });
40
+
41
+ test(`#given V2 and an incompatible ${fixture.name} agents cap #when migrating #then removes only the cap assignment`, () => {
42
+ for (const value of [1000, 6]) {
43
+ const config = `[agents]\n${fixture.before}${fixture.key}${fixture.equals}${value}\nmax_depth = 4\n`;
44
+ const result = ensureSubagentConcurrencyLimit(config, { multiAgentVersion: "v2" });
45
+ assert.equal(result, "[agents]\nmax_depth = 4\n");
46
+ assert.deepEqual(parseTomlWithPython(result), { agents: { max_depth: 4 } });
47
+ assert.equal(ensureSubagentConcurrencyLimit(result, { multiAgentVersion: "v2" }), result);
48
+ }
49
+ });
50
+ }
51
+
52
+ test('#given verify-a4 quoted agents.max_threads=1000 #when SessionStart migrates under V2 #then removes the cap idempotently', async () => {
53
+ const root = await mkdtemp(join(tmpdir(), "lazycodex-verify-a4-quoted-cap-"));
54
+ const configPath = join(root, "config.toml");
55
+ await writeFile(configPath, '[agents]\n"max_threads" = 1000\n');
56
+ const options = { sessionModel: "gpt-6-astra", env: { CODEX_HOME: root } };
57
+ assert.equal((await migrateConfigFile(configPath, options)).changed, true);
58
+ const firstPass = await readFile(configPath, "utf8");
59
+ assert.deepEqual(parseTomlWithPython(firstPass).agents, {});
60
+ assert.equal((await migrateConfigFile(configPath, options)).changed, false);
61
+ assert.equal(await readFile(configPath, "utf8"), firstPass);
62
+ });
9
63
 
10
64
  function parseTomlWithPython(config) {
11
65
  const python = resolvePython();
@@ -58,18 +112,18 @@ test("#given SessionStart migration sees an inline-commented V2 cap #when migrat
58
112
  const secondResult = await migrateConfigFile(configPath);
59
113
 
60
114
  const secondPass = await readFile(configPath, "utf8");
61
- assert.equal(firstResult.changed, true);
115
+ assert.equal(firstResult.changed, false);
62
116
  assert.equal(secondResult.changed, false);
63
117
  assert.equal(secondPass, firstPass);
64
118
  assert.match(
65
119
  secondPass,
66
120
  /usage_hint_enabled = false\nmax_concurrent_threads_per_session = 7 # user cap\nshow_tool_use = false/,
67
121
  );
68
- assert.match(secondPass, /\[agents\][\s\S]*?max_threads = 1000/);
122
+ assert.match(secondPass, /^\s*max_threads\s*=\s*6$/m);
69
123
  assert.match(secondPass, /max_depth = 4/);
70
124
  assert.match(secondPass, /\[agents\.explorer\]\nconfig_file = "\.\/agents\/explorer\.toml"/);
71
125
  assert.match(secondPass, /\[features\.multi_agent_v2\][\s\S]*?enabled = false/);
72
- assert.doesNotMatch(secondPass, /^max_threads\s*=\s*6$/m);
126
+ assert.match(secondPass, /^max_threads\s*=\s*6$/m);
73
127
  });
74
128
 
75
129
  for (const header of [
@@ -164,7 +218,7 @@ for (const fixture of [
164
218
  });
165
219
  }
166
220
 
167
- test("#given multiline string contains V2 cap lookalikes #when SessionStart migrates #then writes the absent semantic default", async () => {
221
+ test("#given multiline string contains V2 cap lookalikes #when SessionStart migrates #then leaves the semantic cap absent", async () => {
168
222
  const root = await mkdtemp(join(tmpdir(), "lazycodex-subagent-limit-multiline-lookalike-"));
169
223
  const configPath = join(root, "config.toml");
170
224
  await writeFile(
@@ -184,10 +238,10 @@ test("#given multiline string contains V2 cap lookalikes #when SessionStart migr
184
238
  const parsed = parseTomlWithPython(content);
185
239
 
186
240
  assert.match(parsed.notes, /max_concurrent_threads_per_session = 7/);
187
- assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, 16);
241
+ assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, undefined);
188
242
  });
189
243
 
190
- test("#given V2 section multiline value contains a cap lookalike #when SessionStart migrates #then writes the absent default", async () => {
244
+ test("#given V2 section multiline value contains a cap lookalike #when SessionStart migrates #then leaves the cap absent", async () => {
191
245
  const root = await mkdtemp(join(tmpdir(), "lazycodex-subagent-limit-section-multiline-lookalike-"));
192
246
  const configPath = join(root, "config.toml");
193
247
  await writeFile(
@@ -196,7 +250,7 @@ test("#given V2 section multiline value contains a cap lookalike #when SessionSt
196
250
  'model = "gpt-5.4"',
197
251
  "[features.multi_agent_v2]",
198
252
  'notes = """',
199
- "max_concurrent_threads_per_session = 7",
253
+ "max_concurrent_threads_per_session = 16",
200
254
  '"""',
201
255
  "",
202
256
  ].join("\n"),
@@ -205,7 +259,8 @@ test("#given V2 section multiline value contains a cap lookalike #when SessionSt
205
259
  await migrateConfigFile(configPath);
206
260
  const parsed = parseTomlWithPython(await readFile(configPath, "utf8"));
207
261
 
208
- assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, 16);
262
+ assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, undefined);
263
+ assert.equal(parsed.features.multi_agent_v2.notes, "max_concurrent_threads_per_session = 16\n");
209
264
  });
210
265
 
211
266
  test("#given V2 root-dotted disable and cap #when gpt-5.6 SessionStart migrates #then removes disable and V1 agents cap", async () => {
@@ -230,7 +285,7 @@ test("#given V2 root-dotted disable and cap #when gpt-5.6 SessionStart migrates
230
285
 
231
286
  assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, 7);
232
287
  assert.equal(parsed.features.multi_agent_v2.enabled, undefined);
233
- assert.equal(parsed.agents, undefined);
288
+ assert.equal(parsed.agents?.max_threads, undefined);
234
289
  });
235
290
 
236
291
  test("#given quoted dotted V1 keys under features #when SessionStart migrates #then replaces enabled without a duplicate", async () => {
@@ -312,7 +367,7 @@ test("#given gpt-5.6 session model with no models_cache and an explicit V2 cap #
312
367
  assert.match(content, /max_concurrent_threads_per_session = 6/);
313
368
  });
314
369
 
315
- test("#given SessionStart config migration has no V2 cap #when migrating #then writes the conservative managed default", async () => {
370
+ test("#given SessionStart config migration has no V2 cap #when migrating #then leaves the cap unset", async () => {
316
371
  const root = await mkdtemp(join(tmpdir(), "lazycodex-subagent-limit-missing-cap-"));
317
372
  const configPath = join(root, "config.toml");
318
373
  await writeFile(
@@ -329,7 +384,7 @@ test("#given SessionStart config migration has no V2 cap #when migrating #then w
329
384
  await migrateConfigFile(configPath);
330
385
 
331
386
  const content = await readFile(configPath, "utf8");
332
- assert.match(content, /max_concurrent_threads_per_session = 16/);
387
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
333
388
  assert.doesNotMatch(content, /max_concurrent_threads_per_session = 1000/);
334
389
  });
335
390
 
@@ -346,10 +401,47 @@ test("#given config without any model #when migrating #then does not introduce a
346
401
  const content = await readFile(configPath, "utf8");
347
402
  assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
348
403
  assert.match(content, /max_depth = 4/);
349
- assert.match(content, /max_concurrent_threads_per_session = 16/);
404
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
405
+ });
406
+
407
+ test("#given todo 4 cap cases #when migrating #then removes managed caps, preserves user caps, and detects gpt-6 V2", async () => {
408
+ const cases = [
409
+ {
410
+ name: "no limits",
411
+ config: 'model = "gpt-6-astra"\n',
412
+ assertResult(content) {
413
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
414
+ assert.doesNotMatch(content, /^\s*max_concurrent_threads_per_session\s*=/m);
415
+ },
416
+ },
417
+ {
418
+ name: "managed limits",
419
+ config: ['model = "gpt-6-astra"', 'model_reasoning_effort = "medium"', "", "[features.multi_agent_v2]", "max_concurrent_threads_per_session = 1000", "", "[agents]", "max_threads = 1000", ""].join("\n"),
420
+ assertResult(content) {
421
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
422
+ assert.doesNotMatch(content, /^\s*max_concurrent_threads_per_session\s*=/m);
423
+ },
424
+ },
425
+ {
426
+ name: "user limits",
427
+ config: ['model = "gpt-6-astra"', 'model_reasoning_effort = "medium"', "", "[features.multi_agent_v2]", "max_concurrent_threads_per_session = 8", "", "[agents]", "max_threads = 6", ""].join("\n"),
428
+ assertResult(content) {
429
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
430
+ assert.match(content, /^\s*max_concurrent_threads_per_session\s*=\s*8/m);
431
+ },
432
+ },
433
+ ];
434
+
435
+ for (const fixture of cases) {
436
+ const root = await mkdtemp(join(tmpdir(), `lazycodex-subagent-limit-todo4-${fixture.name}-`));
437
+ const configPath = join(root, "config.toml");
438
+ await writeFile(configPath, fixture.config);
439
+ await migrateConfigFile(configPath, { env: { CODEX_HOME: root }, sessionModel: "gpt-6-astra" });
440
+ fixture.assertResult(await readFile(configPath, "utf8"));
441
+ }
350
442
  });
351
443
 
352
- test("#given config without any model but an existing low cap #when migrating #then still raises the existing cap", async () => {
444
+ test("#given config without any model but an existing low cap #when migrating #then preserves the existing cap", async () => {
353
445
  const root = await mkdtemp(join(tmpdir(), "lazycodex-subagent-limit-no-model-raise-"));
354
446
  const configPath = join(root, "config.toml");
355
447
  await writeFile(
@@ -360,7 +452,7 @@ test("#given config without any model but an existing low cap #when migrating #t
360
452
  await migrateConfigFile(configPath, { env: { CODEX_HOME: root } });
361
453
 
362
454
  const content = await readFile(configPath, "utf8");
363
- assert.match(content, /max_threads = 1000/);
364
- assert.doesNotMatch(content, /max_threads = 6/);
455
+ assert.match(content, /max_threads = 6/);
456
+ assert.doesNotMatch(content, /max_threads = 1000/);
365
457
  assert.match(content, /max_depth = 4/);
366
458
  });
@@ -0,0 +1,168 @@
1
+ import assert from "node:assert/strict";
2
+ import { spawnSync } from "node:child_process";
3
+ import { cp, mkdir, mkdtemp, readdir, readFile, rm, symlink } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
5
+ import { dirname, join, relative, sep } from "node:path";
6
+ import test from "node:test";
7
+ import { fileURLToPath } from "node:url";
8
+
9
+ import { canonicalUltraworkDirectiveRelativePath } from "../scripts/canonical-ultrawork-directive.mjs";
10
+
11
+ import {
12
+ applyCodexSkillOverlays,
13
+ codexHarnessToolCompatibility,
14
+ insertCodexCompatibilityGuidance,
15
+ reviewWorkAnchor,
16
+ ulwExecuteOriginalCompletion,
17
+ ulwExecuteOriginalHardRule,
18
+ } from "../scripts/sync-skills.mjs";
19
+
20
+ const frontmatter = "---\nname: fixture-sentinel\n---\n\n";
21
+ const opencodeExample = "# SENTINEL_SECTION\ntask(SENTINEL_INPUT)\n";
22
+ const pluginRoot = dirname(dirname(fileURLToPath(import.meta.url)));
23
+ const repositoryRoot = join(pluginRoot, "..", "..");
24
+ const opencodeToolPattern = /\b(?:call_omo_agent|background_output|team_[a-z_]+|task)\s*\(/;
25
+ const sharedSkillsRoot = join(repositoryRoot, "shared-skills", "skills");
26
+
27
+ test("#given sentinel OpenCode tool content #when compatibility guidance is inserted #then the production artifact is placed after frontmatter and before the tool token", () => {
28
+ const input = `${frontmatter}${opencodeExample}`;
29
+
30
+ const actual = insertCodexCompatibilityGuidance(input);
31
+
32
+ assert.equal(actual, `${frontmatter}${codexHarnessToolCompatibility}${opencodeExample}`);
33
+ assert.ok(actual.indexOf(codexHarnessToolCompatibility) < actual.indexOf(opencodeExample));
34
+ });
35
+
36
+ test("#given shared skill source anchors #when Codex overlays are applied #then exact anchors transform and match the generated artifacts", async () => {
37
+ const ulwExecuteSource = await readFile(join(sharedSkillsRoot, "ulw-execute", "SKILL.md"), "utf8");
38
+ const reviewWorkSource = await readFile(join(sharedSkillsRoot, "review-work", "SKILL.md"), "utf8");
39
+
40
+ assert.ok(ulwExecuteSource.includes(ulwExecuteOriginalCompletion), "ulw-execute completion anchor drifted from shared source");
41
+ assert.ok(ulwExecuteSource.includes(ulwExecuteOriginalHardRule), "ulw-execute hard-rule anchor drifted from shared source");
42
+ assert.ok(reviewWorkSource.includes(reviewWorkAnchor), "review-work anchor drifted from shared source");
43
+
44
+ for (const [skillName, source] of [["ulw-execute", ulwExecuteSource], ["review-work", reviewWorkSource]]) {
45
+ const compatible = insertCodexCompatibilityGuidance(source);
46
+ const overlaid = applyCodexSkillOverlays(skillName, compatible);
47
+ assert.notEqual(overlaid, compatible, `${skillName} overlay must change the shared source`);
48
+ assert.equal(applyCodexSkillOverlays(skillName, overlaid), overlaid, `${skillName} overlay must be idempotent`);
49
+ assert.equal(await readFile(join(pluginRoot, "skills", skillName, "SKILL.md"), "utf8"), overlaid);
50
+ }
51
+ });
52
+
53
+ test("#given already transformed sentinel content #when compatibility guidance is inserted again #then the transform is idempotent", () => {
54
+ const once = insertCodexCompatibilityGuidance(`${frontmatter}${opencodeExample}`);
55
+
56
+ const twice = insertCodexCompatibilityGuidance(once);
57
+
58
+ assert.equal(twice, once);
59
+ });
60
+
61
+ test("#given a stale generated compatibility block #when guidance is inserted #then the production artifact replaces it", () => {
62
+ const staleSentinel = "STALE_GENERATED_SENTINEL";
63
+ const staleGuidance = codexHarnessToolCompatibility.replace("multi_agent_v1.spawn_agent", staleSentinel);
64
+ assert.notEqual(staleGuidance, codexHarnessToolCompatibility);
65
+
66
+ const actual = insertCodexCompatibilityGuidance(`${frontmatter}${staleGuidance}${opencodeExample}`);
67
+
68
+ assert.equal(actual, `${frontmatter}${codexHarnessToolCompatibility}${opencodeExample}`);
69
+ assert.equal(actual.includes(staleSentinel), false);
70
+ });
71
+
72
+ test("#given a custom compatibility block before an OpenCode tool token #when guidance is inserted #then the custom block is preserved", () => {
73
+ const generatedHeading = codexHarnessToolCompatibility.slice(0, codexHarnessToolCompatibility.indexOf("\n") + 1);
74
+ const customBlock = `${generatedHeading}\nCUSTOM_BLOCK_SENTINEL\n\n`;
75
+ const input = `${frontmatter}${customBlock}${opencodeExample}`;
76
+
77
+ const actual = insertCodexCompatibilityGuidance(input);
78
+
79
+ assert.equal(actual, input);
80
+ });
81
+
82
+ test("#given an exported template wrapper containing an OpenCode tool token #when guidance is inserted #then wrapper bytes are preserved", () => {
83
+ const templateWrapper = "export const TEMPLATE_SENTINEL = `task(INPUT_SENTINEL)`;\n";
84
+
85
+ const actual = insertCodexCompatibilityGuidance(templateWrapper);
86
+
87
+ assert.equal(actual, `${codexHarnessToolCompatibility}${templateWrapper}`);
88
+ });
89
+
90
+ test("#given real shared skills that need Codex translation #when aggregate skills are synced #then each generated skill injects the production compatibility artifact once before any remaining OpenCode tool token", async () => {
91
+ const sharedSkillsRoot = join(repositoryRoot, "shared-skills", "skills");
92
+ const entries = await readdir(sharedSkillsRoot, { withFileTypes: true });
93
+ const syncScript = await readFile(join(pluginRoot, "scripts", "sync-skills.mjs"), "utf8");
94
+ const componentSkillNames = new Set(
95
+ [...syncScript.matchAll(/\[\s*"([^"]+)"\s*,\s*"components\//g)].map((match) => match[1]),
96
+ );
97
+ let checked = 0;
98
+
99
+ for (const entry of entries) {
100
+ if (!entry.isDirectory()) continue;
101
+ if (componentSkillNames.has(entry.name)) continue;
102
+ const source = await readFile(join(sharedSkillsRoot, entry.name, "SKILL.md"), "utf8");
103
+ const sourceToolToken = source.match(opencodeToolPattern)?.[0];
104
+ if (!sourceToolToken) continue;
105
+ const generated = await readFile(join(pluginRoot, "skills", entry.name, "SKILL.md"), "utf8");
106
+
107
+ assert.equal(generated.split(codexHarnessToolCompatibility).length - 1, 1, entry.name);
108
+ const compatibilityIndex = generated.indexOf(codexHarnessToolCompatibility);
109
+ assert.ok(compatibilityIndex >= 0, entry.name);
110
+ const firstGeneratedToolIndex = generated.search(opencodeToolPattern);
111
+ assert.ok(firstGeneratedToolIndex >= compatibilityIndex, entry.name);
112
+ assert.ok(firstGeneratedToolIndex < compatibilityIndex + codexHarnessToolCompatibility.length, entry.name);
113
+ checked += 1;
114
+ }
115
+
116
+ assert.ok(checked > 0, "at least one shared skill must exercise compatibility injection");
117
+ });
118
+
119
+ test("#given the aggregate sync implementation #when its skill adaptation pipeline is inspected #then it still applies compatibility guidance before overlays", async () => {
120
+ const script = await readFile(join(pluginRoot, "scripts", "sync-skills.mjs"), "utf8");
121
+
122
+ assert.match(
123
+ script,
124
+ /applyCodexSkillOverlays\(\s*skillName,\s*insertCodexCompatibilityGuidance\(content,\s*needsSpawnPayloadGuidance\),?\s*\)/,
125
+ );
126
+ assert.match(script, /await adaptSkillForCodex\(skillName\)/);
127
+ });
128
+
129
+ test("#given the flattened plugin cache the Codex installer produces #when sync-skills runs inside it #then it resolves shared skills through the linked package and writes the skill tree", async () => {
130
+ // given: installMarketplaceLocally copies plugin/ (minus node_modules) to
131
+ // <CODEX_HOME>/plugins/cache/<marketplace>/omo/<version>, materializes the canonical directive
132
+ // under that root, links @oh-my-opencode/shared-skills through the rewritten file: dependency,
133
+ // and only then runs `npm run sync:skills` there. packages/shared-skills is NOT a sibling of
134
+ // that directory, so a checkout-relative import cannot resolve in this layout.
135
+ const codexHome = await mkdtemp(join(tmpdir(), "omo-codex-cache-layout-"));
136
+ const cachedPluginRoot = join(codexHome, "plugins", "cache", "sisyphuslabs", "omo", "0.0.0-cache-layout");
137
+ await cp(pluginRoot, cachedPluginRoot, {
138
+ recursive: true,
139
+ filter: (source) => {
140
+ const parts = relative(pluginRoot, source).split(sep);
141
+ return parts[0] !== "skills" && !parts.includes("node_modules") && !parts.includes(".git");
142
+ },
143
+ });
144
+ const directiveTarget = join(cachedPluginRoot, canonicalUltraworkDirectiveRelativePath);
145
+ await mkdir(dirname(directiveTarget), { recursive: true });
146
+ await cp(join(repositoryRoot, "..", canonicalUltraworkDirectiveRelativePath), directiveTarget);
147
+ const linkedSharedSkills = join(cachedPluginRoot, "node_modules", "@oh-my-opencode", "shared-skills");
148
+ await mkdir(dirname(linkedSharedSkills), { recursive: true });
149
+ await symlink(join(repositoryRoot, "shared-skills"), linkedSharedSkills, "dir");
150
+
151
+ try {
152
+ // when: the installer runs `npm run sync:skills` here, whose script is `node scripts/sync-skills.mjs`
153
+ const result = spawnSync(process.execPath, [join(cachedPluginRoot, "scripts", "sync-skills.mjs")], {
154
+ cwd: cachedPluginRoot,
155
+ encoding: "utf8",
156
+ });
157
+
158
+ // then
159
+ assert.equal(result.status, 0, `sync-skills failed in the cache layout:\n${result.stderr}`);
160
+ const syncedSkills = (await readdir(join(cachedPluginRoot, "skills"), { withFileTypes: true }))
161
+ .filter((entry) => entry.isDirectory())
162
+ .map((entry) => entry.name);
163
+ assert.ok(syncedSkills.includes("ultrawork"), "component skill ultrawork must be synced");
164
+ assert.ok(syncedSkills.includes("git-master"), "shared skill git-master must be synced from the linked package");
165
+ } finally {
166
+ await rm(codexHome, { recursive: true, force: true });
167
+ }
168
+ });
@@ -23,16 +23,19 @@ export const expectedSkills = [
23
23
  "remove-ai-slops",
24
24
  "review-work",
25
25
  "rules",
26
- "start-work",
27
26
  "teammode",
28
27
  "ultimate-browsing",
29
28
  "ultrawork",
29
+ "ulw-execute",
30
30
  "ulw-loop",
31
31
  "ulw-plan",
32
32
  "ulw-research",
33
33
  "visual-qa",
34
34
  ];
35
35
 
36
+ // `ultrawork` is intentionally absent: its skill body is composed by sync-skills.mjs directly from
37
+ // the canonical packages/prompts-core/prompts/ultrawork/codex.md, so it has no component skill
38
+ // source directory to diff against. Its composition is asserted separately in sync-skills.test.mjs.
36
39
  export const componentSkillSources = [
37
40
  ["comment-checker", "components/comment-checker/skills/comment-checker"],
38
41
  ["lcx-contribute-bug-fix", "components/lcx/skills/lcx-contribute-bug-fix"],
@@ -43,10 +46,19 @@ export const componentSkillSources = [
43
46
  ["teammode", "components/teammode/skills/teammode"],
44
47
  ["ulw-loop", "components/ulw-loop/skills/ulw-loop"],
45
48
  ["ulw-plan", "components/ultrawork/skills/ulw-plan"],
46
- ["ultrawork", "components/ultrawork/skills/ultrawork"],
47
49
  ];
48
50
 
51
+ export const canonicalUltraworkDirectiveRelativePath = join(
52
+ "packages",
53
+ "prompts-core",
54
+ "prompts",
55
+ "ultrawork",
56
+ "codex.md",
57
+ );
58
+
49
59
  const codexCompatibilityEndMarkers = [
60
+ "Omit optional keys you do not set. Never send `items: []`, `message: \"\"`, `model: \"\"`, `reasoning_effort: \"\"`, or `service_tier: \"\"` — Codex rejects them (`Items can't be empty`, `reasoning_effort must not be empty`).\n\nFor work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived; back off between waits (double the timeout up to ~5 minutes) instead of spinning short cycles. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.\n\n",
61
+ "On the v2 surface `agent_type` may be ABSENT from the spawn schema (verified 2026-07-11: only `fork_turns`/`message`/`task_name`) — when absent, omit it and describe the role inside `message`; installed role TOMLs cannot be selected on that surface. If a code block below conflicts with this section, this section wins. `fork_context` is rejected on `multi_agent_v2` (`fork_context is not supported in MultiAgentV2; use fork_turns instead`).\n\n",
50
62
  "For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.\n\n",
51
63
  "On `multi_agent_v2` sessions the same `agent_type` applies (the OMO installer exposes it) with `fork_turns` instead of `fork_context`. If a code block below conflicts with this section, this section wins.\n\n",
52
64
  "Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.\n\n",
@@ -69,34 +81,52 @@ export function removeCodexCompatibilityGuidance(content) {
69
81
  return `${content.slice(0, start)}${content.slice(end + endMarker.length)}`;
70
82
  }
71
83
 
72
- const startWorkOriginalCompletion = `When all top-level checkboxes in \`## TODOs\` and \`## Final Verification Wave\` are complete:
84
+ const ulwExecuteOriginalCompletion = `When all top-level checkboxes in \`## TODOs\` and \`## Final Verification Wave\` are complete:
73
85
 
74
86
  1. Run the plan's final verification commands.
75
- 2. For PR/branch work, finish the lifecycle from the task-owned worktree: sync \`.omo/\` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
87
+ 2. For PR/branch work, finish the lifecycle from the last phase's worktree: sync \`.omo/\` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
76
88
  3. Remove or mark the Boulder work as completed.
77
89
  4. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, artifacts, and cleanup receipts.`;
78
90
 
79
- const startWorkCodexCompletion = `When all top-level checkboxes in \`## TODOs\` and \`## Final Verification Wave\` are complete:
91
+ const ulwExecuteCodexCompletion = `When all top-level checkboxes in \`## TODOs\` and \`## Final Verification Wave\` are complete:
80
92
 
81
93
  1. Run the plan's final verification commands.
82
- 2. Complete the **Global Review and Debugging Gate** before any completion claim, PR creation, PR handoff, branch handoff, or merge:
83
- - Invoke the \`review-work\` skill with the final diff, changed files, user goal, constraints, run command, and verification evidence. All five review lanes must return PASS. A timeout, missing deliverable, ack-only child, \`BLOCKED:\`, or inconclusive lane is a gate failure, not approval.
84
- - Each passing review lane binds to the exact full commit SHA it reviewed. Immediately append a durable record to \`.omo/start-work/ledger.jsonl\` with the lane name, full SHA, PASS verdict, and report artifact/source. Before same-SHA reuse after any continuation or compaction, re-read the ledger record and require the exact lane/SHA pair; memory, chat history, or an unstamped report is not coverage. New commits require fresh applicable lane coverage.
85
- - Run a debugging-oriented runtime audit even when the review passes: name at least three plausible failure hypotheses for the changed surface, run the distinguishing checks against the actual artifact, and append a separate durable record with the audit name, exact full SHA, verdict, and evidence artifact/source to \`.omo/start-work/ledger.jsonl\`. Reuse it only after re-reading an exact audit/SHA match.
86
- - If any review lane or debugging hypothesis fails, invoke the \`debugging\` skill, confirm root cause with runtime evidence, add the minimal failing test or reproduction, fix it, rerun the affected verification, then rerun the Global Review and Debugging Gate.
87
- - Evidence hygiene is mandatory: redact or mask secrets and sensitive user data before writing \`.omo/start-work/ledger.jsonl\`, a PR body, or a handoff. Never include raw tokens, credentials, auth headers, cookies, API keys, env dumps, private logs, or PII; use concise summaries, lengths, hashes, or short non-sensitive prefixes instead.
88
- - If the work includes creating, updating, or handing off a PR, refresh \`git status\` and the PR/branch state from the task-owned worktree after the gate, and include only redacted review/debugging evidence in the PR body or handoff.
89
- 3. Finish the PR/branch lifecycle from its task-owned worktree: sync \`.omo/\` state back to the main repo, create or update the PR when requested, wait for CI/review/Cubic gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
90
- 4. Remove or mark the Boulder work as completed.
91
- 5. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, Global Review and Debugging Gate verdict, artifacts, and cleanup receipts.`;
92
-
93
- const startWorkOriginalHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No PR/branch implementation, review, or merge in the main worktree; use the task-owned git worktree.\n- No unprefixed session ids in Boulder state. Sessions are always recorded as `codex:<session_id>`.";
94
-
95
- const startWorkCodexHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No `ORCHESTRATION COMPLETE`, final response, PR creation, PR handoff, or merge before the Global Review and Debugging Gate passes with recorded evidence.\n- No PR/branch implementation or review in the main worktree; create or use a task-owned git worktree first.\n- No unprefixed session ids in Boulder state. Sessions are always recorded as `codex:<session_id>`.";
94
+ 2. Record a self-review in the notepad: re-read the diff, run diagnostics, and capture evidence for every acceptance criterion. Run your own manual QA on the real surface.
95
+ 3. Only when the user demanded strict, rigorous, or high-accuracy review, spawn ONE \`lazycodex-gate-reviewer\`; otherwise your self-review is the final verification.
96
+ 4. Finish the PR/branch lifecycle from its task-owned worktree: sync \`.omo/\` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
97
+ 5. Remove or mark the Boulder work as completed.
98
+ 6. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, artifacts, and cleanup receipts.`;
99
+
100
+ const ulwExecuteOriginalHardRule = `- No production change before a failing-first proof exists (unit test at a seam, otherwise the failing Manual-QA scenario), and no change to existing behavior before a baseline characterization test pins the current behavior and passes on the unchanged code.
101
+ - No \`--dry-run\` as completion evidence.
102
+ - No tests-only completion claim. A Manual-QA artifact is required.
103
+ - **NO DIRECT IMPLEMENTATION BY THE ORCHESTRATOR.** Root NEVER edits product files, writes tests, or runs QA itself — a spawned worker does.
104
+ - No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.
105
+ - No implementation, review, or merge in the main checkout; every phase works in its task-owned worktree.
106
+ - No unprefixed session ids in Boulder state. Sessions are always recorded as \`codex:<session_id>\`.
107
+ - No stale-memory execution. The plan and ledger are the durable source of truth.`;
108
+
109
+ const ulwExecuteCodexHardRule = `- No production change before a failing-first proof exists (unit test at a seam, otherwise the failing Manual-QA scenario), and no change to existing behavior before a baseline characterization test pins the current behavior and passes on the unchanged code.
110
+ - No \`--dry-run\` as completion evidence.
111
+ - No tests-only completion claim. A Manual-QA artifact is required.
112
+ - **NO DIRECT IMPLEMENTATION BY THE ORCHESTRATOR.** Root NEVER edits product files, writes tests, or runs QA itself — a spawned worker does.
113
+ - No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.
114
+ - No implementation, review, or merge in the main checkout; every phase works in a task-owned worktree.
115
+ - No unprefixed session ids in Boulder state. Sessions are always recorded as \`codex:<session_id>\`.
116
+ - No stale-memory execution. The plan and ledger are the durable source of truth.
117
+ - Codex final verification is the exception to the delegated-QA-only rule above: perform your own manual QA on the real surface and record a self-review before completion.`;
96
118
 
97
119
  const reviewWorkCodexGate = `
98
- When \`review-work\` is used as a final implementation, PR, or \`$start-work\`
99
- gate, it is blocking. A timeout, missing deliverable, ack-only response,
120
+ On Codex, use \`review-work\` only when the user asks for a review or demands
121
+ strict, rigorous, or high-accuracy verification, not automatically for a PR or
122
+ completion claim. Your own manual QA and the main session's self-review are
123
+ the default. Spawn ONE \`lazycodex-gate-reviewer\` only for an explicit demand
124
+ for strict review; otherwise run the review checklist inline and record the
125
+ main session's verdict instead of spawning or waiting for a reviewer. These
126
+ Codex rules override the mandatory-reviewer instructions in the shared skill.
127
+
128
+ When \`review-work\` is used as a final implementation, PR, or \`$ulw-execute\`
129
+ gate, the selected review is blocking. A timeout, missing deliverable, ack-only response,
100
130
  explicit \`BLOCKED:\`, or inconclusive lane is not a pass. Treat that lane as
101
131
  failed, investigate the underlying uncertainty with the \`debugging\` skill when
102
132
  runtime behavior may be wrong, fix with evidence, and rerun the affected lane
@@ -134,10 +164,10 @@ export function removeCodexSkillOverlays(skillName, content) {
134
164
  if (skillName === "ulw-research") {
135
165
  return content.replace(ulwResearchCodexDeliveryGate, ulwResearchOriginalDeliveryGates);
136
166
  }
137
- if (skillName === "start-work") {
167
+ if (skillName === "ulw-execute") {
138
168
  return content
139
- .replace(startWorkCodexCompletion, startWorkOriginalCompletion)
140
- .replace(startWorkCodexHardRule, startWorkOriginalHardRule);
169
+ .replace(ulwExecuteCodexCompletion, ulwExecuteOriginalCompletion)
170
+ .replace(ulwExecuteCodexHardRule, ulwExecuteOriginalHardRule);
141
171
  }
142
172
  if (skillName === "review-work") {
143
173
  return content.replace(reviewWorkCodexGatePattern, "");