lazycodex-ai 5.0.0-beta.9 → 5.0.0

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 (869) hide show
  1. package/README.ja.md +64 -69
  2. package/README.ko.md +65 -70
  3. package/README.md +108 -182
  4. package/README.ru.md +60 -68
  5. package/README.zh-cn.md +60 -69
  6. package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
  7. package/dist/cli/config-manager/refresh-opencode-plugin-sandbox.d.ts +31 -0
  8. package/dist/cli/doctor/checks/browser-provider.d.ts +2 -0
  9. package/dist/cli/doctor/checks/index.d.ts +2 -0
  10. package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
  11. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  12. package/dist/cli/doctor/checks/tui-plugin-config.d.ts +11 -0
  13. package/dist/cli/doctor/framework/constants.d.ts +5 -0
  14. package/dist/cli/doctor/framework/types.d.ts +2 -0
  15. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  16. package/dist/cli/index.js +60340 -63161
  17. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  18. package/dist/cli/install-native/index.d.ts +12 -0
  19. package/dist/cli/install-native/legacy-omo-bin.d.ts +27 -0
  20. package/dist/cli/install-native/offer-native-setup.d.ts +31 -0
  21. package/dist/cli/install-native/omo-bin-test-fixtures.d.ts +35 -0
  22. package/dist/cli/install-native/plan.d.ts +21 -0
  23. package/dist/cli/install-native/repair-legacy-omo-bin.d.ts +26 -0
  24. package/dist/cli/install-native/run-native-install.d.ts +33 -0
  25. package/dist/cli/install-native/verify-omo-command.d.ts +22 -0
  26. package/dist/cli/install-native-dev/index.d.ts +4 -0
  27. package/dist/cli/native-dev-platform-flag.d.ts +5 -0
  28. package/dist/cli/native-edition-hint.d.ts +10 -0
  29. package/dist/cli/runtime-commands.d.ts +1 -1
  30. package/dist/cli/types.d.ts +3 -2
  31. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  32. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  33. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  34. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  35. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  36. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  37. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  38. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  39. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  40. package/dist/cli-node/index.js +61667 -64465
  41. package/package.json +15 -14
  42. package/packages/git-bash-mcp/dist/cli.js +6 -1
  43. package/packages/lsp-daemon/dist/cli.js +1421 -960
  44. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  45. package/packages/lsp-daemon/dist/client.js +956 -498
  46. package/packages/lsp-daemon/dist/daemon-client.d.ts +3 -0
  47. package/packages/lsp-daemon/dist/daemon-client.js +23 -3
  48. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  49. package/packages/lsp-daemon/dist/ensure-daemon.js +27 -5
  50. package/packages/lsp-daemon/dist/index.js +860 -407
  51. package/packages/lsp-daemon/dist/ownership.js +2 -2
  52. package/packages/lsp-daemon/dist/proxy.js +3 -0
  53. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  54. package/packages/lsp-daemon/package.json +5 -4
  55. package/packages/lsp-tools-mcp/dist/cli.js +764 -341
  56. package/packages/lsp-tools-mcp/dist/lsp/manager.js +274 -138
  57. package/packages/lsp-tools-mcp/dist/mcp.js +789 -368
  58. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  59. package/packages/lsp-tools-mcp/dist/tools.js +719 -302
  60. package/packages/lsp-tools-mcp/package.json +5 -4
  61. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  62. package/packages/omo-codex/plugin/.mcp.json +0 -6
  63. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  64. package/packages/omo-codex/plugin/README.md +6 -2
  65. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8504 -408
  66. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  67. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  69. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -1
  70. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  71. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  72. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  73. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  74. package/packages/omo-codex/plugin/components/comment-checker/package.json +6 -5
  75. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  76. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  77. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  78. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  79. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  80. package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +1 -1
  81. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -1
  82. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  83. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  84. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +2 -1
  85. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
  86. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  87. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  88. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
  89. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
  90. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
  91. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
  92. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  93. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +6 -5
  94. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +32 -28
  95. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
  96. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  97. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +134 -11
  98. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  99. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +7 -5
  100. package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/SKILL.md +5 -5
  101. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  102. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  103. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  104. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +977 -545
  105. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  106. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  107. package/packages/omo-codex/plugin/components/lsp/package.json +6 -5
  108. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  109. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  110. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  111. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  112. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  113. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  114. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  115. package/packages/omo-codex/plugin/components/rules/README.md +2 -0
  116. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  117. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -1
  118. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +127 -0
  119. package/packages/omo-codex/plugin/components/rules/dist/cli.js +103 -68
  120. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  121. package/packages/omo-codex/plugin/components/rules/package.json +8 -7
  122. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  123. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  124. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +27 -5
  125. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  126. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  127. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +1 -2
  128. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  129. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  130. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  131. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +2 -3
  132. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -3
  133. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  134. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  135. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  136. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +29 -6
  137. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  138. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  139. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  140. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -2
  141. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  142. package/packages/omo-codex/plugin/components/teammode/package.json +6 -5
  143. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +1 -1
  144. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  145. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  146. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +5328 -1382
  147. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +5524 -1579
  148. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  149. package/packages/omo-codex/plugin/components/telemetry/package.json +6 -5
  150. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  151. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  152. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  153. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  154. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  155. package/packages/omo-codex/plugin/components/ultrawork/README.md +3 -1
  156. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  157. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
  158. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  159. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  160. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  161. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  162. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  163. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  164. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
  165. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
  166. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
  167. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +20 -7
  168. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  169. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +478 -4
  170. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  171. package/packages/omo-codex/plugin/components/ultrawork/package.json +6 -6
  172. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  173. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +9 -10
  174. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +17 -13
  175. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +5 -6
  176. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +4 -4
  177. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  178. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  179. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  180. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  181. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  182. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  183. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  184. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +4 -4
  185. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  186. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +6 -6
  187. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  188. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +13 -13
  189. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
  190. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -0
  191. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +13 -12
  192. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  193. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  194. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +4 -4
  195. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  196. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  197. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +1 -1
  198. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  199. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +4 -8
  200. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +22 -6
  201. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  202. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +17 -1
  203. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  204. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  205. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +102 -107
  206. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +18 -0
  207. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +30 -0
  208. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
  209. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
  210. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
  211. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
  212. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
  213. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
  214. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +57 -46
  215. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
  216. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
  217. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  218. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  220. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
  221. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2205 -737
  222. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  223. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +28 -8
  224. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +8 -5
  225. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +35 -23
  226. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
  227. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
  228. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +25 -9
  229. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
  230. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
  231. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
  232. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
  233. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
  234. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +24 -12
  235. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.d.ts +4 -0
  236. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.js +39 -0
  237. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +2 -0
  238. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +19 -4
  239. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.d.ts +19 -0
  240. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.js +108 -0
  241. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +6 -2
  242. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +54 -25
  243. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
  244. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
  245. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +10 -7
  246. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +121 -100
  247. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.d.ts +16 -0
  248. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.js +115 -0
  249. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +18 -0
  250. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +41 -0
  251. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  252. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  253. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  254. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  255. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  256. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  257. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  258. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  259. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +72 -117
  260. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
  261. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +25 -13
  262. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
  263. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +157 -0
  264. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +381 -0
  265. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +127 -0
  266. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +130 -0
  267. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
  268. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
  269. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
  270. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.d.ts +5 -0
  271. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.js +67 -0
  272. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +7 -1
  273. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +190 -59
  274. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +2 -0
  275. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +22 -0
  276. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +19 -0
  277. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +259 -0
  278. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +7 -0
  279. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +41 -0
  280. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +4 -4
  281. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
  282. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
  283. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
  284. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
  285. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +11 -11
  286. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +28 -23
  287. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
  288. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
  289. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +21 -0
  290. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +100 -0
  291. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +18 -5
  292. package/packages/omo-codex/plugin/components/ulw-loop/package.json +7 -6
  293. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +7 -2
  294. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
  295. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +34 -11
  296. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +52 -0
  297. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
  298. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
  299. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  300. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +59 -77
  301. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
  302. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
  303. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  304. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +52 -46
  305. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
  306. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
  307. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +51 -33
  308. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  309. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
  310. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +27 -9
  311. package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
  312. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
  313. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +23 -16
  314. package/packages/omo-codex/plugin/components/ulw-loop/src/ledger.ts +38 -0
  315. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +32 -4
  316. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-commit.ts +132 -0
  317. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +67 -54
  318. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
  319. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +140 -119
  320. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-log.ts +112 -0
  321. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +61 -0
  322. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  323. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  324. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +71 -15
  325. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  326. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +92 -136
  327. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +38 -13
  328. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +218 -0
  329. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +156 -0
  330. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +143 -0
  331. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
  332. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-budget-io.ts +59 -0
  333. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +201 -52
  334. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +22 -0
  335. package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +257 -0
  336. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +45 -0
  337. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +4 -4
  338. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
  339. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
  340. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +12 -10
  341. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +27 -22
  342. package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
  343. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +133 -0
  344. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +131 -82
  345. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
  346. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
  347. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
  348. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
  349. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
  350. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
  351. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
  352. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
  353. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
  354. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
  355. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
  356. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
  357. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
  358. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +35 -0
  359. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +88 -11
  360. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/barrier.ts +13 -0
  361. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
  362. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-child.ts +65 -0
  363. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-cli-qa.mjs +76 -0
  364. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-crash.ts +23 -0
  365. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +58 -0
  366. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-writer.ts +65 -0
  367. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/lease-clock.ts +23 -0
  368. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
  369. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -0
  370. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +3 -2
  371. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  372. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-log.test.ts +252 -0
  373. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-recovery.test.ts +190 -0
  374. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
  375. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +74 -25
  376. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-legacy-projection.test.ts +228 -0
  377. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-newest.test.ts +72 -0
  378. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  379. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  380. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
  381. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
  382. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  383. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +51 -2
  384. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  385. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  386. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +58 -3
  387. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
  388. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-completed-plan.test.ts +43 -0
  389. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
  390. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +174 -0
  391. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
  392. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +169 -0
  393. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
  394. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +452 -7
  395. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +113 -0
  396. package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +310 -0
  397. package/packages/omo-codex/plugin/components/ulw-loop/test/status-next-actions-surface.test.ts +133 -0
  398. package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +12 -12
  399. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +12 -6
  400. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  401. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +113 -0
  402. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
  403. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  404. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  405. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  406. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  407. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  408. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  409. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  410. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  411. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
  412. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  413. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  414. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  415. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  416. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  417. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  418. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  419. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  420. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  421. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  422. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  423. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  424. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  425. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  426. package/packages/omo-codex/plugin/package-lock.json +992 -681
  427. package/packages/omo-codex/plugin/package.json +6 -3
  428. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  429. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  430. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  431. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  432. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  433. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
  434. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  435. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
  436. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
  437. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
  438. package/packages/omo-codex/plugin/scripts/sync-skills.d.mts +4 -0
  439. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +114 -67
  440. package/packages/omo-codex/plugin/shared/package.json +3 -4
  441. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  442. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  443. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  444. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  445. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +13 -1
  446. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +37 -0
  447. package/packages/omo-codex/plugin/skills/browser/SKILL.md +109 -0
  448. package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
  449. package/packages/omo-codex/plugin/skills/browser/references/commands.md +105 -0
  450. package/packages/omo-codex/plugin/skills/browser/references/install.md +97 -0
  451. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +62 -0
  452. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
  453. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +61 -0
  454. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +62 -0
  455. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +61 -0
  456. package/packages/omo-codex/plugin/skills/browser/references/remote.md +25 -0
  457. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
  458. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
  459. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  460. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +57 -0
  461. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +50 -0
  462. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -0
  463. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  464. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  465. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  466. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  467. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  468. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  469. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  470. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  471. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  472. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  473. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +5 -3
  474. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  475. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +26 -5
  476. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
  477. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
  478. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  479. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  480. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  481. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  482. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  483. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  484. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  485. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +104 -0
  486. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  487. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  488. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +10 -0
  489. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +8 -3
  490. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +13 -4
  491. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  492. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +146 -0
  493. package/packages/omo-codex/plugin/skills/frontend/references/design/aside.md +1 -1
  494. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  495. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +30 -6
  496. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +19 -5
  497. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  498. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  499. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  500. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  501. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  502. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  503. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  504. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -0
  505. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  506. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  507. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +20 -18
  508. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  509. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +7 -5
  510. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +5 -5
  511. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  512. package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
  513. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
  514. package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
  515. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
  516. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
  517. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
  518. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
  519. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
  520. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
  521. package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
  522. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
  523. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
  524. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
  525. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
  526. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
  527. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  528. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  529. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  530. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
  531. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +11 -9
  532. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +11 -9
  533. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +116 -424
  534. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
  535. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +40 -28
  536. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +2 -1
  537. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +2 -2
  538. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  539. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  540. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  541. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  542. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
  543. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +14 -7
  544. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
  545. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  546. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +102 -107
  547. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +38 -39
  548. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  549. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +31 -2
  550. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
  551. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +34 -11
  552. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +9 -10
  553. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +17 -13
  554. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +5 -6
  555. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +4 -4
  556. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  557. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  558. package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +63 -0
  559. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +52 -33
  560. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +187 -0
  561. package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +66 -0
  562. package/packages/omo-codex/plugin/skills/ulw-research/scripts/cli-support.mjs +102 -0
  563. package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +162 -0
  564. package/packages/omo-codex/plugin/skills/ulw-research/scripts/css-lite.mjs +204 -0
  565. package/packages/omo-codex/plugin/skills/ulw-research/scripts/design-spec.mjs +161 -0
  566. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entities.mjs +39 -0
  567. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entry-guard.mjs +21 -0
  568. package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
  569. package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract.mjs +229 -0
  570. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-figures.mjs +173 -0
  571. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-layout.mjs +146 -0
  572. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +167 -0
  573. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-structure.mjs +118 -0
  574. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-text.mjs +190 -0
  575. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +239 -0
  576. package/packages/omo-codex/plugin/skills/ulw-research/scripts/layout-probe.mjs +83 -0
  577. package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +250 -0
  578. package/packages/omo-codex/plugin/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
  579. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
  580. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +61 -0
  581. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  582. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +10 -7
  583. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +77 -0
  584. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  585. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +12 -12
  586. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +13 -28
  587. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  588. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  589. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
  590. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -29
  591. package/packages/omo-codex/plugin/test/bootstrap-default-role.test.mjs +66 -0
  592. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  593. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  594. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  595. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  596. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +100 -2
  597. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
  598. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  599. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
  600. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
  601. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
  602. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +81 -3
  603. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +57 -26
  604. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +37 -0
  605. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
  606. package/packages/omo-codex/scripts/install-dist/install-local.mjs +16238 -4291
  607. package/packages/{omo-codex/plugin/components/ultrawork/directive.md → prompts-core/prompts/ultrawork/codex.md} +102 -107
  608. package/packages/shared-skills/package.json +7 -1
  609. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  610. package/packages/shared-skills/skill-source-filter.mjs +44 -0
  611. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  612. package/packages/shared-skills/skills/ast-grep/SKILL.md +13 -1
  613. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +37 -0
  614. package/packages/shared-skills/skills/browser/SKILL.md +109 -0
  615. package/packages/shared-skills/skills/browser/references/commands.md +105 -0
  616. package/packages/shared-skills/skills/browser/references/install.md +97 -0
  617. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +62 -0
  618. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
  619. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +61 -0
  620. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +62 -0
  621. package/packages/shared-skills/skills/browser/references/recipes/1password.md +61 -0
  622. package/packages/shared-skills/skills/browser/references/remote.md +25 -0
  623. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
  624. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
  625. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  626. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +57 -0
  627. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +50 -0
  628. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
  629. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  630. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  631. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  632. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  633. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  634. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  635. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  636. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  637. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  638. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  639. package/packages/shared-skills/skills/debugging/SKILL.md +5 -3
  640. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  641. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +26 -5
  642. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
  643. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
  644. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  645. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  646. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  647. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  648. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  649. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  650. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  651. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  652. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +104 -0
  653. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  654. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  655. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +10 -0
  656. package/packages/shared-skills/skills/frontend/SKILL.md +8 -3
  657. package/packages/shared-skills/skills/frontend/references/design/README.md +13 -4
  658. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  659. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +146 -0
  660. package/packages/shared-skills/skills/frontend/references/design/aside.md +1 -1
  661. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  662. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +30 -6
  663. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +19 -5
  664. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  665. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  666. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  667. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  668. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  669. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  670. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  671. package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -0
  672. package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  673. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  674. package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
  675. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  676. package/packages/shared-skills/skills/programming/SKILL.md +12 -18
  677. package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
  678. package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
  679. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
  680. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
  681. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
  682. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
  683. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
  684. package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
  685. package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
  686. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
  687. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
  688. package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
  689. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
  690. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
  691. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  692. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  693. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  694. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  695. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
  696. package/packages/shared-skills/skills/refactor/SKILL.md +5 -5
  697. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +5 -5
  698. package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
  699. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
  700. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +40 -28
  701. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +2 -1
  702. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +2 -2
  703. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  704. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  705. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  706. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  707. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
  708. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +14 -7
  709. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
  710. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  711. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +27 -25
  712. package/packages/shared-skills/skills/ulw-plan/SKILL.md +10 -11
  713. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +18 -13
  714. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +5 -6
  715. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +4 -4
  716. package/packages/shared-skills/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  717. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  718. package/packages/shared-skills/skills/ulw-research/AGENTS.md +63 -0
  719. package/packages/shared-skills/skills/ulw-research/SKILL.md +47 -30
  720. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +187 -0
  721. package/packages/shared-skills/skills/ulw-research/references/report-gates.md +66 -0
  722. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.mjs +102 -0
  723. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.test.ts +88 -0
  724. package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +162 -0
  725. package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +177 -0
  726. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.mjs +204 -0
  727. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.test.ts +159 -0
  728. package/packages/shared-skills/skills/ulw-research/scripts/design-spec.mjs +161 -0
  729. package/packages/shared-skills/skills/ulw-research/scripts/design-spec.test.ts +162 -0
  730. package/packages/shared-skills/skills/ulw-research/scripts/entities.mjs +39 -0
  731. package/packages/shared-skills/skills/ulw-research/scripts/entry-guard.mjs +21 -0
  732. package/packages/shared-skills/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
  733. package/packages/shared-skills/skills/ulw-research/scripts/format-extract.mjs +229 -0
  734. package/packages/shared-skills/skills/ulw-research/scripts/format-extract.test.ts +243 -0
  735. package/packages/shared-skills/skills/ulw-research/scripts/gates-figures.mjs +173 -0
  736. package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.mjs +146 -0
  737. package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.test.ts +236 -0
  738. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +167 -0
  739. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.test.ts +265 -0
  740. package/packages/shared-skills/skills/ulw-research/scripts/gates-structure.mjs +118 -0
  741. package/packages/shared-skills/skills/ulw-research/scripts/gates-text.mjs +190 -0
  742. package/packages/shared-skills/skills/ulw-research/scripts/glossary-vocabulary.test.ts +43 -0
  743. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +239 -0
  744. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.test.ts +191 -0
  745. package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.mjs +83 -0
  746. package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.test.ts +89 -0
  747. package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +250 -0
  748. package/packages/shared-skills/skills/ulw-research/scripts/outcome.test.ts +281 -0
  749. package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
  750. package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.test.ts +246 -0
  751. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
  752. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +61 -0
  753. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +213 -0
  754. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/assets/figure-1.svg +1 -0
  755. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/bad-report.html +44 -0
  756. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/boxes.json +90 -0
  757. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/design-spec.md +29 -0
  758. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/good-report.html +57 -0
  759. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference-report.html +86 -0
  760. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference.md +23 -0
  761. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  762. package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
  763. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +77 -0
  764. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  765. package/script/qa/xterm-live-terminal.mjs +18 -2
  766. package/dist/cli/install-senpi/index.d.ts +0 -1
  767. package/dist/cli/senpi-platform-flag.d.ts +0 -4
  768. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  769. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  770. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  771. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  772. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  773. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  774. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  775. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  776. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12244
  777. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9842
  778. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  779. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  780. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  781. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  782. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  783. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  784. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  785. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  786. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  787. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  788. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  789. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  790. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  791. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  792. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  793. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  794. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  795. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  796. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  797. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  798. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  799. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  800. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  801. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  802. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  803. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  804. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  805. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  806. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  807. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  808. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  809. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  810. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  811. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  812. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  813. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  814. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  815. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  816. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  817. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  818. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  819. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  820. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  821. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  822. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  823. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  824. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  825. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  826. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  827. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  828. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  829. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  830. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -484
  831. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  832. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  833. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  834. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  835. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  836. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  837. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  838. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  839. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  840. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  841. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  842. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  843. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -194
  844. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  845. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  846. package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +0 -45
  847. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  848. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  849. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  850. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  851. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  852. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  853. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -194
  854. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  855. package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +0 -45
  856. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  857. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  858. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  859. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  860. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  861. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  862. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  863. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  864. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  865. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  866. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  867. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  868. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  869. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -1,8 +1,62 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { join } from "node:path";
3
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
4
 
4
5
  export function componentHookContractCases(tempRoot) {
6
+ mkdirSync(join(tempRoot, ".omo", "evidence"), { recursive: true });
7
+ writeFileSync(join(tempRoot, ".omo", "evidence", "receipt.txt"), "command output PASS\n".repeat(10));
8
+ const spawnPayload = {
9
+ cwd: tempRoot, hook_event_name: "PreToolUse", model: "gpt-6-astra",
10
+ permission_mode: "default", session_id: "s-spawn-admission", tool_input: { message: "scan", agent_type: "explorer", fork_context: false },
11
+ tool_name: "spawn_agent", tool_use_id: "spawn-1", transcript_path: null, turn_id: "t-spawn",
12
+ };
13
+ const marker = join(tempRoot, "plugin-data", "spawn-breaker", "s-spawn-admission.json");
5
14
  return [
15
+ {
16
+ name: "ulw-loop post-tool-use successful admission is silent",
17
+ component: "ulw-loop", event: "post-tool-use-spawn",
18
+ payload: { ...spawnPayload, hook_event_name: "PostToolUse", tool_response: { agent_id: "worker-1" } },
19
+ assertOutput(stdout) { assert.equal(stdout, ""); assert.equal(existsSync(marker), false); },
20
+ },
21
+ {
22
+ name: "ulw-loop post-tool-use failed admission records silently",
23
+ component: "ulw-loop", event: "post-tool-use-spawn",
24
+ payload: { ...spawnPayload, hook_event_name: "PostToolUse", tool_response: "AgentLimitReached" },
25
+ assertOutput(stdout) {
26
+ assert.equal(stdout, "");
27
+ const recorded = JSON.parse(readFileSync(marker, "utf8"));
28
+ assert.deepEqual(Object.keys(recorded).sort(), ["at", "reason"]);
29
+ assert.equal(recorded.reason, "AgentLimitReached");
30
+ assert.equal(Number.isFinite(Date.parse(recorded.at)), true);
31
+ },
32
+ },
33
+ {
34
+ name: "ulw-loop admission breaker denies without a plan",
35
+ component: "ulw-loop", event: "pre-tool-use-spawn", payload: spawnPayload,
36
+ assertOutput(stdout) {
37
+ const output = JSON.parse(stdout).hookSpecificOutput;
38
+ assert.equal(output.hookEventName, "PreToolUse");
39
+ assert.equal(output.permissionDecision, "deny");
40
+ },
41
+ },
42
+ {
43
+ name: "ulw-loop clean session admission is silent",
44
+ component: "ulw-loop", event: "pre-tool-use-spawn",
45
+ payload: { ...spawnPayload, session_id: "s-spawn-clean" },
46
+ assertOutput(stdout) { assert.equal(stdout, ""); },
47
+ },
48
+ ...[
49
+ { message: "scan", fork_context: false },
50
+ { message: "scan", agent_type: "worker", fork_context: false },
51
+ { message: "scan", fork_turns: "all", task_name: "scan" },
52
+ ].map((tool_input, index) => ({
53
+ name: `ulw-loop rejects generic or unnamed role ${index}`,
54
+ component: "ulw-loop", event: "pre-tool-use-spawn",
55
+ payload: { ...spawnPayload, session_id: "s-spawn-clean", tool_input },
56
+ assertOutput(stdout) {
57
+ assert.equal(JSON.parse(stdout).hookSpecificOutput.permissionDecision, "deny");
58
+ },
59
+ })),
6
60
  {
7
61
  name: "rules session-start",
8
62
  component: "rules",
@@ -202,8 +256,30 @@ export function componentHookContractCases(tempRoot) {
202
256
  },
203
257
  },
204
258
  {
205
- name: "start-work-continuation stop no state",
206
- component: "start-work-continuation",
259
+ name: "lazycodex worker verifier passes receipt with nonexistent transcript",
260
+ component: "lazycodex-executor-verify",
261
+ event: "subagent-stop",
262
+ payload: {
263
+ hook_event_name: "SubagentStop",
264
+ agent_type: "lazycodex-worker-medium",
265
+ agent_id: "agent-task12",
266
+ session_id: "s-task12",
267
+ turn_id: "t-task12",
268
+ transcript_path: join(tempRoot, "transcript.jsonl"),
269
+ agent_transcript_path: join(tempRoot, "agent-transcript.jsonl"),
270
+ cwd: tempRoot,
271
+ model: "gpt-6-astra",
272
+ permission_mode: "default",
273
+ stop_hook_active: true,
274
+ last_assistant_message: "done\nEVIDENCE_RECORDED: .omo/evidence/receipt.txt",
275
+ },
276
+ assertOutput(stdout) {
277
+ assert.equal(stdout, "");
278
+ },
279
+ },
280
+ {
281
+ name: "ulw-execute-continuation stop no state",
282
+ component: "ulw-execute-continuation",
207
283
  event: "stop",
208
284
  payload: {
209
285
  hook_event_name: "Stop",
@@ -219,5 +295,27 @@ export function componentHookContractCases(tempRoot) {
219
295
  assert.equal(stdout, "");
220
296
  },
221
297
  },
298
+ {
299
+ name: "ulw-execute-continuation subagent-stop compatibility no-op",
300
+ component: "ulw-execute-continuation",
301
+ event: "subagent-stop",
302
+ payload: {
303
+ hook_event_name: "SubagentStop",
304
+ agent_id: "agent-task12",
305
+ agent_type: "lazycodex-worker-low",
306
+ session_id: "s-task12",
307
+ turn_id: "t-task12",
308
+ transcript_path: join(tempRoot, "transcript.jsonl"),
309
+ agent_transcript_path: join(tempRoot, "agent-transcript.jsonl"),
310
+ cwd: tempRoot,
311
+ model: "gpt-5.5",
312
+ permission_mode: "default",
313
+ stop_hook_active: false,
314
+ last_assistant_message: "done",
315
+ },
316
+ assertOutput(stdout) {
317
+ assert.equal(stdout, "");
318
+ },
319
+ },
222
320
  ];
223
321
  }
@@ -14,6 +14,7 @@ const root = dirname(dirname(fileURLToPath(import.meta.url)));
14
14
  const repoRoot = join(root, "..", "..", "..");
15
15
 
16
16
  const AGGREGATE_EXPECTED_LABELS = new Map([
17
+ ["hooks/post-tool-use-recording-spawn-admission.json:PostToolUse:0:0", "Recording Spawn Admission"],
17
18
  ["hooks/hooks.json:SessionStart:0:0", "Loading Project Rules"],
18
19
  ["hooks/hooks.json:SessionStart:1:0", "Recording Session Telemetry"],
19
20
  ["hooks/hooks.json:SessionStart:2:0", "Checking Auto Update"],
@@ -25,17 +26,16 @@ const AGGREGATE_EXPECTED_LABELS = new Map([
25
26
  ["hooks/hooks.json:PreToolUse:1:0", "Enforcing Unlimited Goal Budget"],
26
27
  ["hooks/hooks.json:PostToolUse:0:0", "Checking Comments"],
27
28
  ["hooks/hooks.json:PostToolUse:0:1", "Checking LSP Diagnostics"],
28
- ["hooks/hooks.json:PostToolUse:0:2", "Checking CodeGraph Init Guidance"],
29
29
  ["hooks/hooks.json:PostToolUse:1:0", "Matching Project Rules"],
30
30
  ["hooks/hooks.json:PostCompact:0:0", "Resetting Git Bash MCP Reminder"],
31
31
  ["hooks/hooks.json:PostCompact:1:0", "Resetting Project Rule Cache"],
32
32
  ["hooks/hooks.json:PostCompact:2:0", "Resetting LSP Diagnostics Cache"],
33
- ["hooks/hooks.json:Stop:0:0", "Checking Start-Work Continuation"],
34
- ["hooks/hooks.json:SubagentStop:0:0", "Checking Start-Work Continuation"],
35
- ["hooks/hooks.json:SubagentStop:1:0", "Verifying LazyCodex Executor Evidence"],
33
+ ["hooks/hooks.json:Stop:0:0", "Checking Ulw-Execute Continuation"],
34
+ ["hooks/hooks.json:SubagentStop:0:0", "Verifying LazyCodex Executor Evidence"],
36
35
  ]);
37
36
 
38
37
  const COMPONENT_EXPECTED_LABELS = new Map([
38
+ ["components/ulw-loop/hooks/hooks.json:PostToolUse:0:0", "Recording Spawn Admission"],
39
39
  ["components/comment-checker/hooks/hooks.json:PostToolUse:0:0", "Checking Comments"],
40
40
  ["components/lsp/hooks/hooks.json:PostToolUse:0:0", "Checking LSP Diagnostics"],
41
41
  ["components/lsp/hooks/hooks.json:PostCompact:0:0", "Resetting LSP Diagnostics Cache"],
@@ -47,8 +47,7 @@ const COMPONENT_EXPECTED_LABELS = new Map([
47
47
  ["components/ultrawork/hooks/hooks.json:UserPromptSubmit:0:0", "Checking Ultrawork Trigger"],
48
48
  ["components/ulw-loop/hooks/hooks.json:UserPromptSubmit:0:0", "Checking Ulw-Loop Steering"],
49
49
  ["components/ulw-loop/hooks/hooks.json:PreToolUse:0:0", "Enforcing Unlimited Ulw-Loop Budget"],
50
- ["components/start-work-continuation/hooks/hooks.json:Stop:0:0", "Checking Start-Work Continuation"],
51
- ["components/start-work-continuation/hooks/hooks.json:SubagentStop:0:0", "Checking Start-Work Continuation"],
50
+ ["components/ulw-execute-continuation/hooks/hooks.json:Stop:0:0", "Checking Ulw-Execute Continuation"],
52
51
  [
53
52
  "components/lazycodex-executor-verify/hooks/hooks.json:SubagentStop:0:0",
54
53
  "Verifying LazyCodex Executor Evidence",
@@ -14,11 +14,9 @@ test("#given aggregate MCP config #when inspected #then registers research MCPs
14
14
  const serverNames = Object.keys(mcp.mcpServers).sort();
15
15
 
16
16
  // then
17
- assert.deepEqual(serverNames, ["codegraph", "context7", "git_bash", "grep_app", "lsp"]);
17
+ assert.deepEqual(serverNames, ["context7", "git_bash", "grep_app", "lsp"]);
18
18
  assert.equal(mcp.mcpServers.grep_app.url, "https://mcp.grep.app");
19
19
  assert.equal(mcp.mcpServers.context7.url, "https://mcp.context7.com/mcp");
20
20
  assert.equal(Object.hasOwn(mcp.mcpServers, "ast_grep"), false);
21
- assert.deepEqual(mcp.mcpServers.codegraph.args, ["components/codegraph/dist/serve.js"]);
22
- assert.equal(mcp.mcpServers.codegraph.required, false);
23
21
  assert.equal(mcp.mcpServers.lsp.startup_timeout_sec, 10);
24
22
  });
@@ -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 () => {
@@ -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
  });