oh-my-opencode 4.5.12 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.agents/skills/opencode-qa/SKILL.md +194 -0
  2. package/.agents/skills/opencode-qa/references/cli-commands.md +188 -0
  3. package/.agents/skills/opencode-qa/references/db-investigation.md +197 -0
  4. package/.agents/skills/opencode-qa/references/events-hooks.md +110 -0
  5. package/.agents/skills/opencode-qa/references/sdk.md +96 -0
  6. package/.agents/skills/opencode-qa/references/server-api.md +200 -0
  7. package/.agents/skills/opencode-qa/references/testing-harness.md +218 -0
  8. package/.agents/skills/opencode-qa/references/tui-tmux.md +52 -0
  9. package/.agents/skills/opencode-qa/scripts/db-session-by-id.sh +53 -0
  10. package/.agents/skills/opencode-qa/scripts/db-session-by-name.sh +57 -0
  11. package/.agents/skills/opencode-qa/scripts/db-session-by-text.sh +158 -0
  12. package/.agents/skills/opencode-qa/scripts/export-roundtrip.sh +57 -0
  13. package/.agents/skills/opencode-qa/scripts/lib/common.sh +216 -0
  14. package/.agents/skills/opencode-qa/scripts/server-smoke.sh +64 -0
  15. package/.agents/skills/opencode-qa/scripts/sse-hook-probe.sh +106 -0
  16. package/.agents/skills/opencode-qa/scripts/tui-smoke.sh +89 -0
  17. package/README.ja.md +13 -3
  18. package/README.ko.md +13 -3
  19. package/README.md +24 -14
  20. package/README.ru.md +13 -3
  21. package/README.zh-cn.md +13 -3
  22. package/bin/oh-my-opencode.js +4 -3
  23. package/bin/oh-my-opencode.test.ts +35 -7
  24. package/bin/platform.d.ts +1 -1
  25. package/bin/platform.js +4 -4
  26. package/bin/platform.test.ts +31 -9
  27. package/dist/cli/cleanup-command.d.ts +4 -0
  28. package/dist/cli/cleanup.d.ts +11 -0
  29. package/dist/cli/cli-program.d.ts +2 -1
  30. package/dist/cli/index.js +1837 -450
  31. package/dist/cli/install-codex/codex-cache.d.ts +1 -0
  32. package/dist/cli/install-codex/codex-cleanup-config.d.ts +6 -0
  33. package/dist/cli/install-codex/codex-cleanup.d.ts +21 -0
  34. package/dist/cli/install-codex/codex-config-mcp.d.ts +1 -0
  35. package/dist/cli/install-codex/codex-config-permissions.d.ts +1 -0
  36. package/dist/cli/install-codex/codex-config-reasoning.d.ts +1 -0
  37. package/dist/cli/install-codex/codex-config-toml.d.ts +2 -1
  38. package/dist/cli/install-codex/codex-installation-detection.d.ts +36 -0
  39. package/dist/cli/install-codex/codex-package-layout.d.ts +1 -0
  40. package/dist/cli/install-codex/codex-project-local-cleanup-best-effort.d.ts +7 -0
  41. package/dist/cli/install-codex/codex-project-local-cleanup.d.ts +35 -0
  42. package/dist/cli/install-codex/git-bash.d.ts +35 -0
  43. package/dist/cli/install-codex/index.d.ts +4 -0
  44. package/dist/cli/install-codex/toml-section-editor.d.ts +2 -0
  45. package/dist/cli/install-codex/types.d.ts +20 -0
  46. package/dist/cli/run/event-state.d.ts +1 -0
  47. package/dist/cli/run/poll-for-completion.d.ts +1 -0
  48. package/dist/cli/run/prompt-start.d.ts +7 -0
  49. package/dist/cli/star-request.d.ts +9 -0
  50. package/dist/config/schema/hooks.d.ts +0 -1
  51. package/dist/create-hooks.d.ts +0 -1
  52. package/dist/features/builtin-skills/skills/debugging.d.ts +2 -0
  53. package/dist/features/builtin-skills/skills/index.d.ts +1 -0
  54. package/dist/hooks/index.d.ts +0 -1
  55. package/dist/index.js +267 -114
  56. package/dist/plugin/hooks/create-core-hooks.d.ts +0 -1
  57. package/dist/plugin/hooks/create-session-hooks.d.ts +1 -2
  58. package/dist/plugin/messages-transform.d.ts +8 -1
  59. package/dist/plugin/user-abort-interrupted-recovery-guard.d.ts +6 -0
  60. package/dist/shared/prompt-async-gate/recent-dispatches.d.ts +14 -0
  61. package/dist/shared/prompt-async-gate/semantic-dedupe.d.ts +7 -0
  62. package/dist/shared/prompt-async-gate/session-idle-dispatch.d.ts +1 -0
  63. package/dist/shared/prompt-async-gate/timing.d.ts +1 -0
  64. package/dist/shared/prompt-async-gate/types.d.ts +2 -0
  65. package/dist/shared/prompt-async-gate.d.ts +1 -1
  66. package/package.json +22 -17
  67. package/packages/git-bash-mcp/dist/cli.js +367 -0
  68. package/packages/omo-codex/plugin/.mcp.json +11 -0
  69. package/packages/omo-codex/plugin/components/comment-checker/README.md +1 -1
  70. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +29 -0
  71. package/packages/omo-codex/plugin/components/git-bash/package.json +23 -0
  72. package/packages/omo-codex/plugin/components/git-bash/src/cli.ts +33 -0
  73. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +180 -0
  74. package/packages/omo-codex/plugin/components/git-bash/src/index.ts +10 -0
  75. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +195 -0
  76. package/packages/omo-codex/plugin/components/git-bash/tsconfig.build.json +13 -0
  77. package/packages/omo-codex/plugin/components/git-bash/tsconfig.json +25 -0
  78. package/packages/omo-codex/plugin/components/lsp/README.md +1 -1
  79. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +5 -5
  80. package/packages/omo-codex/plugin/components/lsp/src/codex-hook-cli.ts +33 -0
  81. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +19 -27
  82. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-cli.test.ts +28 -0
  83. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-errors.test.ts +55 -0
  84. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +7 -5
  85. package/packages/omo-codex/plugin/components/rules/README.md +1 -1
  86. package/packages/omo-codex/plugin/components/rules/bundled-rules/windows-git-bash.md +10 -0
  87. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +3 -1
  88. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +97 -0
  89. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +5 -4
  90. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +22 -0
  91. package/packages/omo-codex/plugin/components/ultrawork/README.md +2 -2
  92. package/packages/omo-codex/plugin/components/ultrawork/agents/codex-ultrawork-reviewer.toml +1 -0
  93. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +8 -7
  94. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -1
  95. package/packages/omo-codex/plugin/components/ultrawork/directive.md +31 -5
  96. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +27 -4
  97. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +25 -0
  98. package/packages/omo-codex/plugin/components/ulw-loop/README.md +1 -1
  99. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +27 -205
  100. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +230 -0
  101. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +102 -5
  102. package/packages/omo-codex/plugin/hooks/hooks.json +24 -2
  103. package/packages/omo-codex/plugin/package-lock.json +19 -0
  104. package/packages/omo-codex/plugin/package.json +3 -1
  105. package/packages/omo-codex/plugin/scripts/build-bundled-mcp-runtimes.mjs +16 -1
  106. package/packages/omo-codex/plugin/scripts/build-components.mjs +2 -1
  107. package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +87 -0
  108. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +27 -2
  109. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +20 -0
  110. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +27 -205
  111. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +230 -0
  112. package/packages/omo-codex/plugin/test/aggregate.test.mjs +23 -8
  113. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +56 -11
  114. package/packages/omo-codex/plugin/test/install-time-build-runtime.test.mjs +34 -0
  115. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +21 -0
  116. package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +48 -0
  117. package/packages/omo-codex/plugin/test/subagent-guidance.test.mjs +76 -0
  118. package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +66 -0
  119. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +32 -2
  120. package/packages/omo-codex/scripts/install/cache.mjs +5 -3
  121. package/packages/omo-codex/scripts/install/cli-args.mjs +112 -0
  122. package/packages/omo-codex/scripts/install/config.mjs +36 -1
  123. package/packages/omo-codex/scripts/install/delegated-command.mjs +25 -0
  124. package/packages/omo-codex/scripts/install/git-bash.mjs +99 -0
  125. package/packages/omo-codex/scripts/install/git-bash.test.mjs +174 -0
  126. package/packages/omo-codex/scripts/install/mcp-runtime-cache.mjs +5 -1
  127. package/packages/omo-codex/scripts/install/multi-agent-v2-config.mjs +7 -1
  128. package/packages/omo-codex/scripts/install/permissions.d.mts +1 -0
  129. package/packages/omo-codex/scripts/install/permissions.mjs +26 -0
  130. package/packages/omo-codex/scripts/install/project-local-cleanup.mjs +229 -0
  131. package/packages/omo-codex/scripts/install/reasoning-config.mjs +14 -0
  132. package/packages/omo-codex/scripts/install/source-package-build.mjs +20 -0
  133. package/packages/omo-codex/scripts/install/toml-editor.mjs +19 -2
  134. package/packages/omo-codex/scripts/install-cli-args.test.mjs +146 -0
  135. package/packages/omo-codex/scripts/install-config-autonomous.test.mjs +48 -0
  136. package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +62 -0
  137. package/packages/omo-codex/scripts/install-config.test.mjs +206 -0
  138. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +129 -0
  139. package/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs +145 -0
  140. package/packages/omo-codex/scripts/install-local.mjs +91 -8
  141. package/packages/omo-codex/scripts/install-local.test.mjs +15 -0
  142. package/packages/omo-codex/scripts/install-mcp-runtime.test.mjs +60 -0
  143. package/packages/omo-codex/scripts/install-packaged-local.test.mjs +67 -0
  144. package/packages/omo-codex/scripts/install-project-local-cleanup.test.mjs +277 -0
  145. package/packages/shared-skills/skills/review-work/SKILL.md +27 -2
  146. package/packages/shared-skills/skills/start-work/SKILL.md +20 -0
  147. package/dist/hooks/context-window-monitor.d.ts +0 -19
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # tui-smoke.sh - launch the opencode TUI under tmux in an ISOLATED sandbox,
3
+ # confirm it renders, prove send-keys reaches the composer, then tear down.
4
+ #
5
+ # This is a feasibility/smoke check, NOT a functional assertion harness. The
6
+ # TUI is a 60fps full-screen app; reading its frame is fine for "did it boot
7
+ # and accept a keystroke", but brittle for asserting conversation output. For
8
+ # real behavior assertions use `opencode run` (Case A) or the server API /
9
+ # SSE probe (Case B). See references/tui-tmux.md.
10
+ #
11
+ # Safety: runs opencode under an isolated XDG sandbox so no session is written
12
+ # to the real ~/.local/share/opencode DB; the tmux session is always killed.
13
+ #
14
+ # Usage:
15
+ # tui-smoke.sh # run the smoke test
16
+ # tui-smoke.sh --self-test # same
17
+
18
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
19
+ . "$SCRIPT_DIR/lib/common.sh"
20
+
21
+ oqa_tui_smoke() {
22
+ oqa_require opencode tmux jq sqlite3 || return 1
23
+ local before after realdb ver sess cap found="" i fails=0
24
+ # Capture the REAL DB path + count BEFORE isolation. We must read it with
25
+ # sqlite3 directly: once oqa_mk_isolated_xdg exports XDG_DATA_HOME, `opencode
26
+ # db` would resolve the empty sandbox DB instead of the real one.
27
+ realdb="$(oqa_db_path)"
28
+ before="$(sqlite3 "$realdb" "SELECT count(*) FROM session" 2>/dev/null)"
29
+ ver="$(opencode --version 2>/dev/null | head -1 | tr -d '[:space:]')"
30
+
31
+ oqa_mk_isolated_xdg
32
+ sess="oqa_tui_${$}_${RANDOM}"
33
+ OQA_TMUX_SESSIONS+=("$sess")
34
+ tmux new-session -d -s "$sess" -x 200 -y 50
35
+ # launch the TUI inside the pane, carrying the isolated sandbox env
36
+ tmux send-keys -t "$sess" \
37
+ "XDG_DATA_HOME='$XDG_DATA_HOME' XDG_CONFIG_HOME='$XDG_CONFIG_HOME' XDG_CACHE_HOME='$XDG_CACHE_HOME' XDG_STATE_HOME='$XDG_STATE_HOME' OPENCODE_DISABLE_AUTOUPDATE=1 OPENCODE_DISABLE_MODELS_FETCH=1 opencode '$OQA_PROJ'" Enter
38
+
39
+ # poll for a render marker (version string, composer placeholder, or footer)
40
+ for ((i=0; i<50; i++)); do
41
+ cap="$(tmux capture-pane -t "$sess" -p 2>/dev/null)"
42
+ if printf '%s' "$cap" | grep -Eq "${ver}|Ask anything|ctrl\+p|agents"; then found=1; break; fi
43
+ sleep 0.5
44
+ done
45
+ if [ -n "$found" ]; then
46
+ oqa_pass "TUI rendered under tmux (marker found; version ${ver:-?})"
47
+ else
48
+ oqa_log "FAIL: TUI did not render a known marker in 25s; pane was:"; printf '%s\n' "$cap" | head -8 >&2
49
+ fails=$((fails+1))
50
+ fi
51
+
52
+ # prove send-keys reaches the composer: type a sentinel, expect it on screen
53
+ if [ -n "$found" ]; then
54
+ tmux send-keys -t "$sess" "oqaXYZ"
55
+ sleep 1
56
+ cap="$(tmux capture-pane -t "$sess" -p 2>/dev/null)"
57
+ if printf '%s' "$cap" | grep -q "oqaXYZ"; then
58
+ oqa_pass "send-keys reached the TUI composer (sentinel echoed)"
59
+ else
60
+ oqa_log "WARN: sentinel not visible (TUI may have remapped input); render still proven"
61
+ fi
62
+ fi
63
+
64
+ # teardown + verify
65
+ tmux kill-session -t "$sess" 2>/dev/null || true
66
+ sleep 0.5
67
+ if tmux has-session -t "$sess" 2>/dev/null; then
68
+ oqa_log "FAIL: tmux session survived teardown"; fails=$((fails+1))
69
+ else
70
+ oqa_pass "tmux session torn down (has-session false)"
71
+ fi
72
+
73
+ after="$(sqlite3 "$realdb" "SELECT count(*) FROM session" 2>/dev/null)"
74
+ if [ "$before" = "$after" ]; then
75
+ oqa_pass "real DB untouched (session count $before unchanged)"
76
+ else
77
+ oqa_log "FAIL: real DB session count changed $before -> $after"; fails=$((fails+1))
78
+ fi
79
+
80
+ [ "$fails" -eq 0 ] && { oqa_pass "tui-smoke"; return 0; }
81
+ oqa_log "tui-smoke had $fails failure(s)"; return 1
82
+ }
83
+
84
+ case "${1:-}" in
85
+ -h|--help)
86
+ sed -n '2,20p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
87
+ exit 0 ;;
88
+ *) oqa_tui_smoke; exit $? ;;
89
+ esac
package/README.ja.md CHANGED
@@ -1,3 +1,13 @@
1
+ > [!NOTE]
2
+ > **🚀 初の Codex リリース:omo が Codex CLI で利用可能になりました**
3
+ >
4
+ > 複雑な JSON 設定はもう不要です。以下を実行するだけ:
5
+ > ```bash
6
+ > npx lazycodex-ai install
7
+ > ```
8
+ > あなたの Codex は明確にコーディングし、組み込みの computer-use QA で作業を完了します。
9
+ > 詳細は [lazycodex.ai](https://lazycodex.ai) をご覧ください。
10
+
1
11
  > [!NOTE]
2
12
  > **マルチハーネスエージェントOSへのリファクタリング進行中**
3
13
  >
@@ -123,7 +133,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head
123
133
 
124
134
  匿名のテレメトリは、アクティブなインストール数(DAU/WAU/MAU)の集計のためにデフォルトで有効になっています。マシン1台につきUTC日あたり最大1回イベントが送信され、ハッシュ化されたインストール識別子を使用し、生のホスト名は使用せず、PostHog person profile も作成されません。無効化するには `OMO_SEND_ANONYMOUS_TELEMETRY=0` または `OMO_DISABLE_POSTHOG=1` を設定してください。[プライバシーポリシー](docs/legal/privacy-policy.md)と[利用規約](docs/legal/terms-of-service.md)をご覧ください。
125
135
 
126
- **Ultimate と Light:** oh-my-openagent は同じ製品の 2 つのエディションとして提供されます。**Ultimate エディション**(`bunx omo install` または `--platform=opencode`、デフォルト)は OpenCode 上のフル機能で、11 エージェント、54+ フック、Team Mode、すべての MCP、スラッシュコマンド、IntentGate モードを提供します。**Light エディション**(`bunx omo install --platform=codex`)は OpenAI Codex CLI のプラグインシステムへ綺麗に移植できる 5 コンポーネント(`rules`、`comment-checker`、`lsp`、`ultrawork`、`ulw-loop`)のみを提供します。`bunx lazycodex install` は `--platform=codex` のショートカット別名です。両方を同時にインストールするには `--platform=both`。Codex 専用テレメトリは `OMO_CODEX_DISABLE_POSTHOG=1` または `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0` で無効化できます。
136
+ **Ultimate と Light:** oh-my-openagent は同じ製品の 2 つのエディションとして提供されます。**Ultimate エディション**(`bunx oh-my-openagent install` または `--platform=opencode`、デフォルト)は OpenCode 上のフル機能で、11 エージェント、54+ フック、Team Mode、すべての MCP、スラッシュコマンド、IntentGate モードを提供します。**Light エディション**(`bunx oh-my-openagent install --platform=codex`)は OpenAI Codex CLI のプラグインシステムへ綺麗に移植できる 5 コンポーネント(`rules`、`comment-checker`、`lsp`、`ultrawork`、`ulw-loop`)のみを提供します。`bunx lazycodex-ai install` は `--platform=codex` のショートカット別名です。両方を同時にインストールするには `--platform=both`。Codex 専用テレメトリは `OMO_CODEX_DISABLE_POSTHOG=1` または `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0` で無効化できます。
127
137
 
128
138
  ---
129
139
 
@@ -155,7 +165,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
155
165
  | | 機能 | Editions | 何をするのか |
156
166
  | :---: | :------------------------------------------------------- | :------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
157
167
  | 🤖 | **規律あるエージェント (Discipline Agents)** | Ultimate | Sisyphus が Hephaestus、Oracle、Librarian、Explore をオーケストレーションします。完全な AI 開発チームが並列で動きます。 |
158
- | 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI 上で動作する omo の 5 つの移植コンポーネント (rules, comment-checker, LSP, ultrawork, ulw-loop)。インストール: `bunx omo install --platform=codex`。 |
168
+ | 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI 上で動作する omo の 5 つの移植コンポーネント (rules, comment-checker, LSP, ultrawork, ulw-loop)。インストール: `bunx oh-my-openagent install --platform=codex`。 |
159
169
  | 👥 | **Team Mode** (v4.0, オプトイン) | Ultimate | リードエージェント + 最大 8 メンバーの並列実行、リアルタイム tmux 可視化、専用 `team_*` ツール群。`hyperplan`(5 人の敵対的批評家)と `security-research`(3 人のハンター + 2 人の PoC エンジニア)を駆動します。[ドキュメント →](docs/guide/team-mode.md) |
160
170
  | ⚡ | **`ultrawork` / `ulw`** | Both | 一言で OK。すべてのエージェント (Ultimate) または Codex `ultrawork` コンポーネント (Light) がアクティブになり、終わるまで止まりません。 |
161
171
  | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Ultimate | ユーザーの真の意図を分析してから分類・行動します。`search` / `analyze` / `team` / `hyperplan` をトリガー。(Light は `ulw` / `ultrawork` のみフック。) |
@@ -174,7 +184,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
174
184
  | 📋 | **Prometheus プランナー** | Ultimate | インタビューモードで、実行前に戦略的な計画から立てます。 |
175
185
  | 🔍 | **`/init-deep`** | Ultimate | プロジェクト全体にわたって階層的な `AGENTS.md` ファイルを自動生成。トークン効率とエージェントのパフォーマンスの両方を向上させます。 |
176
186
 
177
- > **Editions legend.** **Ultimate** = OpenCode 専用 (`bunx omo install`)。**Light** = Codex CLI 専用 (`bunx omo install --platform=codex`)。**Both** = 両エディションに提供、しばしば内部実装は若干異なる。
187
+ > **Editions legend.** **Ultimate** = OpenCode 専用 (`bunx oh-my-openagent install`)。**Light** = Codex CLI 専用 (`bunx oh-my-openagent install --platform=codex`)。**Both** = 両エディションに提供、しばしば内部実装は若干異なる。
178
188
 
179
189
  ### 規律あるエージェント (Discipline Agents)
180
190
 
package/README.ko.md CHANGED
@@ -1,3 +1,13 @@
1
+ > [!NOTE]
2
+ > **🚀 첫 Codex 버전 출시: omo 이제 Codex CLI에서 사용 가능합니다**
3
+ >
4
+ > 더 이상 복잡한 JSON 설정은 필요 없습니다. 그냥 실행하세요:
5
+ > ```bash
6
+ > npx lazycodex-ai install
7
+ > ```
8
+ > 당신의 Codex가 명확하게 코딩하고, 내장 computer-use QA로 작업을 완수합니다.
9
+ > 자세한 내용은 [lazycodex.ai](https://lazycodex.ai)에서 확인하세요.
10
+
1
11
  > [!NOTE]
2
12
  > **멀티 하니스 에이전트 OS 리팩토링 진행 중**
3
13
  >
@@ -124,7 +134,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head
124
134
 
125
135
  익명 텔레메트리는 활성 설치 수(DAU/WAU/MAU) 집계를 위해 기본적으로 활성화되어 있습니다. 머신당 UTC 하루에 최대 1회만 이벤트가 전송되며, 해시된 설치 식별자를 사용하고 원시 호스트명은 절대 사용하지 않으며 PostHog person profile은 생성되지 않습니다. `OMO_SEND_ANONYMOUS_TELEMETRY=0` 또는 `OMO_DISABLE_POSTHOG=1`로 비활성화할 수 있습니다. [개인정보처리방침](docs/legal/privacy-policy.md)과 [서비스 이용약관](docs/legal/terms-of-service.md)을 참조하세요.
126
136
 
127
- **Ultimate vs Light:** oh-my-openagent는 같은 제품의 두 에디션으로 출시됩니다. **Ultimate 에디션**(`bunx omo install` 또는 `--platform=opencode`, 기본값)은 OpenCode 위에서 풀 기능 — 11 agent, 54+ hook, Team Mode, 모든 MCP, 슬래시 명령, IntentGate 모드 — 을 제공합니다. **Light 에디션**(`bunx omo install --platform=codex`)은 OpenAI Codex CLI의 플러그인 시스템에 깔끔히 포팅되는 5개 컴포넌트(`rules`, `comment-checker`, `lsp`, `ultrawork`, `ulw-loop`)만 제공합니다. `bunx lazycodex install`은 `--platform=codex`의 단축 별칭입니다. 둘 다 설치하려면 `--platform=both`. Codex 전용 텔레메트리는 `OMO_CODEX_DISABLE_POSTHOG=1` 또는 `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0`으로 비활성화할 수 있습니다.
137
+ **Ultimate vs Light:** oh-my-openagent는 같은 제품의 두 에디션으로 출시됩니다. **Ultimate 에디션**(`bunx oh-my-openagent install` 또는 `--platform=opencode`, 기본값)은 OpenCode 위에서 풀 기능 — 11 agent, 54+ hook, Team Mode, 모든 MCP, 슬래시 명령, IntentGate 모드 — 을 제공합니다. **Light 에디션**(`bunx oh-my-openagent install --platform=codex`)은 OpenAI Codex CLI의 플러그인 시스템에 깔끔히 포팅되는 5개 컴포넌트(`rules`, `comment-checker`, `lsp`, `ultrawork`, `ulw-loop`)만 제공합니다. `bunx lazycodex-ai install`은 `--platform=codex`의 단축 별칭입니다. 둘 다 설치하려면 `--platform=both`. Codex 전용 텔레메트리는 `OMO_CODEX_DISABLE_POSTHOG=1` 또는 `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0`으로 비활성화할 수 있습니다.
128
138
 
129
139
  ---
130
140
 
@@ -156,7 +166,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
156
166
  | | 기능 | Editions | 하는 일 |
157
167
  | :---: | :------------------------------------------------------- | :------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
158
168
  | 🤖 | **Discipline Agents** | Ultimate | Sisyphus가 Hephaestus, Oracle, Librarian, Explore를 지휘합니다. 병렬로 도는 풀스택 AI 개발팀. |
159
- | 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI에서 동작하는 omo의 5개 포팅 컴포넌트(rules, comment-checker, LSP, ultrawork, ulw-loop). 설치: `bunx omo install --platform=codex`. |
169
+ | 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI에서 동작하는 omo의 5개 포팅 컴포넌트(rules, comment-checker, LSP, ultrawork, ulw-loop). 설치: `bunx oh-my-openagent install --platform=codex`. |
160
170
  | 👥 | **Team Mode** (v4.0, opt-in) | Ultimate | 리드 에이전트 + 최대 8명의 병렬 멤버, 실시간 tmux 시각화, 전용 `team_*` 도구. `hyperplan`(5명의 적대적 비평가)과 `security-research`(3명의 헌터 + 2명의 PoC 엔지니어)를 구동합니다. [문서 →](docs/guide/team-mode.md) |
161
171
  | ⚡ | **`ultrawork` / `ulw`** | Both | 한 단어. 모든 에이전트(Ultimate)나 Codex `ultrawork` 컴포넌트(Light)가 켜집니다. 끝날 때까지 멈추지 않습니다. |
162
172
  | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Ultimate | 분류하거나 행동하기 전에 사용자의 진짜 의도부터 분석합니다. `search` / `analyze` / `team` / `hyperplan` 트리거. (Light는 `ulw` / `ultrawork`만 hook.) |
@@ -175,7 +185,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
175
185
  | 📋 | **Prometheus Planner** | Ultimate | 실행 전 인터뷰 모드로 전략 플래닝. |
176
186
  | 🔍 | **`/init-deep`** | Ultimate | 프로젝트 전반에 계층형 `AGENTS.md` 파일을 자동 생성합니다. 토큰 효율에도, 에이전트 성능에도 좋습니다. |
177
187
 
178
- > **Editions legend.** **Ultimate** = OpenCode 전용 (`bunx omo install`). **Light** = Codex CLI 전용 (`bunx omo install --platform=codex`). **Both** = 두 에디션 모두 제공, 종종 내부 구현은 약간 다름.
188
+ > **Editions legend.** **Ultimate** = OpenCode 전용 (`bunx oh-my-openagent install`). **Light** = Codex CLI 전용 (`bunx oh-my-openagent install --platform=codex`). **Both** = 두 에디션 모두 제공, 종종 내부 구현은 약간 다름.
179
189
 
180
190
  ### Discipline Agents
181
191
 
package/README.md CHANGED
@@ -1,3 +1,13 @@
1
+ > [!NOTE]
2
+ > **🚀 First Codex Release: omo is now available for Codex CLI**
3
+ >
4
+ > No more complex JSON configurations. Just run:
5
+ > ```bash
6
+ > npx lazycodex-ai install
7
+ > ```
8
+ > Your Codex will code clearly and complete tasks using built-in computer-use QA.
9
+ > Learn more at [lazycodex.ai](https://lazycodex.ai).
10
+
1
11
  > [!NOTE]
2
12
  > **Multi-Harness Agent OS Refactor in Progress**
3
13
  >
@@ -112,11 +122,11 @@ Pick the edition(s) you want.
112
122
 
113
123
  | You want | Run | What lands on disk |
114
124
  | :--- | :--- | :--- |
115
- | **Ultimate** (OpenCode) | `bunx omo install` (TUI walks you through it) | Plugin registered in `opencode.json` + agent/model config + provider auth prompts |
116
- | **Light** (Codex CLI) | `bunx omo install --platform=codex` or `bunx lazycodex 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` |
117
- | **Both** | `bunx omo install --platform=both` | Both of the above |
125
+ | **Ultimate** (OpenCode) | `bunx oh-my-openagent install` (TUI walks you through it) | Plugin registered in `opencode.json` + agent/model config + provider auth prompts |
126
+ | **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
+ | **Both** | `bunx oh-my-openagent install --platform=both` | Both of the above |
118
128
 
119
- `--platform` defaults to `opencode` (Ultimate). The `bunx lazycodex install` alias is a shortcut for `bunx omo install --platform=codex`; use whichever reads cleaner.
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).
120
130
 
121
131
  ### For Humans
122
132
 
@@ -132,14 +142,12 @@ https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/heads/dev/do
132
142
  If you only want the **Light edition** (Codex CLI), the installer asks whether to configure Codex for autonomous full-permissions mode. You can run it yourself in one line:
133
143
 
134
144
  ```bash
135
- bunx omo install --platform=codex
136
- # equivalent:
137
- bunx lazycodex install
145
+ npx lazycodex-ai install
138
146
  # non-interactive recommended mode:
139
- bunx lazycodex install --no-tui --codex-autonomous
147
+ npx lazycodex-ai install --no-tui --codex-autonomous
140
148
  ```
141
149
 
142
- > **Do not** use `npm install -g`, `bun add -g`, or `bun install -g`. Global installation is not officially supported oh-my-openagent is a plugin that must resolve from where OpenCode/Codex loads plugins. Always invoke via `bunx`.
150
+ For the Light edition, Bun is not required. Use `npx lazycodex-ai install` from a Node/npm environment. Global installation is not officially supported; the installer writes the Codex plugin into `~/.codex/`.
143
151
 
144
152
  ### For LLM Agents
145
153
 
@@ -155,7 +163,7 @@ The guide covers: platform selection, the subscription interview, provider authe
155
163
 
156
164
  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.
157
165
 
158
- All four `bunx` aliases - `oh-my-opencode`, `oh-my-openagent`, `omo`, `lazycodex` - invoke the same compiled CLI. `omo` is the recommended short form for documentation and prompts. `lazycodex` is a single-purpose npm/bin alias: `bunx lazycodex install` is exactly equivalent to `bunx omo install --platform=codex`. It is not the Codex marketplace name. Codex sees marketplace `sisyphuslabs` and plugin `omo`, enabled as `omo@sisyphuslabs`.
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`.
159
167
 
160
168
  ### Telemetry
161
169
 
@@ -204,7 +212,7 @@ Even with only the following subscriptions, `ultrawork` works well (this project
204
212
  | | Feature | Edition | What it does |
205
213
  | :---: | :------------------------------------------------------- | :------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
206
214
  | 🤖 | **Discipline Agents** | Ultimate | Sisyphus orchestrates Hephaestus, Oracle, Librarian, Explore. A full AI dev team in parallel. |
207
- | 🧩 | **Codex CLI Light Edition** | Light | Portable OMO components (rules, comment-checker, LSP, ultrawork, ulw-loop, start-work continuation, telemetry) running inside OpenAI Codex CLI. Install via `bunx omo install --platform=codex`. |
215
+ | 🧩 | **Codex CLI Light Edition** | Light | Portable OMO components (rules, comment-checker, LSP, ultrawork, ulw-loop, start-work continuation, telemetry) running inside OpenAI Codex CLI. Install via `npx lazycodex-ai install`. |
208
216
  | 👥 | **Team Mode** (v4.0, opt-in) | Ultimate | Lead agent + up to 8 parallel members, real-time tmux visualization, dedicated `team_*` tools. Powers `hyperplan` (5 hostile critics) and `security-research` (3 hunters + 2 PoC engineers). [Docs →](docs/guide/team-mode.md) |
209
217
  | ⚡ | **`ultrawork` / `ulw`** | Both | One word. Every agent activates. Doesn't stop until done. |
210
218
  | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Ultimate | Analyzes true user intent before classifying or acting. No more literal misinterpretations. (Light edition only recognises the `ultrawork`/`ulw` keyword.) |
@@ -224,7 +232,7 @@ Even with only the following subscriptions, `ultrawork` works well (this project
224
232
  | 📋 | **Prometheus Planner** | Ultimate | Interview-mode strategic planning before any execution. |
225
233
  | 🔍 | **`/init-deep`** | Ultimate | Auto-generates hierarchical `AGENTS.md` files throughout your project. Great for both token efficiency and your agent's performance. |
226
234
 
227
- > **Edition legend.** **Ultimate** = OpenCode-only (`bunx omo install`). **Light** = Codex CLI-only (`bunx omo install --platform=codex`). **Both** = shipped in both editions, often with slightly different implementations under the hood.
235
+ > **Edition legend.** **Ultimate** = OpenCode-only (`bunx oh-my-openagent install`). **Light** = Codex CLI-only (`npx lazycodex-ai install`). **Both** = shipped in both editions, often with slightly different implementations under the hood.
228
236
 
229
237
  ### Discipline Agents
230
238
 
@@ -399,10 +407,12 @@ To remove oh-my-openagent:
399
407
  4. **Remove omo-codex (Codex CLI Light edition)**
400
408
 
401
409
  ```bash
402
- rm -rf ~/.codex/plugins/cache/sisyphuslabs
410
+ npx lazycodex-ai cleanup
411
+ # or, from the shared CLI:
412
+ omo cleanup --platform=codex
403
413
  ```
404
414
 
405
- Then open `~/.codex/config.toml` and remove `[marketplaces.sisyphuslabs]`, `[plugins."omo@sisyphuslabs"]`, and any `[hooks.state."omo@sisyphuslabs:..."]` blocks.
415
+ The cleanup 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 `oh-my-codex` / `omx` state, run the command from that project or pass `--project <path>`; it repairs the known project-local `.codex/config.toml` conflict and reports `.codex` / `.omx` artifacts without deleting project-owned files.
406
416
 
407
417
  ## Features
408
418
 
package/README.ru.md CHANGED
@@ -1,3 +1,13 @@
1
+ > [!NOTE]
2
+ > **🚀 Первый релиз для Codex: omo теперь доступен в Codex CLI**
3
+ >
4
+ > Никаких сложных JSON-конфигураций. Просто выполните:
5
+ > ```bash
6
+ > npx lazycodex-ai install
7
+ > ```
8
+ > Ваш Codex будет писать чистый код и завершать задачи с помощью встроенного computer-use QA.
9
+ > Подробности на [lazycodex.ai](https://lazycodex.ai).
10
+
1
11
  > [!NOTE]
2
12
  > **Рефакторинг в сторону мульти-harness агентной ОС**
3
13
  >
@@ -121,7 +131,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head
121
131
 
122
132
  Анонимная телеметрия включена по умолчанию для подсчёта активных установок (DAU/WAU/MAU). Не более одного события на машину за UTC-сутки, использует хешированный идентификатор установки, никогда не использует исходное имя хоста, и не создаёт PostHog person profile. Можно отключить через `OMO_SEND_ANONYMOUS_TELEMETRY=0` или `OMO_DISABLE_POSTHOG=1`. См. [Политику конфиденциальности](docs/legal/privacy-policy.md) и [Условия обслуживания](docs/legal/terms-of-service.md).
123
133
 
124
- **Ultimate и Light:** oh-my-openagent поставляется в двух редакциях одного продукта. **Ultimate** (`bunx omo install` или `--platform=opencode`, по умолчанию) — полнофункциональная редакция поверх OpenCode: 11 агентов, 54+ хука, Team Mode, все MCP, все слэш-команды, режимы IntentGate. **Light** (`bunx omo install --platform=codex`) — только 5 компонентов omo, которые портируются в систему плагинов OpenAI Codex CLI: `rules`, `comment-checker`, `lsp`, `ultrawork`, `ulw-loop`. `bunx lazycodex install` — это сокращённый псевдоним для `--platform=codex`. Чтобы установить обе редакции одной командой, используйте `--platform=both`. Телеметрию только для Codex можно отключить через `OMO_CODEX_DISABLE_POSTHOG=1` или `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0`.
134
+ **Ultimate и Light:** oh-my-openagent поставляется в двух редакциях одного продукта. **Ultimate** (`bunx oh-my-openagent install` или `--platform=opencode`, по умолчанию) — полнофункциональная редакция поверх OpenCode: 11 агентов, 54+ хука, Team Mode, все MCP, все слэш-команды, режимы IntentGate. **Light** (`bunx oh-my-openagent install --platform=codex`) — только 5 компонентов omo, которые портируются в систему плагинов OpenAI Codex CLI: `rules`, `comment-checker`, `lsp`, `ultrawork`, `ulw-loop`. `bunx lazycodex-ai install` — это сокращённый псевдоним для `--platform=codex`. Чтобы установить обе редакции одной командой, используйте `--platform=both`. Телеметрию только для Codex можно отключить через `OMO_CODEX_DISABLE_POSTHOG=1` или `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0`.
125
135
 
126
136
  ------
127
137
 
@@ -154,7 +164,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
154
164
  | | Функция | Editions | Что делает |
155
165
  | --- | -------------------------------------------------------- | :------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
156
166
  | 🤖 | **Дисциплинированные агенты** | Ultimate | Sisyphus оркестрирует Hephaestus, Oracle, Librarian, Explore. Полноценная AI-команда разработки в параллельном режиме. |
157
- | 🧩 | **Codex CLI Light Edition** | Light | 5 компонентов omo, портированных в OpenAI Codex CLI (rules, comment-checker, LSP, ultrawork, ulw-loop). Установка: `bunx omo install --platform=codex`. |
167
+ | 🧩 | **Codex CLI Light Edition** | Light | 5 компонентов omo, портированных в OpenAI Codex CLI (rules, comment-checker, LSP, ultrawork, ulw-loop). Установка: `bunx oh-my-openagent install --platform=codex`. |
158
168
  | 👥 | **Team Mode** (v4.0, opt-in) | Ultimate | Лид-агент + до 8 параллельных участников, визуализация в tmux в реальном времени, выделенные инструменты `team_*`. Питает `hyperplan` (5 враждебных критиков) и `security-research` (3 охотника + 2 PoC-инженера). [Документация →](docs/guide/team-mode.md) |
159
169
  | ⚡ | **`ultrawork` / `ulw`** | Both | Одно слово. Все агенты (Ultimate) или Codex-компонент `ultrawork` (Light) активируются. Не останавливается, пока задача не выполнена. |
160
170
  | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Ultimate | Анализирует истинное намерение пользователя перед классификацией и действием. Триггеры `search` / `analyze` / `team` / `hyperplan`. (Light хукает только `ulw` / `ultrawork`.) |
@@ -173,7 +183,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
173
183
  | 📋 | **Prometheus Planner** | Ultimate | Стратегическое планирование в режиме интервью перед любым выполнением. |
174
184
  | 🔍 | **`/init-deep`** | Ultimate | Автоматически генерирует иерархические файлы `AGENTS.md` по всему проекту. Отлично работает на эффективность токенов и производительность агента. |
175
185
 
176
- > **Editions, легенда.** **Ultimate** = только OpenCode (`bunx omo install`). **Light** = только Codex CLI (`bunx omo install --platform=codex`). **Both** = поставляется в обеих редакциях, часто с немного отличающейся реализацией.
186
+ > **Editions, легенда.** **Ultimate** = только OpenCode (`bunx oh-my-openagent install`). **Light** = только Codex CLI (`bunx oh-my-openagent install --platform=codex`). **Both** = поставляется в обеих редакциях, часто с немного отличающейся реализацией.
177
187
 
178
188
  ### Дисциплинированные агенты
179
189
 
package/README.zh-cn.md CHANGED
@@ -1,3 +1,13 @@
1
+ > [!NOTE]
2
+ > **🚀 首个 Codex 版本发布:omo 现已支持 Codex CLI**
3
+ >
4
+ > 无需再配置复杂的 JSON。直接运行:
5
+ > ```bash
6
+ > npx lazycodex-ai install
7
+ > ```
8
+ > 您的 Codex 将清晰编码,并通过内置 computer-use QA 完成任务。
9
+ > 了解更多请访问 [lazycodex.ai](https://lazycodex.ai)。
10
+
1
11
  > [!NOTE]
2
12
  > **正在进行多 Harness 代理操作系统重构**
3
13
  >
@@ -123,7 +133,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head
123
133
 
124
134
  匿名遥测默认开启,用于统计活跃安装数(DAU/WAU/MAU)。每台机器每个 UTC 日最多发送一次事件,使用哈希化的安装标识符,绝不会使用原始主机名,且不会创建 PostHog person profile。可通过 `OMO_SEND_ANONYMOUS_TELEMETRY=0` 或 `OMO_DISABLE_POSTHOG=1` 禁用。详见 [隐私政策](docs/legal/privacy-policy.md) 和 [服务条款](docs/legal/terms-of-service.md)。
125
135
 
126
- **Ultimate 与 Light:** oh-my-openagent 以同一产品的两个版本发布。**Ultimate 版本**(`bunx omo install` 或 `--platform=opencode`,默认值)在 OpenCode 上提供完整功能 —— 11 个智能体、54+ 个生命周期钩子、Team Mode、所有 MCP、所有斜杠命令、IntentGate 模式。**Light 版本**(`bunx omo install --platform=codex`)仅提供能够干净地移植到 OpenAI Codex CLI 插件系统的 5 个组件(`rules`、`comment-checker`、`lsp`、`ultrawork`、`ulw-loop`)。`bunx lazycodex install` 是 `--platform=codex` 的快捷别名。要同时安装两个版本,使用 `--platform=both`。Codex 专用遥测可通过 `OMO_CODEX_DISABLE_POSTHOG=1` 或 `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0` 禁用。
136
+ **Ultimate 与 Light:** oh-my-openagent 以同一产品的两个版本发布。**Ultimate 版本**(`bunx oh-my-openagent install` 或 `--platform=opencode`,默认值)在 OpenCode 上提供完整功能 —— 11 个智能体、54+ 个生命周期钩子、Team Mode、所有 MCP、所有斜杠命令、IntentGate 模式。**Light 版本**(`bunx oh-my-openagent install --platform=codex`)仅提供能够干净地移植到 OpenAI Codex CLI 插件系统的 5 个组件(`rules`、`comment-checker`、`lsp`、`ultrawork`、`ulw-loop`)。`bunx lazycodex-ai install` 是 `--platform=codex` 的快捷别名。要同时安装两个版本,使用 `--platform=both`。Codex 专用遥测可通过 `OMO_CODEX_DISABLE_POSTHOG=1` 或 `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0` 禁用。
127
137
 
128
138
  ---
129
139
 
@@ -161,7 +171,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
161
171
  | | 特性 | Editions | 功能说明 |
162
172
  | :---: | :-------------------------------------------------------------- | :------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
163
173
  | 🤖 | **自律军团 (Discipline Agents)** | Ultimate | Sisyphus 负责调度 Hephaestus、Oracle、Librarian 和 Explore。一支完整的 AI 开发团队并行工作。 |
164
- | 🧩 | **Codex CLI Light Edition** | Light | 在 OpenAI Codex CLI 中运行的 omo 的 5 个可移植组件 (rules, comment-checker, LSP, ultrawork, ulw-loop)。安装: `bunx omo install --platform=codex`。 |
174
+ | 🧩 | **Codex CLI Light Edition** | Light | 在 OpenAI Codex CLI 中运行的 omo 的 5 个可移植组件 (rules, comment-checker, LSP, ultrawork, ulw-loop)。安装: `bunx oh-my-openagent install --platform=codex`。 |
165
175
  | 👥 | **Team Mode** (v4.0, 选择性启用) | Ultimate | 领导 Agent + 最多 8 个并行成员,实时 tmux 可视化,专用 `team_*` 工具家族。驱动 `hyperplan`(5 个敌对评论者) 和 `security-research`(3 个猎手 + 2 个 PoC 工程师)。[文档 →](docs/guide/team-mode.md) |
166
176
  | ⚡ | **`ultrawork` / `ulw`** | Both | 一键触发,所有智能体(Ultimate)或 Codex `ultrawork` 组件(Light)出动。任务完成前绝不罢休。 |
167
177
  | 🚪 | **[IntentGate 意图门](https://factory.ai/news/terminal-bench)** | Ultimate | 真正行动前,先分析用户的真实意图。触发 `search` / `analyze` / `team` / `hyperplan`。(Light 仅 hook `ulw` / `ultrawork`。) |
@@ -180,7 +190,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
180
190
  | 📋 | **Prometheus 规划师** | Ultimate | 动手写代码前,先通过访谈模式做好战略规划。 |
181
191
  | 🔍 | **`/init-deep`** | Ultimate | 在整个项目目录层级中自动生成 `AGENTS.md`。不仅省 Token,还能大幅提升 Agent 理解力。 |
182
192
 
183
- > **Editions 图例。** **Ultimate** = 仅 OpenCode (`bunx omo install`)。**Light** = 仅 Codex CLI (`bunx omo install --platform=codex`)。**Both** = 两个版本均提供 (内部实现可能略有不同)。
193
+ > **Editions 图例。** **Ultimate** = 仅 OpenCode (`bunx oh-my-openagent install`)。**Light** = 仅 Codex CLI (`bunx oh-my-openagent install --platform=codex`)。**Both** = 两个版本均提供 (内部实现可能略有不同)。
184
194
 
185
195
  ### 自律军团 (Discipline Agents)
186
196
 
@@ -105,8 +105,9 @@ function getInvocationName(wrapperPackageName) {
105
105
  if (process.env.OMO_INVOCATION_NAME) {
106
106
  return process.env.OMO_INVOCATION_NAME;
107
107
  }
108
- if (getPackageBareName(wrapperPackageName) === "lazycodex") {
109
- return "lazycodex";
108
+ const wrapperBareName = getPackageBareName(wrapperPackageName);
109
+ if (wrapperBareName === "lazycodex" || wrapperBareName === "lazycodex-ai") {
110
+ return wrapperBareName;
110
111
  }
111
112
  const argv1 = process.argv[1] ?? "";
112
113
  if (!argv1) {
@@ -166,7 +167,7 @@ function main() {
166
167
  for (let index = 0; index < resolvedBinaries.length; index += 1) {
167
168
  const currentBinary = resolvedBinaries[index];
168
169
  const hasFallback = index < resolvedBinaries.length - 1;
169
- const result = spawnSync(currentBinary.binPath, process.argv.slice(2), {
170
+ const result = spawnSync(process.execPath, [currentBinary.binPath, ...process.argv.slice(2)], {
170
171
  stdio: "inherit",
171
172
  env: childEnv,
172
173
  });
@@ -15,7 +15,7 @@ afterEach(async () => {
15
15
  });
16
16
 
17
17
  describe("lazycodex bin wrapper", () => {
18
- test("runs the platform binary so npx lazycodex does not require Bun", async () => {
18
+ test("runs the platform package launcher through Node", async () => {
19
19
  // #given
20
20
  const fixture = await createLazyCodexFixture();
21
21
  const nodePath = Bun.which("node") ?? "node";
@@ -34,6 +34,7 @@ describe("lazycodex bin wrapper", () => {
34
34
  expect(result.status).toBe(23);
35
35
  expect((await readFile(join(fixture.captureDir, "env"), "utf8")).trim()).toBe("lazycodex");
36
36
  expect(await canonicalizePackageRootCapture(fixture)).toBe(await realpath(fixture.root));
37
+ expect(await realpath((await readFile(join(fixture.captureDir, "exec-path"), "utf8")).trim())).toBe(await realpath(nodePath));
37
38
  expect((await readFile(join(fixture.captureDir, "args"), "utf8")).trim().split("\n")).toEqual([
38
39
  "install",
39
40
  "--no-tui",
@@ -65,6 +66,31 @@ describe("lazycodex bin wrapper", () => {
65
66
  ]);
66
67
  });
67
68
 
69
+ test("routes the lazycodex-ai package to the Codex installer via the oh-my-openagent platform family", async () => {
70
+ // #given
71
+ const fixture = await createLazyCodexFixture({ packageName: "lazycodex-ai", wrapperFileName: "lazycodex-ai" });
72
+ const nodePath = Bun.which("node") ?? "node";
73
+
74
+ // #when
75
+ const result = spawnSync(nodePath, [fixture.wrapperBin, "install", "--no-tui"], {
76
+ encoding: "utf8",
77
+ env: {
78
+ ...process.env,
79
+ CAPTURE_DIR: fixture.captureDir,
80
+ PATH: fixture.fakeBinDir,
81
+ },
82
+ });
83
+
84
+ // #then
85
+ expect(result.status).toBe(23);
86
+ expect((await readFile(join(fixture.captureDir, "env"), "utf8")).trim()).toBe("lazycodex-ai");
87
+ expect(await canonicalizePackageRootCapture(fixture)).toBe(await realpath(fixture.root));
88
+ expect((await readFile(join(fixture.captureDir, "args"), "utf8")).trim().split("\n")).toEqual([
89
+ "install",
90
+ "--no-tui",
91
+ ]);
92
+ });
93
+
68
94
  test("routes npm shim execution from the lazycodex package to the Codex installer", async () => {
69
95
  // #given
70
96
  const fixture = await createLazyCodexFixture({ wrapperFileName: "oh-my-opencode.js" });
@@ -150,16 +176,18 @@ async function writePlatformPackages(root: string): Promise<void> {
150
176
  packageBaseName: "oh-my-openagent",
151
177
  });
152
178
  for (const packageName of packages) {
153
- const binaryPath = join(root, "node_modules", packageName, "bin", process.platform === "win32" ? "oh-my-opencode.exe" : "oh-my-opencode");
179
+ const binaryPath = join(root, "node_modules", packageName, "bin", "oh-my-opencode.js");
154
180
  await mkdir(dirname(binaryPath), { recursive: true });
155
181
  await writeFile(
156
182
  binaryPath,
157
183
  [
158
- "#!/bin/sh",
159
- "printf '%s\\n' \"$OMO_INVOCATION_NAME\" > \"$CAPTURE_DIR/env\"",
160
- "printf '%s\\n' \"$OMO_WRAPPER_PACKAGE_ROOT\" > \"$CAPTURE_DIR/wrapper-root\"",
161
- "printf '%s\\n' \"$@\" > \"$CAPTURE_DIR/args\"",
162
- "exit 23",
184
+ "#!/usr/bin/env node",
185
+ 'import { writeFileSync } from "node:fs";',
186
+ 'writeFileSync(`${process.env.CAPTURE_DIR}/env`, `${process.env.OMO_INVOCATION_NAME}\\n`);',
187
+ 'writeFileSync(`${process.env.CAPTURE_DIR}/wrapper-root`, `${process.env.OMO_WRAPPER_PACKAGE_ROOT}\\n`);',
188
+ 'writeFileSync(`${process.env.CAPTURE_DIR}/exec-path`, `${process.execPath}\\n`);',
189
+ 'writeFileSync(`${process.env.CAPTURE_DIR}/args`, `${process.argv.slice(2).join("\\n")}\\n`);',
190
+ "process.exit(23);",
163
191
  "",
164
192
  ].join("\n"),
165
193
  );
package/bin/platform.d.ts CHANGED
@@ -13,7 +13,7 @@ export declare function getPlatformPackageCandidates(options: {
13
13
  packageBaseName?: string;
14
14
  }): string[];
15
15
 
16
- export declare function getBinaryPath(pkg: string, platform: string): string;
16
+ export declare function getBinaryPath(pkg: string, platform?: string): string;
17
17
 
18
18
  export declare function getPackageBareName(packageName: string): string;
19
19
 
package/bin/platform.js CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  const PLATFORM_PACKAGE_BASE_BY_WRAPPER_NAME = {
5
5
  lazycodex: "oh-my-openagent",
6
+ "lazycodex-ai": "oh-my-openagent",
6
7
  };
7
8
 
8
9
  export function getPackageBareName(packageName) {
@@ -90,12 +91,11 @@ function getBaselinePlatformPackage({ platform, arch, libcFamily, packageBaseNam
90
91
  }
91
92
 
92
93
  /**
93
- * Get the path to the binary within a platform package
94
+ * Get the path to the launcher within a platform package
94
95
  * @param {string} pkg Package name
95
96
  * @param {string} platform Process platform
96
- * @returns {string} Relative path like "oh-my-opencode-darwin-arm64/bin/oh-my-opencode"
97
+ * @returns {string} Relative path like "oh-my-opencode-darwin-arm64/bin/oh-my-opencode.js"
97
98
  */
98
99
  export function getBinaryPath(pkg, platform) {
99
- const ext = platform === "win32" ? ".exe" : "";
100
- return `${pkg}/bin/oh-my-opencode${ext}`;
100
+ return `${pkg}/bin/oh-my-opencode.js`;
101
101
  }
@@ -44,6 +44,28 @@ describe("resolvePlatformPackageBaseName", () => {
44
44
  expect(resolvedPlatformBase).toBe("oh-my-openagent");
45
45
  });
46
46
 
47
+ test("maps lazycodex-ai wrapper to oh-my-openagent platform package family", () => {
48
+ // #given
49
+ const wrapperPackageName = "lazycodex-ai";
50
+
51
+ // #when
52
+ const resolvedPlatformBase = resolvePlatformPackageBaseName(wrapperPackageName);
53
+
54
+ // #then
55
+ expect(resolvedPlatformBase).toBe("oh-my-openagent");
56
+ });
57
+
58
+ test("maps scoped lazycodex-ai wrapper to oh-my-openagent platform package family", () => {
59
+ // #given
60
+ const wrapperPackageName = "@code-yeongyu/lazycodex-ai";
61
+
62
+ // #when
63
+ const resolvedPlatformBase = resolvePlatformPackageBaseName(wrapperPackageName);
64
+
65
+ // #then
66
+ expect(resolvedPlatformBase).toBe("oh-my-openagent");
67
+ });
68
+
47
69
  test("keeps oh-my-opencode wrapper mapped to oh-my-opencode platform package family", () => {
48
70
  // #given
49
71
  const wrapperPackageName = "oh-my-opencode";
@@ -175,7 +197,7 @@ describe("getPlatformPackage", () => {
175
197
  });
176
198
 
177
199
  describe("getBinaryPath", () => {
178
- test("returns path without .exe for Unix platforms", () => {
200
+ test("returns JavaScript launcher path for Unix platforms", () => {
179
201
  // #given Unix platform package
180
202
  const pkg = "oh-my-opencode-darwin-arm64";
181
203
  const platform = "darwin";
@@ -183,11 +205,11 @@ describe("getBinaryPath", () => {
183
205
  // #when getting binary path
184
206
  const result = getBinaryPath(pkg, platform);
185
207
 
186
- // #then returns path without extension
187
- expect(result).toBe("oh-my-opencode-darwin-arm64/bin/oh-my-opencode");
208
+ // #then returns the platform launcher script
209
+ expect(result).toBe("oh-my-opencode-darwin-arm64/bin/oh-my-opencode.js");
188
210
  });
189
211
 
190
- test("returns path with .exe for Windows", () => {
212
+ test("returns JavaScript launcher path for Windows", () => {
191
213
  // #given Windows platform package
192
214
  const pkg = "oh-my-opencode-windows-x64";
193
215
  const platform = "win32";
@@ -195,11 +217,11 @@ describe("getBinaryPath", () => {
195
217
  // #when getting binary path
196
218
  const result = getBinaryPath(pkg, platform);
197
219
 
198
- // #then returns path with .exe extension
199
- expect(result).toBe("oh-my-opencode-windows-x64/bin/oh-my-opencode.exe");
220
+ // #then returns the platform launcher script
221
+ expect(result).toBe("oh-my-opencode-windows-x64/bin/oh-my-opencode.js");
200
222
  });
201
223
 
202
- test("returns path without .exe for Linux", () => {
224
+ test("returns JavaScript launcher path for Linux", () => {
203
225
  // #given Linux platform package
204
226
  const pkg = "oh-my-opencode-linux-x64";
205
227
  const platform = "linux";
@@ -207,8 +229,8 @@ describe("getBinaryPath", () => {
207
229
  // #when getting binary path
208
230
  const result = getBinaryPath(pkg, platform);
209
231
 
210
- // #then returns path without extension
211
- expect(result).toBe("oh-my-opencode-linux-x64/bin/oh-my-opencode");
232
+ // #then returns the platform launcher script
233
+ expect(result).toBe("oh-my-opencode-linux-x64/bin/oh-my-opencode.js");
212
234
  });
213
235
  });
214
236
 
@@ -0,0 +1,4 @@
1
+ import { type Command } from "commander";
2
+ import { resolveCleanupPlatform } from "./cleanup";
3
+ export { resolveCleanupPlatform };
4
+ export declare function configureCleanupCommand(program: Command): void;
@@ -0,0 +1,11 @@
1
+ export type CleanupPlatform = "codex";
2
+ export interface CleanupOptions {
3
+ readonly platform?: CleanupPlatform | "opencode" | "both";
4
+ readonly codexHome?: string;
5
+ readonly project?: string;
6
+ readonly json?: boolean;
7
+ }
8
+ export declare function resolveCleanupPlatform(options: {
9
+ readonly platform?: CleanupOptions["platform"];
10
+ }, invocationName?: string | undefined): CleanupOptions["platform"] | undefined;
11
+ export declare function cleanup(options: CleanupOptions): Promise<number>;
@@ -1,3 +1,4 @@
1
+ import { resolveCleanupPlatform } from "./cleanup-command";
1
2
  import type { InstallArgs } from "./types";
2
3
  type InstallCommandOptions = {
3
4
  readonly tui?: boolean;
@@ -15,5 +16,5 @@ type InstallCommandOptions = {
15
16
  readonly skipAuth?: boolean;
16
17
  };
17
18
  export declare function resolveInstallArgs(options: InstallCommandOptions, invocationName?: string | undefined): InstallArgs;
19
+ export { resolveCleanupPlatform };
18
20
  export declare function runCli(): void;
19
- export {};