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
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ // omo-codex-install:7bc4b0f020f0a1b4448cc75385a7e3c60042e3b270e304d4c1a43a859e81a4c2:4c93b95fbe888175c5755a1acb72a046e2ca6abc572d7a53842a6d756711634c
2
3
  var __defProp = Object.defineProperty;
3
4
  var __returnValue = (v) => v;
4
5
  function __exportSetter(name, newValue) {
@@ -96,20 +97,20 @@ var init_atomic_write = __esm(() => {
96
97
 
97
98
  // packages/telemetry-core/src/activity-state.ts
98
99
  import { existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync as readFileSync2 } from "node:fs";
99
- import { basename as basename7, join as join33 } from "node:path";
100
+ import { basename as basename7, join as join34 } from "node:path";
100
101
  function resolveTelemetryStateDir(product, options = {}) {
101
102
  const dataDir = resolveXdgDataDir(product.cacheDirName, {
102
103
  env: options.env,
103
104
  osProvider: options.osProvider
104
105
  });
105
- const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join33(options.env.XDG_DATA_HOME, product.cacheDirName);
106
+ const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join34(options.env.XDG_DATA_HOME, product.cacheDirName);
106
107
  if (dataDir === xdgStateDir || xdgStateDir === undefined && basename7(dataDir) === product.cacheDirName) {
107
108
  return dataDir;
108
109
  }
109
- return join33(dataDir, product.cacheDirName);
110
+ return join34(dataDir, product.cacheDirName);
110
111
  }
111
112
  function getTelemetryActivityStateFilePath(stateDir) {
112
- return join33(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
113
+ return join34(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
113
114
  }
114
115
  function getDailyActiveCaptureState(input) {
115
116
  const state = readPostHogActivityState(input.stateDir, input.diagnostics);
@@ -180,9 +181,9 @@ var DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com", DEFAULT_POSTHOG_API_KEY =
180
181
 
181
182
  // packages/telemetry-core/src/diagnostics.ts
182
183
  import { appendFileSync, existsSync as existsSync6, mkdirSync as mkdirSync3, readFileSync as readFileSync3 } from "node:fs";
183
- import { join as join34 } from "node:path";
184
+ import { join as join35 } from "node:path";
184
185
  function getTelemetryDiagnosticsFilePath(diagnosticsDir) {
185
- return join34(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
186
+ return join35(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
186
187
  }
187
188
  function writeTelemetryDiagnostic(input, options) {
188
189
  const now = options.now ?? new Date;
@@ -5903,7 +5904,7 @@ var package_default;
5903
5904
  var init_package = __esm(() => {
5904
5905
  package_default = {
5905
5906
  name: "@oh-my-opencode/omo-codex",
5906
- version: "4.19.4",
5907
+ version: "5.0.0-beta.2",
5907
5908
  type: "module",
5908
5909
  private: true,
5909
5910
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -6122,8 +6123,8 @@ var init_telemetry = __esm(() => {
6122
6123
  });
6123
6124
 
6124
6125
  // packages/omo-codex/src/install/install-local-cli.ts
6125
- import { readFile as readFile22 } from "node:fs/promises";
6126
- import { dirname as dirname12, join as join39, resolve as resolve10 } from "node:path";
6126
+ import { readFile as readFile23 } from "node:fs/promises";
6127
+ import { dirname as dirname12, join as join40, resolve as resolve10 } from "node:path";
6127
6128
  import { fileURLToPath as fileURLToPath2 } from "node:url";
6128
6129
 
6129
6130
  // packages/utils/src/runtime/spawn.ts
@@ -6456,7 +6457,7 @@ var defaultRunCommand = async (command, args, options) => {
6456
6457
  };
6457
6458
 
6458
6459
  // packages/omo-codex/src/install/install-codex.ts
6459
- import { join as join35, resolve as resolve9 } from "node:path";
6460
+ import { join as join36, resolve as resolve9 } from "node:path";
6460
6461
  import { existsSync as existsSync7 } from "node:fs";
6461
6462
  import { homedir as homedir2 } from "node:os";
6462
6463
 
@@ -6627,6 +6628,7 @@ var LEGACY_CODEX_COMPONENT_BINS = [
6627
6628
  { name: "codex-telemetry", component: "telemetry" },
6628
6629
  { name: "codex-ultrawork", component: "ultrawork" }
6629
6630
  ];
6631
+ var LEGACY_CODEX_COMPONENT_BIN_NAMES = LEGACY_CODEX_COMPONENT_BINS.map((entry) => entry.name);
6630
6632
  async function removeLegacyCodexComponentBins(binDir, platform) {
6631
6633
  for (const entry of LEGACY_CODEX_COMPONENT_BINS) {
6632
6634
  const linkPath = join3(binDir, platform === "win32" ? `${entry.name}.cmd` : entry.name);
@@ -6682,7 +6684,7 @@ function isNodeErrorWithCode2(error) {
6682
6684
  // packages/omo-codex/src/install/codex-cache-runtime-wrapper.ts
6683
6685
  import { join as join4 } from "node:path";
6684
6686
  var RUNTIME_WRAPPER_MARKER = "OMO_GENERATED_RUNTIME_WRAPPER";
6685
- function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
6687
+ function posixRuntimeWrapper(binName, cliPath, codexHome, binDir, nodeCliPath) {
6686
6688
  const ulwLoopBin = toPosixPath(join4(binDir, "omo-ulw-loop"));
6687
6689
  const nodeCli = escapePosixDoubleQuoted(toPosixPath(nodeCliPath));
6688
6690
  const escapedCliPath = escapePosixDoubleQuoted(toPosixPath(cliPath));
@@ -6692,6 +6694,8 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
6692
6694
  "#!/bin/sh",
6693
6695
  `# ${RUNTIME_WRAPPER_MARKER}`,
6694
6696
  `export CODEX_HOME="\${CODEX_HOME:-${escapedCodexHome}}"`,
6697
+ `export OMO_INVOCATION_NAME=${binName}`,
6698
+ "export OMO_EDITION=codex",
6695
6699
  'if [ "$1" = "ulw-loop" ] && [ -x "' + escapedUlwLoopBin + '" ]; then',
6696
6700
  " shift",
6697
6701
  ' exec "' + escapedUlwLoopBin + '" ulw-loop "$@"',
@@ -6715,11 +6719,11 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
6715
6719
  ` if [ -f "${nodeCli}" ] && command -v node >/dev/null 2>&1; then`,
6716
6720
  ` exec node "${nodeCli}" "$@"`,
6717
6721
  " fi",
6718
- ` echo "omo: bun runtime not found (checked PATH, ~/.bun/bin, /opt/homebrew/bin, /usr/local/bin) and the node fallback CLI is missing at ${nodeCli}; install bun from https://bun.sh, or reinstall omo and force the fallback with OMO_RUNTIME=node" >&2`,
6722
+ ` echo "${binName}: bun runtime not found (checked PATH, ~/.bun/bin, /opt/homebrew/bin, /usr/local/bin) and the node fallback CLI is missing at ${nodeCli}; install bun from https://bun.sh, or reinstall ${binName} and force the fallback with OMO_RUNTIME=node" >&2`,
6719
6723
  " exit 127",
6720
6724
  "fi",
6721
6725
  `if [ ! -f "${escapedCliPath}" ]; then`,
6722
- ` echo "omo: runtime target missing at ${escapedCliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui" >&2`,
6726
+ ` echo "${binName}: runtime target missing at ${escapedCliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui" >&2`,
6723
6727
  " exit 1",
6724
6728
  "fi",
6725
6729
  `exec "$BUN_BINARY" "${escapedCliPath}" "$@"`,
@@ -6727,12 +6731,14 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
6727
6731
  ].join(`
6728
6732
  `);
6729
6733
  }
6730
- function windowsRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
6734
+ function windowsRuntimeWrapper(binName, cliPath, codexHome, binDir, nodeCliPath) {
6731
6735
  const ulwLoopBin = join4(binDir, "omo-ulw-loop.cmd");
6732
6736
  return [
6733
6737
  "@echo off",
6734
6738
  `rem ${RUNTIME_WRAPPER_MARKER}`,
6735
6739
  `if not defined CODEX_HOME set "CODEX_HOME=${codexHome}"`,
6740
+ `set "OMO_INVOCATION_NAME=${binName}"`,
6741
+ 'set "OMO_EDITION=codex"',
6736
6742
  ...windowsNodeDiscoveryLines(),
6737
6743
  `if "%~1"=="ulw-loop" if exist "${ulwLoopBin}" (`,
6738
6744
  " shift /1",
@@ -6750,11 +6756,11 @@ function windowsRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
6750
6756
  ` "%OMO_NODE_BINARY%" "${nodeCliPath}" %*`,
6751
6757
  " exit /b %ERRORLEVEL%",
6752
6758
  " )",
6753
- ` echo omo: bun runtime not found, no Node runtime was discovered from NODE_REPL_NODE_PATH or PATH, or the node fallback CLI is missing at ${nodeCliPath}; install bun from https://bun.sh or rerun LazyCodex install from Codex Desktop 1>&2`,
6759
+ ` echo ${binName}: bun runtime not found, no Node runtime was discovered from NODE_REPL_NODE_PATH or PATH, or the node fallback CLI is missing at ${nodeCliPath}; install bun from https://bun.sh or rerun LazyCodex install from Codex Desktop 1>&2`,
6754
6760
  " exit /b 127",
6755
6761
  ")",
6756
6762
  `if not exist "${cliPath}" (`,
6757
- ` echo omo: runtime target missing at ${cliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui 1>&2`,
6763
+ ` echo ${binName}: runtime target missing at ${cliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui 1>&2`,
6758
6764
  " exit /b 1",
6759
6765
  ")",
6760
6766
  `"%BUN_BINARY%" "${cliPath}" %*`,
@@ -6770,7 +6776,14 @@ function escapePosixDoubleQuoted(value) {
6770
6776
  }
6771
6777
 
6772
6778
  // packages/omo-codex/src/install/codex-cache-bins.ts
6773
- var RESERVED_NESTED_BIN_NAMES = new Set(["omo", "lazycodex", "lazycodex-ai", "oh-my-opencode", "oh-my-openagent"]);
6779
+ var RESERVED_NESTED_BIN_NAMES = new Set([
6780
+ "omo",
6781
+ "omo-agent-toolkit",
6782
+ "lazycodex",
6783
+ "lazycodex-ai",
6784
+ "oh-my-opencode",
6785
+ "oh-my-openagent"
6786
+ ]);
6774
6787
  async function linkCachedPluginBins(input) {
6775
6788
  const binLinks = await discoverPackageBins(input.pluginRoot);
6776
6789
  const platform = input.platform ?? process.platform;
@@ -6800,20 +6813,26 @@ async function removeCachedManagedNpmBinShims(pluginRoot) {
6800
6813
  }
6801
6814
  async function linkRootRuntimeBin(input) {
6802
6815
  const cliPath = join5(input.repoRoot, "dist", "cli", "index.js");
6803
- if (!await isFile(cliPath))
6816
+ const platform = input.platform ?? process.platform;
6817
+ const legacyPath = join5(input.binDir, platform === "win32" ? "omo.cmd" : "omo");
6818
+ if (!await isFile(cliPath)) {
6819
+ await removeGeneratedRuntimeWrapper(legacyPath);
6804
6820
  return null;
6821
+ }
6822
+ const binName = "omo-agent-toolkit";
6805
6823
  const nodeCliPath = join5(input.repoRoot, "dist", "cli-node", "index.js");
6806
- const platform = input.platform ?? process.platform;
6807
6824
  await mkdir(input.binDir, { recursive: true });
6808
6825
  if (platform === "win32") {
6809
- const linkPath2 = join5(input.binDir, "omo.cmd");
6810
- await replaceRuntimeWrapper(linkPath2, windowsRuntimeWrapper(cliPath, input.codexHome, input.binDir, nodeCliPath));
6811
- return { name: "omo", path: linkPath2, target: cliPath };
6826
+ const linkPath2 = join5(input.binDir, `${binName}.cmd`);
6827
+ await replaceRuntimeWrapper(linkPath2, windowsRuntimeWrapper(binName, cliPath, input.codexHome, input.binDir, nodeCliPath));
6828
+ await removeGeneratedRuntimeWrapper(legacyPath);
6829
+ return { name: binName, path: linkPath2, target: cliPath };
6812
6830
  }
6813
- const linkPath = join5(input.binDir, "omo");
6814
- await replaceRuntimeWrapper(linkPath, posixRuntimeWrapper(cliPath, input.codexHome, input.binDir, nodeCliPath));
6831
+ const linkPath = join5(input.binDir, binName);
6832
+ await replaceRuntimeWrapper(linkPath, posixRuntimeWrapper(binName, cliPath, input.codexHome, input.binDir, nodeCliPath));
6815
6833
  await chmod(linkPath, 493);
6816
- return { name: "omo", path: linkPath, target: cliPath };
6834
+ await removeGeneratedRuntimeWrapper(legacyPath);
6835
+ return { name: binName, path: linkPath, target: cliPath };
6817
6836
  }
6818
6837
  async function linkCachedPluginBin(binDir, link, platform) {
6819
6838
  if (platform === "win32") {
@@ -6926,6 +6945,29 @@ async function replaceRuntimeWrapper(linkPath, content) {
6926
6945
  await rm3(linkPath, { force: true });
6927
6946
  await writeFile(linkPath, content);
6928
6947
  }
6948
+ async function removeGeneratedRuntimeWrapper(path) {
6949
+ try {
6950
+ const entry = await lstat4(path);
6951
+ if (!entry.isFile() && !entry.isSymbolicLink())
6952
+ return;
6953
+ const content = await readGeneratedWrapperContent(path);
6954
+ if (content.includes(RUNTIME_WRAPPER_MARKER))
6955
+ await rm3(path, { force: true });
6956
+ } catch (error) {
6957
+ if (isNodeErrorWithCode(error) && error.code === "ENOENT")
6958
+ return;
6959
+ throw error;
6960
+ }
6961
+ }
6962
+ async function readGeneratedWrapperContent(path) {
6963
+ try {
6964
+ return await readFile3(path, "utf8");
6965
+ } catch (error) {
6966
+ if (isNodeErrorWithCode(error) && (error.code === "ENOENT" || error.code === "EISDIR"))
6967
+ return "";
6968
+ throw error;
6969
+ }
6970
+ }
6929
6971
  async function existingNonRuntimeWrapper(path) {
6930
6972
  try {
6931
6973
  const stat3 = await lstat4(path);
@@ -10682,9 +10724,18 @@ function resolveCodexInstallerBinDir(input) {
10682
10724
  return resolve8(homeDir, ".local", "bin");
10683
10725
  }
10684
10726
 
10685
- // packages/omo-codex/src/install/codex-git-bash-hooks.ts
10686
- import { readFile as readFile20, writeFile as writeFile11 } from "node:fs/promises";
10727
+ // packages/omo-codex/src/install/codex-installed-bin-dir.ts
10728
+ import { readFile as readFile20, readdir as readdir11, writeFile as writeFile11 } from "node:fs/promises";
10687
10729
  import { join as join29 } from "node:path";
10730
+ var INSTALLED_BIN_DIR_MANIFEST = ".installed-bin-dir.json";
10731
+ async function writeInstalledCodexBinDir(input) {
10732
+ await writeFile11(join29(input.pluginRoot, INSTALLED_BIN_DIR_MANIFEST), `${JSON.stringify({ binDir: input.binDir }, null, 2)}
10733
+ `);
10734
+ }
10735
+
10736
+ // packages/omo-codex/src/install/codex-git-bash-hooks.ts
10737
+ import { readFile as readFile21, writeFile as writeFile12 } from "node:fs/promises";
10738
+ import { join as join30 } from "node:path";
10688
10739
  var WINDOWS_ONLY_GIT_BASH_HOOKS = new Set([
10689
10740
  "./hooks/pre-tool-use-recommending-git-bash-mcp.json",
10690
10741
  "./hooks/post-compact-resetting-git-bash-mcp-reminder.json"
@@ -10692,22 +10743,22 @@ var WINDOWS_ONLY_GIT_BASH_HOOKS = new Set([
10692
10743
  async function removeGitBashHooksOffWindows(input) {
10693
10744
  if (input.platform === "win32")
10694
10745
  return;
10695
- const manifestPath = join29(input.pluginRoot, ".codex-plugin", "plugin.json");
10696
- const parsed = JSON.parse(await readFile20(manifestPath, "utf8"));
10746
+ const manifestPath = join30(input.pluginRoot, ".codex-plugin", "plugin.json");
10747
+ const parsed = JSON.parse(await readFile21(manifestPath, "utf8"));
10697
10748
  if (!isPlainRecord(parsed) || !Array.isArray(parsed.hooks))
10698
10749
  return;
10699
10750
  const hooks = parsed.hooks.filter((hook) => typeof hook !== "string" || !WINDOWS_ONLY_GIT_BASH_HOOKS.has(hook));
10700
10751
  if (hooks.length === parsed.hooks.length)
10701
10752
  return;
10702
- await writeFile11(manifestPath, `${JSON.stringify({ ...parsed, hooks }, null, "\t")}
10753
+ await writeFile12(manifestPath, `${JSON.stringify({ ...parsed, hooks }, null, "\t")}
10703
10754
  `);
10704
10755
  }
10705
10756
 
10706
10757
  // packages/omo-codex/src/install/omo-sot-migration.ts
10707
- import { join as join30 } from "node:path";
10758
+ import { join as join31 } from "node:path";
10708
10759
  async function seedAndMigrateOmoSot(input) {
10709
10760
  const commandEnv = { ...input.env };
10710
- const scriptPath = join30(input.repoRoot, "packages", "omo-codex", "plugin", "scripts", "migrate-omo-sot.mjs");
10761
+ const scriptPath = join31(input.repoRoot, "packages", "omo-codex", "plugin", "scripts", "migrate-omo-sot.mjs");
10711
10762
  try {
10712
10763
  await input.runCommand(process.execPath, [scriptPath, "--seed"], {
10713
10764
  cwd: input.repoRoot,
@@ -10721,6 +10772,11 @@ async function seedAndMigrateOmoSot(input) {
10721
10772
  }
10722
10773
 
10723
10774
  // packages/omo-codex/src/install/install-ast-grep-sg.ts
10775
+ import { join as join33 } from "node:path";
10776
+
10777
+ // packages/utils/src/ast-grep/install-script.ts
10778
+ import { spawn as spawn2 } from "node:child_process";
10779
+ import { existsSync as existsSync4 } from "node:fs";
10724
10780
  import { join as join32 } from "node:path";
10725
10781
 
10726
10782
  // packages/utils/src/ast-grep/sg-manifest.ts
@@ -10739,13 +10795,10 @@ function runtimeSlug(platform = process.platform, arch = process.arch) {
10739
10795
  }
10740
10796
 
10741
10797
  // packages/utils/src/ast-grep/install-script.ts
10742
- import { spawn as spawn2 } from "node:child_process";
10743
- import { existsSync as existsSync4 } from "node:fs";
10744
- import { join as join31 } from "node:path";
10745
10798
  var AST_GREP_BIN_DIR_ENV_KEY = "OMO_AST_GREP_BIN_DIR";
10746
10799
  var AST_GREP_INSTALL_TIMEOUT_MS = 30000;
10747
10800
  function astGrepRuntimeDir(baseDir, platform = process.platform, arch = process.arch) {
10748
- return join31(baseDir, "runtime", "ast-grep", runtimeSlug(platform, arch));
10801
+ return join32(baseDir, "runtime", "ast-grep", runtimeSlug(platform, arch));
10749
10802
  }
10750
10803
  function isMissingExecutable(error) {
10751
10804
  if (!("code" in error))
@@ -10783,7 +10836,7 @@ function defaultSpawnProcess(command, args, options) {
10783
10836
  };
10784
10837
  }
10785
10838
  function scriptPathForPlatform(skillDir, platform) {
10786
- return join31(skillDir, platform === "win32" ? "install.ps1" : "install.sh");
10839
+ return join32(skillDir, platform === "win32" ? "install.ps1" : "install.sh");
10787
10840
  }
10788
10841
  function invocationsForPlatform(scriptPath, platform) {
10789
10842
  if (platform !== "win32")
@@ -10855,7 +10908,7 @@ async function installAstGrepForCodex(options) {
10855
10908
  return;
10856
10909
  const platform = options.platform ?? process.platform;
10857
10910
  const targetDir = astGrepRuntimeDir(options.codexHome, platform, options.arch ?? process.arch);
10858
- const skillDir = join32(plugin.path, "skills", "ast-grep");
10911
+ const skillDir = join33(plugin.path, "skills", "ast-grep");
10859
10912
  const installer = options.installer ?? runAstGrepSkillInstall;
10860
10913
  try {
10861
10914
  const result = await installer({ platform, skillDir, targetDir });
@@ -10888,7 +10941,7 @@ async function runCodexInstaller(options = {}) {
10888
10941
  const env2 = options.env ?? process.env;
10889
10942
  const platform = options.platform ?? process.platform;
10890
10943
  const repoRoot = resolve9(options.repoRoot ?? findRepoRoot({ importerDir: import.meta.dir, env: env2 }));
10891
- const codexHome = resolve9(options.codexHome ?? env2.CODEX_HOME ?? join35(homedir2(), ".codex"));
10944
+ const codexHome = resolve9(options.codexHome ?? env2.CODEX_HOME ?? join36(homedir2(), ".codex"));
10892
10945
  const projectDirectory = resolve9(options.projectDirectory ?? env2.OMO_CODEX_PROJECT ?? process.cwd());
10893
10946
  const binDir = resolveCodexInstallerBinDir({ binDir: options.binDir, codexHome, env: env2 });
10894
10947
  const runCommand = options.runCommand ?? defaultRunCommand;
@@ -10905,9 +10958,9 @@ async function runCodexInstaller(options = {}) {
10905
10958
  if (!gitBashResolution.found) {
10906
10959
  throw new Error(gitBashResolution.installHint);
10907
10960
  }
10908
- const codexPackageRoot = join35(repoRoot, "packages", "omo-codex");
10961
+ const codexPackageRoot = join36(repoRoot, "packages", "omo-codex");
10909
10962
  const marketplace = await readMarketplace(repoRoot, {
10910
- marketplacePath: join35(codexPackageRoot, "marketplace.json")
10963
+ marketplacePath: join36(codexPackageRoot, "marketplace.json")
10911
10964
  });
10912
10965
  const distributionManifest = await readDistributionManifest(repoRoot);
10913
10966
  const installed = [];
@@ -10941,6 +10994,7 @@ async function runCodexInstaller(options = {}) {
10941
10994
  if (marketplace.name === "sisyphuslabs" && plugin.name === "omo") {
10942
10995
  await stampLazyCodexPluginVersion({ pluginRoot: plugin.path, version: version2 });
10943
10996
  await writeLazyCodexInstallSnapshot({ pluginRoot: plugin.path, distributionManifest });
10997
+ await writeInstalledCodexBinDir({ pluginRoot: plugin.path, binDir });
10944
10998
  await removeGitBashHooksOffWindows({ platform, pluginRoot: plugin.path });
10945
10999
  }
10946
11000
  const links = await linkCachedPluginBins({ binDir, pluginRoot: plugin.path, platform });
@@ -10952,7 +11006,7 @@ async function runCodexInstaller(options = {}) {
10952
11006
  if (runtimeLink !== null)
10953
11007
  log(`Linked ${runtimeLink.name} -> ${runtimeLink.target}`);
10954
11008
  else
10955
- log(`Warning: skipped the omo runtime wrapper because ${join35(repoRoot, "dist", "cli", "index.js")} is missing; omo ulw-loop commands will be unavailable until a package shipping dist/cli is installed`);
11009
+ log(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${join36(repoRoot, "dist", "cli", "index.js")} is missing; omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed`);
10956
11010
  }
10957
11011
  pluginSources.push({ name: entry.name, sourcePath });
10958
11012
  installed.push(plugin);
@@ -11015,13 +11069,13 @@ async function runCodexInstaller(options = {}) {
11015
11069
  continue;
11016
11070
  log(`Warning: deferred legacy Codex LSP daemon cleanup for v${cleanup.version}: ${cleanup.reason}`);
11017
11071
  }
11018
- const marketplaceRoot = join35(codexHome, "plugins", "cache", marketplace.name);
11072
+ const marketplaceRoot = join36(codexHome, "plugins", "cache", marketplace.name);
11019
11073
  await writeCachedMarketplaceManifest({
11020
11074
  marketplaceName: marketplace.name,
11021
11075
  marketplaceRoot,
11022
11076
  plugins: installed
11023
11077
  });
11024
- const configPath = join35(codexHome, "config.toml");
11078
+ const configPath = join36(codexHome, "config.toml");
11025
11079
  await updateCodexConfig({
11026
11080
  configPath,
11027
11081
  repoRoot: codexPackageRoot,
@@ -11082,7 +11136,7 @@ function findRepoRootFromImporter(importerDir) {
11082
11136
  for (let depth = 0;depth <= 7; depth += 1) {
11083
11137
  if (isRepoRootWithCodexPlugin(current))
11084
11138
  return current;
11085
- for (const wrapperPackageRoot of [join35(current, "node_modules", "oh-my-openagent"), join35(current, "oh-my-openagent")]) {
11139
+ for (const wrapperPackageRoot of [join36(current, "node_modules", "oh-my-openagent"), join36(current, "oh-my-openagent")]) {
11086
11140
  if (isRepoRootWithCodexPlugin(wrapperPackageRoot))
11087
11141
  return wrapperPackageRoot;
11088
11142
  }
@@ -11100,7 +11154,7 @@ function findRepoRoot(input) {
11100
11154
  return findRepoRootFromImporter(input.importerDir);
11101
11155
  }
11102
11156
  function isRepoRootWithCodexPlugin(repoRoot) {
11103
- return existsSync7(join35(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
11157
+ return existsSync7(join36(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
11104
11158
  }
11105
11159
  function codexMarketplaceSource(marketplaceRoot) {
11106
11160
  return { sourceType: "local", source: marketplaceRoot };
@@ -11287,7 +11341,7 @@ async function runDelegatedOmoCommand(parsed, options) {
11287
11341
  options.log(formatShellCommand(invocation.command, invocation.args));
11288
11342
  return;
11289
11343
  }
11290
- const env2 = invocation.delegatesToOmo ? { ...process.env, OMO_INVOCATION_NAME: "omo", ...invocation.env } : { ...process.env, ...invocation.env };
11344
+ const env2 = invocation.delegatesToOmo ? { ...process.env, OMO_INVOCATION_NAME: "omo-agent-toolkit", ...invocation.env } : { ...process.env, ...invocation.env };
11291
11345
  await options.runCommand(invocation.command, invocation.args, { cwd: options.cwd, env: env2 });
11292
11346
  }
11293
11347
  function buildDelegatedOmoInvocation(parsed) {
@@ -11307,7 +11361,7 @@ function buildDelegatedOmoInvocation(parsed) {
11307
11361
  args2.push(`--repo-root=${parsed.repoRoot}`);
11308
11362
  return { command: "npx", args: args2, delegatesToOmo: true };
11309
11363
  }
11310
- const args = ["--yes", "--package", "oh-my-openagent", "omo", parsed.command];
11364
+ const args = ["--yes", "--package", "oh-my-openagent", "omo-agent-toolkit", parsed.command];
11311
11365
  if (parsed.command === "cleanup") {
11312
11366
  args.push("--platform=codex", ...parsed.args);
11313
11367
  } else {
@@ -11413,12 +11467,12 @@ function shellQuote(value) {
11413
11467
  // packages/omo-codex/src/install/lazycodex-manual-update.ts
11414
11468
  import { spawn as spawn3, spawnSync as spawnSync3 } from "node:child_process";
11415
11469
  import { readFileSync as readFileSync4 } from "node:fs";
11416
- import { dirname as dirname11, join as join37 } from "node:path";
11470
+ import { dirname as dirname11, join as join38 } from "node:path";
11417
11471
  import { createInterface as createInterface2 } from "node:readline/promises";
11418
11472
  import { fileURLToPath } from "node:url";
11419
11473
 
11420
11474
  // packages/omo-codex/src/install/lazycodex-bun-global-paths.ts
11421
- import { join as join36 } from "node:path";
11475
+ import { join as join37 } from "node:path";
11422
11476
  function isBunGlobalEntrypointPath(invokedPath, env2) {
11423
11477
  if (typeof invokedPath !== "string" || invokedPath.trim().length === 0)
11424
11478
  return false;
@@ -11429,8 +11483,8 @@ function resolveBunGlobalRoots(env2) {
11429
11483
  const bunInstallRoot = env2.BUN_INSTALL?.trim();
11430
11484
  const homeRoot = env2.HOME?.trim();
11431
11485
  return [
11432
- ...bunInstallRoot ? [join36(bunInstallRoot, "bin"), join36(bunInstallRoot, "install", "global", "node_modules")] : [],
11433
- ...homeRoot ? [join36(homeRoot, ".bun", "bin"), join36(homeRoot, ".bun", "install", "global", "node_modules")] : []
11486
+ ...bunInstallRoot ? [join37(bunInstallRoot, "bin"), join37(bunInstallRoot, "install", "global", "node_modules")] : [],
11487
+ ...homeRoot ? [join37(homeRoot, ".bun", "bin"), join37(homeRoot, ".bun", "install", "global", "node_modules")] : []
11434
11488
  ].map(normalizePathForPrefix);
11435
11489
  }
11436
11490
  function normalizePathForPrefix(path2) {
@@ -11523,7 +11577,7 @@ function resolveCurrentVersion(env2) {
11523
11577
  if (env2.LAZYCODEX_CURRENT_VERSION?.trim())
11524
11578
  return env2.LAZYCODEX_CURRENT_VERSION.trim();
11525
11579
  const pluginRoot = dirname11(dirname11(fileURLToPath(import.meta.url)));
11526
- return readVersionManifest(resolveInstalledVersionPath(env2, pluginRoot)) ?? readVersionManifest(join37(pluginRoot, "..", "..", "..", "package.json")) ?? readVersionManifest(join37(pluginRoot, ".codex-plugin", "plugin.json"));
11580
+ return readVersionManifest(resolveInstalledVersionPath(env2, pluginRoot)) ?? readVersionManifest(join38(pluginRoot, "..", "..", "..", "package.json")) ?? readVersionManifest(join38(pluginRoot, ".codex-plugin", "plugin.json"));
11527
11581
  }
11528
11582
  function resolveLatestVersion(env2) {
11529
11583
  if (env2.LAZYCODEX_LATEST_VERSION?.trim())
@@ -11639,7 +11693,7 @@ function compareVersions(left, right) {
11639
11693
  function resolveInstalledVersionPath(env2, pluginRoot) {
11640
11694
  if (env2.LAZYCODEX_INSTALLED_VERSION_FILE?.trim())
11641
11695
  return env2.LAZYCODEX_INSTALLED_VERSION_FILE.trim();
11642
- return join37(pluginRoot, INSTALLED_VERSION_FILE);
11696
+ return join38(pluginRoot, INSTALLED_VERSION_FILE);
11643
11697
  }
11644
11698
  function readVersionManifest(path2) {
11645
11699
  try {
@@ -11655,15 +11709,15 @@ function readVersionManifest(path2) {
11655
11709
  }
11656
11710
  }
11657
11711
  // packages/omo-codex/src/install/codex-git-bash-mcp-env.ts
11658
- import { readFile as readFile21, writeFile as writeFile12 } from "node:fs/promises";
11659
- import { join as join38 } from "node:path";
11712
+ import { readFile as readFile22, writeFile as writeFile13 } from "node:fs/promises";
11713
+ import { join as join39 } from "node:path";
11660
11714
  var GIT_BASH_ENV_KEY2 = "OMO_CODEX_GIT_BASH_PATH";
11661
11715
  var CODEGRAPH_RELATIVE_ARGS2 = new Set(["components/codegraph/dist/serve.js", "./components/codegraph/dist/serve.js"]);
11662
11716
  async function stampGitBashMcpEnv(input) {
11663
- const manifestPath = join38(input.pluginRoot, ".mcp.json");
11717
+ const manifestPath = join39(input.pluginRoot, ".mcp.json");
11664
11718
  if (!await fileExistsStrict(manifestPath))
11665
11719
  return false;
11666
- const parsed = JSON.parse(await readFile21(manifestPath, "utf8"));
11720
+ const parsed = JSON.parse(await readFile22(manifestPath, "utf8"));
11667
11721
  if (!isPlainRecord(parsed) || !isPlainRecord(parsed["mcpServers"]))
11668
11722
  return false;
11669
11723
  let changed = stampCodegraphMcpPath(parsed["mcpServers"], input.pluginRoot);
@@ -11681,7 +11735,7 @@ async function stampGitBashMcpEnv(input) {
11681
11735
  }
11682
11736
  if (!changed)
11683
11737
  return false;
11684
- await writeFile12(manifestPath, `${JSON.stringify(parsed, null, "\t")}
11738
+ await writeFile13(manifestPath, `${JSON.stringify(parsed, null, "\t")}
11685
11739
  `);
11686
11740
  return true;
11687
11741
  }
@@ -11693,7 +11747,7 @@ function stampCodegraphMcpPath(mcpServers, pluginRoot) {
11693
11747
  const entrypoint = args[0];
11694
11748
  if (typeof entrypoint !== "string" || !CODEGRAPH_RELATIVE_ARGS2.has(entrypoint))
11695
11749
  return false;
11696
- codegraphServer["args"] = [join38(pluginRoot, "components", "codegraph", "dist", "serve.js"), ...args.slice(1)];
11750
+ codegraphServer["args"] = [join39(pluginRoot, "components", "codegraph", "dist", "serve.js"), ...args.slice(1)];
11697
11751
  return true;
11698
11752
  }
11699
11753
 
@@ -11718,7 +11772,7 @@ async function runLazyCodexInstallLocalCli(input) {
11718
11772
  return 0;
11719
11773
  }
11720
11774
  if (parsed.kind === "version") {
11721
- const packageJson = JSON.parse(await readFile22(join39(input.defaultRepoRoot, "package.json"), "utf8"));
11775
+ const packageJson = JSON.parse(await readFile23(join40(input.defaultRepoRoot, "package.json"), "utf8"));
11722
11776
  const version2 = typeof packageJson.version === "string" ? packageJson.version : "unknown";
11723
11777
  input.log(`lazycodex-ai ${version2}`);
11724
11778
  return 0;
@@ -153,7 +153,7 @@ test("#given dry-run cleanup path needs quoting #when running the Node installer
153
153
  ).trim();
154
154
 
155
155
  // then
156
- assert.equal(output, "npx --yes --package oh-my-openagent omo cleanup --platform=codex --project '/tmp/lazy codex'\\''s qa'");
156
+ assert.equal(output, "npx --yes --package oh-my-openagent omo-agent-toolkit cleanup --platform=codex --project '/tmp/lazy codex'\\''s qa'");
157
157
  });
158
158
 
159
159
  test("#given dry-run cleanup #when running the Node installer entrypoint #then prints delegated codex cleanup command", () => {
@@ -168,7 +168,7 @@ test("#given dry-run cleanup #when running the Node installer entrypoint #then p
168
168
  ).trim();
169
169
 
170
170
  // then
171
- assert.equal(output, "npx --yes --package oh-my-openagent omo cleanup --platform=codex --project /tmp/lazycodex-qa");
171
+ assert.equal(output, "npx --yes --package oh-my-openagent omo-agent-toolkit cleanup --platform=codex --project /tmp/lazycodex-qa");
172
172
  });
173
173
 
174
174
  test("#given dry-run uninstall #when running the Node installer entrypoint #then prints delegated codex cleanup command", () => {
@@ -183,7 +183,7 @@ test("#given dry-run uninstall #when running the Node installer entrypoint #then
183
183
  ).trim();
184
184
 
185
185
  // then
186
- assert.equal(output, "npx --yes --package oh-my-openagent omo cleanup --platform=codex --project /tmp/lazycodex-qa");
186
+ assert.equal(output, "npx --yes --package oh-my-openagent omo-agent-toolkit cleanup --platform=codex --project /tmp/lazycodex-qa");
187
187
  });
188
188
 
189
189
  test("#given stale lazycodex version #when running update dry-run #then prints the latest installer command", () => {
@@ -340,7 +340,7 @@ test("#given dry-run ulw-loop #when running the Node installer entrypoint #then
340
340
  }).trim();
341
341
 
342
342
  // then
343
- assert.equal(output, "npx --yes --package oh-my-openagent omo ulw-loop help");
343
+ assert.equal(output, "npx --yes --package oh-my-openagent omo-agent-toolkit ulw-loop help");
344
344
  });
345
345
 
346
346
  test("#given the invoking argv path disappears #when importing the Node installer module #then the entrypoint guard does not throw", () => {
@@ -62,8 +62,10 @@ test("#given custom CODEX_HOME and PATH without omo #when installing locally wit
62
62
  });
63
63
 
64
64
  assert.equal(result.installed.length, 1);
65
- const wrapper = await readFile(join(codexHome, "bin", "omo"), "utf8");
65
+ const wrapper = await readFile(join(codexHome, "bin", "omo-agent-toolkit"), "utf8");
66
66
  assert.match(wrapper, /OMO_GENERATED_RUNTIME_WRAPPER/);
67
+ assert.match(wrapper, /export OMO_INVOCATION_NAME=omo-agent-toolkit/);
68
+ assert.match(wrapper, /export OMO_EDITION=codex/);
67
69
  assert.match(
68
70
  wrapper,
69
71
  new RegExp(escapeRegExp(escapePosixDoubleQuoted(toPosixPath(join(repoRoot, "dist", "cli", "index.js"))))),
@@ -98,9 +100,10 @@ test("#given repoRoot without root CLI dist #when installing locally #then warns
98
100
 
99
101
  const cliPath = join(repoRoot, "dist", "cli", "index.js");
100
102
  assert.ok(
101
- logs.some((line) => line.includes("omo runtime wrapper") && line.includes(cliPath)),
103
+ logs.some((line) => line.includes("omo-agent-toolkit runtime wrapper") && line.includes(cliPath)),
102
104
  `expected a warning naming the missing ${cliPath}; got:\n${logs.join("\n")}`,
103
105
  );
106
+ await assert.rejects(readFile(join(codexHome, "bin", "omo-agent-toolkit"), "utf8"));
104
107
  await assert.rejects(readFile(join(codexHome, "bin", "omo"), "utf8"));
105
108
  });
106
109
 
@@ -1,5 +1,23 @@
1
+ import { existsSync } from "node:fs";
1
2
  import { fileURLToPath } from "node:url";
2
3
 
4
+ // Bundlers inline this module, so import.meta.url points at the consuming bundle, and the
5
+ // distance to the skills directory depends on where that bundle landed:
6
+ // dist/index.js -> dist/skills (sibling)
7
+ // dist/cli/index.js -> dist/skills (parent)
8
+ // dist/cli-node/index.js -> dist/skills (parent)
9
+ // plugins/omo/dist/cli/ -> plugins/omo/skills (grandparent; the Codex marketplace
10
+ // layout, where `plugin/` is copied to
11
+ // `plugins/omo/` and the root CLI
12
+ // runtimes are bundled into
13
+ // `plugins/omo/dist/cli`)
14
+ // Probes run nearest-first so a closer skills directory always wins, and the sibling path is
15
+ // returned unchanged when nothing matches, keeping the previous not-found behavior.
16
+ const SKILLS_PROBE_SPECIFIERS = ["./skills/", "../skills/", "../../skills/"];
17
+
3
18
  export function sharedSkillsRootPath() {
4
- return fileURLToPath(new URL("./skills/", import.meta.url));
19
+ const candidates = SKILLS_PROBE_SPECIFIERS.map((specifier) =>
20
+ fileURLToPath(new URL(specifier, import.meta.url)),
21
+ );
22
+ return candidates.find((candidate) => existsSync(candidate)) ?? candidates[0];
5
23
  }
@@ -1 +1 @@
1
- upstream: https://github.com/code-yeongyu/ast-grep-skill @ 3148c69 (ast-grep 0.43.0). Vendored as a sync; do not fork-drift.
1
+ upstream: https://github.com/code-yeongyu/ast-grep-skill @ 3148c69 (ast-grep 0.45.0). Vendored as a sync; do not fork-drift.
@@ -21,7 +21,7 @@
21
21
  Force one method: scoop | winget | choco | npm | cargo | pip | github
22
22
 
23
23
  .PARAMETER Version
24
- Pin a specific version when downloading from GitHub. Default: 0.43.0
24
+ Pin a specific version when downloading from GitHub. Default: 0.45.0
25
25
 
26
26
  .PARAMETER NoFallback
27
27
  Don't fall back to GitHub zip; fail if all package managers miss
@@ -37,7 +37,7 @@
37
37
 
38
38
  param(
39
39
  [string]$Method = "",
40
- [string]$Version = "0.43.0",
40
+ [string]$Version = "0.45.0",
41
41
  [switch]$NoFallback,
42
42
  [switch]$Quiet
43
43
  )
@@ -33,7 +33,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33
33
  SKILL_ROOT="$SCRIPT_DIR"
34
34
  CACHE_BIN_DIR="${OMO_AST_GREP_BIN_DIR:-$SKILL_ROOT/bin}"
35
35
 
36
- PINNED_VERSION="0.43.0"
36
+ PINNED_VERSION="0.45.0"
37
37
  FORCED_METHOD=""
38
38
  USE_FALLBACK=1
39
39
  QUIET=0
@@ -94,7 +94,7 @@ If every package manager fails:
94
94
  # app-aarch64-pc-windows-msvc.zip Windows ARM64
95
95
 
96
96
  # 2. Download and extract:
97
- VERSION=0.43.0
97
+ VERSION=0.45.0
98
98
  TRIPLE=aarch64-apple-darwin
99
99
  curl -fsSL "https://github.com/ast-grep/ast-grep/releases/download/${VERSION}/app-${TRIPLE}.zip" -o /tmp/ast-grep.zip
100
100
  unzip /tmp/ast-grep.zip -d /tmp/ast-grep
@@ -125,7 +125,7 @@ Requires Rust 1.74+. Slowest path; only useful when you need a specific commit o
125
125
 
126
126
  ```bash
127
127
  ast-grep --version # or `sg --version`
128
- # ast-grep 0.43.0
128
+ # ast-grep 0.45.0
129
129
  ```
130
130
 
131
131
  Then sanity-check a real query:
@@ -49,7 +49,7 @@ fake_sg() {
49
49
  cat > "$target" <<'SH'
50
50
  #!/usr/bin/env bash
51
51
  if [ "${1:-}" = "--version" ]; then
52
- printf 'ast-grep 0.43.0 fake\n'
52
+ printf 'ast-grep 0.45.0 fake\n'
53
53
  else
54
54
  printf 'fake ast-grep\n'
55
55
  fi