oh-my-codex 0.7.5 → 0.8.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/README.de.md +314 -0
- package/README.es.md +295 -17
- package/README.fr.md +314 -0
- package/README.it.md +314 -0
- package/README.ja.md +296 -18
- package/README.ko.md +295 -17
- package/README.md +68 -3
- package/README.pt.md +295 -17
- package/README.ru.md +295 -17
- package/README.tr.md +314 -0
- package/README.vi.md +296 -18
- package/README.zh.md +292 -17
- package/dist/catalog/__tests__/generator.test.js +2 -0
- package/dist/catalog/__tests__/generator.test.js.map +1 -1
- package/dist/catalog/__tests__/schema.test.js +7 -0
- package/dist/catalog/__tests__/schema.test.js.map +1 -1
- package/dist/cli/__tests__/ask.test.d.ts +2 -0
- package/dist/cli/__tests__/ask.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ask.test.js +236 -0
- package/dist/cli/__tests__/ask.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.d.ts +2 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.d.ts.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js +45 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +43 -1
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts +2 -0
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +15 -0
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -0
- package/dist/cli/__tests__/ralph.test.d.ts +2 -0
- package/dist/cli/__tests__/ralph.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralph.test.js +40 -0
- package/dist/cli/__tests__/ralph.test.js.map +1 -0
- package/dist/cli/__tests__/setup-scope.test.js +2 -0
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/team-decompose.test.d.ts +2 -0
- package/dist/cli/__tests__/team-decompose.test.d.ts.map +1 -0
- package/dist/cli/__tests__/team-decompose.test.js +67 -0
- package/dist/cli/__tests__/team-decompose.test.js.map +1 -0
- package/dist/cli/__tests__/version.test.d.ts +2 -0
- package/dist/cli/__tests__/version.test.d.ts.map +1 -0
- package/dist/cli/__tests__/version.test.js +21 -0
- package/dist/cli/__tests__/version.test.js.map +1 -0
- package/dist/cli/ask.d.ts +13 -0
- package/dist/cli/ask.d.ts.map +1 -0
- package/dist/cli/ask.js +174 -0
- package/dist/cli/ask.js.map +1 -0
- package/dist/cli/constants.d.ts +10 -0
- package/dist/cli/constants.d.ts.map +1 -0
- package/dist/cli/constants.js +10 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/doctor.js +16 -5
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +7 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +117 -43
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ralph.d.ts +4 -0
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +89 -13
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/setup.js +1 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts +18 -0
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +108 -16
- package/dist/cli/team.js.map +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +8 -0
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/deep-interview-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.js +55 -0
- package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/emulator.test.js +6 -0
- package/dist/hooks/__tests__/emulator.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +44 -22
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js +59 -0
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +88 -0
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +199 -0
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts +11 -0
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js +266 -0
- package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js.map +1 -0
- package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/openclaw-setup-contract.test.js +51 -0
- package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts +2 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js +34 -0
- package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -0
- package/dist/hooks/__tests__/tmux-hook-engine.test.js +36 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +1 -1
- package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts +2 -0
- package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/visual-verdict-loop.test.js +35 -0
- package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -0
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +18 -16
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/codebase-map.d.ts.map +1 -1
- package/dist/hooks/codebase-map.js +6 -2
- package/dist/hooks/codebase-map.js.map +1 -1
- package/dist/hooks/emulator.d.ts.map +1 -1
- package/dist/hooks/emulator.js +2 -0
- package/dist/hooks/emulator.js.map +1 -1
- package/dist/hooks/extensibility/sdk.d.ts.map +1 -1
- package/dist/hooks/extensibility/sdk.js +2 -1
- package/dist/hooks/extensibility/sdk.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +6 -0
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +2 -24
- package/dist/hud/index.js.map +1 -1
- package/dist/mcp/__tests__/team-server-cleanup.test.d.ts +2 -0
- package/dist/mcp/__tests__/team-server-cleanup.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/team-server-cleanup.test.js +219 -0
- package/dist/mcp/__tests__/team-server-cleanup.test.js.map +1 -0
- package/dist/mcp/bootstrap.d.ts +1 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +1 -0
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/code-intel-server.d.ts.map +1 -1
- package/dist/mcp/code-intel-server.js +18 -8
- package/dist/mcp/code-intel-server.js.map +1 -1
- package/dist/mcp/memory-server.js +72 -11
- package/dist/mcp/memory-server.js.map +1 -1
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +4 -1
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +18 -5
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/mcp/team-server.d.ts +24 -0
- package/dist/mcp/team-server.d.ts.map +1 -0
- package/dist/mcp/team-server.js +425 -0
- package/dist/mcp/team-server.js.map +1 -0
- package/dist/mcp/trace-server.d.ts.map +1 -1
- package/dist/mcp/trace-server.js +8 -3
- package/dist/mcp/trace-server.js.map +1 -1
- package/dist/notifications/__tests__/verbosity.test.js +35 -0
- package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +12 -3
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/dispatcher.d.ts.map +1 -1
- package/dist/notifications/dispatcher.js +4 -4
- package/dist/notifications/dispatcher.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +6 -2
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/session-registry.d.ts.map +1 -1
- package/dist/notifications/session-registry.js +2 -2
- package/dist/notifications/session-registry.js.map +1 -1
- package/dist/notifications/tmux.d.ts.map +1 -1
- package/dist/notifications/tmux.js +13 -4
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/notifications/types.d.ts +4 -0
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/openclaw/__tests__/index.test.js +40 -0
- package/dist/openclaw/__tests__/index.test.js.map +1 -1
- package/dist/openclaw/dispatcher.d.ts.map +1 -1
- package/dist/openclaw/dispatcher.js +5 -2
- package/dist/openclaw/dispatcher.js.map +1 -1
- package/dist/openclaw/index.d.ts.map +1 -1
- package/dist/openclaw/index.js +1 -0
- package/dist/openclaw/index.js.map +1 -1
- package/dist/openclaw/types.d.ts +2 -0
- package/dist/openclaw/types.d.ts.map +1 -1
- package/dist/ralph/__tests__/persistence.test.js +28 -1
- package/dist/ralph/__tests__/persistence.test.js.map +1 -1
- package/dist/ralph/persistence.d.ts +21 -0
- package/dist/ralph/persistence.d.ts.map +1 -1
- package/dist/ralph/persistence.js +85 -2
- package/dist/ralph/persistence.js.map +1 -1
- package/dist/state/paths.d.ts +3 -0
- package/dist/state/paths.d.ts.map +1 -0
- package/dist/state/paths.js +2 -0
- package/dist/state/paths.js.map +1 -0
- package/dist/team/__tests__/idle-nudge.test.d.ts +2 -0
- package/dist/team/__tests__/idle-nudge.test.d.ts.map +1 -0
- package/dist/team/__tests__/idle-nudge.test.js +225 -0
- package/dist/team/__tests__/idle-nudge.test.js.map +1 -0
- package/dist/team/__tests__/role-router.test.d.ts +2 -0
- package/dist/team/__tests__/role-router.test.d.ts.map +1 -0
- package/dist/team/__tests__/role-router.test.js +204 -0
- package/dist/team/__tests__/role-router.test.js.map +1 -0
- package/dist/team/__tests__/runtime-cli.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-cli.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-cli.test.js +72 -0
- package/dist/team/__tests__/runtime-cli.test.js.map +1 -0
- package/dist/team/__tests__/runtime.test.js +195 -9
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.js +132 -2
- package/dist/team/__tests__/scaling.test.js.map +1 -1
- package/dist/team/__tests__/state-root.test.d.ts +2 -0
- package/dist/team/__tests__/state-root.test.d.ts.map +1 -0
- package/dist/team/__tests__/state-root.test.js +9 -0
- package/dist/team/__tests__/state-root.test.js.map +1 -0
- package/dist/team/__tests__/state.test.js +52 -17
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/team-ops-contract.test.d.ts +2 -0
- package/dist/team/__tests__/team-ops-contract.test.d.ts.map +1 -0
- package/dist/team/__tests__/team-ops-contract.test.js +90 -0
- package/dist/team/__tests__/team-ops-contract.test.js.map +1 -0
- package/dist/team/__tests__/tmux-session.test.js +94 -7
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +59 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/__tests__/worktree.test.js +81 -2
- package/dist/team/__tests__/worktree.test.js.map +1 -1
- package/dist/team/idle-nudge.d.ts +53 -0
- package/dist/team/idle-nudge.d.ts.map +1 -0
- package/dist/team/idle-nudge.js +140 -0
- package/dist/team/idle-nudge.js.map +1 -0
- package/dist/team/mcp-comm.d.ts +1 -1
- package/dist/team/mcp-comm.d.ts.map +1 -1
- package/dist/team/mcp-comm.js +6 -2
- package/dist/team/mcp-comm.js.map +1 -1
- package/dist/team/orchestrator.d.ts +1 -10
- package/dist/team/orchestrator.d.ts.map +1 -1
- package/dist/team/orchestrator.js +8 -0
- package/dist/team/orchestrator.js.map +1 -1
- package/dist/team/role-router.d.ts +32 -0
- package/dist/team/role-router.d.ts.map +1 -0
- package/dist/team/role-router.js +137 -0
- package/dist/team/role-router.js.map +1 -0
- package/dist/team/runtime-cli.d.ts +18 -0
- package/dist/team/runtime-cli.d.ts.map +1 -0
- package/dist/team/runtime-cli.js +244 -0
- package/dist/team/runtime-cli.js.map +1 -0
- package/dist/team/runtime.d.ts +6 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +148 -60
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts +1 -0
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +74 -32
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state/approvals.d.ts +25 -0
- package/dist/team/state/approvals.d.ts.map +1 -0
- package/dist/team/state/approvals.js +31 -0
- package/dist/team/state/approvals.js.map +1 -0
- package/dist/team/state/config.d.ts +2 -0
- package/dist/team/state/config.d.ts.map +1 -0
- package/dist/team/state/config.js +2 -0
- package/dist/team/state/config.js.map +1 -0
- package/dist/team/state/dispatch-lock.d.ts +3 -0
- package/dist/team/state/dispatch-lock.d.ts.map +1 -0
- package/dist/team/state/dispatch-lock.js +81 -0
- package/dist/team/state/dispatch-lock.js.map +1 -0
- package/dist/team/state/dispatch.d.ts +61 -0
- package/dist/team/state/dispatch.d.ts.map +1 -0
- package/dist/team/state/dispatch.js +158 -0
- package/dist/team/state/dispatch.js.map +1 -0
- package/dist/team/state/events.d.ts +2 -0
- package/dist/team/state/events.d.ts.map +1 -0
- package/dist/team/state/events.js +2 -0
- package/dist/team/state/events.js.map +1 -0
- package/dist/team/state/index.d.ts +11 -0
- package/dist/team/state/index.d.ts.map +1 -0
- package/dist/team/state/index.js +11 -0
- package/dist/team/state/index.js.map +1 -0
- package/dist/team/state/io.d.ts +2 -0
- package/dist/team/state/io.d.ts.map +1 -0
- package/dist/team/state/io.js +2 -0
- package/dist/team/state/io.js.map +1 -0
- package/dist/team/state/locks.d.ts +16 -0
- package/dist/team/state/locks.d.ts.map +1 -0
- package/dist/team/state/locks.js +201 -0
- package/dist/team/state/locks.js.map +1 -0
- package/dist/team/state/mailbox.d.ts +39 -0
- package/dist/team/state/mailbox.d.ts.map +1 -0
- package/dist/team/state/mailbox.js +58 -0
- package/dist/team/state/mailbox.js.map +1 -0
- package/dist/team/state/monitor.d.ts +96 -0
- package/dist/team/state/monitor.d.ts.map +1 -0
- package/dist/team/state/monitor.js +163 -0
- package/dist/team/state/monitor.js.map +1 -0
- package/dist/team/state/shutdown.d.ts +2 -0
- package/dist/team/state/shutdown.d.ts.map +1 -0
- package/dist/team/state/shutdown.js +2 -0
- package/dist/team/state/shutdown.js.map +1 -0
- package/dist/team/state/summary.d.ts +2 -0
- package/dist/team/state/summary.d.ts.map +1 -0
- package/dist/team/state/summary.js +2 -0
- package/dist/team/state/summary.js.map +1 -0
- package/dist/team/state/tasks.d.ts +49 -0
- package/dist/team/state/tasks.d.ts.map +1 -0
- package/dist/team/state/tasks.js +182 -0
- package/dist/team/state/tasks.js.map +1 -0
- package/dist/team/state/types.d.ts +281 -0
- package/dist/team/state/types.d.ts.map +1 -0
- package/dist/team/state/types.js +3 -0
- package/dist/team/state/types.js.map +1 -0
- package/dist/team/state/workers.d.ts +2 -0
- package/dist/team/state/workers.d.ts.map +1 -0
- package/dist/team/state/workers.js +2 -0
- package/dist/team/state/workers.js.map +1 -0
- package/dist/team/state-root.d.ts +5 -0
- package/dist/team/state-root.d.ts.map +1 -0
- package/dist/team/state-root.js +8 -0
- package/dist/team/state-root.js.map +1 -0
- package/dist/team/state.d.ts +6 -2
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +200 -881
- package/dist/team/state.js.map +1 -1
- package/dist/team/tmux-session.d.ts +42 -2
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +229 -74
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +2 -0
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +47 -20
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/team/worktree.d.ts +5 -1
- package/dist/team/worktree.d.ts.map +1 -1
- package/dist/team/worktree.js +71 -17
- package/dist/team/worktree.js.map +1 -1
- package/dist/utils/safe-json.d.ts +3 -0
- package/dist/utils/safe-json.d.ts.map +1 -0
- package/dist/utils/safe-json.js +19 -0
- package/dist/utils/safe-json.js.map +1 -0
- package/dist/utils/sleep.d.ts +3 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +15 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/visual/__tests__/verdict.test.d.ts +2 -0
- package/dist/visual/__tests__/verdict.test.d.ts.map +1 -0
- package/dist/visual/__tests__/verdict.test.js +81 -0
- package/dist/visual/__tests__/verdict.test.js.map +1 -0
- package/dist/visual/constants.d.ts +4 -0
- package/dist/visual/constants.d.ts.map +1 -0
- package/dist/visual/constants.js +3 -0
- package/dist/visual/constants.js.map +1 -0
- package/dist/visual/verdict.d.ts +17 -0
- package/dist/visual/verdict.d.ts.map +1 -0
- package/dist/visual/verdict.js +61 -0
- package/dist/visual/verdict.js.map +1 -0
- package/package.json +10 -3
- package/scripts/ask-claude.sh +17 -0
- package/scripts/ask-gemini.sh +14 -0
- package/scripts/fixtures/ask-advisor-stub.js +12 -0
- package/scripts/notify-hook/log.js +5 -0
- package/scripts/notify-hook/team-dispatch.js +56 -1
- package/scripts/notify-hook/tmux-injection.js +45 -4
- package/scripts/notify-hook/visual-verdict.js +158 -0
- package/scripts/notify-hook.js +27 -0
- package/scripts/run-provider-advisor.js +179 -0
- package/scripts/tmux-hook-engine.js +24 -0
- package/skills/ask-claude/SKILL.md +61 -0
- package/skills/ask-gemini/SKILL.md +61 -0
- package/skills/autopilot/SKILL.md +34 -4
- package/skills/configure-notifications/SKILL.md +1 -1
- package/skills/configure-openclaw/SKILL.md +154 -157
- package/skills/deep-interview/SKILL.md +247 -0
- package/skills/doctor/SKILL.md +1 -1
- package/skills/help/SKILL.md +3 -3
- package/skills/ralph/SKILL.md +42 -11
- package/skills/ralplan/SKILL.md +17 -0
- package/skills/skill/SKILL.md +32 -32
- package/skills/team/SKILL.md +60 -0
- package/skills/visual-verdict/SKILL.md +76 -0
- package/skills/web-clone/SKILL.md +366 -0
- package/skills/worker/SKILL.md +5 -4
- package/templates/AGENTS.md +9 -0
- package/templates/catalog-manifest.json +39 -2
package/README.vi.md
CHANGED
|
@@ -1,10 +1,59 @@
|
|
|
1
|
-
# oh-my-codex (OMX)
|
|
1
|
+
# oh-my-codex (OMX)
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://yeachan-heo.github.io/oh-my-codex-website/omx-character-nobg.png" alt="oh-my-codex character" width="280">
|
|
5
|
+
<br>
|
|
6
|
+
<em>Codex của bạn không đơn độc.</em>
|
|
7
|
+
</p>
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
[](https://www.npmjs.com/package/oh-my-codex)
|
|
10
|
+
[](https://opensource.org/licenses/MIT)
|
|
11
|
+
[](https://nodejs.org)
|
|
6
12
|
|
|
7
|
-
|
|
13
|
+
> **[Website](https://yeachan-heo.github.io/oh-my-codex-website/)** | **[Documentation](https://yeachan-heo.github.io/oh-my-codex-website/docs.html)** | **[CLI Reference](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#cli-reference)** | **[Workflows](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#workflows)** | **[GitHub](https://github.com/Yeachan-Heo/oh-my-codex)** | **[npm](https://www.npmjs.com/package/oh-my-codex)**
|
|
14
|
+
|
|
15
|
+
Lớp điều phối đa tác nhân cho [OpenAI Codex CLI](https://github.com/openai/codex).
|
|
16
|
+
|
|
17
|
+
## Ngôn ngữ
|
|
18
|
+
|
|
19
|
+
- [English](./README.md)
|
|
20
|
+
- [한국어 (Korean)](./README.ko.md)
|
|
21
|
+
- [日本語 (Japanese)](./README.ja.md)
|
|
22
|
+
- [简体中文 (Chinese)](./README.zh.md)
|
|
23
|
+
- [Tiếng Việt (Vietnamese)](./README.vi.md)
|
|
24
|
+
- [Español (Spanish)](./README.es.md)
|
|
25
|
+
- [Português (Portuguese)](./README.pt.md)
|
|
26
|
+
- [Русский (Russian)](./README.ru.md)
|
|
27
|
+
- [Türkçe (Turkish)](./README.tr.md)
|
|
28
|
+
- [Deutsch (German)](./README.de.md)
|
|
29
|
+
- [Français (French)](./README.fr.md)
|
|
30
|
+
- [Italiano (Italian)](./README.it.md)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
OMX biến Codex từ một tác nhân phiên đơn thành một hệ thống phối hợp với:
|
|
34
|
+
- Role prompts (`/prompts:name`) cho các tác nhân chuyên biệt
|
|
35
|
+
- Workflow skills (`$name`) cho các chế độ thực thi lặp lại
|
|
36
|
+
- Điều phối đội ngũ trong tmux (`omx team`, `$team`)
|
|
37
|
+
- Trạng thái bền vững và bộ nhớ qua máy chủ MCP
|
|
38
|
+
|
|
39
|
+
## Tại sao chọn OMX
|
|
40
|
+
|
|
41
|
+
Codex CLI mạnh mẽ cho các tác vụ trực tiếp. OMX thêm cấu trúc cho công việc lớn hơn:
|
|
42
|
+
- Phân tách và thực thi theo giai đoạn (`team-plan -> team-prd -> team-exec -> team-verify -> team-fix`)
|
|
43
|
+
- Trạng thái vòng đời chế độ bền vững (`.omx/state/`)
|
|
44
|
+
- Bề mặt bộ nhớ và sổ ghi chú cho phiên làm việc dài
|
|
45
|
+
- Điều khiển vận hành cho khởi chạy, xác minh và hủy bỏ
|
|
46
|
+
|
|
47
|
+
OMX là một tiện ích bổ sung, không phải fork. Nó sử dụng các điểm mở rộng gốc của Codex.
|
|
48
|
+
|
|
49
|
+
## Yêu cầu hệ thống
|
|
50
|
+
|
|
51
|
+
- macOS hoặc Linux (Windows qua WSL2)
|
|
52
|
+
- Node.js >= 20
|
|
53
|
+
- Codex CLI đã cài đặt (`npm install -g @openai/codex`)
|
|
54
|
+
- Xác thực Codex đã cấu hình
|
|
55
|
+
|
|
56
|
+
## Bắt đầu nhanh (3 phút)
|
|
8
57
|
|
|
9
58
|
```bash
|
|
10
59
|
npm install -g oh-my-codex
|
|
@@ -12,25 +61,254 @@ omx setup
|
|
|
12
61
|
omx doctor
|
|
13
62
|
```
|
|
14
63
|
|
|
15
|
-
|
|
64
|
+
Cấu hình khởi chạy khuyến nghị cho môi trường tin cậy:
|
|
16
65
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
66
|
+
```bash
|
|
67
|
+
omx --xhigh --madmax
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Mới trong v0.5.0
|
|
71
|
+
|
|
72
|
+
- **Thiết lập nhận biết phạm vi** qua `omx setup --scope user|project` cho các chế độ cài đặt linh hoạt.
|
|
73
|
+
- **Định tuyến Spark worker** qua `--spark` / `--madmax-spark` — worker của đội có thể sử dụng `gpt-5.3-codex-spark` mà không ép buộc model lãnh đạo.
|
|
74
|
+
- **Hợp nhất danh mục** — loại bỏ các prompt không dùng nữa (`deep-executor`, `scientist`) và 9 skill không dùng nữa để có bề mặt gọn hơn.
|
|
75
|
+
- **Mức độ chi tiết thông báo** cho kiểm soát chi tiết đầu ra CCNotifier.
|
|
76
|
+
|
|
77
|
+
## Phiên đầu tiên
|
|
21
78
|
|
|
22
|
-
|
|
79
|
+
Trong Codex:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
/prompts:architect "analyze current auth boundaries"
|
|
83
|
+
/prompts:executor "implement input validation in login"
|
|
84
|
+
$plan "ship OAuth callback safely"
|
|
85
|
+
$team 3:executor "fix all TypeScript errors"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Từ terminal:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
omx team 4:executor "parallelize a multi-module refactor"
|
|
92
|
+
omx team status <team-name>
|
|
93
|
+
omx team shutdown <team-name>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Mô hình cốt lõi
|
|
97
|
+
|
|
98
|
+
OMX cài đặt và kết nối các lớp sau:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
User
|
|
102
|
+
-> Codex CLI
|
|
103
|
+
-> AGENTS.md (bộ não điều phối)
|
|
104
|
+
-> ~/.codex/prompts/*.md (danh mục prompt tác nhân)
|
|
105
|
+
-> ~/.agents/skills/*/SKILL.md (danh mục skill)
|
|
106
|
+
-> ~/.codex/config.toml (tính năng, thông báo, MCP)
|
|
107
|
+
-> .omx/ (trạng thái runtime, bộ nhớ, kế hoạch, nhật ký)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Các lệnh chính
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
omx # Khởi chạy Codex (+ HUD trong tmux khi có sẵn)
|
|
114
|
+
omx setup # Cài đặt prompt/skill/config theo phạm vi + dự án AGENTS.md/.omx
|
|
115
|
+
omx doctor # Chẩn đoán cài đặt/runtime
|
|
116
|
+
omx doctor --team # Chẩn đoán Team/swarm
|
|
117
|
+
omx team ... # Khởi động/trạng thái/tiếp tục/tắt worker tmux của đội
|
|
118
|
+
omx status # Hiển thị các chế độ đang hoạt động
|
|
119
|
+
omx cancel # Hủy các chế độ thực thi đang hoạt động
|
|
120
|
+
omx reasoning <mode> # low|medium|high|xhigh
|
|
121
|
+
omx tmux-hook ... # init|status|validate|test
|
|
122
|
+
omx hooks ... # init|status|validate|test (quy trình mở rộng plugin)
|
|
123
|
+
omx hud ... # --watch|--json|--preset
|
|
124
|
+
omx help
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Mở rộng Hooks (Bề mặt bổ sung)
|
|
128
|
+
|
|
129
|
+
OMX hiện bao gồm `omx hooks` cho scaffolding và xác thực plugin.
|
|
130
|
+
|
|
131
|
+
- `omx tmux-hook` vẫn được hỗ trợ và không thay đổi.
|
|
132
|
+
- `omx hooks` là bổ sung và không thay thế quy trình tmux-hook.
|
|
133
|
+
- Tệp plugin nằm tại `.omx/hooks/*.mjs`.
|
|
134
|
+
- Plugin tắt theo mặc định; kích hoạt bằng `OMX_HOOK_PLUGINS=1`.
|
|
135
|
+
|
|
136
|
+
Xem `docs/hooks-extension.md` cho quy trình mở rộng đầy đủ và mô hình sự kiện.
|
|
137
|
+
|
|
138
|
+
## Cờ khởi chạy
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
--yolo
|
|
142
|
+
--high
|
|
143
|
+
--xhigh
|
|
144
|
+
--madmax
|
|
145
|
+
--force
|
|
146
|
+
--dry-run
|
|
147
|
+
--verbose
|
|
148
|
+
--scope <user|project> # chỉ dành cho setup
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
`--madmax` ánh xạ đến Codex `--dangerously-bypass-approvals-and-sandbox`.
|
|
152
|
+
Chỉ sử dụng trong môi trường sandbox tin cậy hoặc bên ngoài.
|
|
153
|
+
|
|
154
|
+
### Chính sách workingDirectory MCP (tăng cường tùy chọn)
|
|
155
|
+
|
|
156
|
+
Theo mặc định, các công cụ MCP state/memory/trace chấp nhận `workingDirectory` do người gọi cung cấp.
|
|
157
|
+
Để hạn chế điều này, đặt danh sách gốc được phép:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
export OMX_MCP_WORKDIR_ROOTS="/path/to/project:/path/to/another-root"
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Khi được đặt, các giá trị `workingDirectory` ngoài các gốc này sẽ bị từ chối.
|
|
164
|
+
|
|
165
|
+
## Kiểm soát Prompt Codex-First
|
|
166
|
+
|
|
167
|
+
Theo mặc định, OMX tiêm:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
-c model_instructions_file="<cwd>/AGENTS.md"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Điều này thêm hướng dẫn `AGENTS.md` của dự án vào lệnh khởi chạy Codex.
|
|
174
|
+
Mở rộng hành vi Codex, nhưng không thay thế/bỏ qua các chính sách hệ thống cốt lõi của Codex.
|
|
175
|
+
|
|
176
|
+
Điều khiển:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
OMX_BYPASS_DEFAULT_SYSTEM_PROMPT=0 omx # tắt tiêm AGENTS.md
|
|
180
|
+
OMX_MODEL_INSTRUCTIONS_FILE=/path/to/instructions.md omx
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Chế độ đội
|
|
184
|
+
|
|
185
|
+
Sử dụng chế độ đội cho công việc lớn được hưởng lợi từ worker song song.
|
|
186
|
+
|
|
187
|
+
Vòng đời:
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
start -> assign scoped lanes -> monitor -> verify terminal tasks -> shutdown
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Các lệnh vận hành:
|
|
23
194
|
|
|
24
195
|
```bash
|
|
25
|
-
omx
|
|
26
|
-
omx setup
|
|
27
|
-
omx doctor
|
|
28
196
|
omx team <args>
|
|
29
|
-
omx status
|
|
30
|
-
omx
|
|
197
|
+
omx team status <team-name>
|
|
198
|
+
omx team resume <team-name>
|
|
199
|
+
omx team shutdown <team-name>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Quy tắc quan trọng: không tắt khi các tác vụ vẫn đang ở trạng thái `in_progress` trừ khi đang hủy bỏ.
|
|
203
|
+
|
|
204
|
+
### Chính sách dọn dẹp Ralph
|
|
205
|
+
|
|
206
|
+
Khi đội chạy trong chế độ ralph (`omx team ralph ...`), việc dọn dẹp khi tắt
|
|
207
|
+
áp dụng chính sách chuyên dụng khác với đường dẫn thông thường:
|
|
208
|
+
|
|
209
|
+
| Hành vi | Đội thông thường | Đội Ralph |
|
|
210
|
+
|---|---|---|
|
|
211
|
+
| Tắt cưỡng bức khi lỗi | Ném `shutdown_gate_blocked` | Bỏ qua cổng, ghi nhật ký sự kiện `ralph_cleanup_policy` |
|
|
212
|
+
| Xóa nhánh tự động | Xóa nhánh worktree khi rollback | Giữ lại nhánh (`skipBranchDeletion`) |
|
|
213
|
+
| Ghi nhật ký hoàn thành | Sự kiện `shutdown_gate` tiêu chuẩn | Sự kiện `ralph_cleanup_summary` bổ sung với phân tích tác vụ |
|
|
214
|
+
|
|
215
|
+
Chính sách Ralph được phát hiện tự động từ trạng thái chế độ đội (`linked_ralph`) hoặc
|
|
216
|
+
có thể được truyền rõ ràng qua `omx team shutdown <name> --ralph`.
|
|
217
|
+
|
|
218
|
+
Chọn Worker CLI cho worker của đội:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
OMX_TEAM_WORKER_CLI=auto # mặc định; sử dụng claude khi worker --model chứa "claude"
|
|
222
|
+
OMX_TEAM_WORKER_CLI=codex # ép buộc worker Codex CLI
|
|
223
|
+
OMX_TEAM_WORKER_CLI=claude # ép buộc worker Claude CLI
|
|
224
|
+
OMX_TEAM_WORKER_CLI_MAP=codex,codex,claude,claude # hỗn hợp CLI theo worker (độ dài=1 hoặc số worker)
|
|
225
|
+
OMX_TEAM_AUTO_INTERRUPT_RETRY=0 # tùy chọn: tắt fallback thích ứng queue->resend
|
|
31
226
|
```
|
|
32
227
|
|
|
33
|
-
|
|
228
|
+
Lưu ý:
|
|
229
|
+
- Tham số khởi chạy worker vẫn được chia sẻ qua `OMX_TEAM_WORKER_LAUNCH_ARGS`.
|
|
230
|
+
- `OMX_TEAM_WORKER_CLI_MAP` ghi đè `OMX_TEAM_WORKER_CLI` cho lựa chọn theo worker.
|
|
231
|
+
- Gửi trigger sử dụng thử lại thích ứng theo mặc định (queue/submit, sau đó fallback an toàn clear-line+resend khi cần).
|
|
232
|
+
- Trong chế độ Claude worker, OMX khởi chạy worker dưới dạng `claude` thuần túy (không có tham số khởi chạy thêm) và bỏ qua các ghi đè rõ ràng `--model` / `--config` / `--effort` để Claude sử dụng `settings.json` mặc định.
|
|
233
|
+
|
|
234
|
+
## `omx setup` ghi những gì
|
|
235
|
+
|
|
236
|
+
- `.omx/setup-scope.json` (phạm vi cài đặt được lưu trữ)
|
|
237
|
+
- Cài đặt phụ thuộc phạm vi:
|
|
238
|
+
- `user`: `~/.codex/prompts/`, `~/.agents/skills/`, `~/.codex/config.toml`, `~/.omx/agents/`
|
|
239
|
+
- `project`: `./.codex/prompts/`, `./.agents/skills/`, `./.codex/config.toml`, `./.omx/agents/`
|
|
240
|
+
- Hành vi khởi chạy: nếu phạm vi được lưu trữ là `project`, khởi chạy `omx` tự động sử dụng `CODEX_HOME=./.codex` (trừ khi `CODEX_HOME` đã được đặt).
|
|
241
|
+
- `AGENTS.md` hiện có được giữ nguyên theo mặc định. Trong các lần chạy TTY tương tác, setup hỏi trước khi ghi đè; `--force` ghi đè không hỏi (kiểm tra an toàn phiên hoạt động vẫn áp dụng).
|
|
242
|
+
- Cập nhật `config.toml` (cho cả hai phạm vi):
|
|
243
|
+
- `notify = ["node", "..."]`
|
|
244
|
+
- `model_reasoning_effort = "high"`
|
|
245
|
+
- `developer_instructions = "..."`
|
|
246
|
+
- `[features] multi_agent = true, child_agents_md = true`
|
|
247
|
+
- Mục máy chủ MCP (`omx_state`, `omx_memory`, `omx_code_intel`, `omx_trace`)
|
|
248
|
+
- `[tui] status_line`
|
|
249
|
+
- `AGENTS.md` của dự án
|
|
250
|
+
- Thư mục `.omx/` runtime và cấu hình HUD
|
|
251
|
+
|
|
252
|
+
## Tác nhân và skill
|
|
253
|
+
|
|
254
|
+
- Prompt: `prompts/*.md` (cài vào `~/.codex/prompts/` cho `user`, `./.codex/prompts/` cho `project`)
|
|
255
|
+
- Skill: `skills/*/SKILL.md` (cài vào `~/.agents/skills/` cho `user`, `./.agents/skills/` cho `project`)
|
|
256
|
+
|
|
257
|
+
Ví dụ:
|
|
258
|
+
- Tác nhân: `architect`, `planner`, `executor`, `debugger`, `verifier`, `security-reviewer`
|
|
259
|
+
- Skill: `autopilot`, `plan`, `team`, `ralph`, `ultrawork`, `cancel`
|
|
260
|
+
|
|
261
|
+
## Cấu trúc dự án
|
|
262
|
+
|
|
263
|
+
```text
|
|
264
|
+
oh-my-codex/
|
|
265
|
+
bin/omx.js
|
|
266
|
+
src/
|
|
267
|
+
cli/
|
|
268
|
+
team/
|
|
269
|
+
mcp/
|
|
270
|
+
hooks/
|
|
271
|
+
hud/
|
|
272
|
+
config/
|
|
273
|
+
modes/
|
|
274
|
+
notifications/
|
|
275
|
+
verification/
|
|
276
|
+
prompts/
|
|
277
|
+
skills/
|
|
278
|
+
templates/
|
|
279
|
+
scripts/
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Phát triển
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
git clone https://github.com/Yeachan-Heo/oh-my-codex.git
|
|
286
|
+
cd oh-my-codex
|
|
287
|
+
npm install
|
|
288
|
+
npm run build
|
|
289
|
+
npm test
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Tài liệu
|
|
293
|
+
|
|
294
|
+
- **[Tài liệu đầy đủ](https://yeachan-heo.github.io/oh-my-codex-website/docs.html)** — Hướng dẫn hoàn chỉnh
|
|
295
|
+
- **[Tham chiếu CLI](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#cli-reference)** — Tất cả lệnh `omx`, cờ và công cụ
|
|
296
|
+
- **[Hướng dẫn thông báo](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#notifications)** — Cài đặt Discord, Telegram, Slack và webhook
|
|
297
|
+
- **[Quy trình công việc khuyến nghị](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#workflows)** — Chuỗi skill đã thử nghiệm thực chiến cho các tác vụ phổ biến
|
|
298
|
+
- **[Ghi chú phát hành](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#release-notes)** — Tính năng mới trong mỗi phiên bản
|
|
299
|
+
|
|
300
|
+
## Ghi chú
|
|
301
|
+
|
|
302
|
+
- Nhật ký thay đổi đầy đủ: `CHANGELOG.md`
|
|
303
|
+
- Hướng dẫn di chuyển (sau v0.4.4 mainline): `docs/migration-mainline-post-v0.4.4.md`
|
|
304
|
+
- Ghi chú về độ bao phủ và tương đương: `COVERAGE.md`
|
|
305
|
+
- Quy trình mở rộng hook: `docs/hooks-extension.md`
|
|
306
|
+
- Chi tiết cài đặt và đóng góp: `CONTRIBUTING.md`
|
|
307
|
+
|
|
308
|
+
## Lời cảm ơn
|
|
309
|
+
|
|
310
|
+
Lấy cảm hứng từ [oh-my-claudecode](https://github.com/Yeachan-Heo/oh-my-claudecode), được điều chỉnh cho Codex CLI.
|
|
311
|
+
|
|
312
|
+
## Giấy phép
|
|
34
313
|
|
|
35
|
-
|
|
36
|
-
- Website: https://yeachan-heo.github.io/oh-my-codex-website/
|
|
314
|
+
MIT
|
package/README.zh.md
CHANGED
|
@@ -1,10 +1,59 @@
|
|
|
1
|
-
# oh-my-codex (OMX)
|
|
1
|
+
# oh-my-codex (OMX)
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://yeachan-heo.github.io/oh-my-codex-website/omx-character-nobg.png" alt="oh-my-codex character" width="280">
|
|
5
|
+
<br>
|
|
6
|
+
<em>你的 codex 并不孤单。</em>
|
|
7
|
+
</p>
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
[](https://www.npmjs.com/package/oh-my-codex)
|
|
10
|
+
[](https://opensource.org/licenses/MIT)
|
|
11
|
+
[](https://nodejs.org)
|
|
6
12
|
|
|
7
|
-
|
|
13
|
+
> **[Website](https://yeachan-heo.github.io/oh-my-codex-website/)** | **[Documentation](https://yeachan-heo.github.io/oh-my-codex-website/docs.html)** | **[CLI Reference](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#cli-reference)** | **[Workflows](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#workflows)** | **[GitHub](https://github.com/Yeachan-Heo/oh-my-codex)** | **[npm](https://www.npmjs.com/package/oh-my-codex)**
|
|
14
|
+
|
|
15
|
+
[OpenAI Codex CLI](https://github.com/openai/codex) 的多智能体编排层。
|
|
16
|
+
|
|
17
|
+
## 语言
|
|
18
|
+
|
|
19
|
+
- [English](./README.md)
|
|
20
|
+
- [한국어 (Korean)](./README.ko.md)
|
|
21
|
+
- [日本語 (Japanese)](./README.ja.md)
|
|
22
|
+
- [简体中文 (Chinese)](./README.zh.md)
|
|
23
|
+
- [Tiếng Việt (Vietnamese)](./README.vi.md)
|
|
24
|
+
- [Español (Spanish)](./README.es.md)
|
|
25
|
+
- [Português (Portuguese)](./README.pt.md)
|
|
26
|
+
- [Русский (Russian)](./README.ru.md)
|
|
27
|
+
- [Türkçe (Turkish)](./README.tr.md)
|
|
28
|
+
- [Deutsch (German)](./README.de.md)
|
|
29
|
+
- [Français (French)](./README.fr.md)
|
|
30
|
+
- [Italiano (Italian)](./README.it.md)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
OMX 将 Codex 从单会话代理转变为协调系统:
|
|
34
|
+
- 用于专业代理的 role prompts (`/prompts:name`)
|
|
35
|
+
- 用于可重复执行模式的 workflow skills (`$name`)
|
|
36
|
+
- 在 tmux 中的团队编排 (`omx team`, `$team`)
|
|
37
|
+
- 通过 MCP 服务器实现持久状态和记忆
|
|
38
|
+
|
|
39
|
+
## 为什么选择 OMX
|
|
40
|
+
|
|
41
|
+
Codex CLI 擅长处理直接任务。OMX 为更大规模的工作添加结构:
|
|
42
|
+
- 分解和分阶段执行 (`team-plan -> team-prd -> team-exec -> team-verify -> team-fix`)
|
|
43
|
+
- 持久化的模式生命周期状态 (`.omx/state/`)
|
|
44
|
+
- 长时间会话的记忆和记事本表面
|
|
45
|
+
- 用于启动、验证和取消的操作控制
|
|
46
|
+
|
|
47
|
+
OMX 是一个插件,而非 fork。它使用 Codex 的原生扩展点。
|
|
48
|
+
|
|
49
|
+
## 系统要求
|
|
50
|
+
|
|
51
|
+
- macOS 或 Linux(Windows 通过 WSL2)
|
|
52
|
+
- Node.js >= 20
|
|
53
|
+
- 已安装 Codex CLI (`npm install -g @openai/codex`)
|
|
54
|
+
- 已配置 Codex 身份验证
|
|
55
|
+
|
|
56
|
+
## 快速开始(3 分钟)
|
|
8
57
|
|
|
9
58
|
```bash
|
|
10
59
|
npm install -g oh-my-codex
|
|
@@ -12,28 +61,254 @@ omx setup
|
|
|
12
61
|
omx doctor
|
|
13
62
|
```
|
|
14
63
|
|
|
15
|
-
|
|
64
|
+
推荐的可信环境启动配置:
|
|
16
65
|
|
|
17
66
|
```bash
|
|
18
67
|
omx --xhigh --madmax
|
|
19
68
|
```
|
|
20
69
|
|
|
21
|
-
##
|
|
70
|
+
## v0.5.0 新功能
|
|
22
71
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
72
|
+
- 通过 `omx setup --scope user|project` 实现**作用域感知设置** — 灵活的安装模式。
|
|
73
|
+
- 通过 `--spark` / `--madmax-spark` 实现 **Spark worker 路由** — 团队 worker 可以使用 `gpt-5.3-codex-spark` 而无需强制使用领导者模型。
|
|
74
|
+
- **目录整合** — 移除已弃用的 prompt(`deep-executor`、`scientist`)和 9 个已弃用的 skill,使表面更精简。
|
|
75
|
+
- **通知详细级别** — 对 CCNotifier 输出的精细控制。
|
|
27
76
|
|
|
28
|
-
##
|
|
77
|
+
## 首次会话
|
|
78
|
+
|
|
79
|
+
在 Codex 内部:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
/prompts:architect "analyze current auth boundaries"
|
|
83
|
+
/prompts:executor "implement input validation in login"
|
|
84
|
+
$plan "ship OAuth callback safely"
|
|
85
|
+
$team 3:executor "fix all TypeScript errors"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
从终端:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
omx team 4:executor "parallelize a multi-module refactor"
|
|
92
|
+
omx team status <team-name>
|
|
93
|
+
omx team shutdown <team-name>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## 核心模型
|
|
97
|
+
|
|
98
|
+
OMX 安装并连接以下层:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
User
|
|
102
|
+
-> Codex CLI
|
|
103
|
+
-> AGENTS.md (编排大脑)
|
|
104
|
+
-> ~/.codex/prompts/*.md (代理 prompt 目录)
|
|
105
|
+
-> ~/.agents/skills/*/SKILL.md (skill 目录)
|
|
106
|
+
-> ~/.codex/config.toml (功能、通知、MCP)
|
|
107
|
+
-> .omx/ (运行时状态、记忆、计划、日志)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 主要命令
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
omx # 启动 Codex(在 tmux 中附带 HUD)
|
|
114
|
+
omx setup # 按作用域安装 prompt/skill/config + 项目 AGENTS.md/.omx
|
|
115
|
+
omx doctor # 安装/运行时诊断
|
|
116
|
+
omx doctor --team # Team/swarm 诊断
|
|
117
|
+
omx team ... # 启动/状态/恢复/关闭 tmux 团队 worker
|
|
118
|
+
omx status # 显示活动模式
|
|
119
|
+
omx cancel # 取消活动执行模式
|
|
120
|
+
omx reasoning <mode> # low|medium|high|xhigh
|
|
121
|
+
omx tmux-hook ... # init|status|validate|test
|
|
122
|
+
omx hooks ... # init|status|validate|test(插件扩展工作流)
|
|
123
|
+
omx hud ... # --watch|--json|--preset
|
|
124
|
+
omx help
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Hooks 扩展(附加表面)
|
|
128
|
+
|
|
129
|
+
OMX 现在包含用于插件脚手架和验证的 `omx hooks`。
|
|
130
|
+
|
|
131
|
+
- `omx tmux-hook` 继续支持且未更改。
|
|
132
|
+
- `omx hooks` 是附加的,不会替代 tmux-hook 工作流。
|
|
133
|
+
- 插件文件位于 `.omx/hooks/*.mjs`。
|
|
134
|
+
- 插件默认关闭;使用 `OMX_HOOK_PLUGINS=1` 启用。
|
|
135
|
+
|
|
136
|
+
完整的扩展工作流和事件模型请参阅 `docs/hooks-extension.md`。
|
|
137
|
+
|
|
138
|
+
## 启动标志
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
--yolo
|
|
142
|
+
--high
|
|
143
|
+
--xhigh
|
|
144
|
+
--madmax
|
|
145
|
+
--force
|
|
146
|
+
--dry-run
|
|
147
|
+
--verbose
|
|
148
|
+
--scope <user|project> # 仅用于 setup
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
`--madmax` 映射到 Codex `--dangerously-bypass-approvals-and-sandbox`。
|
|
152
|
+
仅在可信/外部沙箱环境中使用。
|
|
153
|
+
|
|
154
|
+
### MCP workingDirectory 策略(可选加固)
|
|
155
|
+
|
|
156
|
+
默认情况下,MCP state/memory/trace 工具接受调用方提供的 `workingDirectory`。
|
|
157
|
+
要限制此行为,请设置允许的根目录列表:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
export OMX_MCP_WORKDIR_ROOTS="/path/to/project:/path/to/another-root"
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
设置后,超出这些根目录的 `workingDirectory` 值将被拒绝。
|
|
164
|
+
|
|
165
|
+
## Codex-First Prompt 控制
|
|
166
|
+
|
|
167
|
+
默认情况下,OMX 注入:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
-c model_instructions_file="<cwd>/AGENTS.md"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
这将项目 `AGENTS.md` 指导添加到 Codex 启动指令中。
|
|
174
|
+
扩展 Codex 行为,但不会替换/绕过 Codex 核心系统策略。
|
|
175
|
+
|
|
176
|
+
控制:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
OMX_BYPASS_DEFAULT_SYSTEM_PROMPT=0 omx # 禁用 AGENTS.md 注入
|
|
180
|
+
OMX_MODEL_INSTRUCTIONS_FILE=/path/to/instructions.md omx
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## 团队模式
|
|
184
|
+
|
|
185
|
+
对于受益于并行 worker 的大规模工作,使用团队模式。
|
|
186
|
+
|
|
187
|
+
生命周期:
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
start -> assign scoped lanes -> monitor -> verify terminal tasks -> shutdown
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
操作命令:
|
|
29
194
|
|
|
30
195
|
```bash
|
|
31
|
-
omx
|
|
32
|
-
omx setup
|
|
33
|
-
omx doctor
|
|
34
196
|
omx team <args>
|
|
35
|
-
omx status
|
|
36
|
-
omx
|
|
197
|
+
omx team status <team-name>
|
|
198
|
+
omx team resume <team-name>
|
|
199
|
+
omx team shutdown <team-name>
|
|
37
200
|
```
|
|
38
201
|
|
|
39
|
-
|
|
202
|
+
重要规则:除非中止,否则不要在任务仍处于 `in_progress` 状态时关闭。
|
|
203
|
+
|
|
204
|
+
### Ralph 清理策略
|
|
205
|
+
|
|
206
|
+
当团队在 ralph 模式下运行时(`omx team ralph ...`),关闭清理
|
|
207
|
+
应用与常规路径不同的专用策略:
|
|
208
|
+
|
|
209
|
+
| 行为 | 普通团队 | Ralph 团队 |
|
|
210
|
+
|---|---|---|
|
|
211
|
+
| 失败时强制关闭 | 抛出 `shutdown_gate_blocked` | 绕过闸门,记录 `ralph_cleanup_policy` 事件 |
|
|
212
|
+
| 自动分支删除 | 回滚时删除 worktree 分支 | 保留分支 (`skipBranchDeletion`) |
|
|
213
|
+
| 完成日志 | 标准 `shutdown_gate` 事件 | 附带任务分解的 `ralph_cleanup_summary` 事件 |
|
|
214
|
+
|
|
215
|
+
Ralph 策略从团队模式状态(`linked_ralph`)自动检测,或
|
|
216
|
+
可通过 `omx team shutdown <name> --ralph` 显式传递。
|
|
217
|
+
|
|
218
|
+
团队 worker 的 Worker CLI 选择:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
OMX_TEAM_WORKER_CLI=auto # 默认;当 worker --model 包含 "claude" 时使用 claude
|
|
222
|
+
OMX_TEAM_WORKER_CLI=codex # 强制 Codex CLI worker
|
|
223
|
+
OMX_TEAM_WORKER_CLI=claude # 强制 Claude CLI worker
|
|
224
|
+
OMX_TEAM_WORKER_CLI_MAP=codex,codex,claude,claude # 每个 worker 的 CLI 混合(长度=1 或 worker 数量)
|
|
225
|
+
OMX_TEAM_AUTO_INTERRUPT_RETRY=0 # 可选:禁用自适应 queue->resend 回退
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
注意:
|
|
229
|
+
- Worker 启动参数仍通过 `OMX_TEAM_WORKER_LAUNCH_ARGS` 共享。
|
|
230
|
+
- `OMX_TEAM_WORKER_CLI_MAP` 覆盖 `OMX_TEAM_WORKER_CLI` 以实现每个 worker 的选择。
|
|
231
|
+
- 触发器提交默认使用自适应重试(queue/submit,需要时使用安全的 clear-line+resend 回退)。
|
|
232
|
+
- 在 Claude worker 模式下,OMX 以普通 `claude` 启动 worker(无额外启动参数),并忽略显式的 `--model` / `--config` / `--effort` 覆盖,使 Claude 使用默认 `settings.json`。
|
|
233
|
+
|
|
234
|
+
## `omx setup` 写入的内容
|
|
235
|
+
|
|
236
|
+
- `.omx/setup-scope.json`(持久化的设置作用域)
|
|
237
|
+
- 依赖作用域的安装:
|
|
238
|
+
- `user`:`~/.codex/prompts/`、`~/.agents/skills/`、`~/.codex/config.toml`、`~/.omx/agents/`
|
|
239
|
+
- `project`:`./.codex/prompts/`、`./.agents/skills/`、`./.codex/config.toml`、`./.omx/agents/`
|
|
240
|
+
- 启动行为:如果持久化的作用域是 `project`,`omx` 启动时自动使用 `CODEX_HOME=./.codex`(除非 `CODEX_HOME` 已设置)。
|
|
241
|
+
- 现有 `AGENTS.md` 默认保留。在交互式 TTY 运行中,setup 会在覆盖前询问;`--force` 无需询问直接覆盖(活动会话安全检查仍然适用)。
|
|
242
|
+
- `config.toml` 更新(两种作用域均适用):
|
|
243
|
+
- `notify = ["node", "..."]`
|
|
244
|
+
- `model_reasoning_effort = "high"`
|
|
245
|
+
- `developer_instructions = "..."`
|
|
246
|
+
- `[features] multi_agent = true, child_agents_md = true`
|
|
247
|
+
- MCP 服务器条目(`omx_state`、`omx_memory`、`omx_code_intel`、`omx_trace`)
|
|
248
|
+
- `[tui] status_line`
|
|
249
|
+
- 项目 `AGENTS.md`
|
|
250
|
+
- `.omx/` 运行时目录和 HUD 配置
|
|
251
|
+
|
|
252
|
+
## 代理和技能
|
|
253
|
+
|
|
254
|
+
- Prompt:`prompts/*.md`(`user` 安装到 `~/.codex/prompts/`,`project` 安装到 `./.codex/prompts/`)
|
|
255
|
+
- Skill:`skills/*/SKILL.md`(`user` 安装到 `~/.agents/skills/`,`project` 安装到 `./.agents/skills/`)
|
|
256
|
+
|
|
257
|
+
示例:
|
|
258
|
+
- 代理:`architect`、`planner`、`executor`、`debugger`、`verifier`、`security-reviewer`
|
|
259
|
+
- 技能:`autopilot`、`plan`、`team`、`ralph`、`ultrawork`、`cancel`
|
|
260
|
+
|
|
261
|
+
## 项目结构
|
|
262
|
+
|
|
263
|
+
```text
|
|
264
|
+
oh-my-codex/
|
|
265
|
+
bin/omx.js
|
|
266
|
+
src/
|
|
267
|
+
cli/
|
|
268
|
+
team/
|
|
269
|
+
mcp/
|
|
270
|
+
hooks/
|
|
271
|
+
hud/
|
|
272
|
+
config/
|
|
273
|
+
modes/
|
|
274
|
+
notifications/
|
|
275
|
+
verification/
|
|
276
|
+
prompts/
|
|
277
|
+
skills/
|
|
278
|
+
templates/
|
|
279
|
+
scripts/
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## 开发
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
git clone https://github.com/Yeachan-Heo/oh-my-codex.git
|
|
286
|
+
cd oh-my-codex
|
|
287
|
+
npm install
|
|
288
|
+
npm run build
|
|
289
|
+
npm test
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## 文档
|
|
293
|
+
|
|
294
|
+
- **[完整文档](https://yeachan-heo.github.io/oh-my-codex-website/docs.html)** — 完整指南
|
|
295
|
+
- **[CLI 参考](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#cli-reference)** — 所有 `omx` 命令、标志和工具
|
|
296
|
+
- **[通知指南](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#notifications)** — Discord、Telegram、Slack 和 webhook 设置
|
|
297
|
+
- **[推荐工作流](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#workflows)** — 用于常见任务的经过实战检验的 skill 链
|
|
298
|
+
- **[发行说明](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#release-notes)** — 每个版本的新功能
|
|
299
|
+
|
|
300
|
+
## 备注
|
|
301
|
+
|
|
302
|
+
- 完整变更日志:`CHANGELOG.md`
|
|
303
|
+
- 迁移指南(v0.4.4 后的 mainline):`docs/migration-mainline-post-v0.4.4.md`
|
|
304
|
+
- 覆盖率和对等说明:`COVERAGE.md`
|
|
305
|
+
- Hook 扩展工作流:`docs/hooks-extension.md`
|
|
306
|
+
- 设置和贡献详情:`CONTRIBUTING.md`
|
|
307
|
+
|
|
308
|
+
## 致谢
|
|
309
|
+
|
|
310
|
+
受 [oh-my-claudecode](https://github.com/Yeachan-Heo/oh-my-claudecode) 启发,为 Codex CLI 适配。
|
|
311
|
+
|
|
312
|
+
## 许可证
|
|
313
|
+
|
|
314
|
+
MIT
|
|
@@ -32,6 +32,8 @@ describe('catalog reader/contract', () => {
|
|
|
32
32
|
assert.ok(contract.aliases.some((a) => a.name === 'swarm' && a.canonical === 'team'));
|
|
33
33
|
assert.ok(contract.internalHidden.includes('worker'));
|
|
34
34
|
assert.ok(contract.coreSkills.includes('autopilot'));
|
|
35
|
+
assert.ok(contract.skills.some((s) => s.name === 'ask-claude' && s.status === 'active'));
|
|
36
|
+
assert.ok(contract.skills.some((s) => s.name === 'ask-gemini' && s.status === 'active'));
|
|
35
37
|
});
|
|
36
38
|
it('template manifest can be synced from source manifest', async () => {
|
|
37
39
|
const sourceRaw = await readFile(join(process.cwd(), 'src', 'catalog', 'manifest.json'), 'utf8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.test.js","sourceRoot":"","sources":["../../../src/catalog/__tests__/generator.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5E,KAAK,UAAU,qBAAqB;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,wBAAwB;IACrC,MAAM,GAAG,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6C,CAAC;IAC3E,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;KAC7B,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,uBAAuB,CAAC,EAChD,MAAM,qBAAqB,EAAE,CAC9B,CAAC;QAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,wBAAwB,EAAE,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC;QACtF,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.test.js","sourceRoot":"","sources":["../../../src/catalog/__tests__/generator.test.ts"],"names":[],"mappings":"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"}
|