oh-my-opencode 4.19.4 → 5.0.0-beta.2

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 (268) hide show
  1. package/README.ja.md +1 -1
  2. package/README.ko.md +1 -1
  3. package/README.md +6 -5
  4. package/README.ru.md +1 -1
  5. package/README.zh-cn.md +1 -1
  6. package/bin/oh-my-opencode.js +14 -1
  7. package/bin/oh-my-opencode.test.ts +21 -0
  8. package/dist/cli/index.js +1452 -703
  9. package/dist/cli-node/index.js +1452 -703
  10. package/dist/config/schema/agent-overrides.d.ts +528 -0
  11. package/dist/config/schema/oh-my-opencode-config.d.ts +495 -0
  12. package/dist/features/monitor/batcher.d.ts +3 -1
  13. package/dist/features/monitor/manager-internals.d.ts +1 -0
  14. package/dist/features/monitor/output-injector-types.d.ts +2 -0
  15. package/dist/features/monitor/output-injector.d.ts +6 -0
  16. package/dist/hooks/todo-continuation-enforcer/types.d.ts +1 -0
  17. package/dist/hooks/todo-continuation-enforcer/unrecoverable-request-error.d.ts +9 -0
  18. package/dist/hooks/tool-pair-validator/hook.test-support.d.ts +29 -0
  19. package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +14 -5
  20. package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -3
  21. package/dist/hooks/tool-pair-validator/types.d.ts +5 -22
  22. package/dist/index.js +2776 -2240
  23. package/dist/mcp/lsp.d.ts +1 -0
  24. package/dist/oh-my-opencode.schema.json +1466 -131
  25. package/dist/shared/tmux/constants.d.ts +1 -1
  26. package/dist/skills/ast-grep/SOURCE +1 -1
  27. package/dist/skills/ast-grep/install.ps1 +2 -2
  28. package/dist/skills/ast-grep/install.sh +1 -1
  29. package/dist/skills/ast-grep/references/install.md +2 -2
  30. package/dist/skills/ast-grep/tests/smoke.sh +1 -1
  31. package/dist/skills/start-work/SKILL.md +54 -9
  32. package/dist/skills/ultimate-browsing/SKILL.md +2 -2
  33. package/dist/skills/ultimate-browsing/engine/__main__.py +8 -1
  34. package/dist/skills/ultimate-browsing/engine/bias_check.py +11 -0
  35. package/dist/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  36. package/dist/skills/ultimate-browsing/engine/result_schema.py +10 -1
  37. package/dist/skills/ultimate-browsing/engine/surrogate.py +214 -0
  38. package/dist/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  39. package/dist/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  40. package/dist/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  41. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  42. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  43. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  44. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  45. package/dist/skills/ultimate-browsing/engine/validators.py +46 -0
  46. package/dist/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  47. package/dist/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  48. package/dist/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  49. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  50. package/dist/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  51. package/dist/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  52. package/dist/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  53. package/dist/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  54. package/dist/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  55. package/dist/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  56. package/dist/skills/ulw-plan/SKILL.md +1 -1
  57. package/dist/skills/ulw-plan/references/full-workflow.md +3 -3
  58. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  59. package/dist/skills/ulw-research/SKILL.md +15 -10
  60. package/dist/tui.js +307 -28
  61. package/docs/reference/web-terminal-visual-qa.md +1 -1
  62. package/package.json +27 -19
  63. package/packages/lsp-core/src/lsp/connection.ts +1 -1
  64. package/packages/lsp-daemon/dist/cli.js +27 -13
  65. package/packages/lsp-daemon/dist/client.js +49 -35
  66. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +1 -0
  67. package/packages/lsp-daemon/dist/ensure-daemon.js +18 -5
  68. package/packages/lsp-daemon/dist/index.js +34 -20
  69. package/packages/lsp-tools-mcp/dist/cli.js +1 -1
  70. package/packages/lsp-tools-mcp/dist/lsp/manager.js +1 -1
  71. package/packages/lsp-tools-mcp/dist/mcp.js +1 -1
  72. package/packages/lsp-tools-mcp/dist/tools.js +1 -1
  73. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  74. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +268 -92
  75. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  76. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  77. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -7
  78. package/packages/omo-codex/plugin/components/bootstrap/src/worker.ts +3 -0
  79. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +106 -6
  80. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +106 -6
  81. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  82. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  83. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  84. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  85. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  86. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  87. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  88. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  89. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +56 -42
  90. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  91. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  92. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  93. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  94. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +1 -0
  95. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +5 -1
  96. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +2 -1
  97. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +18 -0
  98. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  99. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  100. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +21 -0
  101. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +105 -0
  102. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  103. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  104. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  105. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  106. package/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md +2 -0
  107. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  108. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  109. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  110. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  111. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  112. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  113. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  114. package/packages/omo-codex/plugin/components/ultrawork/directive.md +3 -2
  115. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  116. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  117. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +3 -2
  118. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +1 -1
  119. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +3 -3
  120. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  121. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  122. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
  123. package/packages/omo-codex/plugin/components/ulw-loop/README.md +11 -11
  124. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +3 -2
  125. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +1 -1
  126. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  127. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +9 -9
  128. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +1 -1
  129. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +66 -66
  130. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +4 -4
  131. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +1 -1
  132. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -1
  133. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +1 -1
  134. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +1 -1
  135. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +2 -2
  136. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  137. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  138. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +3 -3
  139. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -25
  140. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +1 -1
  141. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +9 -9
  142. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +1 -1
  143. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +1 -1
  144. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +4 -4
  145. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +1 -1
  146. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -1
  147. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +1 -1
  148. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +1 -1
  149. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +2 -2
  150. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -2
  151. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +1 -1
  152. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-helpers.test.ts +2 -2
  153. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +1 -1
  154. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +2 -2
  155. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +1 -1
  156. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -5
  157. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +1 -1
  158. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +1 -1
  159. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +1 -1
  160. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  161. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  162. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  163. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  164. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  165. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  166. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  167. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  168. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  169. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  170. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  171. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  172. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  173. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  174. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  175. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  176. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  177. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  178. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  179. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  180. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  181. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  182. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  183. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  184. package/packages/omo-codex/plugin/package-lock.json +13 -13
  185. package/packages/omo-codex/plugin/package.json +1 -1
  186. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +4 -4
  187. package/packages/omo-codex/plugin/skills/ast-grep/SOURCE +1 -1
  188. package/packages/omo-codex/plugin/skills/ast-grep/install.ps1 +2 -2
  189. package/packages/omo-codex/plugin/skills/ast-grep/install.sh +1 -1
  190. package/packages/omo-codex/plugin/skills/ast-grep/references/install.md +2 -2
  191. package/packages/omo-codex/plugin/skills/ast-grep/tests/smoke.sh +1 -1
  192. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +54 -9
  193. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -2
  194. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +8 -1
  195. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +11 -0
  196. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  197. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +10 -1
  198. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogate.py +214 -0
  199. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  200. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  201. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  202. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  203. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  204. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  205. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  206. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +46 -0
  207. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  208. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  209. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  210. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  211. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  212. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  213. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  214. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  215. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  216. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  217. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +3 -2
  218. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -3
  219. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -25
  220. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +1 -1
  221. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +3 -3
  222. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  223. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +15 -10
  224. package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +12 -12
  225. package/packages/omo-codex/plugin/test/bootstrap-orchestration.test.mjs +36 -4
  226. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +1 -1
  227. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +4 -4
  228. package/packages/omo-codex/scripts/install-bin-links.test.mjs +56 -2
  229. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +6 -6
  230. package/packages/omo-codex/scripts/install-dist/install-local.mjs +115 -61
  231. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +4 -4
  232. package/packages/omo-codex/scripts/install-local.test.mjs +5 -2
  233. package/packages/shared-skills/index.mjs +19 -1
  234. package/packages/shared-skills/skills/ast-grep/SOURCE +1 -1
  235. package/packages/shared-skills/skills/ast-grep/install.ps1 +2 -2
  236. package/packages/shared-skills/skills/ast-grep/install.sh +1 -1
  237. package/packages/shared-skills/skills/ast-grep/references/install.md +2 -2
  238. package/packages/shared-skills/skills/ast-grep/tests/smoke.sh +1 -1
  239. package/packages/shared-skills/skills/start-work/SKILL.md +54 -9
  240. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -2
  241. package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +8 -1
  242. package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +11 -0
  243. package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  244. package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +10 -1
  245. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogate.py +214 -0
  246. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  247. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  248. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  249. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  250. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  251. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  252. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  253. package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +46 -0
  254. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  255. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  256. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  257. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  258. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  259. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  260. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  261. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  262. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  263. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  264. package/packages/shared-skills/skills/ulw-plan/SKILL.md +1 -1
  265. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +3 -3
  266. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  267. package/packages/shared-skills/skills/ulw-research/SKILL.md +15 -10
  268. package/postinstall.mjs +6 -0
@@ -12,9 +12,9 @@ const { runBootstrapWorker, runWorkerSetup } = await import(CLI_URL.href);
12
12
  const MARKETPLACE_SOURCE_LINE = 'source = "https://github.com/code-yeongyu/lazycodex.git"';
13
13
  const COMPONENT_BIN_NAME = "omo-toolbox";
14
14
  const execFileAsync = promisify(execFile);
15
- const OMO_CLI_DEGRADED_ENTRY = {
16
- component: "omo-cli",
17
- hint: "use npx lazycodex-ai for the omo CLI",
15
+ const OMO_AGENT_TOOLKIT_DEGRADED_ENTRY = {
16
+ component: "omo-agent-toolkit",
17
+ hint: "use npx lazycodex-ai for the omo-agent-toolkit CLI",
18
18
  reason: "marketplace payload has no dist/cli",
19
19
  };
20
20
 
@@ -205,7 +205,7 @@ test("#given a completed v1 marker #when the worker runs against a v2 root #then
205
205
  });
206
206
  });
207
207
 
208
- test("#given platform win32 #when the worker setup links bins #then component bins become .cmd shims and the omo wrapper is omo.cmd", async () => {
208
+ test("#given platform win32 #when the worker setup links bins #then component bins become .cmd shims and the canonical wrapper is omo-agent-toolkit.cmd", async () => {
209
209
  await withBinLinkFixture(async (fixture) => {
210
210
  const bashPath = "C:\\Tools\\Git\\bin\\bash.exe";
211
211
  const pluginRoot = await writeVersionedRoot(fixture.root, "1.0.0", { withRuntimeCli: true });
@@ -226,19 +226,19 @@ test("#given platform win32 #when the worker setup links bins #then component bi
226
226
  assert.match(shim, /"%OMO_NODE_BINARY%"/);
227
227
  assert.match(shim, new RegExp(`"${escapeRegExp(componentEntrypoint)}" %\\*`));
228
228
  assert.doesNotMatch(shim, new RegExp(`node "${escapeRegExp(componentEntrypoint)}" %\\*`));
229
- const wrapper = await readFile(join(fixture.binDir, "omo.cmd"), "utf8");
229
+ const wrapper = await readFile(join(fixture.binDir, "omo-agent-toolkit.cmd"), "utf8");
230
230
  assert.ok(wrapper.includes(join(pluginRoot, "dist", "cli", "index.js")));
231
231
  await assert.rejects(() => lstat(join(fixture.binDir, COMPONENT_BIN_NAME)), "win32 must not leave posix symlinks behind");
232
232
  });
233
233
  });
234
234
 
235
- test("#given a legacy payload without root CLI dist #when the worker setup runs #then it records degraded omo-cli and leaves no broken link", async () => {
235
+ test("#given a legacy payload without root CLI dist #when the worker setup runs #then it records degraded omo-agent-toolkit and leaves no broken link", async () => {
236
236
  await withBinLinkFixture(async (fixture) => {
237
237
  const pluginRoot = await writeVersionedRoot(fixture.root, "1.0.0");
238
238
 
239
239
  const outcome = await runWorkerSetup(setupOptions(fixture, pluginRoot, { now: 7_000, platform: process.platform }));
240
240
 
241
- assert.deepEqual(outcome.degraded, [OMO_CLI_DEGRADED_ENTRY]);
241
+ assert.deepEqual(outcome.degraded, [OMO_AGENT_TOOLKIT_DEGRADED_ENTRY]);
242
242
  await assert.rejects(() => lstat(join(fixture.binDir, "omo")), "no omo wrapper may be written without dist/cli");
243
243
  await assert.rejects(() => lstat(join(fixture.binDir, "omo.cmd")), "no Windows omo wrapper may be written without dist/cli");
244
244
  await assertNoDanglingEntries(fixture.binDir);
@@ -246,15 +246,15 @@ test("#given a legacy payload without root CLI dist #when the worker setup runs
246
246
  const warning = JSON.parse(log)["warning"];
247
247
  assert.equal(typeof warning, "string", `bootstrap.log warning must be a string, got: ${log}`);
248
248
  assert.ok(
249
- warning.includes("skipped the omo runtime wrapper because ") &&
249
+ warning.includes("skipped the omo-agent-toolkit runtime wrapper because ") &&
250
250
  warning.includes(`${join("dist", "cli", "index.js")} is missing; `) &&
251
- warning.includes("omo ulw-loop commands will be unavailable until a package shipping dist/cli is installed"),
251
+ warning.includes("omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed"),
252
252
  `bootstrap.log must carry the install-local warning text, got: ${log}`,
253
253
  );
254
254
  });
255
255
  });
256
256
 
257
- test("#given a payload shipping dist/cli #when the worker setup runs with no bin-dir override #then the omo wrapper lands in <codexHome>/bin without a degraded entry", async () => {
257
+ test("#given a payload shipping dist/cli #when the worker setup runs with no bin-dir override #then the omo-agent-toolkit wrapper lands in <codexHome>/bin without a degraded entry", async () => {
258
258
  await withBinLinkFixture(async (fixture) => {
259
259
  const pluginRoot = await writeVersionedRoot(fixture.root, "1.0.0", { withRuntimeCli: true });
260
260
 
@@ -262,12 +262,12 @@ test("#given a payload shipping dist/cli #when the worker setup runs with no bin
262
262
 
263
263
  assert.deepEqual(outcome.degraded, []);
264
264
  const defaultBinDir = join(fixture.codexHome, "bin");
265
- const wrapperName = process.platform === "win32" ? "omo.cmd" : "omo";
265
+ const wrapperName = process.platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit";
266
266
  const wrapperPath = join(defaultBinDir, wrapperName);
267
267
  const wrapper = await readFile(wrapperPath, "utf8");
268
268
  assert.ok(wrapper.includes(join(pluginRoot, "dist", "cli", "index.js")));
269
269
  if (process.platform !== "win32") {
270
- assert.ok((await stat(wrapperPath)).mode & 0o111, "the posix omo wrapper must be executable");
270
+ assert.ok((await stat(wrapperPath)).mode & 0o111, "the posix omo-agent-toolkit wrapper must be executable");
271
271
  assert.equal(
272
272
  await readlink(join(defaultBinDir, COMPONENT_BIN_NAME)),
273
273
  join(pluginRoot, "components", "toolbox", "dist", "cli.js"),
@@ -321,7 +321,7 @@ test("#given a completed marker #when the worker runs with --once #then the mark
321
321
  });
322
322
  });
323
323
 
324
- test("#given --only sg #when the worker runs #then only the matching step executes", async () => {
324
+ test("#given --only names an injected custom step #when the worker runs #then only the matching step executes", async () => {
325
325
  await withFixture(async (fixture) => {
326
326
  const ran = [];
327
327
  const step = (name) => ({
@@ -333,13 +333,45 @@ test("#given --only sg #when the worker runs #then only the matching step execut
333
333
  });
334
334
 
335
335
  const result = await runBootstrapWorker({
336
- argv: ["--only", "sg"],
336
+ argv: ["--only", "custom"],
337
337
  env: fixture.env,
338
- steps: [step("setup"), step("sg")],
338
+ steps: [step("other"), step("custom")],
339
339
  });
340
340
 
341
341
  assert.equal(result.ran, true);
342
- assert.deepEqual(ran, ["sg"]);
342
+ assert.deepEqual(ran, ["custom"]);
343
+ });
344
+ });
345
+
346
+ test("#given an unknown --only value #when the worker starts #then it rejects before steps or bootstrap artifacts", async () => {
347
+ await withFixture(async (fixture) => {
348
+ let stepRuns = 0;
349
+
350
+ await assert.rejects(
351
+ () =>
352
+ runBootstrapWorker({
353
+ argv: ["--only", "bogus"],
354
+ env: fixture.env,
355
+ steps: [
356
+ {
357
+ name: "custom",
358
+ run: async () => {
359
+ stepRuns += 1;
360
+ return { degraded: [] };
361
+ },
362
+ },
363
+ ],
364
+ }),
365
+ /unknown --only flag value: bogus/,
366
+ );
367
+ assert.equal(stepRuns, 0);
368
+ await assert.rejects(() => stat(join(fixture.pluginData, "bootstrap")));
369
+ await Promise.all([
370
+ assert.rejects(() => stat(join(fixture.pluginData, "bootstrap", "state.json"))),
371
+ assert.rejects(() => stat(join(fixture.pluginData, "bootstrap", "bootstrap.log"))),
372
+ assert.rejects(() => stat(join(fixture.pluginData, "bootstrap", "state.json.lock"))),
373
+ assert.rejects(() => stat(join(fixture.pluginData, "auto-update.json.lock"))),
374
+ ]);
343
375
  });
344
376
  });
345
377
 
@@ -261,7 +261,7 @@ test("#given start-work skill #when synced for Codex #then the difficulty-tier d
261
261
  const content = await readSkill("start-work");
262
262
 
263
263
  assert.match(content, /lazycodex-worker-medium/);
264
- assert.match(content, /Delegation by difficulty/);
264
+ assert.match(content, /Codex tier mapping for the delegation router/);
265
265
  assert.match(content, /Global Review and Debugging Gate/);
266
266
  assert.match(content, /full commit SHA/);
267
267
  assert.match(content, /re-read the ledger record/);
@@ -90,9 +90,9 @@ const startWorkCodexCompletion = `When all top-level checkboxes in \`## TODOs\`
90
90
  4. Remove or mark the Boulder work as completed.
91
91
  5. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, Global Review and Debugging Gate verdict, artifacts, and cleanup receipts.`;
92
92
 
93
- const startWorkOriginalHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No PR/branch implementation, review, or merge in the main worktree; use the task-owned git worktree.\n- No unprefixed session ids in Boulder state. Codex sessions are always `codex:<session_id>`.";
93
+ const startWorkOriginalHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No PR/branch implementation, review, or merge in the main worktree; use the task-owned git worktree.\n- No unprefixed session ids in Boulder state. Sessions are always recorded as `codex:<session_id>`.";
94
94
 
95
- const startWorkCodexHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No `ORCHESTRATION COMPLETE`, final response, PR creation, PR handoff, or merge before the Global Review and Debugging Gate passes with recorded evidence.\n- No PR/branch implementation or review in the main worktree; create or use a task-owned git worktree first.\n- No unprefixed session ids in Boulder state. Codex sessions are always `codex:<session_id>`.";
95
+ const startWorkCodexHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No `ORCHESTRATION COMPLETE`, final response, PR creation, PR handoff, or merge before the Global Review and Debugging Gate passes with recorded evidence.\n- No PR/branch implementation or review in the main worktree; create or use a task-owned git worktree first.\n- No unprefixed session ids in Boulder state. Sessions are always recorded as `codex:<session_id>`.";
96
96
 
97
97
  const reviewWorkCodexGate = `
98
98
  When \`review-work\` is used as a final implementation, PR, or \`$start-work\`
@@ -127,8 +127,8 @@ prefixes when identity is needed.
127
127
  `;
128
128
  const reviewWorkCodexGatePattern = new RegExp(reviewWorkCodexGate.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
129
129
 
130
- const ulwResearchOriginalDeliveryGates = "### The delivery gates \u2014 every gate must PASS, in order\n\nNothing reaches the user until the gates pass:\n\n1. **Visual QA (always).** Render the produced artifact back to images \u2014 PDF pages to PNG, the HTML in a real browser \u2014 and look at them: missing or broken figures, clipped tables, overflowing CJK text, blank pages, unreadable chart labels, wrong page breaks. Fix and re-render until the pages are clean. Reading the source markup is not visual QA; inspect the pixels.\n2. **Proofread gate \u2014 `task(category=\"writing\", ...)`.** Hand the final text to a dedicated `writing` worker whose only job is language: grammar, spelling, punctuation, terminology consistency, and whether the prose reads NATIVELY in the report's own language. It returns a defect list; fix every item and re-run the gate on the delta. Deliver only on a clean pass \u2014 this gate runs BEFORE the first delivery, not after the user finds the typo.";
131
- const ulwResearchCodexDeliveryGate = "### The delivery gate \u2014 visual QA must PASS\n\nNothing reaches the user until the gate passes:\n\n**Visual QA (always).** Render the produced artifact back to images \u2014 PDF pages to PNG, the HTML in a real browser \u2014 and look at them: missing or broken figures, clipped tables, overflowing CJK text, blank pages, unreadable chart labels, wrong page breaks. Fix and re-render until the pages are clean. Reading the source markup is not visual QA; inspect the pixels.";
130
+ const ulwResearchOriginalDeliveryGates = "### The delivery gates \u2014 every gate must PASS, in order\n\nNothing reaches the user until the gates pass:\n\n1. **Visual QA (always).** Render the produced artifact back to images \u2014 PDF pages to PNG, the HTML in a real browser \u2014 and look at them: missing or broken figures, images stretched or spilling their containers, diagram or chart text rendered off the spec's font or palette, clipped tables, overflowing CJK text, blank pages, unlabeled chart values, wrong page breaks. Fix and re-render until the pages are clean. Reading the source markup is not visual QA; inspect the pixels.\n2. **Proofread gate \u2014 `task(category=\"writing\", ...)`.** Hand the final text to a dedicated `writing` worker whose only job is language: grammar, spelling, punctuation, terminology consistency, and whether the prose reads NATIVELY in the report's own language. It returns a defect list; fix every item and re-run the gate on the delta. Deliver only on a clean pass \u2014 this gate runs BEFORE the first delivery, not after the user finds the typo.";
131
+ const ulwResearchCodexDeliveryGate = "### The delivery gate \u2014 visual QA must PASS\n\nNothing reaches the user until the gate passes:\n\n**Visual QA (always).** Render the produced artifact back to images \u2014 PDF pages to PNG, the HTML in a real browser \u2014 and look at them: missing or broken figures, images stretched or spilling their containers, diagram or chart text rendered off the spec's font or palette, clipped tables, overflowing CJK text, blank pages, unlabeled chart values, wrong page breaks. Fix and re-render until the pages are clean. Reading the source markup is not visual QA; inspect the pixels.";
132
132
 
133
133
  export function removeCodexSkillOverlays(skillName, content) {
134
134
  if (skillName === "ulw-research") {
@@ -26,14 +26,61 @@ async function writeRuntimeWrapperFixture({ withNodeCli = false } = {}) {
26
26
  }
27
27
  await mkdir(homeDir, { recursive: true });
28
28
  const link = await linkRootRuntimeBin({ binDir, codexHome, repoRoot, platform: "linux" });
29
- return { homeDir, link, repoRoot };
29
+ return { binDir, codexHome, homeDir, link, repoRoot };
30
30
  }
31
31
 
32
32
  function runtimeWrapperEnv(homeDir) {
33
33
  return { PATH: `${dirname(process.execPath)}:/usr/bin:/bin`, HOME: homeDir };
34
34
  }
35
35
 
36
- test("#given bun absent from PATH but present in ~/.bun/bin #when running the omo runtime wrapper #then resolves the bun fallback", async (t) => {
36
+ test("#given the generated installer #when linking the root runtime #then writes only the canonical wrapper with marker and edition exports", async () => {
37
+ const { binDir, link } = await writeRuntimeWrapperFixture();
38
+
39
+ assert.equal(link.name, "omo-agent-toolkit");
40
+ assert.equal(link.path, join(binDir, "omo-agent-toolkit"));
41
+ const wrapper = await readFile(link.path, "utf8");
42
+ assert.match(wrapper, /OMO_GENERATED_RUNTIME_WRAPPER/);
43
+ assert.match(wrapper, /export OMO_INVOCATION_NAME=omo-agent-toolkit/);
44
+ assert.match(wrapper, /export OMO_EDITION=codex/);
45
+ await assert.rejects(lstat(join(binDir, "omo")));
46
+ });
47
+
48
+ test("#given a marker-bearing legacy omo #when linking the root runtime #then deletes it", async () => {
49
+ const root = await makeTempDir();
50
+ const repoRoot = join(root, "repo");
51
+ const binDir = join(root, "bin");
52
+ await mkdir(join(repoRoot, "dist", "cli"), { recursive: true });
53
+ await mkdir(binDir, { recursive: true });
54
+ await writeFile(join(repoRoot, "dist", "cli", "index.js"), "");
55
+ await writeFile(join(binDir, "omo"), "#!/bin/sh\n# OMO_GENERATED_RUNTIME_WRAPPER\n");
56
+
57
+ await linkRootRuntimeBin({ binDir, codexHome: join(root, "codex"), repoRoot, platform: "linux" });
58
+
59
+ await assert.rejects(lstat(join(binDir, "omo")));
60
+ assert.match(await readFile(join(binDir, "omo-agent-toolkit"), "utf8"), /OMO_GENERATED_RUNTIME_WRAPPER/);
61
+ });
62
+
63
+ test("#given an unmarked user-owned omo #when linking twice #then preserves it byte-identical and remains idempotent", async () => {
64
+ const root = await makeTempDir();
65
+ const repoRoot = join(root, "repo");
66
+ const binDir = join(root, "bin");
67
+ const legacyPath = join(binDir, "omo");
68
+ const canonicalPath = join(binDir, "omo-agent-toolkit");
69
+ const userContent = Buffer.from("#!/bin/sh\necho user-owned\n");
70
+ await mkdir(join(repoRoot, "dist", "cli"), { recursive: true });
71
+ await mkdir(binDir, { recursive: true });
72
+ await writeFile(join(repoRoot, "dist", "cli", "index.js"), "");
73
+ await writeFile(legacyPath, userContent);
74
+
75
+ await linkRootRuntimeBin({ binDir, codexHome: join(root, "codex"), repoRoot, platform: "linux" });
76
+ const firstCanonical = await readFile(canonicalPath);
77
+ await linkRootRuntimeBin({ binDir, codexHome: join(root, "codex"), repoRoot, platform: "linux" });
78
+
79
+ assert.deepEqual(await readFile(legacyPath), userContent);
80
+ assert.deepEqual(await readFile(canonicalPath), firstCanonical);
81
+ });
82
+
83
+ test("#given bun absent from PATH but present in ~/.bun/bin #when running the omo-agent-toolkit runtime wrapper #then resolves the bun fallback", async (t) => {
37
84
  if (process.platform === "win32") return t.skip("posix wrapper execution");
38
85
  const { homeDir, link } = await writeRuntimeWrapperFixture();
39
86
  await mkdir(join(homeDir, ".bun", "bin"), { recursive: true });
@@ -114,7 +161,12 @@ test("#given Windows platform #when writing the omo runtime wrapper #then embeds
114
161
 
115
162
  const link = await linkRootRuntimeBin({ binDir, codexHome: join(root, "codex"), repoRoot, platform: "win32" });
116
163
 
164
+ assert.equal(link.name, "omo-agent-toolkit");
165
+ assert.equal(link.path, join(binDir, "omo-agent-toolkit.cmd"));
117
166
  const wrapper = await readFile(link.path, "utf8");
167
+ assert.match(wrapper, /OMO_GENERATED_RUNTIME_WRAPPER/);
168
+ assert.match(wrapper, /set "OMO_INVOCATION_NAME=omo-agent-toolkit"/);
169
+ assert.match(wrapper, /set "OMO_EDITION=codex"/);
118
170
  assert.match(wrapper, /OMO_RUNTIME/);
119
171
  assert.match(wrapper, /dist[\\/]cli-node[\\/]index\.js/);
120
172
  assert.ok(wrapper.indexOf("OMO_RUNTIME") < wrapper.indexOf("where bun"), "node override must precede bun discovery");
@@ -246,6 +298,7 @@ test("#given nested component declares reserved omo bin #when linking bins #then
246
298
  name: "@example/ulw-loop",
247
299
  bin: {
248
300
  omo: "./dist/cli.js",
301
+ "omo-agent-toolkit": "./dist/cli.js",
249
302
  "omo-ulw-loop": "./dist/cli.js",
250
303
  ulw: "./dist/cli.js",
251
304
  "ulw-loop": "./dist/cli.js",
@@ -261,6 +314,7 @@ test("#given nested component declares reserved omo bin #when linking bins #then
261
314
  { name: "ulw-loop", path: join(binDir, "ulw-loop"), target: join(componentRoot, "dist", "cli.js") },
262
315
  ]);
263
316
  await assert.rejects(readlink(join(binDir, "omo")));
317
+ await assert.rejects(readlink(join(binDir, "omo-agent-toolkit")));
264
318
  assert.equal(await readlink(join(binDir, "omo-ulw-loop")), join(componentRoot, "dist", "cli.js"));
265
319
  assert.equal(await readlink(join(binDir, "ulw")), join(componentRoot, "dist", "cli.js"));
266
320
  assert.equal(await readlink(join(binDir, "ulw-loop")), join(componentRoot, "dist", "cli.js"));
@@ -3,7 +3,7 @@ import test from "node:test";
3
3
 
4
4
  import { buildDelegatedOmoInvocation, runDelegatedOmoCommand } from "./install-local.mjs";
5
5
 
6
- test("#given a lazycodex passthrough command #when delegating to omo #then resets OMO_INVOCATION_NAME so the delegate does not re-enter the lazycodex path", async () => {
6
+ test("#given a lazycodex passthrough command #when delegating to omo-agent-toolkit #then resets OMO_INVOCATION_NAME so the delegate does not re-enter the lazycodex path", async () => {
7
7
  // given
8
8
  const parsed = { kind: "command", command: "boulder", args: [] };
9
9
  let received;
@@ -25,12 +25,12 @@ test("#given a lazycodex passthrough command #when delegating to omo #then reset
25
25
  assert.equal(received.runOptions.cwd, "/tmp/project");
26
26
  assert.equal(
27
27
  received.runOptions.env?.OMO_INVOCATION_NAME,
28
- "omo",
29
- "delegated omo command must run with OMO_INVOCATION_NAME=omo to avoid infinite recursion",
28
+ "omo-agent-toolkit",
29
+ "delegated command must run with OMO_INVOCATION_NAME=omo-agent-toolkit to avoid infinite recursion",
30
30
  );
31
31
  });
32
32
 
33
- test("#given OMO_INVOCATION_NAME=lazycodex in the parent env #when delegating a cleanup passthrough #then the child env overrides it to omo", async () => {
33
+ test("#given OMO_INVOCATION_NAME=lazycodex in the parent env #when delegating a cleanup passthrough #then the child env overrides it to omo-agent-toolkit", async () => {
34
34
  // given
35
35
  const previous = process.env.OMO_INVOCATION_NAME;
36
36
  process.env.OMO_INVOCATION_NAME = "lazycodex";
@@ -52,7 +52,7 @@ test("#given OMO_INVOCATION_NAME=lazycodex in the parent env #when delegating a
52
52
  }
53
53
 
54
54
  // then
55
- assert.equal(received.env.OMO_INVOCATION_NAME, "omo");
55
+ assert.equal(received.env.OMO_INVOCATION_NAME, "omo-agent-toolkit");
56
56
  });
57
57
 
58
58
  test("#given a dry-run doctor #when delegating #then routes to the Codex LazyCodex doctor workflow", async () => {
@@ -239,5 +239,5 @@ test("#given dry-run args with shell metacharacters #when delegating #then logs
239
239
  });
240
240
 
241
241
  // then
242
- assert.equal(logged, "npx --yes --package oh-my-openagent omo cleanup --platform=codex --project '/tmp/lazy codex'\\''s qa'");
242
+ assert.equal(logged, "npx --yes --package oh-my-openagent omo-agent-toolkit cleanup --platform=codex --project '/tmp/lazy codex'\\''s qa'");
243
243
  });