lazycodex-ai 5.0.0-beta.8 → 5.0.0-beta.80

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 (718) hide show
  1. package/README.ja.md +66 -61
  2. package/README.ko.md +67 -62
  3. package/README.md +108 -182
  4. package/README.ru.md +63 -61
  5. package/README.zh-cn.md +62 -61
  6. package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
  7. package/dist/cli/doctor/checks/browser-provider.d.ts +2 -0
  8. package/dist/cli/doctor/checks/index.d.ts +2 -0
  9. package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
  10. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  11. package/dist/cli/doctor/framework/constants.d.ts +5 -0
  12. package/dist/cli/doctor/framework/types.d.ts +2 -0
  13. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  14. package/dist/cli/index.js +50191 -58043
  15. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  16. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  17. package/dist/cli/runtime-commands.d.ts +1 -1
  18. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  19. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  20. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  21. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  22. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  23. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  24. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  25. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  26. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  27. package/dist/cli-node/index.js +51708 -59537
  28. package/package.json +8 -10
  29. package/packages/git-bash-mcp/dist/cli.js +6 -1
  30. package/packages/lsp-daemon/dist/cli.js +904 -479
  31. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  32. package/packages/lsp-daemon/dist/client.js +922 -493
  33. package/packages/lsp-daemon/dist/daemon-client.d.ts +1 -0
  34. package/packages/lsp-daemon/dist/daemon-client.js +3 -0
  35. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  36. package/packages/lsp-daemon/dist/ensure-daemon.js +10 -2
  37. package/packages/lsp-daemon/dist/index.js +826 -402
  38. package/packages/lsp-daemon/dist/ownership.js +2 -2
  39. package/packages/lsp-daemon/dist/proxy.js +3 -0
  40. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  41. package/packages/lsp-daemon/package.json +1 -1
  42. package/packages/lsp-tools-mcp/dist/cli.js +764 -341
  43. package/packages/lsp-tools-mcp/dist/lsp/manager.js +274 -138
  44. package/packages/lsp-tools-mcp/dist/mcp.js +789 -368
  45. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  46. package/packages/lsp-tools-mcp/dist/tools.js +719 -302
  47. package/packages/lsp-tools-mcp/package.json +1 -1
  48. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  49. package/packages/omo-codex/plugin/.mcp.json +0 -6
  50. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  51. package/packages/omo-codex/plugin/README.md +6 -2
  52. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +7175 -408
  53. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  54. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  56. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -1
  57. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  58. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  59. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  60. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  61. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  62. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  63. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  64. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  65. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  66. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  67. package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +1 -1
  68. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -1
  69. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  70. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  71. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +2 -1
  72. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
  73. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  74. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  75. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
  76. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
  77. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
  78. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
  79. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  80. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  81. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +32 -28
  82. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
  83. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  84. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +137 -28
  85. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +4 -2
  86. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  87. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  88. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  89. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +943 -540
  90. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  91. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  92. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  93. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  94. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  95. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  96. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  97. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  98. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  99. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  100. package/packages/omo-codex/plugin/components/rules/README.md +2 -0
  101. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  102. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +123 -0
  103. package/packages/omo-codex/plugin/components/rules/dist/cli.js +91 -68
  104. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  105. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  106. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  107. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  108. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +15 -5
  109. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  110. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  111. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  112. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
  113. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  114. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  115. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  116. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  117. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  118. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  119. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  120. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  121. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
  122. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -3
  123. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  124. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  125. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  126. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  127. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +29 -6
  128. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  129. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  130. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  131. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
  132. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  133. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  134. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +4 -10
  135. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  136. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  137. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2470 -701
  138. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2488 -720
  139. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  140. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  141. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  142. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  143. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  144. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  145. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  146. package/packages/omo-codex/plugin/components/ultrawork/README.md +2 -0
  147. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  148. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
  149. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  150. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  151. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  152. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  153. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  154. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  155. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
  156. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
  157. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
  158. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +4 -4
  159. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  160. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +500 -4
  161. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  162. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -6
  163. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  164. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +4 -5
  165. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +5 -5
  166. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +2 -2
  167. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  168. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  169. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  170. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  171. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  172. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  173. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  174. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  175. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +4 -4
  176. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  177. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +6 -6
  178. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  179. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +11 -11
  180. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
  181. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -0
  182. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +12 -12
  183. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  184. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  185. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +4 -4
  186. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  187. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  188. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +1 -1
  189. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  190. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +4 -11
  191. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +24 -22
  192. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  193. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +17 -1
  194. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  195. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  196. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +44 -27
  197. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +18 -0
  198. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +30 -0
  199. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
  200. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
  201. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
  202. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
  203. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
  204. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
  205. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +57 -46
  206. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
  207. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
  208. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  209. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  210. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  211. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
  212. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2191 -737
  213. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  214. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +28 -8
  215. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +8 -5
  216. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +35 -23
  217. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
  218. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
  219. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +25 -9
  220. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
  221. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
  222. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
  223. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
  224. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
  225. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +24 -12
  226. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.d.ts +4 -0
  227. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.js +39 -0
  228. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +2 -0
  229. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +19 -4
  230. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.d.ts +19 -0
  231. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.js +108 -0
  232. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +6 -2
  233. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +54 -25
  234. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
  235. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
  236. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +10 -7
  237. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +121 -100
  238. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.d.ts +16 -0
  239. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.js +115 -0
  240. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +18 -0
  241. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +41 -0
  242. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  243. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  244. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  245. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  246. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  247. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  248. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  249. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  250. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +72 -117
  251. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
  252. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +25 -13
  253. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
  254. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +157 -0
  255. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +381 -0
  256. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +127 -0
  257. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +130 -0
  258. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
  259. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
  260. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
  261. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.d.ts +5 -0
  262. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.js +67 -0
  263. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +7 -1
  264. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +188 -59
  265. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +2 -0
  266. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +22 -0
  267. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +19 -0
  268. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +259 -0
  269. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +7 -0
  270. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +41 -0
  271. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +4 -4
  272. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
  273. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
  274. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
  275. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
  276. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +11 -11
  277. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +28 -23
  278. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
  279. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
  280. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +19 -0
  281. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +83 -0
  282. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +18 -5
  283. package/packages/omo-codex/plugin/components/ulw-loop/package.json +6 -6
  284. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +7 -2
  285. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +33 -10
  286. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +52 -0
  287. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
  288. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
  289. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  290. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +59 -77
  291. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
  292. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
  293. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  294. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +52 -46
  295. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
  296. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
  297. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +51 -33
  298. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  299. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
  300. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +27 -9
  301. package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
  302. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
  303. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +23 -16
  304. package/packages/omo-codex/plugin/components/ulw-loop/src/ledger.ts +38 -0
  305. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +32 -4
  306. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-commit.ts +132 -0
  307. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +67 -54
  308. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
  309. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +140 -119
  310. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-log.ts +112 -0
  311. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +61 -0
  312. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  313. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  314. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +71 -15
  315. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  316. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +92 -136
  317. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +38 -13
  318. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +218 -0
  319. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +156 -0
  320. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +143 -0
  321. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
  322. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-budget-io.ts +59 -0
  323. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +196 -52
  324. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +22 -0
  325. package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +257 -0
  326. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +45 -0
  327. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +4 -4
  328. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
  329. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
  330. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +12 -10
  331. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +27 -22
  332. package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
  333. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +115 -0
  334. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  335. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +131 -82
  336. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
  337. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
  338. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
  339. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
  340. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
  341. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
  342. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
  343. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
  344. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
  345. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
  346. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
  347. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
  348. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
  349. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +37 -2
  350. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +88 -11
  351. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  352. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/barrier.ts +13 -0
  353. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
  354. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-child.ts +65 -0
  355. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-cli-qa.mjs +76 -0
  356. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-crash.ts +23 -0
  357. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +58 -0
  358. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-writer.ts +65 -0
  359. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/lease-clock.ts +23 -0
  360. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
  361. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -0
  362. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
  363. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  364. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-log.test.ts +252 -0
  365. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-recovery.test.ts +190 -0
  366. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
  367. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +74 -25
  368. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-legacy-projection.test.ts +228 -0
  369. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-newest.test.ts +72 -0
  370. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  371. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  372. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
  373. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
  374. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  375. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +51 -2
  376. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  377. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  378. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +58 -3
  379. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
  380. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-completed-plan.test.ts +43 -0
  381. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
  382. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +174 -0
  383. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
  384. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +169 -0
  385. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +450 -7
  386. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +113 -0
  387. package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +310 -0
  388. package/packages/omo-codex/plugin/components/ulw-loop/test/status-next-actions-surface.test.ts +133 -0
  389. package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +12 -12
  390. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +12 -6
  391. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  392. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
  393. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +13 -8
  394. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  395. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  396. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  397. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  398. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  399. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  400. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  401. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  402. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
  403. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  404. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  405. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  406. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  407. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  408. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  409. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  410. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  411. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  412. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  413. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  414. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  415. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  416. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  417. package/packages/omo-codex/plugin/package-lock.json +676 -524
  418. package/packages/omo-codex/plugin/package.json +2 -3
  419. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  420. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  421. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  422. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  423. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  424. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  425. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
  426. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
  427. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
  428. package/packages/omo-codex/plugin/scripts/sync-skills.d.mts +4 -0
  429. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +111 -64
  430. package/packages/omo-codex/plugin/shared/package.json +3 -4
  431. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  432. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  433. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  434. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  435. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +13 -1
  436. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  437. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  438. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  439. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  440. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  441. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  442. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  443. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  444. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  445. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  446. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +3 -1
  447. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  448. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +26 -5
  449. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  450. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  451. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  452. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  453. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  454. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  455. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  456. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  457. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  458. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +79 -161
  459. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +10 -0
  460. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +7 -3
  461. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +10 -2
  462. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  463. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +145 -0
  464. package/packages/omo-codex/plugin/skills/frontend/references/design/aside.md +1 -1
  465. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  466. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +2 -0
  467. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  468. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  469. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  470. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  471. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  472. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  473. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  474. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  475. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  476. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +20 -18
  477. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +4 -2
  478. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  479. package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -1
  480. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +11 -9
  481. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +11 -9
  482. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +116 -424
  483. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +32 -86
  484. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +32 -27
  485. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +111 -0
  486. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +2 -2
  487. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  488. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  489. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  490. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  491. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +86 -95
  492. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +18 -5
  493. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +16 -13
  494. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  495. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +44 -27
  496. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +35 -36
  497. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  498. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +31 -2
  499. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +33 -10
  500. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +4 -5
  501. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +5 -5
  502. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +2 -2
  503. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  504. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +16 -9
  505. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  506. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +10 -7
  507. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +75 -0
  508. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  509. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  510. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +16 -51
  511. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  512. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  513. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
  514. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  515. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  516. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  517. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -29
  518. package/packages/omo-codex/plugin/test/bootstrap-default-role.test.mjs +66 -0
  519. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  520. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  521. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  522. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  523. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +100 -2
  524. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
  525. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  526. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  527. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
  528. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
  529. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  530. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
  531. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +168 -0
  532. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +54 -24
  533. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +18 -119
  534. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  535. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  536. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  537. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  538. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  539. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -5
  540. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  541. package/packages/omo-codex/scripts/install-dist/install-local.mjs +9832 -1445
  542. package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +44 -34
  543. package/packages/shared-skills/package.json +7 -1
  544. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  545. package/packages/shared-skills/skill-source-filter.mjs +44 -0
  546. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  547. package/packages/shared-skills/skills/ast-grep/SKILL.md +13 -1
  548. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  549. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  550. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  551. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  552. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  553. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  554. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  555. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  556. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  557. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  558. package/packages/shared-skills/skills/debugging/SKILL.md +3 -1
  559. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  560. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +26 -5
  561. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  562. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  563. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  564. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  565. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  566. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  567. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  568. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  569. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  570. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  571. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +79 -161
  572. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +10 -0
  573. package/packages/shared-skills/skills/frontend/SKILL.md +7 -3
  574. package/packages/shared-skills/skills/frontend/references/design/README.md +10 -2
  575. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  576. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +145 -0
  577. package/packages/shared-skills/skills/frontend/references/design/aside.md +1 -1
  578. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  579. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +2 -0
  580. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  581. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  582. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  583. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  584. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  585. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  586. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  587. package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  588. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  589. package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
  590. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  591. package/packages/shared-skills/skills/programming/SKILL.md +1 -1
  592. package/packages/shared-skills/skills/refactor/SKILL.md +5 -5
  593. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +5 -5
  594. package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
  595. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +32 -86
  596. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +32 -27
  597. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +111 -0
  598. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +2 -2
  599. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  600. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  601. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  602. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  603. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +86 -95
  604. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +18 -5
  605. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +16 -13
  606. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  607. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +24 -22
  608. package/packages/shared-skills/skills/ulw-plan/SKILL.md +5 -6
  609. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +6 -5
  610. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +2 -2
  611. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -1
  612. package/packages/shared-skills/skills/ulw-research/SKILL.md +10 -5
  613. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  614. package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
  615. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +75 -0
  616. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  617. package/script/qa/xterm-live-terminal.mjs +18 -2
  618. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  619. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  620. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  621. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  622. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  623. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  624. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  625. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  626. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12244
  627. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9842
  628. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  629. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  630. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  631. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  632. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  633. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  634. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  635. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  636. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  637. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  638. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  639. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  640. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  641. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  642. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  643. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  644. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  645. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  646. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  647. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  648. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  649. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  650. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  651. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  652. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  653. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  654. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  655. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  656. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  657. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  658. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  659. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  660. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  661. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  662. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  663. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  664. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  665. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  666. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  667. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  668. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  669. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  670. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  671. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  672. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  673. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  674. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  675. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  676. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  677. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  678. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  679. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  680. package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -477
  681. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  682. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  683. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  684. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  685. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  686. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  687. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  688. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  689. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  690. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  691. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  692. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  693. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  694. package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +0 -45
  695. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  696. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  697. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  698. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  699. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
  700. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  701. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  702. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  703. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  704. package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +0 -45
  705. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  706. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  707. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  708. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  709. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  710. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  711. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  712. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  713. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  714. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  715. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  716. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  717. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  718. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -46,8 +46,8 @@ first-class for CLI- or data-shaped work; self-review recorded in the
46
46
  notepad instead of the reviewer loop.
47
47
  HEAVY — anything a fact above names: 3+ success criteria (happy,
48
48
  edge, regression, adversarial risk), each with its own channel
49
- scenario and both evidence pieces; reviewer loop until unconditional
50
- approval.
49
+ scenario and both evidence pieces; when the verification gate is
50
+ triggered, run the reviewer loop until unconditional approval.
51
51
 
52
52
  # Manual-QA channels
53
53
  Run real-surface proof yourself through the channel that faithfully
@@ -62,11 +62,18 @@ exercises the surface; capture the artifact.
62
62
  for color / layout / CJK evidence, which degrades truecolor.
63
63
  3. Browser use — in Codex, use `browser:control-in-app-browser`
64
64
  first when available and no authenticated/persistent user browser
65
- profile is required. Otherwise use Chrome to drive the REAL page;
66
- if Chrome is not available, download and use agent-browser
67
- (https://github.com/vercel-labs/agent-browser). Capture action
65
+ profile is required. Otherwise, or for Chrome semantics, stealth,
66
+ or trace, WRITE a `playwright-core` script and run it from js eval
67
+ against local Chrome (`chromium.launch({ channel: "chrome" })` /
68
+ `launchPersistentContext` on a CLONED profile). Capture action
68
69
  log + screenshot path. Never downgrade to a non-browser surface
69
- for a browser-facing criterion.
70
+ for a browser-facing criterion. NEVER clear cookies, cache, or
71
+ site data (`Network.clearBrowserCookies`, `Storage.clearCookies`,
72
+ `chrome.browsingData.remove`, "clear browsing data") on the user's
73
+ real/main browser profile — it wipes their logged-in state. If you
74
+ need that profile's login state, clone it first (`rsync -a
75
+ <profile>/ <tmp-clone>/`) and launch Chrome against
76
+ the clone as the user-data-dir; run any clearing there only.
70
77
  4. Computer use — when the surface is a desktop/GUI app rather than a
71
78
  page, drive it via OS-level automation (a computer-use agent,
72
79
  AppleScript, xdotool, etc.) against the running app; capture
@@ -223,8 +230,8 @@ and utility functions to batch commands and reduce output. Keep direct calls
223
230
  when one result chooses the next action, outputs are already small, semantic
224
231
  judgment is required between calls, approval or side effects are involved,
225
232
  or native artifacts / citations must be preserved.
226
- - Architecture / flow / blast radius → `codegraph_explore` first when
227
- `codegraph_*` exists; if unavailable, continue with repo tools and LSP.
233
+ - Architecture / flow / blast radius → explore agents plus LSP references
234
+ and impact; do not guess from conventions.
228
235
  - **SYMBOLS REQUIRE LSP** — definitions, references, rename impact,
229
236
  workspace symbols, and diagnostics use the available `lsp_*` tools, not
230
237
  text search. Run diagnostics after edits and treat errors as blocking.
@@ -334,17 +341,26 @@ make the child continue old parent context instead of the delegated task.
334
341
  If your tool list has a flat `spawn_agent` with a required `task_name` instead of `multi_agent_v1.*` (`multi_agent_v2`), rewrite: `fork_context: false` becomes `fork_turns: "none"`, `send_input` becomes `send_message`, finished agents end on their own (no `close_agent`; `followup_task` re-tasks, `interrupt_agent` stops), and `wait_agent` takes only `timeout_ms`, returning on any child mailbox activity.
335
342
 
336
343
  # TOML-backed subagent routing compatibility
337
- Installed role TOMLs (`~/.codex/agents/`) bind ONLY via `agent_type`.
338
- `multi_agent_v1.spawn_agent` exposes `agent_type`; the deployed
339
- `multi_agent_v2` `collaboration.spawn_agent` schema does NOT (verified
340
- 2026-07-11: only `fork_turns`, `message`, `task_name`). On a v2 surface,
341
- omit `agent_type`, describe the role and difficulty tier inside
342
- `message`, and expect the session model for children. Difficulty tiers
343
- when `agent_type` IS exposed: low -> `lazycodex-worker-low`
344
- (gpt-5.6-luna/high), medium -> `lazycodex-worker-medium`
345
- (gpt-5.6-luna/max), high -> `lazycodex-worker-high` (gpt-5.6-sol/max);
346
- explorer/librarian carry their own TOMLs (gpt-5.6-luna/low). Difficulty
347
- (model power) is orthogonal to LIGHT/HEAVY rigor (process size).
344
+ Inspect the ACTUAL spawn tool schema, not a version or namespace assumption.
345
+ When `agent_type` is exposed (V1 or V2), EVERY spawn MUST pass an exact
346
+ LazyCodex role: `explorer`, `librarian`, `plan`, `metis`, `momus`,
347
+ `lazycodex-worker-low`, `lazycodex-worker-medium`, `lazycodex-worker-high`,
348
+ `lazycodex-code-reviewer`, `lazycodex-qa-executor`, `lazycodex-gate-reviewer`,
349
+ or `lazycodex-clone-fidelity-reviewer`. Map implementation difficulty to
350
+ worker low/medium/high; their installed TOMLs supply model and instructions.
351
+ Never select generic `worker`/`default` or describe a role instead of selecting it.
352
+ Use `fork_turns: "none"` on V2 or `fork_context: false` on V1 unless full
353
+ history is deliberately required; even a deliberate fork MUST name its role.
354
+
355
+ Legacy-schema exception: ONLY when `agent_type` is absent, omit that unsupported
356
+ field and carry the role, difficulty, and complete instructions in `message`;
357
+ explicitly disable history. This cannot select a specialized TOML. The managed
358
+ `default` supplies the medium worker for unnamed non-forks, unless opted out or
359
+ blocked by a preserved user default. The spawn guard cannot see the schema and
360
+ rejects unnamed requests: report incompatible routing, do not retry generically.
361
+ An unnamed full-history fork skips role application inside Codex; no LazyCodex
362
+ config can fix that upstream gap. Never claim this path has been repaired.
363
+ Difficulty (model power) is orthogonal to LIGHT/HEAVY rigor (process size).
348
364
 
349
365
  Treat child status as a progress signal, not a timeout counter. For
350
366
  work likely to exceed one wait cycle, tell the child to send
@@ -379,16 +395,17 @@ BLOCKED: <reason>`. After four silent or ack-only checks, close the lane as
379
395
  inconclusive, record that it is not approval, and respawn smaller only
380
396
  if the deliverable is still required.
381
397
 
382
- # Verification gate (TRIGGERED, NOT OPTIONAL)
398
+ # Verification gate (TRIGGERED ONLY ON EXPLICIT DEMAND)
383
399
 
384
- Trigger when ANY apply:
385
- - Tier is HEAVY.
386
- - User demanded strict, rigorous, or proper review.
387
- LIGHT tier records a self-review in the notepad instead: re-read the
388
- diff, run diagnostics, confirm each criterion's evidence, and state in
389
- one line why the tier held.
400
+ Trigger ONLY when the user explicitly demanded strict, rigorous, proper,
401
+ or high-accuracy review of this work, in any language (for example,
402
+ 고정밀 or 엄격). The tier alone never triggers the gate. HEAVY without
403
+ such a demand records the same self-review as LIGHT.
404
+ LIGHT and non-triggered HEAVY work records a self-review in the notepad
405
+ instead: re-read the diff, run diagnostics, confirm each criterion's
406
+ evidence, and state in one line why the tier held.
390
407
 
391
- Procedure (NON-NEGOTIABLE):
408
+ When triggered, follow this procedure (NON-NEGOTIABLE):
392
409
  1. Spawn a child with `fork_context: false` and a self-contained reviewer
393
410
  assignment in `message`. The `multi_agent_v1.spawn_agent` schema cannot select a
394
411
  TOML-backed reviewer role, so paste the reviewer requirements into
@@ -0,0 +1,18 @@
1
+ import type { UlwLoopScope } from "./paths.js";
2
+ import type { UlwLoopItem, UlwLoopPlan } from "./types.js";
3
+ import { UlwLoopError } from "./types.js";
4
+ export interface CheckpointCodexGoalValidation {
5
+ readonly raw: unknown;
6
+ readonly nextActions: readonly string[];
7
+ readonly warnings: readonly string[];
8
+ readonly unacknowledgedObjective?: string;
9
+ }
10
+ export declare function validateCheckpointCodexGoal(input: {
11
+ readonly repoRoot: string;
12
+ readonly plan: UlwLoopPlan;
13
+ readonly goal: UlwLoopItem;
14
+ readonly raw: string | undefined;
15
+ readonly evidence: string;
16
+ readonly scope?: UlwLoopScope;
17
+ }): Promise<CheckpointCodexGoalValidation>;
18
+ export declare function combineCheckpointValidationErrors(codexError: UlwLoopError, gateError: UlwLoopError): UlwLoopError;
@@ -0,0 +1,30 @@
1
+ import { CodexGoalSnapshotError, formatCodexGoalReconciliation, readCodexGoalSnapshotInput, reconcileCodexGoalSnapshot, } from "./codex-goal-snapshot.js";
2
+ import { acknowledgedDriverObjectives } from "./driver-objective-ack.js";
3
+ import { codexGoalMode, compatibleCodexObjectives, expectedCodexObjective } from "./goal-status.js";
4
+ import { UlwLoopError } from "./types.js";
5
+ export async function validateCheckpointCodexGoal(input) {
6
+ const snapshot = await readCodexGoalSnapshotInput(input.raw, input.repoRoot);
7
+ const expected = expectedCodexObjective(input.plan, input.goal);
8
+ const reconciliation = reconcileCodexGoalSnapshot(snapshot, {
9
+ expectedObjective: expected,
10
+ acknowledgedObjectives: acknowledgedDriverObjectives(input.plan),
11
+ ...(codexGoalMode(input.plan) === "aggregate"
12
+ ? { acceptedObjectives: compatibleCodexObjectives(input.plan) }
13
+ : {}),
14
+ });
15
+ if (!reconciliation.ok)
16
+ throw new CodexGoalSnapshotError(formatCodexGoalReconciliation(reconciliation));
17
+ return {
18
+ raw: snapshot?.raw,
19
+ nextActions: reconciliation.nextActions,
20
+ warnings: reconciliation.warnings,
21
+ ...(reconciliation.unacknowledgedObjective === undefined
22
+ ? {}
23
+ : { unacknowledgedObjective: reconciliation.unacknowledgedObjective }),
24
+ };
25
+ }
26
+ export function combineCheckpointValidationErrors(codexError, gateError) {
27
+ return new UlwLoopError(`${codexError.message}\n${gateError.message}`, "ULW_LOOP_QUALITY_GATE_INVALID", {
28
+ details: { ...(codexError.details ?? {}), ...(gateError.details ?? {}) },
29
+ });
30
+ }
@@ -1,4 +1,5 @@
1
1
  import { checkpointUlwLoop } from "./checkpoint.js";
2
+ import { checkpointTemplate } from "./checkpoint-template.js";
2
3
  import { hasFlag, parseCodexGoalJson, readValue } from "./cli-arg-parser.js";
3
4
  import { blockedDecisionHandoff, printJson } from "./cli-output.js";
4
5
  import { buildCodexGoalInstruction } from "./codex-goal-instruction.js";
@@ -15,13 +16,18 @@ export async function checkpointAndContinue(repoRoot, args, scope) {
15
16
  return { ...result, plan: next.plan, next: { resumed: next.resumed, goal: next.goal, instruction } };
16
17
  }
17
18
  export async function checkpoint(repoRoot, argv, json, scope) {
19
+ if (hasFlag(argv, "--print-template")) {
20
+ const template = await checkpointTemplate(repoRoot, scope, readValue(argv, "--goal-id"));
21
+ if (json)
22
+ printJson({ ok: true, ...template });
23
+ else
24
+ printJson(template);
25
+ return 0;
26
+ }
18
27
  const goalId = required(argv, "--goal-id");
19
28
  const statusValue = checkpointStatus(required(argv, "--status"));
20
29
  const evidence = required(argv, "--evidence");
21
- const codexGoalJson = await parseCodexGoalJson(statusValue === "complete" ? required(argv, "--codex-goal-json") : readValue(argv, "--codex-goal-json"));
22
- if (statusValue === "complete" && codexGoalJson === undefined) {
23
- throw new UlwLoopError("Missing --codex-goal-json.", "ULW_LOOP_CODEX_GOAL_JSON_REQUIRED");
24
- }
30
+ const codexGoalJson = await parseCodexGoalJson(readValue(argv, "--codex-goal-json"));
25
31
  const qualityGateJson = readValue(argv, "--quality-gate-json");
26
32
  const args = {
27
33
  goalId,
@@ -1,5 +1,2 @@
1
- import { type UlwLoopScope } from "./paths.js";
2
- import type { UlwLoopItem, UlwLoopPlan } from "./types.js";
3
- export declare function canReconcileCompletedTaskScopedAggregateSnapshot(repoRoot: string, plan: UlwLoopPlan, goal: UlwLoopItem, snapshotObjective: string, evidence: string, scope?: UlwLoopScope): Promise<boolean>;
4
- export declare function canReconcileActiveFinalTaskScopedAggregateSnapshot(repoRoot: string, plan: UlwLoopPlan, goal: UlwLoopItem, snapshotObjective: string, evidence: string, scope?: UlwLoopScope): Promise<boolean>;
5
- export declare function buildTaskScopedAggregateReconciliationHint(goal: UlwLoopItem, final: boolean): string;
1
+ import { UlwLoopError } from "./types.js";
2
+ export declare function combineCheckpointValidationErrors(codexError: UlwLoopError, gateError: UlwLoopError): UlwLoopError;
@@ -1,79 +1,6 @@
1
- import { existsSync } from "node:fs";
2
- import { readFile } from "node:fs/promises";
3
- import { codexGoalMode, isFinalRunCompletionCandidate } from "./goal-status.js";
4
- import { ulwLoopBriefPath } from "./paths.js";
5
- import { ULW_LOOP_DIR, ULW_LOOP_GOALS, ULW_LOOP_LEDGER } from "./types.js";
6
- function normalizeObjective(value) {
7
- return value.replace(/\s+/g, " ").trim();
8
- }
9
- function textMentionsUlwLoopPlanArtifact(value) {
10
- const normalized = (value ?? "").toLowerCase();
11
- return (normalized.includes(ULW_LOOP_DIR.toLowerCase()) ||
12
- normalized.includes(ULW_LOOP_GOALS.toLowerCase()) ||
13
- normalized.includes(ULW_LOOP_LEDGER.toLowerCase()));
14
- }
15
- function textMentionsGoalId(value, goalId) {
16
- return (value ?? "").toLowerCase().includes(goalId.toLowerCase());
17
- }
18
- function textHasCompletionValidationEvidence(value) {
19
- const normalized = (value ?? "").toLowerCase();
20
- const done = /\b(?:planned work|implementation|deliverables?|scope|task|work)\b/.test(normalized) &&
21
- /\b(?:done|complete|completed|finished|shipped)\b/.test(normalized);
22
- const verified = /\b(?:validation|verification|tests?|build|lint|review|quality gate|code-review)\b/.test(normalized) &&
23
- /\b(?:passed|complete|completed|clean|green|approve|approved|clear)\b/.test(normalized);
24
- return done && verified;
25
- }
26
- async function snapshotObjectiveMapsToUlwLoopPlan(repoRoot, snapshotObjective, scope) {
27
- const actual = normalizeObjective(snapshotObjective).toLowerCase();
28
- if (textMentionsUlwLoopPlanArtifact(actual))
29
- return true;
30
- if (actual.length < 24 || !existsSync(ulwLoopBriefPath(repoRoot, scope)))
31
- return false;
32
- try {
33
- const brief = normalizeObjective(await readFile(ulwLoopBriefPath(repoRoot, scope), "utf8")).toLowerCase();
34
- return brief.length >= 24 && (brief.includes(actual) || actual.includes(brief));
35
- }
36
- catch (error) {
37
- if (error instanceof Error)
38
- return false;
39
- throw error;
40
- }
41
- }
42
- export async function canReconcileCompletedTaskScopedAggregateSnapshot(repoRoot, plan, goal, snapshotObjective, evidence, scope) {
43
- if (codexGoalMode(plan) !== "aggregate")
44
- return false;
45
- if (goal.status !== "in_progress" || plan.activeGoalId !== goal.id)
46
- return false;
47
- if (isFinalRunCompletionCandidate(plan, goal)) {
48
- return snapshotObjectiveMapsToUlwLoopPlan(repoRoot, snapshotObjective, scope);
49
- }
50
- if (!textMentionsUlwLoopPlanArtifact(evidence) || !textMentionsGoalId(evidence, goal.id))
51
- return false;
52
- if (!textHasCompletionValidationEvidence(evidence))
53
- return false;
54
- return snapshotObjectiveMapsToUlwLoopPlan(repoRoot, snapshotObjective, scope);
55
- }
56
- export async function canReconcileActiveFinalTaskScopedAggregateSnapshot(repoRoot, plan, goal, snapshotObjective, evidence, scope) {
57
- if (codexGoalMode(plan) !== "aggregate")
58
- return false;
59
- if (goal.status !== "in_progress" || plan.activeGoalId !== goal.id)
60
- return false;
61
- if (!isFinalRunCompletionCandidate(plan, goal))
62
- return false;
63
- if (!textHasCompletionValidationEvidence(evidence))
64
- return false;
65
- return snapshotObjectiveMapsToUlwLoopPlan(repoRoot, snapshotObjective, scope);
66
- }
67
- function buildCompletedLegacyGoalRemediation(goal) {
68
- return [
69
- "If get_goal returns a different completed legacy/thread objective, do not repeat --status complete in this thread.",
70
- `Record a non-terminal blocker with: omo-agent-toolkit ulw-loop checkpoint --goal-id ${goal.id} --status blocked --evidence "<completed legacy Codex goal blocks create_goal in this thread>" --codex-goal-json "<different completed get_goal JSON or path>".`,
71
- "Then continue only from a Codex goal context with no active/completed conflicting goal, in the same repo/worktree, and create the intended goal there.",
72
- ].join(" ");
73
- }
74
- export function buildTaskScopedAggregateReconciliationHint(goal, final) {
75
- if (final) {
76
- return ` Final task-scoped aggregate reconciliation requires the checkpoint goal to be the active in-progress final OMO goal and the completed get_goal objective to map to the ulw-loop brief or artifact. ${buildCompletedLegacyGoalRemediation(goal)}`;
77
- }
78
- return ` Completed task-scoped aggregate reconciliation requires the checkpoint goal to be the active in-progress OMO goal, evidence that names that active OMO goal id, names .omo/ulw-loop/goals.json or ledger.jsonl, includes completed implementation plus validation/review evidence, and a get_goal objective that maps to the ulw-loop brief/artifact. ${buildCompletedLegacyGoalRemediation(goal)}`;
1
+ import { UlwLoopError } from "./types.js";
2
+ export function combineCheckpointValidationErrors(codexError, gateError) {
3
+ return new UlwLoopError(`${codexError.message}\n${gateError.message}`, "ULW_LOOP_QUALITY_GATE_INVALID", {
4
+ details: { ...(codexError.details ?? {}), ...(gateError.details ?? {}) },
5
+ });
79
6
  }
@@ -0,0 +1,12 @@
1
+ import { type UlwLoopScope } from "./paths.js";
2
+ import { type UlwLoopToolkitSurface } from "./surface.js";
3
+ export interface CheckpointTemplate {
4
+ readonly qualityGateTemplate: Record<string, unknown>;
5
+ readonly codexGoalTemplate: Record<string, unknown>;
6
+ readonly attemptDir?: string;
7
+ readonly guidance?: string;
8
+ }
9
+ export interface CheckpointTemplateDependencies {
10
+ readonly surface?: UlwLoopToolkitSurface;
11
+ }
12
+ export declare function checkpointTemplate(repoRoot: string, scope?: UlwLoopScope, goalId?: string, dependencies?: CheckpointTemplateDependencies): Promise<CheckpointTemplate>;
@@ -0,0 +1,114 @@
1
+ import { ulwLoopAttemptEvidenceDir } from "./paths.js";
2
+ import { readUlwLoopPlan } from "./plan-io.js";
3
+ import { resolveToolkitSurface } from "./surface.js";
4
+ import { UlwLoopError } from "./types.js";
5
+ function artifactPath(base, name) {
6
+ return `${base}/${name}`;
7
+ }
8
+ function gateTemplate(surface, base) {
9
+ const artifacts = [
10
+ {
11
+ id: "artifact-cli",
12
+ kind: "cli-transcript",
13
+ description: "<replace:artifact description>",
14
+ path: artifactPath(base, "cli-transcript.txt"),
15
+ },
16
+ {
17
+ id: "artifact-data",
18
+ kind: "data-diff",
19
+ description: "<replace:artifact description>",
20
+ path: artifactPath(base, "data-diff.txt"),
21
+ },
22
+ ];
23
+ const manualQa = {
24
+ by: "main-session",
25
+ status: "passed",
26
+ evidence: "<replace:manual QA evidence>",
27
+ surfaceEvidence: [
28
+ {
29
+ id: "surface-cli",
30
+ criterionRef: "<replace:criterion id>",
31
+ surface: "cli",
32
+ invocation: "<replace:command>",
33
+ verdict: "passed",
34
+ artifactRefs: ["artifact-cli"],
35
+ },
36
+ {
37
+ id: "surface-data",
38
+ criterionRef: "<replace:criterion id>",
39
+ surface: "data",
40
+ invocation: "<replace:command>",
41
+ verdict: "passed",
42
+ artifactRefs: ["artifact-data"],
43
+ },
44
+ ],
45
+ adversarialCases: [
46
+ {
47
+ id: "<replace:adversarial case id>",
48
+ criterionRef: "<replace:criterion id>",
49
+ scenario: "<replace:scenario>",
50
+ expectedBehavior: "<replace:expected behavior>",
51
+ verdict: "not_applicable",
52
+ reason: "<replace:reason>",
53
+ artifactRefs: ["artifact-cli"],
54
+ },
55
+ ],
56
+ artifactRefs: artifacts,
57
+ };
58
+ const common = {
59
+ manualQa,
60
+ gateReview: {
61
+ by: surface === "omo-senpi" ? "category:deep-high" : "main-session",
62
+ recommendation: "APPROVE",
63
+ reportPath: artifactPath(base, "gate-review.md"),
64
+ evidence: "<replace:gate review evidence>",
65
+ blockers: [],
66
+ notes: [],
67
+ },
68
+ iteration: {
69
+ fullRerun: true,
70
+ status: "passed",
71
+ rerunCommands: ["<replace:verification command>"],
72
+ evidence: "<replace:iteration evidence>",
73
+ },
74
+ criteriaCoverage: {
75
+ totalCriteria: 0,
76
+ passCount: 0,
77
+ originalIntent: "<replace:original intent>",
78
+ desiredOutcome: "<replace:desired outcome>",
79
+ userOutcomeReview: "<replace:user outcome review>",
80
+ adversarialClassesCovered: ["<replace:adversarial class>"],
81
+ },
82
+ };
83
+ return common;
84
+ }
85
+ export async function checkpointTemplate(repoRoot, scope, goalId, dependencies) {
86
+ const plan = await readUlwLoopPlan(repoRoot, scope);
87
+ const surface = dependencies?.surface ?? resolveToolkitSurface();
88
+ const targetId = goalId ?? plan.activeGoalId;
89
+ const active = plan.goals.find((goal) => goal.id === targetId);
90
+ if (goalId !== undefined && active === undefined)
91
+ throw new UlwLoopError(`Unknown ulw-loop id: ${goalId}.`, "ULW_LOOP_GOAL_NOT_FOUND", { details: { goalId } });
92
+ const hasAttempt = plan.evidenceLayoutVersion === 2 && active !== undefined;
93
+ const attemptDir = hasAttempt ? ulwLoopAttemptEvidenceDir(active.id, active.attempt, scope) : ".omo/evidence";
94
+ const guidance = [
95
+ "codex-goal-json requires goal.objective to equal the plan's codexObjective verbatim; do not paraphrase it.",
96
+ "Fill every <replace:...> value with plausible non-empty evidence and use real, non-empty artifact files.",
97
+ 'Passing codex-goal-json example: {"goal":{"objective":"<plan codexObjective verbatim>","status":"complete"}}.',
98
+ 'Passing quality-gate-json example requires gateReview {"by":"category:deep-high","recommendation":"APPROVE","evidence":"review passed","reportPath":"<attemptDir>/gate-review.md","blockers":[],"notes":[]}, manualQa.artifactRefs objects, iteration, and criteriaCoverage.',
99
+ ...(surface === "lazycodex"
100
+ ? [
101
+ "Self-review defaults: manualQa.by and gateReview.by are main-session. Alternatives: manualQa.by accepts lazycodex-qa-executor; gateReview.by accepts lazycodex-gate-reviewer, category:deep-high, category:deep-low, category:unspecified-high, or category:unspecified-low. Optional codeReview.by accepts lazycodex-code-reviewer or main-session.",
102
+ ]
103
+ : []),
104
+ ...(hasAttempt ? [] : ["This plan is evidence-layout v1; artifacts go under .omo/evidence/."]),
105
+ ].join(" ");
106
+ return {
107
+ qualityGateTemplate: gateTemplate(surface, attemptDir),
108
+ codexGoalTemplate: {
109
+ goal: { objective: plan.codexObjective ?? "<replace:codex objective>", status: "complete" },
110
+ },
111
+ guidance,
112
+ ...(hasAttempt ? { attemptDir } : {}),
113
+ };
114
+ }
@@ -1,4 +1,5 @@
1
1
  import type { UlwLoopScope } from "./paths.js";
2
+ import { type UlwLoopToolkitSurface } from "./surface.js";
2
3
  import type { UlwLoopAggregateCompletion, UlwLoopItem, UlwLoopLedgerEntry, UlwLoopPlan } from "./types.js";
3
4
  export interface CheckpointUlwLoopArgs {
4
5
  readonly goalId: string;
@@ -7,10 +8,15 @@ export interface CheckpointUlwLoopArgs {
7
8
  readonly codexGoalJson?: string;
8
9
  readonly qualityGateJson?: string;
9
10
  }
11
+ export interface CheckpointUlwLoopDependencies {
12
+ readonly surface?: UlwLoopToolkitSurface;
13
+ }
10
14
  export interface CheckpointUlwLoopResult {
11
15
  readonly plan: UlwLoopPlan;
12
16
  readonly goal: UlwLoopItem;
13
17
  readonly ledgerEntry: UlwLoopLedgerEntry;
14
18
  readonly aggregateCompletion?: UlwLoopAggregateCompletion;
19
+ readonly nextActions: readonly string[];
20
+ readonly warnings: readonly string[];
15
21
  }
16
- export declare function checkpointUlwLoop(repoRoot: string, args: CheckpointUlwLoopArgs, scope?: UlwLoopScope): Promise<CheckpointUlwLoopResult>;
22
+ export declare function checkpointUlwLoop(repoRoot: string, args: CheckpointUlwLoopArgs, scope?: UlwLoopScope, dependencies?: CheckpointUlwLoopDependencies): Promise<CheckpointUlwLoopResult>;
@@ -2,22 +2,21 @@
2
2
  import { existsSync, statSync } from "node:fs";
3
3
  import { readFile } from "node:fs/promises";
4
4
  import { resolve } from "node:path";
5
- import { buildTaskScopedAggregateReconciliationHint, canReconcileActiveFinalTaskScopedAggregateSnapshot, canReconcileCompletedTaskScopedAggregateSnapshot, } from "./checkpoint-reconciliation.js";
6
- import { formatCodexGoalReconciliation, readCodexGoalSnapshotInput, reconcileCodexGoalSnapshot, } from "./codex-goal-snapshot.js";
5
+ import { combineCheckpointValidationErrors, validateCheckpointCodexGoal, } from "./checkpoint-codex-validation.js";
6
+ import { acknowledgeDriverObjective } from "./driver-objective-ack.js";
7
7
  import { requireAllCriteriaPass, requireAllPlanCriteriaPass, requireEssentialCriteriaPass } from "./evidence.js";
8
- import { codexGoalMode, compatibleCodexObjectives, expectedCodexObjective, isFinalRunCompletionCandidate, } from "./goal-status.js";
8
+ import { codexGoalMode, isFinalRunCompletionCandidate } from "./goal-status.js";
9
9
  import { ulwLoopAttemptEvidenceDir } from "./paths.js";
10
- import { appendLedger, readUlwLoopPlan, withUlwLoopMutationLock, writePlan } from "./plan-io.js";
10
+ import { commit } from "./plan-commit.js";
11
+ import { readUlwLoopPlan, withUlwLoopMutationLock } from "./plan-io.js";
11
12
  import { classifyExternalAuthorizationBlocker, clearGoalBlockerFields, sameBlockerOccurrences, validateQualityGate, } from "./quality-gate.js";
13
+ import { resolveToolkitSurface } from "./surface.js";
12
14
  import { iso, UlwLoopError } from "./types.js";
13
15
  import { batchClosedBy, requireAllValidationBatchesClosed, requireBatchFinalReady, requireBatchGate } from "./validation-batch.js";
14
16
  const QUALITY_GATE_FS = { existsSync, statSync };
15
17
  function ulwLoopFail(message, code) {
16
18
  throw new UlwLoopError(message, code);
17
19
  }
18
- function normalizeObjective(value) {
19
- return value.replace(/\s+/g, " ").trim();
20
- }
21
20
  function nonEmptyEvidence(value) {
22
21
  const trimmed = value.trim();
23
22
  return trimmed || ulwLoopFail("Evidence must be a non-empty string.", "ulw_loop_evidence_required");
@@ -82,13 +81,15 @@ function ledgerKind(status, goal, aggregateCompletion) {
82
81
  return status === "blocked" ? "goal_blocked" : "goal_failed";
83
82
  }
84
83
  function buildLedger(now, args, goal, qualityGate, codexGoal, aggregateCompletion) {
85
- const watch = qualityGate?.codeReview.codeQualityStatus === "WATCH";
84
+ const watch = qualityGate?.surface === "lazycodex" && qualityGate.codeReview?.codeQualityStatus === "WATCH";
86
85
  const entry = {
87
86
  at: now,
88
87
  kind: ledgerKind(args.status, goal, aggregateCompletion),
89
88
  goalId: goal.id,
90
89
  status: goal.status,
91
- evidence: watch ? `${args.evidence} | codeQuality=WATCH: ${qualityGate.codeReview.evidence}` : args.evidence,
90
+ evidence: watch && qualityGate.surface === "lazycodex"
91
+ ? `${args.evidence} | codeQuality=WATCH: ${qualityGate.codeReview?.evidence ?? ""}`
92
+ : args.evidence,
92
93
  };
93
94
  if (codexGoal !== undefined)
94
95
  entry.codexGoal = codexGoal;
@@ -102,7 +103,7 @@ function buildLedger(now, args, goal, qualityGate, codexGoal, aggregateCompletio
102
103
  entry.requiredExternalDecision = goal.requiredExternalDecision;
103
104
  return entry;
104
105
  }
105
- export async function checkpointUlwLoop(repoRoot, args, scope) {
106
+ export async function checkpointUlwLoop(repoRoot, args, scope, dependencies) {
106
107
  return withUlwLoopMutationLock(repoRoot, scope, async () => {
107
108
  const plan = await readUlwLoopPlan(repoRoot, scope);
108
109
  const goal = findGoal(plan, args.goalId);
@@ -111,6 +112,8 @@ export async function checkpointUlwLoop(repoRoot, args, scope) {
111
112
  let aggregateCompletion;
112
113
  let qualityGate;
113
114
  let codexGoal;
115
+ let nextActions = [];
116
+ let warnings = [];
114
117
  if (args.status === "complete") {
115
118
  const aggregate = codexGoalMode(plan) === "aggregate";
116
119
  const final = isFinalRunCompletionCandidate(plan, goal);
@@ -124,29 +127,25 @@ export async function checkpointUlwLoop(repoRoot, args, scope) {
124
127
  requireEssentialCriteriaPass(goal);
125
128
  else
126
129
  requireAllCriteriaPass(goal);
127
- const snapshot = await readCodexGoalSnapshotInput(args.codexGoalJson, repoRoot);
128
- const reconciliation = reconcileCodexGoalSnapshot(snapshot, {
129
- expectedObjective: expectedCodexObjective(plan, goal),
130
- ...(aggregate ? { acceptedObjectives: compatibleCodexObjectives(plan) } : {}),
131
- allowedStatuses: aggregate ? (final ? ["complete"] : ["active"]) : ["complete"],
132
- requireSnapshot: true,
133
- requireComplete: !aggregate || final,
134
- });
135
- codexGoal = reconciliation.snapshot.raw;
136
- if (!reconciliation.ok) {
137
- const objective = snapshot?.objective;
138
- const mismatchedTaskObjective = snapshot?.available === true &&
139
- objective !== undefined &&
140
- normalizeObjective(objective) !== normalizeObjective(expectedCodexObjective(plan, goal));
141
- const completedTaskScoped = mismatchedTaskObjective &&
142
- snapshot.status === "complete" &&
143
- (await canReconcileCompletedTaskScopedAggregateSnapshot(repoRoot, plan, goal, objective, evidence, scope));
144
- const activeFinalTaskScoped = mismatchedTaskObjective &&
145
- snapshot.status === "active" &&
146
- (await canReconcileActiveFinalTaskScopedAggregateSnapshot(repoRoot, plan, goal, objective, evidence, scope));
147
- const taskScoped = completedTaskScoped || activeFinalTaskScoped;
148
- if (!taskScoped)
149
- throw new UlwLoopError(`${formatCodexGoalReconciliation(reconciliation)}${aggregate && snapshot?.status === "complete" && objective !== undefined ? buildTaskScopedAggregateReconciliationHint(goal, final) : ""}`, "ulw_loop_codex_snapshot_mismatch");
130
+ let codexValidationError;
131
+ try {
132
+ const validation = await validateCheckpointCodexGoal({
133
+ repoRoot,
134
+ plan,
135
+ goal,
136
+ raw: args.codexGoalJson,
137
+ evidence,
138
+ ...(scope === undefined ? {} : { scope }),
139
+ });
140
+ codexGoal = validation.raw;
141
+ nextActions = validation.nextActions;
142
+ warnings = validation.warnings;
143
+ acknowledgeDriverObjective(plan, validation.unacknowledgedObjective);
144
+ }
145
+ catch (error) {
146
+ if (!(error instanceof UlwLoopError))
147
+ throw error;
148
+ codexValidationError = error;
150
149
  }
151
150
  if (closesBatch)
152
151
  requireBatchFinalReady(plan, goal);
@@ -155,15 +154,25 @@ export async function checkpointUlwLoop(repoRoot, args, scope) {
155
154
  if (final)
156
155
  aggregateCompletion = makeAggregateCompletion(now, evidence, codexGoal);
157
156
  if (final || aggregateCompletion !== undefined || closesBatch) {
158
- qualityGate = validateQualityGate(await readJsonInput(args.qualityGateJson, repoRoot), {
159
- repoRoot,
160
- fs: QUALITY_GATE_FS,
161
- ...(plan.evidenceLayoutVersion === 2
162
- ? { currentAttemptDir: ulwLoopAttemptEvidenceDir(goal.id, goal.attempt, scope) }
163
- : {}),
164
- });
165
- requireBatchGate(plan, goal, qualityGate);
157
+ try {
158
+ qualityGate = validateQualityGate(await readJsonInput(args.qualityGateJson, repoRoot), {
159
+ repoRoot,
160
+ fs: QUALITY_GATE_FS,
161
+ reviewerSurface: dependencies?.surface ?? resolveToolkitSurface(),
162
+ ...(plan.evidenceLayoutVersion === 2
163
+ ? { currentAttemptDir: ulwLoopAttemptEvidenceDir(goal.id, goal.attempt, scope) }
164
+ : {}),
165
+ });
166
+ requireBatchGate(plan, goal, qualityGate);
167
+ }
168
+ catch (error) {
169
+ if (!(error instanceof UlwLoopError) || codexValidationError === undefined)
170
+ throw error;
171
+ throw combineCheckpointValidationErrors(codexValidationError, error);
172
+ }
166
173
  }
174
+ if (codexValidationError !== undefined)
175
+ throw codexValidationError;
167
176
  goal.status = "complete";
168
177
  goal.completedAt = now;
169
178
  goal.evidence = evidence;
@@ -178,15 +187,17 @@ export async function checkpointUlwLoop(repoRoot, args, scope) {
178
187
  goal.updatedAt = now;
179
188
  if (aggregateCompletion !== undefined)
180
189
  plan.aggregateCompletion = aggregateCompletion;
190
+ if (aggregateCompletion !== undefined)
191
+ nextActions = [...nextActions, 'aggregate complete — now update_goal({status:"complete"})'];
181
192
  plan.updatedAt = now;
182
- await writePlan(repoRoot, plan, scope);
183
193
  const ledgerEntry = buildLedger(now, args, goal, qualityGate, codexGoal, aggregateCompletion);
184
- await appendLedger(repoRoot, ledgerEntry, scope);
194
+ const entries = [ledgerEntry];
185
195
  const closedBatch = args.status === "complete" ? batchClosedBy(plan, goal.id) : undefined;
186
196
  if (closedBatch !== undefined)
187
- await appendLedger(repoRoot, { at: now, kind: "batch_closed", goalId: goal.id, message: closedBatch.batchId }, scope);
197
+ entries.push({ at: now, kind: "batch_closed", goalId: goal.id, message: closedBatch.batchId });
198
+ await commit(repoRoot, scope, { plan, entries });
188
199
  return aggregateCompletion === undefined
189
- ? { plan, goal, ledgerEntry }
190
- : { plan, goal, ledgerEntry, aggregateCompletion };
200
+ ? { plan, goal, ledgerEntry, nextActions, warnings }
201
+ : { plan, goal, ledgerEntry, aggregateCompletion, nextActions, warnings };
191
202
  });
192
203
  }
@@ -66,14 +66,14 @@ export async function readJsonInput(value) {
66
66
  export async function parseCodexGoalJson(value) {
67
67
  if (value === undefined)
68
68
  return undefined;
69
- const raw = looksLikeJson(value) ? value : await readFile(value, "utf8");
70
69
  try {
70
+ const raw = looksLikeJson(value) ? value : await readFile(value, "utf8");
71
71
  JSON.parse(raw);
72
72
  return raw;
73
73
  }
74
74
  catch (error) {
75
75
  const message = error instanceof Error ? error.message : "unknown error";
76
- throw new UlwLoopError(`Invalid --codex-goal-json: ${message}`, "ULW_LOOP_CODEX_GOAL_JSON_INVALID", { cause: error });
76
+ throw new UlwLoopError(`Invalid --codex-goal-json: ${looksLikeJson(value) ? message : "neither valid JSON nor a readable path"}`, "ULW_LOOP_CODEX_GOAL_JSON_INVALID", { cause: error });
77
77
  }
78
78
  }
79
79
  function required(argv, flag, code) {