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

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 (374) hide show
  1. package/.agents/command/publish.md +44 -16
  2. package/.agents/skills/publish/SKILL.md +44 -16
  3. package/.agents/skills/work-with-pr/SKILL.md +37 -23
  4. package/.opencode/command/publish.md +44 -16
  5. package/.opencode/skills/work-with-pr/SKILL.md +37 -23
  6. package/README.ja.md +1 -1
  7. package/README.ko.md +1 -1
  8. package/README.md +18 -6
  9. package/README.ru.md +1 -1
  10. package/README.zh-cn.md +1 -1
  11. package/bin/oh-my-opencode.js +14 -1
  12. package/bin/oh-my-opencode.test.ts +21 -0
  13. package/dist/agents/atlas/agent.d.ts +0 -1
  14. package/dist/agents/sisyphus/grok-4.d.ts +20 -0
  15. package/dist/agents/sisyphus/index.d.ts +2 -0
  16. package/dist/agents/sisyphus-agent-config.d.ts +6 -0
  17. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  18. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +15 -4
  19. package/dist/agents/types.d.ts +2 -2
  20. package/dist/cli/index.js +1888 -807
  21. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  22. package/dist/cli-node/index.js +1888 -807
  23. package/dist/config/schema/agent-overrides.d.ts +528 -0
  24. package/dist/config/schema/oh-my-opencode-config.d.ts +495 -0
  25. package/dist/features/monitor/batcher.d.ts +3 -1
  26. package/dist/features/monitor/manager-internals.d.ts +1 -0
  27. package/dist/features/monitor/output-injector-types.d.ts +2 -0
  28. package/dist/features/monitor/output-injector.d.ts +6 -0
  29. package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
  30. package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
  31. package/dist/hooks/todo-continuation-enforcer/types.d.ts +1 -0
  32. package/dist/hooks/todo-continuation-enforcer/unrecoverable-request-error.d.ts +9 -0
  33. package/dist/hooks/tool-pair-validator/hook.test-support.d.ts +29 -0
  34. package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +14 -5
  35. package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -3
  36. package/dist/hooks/tool-pair-validator/types.d.ts +5 -22
  37. package/dist/index.js +3139 -2232
  38. package/dist/mcp/lsp.d.ts +1 -0
  39. package/dist/oh-my-opencode.schema.json +1466 -131
  40. package/dist/shared/normalize-sdk-response.d.ts +1 -0
  41. package/dist/shared/shell-env.d.ts +1 -1
  42. package/dist/shared/tmux/constants.d.ts +1 -1
  43. package/dist/skills/ast-grep/SOURCE +1 -1
  44. package/dist/skills/ast-grep/install.ps1 +2 -2
  45. package/dist/skills/ast-grep/install.sh +1 -1
  46. package/dist/skills/ast-grep/references/install.md +2 -2
  47. package/dist/skills/ast-grep/tests/smoke.sh +1 -1
  48. package/dist/skills/coding-agent-sessions/SKILL.md +3 -2
  49. package/dist/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  50. package/dist/skills/coding-agent-sessions/references/senpi.md +4 -4
  51. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  52. package/dist/skills/frontend/SKILL.md +10 -7
  53. package/dist/skills/frontend/references/design/_INDEX.md +1 -0
  54. package/dist/skills/frontend/references/design/stylegallery.md +80 -0
  55. package/dist/skills/start-work/SKILL.md +54 -9
  56. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  57. package/dist/skills/ultimate-browsing/SKILL.md +2 -2
  58. package/dist/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  59. package/dist/skills/ultimate-browsing/engine/__main__.py +8 -1
  60. package/dist/skills/ultimate-browsing/engine/bias_check.py +11 -0
  61. package/dist/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  62. package/dist/skills/ultimate-browsing/engine/result_schema.py +10 -1
  63. package/dist/skills/ultimate-browsing/engine/surrogate.py +214 -0
  64. package/dist/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  65. package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
  66. package/dist/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  67. package/dist/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  68. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  69. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  70. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  71. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  72. package/dist/skills/ultimate-browsing/engine/validators.py +46 -0
  73. package/dist/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  74. package/dist/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  75. package/dist/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  76. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  77. package/dist/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  78. package/dist/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  79. package/dist/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  80. package/dist/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  81. package/dist/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  82. package/dist/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  83. package/dist/skills/ulw-plan/SKILL.md +3 -3
  84. package/dist/skills/ulw-plan/references/full-workflow.md +30 -6
  85. package/dist/skills/ulw-plan/references/intent-clear.md +2 -1
  86. package/dist/skills/ulw-plan/references/intent-unclear.md +3 -3
  87. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  88. package/dist/skills/ulw-research/SKILL.md +15 -10
  89. package/dist/tui.js +477 -36
  90. package/docs/reference/web-terminal-visual-qa.md +1 -1
  91. package/package.json +34 -24
  92. package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +44 -0
  93. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +0 -28
  94. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +60 -7
  95. package/packages/lsp-core/src/lsp/client-wrapper.ts +69 -16
  96. package/packages/lsp-core/src/lsp/connection.ts +1 -1
  97. package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +20 -1
  98. package/packages/lsp-core/src/tools/diagnostics.ts +3 -3
  99. package/packages/lsp-core/src/tools/navigation.ts +4 -2
  100. package/packages/lsp-core/src/tools/rename.ts +4 -2
  101. package/packages/lsp-core/src/tools/symbols.ts +1 -1
  102. package/packages/lsp-daemon/dist/cli.js +108 -40
  103. package/packages/lsp-daemon/dist/client.js +123 -55
  104. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +1 -0
  105. package/packages/lsp-daemon/dist/ensure-daemon.js +18 -5
  106. package/packages/lsp-daemon/dist/index.js +111 -43
  107. package/packages/lsp-tools-mcp/dist/cli.js +77 -23
  108. package/packages/lsp-tools-mcp/dist/lsp/manager.js +1 -1
  109. package/packages/lsp-tools-mcp/dist/mcp.js +77 -23
  110. package/packages/lsp-tools-mcp/dist/tools.js +77 -23
  111. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  112. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +268 -92
  113. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  114. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  115. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -7
  116. package/packages/omo-codex/plugin/components/bootstrap/src/worker.ts +3 -0
  117. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +220 -10
  118. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +220 -10
  119. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  120. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  121. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  122. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  123. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  124. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  125. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  126. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +3 -17
  127. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  128. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +135 -67
  129. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  130. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  131. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  132. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  133. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  134. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +16 -23
  135. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  136. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  137. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  138. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  139. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  140. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +37 -69
  141. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  142. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -15
  143. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +4 -2
  144. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +5 -1
  145. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +2 -1
  146. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +18 -0
  147. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  148. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  149. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +21 -0
  150. package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +0 -3
  151. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +107 -16
  152. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  153. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  154. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +3 -9
  155. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +24 -12
  156. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +24 -12
  157. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  158. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  159. package/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md +2 -0
  160. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  161. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  162. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  163. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  164. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  165. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  166. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  167. package/packages/omo-codex/plugin/components/ultrawork/directive.md +9 -2
  168. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  169. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  170. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +9 -2
  171. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +3 -3
  172. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +30 -6
  173. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  174. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +3 -3
  175. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  176. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  177. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  178. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  179. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
  180. package/packages/omo-codex/plugin/components/ulw-loop/README.md +11 -11
  181. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +9 -2
  182. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +1 -1
  183. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  184. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +9 -9
  185. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +1 -1
  186. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +66 -66
  187. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +4 -4
  188. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +1 -1
  189. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -1
  190. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +1 -1
  191. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +1 -1
  192. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +2 -2
  193. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  194. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  195. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +5 -4
  196. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
  197. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +23 -25
  198. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +1 -1
  199. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +9 -9
  200. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +1 -1
  201. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +1 -1
  202. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +4 -4
  203. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +1 -1
  204. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -1
  205. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +1 -1
  206. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +1 -1
  207. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +2 -2
  208. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  209. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -2
  210. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +1 -1
  211. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-helpers.test.ts +2 -2
  212. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +1 -1
  213. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
  214. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +2 -5
  215. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +1 -1
  216. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +7 -40
  217. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +1 -1
  218. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +1 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +1 -1
  220. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  221. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +4 -5
  222. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  223. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  224. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  225. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  226. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  227. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  228. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  229. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  230. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  231. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  232. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  233. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  234. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  235. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  236. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  237. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  238. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  239. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  240. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  241. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  242. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  243. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  244. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  245. package/packages/omo-codex/plugin/package-lock.json +20 -20
  246. package/packages/omo-codex/plugin/package.json +1 -1
  247. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +4 -4
  248. package/packages/omo-codex/plugin/skills/ast-grep/SOURCE +1 -1
  249. package/packages/omo-codex/plugin/skills/ast-grep/install.ps1 +2 -2
  250. package/packages/omo-codex/plugin/skills/ast-grep/install.sh +1 -1
  251. package/packages/omo-codex/plugin/skills/ast-grep/references/install.md +2 -2
  252. package/packages/omo-codex/plugin/skills/ast-grep/tests/smoke.sh +1 -1
  253. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
  254. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  255. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
  256. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  257. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +10 -7
  258. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  259. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  260. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +54 -9
  261. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  262. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -2
  263. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  264. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +8 -1
  265. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +11 -0
  266. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  267. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +10 -1
  268. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogate.py +214 -0
  269. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  270. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  271. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  272. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  273. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  274. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  275. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  276. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  277. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +46 -0
  278. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  279. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  280. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  281. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  282. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  283. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  284. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  285. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  286. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  287. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  288. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +9 -2
  289. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +5 -4
  290. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
  291. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +23 -25
  292. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +3 -3
  293. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +30 -6
  294. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  295. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +3 -3
  296. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  297. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +15 -10
  298. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  299. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +4 -24
  300. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  301. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  302. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  303. package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +12 -12
  304. package/packages/omo-codex/plugin/test/bootstrap-orchestration.test.mjs +36 -4
  305. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  306. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  307. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
  308. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +4 -4
  309. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -119
  310. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  311. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  312. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  313. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  314. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  315. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +0 -3
  316. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  317. package/packages/omo-codex/scripts/install-bin-links.test.mjs +56 -2
  318. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +6 -6
  319. package/packages/omo-codex/scripts/install-dist/install-local.mjs +170 -78
  320. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
  321. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +4 -4
  322. package/packages/omo-codex/scripts/install-local.test.mjs +5 -2
  323. package/packages/shared-skills/index.mjs +19 -1
  324. package/packages/shared-skills/skills/ast-grep/SOURCE +1 -1
  325. package/packages/shared-skills/skills/ast-grep/install.ps1 +2 -2
  326. package/packages/shared-skills/skills/ast-grep/install.sh +1 -1
  327. package/packages/shared-skills/skills/ast-grep/references/install.md +2 -2
  328. package/packages/shared-skills/skills/ast-grep/tests/smoke.sh +1 -1
  329. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
  330. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  331. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
  332. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  333. package/packages/shared-skills/skills/frontend/SKILL.md +10 -7
  334. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  335. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  336. package/packages/shared-skills/skills/start-work/SKILL.md +54 -9
  337. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  338. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -2
  339. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  340. package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +8 -1
  341. package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +11 -0
  342. package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  343. package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +10 -1
  344. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogate.py +214 -0
  345. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  346. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  347. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  348. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  349. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  350. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  351. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  352. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  353. package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +46 -0
  354. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  355. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  356. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  357. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  358. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  359. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  360. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  361. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  362. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  363. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  364. package/packages/shared-skills/skills/ulw-plan/SKILL.md +3 -3
  365. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +30 -6
  366. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  367. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +3 -3
  368. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  369. package/packages/shared-skills/skills/ulw-research/SKILL.md +15 -10
  370. package/postinstall.mjs +6 -0
  371. package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
  372. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  373. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  374. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Publish oh-my-opencode to npm via GitHub Actions workflow
3
- argument-hint: <patch|minor|major>
3
+ argument-hint: <patch|minor|major|explicit-semver>
4
4
  ---
5
5
 
6
6
 
@@ -54,15 +54,16 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
54
54
 
55
55
  ## CRITICAL: ARGUMENT REQUIREMENT
56
56
 
57
- **You MUST receive a version bump type from the user.** Valid options:
57
+ **You MUST receive one release selector from the user.** Valid options:
58
58
  - `patch`: Bug fixes, backward-compatible (1.1.7 → 1.1.8)
59
59
  - `minor`: New features, backward-compatible (1.1.7 → 1.2.0)
60
60
  - `major`: Breaking changes (1.1.7 → 2.0.0)
61
+ - An explicit valid semantic version, including a prerelease such as `5.0.0-beta.9`
61
62
 
62
- **If the user did not provide a bump type argument, STOP IMMEDIATELY and ask:**
63
- > "To proceed with deployment, please specify a version bump type: `patch`, `minor`, or `major`"
63
+ **If the user did not provide a release selector, STOP IMMEDIATELY and ask:**
64
+ > "To proceed with deployment, specify `patch`, `minor`, `major`, or an explicit semantic version such as `5.0.0-beta.9`."
64
65
 
65
- **DO NOT PROCEED without explicit user confirmation of bump type.**
66
+ Reject any other value. Do not infer or repair malformed versions.
66
67
 
67
68
  ---
68
69
 
@@ -72,7 +73,7 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
72
73
 
73
74
  ```
74
75
  [
75
- { "id": "confirm-bump", "content": "Confirm version bump type with user (patch/minor/major)", "status": "in_progress", "priority": "high" },
76
+ { "id": "confirm-release-input", "content": "Confirm release selector with user (patch/minor/major or explicit semver)", "status": "in_progress", "priority": "high" },
76
77
  { "id": "check-uncommitted", "content": "Check for uncommitted changes and commit if needed", "status": "pending", "priority": "high" },
77
78
  { "id": "sync-remote", "content": "Sync with remote (pull --rebase && push if unpushed commits)", "status": "pending", "priority": "high" },
78
79
  { "id": "run-workflow", "content": "Trigger GitHub Actions publish workflow", "status": "pending", "priority": "high" },
@@ -92,9 +93,23 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
92
93
 
93
94
  ---
94
95
 
95
- ## STEP 1: CONFIRM BUMP TYPE
96
+ ## STEP 1: CONFIRM AND CLASSIFY THE RELEASE SELECTOR
96
97
 
97
- If the user already named a bump type (argument or message), that IS the confirmation state it and continue immediately. Only ask and wait when no bump type was given.
98
+ If the user already supplied the selector in the command argument or message, that IS the confirmation. Parse it exactly once:
99
+
100
+ ```bash
101
+ RELEASE_INPUT="${ARGUMENTS}"
102
+ if [[ "$RELEASE_INPUT" =~ ^(patch|minor|major)$ ]]; then
103
+ RELEASE_KIND=bump
104
+ elif [[ "$RELEASE_INPUT" =~ ^([0-9]+\.){2}[0-9]+(-[0-9A-Za-z]+(\.[0-9A-Za-z]+)*)?$ ]]; then
105
+ RELEASE_KIND=version
106
+ else
107
+ echo "Invalid release selector: $RELEASE_INPUT" >&2
108
+ exit 1
109
+ fi
110
+ ```
111
+
112
+ Only ask and wait when no selector was provided.
98
113
 
99
114
  ---
100
115
 
@@ -125,16 +140,29 @@ This ensures the GitHub Actions workflow runs on the latest code including all l
125
140
 
126
141
  ## STEP 3: TRIGGER GITHUB ACTIONS WORKFLOW
127
142
 
128
- Run the publish workflow:
129
- ```bash
130
- gh workflow run publish -f bump={bump_type}
131
- ```
143
+ Dispatch from `dev`, pass bump selectors through `bump`, and pass exact versions through `version`. The required `bump` input remains `patch` for explicit-version dispatches but is ignored by the workflow because `version` takes precedence.
132
144
 
133
- Wait 3 seconds, then get the run ID:
134
145
  ```bash
135
- gh run list --workflow=publish --limit=1 --json databaseId,status --jq '.[0]'
146
+ if [ "$RELEASE_KIND" = bump ]; then
147
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f "bump=${RELEASE_INPUT}")"
148
+ else
149
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f bump=patch -f "version=${RELEASE_INPUT}")"
150
+ fi
151
+
152
+ if ! [[ "$RUN_URL" =~ ^https://github.com/code-yeongyu/oh-my-openagent/actions/runs/[0-9]+$ ]]; then
153
+ echo "Publish dispatch did not return an exact workflow run URL: $RUN_URL" >&2
154
+ exit 1
155
+ fi
156
+ RUN_ID="${RUN_URL##*/}"
157
+ if ! [[ "$RUN_ID" =~ ^[0-9]+$ ]]; then
158
+ echo "Publish dispatch returned an invalid run ID: $RUN_ID" >&2
159
+ exit 1
160
+ fi
161
+ gh run view "${RUN_ID}" --json databaseId,status,url --jq '{databaseId,status,url}'
136
162
  ```
137
163
 
164
+ The returned run ID owns this release attempt. Never replace it with a latest-run lookup.
165
+
138
166
  ---
139
167
 
140
168
  ## STEP 4: WAIT FOR WORKFLOW COMPLETION
@@ -150,14 +178,14 @@ The publish run is a single workflow with sequential stages. Expected timeline (
150
178
 
151
179
  Poll job-level status every 30 seconds and report stage transitions to the user:
152
180
  ```bash
153
- gh run view {run_id} --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
181
+ gh run view "${RUN_ID}" --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
154
182
  ```
155
183
 
156
184
  **IMPORTANT: Use polling loop, NOT sleep commands.** Use the waiting time to draft the enhanced release summary (Step 6) — do not sit idle, and do not start any review activity.
157
185
 
158
186
  If conclusion is `failure`, show error and stop:
159
187
  ```bash
160
- gh run view {run_id} --log-failed
188
+ gh run view "${RUN_ID}" --log-failed
161
189
  ```
162
190
 
163
191
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: publish
3
- description: "Publish oh-my-opencode to npm by triggering the GitHub Actions publish workflow and verifying its artifacts. Ship-only: never runs pre-publish-review or re-reviews merged code unless the user explicitly asks. Argument: <patch|minor|major>. Triggers: publish, release, deploy, npm publish."
3
+ description: "Publish oh-my-opencode to npm by triggering the GitHub Actions publish workflow and verifying its artifacts. Ship-only: never runs pre-publish-review or re-reviews merged code unless the user explicitly asks. Argument: <patch|minor|major|explicit-semver>. Triggers: publish, release, deploy, npm publish."
4
4
  ---
5
5
 
6
6
  You are the release manager for oh-my-opencode. Execute the FULL publish workflow from start to finish.
@@ -53,15 +53,16 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
53
53
 
54
54
  ## CRITICAL: ARGUMENT REQUIREMENT
55
55
 
56
- **You MUST receive a version bump type from the user.** Valid options:
56
+ **You MUST receive one release selector from the user.** Valid options:
57
57
  - `patch`: Bug fixes, backward-compatible (1.1.7 → 1.1.8)
58
58
  - `minor`: New features, backward-compatible (1.1.7 → 1.2.0)
59
59
  - `major`: Breaking changes (1.1.7 → 2.0.0)
60
+ - An explicit valid semantic version, including a prerelease such as `5.0.0-beta.9`
60
61
 
61
- **If the user did not provide a bump type argument, STOP IMMEDIATELY and ask:**
62
- > "To proceed with deployment, please specify a version bump type: `patch`, `minor`, or `major`"
62
+ **If the user did not provide a release selector, STOP IMMEDIATELY and ask:**
63
+ > "To proceed with deployment, specify `patch`, `minor`, `major`, or an explicit semantic version such as `5.0.0-beta.9`."
63
64
 
64
- **DO NOT PROCEED without explicit user confirmation of bump type.**
65
+ Reject any other value. Do not infer or repair malformed versions.
65
66
 
66
67
  ---
67
68
 
@@ -71,7 +72,7 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
71
72
 
72
73
  ```
73
74
  [
74
- { "id": "confirm-bump", "content": "Confirm version bump type with user (patch/minor/major)", "status": "in_progress", "priority": "high" },
75
+ { "id": "confirm-release-input", "content": "Confirm release selector with user (patch/minor/major or explicit semver)", "status": "in_progress", "priority": "high" },
75
76
  { "id": "check-uncommitted", "content": "Check for uncommitted changes and commit if needed", "status": "pending", "priority": "high" },
76
77
  { "id": "sync-remote", "content": "Sync with remote (pull --rebase && push if unpushed commits)", "status": "pending", "priority": "high" },
77
78
  { "id": "run-workflow", "content": "Trigger GitHub Actions publish workflow", "status": "pending", "priority": "high" },
@@ -91,9 +92,23 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
91
92
 
92
93
  ---
93
94
 
94
- ## STEP 1: CONFIRM BUMP TYPE
95
+ ## STEP 1: CONFIRM AND CLASSIFY THE RELEASE SELECTOR
95
96
 
96
- If the user already named a bump type (argument or message), that IS the confirmation state it and continue immediately. Only ask and wait when no bump type was given.
97
+ If the user already supplied the selector in the command argument or message, that IS the confirmation. Parse it exactly once:
98
+
99
+ ```bash
100
+ RELEASE_INPUT="${ARGUMENTS}"
101
+ if [[ "$RELEASE_INPUT" =~ ^(patch|minor|major)$ ]]; then
102
+ RELEASE_KIND=bump
103
+ elif [[ "$RELEASE_INPUT" =~ ^([0-9]+\.){2}[0-9]+(-[0-9A-Za-z]+(\.[0-9A-Za-z]+)*)?$ ]]; then
104
+ RELEASE_KIND=version
105
+ else
106
+ echo "Invalid release selector: $RELEASE_INPUT" >&2
107
+ exit 1
108
+ fi
109
+ ```
110
+
111
+ Only ask and wait when no selector was provided.
97
112
 
98
113
  ---
99
114
 
@@ -124,16 +139,29 @@ This ensures the GitHub Actions workflow runs on the latest code including all l
124
139
 
125
140
  ## STEP 3: TRIGGER GITHUB ACTIONS WORKFLOW
126
141
 
127
- Run the publish workflow:
128
- ```bash
129
- gh workflow run publish -f bump={bump_type}
130
- ```
142
+ Dispatch from `dev`, pass bump selectors through `bump`, and pass exact versions through `version`. The required `bump` input remains `patch` for explicit-version dispatches but is ignored by the workflow because `version` takes precedence.
131
143
 
132
- Wait 3 seconds, then get the run ID:
133
144
  ```bash
134
- gh run list --workflow=publish --limit=1 --json databaseId,status --jq '.[0]'
145
+ if [ "$RELEASE_KIND" = bump ]; then
146
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f "bump=${RELEASE_INPUT}")"
147
+ else
148
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f bump=patch -f "version=${RELEASE_INPUT}")"
149
+ fi
150
+
151
+ if ! [[ "$RUN_URL" =~ ^https://github.com/code-yeongyu/oh-my-openagent/actions/runs/[0-9]+$ ]]; then
152
+ echo "Publish dispatch did not return an exact workflow run URL: $RUN_URL" >&2
153
+ exit 1
154
+ fi
155
+ RUN_ID="${RUN_URL##*/}"
156
+ if ! [[ "$RUN_ID" =~ ^[0-9]+$ ]]; then
157
+ echo "Publish dispatch returned an invalid run ID: $RUN_ID" >&2
158
+ exit 1
159
+ fi
160
+ gh run view "${RUN_ID}" --json databaseId,status,url --jq '{databaseId,status,url}'
135
161
  ```
136
162
 
163
+ The returned run ID owns this release attempt. Never replace it with a latest-run lookup.
164
+
137
165
  ---
138
166
 
139
167
  ## STEP 4: WAIT FOR WORKFLOW COMPLETION
@@ -149,14 +177,14 @@ The publish run is a single workflow with sequential stages. Expected timeline (
149
177
 
150
178
  Poll job-level status every 30 seconds and report stage transitions to the user:
151
179
  ```bash
152
- gh run view {run_id} --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
180
+ gh run view "${RUN_ID}" --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
153
181
  ```
154
182
 
155
183
  **IMPORTANT: Use polling loop, NOT sleep commands.** Use the waiting time to draft the enhanced release summary (Step 6) — do not sit idle, and do not start any review activity.
156
184
 
157
185
  If conclusion is `failure`, show error and stop:
158
186
  ```bash
159
- gh run view {run_id} --log-failed
187
+ gh run view "${RUN_ID}" --log-failed
160
188
  ```
161
189
 
162
190
  ---
@@ -196,12 +196,20 @@ while true:
196
196
 
197
197
  ### Gate A: CI Checks
198
198
 
199
- CI is the fastest feedback loop. Wait for it to complete, then parse results.
199
+ CI is the fastest feedback loop. Subscribe to its completion via `monitor` never block a model round-trip on `gh pr checks --watch`.
200
200
 
201
- ```bash
202
- # Wait for checks to start (GitHub needs a moment after push)
203
- # Then watch for completion
204
- gh pr checks "$PR_NUMBER" --watch --fail-fast
201
+ ```
202
+ # Subscribe to CI completion the monitor event wakes the session when checks finish.
203
+ # Do NOT use `gh pr checks --watch` as a blocking tool call; it burns a full model
204
+ # round-trip (~29s) on every poll. Instead, register a monitor and end the turn:
205
+ monitor({
206
+ description: "CI completion for PR $PR_NUMBER",
207
+ command: "gh pr checks $PR_NUMBER --watch --fail-fast",
208
+ filter: "completed|fail|cancel"
209
+ })
210
+ # → end turn; the monitor's matching line arrives as an injected event.
211
+ # For a single midpoint status peek (at most once), use:
212
+ # gh pr checks "$PR_NUMBER" # one-shot, no --watch
205
213
  ```
206
214
 
207
215
  **On failure**: Get the failed run logs to understand what broke:
@@ -243,20 +251,21 @@ fi
243
251
 
244
252
  **On issues**: Cubic's review body contains structured issue descriptions. Parse them, determine which are valid (some may be false positives), and fix the valid ones per the iteration discipline below.
245
253
 
246
- Cubic reviews are triggered automatically on PR updates. After pushing a fix, wait for the new review to appear before checking again. Use `gh api` polling with a conditional loop:
254
+ Cubic reviews are triggered automatically on PR updates. After pushing a fix, subscribe to the new review arriving never spin a `for _ in $(seq 1 30)` polling loop that burns model round-trips.
247
255
 
248
- ```bash
249
- # Wait for a NEW Cubic review after push. If none arrives within the bound,
250
- # Cubic is out of quota (or not running) skip Gate B rather than spin forever.
256
+ ```
257
+ # Subscribe to a NEW Cubic review after push. The monitor exits when a review
258
+ # newer than PUSH_TIME appears, or times out (quota exhausted → Gate B SKIPPED).
251
259
  PUSH_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
252
- for _ in $(seq 1 30); do
253
- LATEST_REVIEW_TIME=$(gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" \
254
- --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at')
255
- [[ "$LATEST_REVIEW_TIME" > "$PUSH_TIME" ]] && break
256
- timeout 20 gh pr checks "$PR_NUMBER" --watch >/dev/null 2>&1 || true # spend the interval usefully
257
- done
258
- # Loop exhausted without a newer review treat Gate B as SKIPPED (quota exhausted)
259
- [[ "$LATEST_REVIEW_TIME" > "$PUSH_TIME" ]] || echo "Cubic: SKIPPED (no review within bound — quota exhausted)"
260
+ monitor({
261
+ description: "Cubic review for PR $PR_NUMBER",
262
+ command: "LATEST=$(gh api repos/${REPO}/pulls/${PR_NUMBER}/reviews --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at // empty'); [ -n \"$LATEST\" ] && [ \"$LATEST\" > \"$PUSH_TIME\" ] && echo NEW_REVIEW || echo WAITING",
263
+ filter: "NEW_REVIEW",
264
+ timeout_ms: 600000 # 10 min bound if no review arrives, Gate B is SKIPPED (quota exhausted)
265
+ })
266
+ # end turn; if the monitor times out without NEW_REVIEW, treat Gate B as SKIPPED.
267
+ # For a single midpoint peek (at most once), use:
268
+ # gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at'
260
269
  ```
261
270
 
262
271
  ### Iteration discipline
@@ -292,13 +301,18 @@ gh pr merge "$PR_NUMBER" --merge --auto --delete-branch
292
301
  # are green, fall back to a direct merge: gh pr merge "$PR_NUMBER" --merge --delete-branch
293
302
  ```
294
303
 
295
- Then WAIT until the merge has actually completed before you report done or clean up - never walk away while the PR is still merging:
304
+ Then subscribe to the merge completing never block a model round-trip on an `until [ ... MERGED ]` polling loop:
296
305
 
297
- ```bash
298
- # Block until the PR is actually MERGED (auto-merge lands once all required checks pass)
299
- until [ "$(gh pr view "$PR_NUMBER" --json state -q .state)" = "MERGED" ]; do
300
- gh pr checks "$PR_NUMBER" --watch --fail-fast >/dev/null 2>&1 || true # spend the interval on the checks
301
- done
306
+ ```
307
+ # Subscribe to merge completion. The monitor exits when gh pr view returns MERGED.
308
+ monitor({
309
+ description: "Merge completion for PR $PR_NUMBER",
310
+ command: "[ \"$(gh pr view $PR_NUMBER --json state -q .state)\" = \"MERGED\" ] && echo MERGED || echo WAITING",
311
+ filter: "MERGED",
312
+ timeout_ms: 1800000 # 30 min bound for auto-merge to land after all gates pass
313
+ })
314
+ # → end turn; the MERGED event wakes the session for the cleanup step.
315
+ # If the monitor times out, check merge state once: gh pr view "$PR_NUMBER" --json state -q .state
302
316
  ```
303
317
 
304
318
  If the user opted out of merging, skip the merge but STILL run the cleanup below: the worktree is removed either way.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Publish oh-my-opencode to npm via GitHub Actions workflow
3
- argument-hint: <patch|minor|major>
3
+ argument-hint: <patch|minor|major|explicit-semver>
4
4
  ---
5
5
 
6
6
 
@@ -54,15 +54,16 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
54
54
 
55
55
  ## CRITICAL: ARGUMENT REQUIREMENT
56
56
 
57
- **You MUST receive a version bump type from the user.** Valid options:
57
+ **You MUST receive one release selector from the user.** Valid options:
58
58
  - `patch`: Bug fixes, backward-compatible (1.1.7 → 1.1.8)
59
59
  - `minor`: New features, backward-compatible (1.1.7 → 1.2.0)
60
60
  - `major`: Breaking changes (1.1.7 → 2.0.0)
61
+ - An explicit valid semantic version, including a prerelease such as `5.0.0-beta.9`
61
62
 
62
- **If the user did not provide a bump type argument, STOP IMMEDIATELY and ask:**
63
- > "To proceed with deployment, please specify a version bump type: `patch`, `minor`, or `major`"
63
+ **If the user did not provide a release selector, STOP IMMEDIATELY and ask:**
64
+ > "To proceed with deployment, specify `patch`, `minor`, `major`, or an explicit semantic version such as `5.0.0-beta.9`."
64
65
 
65
- **DO NOT PROCEED without explicit user confirmation of bump type.**
66
+ Reject any other value. Do not infer or repair malformed versions.
66
67
 
67
68
  ---
68
69
 
@@ -72,7 +73,7 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
72
73
 
73
74
  ```
74
75
  [
75
- { "id": "confirm-bump", "content": "Confirm version bump type with user (patch/minor/major)", "status": "in_progress", "priority": "high" },
76
+ { "id": "confirm-release-input", "content": "Confirm release selector with user (patch/minor/major or explicit semver)", "status": "in_progress", "priority": "high" },
76
77
  { "id": "check-uncommitted", "content": "Check for uncommitted changes and commit if needed", "status": "pending", "priority": "high" },
77
78
  { "id": "sync-remote", "content": "Sync with remote (pull --rebase && push if unpushed commits)", "status": "pending", "priority": "high" },
78
79
  { "id": "run-workflow", "content": "Trigger GitHub Actions publish workflow", "status": "pending", "priority": "high" },
@@ -92,9 +93,23 @@ This contract applies to the slash-command copies (`.agents/command/publish.md`,
92
93
 
93
94
  ---
94
95
 
95
- ## STEP 1: CONFIRM BUMP TYPE
96
+ ## STEP 1: CONFIRM AND CLASSIFY THE RELEASE SELECTOR
96
97
 
97
- If the user already named a bump type (argument or message), that IS the confirmation state it and continue immediately. Only ask and wait when no bump type was given.
98
+ If the user already supplied the selector in the command argument or message, that IS the confirmation. Parse it exactly once:
99
+
100
+ ```bash
101
+ RELEASE_INPUT="${ARGUMENTS}"
102
+ if [[ "$RELEASE_INPUT" =~ ^(patch|minor|major)$ ]]; then
103
+ RELEASE_KIND=bump
104
+ elif [[ "$RELEASE_INPUT" =~ ^([0-9]+\.){2}[0-9]+(-[0-9A-Za-z]+(\.[0-9A-Za-z]+)*)?$ ]]; then
105
+ RELEASE_KIND=version
106
+ else
107
+ echo "Invalid release selector: $RELEASE_INPUT" >&2
108
+ exit 1
109
+ fi
110
+ ```
111
+
112
+ Only ask and wait when no selector was provided.
98
113
 
99
114
  ---
100
115
 
@@ -125,16 +140,29 @@ This ensures the GitHub Actions workflow runs on the latest code including all l
125
140
 
126
141
  ## STEP 3: TRIGGER GITHUB ACTIONS WORKFLOW
127
142
 
128
- Run the publish workflow:
129
- ```bash
130
- gh workflow run publish -f bump={bump_type}
131
- ```
143
+ Dispatch from `dev`, pass bump selectors through `bump`, and pass exact versions through `version`. The required `bump` input remains `patch` for explicit-version dispatches but is ignored by the workflow because `version` takes precedence.
132
144
 
133
- Wait 3 seconds, then get the run ID:
134
145
  ```bash
135
- gh run list --workflow=publish --limit=1 --json databaseId,status --jq '.[0]'
146
+ if [ "$RELEASE_KIND" = bump ]; then
147
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f "bump=${RELEASE_INPUT}")"
148
+ else
149
+ RUN_URL="$(gh workflow run publish.yml --ref dev -f bump=patch -f "version=${RELEASE_INPUT}")"
150
+ fi
151
+
152
+ if ! [[ "$RUN_URL" =~ ^https://github.com/code-yeongyu/oh-my-openagent/actions/runs/[0-9]+$ ]]; then
153
+ echo "Publish dispatch did not return an exact workflow run URL: $RUN_URL" >&2
154
+ exit 1
155
+ fi
156
+ RUN_ID="${RUN_URL##*/}"
157
+ if ! [[ "$RUN_ID" =~ ^[0-9]+$ ]]; then
158
+ echo "Publish dispatch returned an invalid run ID: $RUN_ID" >&2
159
+ exit 1
160
+ fi
161
+ gh run view "${RUN_ID}" --json databaseId,status,url --jq '{databaseId,status,url}'
136
162
  ```
137
163
 
164
+ The returned run ID owns this release attempt. Never replace it with a latest-run lookup.
165
+
138
166
  ---
139
167
 
140
168
  ## STEP 4: WAIT FOR WORKFLOW COMPLETION
@@ -150,14 +178,14 @@ The publish run is a single workflow with sequential stages. Expected timeline (
150
178
 
151
179
  Poll job-level status every 30 seconds and report stage transitions to the user:
152
180
  ```bash
153
- gh run view {run_id} --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
181
+ gh run view "${RUN_ID}" --json status,conclusion,jobs --jq '{status, conclusion, stage: ([.jobs[] | select(.status=="in_progress") | .name] | join(", "))}'
154
182
  ```
155
183
 
156
184
  **IMPORTANT: Use polling loop, NOT sleep commands.** Use the waiting time to draft the enhanced release summary (Step 6) — do not sit idle, and do not start any review activity.
157
185
 
158
186
  If conclusion is `failure`, show error and stop:
159
187
  ```bash
160
- gh run view {run_id} --log-failed
188
+ gh run view "${RUN_ID}" --log-failed
161
189
  ```
162
190
 
163
191
  ---
@@ -196,12 +196,20 @@ while true:
196
196
 
197
197
  ### Gate A: CI Checks
198
198
 
199
- CI is the fastest feedback loop. Wait for it to complete, then parse results.
199
+ CI is the fastest feedback loop. Subscribe to its completion via `monitor` never block a model round-trip on `gh pr checks --watch`.
200
200
 
201
- ```bash
202
- # Wait for checks to start (GitHub needs a moment after push)
203
- # Then watch for completion
204
- gh pr checks "$PR_NUMBER" --watch --fail-fast
201
+ ```
202
+ # Subscribe to CI completion the monitor event wakes the session when checks finish.
203
+ # Do NOT use `gh pr checks --watch` as a blocking tool call; it burns a full model
204
+ # round-trip (~29s) on every poll. Instead, register a monitor and end the turn:
205
+ monitor({
206
+ description: "CI completion for PR $PR_NUMBER",
207
+ command: "gh pr checks $PR_NUMBER --watch --fail-fast",
208
+ filter: "completed|fail|cancel"
209
+ })
210
+ # → end turn; the monitor's matching line arrives as an injected event.
211
+ # For a single midpoint status peek (at most once), use:
212
+ # gh pr checks "$PR_NUMBER" # one-shot, no --watch
205
213
  ```
206
214
 
207
215
  **On failure**: Get the failed run logs to understand what broke:
@@ -243,20 +251,21 @@ fi
243
251
 
244
252
  **On issues**: Cubic's review body contains structured issue descriptions. Parse them, determine which are valid (some may be false positives), and fix the valid ones per the iteration discipline below.
245
253
 
246
- Cubic reviews are triggered automatically on PR updates. After pushing a fix, wait for the new review to appear before checking again. Use `gh api` polling with a conditional loop:
254
+ Cubic reviews are triggered automatically on PR updates. After pushing a fix, subscribe to the new review arriving never spin a `for _ in $(seq 1 30)` polling loop that burns model round-trips.
247
255
 
248
- ```bash
249
- # Wait for a NEW Cubic review after push. If none arrives within the bound,
250
- # Cubic is out of quota (or not running) skip Gate B rather than spin forever.
256
+ ```
257
+ # Subscribe to a NEW Cubic review after push. The monitor exits when a review
258
+ # newer than PUSH_TIME appears, or times out (quota exhausted → Gate B SKIPPED).
251
259
  PUSH_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
252
- for _ in $(seq 1 30); do
253
- LATEST_REVIEW_TIME=$(gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" \
254
- --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at')
255
- [[ "$LATEST_REVIEW_TIME" > "$PUSH_TIME" ]] && break
256
- timeout 20 gh pr checks "$PR_NUMBER" --watch >/dev/null 2>&1 || true # spend the interval usefully
257
- done
258
- # Loop exhausted without a newer review treat Gate B as SKIPPED (quota exhausted)
259
- [[ "$LATEST_REVIEW_TIME" > "$PUSH_TIME" ]] || echo "Cubic: SKIPPED (no review within bound — quota exhausted)"
260
+ monitor({
261
+ description: "Cubic review for PR $PR_NUMBER",
262
+ command: "LATEST=$(gh api repos/${REPO}/pulls/${PR_NUMBER}/reviews --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at // empty'); [ -n \"$LATEST\" ] && [ \"$LATEST\" > \"$PUSH_TIME\" ] && echo NEW_REVIEW || echo WAITING",
263
+ filter: "NEW_REVIEW",
264
+ timeout_ms: 600000 # 10 min bound if no review arrives, Gate B is SKIPPED (quota exhausted)
265
+ })
266
+ # end turn; if the monitor times out without NEW_REVIEW, treat Gate B as SKIPPED.
267
+ # For a single midpoint peek (at most once), use:
268
+ # gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" --jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .submitted_at'
260
269
  ```
261
270
 
262
271
  ### Iteration discipline
@@ -292,13 +301,18 @@ gh pr merge "$PR_NUMBER" --merge --auto --delete-branch
292
301
  # are green, fall back to a direct merge: gh pr merge "$PR_NUMBER" --merge --delete-branch
293
302
  ```
294
303
 
295
- Then WAIT until the merge has actually completed before you report done or clean up - never walk away while the PR is still merging:
304
+ Then subscribe to the merge completing never block a model round-trip on an `until [ ... MERGED ]` polling loop:
296
305
 
297
- ```bash
298
- # Block until the PR is actually MERGED (auto-merge lands once all required checks pass)
299
- until [ "$(gh pr view "$PR_NUMBER" --json state -q .state)" = "MERGED" ]; do
300
- gh pr checks "$PR_NUMBER" --watch --fail-fast >/dev/null 2>&1 || true # spend the interval on the checks
301
- done
306
+ ```
307
+ # Subscribe to merge completion. The monitor exits when gh pr view returns MERGED.
308
+ monitor({
309
+ description: "Merge completion for PR $PR_NUMBER",
310
+ command: "[ \"$(gh pr view $PR_NUMBER --json state -q .state)\" = \"MERGED\" ] && echo MERGED || echo WAITING",
311
+ filter: "MERGED",
312
+ timeout_ms: 1800000 # 30 min bound for auto-merge to land after all gates pass
313
+ })
314
+ # → end turn; the MERGED event wakes the session for the cleanup step.
315
+ # If the monitor times out, check merge state once: gh pr view "$PR_NUMBER" --json state -q .state
302
316
  ```
303
317
 
304
318
  If the user opted out of merging, skip the merge but STILL run the cleanup below: the worktree is removed either way.
package/README.ja.md CHANGED
@@ -41,7 +41,7 @@
41
41
 
42
42
  <div align="center">
43
43
 
44
- <a href="https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent"><img src="./.github/assets/omo-logo.png" alt="OmO" width="200" /></a>
44
+ <a href="https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent"><img src="./.github/assets/omo-icon-light.svg" alt="OmO" width="200" /></a>
45
45
 
46
46
  [![Oh My OpenAgent](./.github/assets/hero.jpg)](https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent)
47
47
 
package/README.ko.md CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  <div align="center">
42
42
 
43
- <a href="https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent"><img src="./.github/assets/omo-logo.png" alt="OmO" width="200" /></a>
43
+ <a href="https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent"><img src="./.github/assets/omo-icon-light.svg" alt="OmO" width="200" /></a>
44
44
 
45
45
  [![Oh My OpenAgent](./.github/assets/hero.jpg)](https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent)
46
46
 
package/README.md CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  <div align="center">
42
42
 
43
- <a href="https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent"><img src="./.github/assets/omo-logo.png" alt="OmO" width="200" /></a>
43
+ <a href="https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent"><img src="./.github/assets/omo-icon-light.svg" alt="OmO" width="200" /></a>
44
44
 
45
45
  [![Oh My OpenAgent](./.github/assets/hero.jpg)](https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent)
46
46
 
@@ -111,10 +111,11 @@ Install oh-my-openagent. Type `ultrawork`. Done.
111
111
 
112
112
  ## Installation
113
113
 
114
- oh-my-openagent ships in two editions of the same product:
114
+ oh-my-openagent ships in three editions of the same product: two plugins that load into a host you already run, plus one standalone edition.
115
115
 
116
116
  - **Ultimate Edition (omo for OpenCode)** — full omo. 11 agents, 54+ lifecycle hooks, 5 built-in MCPs, all slash commands, Team Mode, ulw-loop, ultrawork, hashline edits — everything.
117
117
  - **Light Edition (omo for Codex CLI)** — the portable components that fit Codex's plugin system: `rules`, `comment-checker`, `git-bash`, `lsp`, `ultrawork`, `ulw-loop`, `start-work-continuation`, and `telemetry`, plus plugin-scoped MCPs for `grep_app`, `context7`, `codegraph`, `git_bash`, and `lsp`, and the shared `ast-grep` skill. No agent orchestration and no `team_*` tools — Codex CLI's own surface does that work.
118
+ - **Senpi Edition (standalone, beta)** — the native `omo` command with the OMO extension built in. It installs from `omo-ai@beta` rather than loading into OpenCode or Codex.
118
119
 
119
120
  Pick the edition(s) you want.
120
121
 
@@ -125,8 +126,19 @@ Pick the edition(s) you want.
125
126
  | **Ultimate** (OpenCode) | `bunx oh-my-openagent install` (TUI walks you through it) | Plugin registered in `opencode.json` + agent/model config + provider auth prompts |
126
127
  | **Light** (Codex CLI) | `npx lazycodex-ai install` | `~/.codex/plugins/cache/sisyphuslabs/omo/` + local Codex marketplace cache + `~/.codex/config.toml` marketplace/plugin/agent blocks + optional autonomous permissions + component CLIs in `~/.local/bin` |
127
128
  | **Both** | `bunx oh-my-openagent install --platform=both` | Both of the above |
129
+ | **Senpi edition** (beta) | `npm i -g omo-ai@beta`, then `omo` | The `omo` command: pinned senpi release with the OMO extension built in. Beta channel only; a bare `npm i -g omo-ai` fails by design. See the [install guide](docs/guide/installation.md#senpi-edition-beta-omo-via-npm-omo-ai). |
128
130
 
129
- `lazycodex-ai` defaults to the Codex Light installer and runs through Node/npm. `--platform` on the shared `omo` CLI still defaults to `opencode` (Ultimate).
131
+ `lazycodex-ai` defaults to the Codex Light installer and runs through Node/npm. `--platform` on the shared `omo-agent-toolkit` CLI still defaults to `opencode` (Ultimate).
132
+
133
+ ### Which edition should I pick?
134
+
135
+ - Already use OpenCode, or want the most-tested path? Choose **Ultimate**: `bunx oh-my-openagent install`.
136
+ - Already use Codex CLI? Choose **Light**: `npx lazycodex-ai install`.
137
+ - Want one command without installing a host first? Choose **Senpi/native (beta)**: `npm i -g omo-ai@beta`.
138
+
139
+ Ultimate and Light are plugins that load into a host you already run. Senpi is standalone: it ships a pinned Senpi engine with OMO built in.
140
+
141
+ For Senpi, the `@beta` tag is required; bare `npm i -g omo-ai` fails by design. Do not install plain `omo` from npm: it is an unrelated package by a different author.
130
142
 
131
143
  ### For Humans
132
144
 
@@ -163,7 +175,7 @@ The guide covers: platform selection, the subscription interview, provider authe
163
175
 
164
176
  The published npm package and CLI binary are still named `oh-my-opencode` (dual-published as `oh-my-openagent` during the rename transition). Inside `opencode.json`, the compatibility layer prefers the plugin entry `oh-my-openagent`, while legacy `oh-my-opencode` entries still load with a warning. Plugin config files still commonly use `oh-my-opencode.json[c]`; both legacy and renamed basenames are recognized.
165
177
 
166
- The recommended `bunx`/`npx` invocation is `oh-my-openagent install` (or the original `oh-my-opencode install`). The package also ships `omo` as a bin alias, but **do not** use `bunx omo` or `npx omo` `omo` is a different, unrelated npm package by a different author, and the package manager may resolve the wrong one. `lazycodex-ai` is a single-purpose Node/npm installer package: `npx lazycodex-ai install` routes directly to the Codex Light installer. It is not the Codex marketplace name (the marketplace repository is `code-yeongyu/lazycodex`). Codex sees marketplace `sisyphuslabs` and plugin `omo`, enabled as `omo@sisyphuslabs`.
178
+ The recommended `bunx`/`npx` invocation is `oh-my-openagent install` (or the original `oh-my-opencode install`). Once installed, the short command is `omo-agent-toolkit`. The `omo` bin was removed from these packages in this major release; the name now belongs to the senpi-native edition, installed with `npm i -g omo-ai@beta` (beta channel only). Do **not** use `bunx omo` or `npx omo`: `omo` on npm is a different, unrelated package by a different author, and those commands resolve to it. The senpi edition's package name is `omo-ai`. `lazycodex-ai` is a single-purpose Node/npm installer package: `npx lazycodex-ai install` routes directly to the Codex Light installer. It is not the Codex marketplace name (the marketplace repository is `code-yeongyu/lazycodex`). Codex sees marketplace `sisyphuslabs` and plugin `omo`, enabled as `omo@sisyphuslabs`.
167
179
 
168
180
  ### Telemetry
169
181
 
@@ -411,9 +423,9 @@ To remove oh-my-openagent:
411
423
  # backward-compatible alias:
412
424
  npx lazycodex-ai cleanup
413
425
 
414
- omo uninstall --platform=codex
426
+ omo-agent-toolkit uninstall --platform=codex
415
427
  # backward-compatible alias:
416
- omo cleanup --platform=codex
428
+ omo-agent-toolkit cleanup --platform=codex
417
429
  ```
418
430
 
419
431
  The uninstall command removes managed `sisyphuslabs` Codex cache/marketplace state, strips `omo@sisyphuslabs` plugin and hook-state blocks from `~/.codex/config.toml` after writing a backup, and removes agent TOML links listed in the install manifest. If a specific project still has old project-local Codex plugin state, run the command from that project or pass `--project <path>`; it repairs known project-local `.codex/config.toml` conflicts and reports project-local `.codex` artifacts without deleting project-owned files.
package/README.ru.md CHANGED
@@ -41,7 +41,7 @@
41
41
 
42
42
  <div align="center">
43
43
 
44
- <a href="https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent"><img src="./.github/assets/omo-logo.png" alt="OmO" width="200" /></a>
44
+ <a href="https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent"><img src="./.github/assets/omo-icon-light.svg" alt="OmO" width="200" /></a>
45
45
 
46
46
  [![Oh My OpenAgent](./.github/assets/hero.jpg)](https://github.com/code-yeongyu/oh-my-openagent#oh-my-openagent)
47
47