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.
Files changed (117) hide show
  1. package/README.md +56 -23
  2. package/dist/cli/__tests__/doctor-team.test.d.ts +2 -0
  3. package/dist/cli/__tests__/doctor-team.test.d.ts.map +1 -0
  4. package/dist/cli/__tests__/doctor-team.test.js +151 -0
  5. package/dist/cli/__tests__/doctor-team.test.js.map +1 -0
  6. package/dist/cli/__tests__/index.test.js +31 -1
  7. package/dist/cli/__tests__/index.test.js.map +1 -1
  8. package/dist/cli/__tests__/session-scoped-runtime.test.js +2 -0
  9. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  10. package/dist/cli/__tests__/setup-gh-star.test.d.ts +2 -0
  11. package/dist/cli/__tests__/setup-gh-star.test.d.ts.map +1 -0
  12. package/dist/cli/__tests__/setup-gh-star.test.js +59 -0
  13. package/dist/cli/__tests__/setup-gh-star.test.js.map +1 -0
  14. package/dist/cli/doctor.d.ts +1 -0
  15. package/dist/cli/doctor.d.ts.map +1 -1
  16. package/dist/cli/doctor.js +172 -1
  17. package/dist/cli/doctor.js.map +1 -1
  18. package/dist/cli/index.d.ts +2 -0
  19. package/dist/cli/index.d.ts.map +1 -1
  20. package/dist/cli/index.js +140 -2
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/setup.d.ts.map +1 -1
  23. package/dist/cli/setup.js +34 -0
  24. package/dist/cli/setup.js.map +1 -1
  25. package/dist/cli/team.d.ts +6 -0
  26. package/dist/cli/team.d.ts.map +1 -0
  27. package/dist/cli/team.js +140 -0
  28. package/dist/cli/team.js.map +1 -0
  29. package/dist/cli/tmux-hook.d.ts +1 -0
  30. package/dist/cli/tmux-hook.d.ts.map +1 -1
  31. package/dist/cli/tmux-hook.js +131 -24
  32. package/dist/cli/tmux-hook.js.map +1 -1
  33. package/dist/config/__tests__/generator-notify.test.js +79 -12
  34. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  35. package/dist/config/generator.d.ts.map +1 -1
  36. package/dist/config/generator.js +12 -5
  37. package/dist/config/generator.js.map +1 -1
  38. package/dist/hooks/__tests__/keyword-detector.test.d.ts +2 -0
  39. package/dist/hooks/__tests__/keyword-detector.test.d.ts.map +1 -0
  40. package/dist/hooks/__tests__/keyword-detector.test.js +39 -0
  41. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -0
  42. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts +2 -0
  43. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.d.ts.map +1 -0
  44. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +99 -0
  45. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -0
  46. package/dist/hooks/__tests__/tmux-hook-engine.test.js +36 -0
  47. package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +1 -1
  48. package/dist/hooks/emulator.d.ts.map +1 -1
  49. package/dist/hooks/emulator.js +3 -0
  50. package/dist/hooks/emulator.js.map +1 -1
  51. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  52. package/dist/hooks/keyword-detector.js +2 -1
  53. package/dist/hooks/keyword-detector.js.map +1 -1
  54. package/dist/mcp/__tests__/state-server-team-tools.test.d.ts +2 -0
  55. package/dist/mcp/__tests__/state-server-team-tools.test.d.ts.map +1 -0
  56. package/dist/mcp/__tests__/state-server-team-tools.test.js +128 -0
  57. package/dist/mcp/__tests__/state-server-team-tools.test.js.map +1 -0
  58. package/dist/mcp/__tests__/state-server.test.d.ts +2 -0
  59. package/dist/mcp/__tests__/state-server.test.d.ts.map +1 -0
  60. package/dist/mcp/__tests__/state-server.test.js +52 -0
  61. package/dist/mcp/__tests__/state-server.test.js.map +1 -0
  62. package/dist/mcp/state-server.d.ts +18 -1
  63. package/dist/mcp/state-server.d.ts.map +1 -1
  64. package/dist/mcp/state-server.js +752 -6
  65. package/dist/mcp/state-server.js.map +1 -1
  66. package/dist/team/__tests__/mcp-comm.test.d.ts +2 -0
  67. package/dist/team/__tests__/mcp-comm.test.d.ts.map +1 -0
  68. package/dist/team/__tests__/mcp-comm.test.js +93 -0
  69. package/dist/team/__tests__/mcp-comm.test.js.map +1 -0
  70. package/dist/team/__tests__/runtime.test.d.ts +2 -0
  71. package/dist/team/__tests__/runtime.test.d.ts.map +1 -0
  72. package/dist/team/__tests__/runtime.test.js +271 -0
  73. package/dist/team/__tests__/runtime.test.js.map +1 -0
  74. package/dist/team/__tests__/state.test.d.ts +2 -0
  75. package/dist/team/__tests__/state.test.d.ts.map +1 -0
  76. package/dist/team/__tests__/state.test.js +556 -0
  77. package/dist/team/__tests__/state.test.js.map +1 -0
  78. package/dist/team/__tests__/tmux-session.test.d.ts +2 -0
  79. package/dist/team/__tests__/tmux-session.test.d.ts.map +1 -0
  80. package/dist/team/__tests__/tmux-session.test.js +140 -0
  81. package/dist/team/__tests__/tmux-session.test.js.map +1 -0
  82. package/dist/team/__tests__/worker-bootstrap.test.d.ts +2 -0
  83. package/dist/team/__tests__/worker-bootstrap.test.d.ts.map +1 -0
  84. package/dist/team/__tests__/worker-bootstrap.test.js +174 -0
  85. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -0
  86. package/dist/team/mcp-comm.d.ts +45 -0
  87. package/dist/team/mcp-comm.d.ts.map +1 -0
  88. package/dist/team/mcp-comm.js +26 -0
  89. package/dist/team/mcp-comm.js.map +1 -0
  90. package/dist/team/runtime.d.ts +72 -0
  91. package/dist/team/runtime.d.ts.map +1 -0
  92. package/dist/team/runtime.js +676 -0
  93. package/dist/team/runtime.js.map +1 -0
  94. package/dist/team/state.d.ts +217 -0
  95. package/dist/team/state.d.ts.map +1 -0
  96. package/dist/team/state.js +1114 -0
  97. package/dist/team/state.js.map +1 -0
  98. package/dist/team/team-ops.d.ts +48 -0
  99. package/dist/team/team-ops.d.ts.map +1 -0
  100. package/dist/team/team-ops.js +58 -0
  101. package/dist/team/team-ops.js.map +1 -0
  102. package/dist/team/tmux-session.d.ts +21 -0
  103. package/dist/team/tmux-session.d.ts.map +1 -0
  104. package/dist/team/tmux-session.js +425 -0
  105. package/dist/team/tmux-session.js.map +1 -0
  106. package/dist/team/worker-bootstrap.d.ts +39 -0
  107. package/dist/team/worker-bootstrap.d.ts.map +1 -0
  108. package/dist/team/worker-bootstrap.js +183 -0
  109. package/dist/team/worker-bootstrap.js.map +1 -0
  110. package/package.json +1 -1
  111. package/scripts/notify-hook.js +240 -78
  112. package/scripts/tmux-hook-engine.js +11 -2
  113. package/skills/cancel/SKILL.md +50 -55
  114. package/skills/hud/SKILL.md +5 -4
  115. package/skills/team/SKILL.md +171 -773
  116. package/skills/worker/SKILL.md +65 -0
  117. 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
- # Start using
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
- ## Tmux Injection Workaround (Opt-In)
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
- OMX includes a production-safe workaround for Codex hook limitations: it can inject a continuation prompt into a tmux pane from `scripts/notify-hook.js`.
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, and `[tui] status_line`
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doctor-team.test.d.ts.map
@@ -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,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE7E,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,SAAS,CACd,wBAAwB,CAAC,CAAC,UAAU,CAAC,CAAC,EACtC,CAAC,4CAA4C,CAAC,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,SAAS,CACd,wBAAwB,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,EACpE,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,4CAA4C,CAAC,CAC7E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,SAAS,CACd,wBAAwB,CAAC;YACvB,4CAA4C;YAC5C,UAAU;SACX,CAAC,EACF,CAAC,4CAA4C,CAAC,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,SAAS,CACd,wBAAwB,CAAC;YACvB,UAAU;YACV,4CAA4C;YAC5C,UAAU;YACV,4CAA4C;SAC7C,CAAC,EACF,CAAC,4CAA4C,CAAC,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,SAAS,CACd,wBAAwB,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,EACxD,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,oBAAoB,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAC9E,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,+CAA+C,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,4DAA4D,CAAC,CAAC;QACjF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup-gh-star.test.d.ts.map
@@ -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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"}
@@ -5,6 +5,7 @@ interface DoctorOptions {
5
5
  verbose?: boolean;
6
6
  force?: boolean;
7
7
  dryRun?: boolean;
8
+ team?: boolean;
8
9
  }
9
10
  export declare function doctor(options?: DoctorOptions): Promise<void>;
10
11
  export {};
@@ -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;CAClB;AAQD,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDvE"}
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"}