diff --git a/AGENTS.md b/AGENTS.md index a5de94254d..174f031387 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -147,10 +147,10 @@ oh-my-openagent ships in two editions of one product. **Ultimate** = this OpenCo - **Package:** `@oh-my-opencode/omo-codex` (private, v0.1.0): "Codex harness adapter. Vendored Codex plugin namespace `omo` + TypeScript installer + telemetry." Plugin bundle pkg = `@sisyphuslabs/omo-codex-plugin`. Reuses `@oh-my-opencode/utils` + `@oh-my-opencode/shared-skills`. - **Marketplace identity (precision):** Codex sees marketplace `sisyphuslabs`, plugin `omo`, enabled as `omo@sisyphuslabs`. `lazycodex` is ONLY the repo/npm/bin alias, never the marketplace name. -- **Alias mechanics:** root `package.json` maps `lazycodex` to `bin/oh-my-opencode.js` (1 of 4 bin aliases: `oh-my-opencode`, `oh-my-openagent`, `omo`, `lazycodex`, all the same compiled CLI). `bunx lazycodex install` is exactly `bunx omo install --platform=codex`. Routing: `src/cli/cli-program.ts` (lazycodex defaults platform to codex), `bin/platform.js` (lazycodex resolves the `oh-my-openagent` platform family). `src/cli/star-request.ts` stars both repos. +- **Alias mechanics:** root `package.json` maps `lazycodex` to `bin/oh-my-opencode.js` (1 of 4 bin aliases: `oh-my-opencode`, `oh-my-openagent`, `omo`, `lazycodex`, all the same compiled CLI). `bunx --package @code-yeongyu/lazycodex lazycodex install` is exactly `bunx --package oh-my-openagent omo install --platform=codex`. Routing: `src/cli/cli-program.ts` (lazycodex defaults platform to codex), `bin/platform.js` (lazycodex resolves the `oh-my-openagent` platform family). `src/cli/star-request.ts` stars both repos. - **Disambiguation:** the `lazycodex` npm package (this repo's CLI republished by `publish.yml` with a name/version rewrite) is NOT `lazycodex-ai` (the `code-yeongyu/lazycodex` repo's own published npm package, currently `lazycodex-ai@0.2.1`). - **Components (8):** `comment-checker`, `git-bash`, `lsp`, `rules`, `start-work-continuation`, `telemetry`, `ultrawork`, `ulw-loop`, wired to Codex events `SessionStart`/`UserPromptSubmit`/`PreToolUse`/`PostToolUse`/`PostCompact`/`Stop`/`SubagentStop`. No agent orchestration, no `team_*`, no built-in MCPs beyond LSP, no hashline. -- **Install:** `bunx omo install --platform=codex` (or `bunx lazycodex install`, or `--platform=both`) copies the plugin to `~/.codex/plugins/cache/sisyphuslabs/omo//`, links agent TOMLs via `~/.codex/.tmp/marketplaces/sisyphuslabs/plugins/omo/`, enables `omo@sisyphuslabs` in `~/.codex/config.toml`, links component CLIs into `~/.local/bin`. Windows: Git Bash preflight (`winget install --id Git.Git`). Installer: [`src/cli/install-codex/`](file:///Users/yeongyu/local-workspaces/omo/src/cli/install-codex/) + `packages/omo-codex/scripts/install*.mjs`. +- **Install:** `bunx --package oh-my-openagent omo install --platform=codex` (or `bunx --package @code-yeongyu/lazycodex lazycodex install`, or `--platform=both`) copies the plugin to `~/.codex/plugins/cache/sisyphuslabs/omo//`, links agent TOMLs via `~/.codex/.tmp/marketplaces/sisyphuslabs/plugins/omo/`, enables `omo@sisyphuslabs` in `~/.codex/config.toml`, links component CLIs into `~/.local/bin`. Windows: Git Bash preflight (`winget install --id Git.Git`). Installer: [`src/cli/install-codex/`](file:///Users/yeongyu/local-workspaces/omo/src/cli/install-codex/) + `packages/omo-codex/scripts/install*.mjs`. - **Deploy / publish** ([`.github/workflows/publish.yml`](file:///Users/yeongyu/local-workspaces/omo/.github/workflows/publish.yml), manual dispatch): - `publish_lazycodex` (default **true**) publishes the npm alias `lazycodex`: rewrites root `package.json` name to `lazycodex` + version to the release + optionalDeps `oh-my-opencode-*` to `oh-my-openagent-*`, skips when `registry.npmjs.org/lazycodex/${VERSION}` exists, publishes `--access public --provenance --tag latest`, then restores `package.json`. - `sync_lazycodex_marketplace` (default **false**, needs secret `LAZYCODEX_SYNC_TOKEN`) checks out `code-yeongyu/lazycodex`, builds the plugin + ast-grep-mcp + lsp-tools-mcp, runs [`script/sync-lazycodex-marketplace.ts`](file:///Users/yeongyu/local-workspaces/omo/script/sync-lazycodex-marketplace.ts) ` `, then `git push origin HEAD:main`. diff --git a/CHANGELOG.md b/CHANGELOG.md index 3419f47ff3..a6885e52af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Per-agent `displayName` for i18n. Agents can present localized names in UI and logs. (PR #4081) - Grok family models registered with `reasoningEffort` support. (PR #4186) - CLI `setup` alias for `install`. Either command runs the interactive setup wizard. (PR #4174) -- Codex CLI Light edition (`omo-codex`): one-command install via `bunx omo install --platform=codex` or the new `lazycodex` bin entry. Vendored Codex plugin namespace `omo` with rules, comment-checker, LSP, ultrawork, and ulw-loop components. Plugin lands in `~/.codex/plugins/cache/sisyphuslabs/omo/` and is enabled in `~/.codex/config.toml`. Idempotent installer (re-running is safe). +- Codex CLI Light edition (`omo-codex`): one-command install via `bunx --package oh-my-openagent omo install --platform=codex` or the new `lazycodex` bin entry. Vendored Codex plugin namespace `omo` with rules, comment-checker, LSP, ultrawork, and ulw-loop components. Plugin lands in `~/.codex/plugins/cache/sisyphuslabs/omo/` and is enabled in `~/.codex/config.toml`. Idempotent installer (re-running is safe). - New `--platform ` install flag (default `opencode`). Replaces the previous Codex-as-optional-addon model — `--platform=codex` installs only the Codex Light edition, `--platform=both` installs both editions in one run. - Three new bin entries: `omo` (short alias) and `lazycodex` (auto-defaults `--platform=codex`). Existing `oh-my-opencode` and `oh-my-openagent` continue to work unchanged. - New PostHog telemetry stream `omo_codex_daily_active` distinguishing omo-codex installations from omo-opencode. Independent opt-out via `OMO_CODEX_DISABLE_POSTHOG=1` or `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0`; global `OMO_DISABLE_POSTHOG` and `OMO_SEND_ANONYMOUS_TELEMETRY` still suppress both products. diff --git a/README.ja.md b/README.ja.md index 95f4835152..97f8997f52 100644 --- a/README.ja.md +++ b/README.ja.md @@ -123,7 +123,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head 匿名のテレメトリは、アクティブなインストール数(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)をご覧ください。 -**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` で無効化できます。 +**Ultimate と Light:** oh-my-openagent は同じ製品の 2 つのエディションとして提供されます。**Ultimate エディション**(`bunx --package oh-my-openagent omo install` または `--platform=opencode`、デフォルト)は OpenCode 上のフル機能で、11 エージェント、54+ フック、Team Mode、すべての MCP、スラッシュコマンド、IntentGate モードを提供します。**Light エディション**(`bunx --package oh-my-openagent omo install --platform=codex`)は OpenAI Codex CLI のプラグインシステムへ綺麗に移植できる 5 コンポーネント(`rules`、`comment-checker`、`lsp`、`ultrawork`、`ulw-loop`)のみを提供します。`bunx --package @code-yeongyu/lazycodex lazycodex install` は `--platform=codex` のショートカット別名です。両方を同時にインストールするには `--platform=both`。Codex 専用テレメトリは `OMO_CODEX_DISABLE_POSTHOG=1` または `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0` で無効化できます。 --- @@ -155,7 +155,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu | | 機能 | Editions | 何をするのか | | :---: | :------------------------------------------------------- | :------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 🤖 | **規律あるエージェント (Discipline Agents)** | Ultimate | Sisyphus が Hephaestus、Oracle、Librarian、Explore をオーケストレーションします。完全な AI 開発チームが並列で動きます。 | -| 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI 上で動作する omo の 5 つの移植コンポーネント (rules, comment-checker, LSP, ultrawork, ulw-loop)。インストール: `bunx omo install --platform=codex`。 | +| 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI 上で動作する omo の 5 つの移植コンポーネント (rules, comment-checker, LSP, ultrawork, ulw-loop)。インストール: `bunx --package oh-my-openagent omo install --platform=codex`。 | | 👥 | **Team Mode** (v4.0, オプトイン) | Ultimate | リードエージェント + 最大 8 メンバーの並列実行、リアルタイム tmux 可視化、専用 `team_*` ツール群。`hyperplan`(5 人の敵対的批評家)と `security-research`(3 人のハンター + 2 人の PoC エンジニア)を駆動します。[ドキュメント →](docs/guide/team-mode.md) | | ⚡ | **`ultrawork` / `ulw`** | Both | 一言で OK。すべてのエージェント (Ultimate) または Codex `ultrawork` コンポーネント (Light) がアクティブになり、終わるまで止まりません。 | | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Ultimate | ユーザーの真の意図を分析してから分類・行動します。`search` / `analyze` / `team` / `hyperplan` をトリガー。(Light は `ulw` / `ultrawork` のみフック。) | @@ -174,7 +174,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu | 📋 | **Prometheus プランナー** | Ultimate | インタビューモードで、実行前に戦略的な計画から立てます。 | | 🔍 | **`/init-deep`** | Ultimate | プロジェクト全体にわたって階層的な `AGENTS.md` ファイルを自動生成。トークン効率とエージェントのパフォーマンスの両方を向上させます。 | -> **Editions legend.** **Ultimate** = OpenCode 専用 (`bunx omo install`)。**Light** = Codex CLI 専用 (`bunx omo install --platform=codex`)。**Both** = 両エディションに提供、しばしば内部実装は若干異なる。 +> **Editions legend.** **Ultimate** = OpenCode 専用 (`bunx --package oh-my-openagent omo install`)。**Light** = Codex CLI 専用 (`bunx --package oh-my-openagent omo install --platform=codex`)。**Both** = 両エディションに提供、しばしば内部実装は若干異なる。 ### 規律あるエージェント (Discipline Agents) diff --git a/README.ko.md b/README.ko.md index 63c019c6d8..76456c4544 100644 --- a/README.ko.md +++ b/README.ko.md @@ -124,7 +124,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head 익명 텔레메트리는 활성 설치 수(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)을 참조하세요. -**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`으로 비활성화할 수 있습니다. +**Ultimate vs Light:** oh-my-openagent는 같은 제품의 두 에디션으로 출시됩니다. **Ultimate 에디션**(`bunx --package oh-my-openagent omo install` 또는 `--platform=opencode`, 기본값)은 OpenCode 위에서 풀 기능 — 11 agent, 54+ hook, Team Mode, 모든 MCP, 슬래시 명령, IntentGate 모드 — 을 제공합니다. **Light 에디션**(`bunx --package oh-my-openagent omo install --platform=codex`)은 OpenAI Codex CLI의 플러그인 시스템에 깔끔히 포팅되는 5개 컴포넌트(`rules`, `comment-checker`, `lsp`, `ultrawork`, `ulw-loop`)만 제공합니다. `bunx --package @code-yeongyu/lazycodex lazycodex install`은 `--platform=codex`의 단축 별칭입니다. 둘 다 설치하려면 `--platform=both`. Codex 전용 텔레메트리는 `OMO_CODEX_DISABLE_POSTHOG=1` 또는 `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0`으로 비활성화할 수 있습니다. --- @@ -156,7 +156,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu | | 기능 | Editions | 하는 일 | | :---: | :------------------------------------------------------- | :------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 🤖 | **Discipline Agents** | Ultimate | Sisyphus가 Hephaestus, Oracle, Librarian, Explore를 지휘합니다. 병렬로 도는 풀스택 AI 개발팀. | -| 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI에서 동작하는 omo의 5개 포팅 컴포넌트(rules, comment-checker, LSP, ultrawork, ulw-loop). 설치: `bunx omo install --platform=codex`. | +| 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI에서 동작하는 omo의 5개 포팅 컴포넌트(rules, comment-checker, LSP, ultrawork, ulw-loop). 설치: `bunx --package oh-my-openagent omo install --platform=codex`. | | 👥 | **Team Mode** (v4.0, opt-in) | Ultimate | 리드 에이전트 + 최대 8명의 병렬 멤버, 실시간 tmux 시각화, 전용 `team_*` 도구. `hyperplan`(5명의 적대적 비평가)과 `security-research`(3명의 헌터 + 2명의 PoC 엔지니어)를 구동합니다. [문서 →](docs/guide/team-mode.md) | | ⚡ | **`ultrawork` / `ulw`** | Both | 한 단어. 모든 에이전트(Ultimate)나 Codex `ultrawork` 컴포넌트(Light)가 켜집니다. 끝날 때까지 멈추지 않습니다. | | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Ultimate | 분류하거나 행동하기 전에 사용자의 진짜 의도부터 분석합니다. `search` / `analyze` / `team` / `hyperplan` 트리거. (Light는 `ulw` / `ultrawork`만 hook.) | @@ -175,7 +175,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu | 📋 | **Prometheus Planner** | Ultimate | 실행 전 인터뷰 모드로 전략 플래닝. | | 🔍 | **`/init-deep`** | Ultimate | 프로젝트 전반에 계층형 `AGENTS.md` 파일을 자동 생성합니다. 토큰 효율에도, 에이전트 성능에도 좋습니다. | -> **Editions legend.** **Ultimate** = OpenCode 전용 (`bunx omo install`). **Light** = Codex CLI 전용 (`bunx omo install --platform=codex`). **Both** = 두 에디션 모두 제공, 종종 내부 구현은 약간 다름. +> **Editions legend.** **Ultimate** = OpenCode 전용 (`bunx --package oh-my-openagent omo install`). **Light** = Codex CLI 전용 (`bunx --package oh-my-openagent omo install --platform=codex`). **Both** = 두 에디션 모두 제공, 종종 내부 구현은 약간 다름. ### Discipline Agents diff --git a/README.md b/README.md index 1ee4ea231e..e7519fa885 100644 --- a/README.md +++ b/README.md @@ -112,11 +112,11 @@ Pick the edition(s) you want. | You want | Run | What lands on disk | | :--- | :--- | :--- | -| **Ultimate** (OpenCode) | `bunx omo install` (TUI walks you through it) | Plugin registered in `opencode.json` + agent/model config + provider auth prompts | -| **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` | -| **Both** | `bunx omo install --platform=both` | Both of the above | +| **Ultimate** (OpenCode) | `bunx --package oh-my-openagent omo install` (TUI walks you through it) | Plugin registered in `opencode.json` + agent/model config + provider auth prompts | +| **Light** (Codex CLI) | `bunx --package oh-my-openagent omo install --platform=codex` or `bunx --package @code-yeongyu/lazycodex 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` | +| **Both** | `bunx --package oh-my-openagent omo install --platform=both` | Both of the above | -`--platform` defaults to `opencode` (Ultimate). The `bunx lazycodex install` alias is a shortcut for `bunx omo install --platform=codex`; use whichever reads cleaner. +`--platform` defaults to `opencode` (Ultimate). The `bunx --package @code-yeongyu/lazycodex lazycodex install` alias is a shortcut for `bunx --package oh-my-openagent omo install --platform=codex`; use whichever reads cleaner. ### For Humans @@ -132,11 +132,11 @@ https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/heads/dev/do 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: ```bash -bunx omo install --platform=codex +bunx --package oh-my-openagent omo install --platform=codex # equivalent: -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install # non-interactive recommended mode: -bunx lazycodex install --no-tui --codex-autonomous +bunx --package @code-yeongyu/lazycodex lazycodex install --no-tui --codex-autonomous ``` > **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`. @@ -155,7 +155,7 @@ The guide covers: platform selection, the subscription interview, provider authe 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. -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`. +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 --package @code-yeongyu/lazycodex lazycodex install` is exactly equivalent to `bunx --package oh-my-openagent omo install --platform=codex`. It is not the Codex marketplace name. Codex sees marketplace `sisyphuslabs` and plugin `omo`, enabled as `omo@sisyphuslabs`. ### Telemetry @@ -204,7 +204,7 @@ Even with only the following subscriptions, `ultrawork` works well (this project | | Feature | Edition | What it does | | :---: | :------------------------------------------------------- | :------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 🤖 | **Discipline Agents** | Ultimate | Sisyphus orchestrates Hephaestus, Oracle, Librarian, Explore. A full AI dev team in parallel. | -| 🧩 | **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`. | +| 🧩 | **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 --package oh-my-openagent omo install --platform=codex`. | | 👥 | **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) | | ⚡ | **`ultrawork` / `ulw`** | Both | One word. Every agent activates. Doesn't stop until done. | | 🚪 | **[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 +224,7 @@ Even with only the following subscriptions, `ultrawork` works well (this project | 📋 | **Prometheus Planner** | Ultimate | Interview-mode strategic planning before any execution. | | 🔍 | **`/init-deep`** | Ultimate | Auto-generates hierarchical `AGENTS.md` files throughout your project. Great for both token efficiency and your agent's performance. | -> **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. +> **Edition legend.** **Ultimate** = OpenCode-only (`bunx --package oh-my-openagent omo install`). **Light** = Codex CLI-only (`bunx --package oh-my-openagent omo install --platform=codex`). **Both** = shipped in both editions, often with slightly different implementations under the hood. ### Discipline Agents diff --git a/README.ru.md b/README.ru.md index c70cdae30f..5f56c6ab1d 100644 --- a/README.ru.md +++ b/README.ru.md @@ -121,7 +121,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head Анонимная телеметрия включена по умолчанию для подсчёта активных установок (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). -**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`. +**Ultimate и Light:** oh-my-openagent поставляется в двух редакциях одного продукта. **Ultimate** (`bunx --package oh-my-openagent omo install` или `--platform=opencode`, по умолчанию) — полнофункциональная редакция поверх OpenCode: 11 агентов, 54+ хука, Team Mode, все MCP, все слэш-команды, режимы IntentGate. **Light** (`bunx --package oh-my-openagent omo install --platform=codex`) — только 5 компонентов omo, которые портируются в систему плагинов OpenAI Codex CLI: `rules`, `comment-checker`, `lsp`, `ultrawork`, `ulw-loop`. `bunx --package @code-yeongyu/lazycodex lazycodex install` — это сокращённый псевдоним для `--platform=codex`. Чтобы установить обе редакции одной командой, используйте `--platform=both`. Телеметрию только для Codex можно отключить через `OMO_CODEX_DISABLE_POSTHOG=1` или `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0`. ------ @@ -154,7 +154,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu | | Функция | Editions | Что делает | | --- | -------------------------------------------------------- | :------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 🤖 | **Дисциплинированные агенты** | Ultimate | Sisyphus оркестрирует Hephaestus, Oracle, Librarian, Explore. Полноценная AI-команда разработки в параллельном режиме. | -| 🧩 | **Codex CLI Light Edition** | Light | 5 компонентов omo, портированных в OpenAI Codex CLI (rules, comment-checker, LSP, ultrawork, ulw-loop). Установка: `bunx omo install --platform=codex`. | +| 🧩 | **Codex CLI Light Edition** | Light | 5 компонентов omo, портированных в OpenAI Codex CLI (rules, comment-checker, LSP, ultrawork, ulw-loop). Установка: `bunx --package oh-my-openagent omo install --platform=codex`. | | 👥 | **Team Mode** (v4.0, opt-in) | Ultimate | Лид-агент + до 8 параллельных участников, визуализация в tmux в реальном времени, выделенные инструменты `team_*`. Питает `hyperplan` (5 враждебных критиков) и `security-research` (3 охотника + 2 PoC-инженера). [Документация →](docs/guide/team-mode.md) | | ⚡ | **`ultrawork` / `ulw`** | Both | Одно слово. Все агенты (Ultimate) или Codex-компонент `ultrawork` (Light) активируются. Не останавливается, пока задача не выполнена. | | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Ultimate | Анализирует истинное намерение пользователя перед классификацией и действием. Триггеры `search` / `analyze` / `team` / `hyperplan`. (Light хукает только `ulw` / `ultrawork`.) | @@ -173,7 +173,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu | 📋 | **Prometheus Planner** | Ultimate | Стратегическое планирование в режиме интервью перед любым выполнением. | | 🔍 | **`/init-deep`** | Ultimate | Автоматически генерирует иерархические файлы `AGENTS.md` по всему проекту. Отлично работает на эффективность токенов и производительность агента. | -> **Editions, легенда.** **Ultimate** = только OpenCode (`bunx omo install`). **Light** = только Codex CLI (`bunx omo install --platform=codex`). **Both** = поставляется в обеих редакциях, часто с немного отличающейся реализацией. +> **Editions, легенда.** **Ultimate** = только OpenCode (`bunx --package oh-my-openagent omo install`). **Light** = только Codex CLI (`bunx --package oh-my-openagent omo install --platform=codex`). **Both** = поставляется в обеих редакциях, часто с немного отличающейся реализацией. ### Дисциплинированные агенты diff --git a/README.zh-cn.md b/README.zh-cn.md index 9a806b627e..6ff4ffcb53 100644 --- a/README.zh-cn.md +++ b/README.zh-cn.md @@ -123,7 +123,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head 匿名遥测默认开启,用于统计活跃安装数(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)。 -**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` 禁用。 +**Ultimate 与 Light:** oh-my-openagent 以同一产品的两个版本发布。**Ultimate 版本**(`bunx --package oh-my-openagent omo install` 或 `--platform=opencode`,默认值)在 OpenCode 上提供完整功能 —— 11 个智能体、54+ 个生命周期钩子、Team Mode、所有 MCP、所有斜杠命令、IntentGate 模式。**Light 版本**(`bunx --package oh-my-openagent omo install --platform=codex`)仅提供能够干净地移植到 OpenAI Codex CLI 插件系统的 5 个组件(`rules`、`comment-checker`、`lsp`、`ultrawork`、`ulw-loop`)。`bunx --package @code-yeongyu/lazycodex lazycodex install` 是 `--platform=codex` 的快捷别名。要同时安装两个版本,使用 `--platform=both`。Codex 专用遥测可通过 `OMO_CODEX_DISABLE_POSTHOG=1` 或 `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0` 禁用。 --- @@ -161,7 +161,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu | | 特性 | Editions | 功能说明 | | :---: | :-------------------------------------------------------------- | :------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 🤖 | **自律军团 (Discipline Agents)** | Ultimate | Sisyphus 负责调度 Hephaestus、Oracle、Librarian 和 Explore。一支完整的 AI 开发团队并行工作。 | -| 🧩 | **Codex CLI Light Edition** | Light | 在 OpenAI Codex CLI 中运行的 omo 的 5 个可移植组件 (rules, comment-checker, LSP, ultrawork, ulw-loop)。安装: `bunx omo install --platform=codex`。 | +| 🧩 | **Codex CLI Light Edition** | Light | 在 OpenAI Codex CLI 中运行的 omo 的 5 个可移植组件 (rules, comment-checker, LSP, ultrawork, ulw-loop)。安装: `bunx --package oh-my-openagent omo install --platform=codex`。 | | 👥 | **Team Mode** (v4.0, 选择性启用) | Ultimate | 领导 Agent + 最多 8 个并行成员,实时 tmux 可视化,专用 `team_*` 工具家族。驱动 `hyperplan`(5 个敌对评论者) 和 `security-research`(3 个猎手 + 2 个 PoC 工程师)。[文档 →](docs/guide/team-mode.md) | | ⚡ | **`ultrawork` / `ulw`** | Both | 一键触发,所有智能体(Ultimate)或 Codex `ultrawork` 组件(Light)出动。任务完成前绝不罢休。 | | 🚪 | **[IntentGate 意图门](https://factory.ai/news/terminal-bench)** | Ultimate | 真正行动前,先分析用户的真实意图。触发 `search` / `analyze` / `team` / `hyperplan`。(Light 仅 hook `ulw` / `ultrawork`。) | @@ -180,7 +180,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu | 📋 | **Prometheus 规划师** | Ultimate | 动手写代码前,先通过访谈模式做好战略规划。 | | 🔍 | **`/init-deep`** | Ultimate | 在整个项目目录层级中自动生成 `AGENTS.md`。不仅省 Token,还能大幅提升 Agent 理解力。 | -> **Editions 图例。** **Ultimate** = 仅 OpenCode (`bunx omo install`)。**Light** = 仅 Codex CLI (`bunx omo install --platform=codex`)。**Both** = 两个版本均提供 (内部实现可能略有不同)。 +> **Editions 图例。** **Ultimate** = 仅 OpenCode (`bunx --package oh-my-openagent omo install`)。**Light** = 仅 Codex CLI (`bunx --package oh-my-openagent omo install --platform=codex`)。**Both** = 两个版本均提供 (内部实现可能略有不同)。 ### 自律军团 (Discipline Agents) diff --git a/docs/guide/installation.md b/docs/guide/installation.md index 05e7c95f6f..77671d67f0 100644 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -9,11 +9,11 @@ Most users want **Ultimate**. Pick **Light** if you are already invested in Code | You want | Run | Lands on disk | | :--- | :--- | :--- | -| Ultimate (OpenCode) | `bunx omo install` (TUI walks you through it) | Plugin registered in `opencode.json`, agent/model config, provider auth | -| Light (Codex CLI) | `bunx omo install --platform=codex` or `bunx lazycodex install` | `~/.codex/plugins/cache/sisyphuslabs/omo/`, stable Codex marketplace snapshot, `~/.codex/config.toml` marketplace/plugin/agent blocks, optional autonomous Codex permissions, component CLIs in `~/.local/bin` | -| Both | `bunx omo install --platform=both` | Both of the above | +| Ultimate (OpenCode) | `bunx --package oh-my-openagent omo install` (TUI walks you through it) | Plugin registered in `opencode.json`, agent/model config, provider auth | +| Light (Codex CLI) | `bunx --package oh-my-openagent omo install --platform=codex` or `bunx --package @code-yeongyu/lazycodex lazycodex install` | `~/.codex/plugins/cache/sisyphuslabs/omo/`, stable Codex marketplace snapshot, `~/.codex/config.toml` marketplace/plugin/agent blocks, optional autonomous Codex permissions, component CLIs in `~/.local/bin` | +| Both | `bunx --package oh-my-openagent omo install --platform=both` | Both of the above | -`--platform` defaults to `opencode` (Ultimate). The `bunx lazycodex install` alias is a shortcut for `bunx omo install --platform=codex`: same compiled CLI, different default. `lazycodex` is a repo/npm/bin alias, not the Codex marketplace name. +`--platform` defaults to `opencode` (Ultimate). The `bunx --package @code-yeongyu/lazycodex lazycodex install` alias is a shortcut for `bunx --package oh-my-openagent omo install --platform=codex`: same compiled CLI, different default. `lazycodex` is a repo/npm/bin alias, not the Codex marketplace name. ## For Humans @@ -33,11 +33,11 @@ https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/heads/dev/do The Light edition installer asks whether to configure Codex for autonomous full-permissions mode. This is recommended for agent-style use: `approval_policy = "never"`, `sandbox_mode = "danger-full-access"`, `network_access = "enabled"`, and notice warnings hidden. Use `--codex-autonomous` or `--no-codex-autonomous` to choose non-interactively: ```bash -bunx omo install --platform=codex +bunx --package oh-my-openagent omo install --platform=codex # equivalent: -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install # non-interactive recommended mode: -bunx lazycodex install --no-tui --codex-autonomous +bunx --package @code-yeongyu/lazycodex lazycodex install --no-tui --codex-autonomous ``` It writes only to `~/.codex/`. No OpenCode interaction, no provider flags. Codex config will register marketplace `sisyphuslabs` from the local built cache under `~/.codex/plugins/cache/sisyphuslabs` and enable plugin `omo@sisyphuslabs`. @@ -65,7 +65,7 @@ Codex may still start Windows shell calls through its own defaults. The Light ed > **Clean install note for oh-my-codex / omx users.** Before installing the Light edition into a Codex home that previously used [`oh-my-codex`](https://github.com/Yeachan-Heo/oh-my-codex), uninstall it first with `omx uninstall`, then re-run this installer. Both projects write Codex marketplace plugins, lifecycle hooks, and the `ultrawork`/`ulw` keyword into the same `~/.codex`, so a clean Codex home avoids stale shared `config.toml` keys and duplicate hooks. > -> If the uninstall command is unavailable, remove the old Codex plugin/cache entries it created under `~/.codex/`, then run `bunx omo install --platform=codex` again. +> If the uninstall command is unavailable, remove the old Codex plugin/cache entries it created under `~/.codex/`, then run `bunx --package oh-my-openagent omo install --platform=codex` again. ### A note on direct install @@ -248,7 +248,7 @@ bunx oh-my-openagent install \ ```bash bunx oh-my-openagent install --no-tui --platform=codex --codex-autonomous # equivalent: - bunx lazycodex install --no-tui --codex-autonomous + bunx --package @code-yeongyu/lazycodex lazycodex install --no-tui --codex-autonomous ``` - Both harnesses with Claude only: ```bash @@ -312,7 +312,7 @@ codex --help where bash ``` -If any of these come back empty, re-run `bunx omo install --platform=codex` — the installer is idempotent and will recompute hook trust hashes. +If any of these come back empty, re-run `bunx --package oh-my-openagent omo install --platform=codex` — the installer is idempotent and will recompute hook trust hashes. ### Step 4: Configure authentication @@ -643,11 +643,11 @@ The Codex CLI Light edition is fully independent of the OpenCode plugin. You can | Symptom | Fix | |---------|-----| -| `codex --help` does not list the omo plugin | Re-run `bunx omo install --platform=codex` (idempotent — hook hashes are recomputed) | +| `codex --help` does not list the omo plugin | Re-run `bunx --package oh-my-openagent omo install --platform=codex` (idempotent — hook hashes are recomputed) | | `command not found: omo-rules` or `command not found: omo` | Add `~/.local/bin` to `PATH`, or set `$CODEX_LOCAL_BIN_DIR` to a directory already on `PATH` | | `npm install` fails mid-install | `rm -rf ~/.codex/plugins/cache/sisyphuslabs` and retry | | Plugin block is present but hooks do not fire | Verify `~/.codex/config.toml` contains `[features]\nplugins = true\nplugin_hooks = true` and `[plugins."omo@sisyphuslabs"]` | -| `Ignoring malformed agent role definition: agents.*.config_file must point to an existing file` | Re-run `bunx omo install --platform=codex` (or `bunx lazycodex install`). The installer repairs stale managed `[agents.*]` entries and recreates `~/.codex/agents/*.toml`. | +| `Ignoring malformed agent role definition: agents.*.config_file must point to an existing file` | Re-run `bunx --package oh-my-openagent omo install --platform=codex` (or `bunx --package @code-yeongyu/lazycodex lazycodex install`). The installer repairs stale managed `[agents.*]` entries and recreates `~/.codex/agents/*.toml`. | | `SessionStart hook (failed)` / `UserPromptSubmit hook (failed)` with `MODULE_NOT_FOUND` for `components/*/dist/cli.js` | Re-run the installer so the cached plugin is rebuilt with component `dist/` files. If the cache was manually edited, remove `~/.codex/plugins/cache/sisyphuslabs` first. | | Hook trust hash mismatch warnings | Re-run the installer; hashes are regenerated each install | diff --git a/packages/omo-codex/MARKETPLACE.md b/packages/omo-codex/MARKETPLACE.md index 00f74fcaac..bc26ee03fb 100644 --- a/packages/omo-codex/MARKETPLACE.md +++ b/packages/omo-codex/MARKETPLACE.md @@ -17,7 +17,7 @@ Native Codex marketplace for the `omo` plugin. ## Install ```bash -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install ``` The installer builds `omo`, copies a clean versioned cache entry into `~/.codex/plugins/cache/sisyphuslabs/omo`, installs runtime dependencies in the cache, writes stable bundled-agent TOMLs through `~/.codex/.tmp/marketplaces/sisyphuslabs/plugins/omo`, registers the `sisyphuslabs` marketplace from the local built cache, and enables `[plugins."omo@sisyphuslabs"]` in `~/.codex/config.toml`. diff --git a/packages/omo-codex/README.md b/packages/omo-codex/README.md index 8d8173ce7c..87650fc505 100644 --- a/packages/omo-codex/README.md +++ b/packages/omo-codex/README.md @@ -28,9 +28,9 @@ Codex harness adapter for **oh-my-openagent**. Brings the OMO experience (rules End users invoke through the omodex CLI. This package is the **Light edition** of omo — install it directly with: ```bash -bunx omo install --platform=codex +bunx --package oh-my-openagent omo install --platform=codex # or via the shortcut alias (same compiled CLI, defaults --platform=codex): -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install # or the longer package names: bunx oh-my-opencode install --platform=codex bunx oh-my-openagent install --platform=codex @@ -69,7 +69,7 @@ Anonymous telemetry uses the same PostHog project as oh-my-openagent but emits t | Source | Reason | Trigger | |--------|--------|---------| -| `install` | `install_completed` | `bunx omo install --platform=codex` or `--platform=both` finishes (handled by `src/cli/install-codex/install-codex.ts`) | +| `install` | `install_completed` | `bunx --package oh-my-openagent omo install --platform=codex` or `--platform=both` finishes (handled by `src/cli/install-codex/install-codex.ts`) | | `plugin` | `session_start` | Codex plugin `SessionStart` hook fires (handled by `plugin/components/telemetry/`) | Both sources share the same SHA256-hashed installation identifier (`sha256("omo-codex:" + hostname)`), suppress PostHog person profiles, and write the daily dedup state to `~/.local/share/omo-codex/posthog-activity.json`. diff --git a/packages/omo-codex/plugin/components/comment-checker/README.md b/packages/omo-codex/plugin/components/comment-checker/README.md index d48d38f805..904604a02a 100644 --- a/packages/omo-codex/plugin/components/comment-checker/README.md +++ b/packages/omo-codex/plugin/components/comment-checker/README.md @@ -52,7 +52,7 @@ node dist/cli.js hook post-tool-use < test/fixtures/post-tool-use.json ## Local Codex Installation ```bash -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install ``` The installer builds and copies the plugin into `~/.codex/plugins/cache/sisyphuslabs/omo/0.1.0`, registers the `sisyphuslabs` marketplace from the `lazycodex` Git repository, installs runtime dependencies there, and enables: diff --git a/packages/omo-codex/plugin/components/lsp/README.md b/packages/omo-codex/plugin/components/lsp/README.md index 90acc65456..6eea738329 100644 --- a/packages/omo-codex/plugin/components/lsp/README.md +++ b/packages/omo-codex/plugin/components/lsp/README.md @@ -118,7 +118,7 @@ printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/cli.j ## Local Codex Installation ```bash -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install ``` The installer builds and copies the plugin into `~/.codex/plugins/cache/sisyphuslabs/omo/0.1.0`, registers the `sisyphuslabs` marketplace from the `lazycodex` Git repository, and enables: diff --git a/packages/omo-codex/plugin/components/rules/README.md b/packages/omo-codex/plugin/components/rules/README.md index c7a40dab56..99b258d50a 100644 --- a/packages/omo-codex/plugin/components/rules/README.md +++ b/packages/omo-codex/plugin/components/rules/README.md @@ -43,7 +43,7 @@ Prefer strict TypeScript and keep runtime imports ESM-compatible. ## Install Locally ```bash -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install ``` The local installer builds the plugin and copies a clean cache entry to: diff --git a/packages/omo-codex/plugin/components/ultrawork/README.md b/packages/omo-codex/plugin/components/ultrawork/README.md index 2ea6bf0450..a0e42ed0bc 100644 --- a/packages/omo-codex/plugin/components/ultrawork/README.md +++ b/packages/omo-codex/plugin/components/ultrawork/README.md @@ -20,7 +20,7 @@ The directive is currently 10,951 chars / 231 lines and follows the GPT-5.5 prom ## Install (via this marketplace) ```bash -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install ``` The installer copies the plugin into `~/.codex/plugins/cache/sisyphuslabs/omo/0.1.0`, writes the stable Codex marketplace snapshot at `~/.codex/.tmp/marketplaces/sisyphuslabs/`, registers the `sisyphuslabs` marketplace from the `lazycodex` Git repository, enables `omo@sisyphuslabs` in `~/.codex/config.toml`, registers the `UserPromptSubmit` hook, and installs the bundled agent TOMLs into `~/.codex/agents/` (symlinks on Unix, copies on Windows). A `.installed-agents.json` manifest is written next to the bundled TOMLs' source root for clean uninstall tracking. @@ -49,7 +49,7 @@ Expect `` ... directive body. ## Agent role smoke test -Run `bunx omo install --platform=codex`, then inspect `~/.codex/agents/`. On Linux / macOS you should see symlinks; on Windows you should see file copies. Each TOML should declare a non-empty `name`, `description`, and `developer_instructions`. +Run `bunx --package oh-my-openagent omo install --platform=codex`, then inspect `~/.codex/agents/`. On Linux / macOS you should see symlinks; on Windows you should see file copies. Each TOML should declare a non-empty `name`, `description`, and `developer_instructions`. ## License diff --git a/packages/omo-codex/plugin/components/ulw-loop/README.md b/packages/omo-codex/plugin/components/ulw-loop/README.md index a99d5e3608..902aae4f9f 100644 --- a/packages/omo-codex/plugin/components/ulw-loop/README.md +++ b/packages/omo-codex/plugin/components/ulw-loop/README.md @@ -47,7 +47,7 @@ npm pack --dry-run ## Local Codex Installation ```bash -bunx lazycodex install +bunx --package @code-yeongyu/lazycodex lazycodex install ``` The installer builds and copies the plugin into `~/.codex/plugins/cache/sisyphuslabs/omo/0.1.0`, registers the `sisyphuslabs` marketplace from the `lazycodex` Git repository, installs runtime dependencies there, and enables: diff --git a/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md b/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md index aa0433abec..99192071c3 100644 --- a/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +++ b/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md @@ -87,7 +87,7 @@ if [ -z "${ULW_LOOP_CLI:-}" ]; then /bin/mkdir -p .omo/ulw-loop 2>/dev/null || mkdir -p .omo/ulw-loop 2>/dev/null || true NOTE="${NOTE:-.omo/ulw-loop/bootstrap-notepad.md}" printf '%s\n' "omo executable missing from PATH; cached ulw-loop CLI not found under ${CODEX_HOME:-$HOME/.codex}." >> "$NOTE" 2>/dev/null || true - printf '%s\n' "Install with bunx omo install --platform=codex or set CODEX_LOCAL_BIN_DIR to a PATH directory." >&2 + printf '%s\n' "Install with bunx --package oh-my-openagent omo install --platform=codex or set CODEX_LOCAL_BIN_DIR to a PATH directory." >&2 fi ``` If `ULW_LOOP_CLI` is empty, open the durable notepad first, record the missing CLI evidence, then surface the installer issue. diff --git a/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md b/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md index aa0433abec..99192071c3 100644 --- a/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +++ b/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md @@ -87,7 +87,7 @@ if [ -z "${ULW_LOOP_CLI:-}" ]; then /bin/mkdir -p .omo/ulw-loop 2>/dev/null || mkdir -p .omo/ulw-loop 2>/dev/null || true NOTE="${NOTE:-.omo/ulw-loop/bootstrap-notepad.md}" printf '%s\n' "omo executable missing from PATH; cached ulw-loop CLI not found under ${CODEX_HOME:-$HOME/.codex}." >> "$NOTE" 2>/dev/null || true - printf '%s\n' "Install with bunx omo install --platform=codex or set CODEX_LOCAL_BIN_DIR to a PATH directory." >&2 + printf '%s\n' "Install with bunx --package oh-my-openagent omo install --platform=codex or set CODEX_LOCAL_BIN_DIR to a PATH directory." >&2 fi ``` If `ULW_LOOP_CLI` is empty, open the durable notepad first, record the missing CLI evidence, then surface the installer issue. diff --git a/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs b/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs index 774cd051aa..bbfc037948 100644 --- a/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs +++ b/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs @@ -39,7 +39,7 @@ test("#given Windows without Git Bash and auto install skip env #when installing "Git Bash is required.", "winget install --id Git.Git -e --source winget", "OMO_CODEX_GIT_BASH_PATH=C:\\path\\to\\bash.exe", - "rerun `bunx omo install --platform=codex`", + "rerun `bunx --package oh-my-openagent omo install --platform=codex`", ].join("\n"), }), runCommand: async (command, args, options) => { diff --git a/packages/omo-codex/scripts/install/git-bash.mjs b/packages/omo-codex/scripts/install/git-bash.mjs index 406ce74d05..7cc25588df 100644 --- a/packages/omo-codex/scripts/install/git-bash.mjs +++ b/packages/omo-codex/scripts/install/git-bash.mjs @@ -70,7 +70,7 @@ function missingGitBash(checkedPaths) { "Git Bash is required for native Windows Codex profile installs.", "Install it with: winget install --id Git.Git -e --source winget", `For a custom install, set ${GIT_BASH_ENV_KEY}=C:\\path\\to\\bash.exe`, - "Then rerun `bunx omo install --platform=codex`.", + "Then rerun `bunx --package oh-my-openagent omo install --platform=codex`.", ].join("\n"), }; } diff --git a/packages/omo-codex/scripts/install/git-bash.test.mjs b/packages/omo-codex/scripts/install/git-bash.test.mjs index e2a039b9c8..1377584cba 100644 --- a/packages/omo-codex/scripts/install/git-bash.test.mjs +++ b/packages/omo-codex/scripts/install/git-bash.test.mjs @@ -66,7 +66,7 @@ test("#given Windows without Git Bash #when resolving #then returns install guid assert.equal(result.found, false); assert.deepEqual(result.checkedPaths, [programFilesGitBash, programFilesX86GitBash]); assert.match(result.installHint, /winget install --id Git\.Git -e --source winget/); - assert.match(result.installHint, /rerun `bunx omo install --platform=codex`/); + assert.match(result.installHint, /rerun `bunx --package oh-my-openagent omo install --platform=codex`/); }); test("#given Windows without Git Bash and winget is allowed #when preparing #then winget runs and resolver retries", async () => { diff --git a/packages/omo-codex/src/install/index.ts b/packages/omo-codex/src/install/index.ts index e14a092e9e..d51a3ff578 100644 --- a/packages/omo-codex/src/install/index.ts +++ b/packages/omo-codex/src/install/index.ts @@ -1,4 +1,4 @@ // Codex install module entry point. Implemented in subsequent commits. // Hosts the TypeScript port of scripts/install-local.mjs invoked from the -// omodex CLI when the user passes `--platform=codex` to `bunx omo install`. +// omodex CLI when the user passes `--platform=codex` to `bunx --package oh-my-openagent omo install`. export {} diff --git a/script/lazycodex-install-docs.test.ts b/script/lazycodex-install-docs.test.ts new file mode 100644 index 0000000000..ed8ec43ebf --- /dev/null +++ b/script/lazycodex-install-docs.test.ts @@ -0,0 +1,38 @@ +/// + +import { describe, expect, test } from "bun:test" +import { readFileSync } from "node:fs" + +const repoRoot = new URL("../", import.meta.url) + +const installDocs = [ + "README.md", + "README.ko.md", + "README.ja.md", + "README.ru.md", + "README.zh-cn.md", + "docs/guide/installation.md", + "docs/reference/cli.md", + "packages/omo-codex/README.md", + "packages/omo-codex/MARKETPLACE.md", + "packages/omo-codex/plugin/components/comment-checker/README.md", + "packages/omo-codex/plugin/components/lsp/README.md", + "packages/omo-codex/plugin/components/rules/README.md", + "packages/omo-codex/plugin/components/ultrawork/README.md", + "packages/omo-codex/plugin/components/ulw-loop/README.md", +] + +const UNQUALIFIED_OMO_INSTALL = /(^|[^\w@/-])bunx\s+omo\s+install\b/u + +describe("LazyCodex install documentation", () => { + test("uses the scoped package-backed command for Codex Light install surfaces", () => { + for (const docPath of installDocs) { + // #given + const content = readFileSync(new URL(docPath, repoRoot), "utf8") + + // #then + expect(content, `${docPath} must not point users at the broken unscoped lazycodex package`).not.toContain("bunx lazycodex install") + expect(content, `${docPath} must not point users at the unrelated unscoped omo package`).not.toMatch(UNQUALIFIED_OMO_INSTALL) + } + }) +}) diff --git a/src/cli/AGENTS.md b/src/cli/AGENTS.md index b06a489236..78247ef1b3 100644 --- a/src/cli/AGENTS.md +++ b/src/cli/AGENTS.md @@ -19,7 +19,7 @@ Commander.js CLI with 8 commands. Entry: `index.ts` → `runCli()` in `cli-progr | `refresh-model-capabilities` | Refresh models.dev cache | Model capabilities refresh | | `boulder` | Boulder state inspector | Format work-state + tasks from `.omo/boulder-state/` | -`install` accepts `--platform=opencode|codex|both` (default `opencode`). `codex`/`both` route through `install-codex/` to install the Codex CLI Light edition (also `bunx lazycodex install`). See `packages/omo-codex/AGENTS.md`. +`install` accepts `--platform=opencode|codex|both` (default `opencode`). `codex`/`both` route through `install-codex/` to install the Codex CLI Light edition (also `bunx --package @code-yeongyu/lazycodex lazycodex install`). See `packages/omo-codex/AGENTS.md`. ## STRUCTURE diff --git a/src/cli/cli-program.test.ts b/src/cli/cli-program.test.ts index 58612e54cb..6d0461b86b 100644 --- a/src/cli/cli-program.test.ts +++ b/src/cli/cli-program.test.ts @@ -19,6 +19,25 @@ describe("cli-program", () => { expect(installBlock).not.toBeNull() expect(installBlock?.[1]).toContain('.alias("setup")') }) + + test("install command help avoids unqualified omo and lazycodex bunx examples", async () => { + // given + const cliProgramSource = await readFile( + path.resolve(import.meta.dir, "cli-program.ts"), + "utf-8", + ) + + // when + const installBlock = cliProgramSource.match( + /program\s*\n\s*\.command\("install"\)([\s\S]*?)\.action\(/, + ) + + // then + expect(installBlock).not.toBeNull() + expect(installBlock?.[1]).not.toContain("bunx lazycodex install") + expect(installBlock?.[1]).not.toMatch(/(^|[^\w@/-])bunx\s+omo\s+install\b/u) + expect(installBlock?.[1]).toContain("bunx --package @code-yeongyu/lazycodex lazycodex install --no-tui") + }) }) test("program configures explicit '-h, --help' help option for consistent help-flag ordering", async () => { diff --git a/src/cli/cli-program.ts b/src/cli/cli-program.ts index cb5df4b811..5d5d639d91 100644 --- a/src/cli/cli-program.ts +++ b/src/cli/cli-program.ts @@ -88,9 +88,9 @@ program .addHelpText("after", ` Examples: $ bunx oh-my-opencode install - $ bunx lazycodex install --no-tui + $ bunx --package @code-yeongyu/lazycodex lazycodex install --no-tui $ bunx oh-my-opencode install --no-tui --platform=both --claude=max20 --openai=yes --gemini=yes --copilot=no - $ omo install --platform=codex --codex-autonomous + $ bunx --package oh-my-openagent omo install --platform=codex --codex-autonomous $ bunx oh-my-opencode install --no-tui --claude=no --gemini=no --copilot=yes --opencode-zen=yes Model Providers (Priority: Native > Copilot > OpenCode Zen > Z.ai > Kimi > Vercel): diff --git a/src/cli/install-codex/git-bash.test.ts b/src/cli/install-codex/git-bash.test.ts index c0ceac830c..4aae30fb67 100644 --- a/src/cli/install-codex/git-bash.test.ts +++ b/src/cli/install-codex/git-bash.test.ts @@ -113,7 +113,7 @@ describe("git-bash", () => { expect(result.checkedPaths).toEqual([PROGRAM_FILES_GIT_BASH, PROGRAM_FILES_X86_GIT_BASH]) expect(result.installHint).toContain("winget install --id Git.Git -e --source winget") expect(result.installHint).toContain("OMO_CODEX_GIT_BASH_PATH=C:\\path\\to\\bash.exe") - expect(result.installHint).toContain("rerun `bunx omo install --platform=codex`") + expect(result.installHint).toContain("rerun `bunx --package oh-my-openagent omo install --platform=codex`") }) test("#given Windows without Git Bash and winget is allowed #when preparing #then winget runs and resolver is retried", async () => { diff --git a/src/cli/install-codex/git-bash.ts b/src/cli/install-codex/git-bash.ts index 80a01a0262..25ef354e91 100644 --- a/src/cli/install-codex/git-bash.ts +++ b/src/cli/install-codex/git-bash.ts @@ -100,7 +100,7 @@ function missingGitBash(checkedPaths: readonly string[]): GitBashResolution { "Git Bash is required for native Windows Codex profile installs.", "Install it with: winget install --id Git.Git -e --source winget", `For a custom install, set ${GIT_BASH_ENV_KEY}=C:\\path\\to\\bash.exe`, - "Then rerun `bunx omo install --platform=codex`.", + "Then rerun `bunx --package oh-my-openagent omo install --platform=codex`.", ].join("\n"), } } diff --git a/src/cli/install-codex/install-codex-git-bash-preflight.test.ts b/src/cli/install-codex/install-codex-git-bash-preflight.test.ts index 4f4982e6b9..58ba6d8cb2 100644 --- a/src/cli/install-codex/install-codex-git-bash-preflight.test.ts +++ b/src/cli/install-codex/install-codex-git-bash-preflight.test.ts @@ -52,7 +52,7 @@ describe("install-codex Git Bash preflight", () => { "Git Bash is required.", "winget install --id Git.Git -e --source winget", "OMO_CODEX_GIT_BASH_PATH=C:\\path\\to\\bash.exe", - "rerun `bunx omo install --platform=codex`", + "rerun `bunx --package oh-my-openagent omo install --platform=codex`", ].join("\n"), }), runCommand: async (command: string, args: readonly string[], options: CommandRunOptions) => { @@ -61,9 +61,23 @@ describe("install-codex Git Bash preflight", () => { }) // then - await expect(install).rejects.toThrow("winget install --id Git.Git -e --source winget") + let installError: unknown + try { + await install + } catch (error) { + installError = error + } + expect(installError).toBeInstanceOf(Error) + expect((installError as Error).message).toContain("winget install --id Git.Git -e --source winget") expect(commands).toEqual([]) - await expect(stat(join(codexHome, "config.toml"))).rejects.toThrow() + + let configStatError: unknown + try { + await stat(join(codexHome, "config.toml")) + } catch (error) { + configStatError = error + } + expect(configStatError).toBeInstanceOf(Error) }) test("#given Windows without Git Bash #when winget succeeds and resolver recovers #then install continues", async () => {