oh-my-codex 0.2.2 → 0.3.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.md +56 -23
- package/dist/cli/__tests__/doctor-team.test.d.ts +2 -0
- package/dist/cli/__tests__/doctor-team.test.d.ts.map +1 -0
- package/dist/cli/__tests__/doctor-team.test.js +151 -0
- package/dist/cli/__tests__/doctor-team.test.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +31 -1
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.js +2 -0
- package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
- package/dist/cli/__tests__/setup-gh-star.test.d.ts +2 -0
- package/dist/cli/__tests__/setup-gh-star.test.d.ts.map +1 -0
- package/dist/cli/__tests__/setup-gh-star.test.js +59 -0
- package/dist/cli/__tests__/setup-gh-star.test.js.map +1 -0
- package/dist/cli/doctor.d.ts +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +172 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +140 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +34 -0
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts +6 -0
- package/dist/cli/team.d.ts.map +1 -0
- package/dist/cli/team.js +140 -0
- package/dist/cli/team.js.map +1 -0
- package/dist/cli/tmux-hook.d.ts +1 -0
- package/dist/cli/tmux-hook.d.ts.map +1 -1
- package/dist/cli/tmux-hook.js +131 -24
- package/dist/cli/tmux-hook.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +79 -12
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +12 -5
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.d.ts +2 -0
- package/dist/hooks/__tests__/keyword-detector.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/keyword-detector.test.js +39 -0
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +99 -0
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -0
- package/dist/hooks/__tests__/tmux-hook-engine.test.js +36 -0
- package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +1 -1
- package/dist/hooks/emulator.d.ts.map +1 -1
- package/dist/hooks/emulator.js +3 -0
- package/dist/hooks/emulator.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +2 -1
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/mcp/__tests__/state-server-team-tools.test.d.ts +2 -0
- package/dist/mcp/__tests__/state-server-team-tools.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/state-server-team-tools.test.js +128 -0
- package/dist/mcp/__tests__/state-server-team-tools.test.js.map +1 -0
- package/dist/mcp/__tests__/state-server.test.d.ts +2 -0
- package/dist/mcp/__tests__/state-server.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/state-server.test.js +52 -0
- package/dist/mcp/__tests__/state-server.test.js.map +1 -0
- package/dist/mcp/state-server.d.ts +18 -1
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +752 -6
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/team/__tests__/mcp-comm.test.d.ts +2 -0
- package/dist/team/__tests__/mcp-comm.test.d.ts.map +1 -0
- package/dist/team/__tests__/mcp-comm.test.js +93 -0
- package/dist/team/__tests__/mcp-comm.test.js.map +1 -0
- package/dist/team/__tests__/runtime.test.d.ts +2 -0
- package/dist/team/__tests__/runtime.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime.test.js +271 -0
- package/dist/team/__tests__/runtime.test.js.map +1 -0
- package/dist/team/__tests__/state.test.d.ts +2 -0
- package/dist/team/__tests__/state.test.d.ts.map +1 -0
- package/dist/team/__tests__/state.test.js +556 -0
- package/dist/team/__tests__/state.test.js.map +1 -0
- package/dist/team/__tests__/tmux-session.test.d.ts +2 -0
- package/dist/team/__tests__/tmux-session.test.d.ts.map +1 -0
- package/dist/team/__tests__/tmux-session.test.js +140 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -0
- package/dist/team/__tests__/worker-bootstrap.test.d.ts +2 -0
- package/dist/team/__tests__/worker-bootstrap.test.d.ts.map +1 -0
- package/dist/team/__tests__/worker-bootstrap.test.js +174 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -0
- package/dist/team/mcp-comm.d.ts +45 -0
- package/dist/team/mcp-comm.d.ts.map +1 -0
- package/dist/team/mcp-comm.js +26 -0
- package/dist/team/mcp-comm.js.map +1 -0
- package/dist/team/runtime.d.ts +72 -0
- package/dist/team/runtime.d.ts.map +1 -0
- package/dist/team/runtime.js +676 -0
- package/dist/team/runtime.js.map +1 -0
- package/dist/team/state.d.ts +217 -0
- package/dist/team/state.d.ts.map +1 -0
- package/dist/team/state.js +1114 -0
- package/dist/team/state.js.map +1 -0
- package/dist/team/team-ops.d.ts +48 -0
- package/dist/team/team-ops.d.ts.map +1 -0
- package/dist/team/team-ops.js +58 -0
- package/dist/team/team-ops.js.map +1 -0
- package/dist/team/tmux-session.d.ts +21 -0
- package/dist/team/tmux-session.d.ts.map +1 -0
- package/dist/team/tmux-session.js +425 -0
- package/dist/team/tmux-session.js.map +1 -0
- package/dist/team/worker-bootstrap.d.ts +39 -0
- package/dist/team/worker-bootstrap.d.ts.map +1 -0
- package/dist/team/worker-bootstrap.js +183 -0
- package/dist/team/worker-bootstrap.js.map +1 -0
- package/package.json +1 -1
- package/scripts/notify-hook.js +240 -78
- package/scripts/tmux-hook-engine.js +11 -2
- package/skills/cancel/SKILL.md +50 -55
- package/skills/hud/SKILL.md +5 -4
- package/skills/team/SKILL.md +171 -773
- package/skills/worker/SKILL.md +65 -0
- package/templates/AGENTS.md +2 -1
package/README.md
CHANGED
|
@@ -22,6 +22,8 @@ Codex CLI is powerful on its own. OMX makes it **orchestrated**:
|
|
|
22
22
|
|
|
23
23
|
## Prerequisites
|
|
24
24
|
|
|
25
|
+
- **OS support**: macOS and Linux only
|
|
26
|
+
Windows is not currently supported directly. Use **WSL2** on Windows or run on macOS.
|
|
25
27
|
- **Node.js** >= 20
|
|
26
28
|
- **[OpenAI Codex CLI](https://github.com/openai/codex)** installed (`npm install -g @openai/codex`)
|
|
27
29
|
- **OpenAI API key** configured
|
|
@@ -38,8 +40,8 @@ omx setup
|
|
|
38
40
|
# Verify installation
|
|
39
41
|
omx doctor
|
|
40
42
|
|
|
41
|
-
#
|
|
42
|
-
omx
|
|
43
|
+
# Recommended launch profile (trusted / externally sandboxed environments)
|
|
44
|
+
omx --xhigh --madmax
|
|
43
45
|
```
|
|
44
46
|
|
|
45
47
|
Inside a Codex CLI session:
|
|
@@ -51,6 +53,35 @@ Inside a Codex CLI session:
|
|
|
51
53
|
> $team 3:executor "fix all TypeScript errors"
|
|
52
54
|
```
|
|
53
55
|
|
|
56
|
+
## Team-First Workflow
|
|
57
|
+
|
|
58
|
+
The core release feature in OMX is coordinated team execution.
|
|
59
|
+
|
|
60
|
+
- Use `$team` inside Codex when you want staged multi-agent delivery with verify/fix loops.
|
|
61
|
+
- Use `omx team` from terminal when you want tmux worker panes plus shared task/mailbox state.
|
|
62
|
+
- OMX includes a HUD + tmux hook workaround path for Codex CLI behavior that is not natively supported yet.
|
|
63
|
+
|
|
64
|
+
Canonical pipeline:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
team-plan -> team-prd -> team-exec -> team-verify -> team-fix (loop)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Examples:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Inside Codex
|
|
74
|
+
$team 3:executor "fix all TypeScript errors across the project"
|
|
75
|
+
$team ralph "ship a complete feature with persistence + verification"
|
|
76
|
+
|
|
77
|
+
# From terminal
|
|
78
|
+
omx team 4:executor "parallelize a multi-module refactor"
|
|
79
|
+
omx doctor --team
|
|
80
|
+
|
|
81
|
+
# Recommended high-throughput launch profile
|
|
82
|
+
omx --xhigh --madmax
|
|
83
|
+
```
|
|
84
|
+
|
|
54
85
|
## How It Works
|
|
55
86
|
|
|
56
87
|
OMX installs into Codex CLI's native extension points:
|
|
@@ -135,7 +166,7 @@ Invoke skills with `$name` in Codex CLI (e.g., `$autopilot "build a REST API"`).
|
|
|
135
166
|
|-------|-------------|
|
|
136
167
|
| `$autopilot` | Full autonomous execution from idea to working code |
|
|
137
168
|
| `$ralph` | Persistence loop with architect verification |
|
|
138
|
-
| `$ultrawork` | Maximum parallelism with parallel agent orchestration |
|
|
169
|
+
| `$ultrawork` (`$ulw`) | Maximum parallelism with parallel agent orchestration |
|
|
139
170
|
| `$team` | N coordinated agents on shared task list |
|
|
140
171
|
| `$pipeline` | Sequential agent chaining with data passing |
|
|
141
172
|
| `$ecomode` | Token-efficient execution using lightweight models |
|
|
@@ -163,22 +194,6 @@ Invoke skills with `$name` in Codex CLI (e.g., `$autopilot "build a REST API"`).
|
|
|
163
194
|
### Utilities
|
|
164
195
|
`$cancel` `$doctor` `$help` `$note` `$trace` `$skill` `$learner` `$research` `$deepinit` `$release` `$hud` `$omx-setup` `$configure-telegram` `$configure-discord` `$writer-memory` `$psm` `$ralph-init` `$learn-about-omx` `$review`
|
|
165
196
|
|
|
166
|
-
## Team Orchestration
|
|
167
|
-
|
|
168
|
-
The `$team` skill provides a staged multi-agent pipeline:
|
|
169
|
-
|
|
170
|
-
```
|
|
171
|
-
team-plan -> team-prd -> team-exec -> team-verify -> team-fix (loop)
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
Each stage uses specialized agents. The verify/fix loop is bounded by max attempts. Terminal states: `complete`, `failed`, `cancelled`.
|
|
175
|
-
|
|
176
|
-
```
|
|
177
|
-
$team 3:executor "fix all TypeScript errors across the project"
|
|
178
|
-
$team 5:designer "implement responsive layouts for all pages"
|
|
179
|
-
$team ralph "build a complete REST API" # team + ralph persistence
|
|
180
|
-
```
|
|
181
|
-
|
|
182
197
|
## MCP Servers
|
|
183
198
|
|
|
184
199
|
OMX provides two MCP servers configured via `config.toml`:
|
|
@@ -203,9 +218,14 @@ The AGENTS.md orchestration brain detects keywords and activates skills automati
|
|
|
203
218
|
```bash
|
|
204
219
|
omx --yolo # Launch Codex with low-friction execution flags
|
|
205
220
|
omx --madmax # Launch Codex with full approval+sandbox bypass (dangerous)
|
|
221
|
+
omx --high # Launch Codex with reasoning effort set to high
|
|
222
|
+
omx --xhigh # Launch Codex with reasoning effort set to xhigh (recommended)
|
|
206
223
|
omx setup # Install and configure OMX
|
|
207
224
|
omx doctor # Run 9 installation health checks
|
|
225
|
+
omx doctor --team # Diagnose team/swarm runtime state and blockers
|
|
226
|
+
omx team ... # Spawn tmux team workers and bootstrap team state
|
|
208
227
|
omx tmux-hook # Manage tmux prompt-injection workaround (init/status/validate/test)
|
|
228
|
+
omx reasoning <mode> # Set default reasoning mode (low|medium|high|xhigh)
|
|
209
229
|
omx status # Show active mode state
|
|
210
230
|
omx cancel # Cancel active execution modes
|
|
211
231
|
omx hud # Show HUD statusline (--watch, --json, --preset=NAME)
|
|
@@ -223,12 +243,23 @@ omx help # Usage guide
|
|
|
223
243
|
This bypasses approval prompts and sandboxing.
|
|
224
244
|
Use only in externally sandboxed/trusted environments.
|
|
225
245
|
|
|
226
|
-
|
|
246
|
+
- `--high`
|
|
247
|
+
Launches Codex with reasoning effort set to `high` (default).
|
|
248
|
+
|
|
249
|
+
- `--xhigh`
|
|
250
|
+
Launches Codex with reasoning effort set to `xhigh` (recommended).
|
|
251
|
+
|
|
252
|
+
Recommended launch profile:
|
|
253
|
+
- `omx --xhigh --madmax`
|
|
254
|
+
Use this for maximum throughput in trusted environments with external sandboxing.
|
|
227
255
|
|
|
228
|
-
|
|
256
|
+
## Tmux Injection Workaround (v0.2.3 Default)
|
|
257
|
+
|
|
258
|
+
Codex CLI does not natively provide this tmux continuation behavior. OMX includes a production-safe HUD/hook workaround that can inject a continuation prompt into a tmux pane from `scripts/notify-hook.js`.
|
|
259
|
+
|
|
260
|
+
As of `v0.2.3`, generated tmux hook config is enabled by default (`enabled: true`).
|
|
229
261
|
|
|
230
262
|
Safety defaults:
|
|
231
|
-
- Disabled by default (`enabled: false`)
|
|
232
263
|
- No shell interpolation for tmux commands (argv-based subprocess execution)
|
|
233
264
|
- Guardrails: allowed-mode gating, dedupe keying, cooldown, max injections/session, marker loop guard
|
|
234
265
|
- Failures are non-fatal and logged
|
|
@@ -272,11 +303,13 @@ Compatibility note:
|
|
|
272
303
|
1. Creates directories (`~/.codex/prompts/`, `~/.agents/skills/`, `.omx/state/`)
|
|
273
304
|
2. Installs 30 agent prompt files to `~/.codex/prompts/`
|
|
274
305
|
3. Installs 39 skill directories to `~/.agents/skills/`
|
|
275
|
-
4. Updates `~/.codex/config.toml` with MCP servers, features, notify hook,
|
|
306
|
+
4. Updates `~/.codex/config.toml` with MCP servers, features, notify hook, `[tui] status_line`, and default `model_reasoning_effort = "high"`
|
|
276
307
|
5. Generates `AGENTS.md` orchestration brain in the current project root
|
|
277
308
|
6. Configures the post-turn notification hook
|
|
278
309
|
7. Creates `.omx/hud-config.json` with default HUD preset
|
|
279
310
|
|
|
311
|
+
Use `omx reasoning <mode>` to change the default reasoning effort (for example `high` or `xhigh`).
|
|
312
|
+
|
|
280
313
|
## Coverage
|
|
281
314
|
|
|
282
315
|
~92% feature parity with oh-my-claudecode (excluding MCP tools). See [COVERAGE.md](COVERAGE.md) for the detailed matrix and known gaps.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-team.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/doctor-team.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdir, mkdtemp, rm, writeFile } from 'fs/promises';
|
|
4
|
+
import { join, dirname } from 'path';
|
|
5
|
+
import { tmpdir } from 'os';
|
|
6
|
+
import { spawnSync } from 'child_process';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
function runOmx(cwd, argv, envOverrides = {}) {
|
|
9
|
+
const testDir = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const repoRoot = join(testDir, '..', '..', '..');
|
|
11
|
+
const omxBin = join(repoRoot, 'bin', 'omx.js');
|
|
12
|
+
const r = spawnSync(process.execPath, [omxBin, ...argv], {
|
|
13
|
+
cwd,
|
|
14
|
+
encoding: 'utf-8',
|
|
15
|
+
env: { ...process.env, ...envOverrides },
|
|
16
|
+
});
|
|
17
|
+
return { status: r.status, stdout: r.stdout || '', stderr: r.stderr || '', error: r.error?.message };
|
|
18
|
+
}
|
|
19
|
+
function shouldSkipForSpawnPermissions(err) {
|
|
20
|
+
return typeof err === 'string' && /(EPERM|EACCES)/i.test(err);
|
|
21
|
+
}
|
|
22
|
+
describe('omx doctor --team', () => {
|
|
23
|
+
it('exits non-zero and prints resume_blocker when team state references missing tmux session', async () => {
|
|
24
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-team-'));
|
|
25
|
+
try {
|
|
26
|
+
const teamRoot = join(wd, '.omx', 'state', 'team', 'alpha');
|
|
27
|
+
await mkdir(join(teamRoot, 'workers', 'worker-1'), { recursive: true });
|
|
28
|
+
await writeFile(join(teamRoot, 'config.json'), JSON.stringify({
|
|
29
|
+
name: 'alpha',
|
|
30
|
+
tmux_session: 'omx-team-alpha',
|
|
31
|
+
}));
|
|
32
|
+
const fakeBin = join(wd, 'bin');
|
|
33
|
+
await mkdir(fakeBin, { recursive: true });
|
|
34
|
+
const tmuxPath = join(fakeBin, 'tmux');
|
|
35
|
+
await writeFile(tmuxPath, '#!/bin/sh\n# list-sessions success with no sessions\nexit 0\n');
|
|
36
|
+
spawnSync('chmod', ['+x', tmuxPath], { encoding: 'utf-8' });
|
|
37
|
+
const res = runOmx(wd, ['doctor', '--team'], { PATH: `${fakeBin}:${process.env.PATH || ''}` });
|
|
38
|
+
if (shouldSkipForSpawnPermissions(res.error))
|
|
39
|
+
return;
|
|
40
|
+
assert.equal(res.status, 1, res.stderr || res.stdout);
|
|
41
|
+
assert.match(res.stdout, /resume_blocker/);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
await rm(wd, { recursive: true, force: true });
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
it('does not emit resume_blocker when tmux is unavailable', async () => {
|
|
48
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-team-'));
|
|
49
|
+
try {
|
|
50
|
+
const teamRoot = join(wd, '.omx', 'state', 'team', 'alpha');
|
|
51
|
+
await mkdir(join(teamRoot, 'workers', 'worker-1'), { recursive: true });
|
|
52
|
+
await writeFile(join(teamRoot, 'config.json'), JSON.stringify({
|
|
53
|
+
name: 'alpha',
|
|
54
|
+
tmux_session: 'omx-team-alpha',
|
|
55
|
+
}));
|
|
56
|
+
const res = runOmx(wd, ['doctor', '--team'], { PATH: '' });
|
|
57
|
+
if (shouldSkipForSpawnPermissions(res.error))
|
|
58
|
+
return;
|
|
59
|
+
assert.equal(res.status, 0, res.stderr || res.stdout);
|
|
60
|
+
assert.doesNotMatch(res.stdout, /resume_blocker/);
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
await rm(wd, { recursive: true, force: true });
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
it('prints slow_shutdown when shutdown request is stale and ack missing', async () => {
|
|
67
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-team-'));
|
|
68
|
+
try {
|
|
69
|
+
const workerDir = join(wd, '.omx', 'state', 'team', 'beta', 'workers', 'worker-1');
|
|
70
|
+
await mkdir(workerDir, { recursive: true });
|
|
71
|
+
await writeFile(join(wd, '.omx', 'state', 'team', 'beta', 'config.json'), JSON.stringify({
|
|
72
|
+
name: 'beta',
|
|
73
|
+
tmux_session: 'omx-team-beta',
|
|
74
|
+
}));
|
|
75
|
+
const requestedAt = new Date(Date.now() - 60_000).toISOString();
|
|
76
|
+
await writeFile(join(workerDir, 'shutdown-request.json'), JSON.stringify({ requested_at: requestedAt }));
|
|
77
|
+
const res = runOmx(wd, ['doctor', '--team']);
|
|
78
|
+
if (shouldSkipForSpawnPermissions(res.error))
|
|
79
|
+
return;
|
|
80
|
+
assert.equal(res.status, 1, res.stderr || res.stdout);
|
|
81
|
+
assert.match(res.stdout, /slow_shutdown/);
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
await rm(wd, { recursive: true, force: true });
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
it('prints delayed_status_lag when worker is working and heartbeat is stale', async () => {
|
|
88
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-team-'));
|
|
89
|
+
try {
|
|
90
|
+
const workerDir = join(wd, '.omx', 'state', 'team', 'gamma', 'workers', 'worker-1');
|
|
91
|
+
await mkdir(workerDir, { recursive: true });
|
|
92
|
+
await writeFile(join(wd, '.omx', 'state', 'team', 'gamma', 'config.json'), JSON.stringify({
|
|
93
|
+
name: 'gamma',
|
|
94
|
+
tmux_session: 'omx-team-gamma',
|
|
95
|
+
}));
|
|
96
|
+
const lastTurnAt = new Date(Date.now() - 120_000).toISOString();
|
|
97
|
+
await writeFile(join(workerDir, 'status.json'), JSON.stringify({ state: 'working', updated_at: new Date().toISOString() }));
|
|
98
|
+
await writeFile(join(workerDir, 'heartbeat.json'), JSON.stringify({
|
|
99
|
+
pid: 123,
|
|
100
|
+
last_turn_at: lastTurnAt,
|
|
101
|
+
turn_count: 10,
|
|
102
|
+
alive: true,
|
|
103
|
+
}));
|
|
104
|
+
const res = runOmx(wd, ['doctor', '--team']);
|
|
105
|
+
if (shouldSkipForSpawnPermissions(res.error))
|
|
106
|
+
return;
|
|
107
|
+
assert.equal(res.status, 1, res.stderr || res.stdout);
|
|
108
|
+
assert.match(res.stdout, /delayed_status_lag/);
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
await rm(wd, { recursive: true, force: true });
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
it('prints orphan_tmux_session when tmux session exists without matching team state', async () => {
|
|
115
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-team-'));
|
|
116
|
+
try {
|
|
117
|
+
const fakeBin = join(wd, 'bin');
|
|
118
|
+
await mkdir(fakeBin, { recursive: true });
|
|
119
|
+
const tmuxPath = join(fakeBin, 'tmux');
|
|
120
|
+
await writeFile(tmuxPath, '#!/bin/sh\nif [ "$1" = "list-sessions" ]; then echo "omx-team-orphan"; exit 0; fi\nexit 0\n');
|
|
121
|
+
spawnSync('chmod', ['+x', tmuxPath], { encoding: 'utf-8' });
|
|
122
|
+
const res = runOmx(wd, ['doctor', '--team'], { PATH: `${fakeBin}:${process.env.PATH || ''}` });
|
|
123
|
+
if (shouldSkipForSpawnPermissions(res.error))
|
|
124
|
+
return;
|
|
125
|
+
assert.equal(res.status, 1, res.stderr || res.stdout);
|
|
126
|
+
assert.match(res.stdout, /orphan_tmux_session/);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
await rm(wd, { recursive: true, force: true });
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
it('does not emit orphan_tmux_session when tmux reports no server running', async () => {
|
|
133
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-team-'));
|
|
134
|
+
try {
|
|
135
|
+
const fakeBin = join(wd, 'bin');
|
|
136
|
+
await mkdir(fakeBin, { recursive: true });
|
|
137
|
+
const tmuxPath = join(fakeBin, 'tmux');
|
|
138
|
+
await writeFile(tmuxPath, '#!/bin/sh\nif [ "$1" = "list-sessions" ]; then echo "no server running on /tmp/tmux-1000/default" 1>&2; exit 1; fi\nexit 0\n');
|
|
139
|
+
spawnSync('chmod', ['+x', tmuxPath], { encoding: 'utf-8' });
|
|
140
|
+
const res = runOmx(wd, ['doctor', '--team'], { PATH: `${fakeBin}:${process.env.PATH || ''}` });
|
|
141
|
+
if (shouldSkipForSpawnPermissions(res.error))
|
|
142
|
+
return;
|
|
143
|
+
assert.equal(res.status, 0, res.stderr || res.stdout);
|
|
144
|
+
assert.doesNotMatch(res.stdout, /orphan_tmux_session/);
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
await rm(wd, { recursive: true, force: true });
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=doctor-team.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-team.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/doctor-team.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it } from 'node:test';
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
|
-
import { normalizeCodexLaunchArgs, buildTmuxSessionName } from '../index.js';
|
|
3
|
+
import { normalizeCodexLaunchArgs, buildTmuxSessionName, readTopLevelTomlString, upsertTopLevelTomlString, } from '../index.js';
|
|
4
4
|
describe('normalizeCodexLaunchArgs', () => {
|
|
5
5
|
it('maps --madmax to codex bypass flag', () => {
|
|
6
6
|
assert.deepEqual(normalizeCodexLaunchArgs(['--madmax']), ['--dangerously-bypass-approvals-and-sandbox']);
|
|
@@ -25,6 +25,15 @@ describe('normalizeCodexLaunchArgs', () => {
|
|
|
25
25
|
it('leaves unrelated args unchanged', () => {
|
|
26
26
|
assert.deepEqual(normalizeCodexLaunchArgs(['--model', 'gpt-5', '--yolo']), ['--model', 'gpt-5', '--yolo']);
|
|
27
27
|
});
|
|
28
|
+
it('maps --high to reasoning override', () => {
|
|
29
|
+
assert.deepEqual(normalizeCodexLaunchArgs(['--high']), ['-c', 'model_reasoning_effort="high"']);
|
|
30
|
+
});
|
|
31
|
+
it('maps --xhigh to reasoning override', () => {
|
|
32
|
+
assert.deepEqual(normalizeCodexLaunchArgs(['--xhigh']), ['-c', 'model_reasoning_effort="xhigh"']);
|
|
33
|
+
});
|
|
34
|
+
it('uses the last reasoning shorthand when both are present', () => {
|
|
35
|
+
assert.deepEqual(normalizeCodexLaunchArgs(['--high', '--xhigh']), ['-c', 'model_reasoning_effort="xhigh"']);
|
|
36
|
+
});
|
|
28
37
|
});
|
|
29
38
|
describe('buildTmuxSessionName', () => {
|
|
30
39
|
it('uses omx-directory-branch-session format', () => {
|
|
@@ -38,4 +47,25 @@ describe('buildTmuxSessionName', () => {
|
|
|
38
47
|
assert.equal(name.includes(' '), false);
|
|
39
48
|
});
|
|
40
49
|
});
|
|
50
|
+
describe('readTopLevelTomlString', () => {
|
|
51
|
+
it('reads a top-level string value', () => {
|
|
52
|
+
const value = readTopLevelTomlString('model_reasoning_effort = "high"\n[mcp_servers.test]\nmodel_reasoning_effort = "low"\n', 'model_reasoning_effort');
|
|
53
|
+
assert.equal(value, 'high');
|
|
54
|
+
});
|
|
55
|
+
it('ignores table-local values', () => {
|
|
56
|
+
const value = readTopLevelTomlString('[mcp_servers.test]\nmodel_reasoning_effort = "xhigh"\n', 'model_reasoning_effort');
|
|
57
|
+
assert.equal(value, null);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('upsertTopLevelTomlString', () => {
|
|
61
|
+
it('replaces an existing top-level key', () => {
|
|
62
|
+
const updated = upsertTopLevelTomlString('model_reasoning_effort = "low"\n[tui]\nstatus_line = []\n', 'model_reasoning_effort', 'high');
|
|
63
|
+
assert.match(updated, /^model_reasoning_effort = "high"$/m);
|
|
64
|
+
assert.doesNotMatch(updated, /^model_reasoning_effort = "low"$/m);
|
|
65
|
+
});
|
|
66
|
+
it('inserts before the first table when key is missing', () => {
|
|
67
|
+
const updated = upsertTopLevelTomlString('[tui]\nstatus_line = []\n', 'model_reasoning_effort', 'xhigh');
|
|
68
|
+
assert.equal(updated, 'model_reasoning_effort = "xhigh"\n[tui]\nstatus_line = []\n');
|
|
69
|
+
});
|
|
70
|
+
});
|
|
41
71
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ describe('CLI session-scoped state parity', () => {
|
|
|
22
22
|
cwd: wd,
|
|
23
23
|
encoding: 'utf-8',
|
|
24
24
|
});
|
|
25
|
+
if (statusResult.error && /(EPERM|EACCES)/i.test(statusResult.error.message))
|
|
26
|
+
return;
|
|
25
27
|
assert.equal(statusResult.status, 0, statusResult.stderr || statusResult.stdout);
|
|
26
28
|
assert.match(statusResult.stdout, /team: ACTIVE/);
|
|
27
29
|
const cancelResult = spawnSync(process.execPath, [omxBin, 'cancel'], {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-scoped-runtime.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/session-scoped-runtime.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-scoped-runtime.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/session-scoped-runtime.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-gh-star.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/setup-gh-star.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { chmod, mkdir, mkdtemp, rm, writeFile } from 'fs/promises';
|
|
4
|
+
import { join, dirname } from 'path';
|
|
5
|
+
import { tmpdir } from 'os';
|
|
6
|
+
import { spawnSync } from 'child_process';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
function runOmx(cwd, argv, envOverrides = {}) {
|
|
9
|
+
const testDir = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const repoRoot = join(testDir, '..', '..', '..');
|
|
11
|
+
const omxBin = join(repoRoot, 'bin', 'omx.js');
|
|
12
|
+
const r = spawnSync(process.execPath, [omxBin, ...argv], {
|
|
13
|
+
cwd,
|
|
14
|
+
encoding: 'utf-8',
|
|
15
|
+
env: { ...process.env, ...envOverrides },
|
|
16
|
+
});
|
|
17
|
+
return { status: r.status, stdout: r.stdout || '', stderr: r.stderr || '', error: r.error?.message };
|
|
18
|
+
}
|
|
19
|
+
function shouldSkipForSpawnPermissions(err) {
|
|
20
|
+
return typeof err === 'string' && /(EPERM|EACCES)/i.test(err);
|
|
21
|
+
}
|
|
22
|
+
describe('omx setup (gh star hint)', () => {
|
|
23
|
+
it('prints a star hint when GitHub CLI is configured', async () => {
|
|
24
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-setup-gh-'));
|
|
25
|
+
try {
|
|
26
|
+
const fakeBin = join(wd, 'bin');
|
|
27
|
+
await mkdir(fakeBin, { recursive: true });
|
|
28
|
+
const ghPath = join(fakeBin, 'gh');
|
|
29
|
+
await writeFile(ghPath, '#!/bin/sh\nif [ \"$1\" = \"auth\" ] && [ \"$2\" = \"status\" ]; then exit 0; fi\nexit 1\n');
|
|
30
|
+
await chmod(ghPath, 0o755);
|
|
31
|
+
const home = join(wd, 'home');
|
|
32
|
+
await mkdir(home, { recursive: true });
|
|
33
|
+
const res = runOmx(wd, ['setup', '--dry-run'], { PATH: `${fakeBin}:${process.env.PATH || ''}`, HOME: home });
|
|
34
|
+
if (shouldSkipForSpawnPermissions(res.error))
|
|
35
|
+
return;
|
|
36
|
+
assert.equal(res.status, 0, res.stderr || res.stdout);
|
|
37
|
+
assert.match(res.stdout, /gh repo star Yeachan-Heo\/oh-my-codex/);
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await rm(wd, { recursive: true, force: true });
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
it('does not print a star hint when GitHub CLI is missing', async () => {
|
|
44
|
+
const wd = await mkdtemp(join(tmpdir(), 'omx-setup-gh-'));
|
|
45
|
+
try {
|
|
46
|
+
const home = join(wd, 'home');
|
|
47
|
+
await mkdir(home, { recursive: true });
|
|
48
|
+
const res = runOmx(wd, ['setup', '--dry-run'], { PATH: '', HOME: home });
|
|
49
|
+
if (shouldSkipForSpawnPermissions(res.error))
|
|
50
|
+
return;
|
|
51
|
+
assert.equal(res.status, 0, res.stderr || res.stdout);
|
|
52
|
+
assert.doesNotMatch(res.stdout, /gh repo star Yeachan-Heo\/oh-my-codex/);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
await rm(wd, { recursive: true, force: true });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=setup-gh-star.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-gh-star.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/setup-gh-star.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/doctor.d.ts
CHANGED
package/dist/cli/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAQD,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DvE"}
|