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.
- package/.agents/skills/opencode-qa/SKILL.md +194 -0
- package/.agents/skills/opencode-qa/references/cli-commands.md +188 -0
- package/.agents/skills/opencode-qa/references/db-investigation.md +197 -0
- package/.agents/skills/opencode-qa/references/events-hooks.md +110 -0
- package/.agents/skills/opencode-qa/references/sdk.md +96 -0
- package/.agents/skills/opencode-qa/references/server-api.md +200 -0
- package/.agents/skills/opencode-qa/references/testing-harness.md +218 -0
- package/.agents/skills/opencode-qa/references/tui-tmux.md +52 -0
- package/.agents/skills/opencode-qa/scripts/db-session-by-id.sh +53 -0
- package/.agents/skills/opencode-qa/scripts/db-session-by-name.sh +57 -0
- package/.agents/skills/opencode-qa/scripts/db-session-by-text.sh +158 -0
- package/.agents/skills/opencode-qa/scripts/export-roundtrip.sh +57 -0
- package/.agents/skills/opencode-qa/scripts/lib/common.sh +216 -0
- package/.agents/skills/opencode-qa/scripts/server-smoke.sh +64 -0
- package/.agents/skills/opencode-qa/scripts/sse-hook-probe.sh +106 -0
- package/.agents/skills/opencode-qa/scripts/tui-smoke.sh +89 -0
- package/README.ja.md +13 -3
- package/README.ko.md +13 -3
- package/README.md +24 -14
- package/README.ru.md +13 -3
- package/README.zh-cn.md +13 -3
- package/bin/oh-my-opencode.js +4 -3
- package/bin/oh-my-opencode.test.ts +35 -7
- package/bin/platform.d.ts +1 -1
- package/bin/platform.js +4 -4
- package/bin/platform.test.ts +31 -9
- package/dist/cli/cleanup-command.d.ts +4 -0
- package/dist/cli/cleanup.d.ts +11 -0
- package/dist/cli/cli-program.d.ts +2 -1
- package/dist/cli/index.js +1837 -450
- package/dist/cli/install-codex/codex-cache.d.ts +1 -0
- package/dist/cli/install-codex/codex-cleanup-config.d.ts +6 -0
- package/dist/cli/install-codex/codex-cleanup.d.ts +21 -0
- package/dist/cli/install-codex/codex-config-mcp.d.ts +1 -0
- package/dist/cli/install-codex/codex-config-permissions.d.ts +1 -0
- package/dist/cli/install-codex/codex-config-reasoning.d.ts +1 -0
- package/dist/cli/install-codex/codex-config-toml.d.ts +2 -1
- package/dist/cli/install-codex/codex-installation-detection.d.ts +36 -0
- package/dist/cli/install-codex/codex-package-layout.d.ts +1 -0
- package/dist/cli/install-codex/codex-project-local-cleanup-best-effort.d.ts +7 -0
- package/dist/cli/install-codex/codex-project-local-cleanup.d.ts +35 -0
- package/dist/cli/install-codex/git-bash.d.ts +35 -0
- package/dist/cli/install-codex/index.d.ts +4 -0
- package/dist/cli/install-codex/toml-section-editor.d.ts +2 -0
- package/dist/cli/install-codex/types.d.ts +20 -0
- package/dist/cli/run/event-state.d.ts +1 -0
- package/dist/cli/run/poll-for-completion.d.ts +1 -0
- package/dist/cli/run/prompt-start.d.ts +7 -0
- package/dist/cli/star-request.d.ts +9 -0
- package/dist/config/schema/hooks.d.ts +0 -1
- package/dist/create-hooks.d.ts +0 -1
- package/dist/features/builtin-skills/skills/debugging.d.ts +2 -0
- package/dist/features/builtin-skills/skills/index.d.ts +1 -0
- package/dist/hooks/index.d.ts +0 -1
- package/dist/index.js +267 -114
- package/dist/plugin/hooks/create-core-hooks.d.ts +0 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +1 -2
- package/dist/plugin/messages-transform.d.ts +8 -1
- package/dist/plugin/user-abort-interrupted-recovery-guard.d.ts +6 -0
- package/dist/shared/prompt-async-gate/recent-dispatches.d.ts +14 -0
- package/dist/shared/prompt-async-gate/semantic-dedupe.d.ts +7 -0
- package/dist/shared/prompt-async-gate/session-idle-dispatch.d.ts +1 -0
- package/dist/shared/prompt-async-gate/timing.d.ts +1 -0
- package/dist/shared/prompt-async-gate/types.d.ts +2 -0
- package/dist/shared/prompt-async-gate.d.ts +1 -1
- package/package.json +22 -17
- package/packages/git-bash-mcp/dist/cli.js +367 -0
- package/packages/omo-codex/plugin/.mcp.json +11 -0
- package/packages/omo-codex/plugin/components/comment-checker/README.md +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +29 -0
- package/packages/omo-codex/plugin/components/git-bash/package.json +23 -0
- package/packages/omo-codex/plugin/components/git-bash/src/cli.ts +33 -0
- package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +180 -0
- package/packages/omo-codex/plugin/components/git-bash/src/index.ts +10 -0
- package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +195 -0
- package/packages/omo-codex/plugin/components/git-bash/tsconfig.build.json +13 -0
- package/packages/omo-codex/plugin/components/git-bash/tsconfig.json +25 -0
- package/packages/omo-codex/plugin/components/lsp/README.md +1 -1
- package/packages/omo-codex/plugin/components/lsp/src/cli.ts +5 -5
- package/packages/omo-codex/plugin/components/lsp/src/codex-hook-cli.ts +33 -0
- package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +19 -27
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook-cli.test.ts +28 -0
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook-errors.test.ts +55 -0
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +7 -5
- package/packages/omo-codex/plugin/components/rules/README.md +1 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/windows-git-bash.md +10 -0
- package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +3 -1
- package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +97 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +5 -4
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +22 -0
- package/packages/omo-codex/plugin/components/ultrawork/README.md +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/codex-ultrawork-reviewer.toml +1 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +8 -7
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -1
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +31 -5
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +27 -4
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +25 -0
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +27 -205
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +230 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +102 -5
- package/packages/omo-codex/plugin/hooks/hooks.json +24 -2
- package/packages/omo-codex/plugin/package-lock.json +19 -0
- package/packages/omo-codex/plugin/package.json +3 -1
- package/packages/omo-codex/plugin/scripts/build-bundled-mcp-runtimes.mjs +16 -1
- package/packages/omo-codex/plugin/scripts/build-components.mjs +2 -1
- package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +87 -0
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +27 -2
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +20 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +27 -205
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +230 -0
- package/packages/omo-codex/plugin/test/aggregate.test.mjs +23 -8
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +56 -11
- package/packages/omo-codex/plugin/test/install-time-build-runtime.test.mjs +34 -0
- package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +21 -0
- package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +48 -0
- package/packages/omo-codex/plugin/test/subagent-guidance.test.mjs +76 -0
- package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +66 -0
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +32 -2
- package/packages/omo-codex/scripts/install/cache.mjs +5 -3
- package/packages/omo-codex/scripts/install/cli-args.mjs +112 -0
- package/packages/omo-codex/scripts/install/config.mjs +36 -1
- package/packages/omo-codex/scripts/install/delegated-command.mjs +25 -0
- package/packages/omo-codex/scripts/install/git-bash.mjs +99 -0
- package/packages/omo-codex/scripts/install/git-bash.test.mjs +174 -0
- package/packages/omo-codex/scripts/install/mcp-runtime-cache.mjs +5 -1
- package/packages/omo-codex/scripts/install/multi-agent-v2-config.mjs +7 -1
- package/packages/omo-codex/scripts/install/permissions.d.mts +1 -0
- package/packages/omo-codex/scripts/install/permissions.mjs +26 -0
- package/packages/omo-codex/scripts/install/project-local-cleanup.mjs +229 -0
- package/packages/omo-codex/scripts/install/reasoning-config.mjs +14 -0
- package/packages/omo-codex/scripts/install/source-package-build.mjs +20 -0
- package/packages/omo-codex/scripts/install/toml-editor.mjs +19 -2
- package/packages/omo-codex/scripts/install-cli-args.test.mjs +146 -0
- package/packages/omo-codex/scripts/install-config-autonomous.test.mjs +48 -0
- package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +62 -0
- package/packages/omo-codex/scripts/install-config.test.mjs +206 -0
- package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +129 -0
- package/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs +145 -0
- package/packages/omo-codex/scripts/install-local.mjs +91 -8
- package/packages/omo-codex/scripts/install-local.test.mjs +15 -0
- package/packages/omo-codex/scripts/install-mcp-runtime.test.mjs +60 -0
- package/packages/omo-codex/scripts/install-packaged-local.test.mjs +67 -0
- package/packages/omo-codex/scripts/install-project-local-cleanup.test.mjs +277 -0
- package/packages/shared-skills/skills/review-work/SKILL.md +27 -2
- package/packages/shared-skills/skills/start-work/SKILL.md +20 -0
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
116
|
-
| **Light** (Codex CLI) | `
|
|
117
|
-
| **Both** | `bunx
|
|
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
|
-
|
|
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
|
-
|
|
136
|
-
# equivalent:
|
|
137
|
-
bunx lazycodex install
|
|
145
|
+
npx lazycodex-ai install
|
|
138
146
|
# non-interactive recommended mode:
|
|
139
|
-
|
|
147
|
+
npx lazycodex-ai install --no-tui --codex-autonomous
|
|
140
148
|
```
|
|
141
149
|
|
|
142
|
-
|
|
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
|
-
|
|
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 `
|
|
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
|
|
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
|
-
|
|
410
|
+
npx lazycodex-ai cleanup
|
|
411
|
+
# or, from the shared CLI:
|
|
412
|
+
omo cleanup --platform=codex
|
|
403
413
|
```
|
|
404
414
|
|
|
405
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
package/bin/oh-my-opencode.js
CHANGED
|
@@ -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
|
-
|
|
109
|
-
|
|
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
|
|
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",
|
|
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/
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
100
|
-
return `${pkg}/bin/oh-my-opencode${ext}`;
|
|
100
|
+
return `${pkg}/bin/oh-my-opencode.js`;
|
|
101
101
|
}
|
package/bin/platform.test.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
199
|
-
expect(result).toBe("oh-my-opencode-windows-x64/bin/oh-my-opencode.
|
|
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
|
|
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
|
|
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,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 {};
|