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
@@ -54,8 +54,8 @@ test("#given stale root reasoning config #when ensuring config #then replaces st
54
54
  assert.equal(result.match(/^model_context_window\s*=/gm)?.length, 1);
55
55
  assert.equal(result.match(/^model_reasoning_effort\s*=/gm)?.length, 1);
56
56
  assert.equal(result.match(/^plan_mode_reasoning_effort\s*=/gm)?.length, 1);
57
- assert.match(result, /model = "gpt-5\.6-sol"/);
58
- assert.match(result, /model_context_window = 372000/);
57
+ assert.match(result, /model = "gpt-6-astra"/);
58
+ assert.match(result, /model_context_window = 600000/);
59
59
  assert.match(result, /model_reasoning_effort = "high"/);
60
60
  assert.match(result, /plan_mode_reasoning_effort = "xhigh"/);
61
61
  assert.doesNotMatch(result, /gpt-5\.2/);
@@ -79,8 +79,8 @@ test("#given section settings reuse managed root keys #when ensuring config #the
79
79
  ].join("\n"),
80
80
  );
81
81
 
82
- assert.match(result, /^model = "gpt-5\.6-sol"$/m);
83
- assert.match(result, /^model_context_window = 372000$/m);
82
+ assert.match(result, /^model = "gpt-6-astra"$/m);
83
+ assert.match(result, /^model_context_window = 600000$/m);
84
84
  assert.match(result, /\[model_providers\.openai\]\nmodel = "provider-scoped-value"\nmodel_context_window = 123456/);
85
85
  assert.match(result, /\[profiles\.review\]\nmodel_reasoning_effort = "medium"\nplan_mode_reasoning_effort = "medium"/);
86
86
  });
@@ -161,8 +161,8 @@ test("#given global and project-local stale Codex configs #when migrating #then
161
161
  });
162
162
 
163
163
  assert.deepEqual(result.changed.sort(), [join(codexHome, "config.toml"), projectConfig].sort());
164
- assert.match(await readFile(join(codexHome, "config.toml"), "utf8"), /model = "gpt-5\.6-sol"/);
165
- assert.match(await readFile(projectConfig, "utf8"), /model_context_window = 372000/);
164
+ assert.match(await readFile(join(codexHome, "config.toml"), "utf8"), /model = "gpt-6-astra"/);
165
+ assert.match(await readFile(projectConfig, "utf8"), /model_context_window = 600000/);
166
166
  });
167
167
 
168
168
  test("#given model catalog is unavailable and stale 272k config #when migrating #then fallback catalog still upgrades it", async () => {
@@ -183,8 +183,8 @@ test("#given model catalog is unavailable and stale 272k config #when migrating
183
183
 
184
184
  const content = await readFile(join(codexHome, "config.toml"), "utf8");
185
185
  assert.deepEqual(result.changed, [join(codexHome, "config.toml")]);
186
- assert.match(content, /model = "gpt-5\.6-sol"/);
187
- assert.match(content, /model_context_window = 372000/);
186
+ assert.match(content, /model = "gpt-6-astra"/);
187
+ assert.match(content, /model_context_window = 600000/);
188
188
  });
189
189
 
190
190
  test("#given model catalog is malformed and stale config #when migrating #then fallback catalog still upgrades it", async () => {
@@ -206,8 +206,8 @@ test("#given model catalog is malformed and stale config #when migrating #then f
206
206
 
207
207
  const content = await readFile(join(codexHome, "config.toml"), "utf8");
208
208
  assert.deepEqual(result.changed, [join(codexHome, "config.toml")]);
209
- assert.match(content, /model = "gpt-5\.6-sol"/);
210
- assert.match(content, /model_context_window = 372000/);
209
+ assert.match(content, /model = "gpt-6-astra"/);
210
+ assert.match(content, /model_context_window = 600000/);
211
211
  });
212
212
 
213
213
  test("#given user-customized Codex model config #when migrating #then user values are preserved without root multi-agent mode", async () => {
@@ -234,16 +234,16 @@ test("#given user-customized Codex model config #when migrating #then user value
234
234
  });
235
235
 
236
236
  const content = await readFile(join(codexHome, "config.toml"), "utf8");
237
- assert.deepEqual(result.changed, [join(codexHome, "config.toml")]);
237
+ assert.deepEqual(result.changed, []);
238
238
  assert.deepEqual(result.modeChanged, []);
239
239
  assert.match(content, /model = "gpt-5\.4"/);
240
240
  assert.match(content, /model_context_window = 123456/);
241
241
  assert.match(content, /model_reasoning_effort = "medium"/);
242
242
  assert.match(content, /plan_mode_reasoning_effort = "medium"/);
243
243
  assert.doesNotMatch(content, /^\s*multi_agent_mode\s*=/m);
244
- assert.match(content, /\[agents\][\s\S]*?max_threads = 1000/);
244
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
245
245
  assert.match(content, /\[features\.multi_agent_v2\][\s\S]*?enabled = false/);
246
- assert.match(content, /max_concurrent_threads_per_session = 16/);
246
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
247
247
  });
248
248
 
249
249
  test("#given managed config state is malformed #when migrating #then migration ignores stale state safely", async () => {
@@ -262,7 +262,7 @@ test("#given managed config state is malformed #when migrating #then migration i
262
262
  const content = await readFile(join(codexHome, "config.toml"), "utf8");
263
263
  const state = JSON.parse(await readFile(statePath, "utf8"));
264
264
  assert.deepEqual(result.changed, [join(codexHome, "config.toml")]);
265
- assert.match(content, /model_context_window = 372000/);
265
+ assert.match(content, /model_context_window = 600000/);
266
266
  assert.equal(state.files[join(codexHome, "config.toml")].managed, true);
267
267
  });
268
268
 
@@ -404,8 +404,8 @@ test("#given config already matches current catalog #when catalog version advanc
404
404
  assert.equal(state.files[configPath].catalogVersion, "test.role-only");
405
405
  const content = await readFile(configPath, "utf8");
406
406
  assert.doesNotMatch(content, /^\s*multi_agent_mode\s*=/m);
407
- assert.match(content, /\[agents\][\s\S]*?max_threads = 1000/);
408
- assert.match(content, /max_concurrent_threads_per_session = 16/);
407
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
408
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
409
409
  });
410
410
 
411
411
  test("#given stale Context7 placeholder MCP config #when migrating #then removes it and keeps plugin policy", async () => {
@@ -642,8 +642,8 @@ test("#given global config without multi_agent_v2 section #when full migration r
642
642
  assert.deepEqual(result.modeChanged, []);
643
643
  const content = await readFile(configPath, "utf8");
644
644
  assert.match(content, /\[features\.multi_agent_v2\][\s\S]*?enabled = false/);
645
- assert.match(content, /max_concurrent_threads_per_session = 16/);
646
- assert.match(content, /\[agents\][\s\S]*?max_threads = 1000/);
645
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
646
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
647
647
  assert.doesNotMatch(content, /^\s*multi_agent_mode\s*=/m);
648
648
  });
649
649
 
@@ -670,15 +670,15 @@ test("#given global config starts with inline-comment features table #when full
670
670
  const content = await readFile(configPath, "utf8");
671
671
  const parsed = parseTomlWithPython(content);
672
672
  assert.equal("multi_agent_mode" in parsed, false);
673
- assert.equal(parsed.model, "gpt-5.6-sol");
674
- assert.equal(parsed.model_context_window, 372000);
673
+ assert.equal(parsed.model, "gpt-6-astra");
674
+ assert.equal(parsed.model_context_window, 600000);
675
675
  assert.equal(parsed.model_reasoning_effort, "high");
676
676
  assert.equal(parsed.plan_mode_reasoning_effort, "xhigh");
677
677
  assert.equal(parsed.features.plugins, true);
678
678
  assert.equal("multi_agent_mode" in parsed.features, false);
679
679
  assert.equal("model" in parsed.features, false);
680
680
  assert.equal("model_context_window" in parsed.features, false);
681
- assert.match(content, /^model = "gpt-5\.6-sol"\nmodel_context_window = 372000/m);
681
+ assert.match(content, /^model = "gpt-6-astra"\nmodel_context_window = 600000/m);
682
682
  assert.doesNotMatch(content, /^\s*multi_agent_mode\s*=/m);
683
683
  assert.match(content, /\[features\] # keep comment\nplugins = true/);
684
684
  });
@@ -750,7 +750,7 @@ test("#given global config with forced multi_agent_v2 #when full migration runs
750
750
  assert.match(content, /enabled = false/);
751
751
  assert.doesNotMatch(content, /enabled = true/);
752
752
  assert.match(content, /max_concurrent_threads_per_session = 10000/);
753
- assert.match(content, /\[agents\][\s\S]*?max_threads = 1000/);
753
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
754
754
  });
755
755
 
756
756
  test("#given enabled = true with an inline comment #when forcing disable #then flips to false and preserves the comment", () => {
@@ -832,7 +832,7 @@ test("#given gpt-5.6-terra with managed disable #when model catalog prefers v2 #
832
832
  "",
833
833
  "[features.multi_agent_v2]",
834
834
  "enabled = false",
835
- "max_concurrent_threads_per_session = 1000",
835
+ "max_concurrent_threads_per_session = 7",
836
836
  "",
837
837
  ].join("\n");
838
838
 
@@ -842,7 +842,7 @@ test("#given gpt-5.6-terra with managed disable #when model catalog prefers v2 #
842
842
  assert.doesNotMatch(result, /openai\/codex#26753/);
843
843
  assert.doesNotMatch(result, /Managed by LazyCodex: multi_agent_v2/);
844
844
  assert.match(result, /\[features\.multi_agent_v2\]/);
845
- assert.match(result, /max_concurrent_threads_per_session = 1000/);
845
+ assert.match(result, /max_concurrent_threads_per_session = 7/);
846
846
  });
847
847
 
848
848
  test("#given gpt-5.6 v2 model with hide_spawn_agent_metadata=false #when clearing #then removes the stale metadata override", () => {
@@ -852,7 +852,7 @@ test("#given gpt-5.6 v2 model with hide_spawn_agent_metadata=false #when clearin
852
852
  "[features.multi_agent_v2]",
853
853
  "enabled = false",
854
854
  "hide_spawn_agent_metadata = false",
855
- "max_concurrent_threads_per_session = 1000",
855
+ "max_concurrent_threads_per_session = 7",
856
856
  "",
857
857
  ].join("\n");
858
858
 
@@ -860,7 +860,7 @@ test("#given gpt-5.6 v2 model with hide_spawn_agent_metadata=false #when clearin
860
860
 
861
861
  assert.doesNotMatch(result, /^\s*enabled\s*=\s*false/m);
862
862
  assert.doesNotMatch(result, /^\s*hide_spawn_agent_metadata\s*=/m);
863
- assert.match(result, /max_concurrent_threads_per_session = 1000/);
863
+ assert.match(result, /max_concurrent_threads_per_session = 7/);
864
864
  });
865
865
 
866
866
  test("#given gpt-5.6 v2 model with hide_spawn_agent_metadata=true #when clearing #then leaves the default-matching value alone", () => {
@@ -948,7 +948,7 @@ test("#given gpt-5.6-terra managed disable #when full migration sees models_cach
948
948
  assert.doesNotMatch(content, /openai\/codex#26753/);
949
949
  assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
950
950
  assert.match(content, /max_depth = 2/);
951
- assert.match(content, /max_concurrent_threads_per_session = 1000/);
951
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
952
952
  });
953
953
 
954
954
  test("#given config default gpt-5.5 #when SessionStart model is gpt-5.6-terra #then prefers session model and clears disable", () => {
@@ -957,7 +957,7 @@ test("#given config default gpt-5.5 #when SessionStart model is gpt-5.6-terra #t
957
957
  "",
958
958
  "[features.multi_agent_v2]",
959
959
  "enabled = false",
960
- "max_concurrent_threads_per_session = 1000",
960
+ "max_concurrent_threads_per_session = 7",
961
961
  "",
962
962
  ].join("\n");
963
963
 
@@ -967,7 +967,7 @@ test("#given config default gpt-5.5 #when SessionStart model is gpt-5.6-terra #t
967
967
  });
968
968
 
969
969
  assert.doesNotMatch(result, /^\s*enabled\s*=\s*false/m);
970
- assert.match(result, /max_concurrent_threads_per_session = 1000/);
970
+ assert.match(result, /max_concurrent_threads_per_session = 7/);
971
971
  });
972
972
 
973
973
  test("#given SessionStart without model #when requireSessionModel is set #then skips legacy force-disable", () => {
@@ -1030,8 +1030,8 @@ test("#given legacy shorthand and no session model on hook path #when full migra
1030
1030
  const parsed = parseTomlWithPython(content);
1031
1031
  assert.doesNotMatch(content, /^\s*multi_agent_v2\s*=\s*(?:true|false)/m);
1032
1032
  assert.equal(parsed.features.plugins, true);
1033
- assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, 16);
1034
- assert.equal("enabled" in parsed.features.multi_agent_v2, false);
1033
+ assert.equal(parsed.features.multi_agent_v2?.max_concurrent_threads_per_session, undefined);
1034
+ assert.equal(parsed.features.multi_agent_v2?.enabled, undefined);
1035
1035
  });
1036
1036
 
1037
1037
  test("#given SoT migration failure #when hook migration runs #then config.toml repair still happens", async () => {
@@ -1110,7 +1110,7 @@ test("#given config default gpt-5.5 #when full migration gets SessionStart gpt-5
1110
1110
  const content = await readFile(configPath, "utf8");
1111
1111
  assert.doesNotMatch(content, /^\s*enabled\s*=\s*false/m);
1112
1112
  assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
1113
- assert.match(content, /max_concurrent_threads_per_session = 1000/);
1113
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
1114
1114
  });
1115
1115
 
1116
1116
  test("#given no session model and no root model #when forcing disable #then leaves the enable state untouched", () => {
@@ -1151,7 +1151,7 @@ test("#given user-modified config without root model #when full non-hook migrati
1151
1151
  assert.doesNotMatch(content, /^\s*enabled\s*=\s*false/m);
1152
1152
  assert.doesNotMatch(content, /openai\/codex#26753/);
1153
1153
  assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
1154
- assert.match(content, /max_concurrent_threads_per_session = 16/);
1154
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
1155
1155
  });
1156
1156
 
1157
1157
  async function canCreateSymlink(type) {
@@ -1211,8 +1211,8 @@ test("#given model_catalog_json declares a v2 model as v1 #when full migration r
1211
1211
 
1212
1212
  const content = await readFile(configPath, "utf8");
1213
1213
  assert.match(content, /enabled = false/, "explicit v1 catalog must keep the managed disable");
1214
- assert.match(content, /max_threads = 1000/, "explicit v1 catalog must keep agents.max_threads");
1215
- assert.match(content, /max_concurrent_threads_per_session = 1000/);
1214
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m, "managed agents.max_threads must be removed");
1215
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
1216
1216
  assert.match(content, /max_depth = 2/);
1217
1217
  });
1218
1218
 
@@ -36,7 +36,7 @@ test("#given relative model_catalog_json declares gpt-5.6 model as v1 #when migr
36
36
 
37
37
  const content = await readFile(configPath, "utf8");
38
38
  assert.match(content, /enabled = false/);
39
- assert.match(content, /max_threads = 1000/);
39
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
40
40
  });
41
41
 
42
42
  test("#given no SessionStart model and root gpt-5.6 model without catalog #when migrating #then clears stale V2 disable", async () => {
@@ -8,42 +8,6 @@ import { fileURLToPath, pathToFileURL } from "node:url";
8
8
  const root = dirname(dirname(fileURLToPath(import.meta.url)));
9
9
  const scriptPath = join(root, "skills", "ulw-plan", "scripts", "scaffold-plan.mjs");
10
10
  const scriptUrl = pathToFileURL(scriptPath).href;
11
- const workflowPath = join(root, "skills", "ulw-plan", "references", "full-workflow.md");
12
-
13
- test("#given the scaffold script and the workflow reference #when compared #then every plan header the script emits is documented in full-workflow.md (no drift)", async () => {
14
- // given
15
- const { PLAN_SECTION_HEADERS } = await import(scriptUrl);
16
- const workflow = await readFile(workflowPath, "utf8");
17
-
18
- // then --- the script is the single source of the plan shape; the reference must document the same headers
19
- assert.ok(PLAN_SECTION_HEADERS.length >= 6);
20
- for (const header of PLAN_SECTION_HEADERS) {
21
- assert.ok(workflow.includes(header), `full-workflow.md is missing plan header: ${header}`);
22
- }
23
- });
24
-
25
- test("#given buildPlanSkeleton #when intent is unclear #then the human TL;DR leads the plan and surfaces the decisions veto block", async () => {
26
- // given
27
- const { buildPlanSkeleton, PLAN_SECTION_HEADERS } = await import(scriptUrl);
28
- const plan = buildPlanSkeleton("demo", "unclear");
29
-
30
- // then --- the human-readable summary is on top, above the AI detail
31
- assert.ok(plan.indexOf("## TL;DR (For humans)") < plan.indexOf("## Scope"));
32
- assert.match(plan, /Decisions I made for you/);
33
- for (const header of PLAN_SECTION_HEADERS) {
34
- assert.ok(plan.includes(header), `plan skeleton missing header: ${header}`);
35
- }
36
- });
37
-
38
- test("#given buildPlanSkeleton #when intent is clear #then it surfaces a decisions-to-sanity-check block instead", async () => {
39
- // given
40
- const { buildPlanSkeleton } = await import(scriptUrl);
41
- const plan = buildPlanSkeleton("demo", "clear");
42
-
43
- // then
44
- assert.match(plan, /Decisions to sanity-check/);
45
- assert.doesNotMatch(plan, /Decisions I made for you/);
46
- });
47
11
 
48
12
  test("#given resolveSafeOmoPath #when the target escapes .omo or the workspace #then it is refused (the script never escapes .omo)", async () => {
49
13
  // given
@@ -6,6 +6,60 @@ import { join } from "node:path";
6
6
  import test from "node:test";
7
7
 
8
8
  import { migrateConfigFile } from "../scripts/migrate-codex-config.mjs";
9
+ import { ensureSubagentConcurrencyLimit } from "../scripts/migrate-codex-config/subagent-limit-guard.mjs";
10
+
11
+ for (const fixture of [
12
+ { name: "bare", key: "max_threads", v2Key: "max_concurrent_threads_per_session", before: "", equals: "=" },
13
+ { name: "double-quoted", key: '"max_threads"', v2Key: '"max_concurrent_threads_per_session"', before: "", equals: " = " },
14
+ { name: "single-quoted", key: "'max_threads'", v2Key: "'max_concurrent_threads_per_session'", before: " \t", equals: "\t= " },
15
+ { name: "escaped-quoted", key: '"max_thread\\u0073"', v2Key: '"max_concurrent_threads_per_sessio\\u006e"', before: "\t ", equals: " =\t" },
16
+ ]) {
17
+ test(`#given ${fixture.name} thread-cap keys with varied spacing #when migrating #then removes managed values and retains user values`, () => {
18
+ for (const value of [1000, 16, 6, 8, 10000]) {
19
+ const config = [
20
+ "[agents]",
21
+ `${fixture.before}${fixture.key}${fixture.equals}${value} # cap`,
22
+ "max_depth = 4",
23
+ "[agents.explorer]",
24
+ 'config_file = "./agents/explorer.toml"',
25
+ "[features.multi_agent_v2]",
26
+ "enabled = false",
27
+ `${fixture.before}${fixture.v2Key}${fixture.equals}${value} # cap`,
28
+ "usage_hint_enabled = false",
29
+ "",
30
+ ].join("\n");
31
+ const result = ensureSubagentConcurrencyLimit(config, { multiAgentVersion: "v1" });
32
+ const expected = config
33
+ .replace(value === 1000 ? `${fixture.before}${fixture.key}${fixture.equals}${value} # cap\n` : "", "")
34
+ .replace(value === 1000 || value === 16 ? `${fixture.before}${fixture.v2Key}${fixture.equals}${value} # cap\n` : "", "");
35
+ assert.equal(result, expected);
36
+ assert.deepEqual(parseTomlWithPython(result), parseTomlWithPython(expected));
37
+ assert.equal(ensureSubagentConcurrencyLimit(result, { multiAgentVersion: "v1" }), result);
38
+ }
39
+ });
40
+
41
+ test(`#given V2 and an incompatible ${fixture.name} agents cap #when migrating #then removes only the cap assignment`, () => {
42
+ for (const value of [1000, 6]) {
43
+ const config = `[agents]\n${fixture.before}${fixture.key}${fixture.equals}${value}\nmax_depth = 4\n`;
44
+ const result = ensureSubagentConcurrencyLimit(config, { multiAgentVersion: "v2" });
45
+ assert.equal(result, "[agents]\nmax_depth = 4\n");
46
+ assert.deepEqual(parseTomlWithPython(result), { agents: { max_depth: 4 } });
47
+ assert.equal(ensureSubagentConcurrencyLimit(result, { multiAgentVersion: "v2" }), result);
48
+ }
49
+ });
50
+ }
51
+
52
+ test('#given verify-a4 quoted agents.max_threads=1000 #when SessionStart migrates under V2 #then removes the cap idempotently', async () => {
53
+ const root = await mkdtemp(join(tmpdir(), "lazycodex-verify-a4-quoted-cap-"));
54
+ const configPath = join(root, "config.toml");
55
+ await writeFile(configPath, '[agents]\n"max_threads" = 1000\n');
56
+ const options = { sessionModel: "gpt-6-astra", env: { CODEX_HOME: root } };
57
+ assert.equal((await migrateConfigFile(configPath, options)).changed, true);
58
+ const firstPass = await readFile(configPath, "utf8");
59
+ assert.deepEqual(parseTomlWithPython(firstPass).agents, {});
60
+ assert.equal((await migrateConfigFile(configPath, options)).changed, false);
61
+ assert.equal(await readFile(configPath, "utf8"), firstPass);
62
+ });
9
63
 
10
64
  function parseTomlWithPython(config) {
11
65
  const python = resolvePython();
@@ -58,18 +112,18 @@ test("#given SessionStart migration sees an inline-commented V2 cap #when migrat
58
112
  const secondResult = await migrateConfigFile(configPath);
59
113
 
60
114
  const secondPass = await readFile(configPath, "utf8");
61
- assert.equal(firstResult.changed, true);
115
+ assert.equal(firstResult.changed, false);
62
116
  assert.equal(secondResult.changed, false);
63
117
  assert.equal(secondPass, firstPass);
64
118
  assert.match(
65
119
  secondPass,
66
120
  /usage_hint_enabled = false\nmax_concurrent_threads_per_session = 7 # user cap\nshow_tool_use = false/,
67
121
  );
68
- assert.match(secondPass, /\[agents\][\s\S]*?max_threads = 1000/);
122
+ assert.match(secondPass, /^\s*max_threads\s*=\s*6$/m);
69
123
  assert.match(secondPass, /max_depth = 4/);
70
124
  assert.match(secondPass, /\[agents\.explorer\]\nconfig_file = "\.\/agents\/explorer\.toml"/);
71
125
  assert.match(secondPass, /\[features\.multi_agent_v2\][\s\S]*?enabled = false/);
72
- assert.doesNotMatch(secondPass, /^max_threads\s*=\s*6$/m);
126
+ assert.match(secondPass, /^max_threads\s*=\s*6$/m);
73
127
  });
74
128
 
75
129
  for (const header of [
@@ -164,7 +218,7 @@ for (const fixture of [
164
218
  });
165
219
  }
166
220
 
167
- test("#given multiline string contains V2 cap lookalikes #when SessionStart migrates #then writes the absent semantic default", async () => {
221
+ test("#given multiline string contains V2 cap lookalikes #when SessionStart migrates #then leaves the semantic cap absent", async () => {
168
222
  const root = await mkdtemp(join(tmpdir(), "lazycodex-subagent-limit-multiline-lookalike-"));
169
223
  const configPath = join(root, "config.toml");
170
224
  await writeFile(
@@ -184,10 +238,10 @@ test("#given multiline string contains V2 cap lookalikes #when SessionStart migr
184
238
  const parsed = parseTomlWithPython(content);
185
239
 
186
240
  assert.match(parsed.notes, /max_concurrent_threads_per_session = 7/);
187
- assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, 16);
241
+ assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, undefined);
188
242
  });
189
243
 
190
- test("#given V2 section multiline value contains a cap lookalike #when SessionStart migrates #then writes the absent default", async () => {
244
+ test("#given V2 section multiline value contains a cap lookalike #when SessionStart migrates #then leaves the cap absent", async () => {
191
245
  const root = await mkdtemp(join(tmpdir(), "lazycodex-subagent-limit-section-multiline-lookalike-"));
192
246
  const configPath = join(root, "config.toml");
193
247
  await writeFile(
@@ -196,7 +250,7 @@ test("#given V2 section multiline value contains a cap lookalike #when SessionSt
196
250
  'model = "gpt-5.4"',
197
251
  "[features.multi_agent_v2]",
198
252
  'notes = """',
199
- "max_concurrent_threads_per_session = 7",
253
+ "max_concurrent_threads_per_session = 16",
200
254
  '"""',
201
255
  "",
202
256
  ].join("\n"),
@@ -205,7 +259,8 @@ test("#given V2 section multiline value contains a cap lookalike #when SessionSt
205
259
  await migrateConfigFile(configPath);
206
260
  const parsed = parseTomlWithPython(await readFile(configPath, "utf8"));
207
261
 
208
- assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, 16);
262
+ assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, undefined);
263
+ assert.equal(parsed.features.multi_agent_v2.notes, "max_concurrent_threads_per_session = 16\n");
209
264
  });
210
265
 
211
266
  test("#given V2 root-dotted disable and cap #when gpt-5.6 SessionStart migrates #then removes disable and V1 agents cap", async () => {
@@ -230,7 +285,7 @@ test("#given V2 root-dotted disable and cap #when gpt-5.6 SessionStart migrates
230
285
 
231
286
  assert.equal(parsed.features.multi_agent_v2.max_concurrent_threads_per_session, 7);
232
287
  assert.equal(parsed.features.multi_agent_v2.enabled, undefined);
233
- assert.equal(parsed.agents, undefined);
288
+ assert.equal(parsed.agents?.max_threads, undefined);
234
289
  });
235
290
 
236
291
  test("#given quoted dotted V1 keys under features #when SessionStart migrates #then replaces enabled without a duplicate", async () => {
@@ -312,7 +367,7 @@ test("#given gpt-5.6 session model with no models_cache and an explicit V2 cap #
312
367
  assert.match(content, /max_concurrent_threads_per_session = 6/);
313
368
  });
314
369
 
315
- test("#given SessionStart config migration has no V2 cap #when migrating #then writes the conservative managed default", async () => {
370
+ test("#given SessionStart config migration has no V2 cap #when migrating #then leaves the cap unset", async () => {
316
371
  const root = await mkdtemp(join(tmpdir(), "lazycodex-subagent-limit-missing-cap-"));
317
372
  const configPath = join(root, "config.toml");
318
373
  await writeFile(
@@ -329,7 +384,7 @@ test("#given SessionStart config migration has no V2 cap #when migrating #then w
329
384
  await migrateConfigFile(configPath);
330
385
 
331
386
  const content = await readFile(configPath, "utf8");
332
- assert.match(content, /max_concurrent_threads_per_session = 16/);
387
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
333
388
  assert.doesNotMatch(content, /max_concurrent_threads_per_session = 1000/);
334
389
  });
335
390
 
@@ -346,10 +401,47 @@ test("#given config without any model #when migrating #then does not introduce a
346
401
  const content = await readFile(configPath, "utf8");
347
402
  assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
348
403
  assert.match(content, /max_depth = 4/);
349
- assert.match(content, /max_concurrent_threads_per_session = 16/);
404
+ assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
405
+ });
406
+
407
+ test("#given todo 4 cap cases #when migrating #then removes managed caps, preserves user caps, and detects gpt-6 V2", async () => {
408
+ const cases = [
409
+ {
410
+ name: "no limits",
411
+ config: 'model = "gpt-6-astra"\n',
412
+ assertResult(content) {
413
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
414
+ assert.doesNotMatch(content, /^\s*max_concurrent_threads_per_session\s*=/m);
415
+ },
416
+ },
417
+ {
418
+ name: "managed limits",
419
+ config: ['model = "gpt-6-astra"', 'model_reasoning_effort = "medium"', "", "[features.multi_agent_v2]", "max_concurrent_threads_per_session = 1000", "", "[agents]", "max_threads = 1000", ""].join("\n"),
420
+ assertResult(content) {
421
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
422
+ assert.doesNotMatch(content, /^\s*max_concurrent_threads_per_session\s*=/m);
423
+ },
424
+ },
425
+ {
426
+ name: "user limits",
427
+ config: ['model = "gpt-6-astra"', 'model_reasoning_effort = "medium"', "", "[features.multi_agent_v2]", "max_concurrent_threads_per_session = 8", "", "[agents]", "max_threads = 6", ""].join("\n"),
428
+ assertResult(content) {
429
+ assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
430
+ assert.match(content, /^\s*max_concurrent_threads_per_session\s*=\s*8/m);
431
+ },
432
+ },
433
+ ];
434
+
435
+ for (const fixture of cases) {
436
+ const root = await mkdtemp(join(tmpdir(), `lazycodex-subagent-limit-todo4-${fixture.name}-`));
437
+ const configPath = join(root, "config.toml");
438
+ await writeFile(configPath, fixture.config);
439
+ await migrateConfigFile(configPath, { env: { CODEX_HOME: root }, sessionModel: "gpt-6-astra" });
440
+ fixture.assertResult(await readFile(configPath, "utf8"));
441
+ }
350
442
  });
351
443
 
352
- test("#given config without any model but an existing low cap #when migrating #then still raises the existing cap", async () => {
444
+ test("#given config without any model but an existing low cap #when migrating #then preserves the existing cap", async () => {
353
445
  const root = await mkdtemp(join(tmpdir(), "lazycodex-subagent-limit-no-model-raise-"));
354
446
  const configPath = join(root, "config.toml");
355
447
  await writeFile(
@@ -360,7 +452,7 @@ test("#given config without any model but an existing low cap #when migrating #t
360
452
  await migrateConfigFile(configPath, { env: { CODEX_HOME: root } });
361
453
 
362
454
  const content = await readFile(configPath, "utf8");
363
- assert.match(content, /max_threads = 1000/);
364
- assert.doesNotMatch(content, /max_threads = 6/);
455
+ assert.match(content, /max_threads = 6/);
456
+ assert.doesNotMatch(content, /max_threads = 1000/);
365
457
  assert.match(content, /max_depth = 4/);
366
458
  });