oh-my-codex 0.7.1 → 0.7.3

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 (161) hide show
  1. package/README.md +10 -2
  2. package/dist/cli/__tests__/session-scoped-runtime.test.js +1 -9
  3. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  4. package/dist/cli/__tests__/team.test.js +17 -0
  5. package/dist/cli/__tests__/team.test.js.map +1 -1
  6. package/dist/cli/__tests__/uninstall.test.d.ts +2 -0
  7. package/dist/cli/__tests__/uninstall.test.d.ts.map +1 -0
  8. package/dist/cli/__tests__/uninstall.test.js +454 -0
  9. package/dist/cli/__tests__/uninstall.test.js.map +1 -0
  10. package/dist/cli/index.d.ts +1 -1
  11. package/dist/cli/index.d.ts.map +1 -1
  12. package/dist/cli/index.js +18 -6
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/cli/setup.d.ts +8 -0
  15. package/dist/cli/setup.d.ts.map +1 -1
  16. package/dist/cli/setup.js +1 -1
  17. package/dist/cli/setup.js.map +1 -1
  18. package/dist/cli/team.d.ts.map +1 -1
  19. package/dist/cli/team.js +3 -2
  20. package/dist/cli/team.js.map +1 -1
  21. package/dist/cli/uninstall.d.ts +13 -0
  22. package/dist/cli/uninstall.d.ts.map +1 -0
  23. package/dist/cli/uninstall.js +317 -0
  24. package/dist/cli/uninstall.js.map +1 -0
  25. package/dist/config/__tests__/generator-idempotent.test.d.ts +2 -0
  26. package/dist/config/__tests__/generator-idempotent.test.d.ts.map +1 -0
  27. package/dist/config/__tests__/generator-idempotent.test.js +271 -0
  28. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -0
  29. package/dist/config/generator.d.ts +14 -0
  30. package/dist/config/generator.d.ts.map +1 -1
  31. package/dist/config/generator.js +107 -2
  32. package/dist/config/generator.js.map +1 -1
  33. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +54 -0
  34. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  35. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +78 -0
  36. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  37. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +46 -4
  38. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  39. package/dist/hooks/__tests__/task-size-detector.test.js +1 -7
  40. package/dist/hooks/__tests__/task-size-detector.test.js.map +1 -1
  41. package/dist/hooks/__tests__/tmux-hook-engine.test.js +11 -0
  42. package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +1 -1
  43. package/dist/hooks/keyword-detector.js +1 -1
  44. package/dist/hooks/keyword-detector.js.map +1 -1
  45. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  46. package/dist/hooks/keyword-registry.js +0 -3
  47. package/dist/hooks/keyword-registry.js.map +1 -1
  48. package/dist/hooks/task-size-detector.d.ts.map +1 -1
  49. package/dist/hooks/task-size-detector.js +0 -2
  50. package/dist/hooks/task-size-detector.js.map +1 -1
  51. package/dist/hud/__tests__/index.test.js +0 -2
  52. package/dist/hud/__tests__/index.test.js.map +1 -1
  53. package/dist/hud/__tests__/render.test.js +5 -41
  54. package/dist/hud/__tests__/render.test.js.map +1 -1
  55. package/dist/hud/render.d.ts.map +1 -1
  56. package/dist/hud/render.js +0 -15
  57. package/dist/hud/render.js.map +1 -1
  58. package/dist/hud/state.d.ts +1 -3
  59. package/dist/hud/state.d.ts.map +1 -1
  60. package/dist/hud/state.js +2 -12
  61. package/dist/hud/state.js.map +1 -1
  62. package/dist/hud/types.d.ts +0 -11
  63. package/dist/hud/types.d.ts.map +1 -1
  64. package/dist/hud/types.js.map +1 -1
  65. package/dist/mcp/__tests__/state-server-schema.test.js +8 -14
  66. package/dist/mcp/__tests__/state-server-schema.test.js.map +1 -1
  67. package/dist/mcp/state-server.js +2 -2
  68. package/dist/mcp/state-server.js.map +1 -1
  69. package/dist/modes/base.d.ts +9 -2
  70. package/dist/modes/base.d.ts.map +1 -1
  71. package/dist/modes/base.js +17 -2
  72. package/dist/modes/base.js.map +1 -1
  73. package/dist/notifications/__tests__/template-engine.test.js +11 -0
  74. package/dist/notifications/__tests__/template-engine.test.js.map +1 -1
  75. package/dist/notifications/index.d.ts.map +1 -1
  76. package/dist/notifications/index.js +2 -0
  77. package/dist/notifications/index.js.map +1 -1
  78. package/dist/notifications/template-engine.d.ts.map +1 -1
  79. package/dist/notifications/template-engine.js +3 -0
  80. package/dist/notifications/template-engine.js.map +1 -1
  81. package/dist/openclaw/__tests__/dispatcher.test.js +22 -0
  82. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  83. package/dist/openclaw/__tests__/index.test.js +127 -0
  84. package/dist/openclaw/__tests__/index.test.js.map +1 -1
  85. package/dist/openclaw/dispatcher.d.ts +3 -0
  86. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  87. package/dist/openclaw/dispatcher.js +3 -0
  88. package/dist/openclaw/dispatcher.js.map +1 -1
  89. package/dist/openclaw/index.d.ts.map +1 -1
  90. package/dist/openclaw/index.js +36 -13
  91. package/dist/openclaw/index.js.map +1 -1
  92. package/dist/openclaw/types.d.ts +12 -0
  93. package/dist/openclaw/types.d.ts.map +1 -1
  94. package/dist/pipeline/__tests__/orchestrator.test.d.ts +2 -0
  95. package/dist/pipeline/__tests__/orchestrator.test.d.ts.map +1 -0
  96. package/dist/pipeline/__tests__/orchestrator.test.js +421 -0
  97. package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -0
  98. package/dist/pipeline/__tests__/stages.test.d.ts +2 -0
  99. package/dist/pipeline/__tests__/stages.test.d.ts.map +1 -0
  100. package/dist/pipeline/__tests__/stages.test.js +199 -0
  101. package/dist/pipeline/__tests__/stages.test.js.map +1 -0
  102. package/dist/pipeline/index.d.ts +16 -0
  103. package/dist/pipeline/index.d.ts.map +1 -0
  104. package/dist/pipeline/index.js +13 -0
  105. package/dist/pipeline/index.js.map +1 -0
  106. package/dist/pipeline/orchestrator.d.ts +50 -0
  107. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  108. package/dist/pipeline/orchestrator.js +245 -0
  109. package/dist/pipeline/orchestrator.js.map +1 -0
  110. package/dist/pipeline/stages/ralph-verify.d.ts +40 -0
  111. package/dist/pipeline/stages/ralph-verify.d.ts.map +1 -0
  112. package/dist/pipeline/stages/ralph-verify.js +62 -0
  113. package/dist/pipeline/stages/ralph-verify.js.map +1 -0
  114. package/dist/pipeline/stages/ralplan.d.ts +20 -0
  115. package/dist/pipeline/stages/ralplan.d.ts.map +1 -0
  116. package/dist/pipeline/stages/ralplan.js +79 -0
  117. package/dist/pipeline/stages/ralplan.js.map +1 -0
  118. package/dist/pipeline/stages/team-exec.d.ts +43 -0
  119. package/dist/pipeline/stages/team-exec.d.ts.map +1 -0
  120. package/dist/pipeline/stages/team-exec.js +70 -0
  121. package/dist/pipeline/stages/team-exec.js.map +1 -0
  122. package/dist/pipeline/types.d.ts +115 -0
  123. package/dist/pipeline/types.d.ts.map +1 -0
  124. package/dist/pipeline/types.js +8 -0
  125. package/dist/pipeline/types.js.map +1 -0
  126. package/dist/team/__tests__/runtime.test.js +17 -0
  127. package/dist/team/__tests__/runtime.test.js.map +1 -1
  128. package/dist/team/__tests__/state.test.js +47 -1
  129. package/dist/team/__tests__/state.test.js.map +1 -1
  130. package/dist/team/__tests__/tmux-session.test.js +102 -11
  131. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  132. package/dist/team/contracts.d.ts +1 -1
  133. package/dist/team/contracts.d.ts.map +1 -1
  134. package/dist/team/contracts.js +1 -0
  135. package/dist/team/contracts.js.map +1 -1
  136. package/dist/team/runtime.d.ts.map +1 -1
  137. package/dist/team/runtime.js +71 -25
  138. package/dist/team/runtime.js.map +1 -1
  139. package/dist/team/scaling.d.ts.map +1 -1
  140. package/dist/team/scaling.js +9 -1
  141. package/dist/team/scaling.js.map +1 -1
  142. package/dist/team/state.d.ts +2 -1
  143. package/dist/team/state.d.ts.map +1 -1
  144. package/dist/team/state.js +30 -7
  145. package/dist/team/state.js.map +1 -1
  146. package/dist/team/team-ops.d.ts +1 -0
  147. package/dist/team/team-ops.d.ts.map +1 -1
  148. package/dist/team/team-ops.js +2 -0
  149. package/dist/team/team-ops.js.map +1 -1
  150. package/dist/team/tmux-session.d.ts +7 -0
  151. package/dist/team/tmux-session.d.ts.map +1 -1
  152. package/dist/team/tmux-session.js +93 -8
  153. package/dist/team/tmux-session.js.map +1 -1
  154. package/package.json +1 -1
  155. package/scripts/notify-hook/team-dispatch.js +83 -2
  156. package/scripts/notify-hook/team-worker.js +78 -6
  157. package/scripts/tmux-hook-engine.js +12 -7
  158. package/skills/autopilot/SKILL.md +21 -0
  159. package/skills/pipeline/SKILL.md +86 -0
  160. package/skills/team/SKILL.md +22 -1
  161. package/templates/catalog-manifest.json +1 -1
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
11
11
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)
12
12
 
13
- > **[Website](https://yeachan-heo.github.io/oh-my-codex-website/)** | **[GitHub](https://github.com/Yeachan-Heo/oh-my-codex)** | **[npm](https://www.npmjs.com/package/oh-my-codex)**
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
14
 
15
15
  Multi-agent orchestration layer for [OpenAI Codex CLI](https://github.com/openai/codex).
16
16
 
@@ -271,9 +271,17 @@ npm run build
271
271
  npm test
272
272
  ```
273
273
 
274
+ ## Documentation
275
+
276
+ - **[Full Documentation](https://yeachan-heo.github.io/oh-my-codex-website/docs.html)** - Complete guide
277
+ - **[CLI Reference](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#cli-reference)** - All `omx` commands, flags, and tools
278
+ - **[Notifications Guide](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#notifications)** - Discord, Telegram, Slack, and webhook setup
279
+ - **[Recommended Workflows](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#workflows)** - Battle-tested skill chains for common tasks
280
+ - **[Release Notes](https://yeachan-heo.github.io/oh-my-codex-website/docs.html#release-notes)** - What's new in each version
281
+
274
282
  ## Notes
275
283
 
276
- - Release notes: `CHANGELOG.md`
284
+ - Full changelog: `CHANGELOG.md`
277
285
  - Migration guide (post-v0.4.4 mainline): `docs/migration-mainline-post-v0.4.4.md`
278
286
  - Coverage and parity notes: `COVERAGE.md`
279
287
  - Hook extension workflow: `docs/hooks-extension.md`
@@ -43,7 +43,7 @@ describe('CLI session-scoped state parity', () => {
43
43
  await rm(wd, { recursive: true, force: true });
44
44
  }
45
45
  });
46
- it('cancels linked ultrawork but leaves unrelated mode unchanged when Ralph is active', async () => {
46
+ it('cancels linked ultrawork when Ralph is active', async () => {
47
47
  const wd = await mkdtemp(join(tmpdir(), 'omx-cli-ralph-link-'));
48
48
  try {
49
49
  const stateDir = join(wd, '.omx', 'state');
@@ -63,15 +63,10 @@ describe('CLI session-scoped state parity', () => {
63
63
  active: true,
64
64
  current_phase: 'executing',
65
65
  }));
66
- await writeFile(join(sessionDir, 'ecomode-state.json'), JSON.stringify({
67
- active: true,
68
- current_phase: 'executing',
69
- }));
70
66
  const cancelResult = runOmx(wd, 'cancel');
71
67
  assert.equal(cancelResult.status, 0, cancelResult.stderr || cancelResult.stdout);
72
68
  assert.match(cancelResult.stdout, /Cancelled: ralph/);
73
69
  assert.match(cancelResult.stdout, /Cancelled: ultrawork/);
74
- assert.doesNotMatch(cancelResult.stdout, /Cancelled: ecomode/);
75
70
  const ralph = JSON.parse(await readFile(join(sessionDir, 'ralph-state.json'), 'utf-8'));
76
71
  assert.equal(ralph.active, false);
77
72
  assert.equal(ralph.current_phase, 'cancelled');
@@ -79,9 +74,6 @@ describe('CLI session-scoped state parity', () => {
79
74
  const ultrawork = JSON.parse(await readFile(join(sessionDir, 'ultrawork-state.json'), 'utf-8'));
80
75
  assert.equal(ultrawork.active, false);
81
76
  assert.equal(ultrawork.current_phase, 'cancelled');
82
- const ecomode = JSON.parse(await readFile(join(sessionDir, 'ecomode-state.json'), 'utf-8'));
83
- assert.equal(ecomode.active, true);
84
- assert.equal(ecomode.current_phase, 'executing');
85
77
  }
86
78
  finally {
87
79
  await rm(wd, { recursive: true, force: true });
@@ -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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"}
@@ -36,4 +36,21 @@ describe('parseTeamStartArgs', () => {
36
36
  assert.throws(() => parseTeamStartArgs([`${DEFAULT_MAX_WORKERS + 1}:executor`, 'ship', 'it']), new RegExp(`Expected 1-${DEFAULT_MAX_WORKERS}`));
37
37
  });
38
38
  });
39
+ describe('teamCommand shutdown --force parsing', () => {
40
+ it('parses --force flag from shutdown args', () => {
41
+ const teamArgs = ['shutdown', 'my-team', '--force'];
42
+ const force = teamArgs.includes('--force');
43
+ assert.equal(force, true);
44
+ });
45
+ it('does not set force when --force is absent', () => {
46
+ const teamArgs = ['shutdown', 'my-team'];
47
+ const force = teamArgs.includes('--force');
48
+ assert.equal(force, false);
49
+ });
50
+ it('parses --force regardless of position after subcommand', () => {
51
+ const teamArgs = ['shutdown', '--force', 'my-team'];
52
+ const force = teamArgs.includes('--force');
53
+ assert.equal(force, true);
54
+ });
55
+ });
39
56
  //# sourceMappingURL=team.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"team.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/team.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"team.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/team.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=uninstall.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/uninstall.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,454 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
4
+ import { existsSync } from 'node:fs';
5
+ import { join, dirname } from 'node:path';
6
+ import { tmpdir } from 'node:os';
7
+ import { spawnSync } from 'node:child_process';
8
+ import { fileURLToPath } from 'node:url';
9
+ function runOmx(cwd, argv, envOverrides = {}) {
10
+ const testDir = dirname(fileURLToPath(import.meta.url));
11
+ const repoRoot = join(testDir, '..', '..', '..');
12
+ const omxBin = join(repoRoot, 'bin', 'omx.js');
13
+ const result = spawnSync(process.execPath, [omxBin, ...argv], {
14
+ cwd,
15
+ encoding: 'utf-8',
16
+ env: { ...process.env, ...envOverrides },
17
+ });
18
+ return {
19
+ status: result.status,
20
+ stdout: result.stdout || '',
21
+ stderr: result.stderr || '',
22
+ error: result.error?.message || '',
23
+ };
24
+ }
25
+ function shouldSkipForSpawnPermissions(err) {
26
+ return typeof err === 'string' && /(EPERM|EACCES)/i.test(err);
27
+ }
28
+ /** Build a realistic OMX config.toml for testing */
29
+ function buildOmxConfig() {
30
+ return [
31
+ '# oh-my-codex top-level settings (must be before any [table])',
32
+ 'notify = ["node", "/path/to/notify-hook.js"]',
33
+ 'model_reasoning_effort = "high"',
34
+ 'developer_instructions = "You have oh-my-codex installed."',
35
+ '',
36
+ '[features]',
37
+ 'multi_agent = true',
38
+ 'child_agents_md = true',
39
+ '',
40
+ '# ============================================================',
41
+ '# oh-my-codex (OMX) Configuration',
42
+ '# Managed by omx setup - manual edits preserved on next setup',
43
+ '# ============================================================',
44
+ '',
45
+ '# OMX State Management MCP Server',
46
+ '[mcp_servers.omx_state]',
47
+ 'command = "node"',
48
+ 'args = ["/path/to/state-server.js"]',
49
+ 'enabled = true',
50
+ 'startup_timeout_sec = 5',
51
+ '',
52
+ '# OMX Project Memory MCP Server',
53
+ '[mcp_servers.omx_memory]',
54
+ 'command = "node"',
55
+ 'args = ["/path/to/memory-server.js"]',
56
+ 'enabled = true',
57
+ 'startup_timeout_sec = 5',
58
+ '',
59
+ '# OMX Code Intelligence MCP Server',
60
+ '[mcp_servers.omx_code_intel]',
61
+ 'command = "node"',
62
+ 'args = ["/path/to/code-intel-server.js"]',
63
+ 'enabled = true',
64
+ 'startup_timeout_sec = 10',
65
+ '',
66
+ '# OMX Trace MCP Server',
67
+ '[mcp_servers.omx_trace]',
68
+ 'command = "node"',
69
+ 'args = ["/path/to/trace-server.js"]',
70
+ 'enabled = true',
71
+ 'startup_timeout_sec = 5',
72
+ '',
73
+ '[agents.executor]',
74
+ 'description = "Code implementation"',
75
+ 'config_file = "/path/to/executor.toml"',
76
+ '',
77
+ '# OMX TUI StatusLine (Codex CLI v0.101.0+)',
78
+ '[tui]',
79
+ 'status_line = ["model-with-reasoning", "git-branch"]',
80
+ '',
81
+ '# ============================================================',
82
+ '# End oh-my-codex',
83
+ '',
84
+ ].join('\n');
85
+ }
86
+ /** Build a config with OMX entries mixed with user entries */
87
+ function buildMixedConfig() {
88
+ return [
89
+ '# User settings',
90
+ 'model = "o4-mini"',
91
+ '',
92
+ '# oh-my-codex top-level settings (must be before any [table])',
93
+ 'notify = ["node", "/path/to/notify-hook.js"]',
94
+ 'model_reasoning_effort = "high"',
95
+ 'developer_instructions = "You have oh-my-codex installed."',
96
+ '',
97
+ '[features]',
98
+ 'multi_agent = true',
99
+ 'child_agents_md = true',
100
+ 'web_search = true',
101
+ '',
102
+ '[mcp_servers.user_custom]',
103
+ 'command = "custom"',
104
+ 'args = ["--flag"]',
105
+ '',
106
+ '# ============================================================',
107
+ '# oh-my-codex (OMX) Configuration',
108
+ '# Managed by omx setup - manual edits preserved on next setup',
109
+ '# ============================================================',
110
+ '',
111
+ '[mcp_servers.omx_state]',
112
+ 'command = "node"',
113
+ 'args = ["/path/to/state-server.js"]',
114
+ 'enabled = true',
115
+ '',
116
+ '[mcp_servers.omx_memory]',
117
+ 'command = "node"',
118
+ 'args = ["/path/to/memory-server.js"]',
119
+ 'enabled = true',
120
+ '',
121
+ '[mcp_servers.omx_code_intel]',
122
+ 'command = "node"',
123
+ 'args = ["/path/to/code-intel-server.js"]',
124
+ 'enabled = true',
125
+ '',
126
+ '[mcp_servers.omx_trace]',
127
+ 'command = "node"',
128
+ 'args = ["/path/to/trace-server.js"]',
129
+ 'enabled = true',
130
+ '',
131
+ '[agents.executor]',
132
+ 'description = "Code implementation"',
133
+ 'config_file = "/path/to/executor.toml"',
134
+ '',
135
+ '[tui]',
136
+ 'status_line = ["model-with-reasoning"]',
137
+ '',
138
+ '# ============================================================',
139
+ '# End oh-my-codex',
140
+ '',
141
+ ].join('\n');
142
+ }
143
+ describe('omx uninstall', () => {
144
+ it('removes OMX block from config.toml with --dry-run', async () => {
145
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
146
+ try {
147
+ const home = join(wd, 'home');
148
+ const codexDir = join(home, '.codex');
149
+ await mkdir(codexDir, { recursive: true });
150
+ await writeFile(join(codexDir, 'config.toml'), buildOmxConfig());
151
+ const res = runOmx(wd, ['uninstall', '--dry-run'], { HOME: home });
152
+ if (shouldSkipForSpawnPermissions(res.error))
153
+ return;
154
+ assert.equal(res.status, 0, res.stderr || res.stdout);
155
+ assert.match(res.stdout, /dry-run mode/);
156
+ assert.match(res.stdout, /OMX configuration block/);
157
+ assert.match(res.stdout, /omx_state/);
158
+ // Config should NOT have been modified
159
+ const config = await readFile(join(codexDir, 'config.toml'), 'utf-8');
160
+ assert.match(config, /oh-my-codex \(OMX\) Configuration/);
161
+ }
162
+ finally {
163
+ await rm(wd, { recursive: true, force: true });
164
+ }
165
+ });
166
+ it('removes OMX block from config.toml', async () => {
167
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
168
+ try {
169
+ const home = join(wd, 'home');
170
+ const codexDir = join(home, '.codex');
171
+ await mkdir(codexDir, { recursive: true });
172
+ await writeFile(join(codexDir, 'config.toml'), buildOmxConfig());
173
+ const res = runOmx(wd, ['uninstall'], { HOME: home });
174
+ if (shouldSkipForSpawnPermissions(res.error))
175
+ return;
176
+ assert.equal(res.status, 0, res.stderr || res.stdout);
177
+ assert.match(res.stdout, /Removed OMX configuration block/);
178
+ const config = await readFile(join(codexDir, 'config.toml'), 'utf-8');
179
+ assert.doesNotMatch(config, /oh-my-codex \(OMX\) Configuration/);
180
+ assert.doesNotMatch(config, /omx_state/);
181
+ assert.doesNotMatch(config, /omx_memory/);
182
+ assert.doesNotMatch(config, /omx_code_intel/);
183
+ assert.doesNotMatch(config, /omx_trace/);
184
+ assert.doesNotMatch(config, /\[agents\.executor\]/);
185
+ assert.doesNotMatch(config, /\[tui\]/);
186
+ assert.doesNotMatch(config, /notify\s*=/);
187
+ assert.doesNotMatch(config, /model_reasoning_effort\s*=/);
188
+ assert.doesNotMatch(config, /developer_instructions\s*=/);
189
+ assert.doesNotMatch(config, /multi_agent\s*=/);
190
+ assert.doesNotMatch(config, /child_agents_md\s*=/);
191
+ }
192
+ finally {
193
+ await rm(wd, { recursive: true, force: true });
194
+ }
195
+ });
196
+ it('preserves user config entries when removing OMX', async () => {
197
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
198
+ try {
199
+ const home = join(wd, 'home');
200
+ const codexDir = join(home, '.codex');
201
+ await mkdir(codexDir, { recursive: true });
202
+ await writeFile(join(codexDir, 'config.toml'), buildMixedConfig());
203
+ const res = runOmx(wd, ['uninstall'], { HOME: home });
204
+ if (shouldSkipForSpawnPermissions(res.error))
205
+ return;
206
+ assert.equal(res.status, 0, res.stderr || res.stdout);
207
+ const config = await readFile(join(codexDir, 'config.toml'), 'utf-8');
208
+ // User settings preserved
209
+ assert.match(config, /model = "o4-mini"/);
210
+ assert.match(config, /\[mcp_servers\.user_custom\]/);
211
+ assert.match(config, /web_search = true/);
212
+ // OMX entries removed
213
+ assert.doesNotMatch(config, /omx_state/);
214
+ assert.doesNotMatch(config, /omx_memory/);
215
+ assert.doesNotMatch(config, /notify\s*=.*node/);
216
+ assert.doesNotMatch(config, /multi_agent/);
217
+ assert.doesNotMatch(config, /child_agents_md/);
218
+ }
219
+ finally {
220
+ await rm(wd, { recursive: true, force: true });
221
+ }
222
+ });
223
+ it('--keep-config skips config.toml cleanup', async () => {
224
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
225
+ try {
226
+ const home = join(wd, 'home');
227
+ const codexDir = join(home, '.codex');
228
+ await mkdir(codexDir, { recursive: true });
229
+ await writeFile(join(codexDir, 'config.toml'), buildOmxConfig());
230
+ const res = runOmx(wd, ['uninstall', '--keep-config'], { HOME: home });
231
+ if (shouldSkipForSpawnPermissions(res.error))
232
+ return;
233
+ assert.equal(res.status, 0, res.stderr || res.stdout);
234
+ assert.match(res.stdout, /--keep-config/);
235
+ // Config should NOT have been modified
236
+ const config = await readFile(join(codexDir, 'config.toml'), 'utf-8');
237
+ assert.match(config, /oh-my-codex \(OMX\) Configuration/);
238
+ assert.match(config, /omx_state/);
239
+ }
240
+ finally {
241
+ await rm(wd, { recursive: true, force: true });
242
+ }
243
+ });
244
+ it('--purge removes .omx/ cache directory', async () => {
245
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
246
+ try {
247
+ const home = join(wd, 'home');
248
+ await mkdir(home, { recursive: true });
249
+ // Create .omx/ directory with some files
250
+ const omxDir = join(wd, '.omx');
251
+ await mkdir(join(omxDir, 'state'), { recursive: true });
252
+ await writeFile(join(omxDir, 'setup-scope.json'), JSON.stringify({ scope: 'user' }));
253
+ await writeFile(join(omxDir, 'notepad.md'), '# notes');
254
+ await writeFile(join(omxDir, 'state', 'ralph-state.json'), '{}');
255
+ const res = runOmx(wd, ['uninstall', '--keep-config', '--purge'], { HOME: home });
256
+ if (shouldSkipForSpawnPermissions(res.error))
257
+ return;
258
+ assert.equal(res.status, 0, res.stderr || res.stdout);
259
+ assert.match(res.stdout, /\.omx\/ cache directory/);
260
+ assert.equal(existsSync(omxDir), false, '.omx/ directory should be removed');
261
+ }
262
+ finally {
263
+ await rm(wd, { recursive: true, force: true });
264
+ }
265
+ });
266
+ it('works with project scope', async () => {
267
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
268
+ try {
269
+ const home = join(wd, 'home');
270
+ await mkdir(home, { recursive: true });
271
+ // Create project-scoped setup
272
+ const omxDir = join(wd, '.omx');
273
+ const codexDir = join(wd, '.codex');
274
+ await mkdir(omxDir, { recursive: true });
275
+ await mkdir(join(codexDir, 'prompts'), { recursive: true });
276
+ await writeFile(join(omxDir, 'setup-scope.json'), JSON.stringify({ scope: 'project' }));
277
+ await writeFile(join(codexDir, 'config.toml'), buildOmxConfig());
278
+ // Install a prompt
279
+ await writeFile(join(codexDir, 'prompts', 'executor.md'), '# executor');
280
+ const res = runOmx(wd, ['uninstall'], { HOME: home });
281
+ if (shouldSkipForSpawnPermissions(res.error))
282
+ return;
283
+ assert.equal(res.status, 0, res.stderr || res.stdout);
284
+ assert.match(res.stdout, /Resolved scope: project/);
285
+ // Project-local config.toml should be cleaned
286
+ const config = await readFile(join(codexDir, 'config.toml'), 'utf-8');
287
+ assert.doesNotMatch(config, /oh-my-codex \(OMX\) Configuration/);
288
+ }
289
+ finally {
290
+ await rm(wd, { recursive: true, force: true });
291
+ }
292
+ });
293
+ it('handles missing config.toml gracefully', async () => {
294
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
295
+ try {
296
+ const home = join(wd, 'home');
297
+ await mkdir(home, { recursive: true });
298
+ const res = runOmx(wd, ['uninstall'], { HOME: home });
299
+ if (shouldSkipForSpawnPermissions(res.error))
300
+ return;
301
+ assert.equal(res.status, 0, res.stderr || res.stdout);
302
+ assert.match(res.stdout, /Nothing to remove/);
303
+ }
304
+ finally {
305
+ await rm(wd, { recursive: true, force: true });
306
+ }
307
+ });
308
+ it('shows summary of what was removed', async () => {
309
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
310
+ try {
311
+ const home = join(wd, 'home');
312
+ const codexDir = join(home, '.codex');
313
+ await mkdir(codexDir, { recursive: true });
314
+ await writeFile(join(codexDir, 'config.toml'), buildOmxConfig());
315
+ const res = runOmx(wd, ['uninstall'], { HOME: home });
316
+ if (shouldSkipForSpawnPermissions(res.error))
317
+ return;
318
+ assert.equal(res.status, 0, res.stderr || res.stdout);
319
+ assert.match(res.stdout, /Uninstall summary/);
320
+ assert.match(res.stdout, /MCP servers: omx_state, omx_memory, omx_code_intel, omx_trace/);
321
+ assert.match(res.stdout, /Agent entries: 1/);
322
+ assert.match(res.stdout, /TUI status line section/);
323
+ assert.match(res.stdout, /Top-level keys/);
324
+ assert.match(res.stdout, /Feature flags/);
325
+ }
326
+ finally {
327
+ await rm(wd, { recursive: true, force: true });
328
+ }
329
+ });
330
+ it('--dry-run --purge does not actually remove .omx/ directory', async () => {
331
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
332
+ try {
333
+ const home = join(wd, 'home');
334
+ await mkdir(home, { recursive: true });
335
+ const omxDir = join(wd, '.omx');
336
+ await mkdir(join(omxDir, 'state'), { recursive: true });
337
+ await writeFile(join(omxDir, 'setup-scope.json'), JSON.stringify({ scope: 'user' }));
338
+ await writeFile(join(omxDir, 'notepad.md'), '# notes');
339
+ const res = runOmx(wd, ['uninstall', '--keep-config', '--purge', '--dry-run'], { HOME: home });
340
+ if (shouldSkipForSpawnPermissions(res.error))
341
+ return;
342
+ assert.equal(res.status, 0, res.stderr || res.stdout);
343
+ assert.match(res.stdout, /dry-run mode/);
344
+ assert.match(res.stdout, /\.omx\/ cache directory/);
345
+ // .omx/ should still exist
346
+ assert.equal(existsSync(omxDir), true, '.omx/ should NOT be removed in dry-run');
347
+ assert.equal(existsSync(join(omxDir, 'notepad.md')), true);
348
+ }
349
+ finally {
350
+ await rm(wd, { recursive: true, force: true });
351
+ }
352
+ });
353
+ it('second uninstall run reports nothing to remove (idempotent)', async () => {
354
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
355
+ try {
356
+ const home = join(wd, 'home');
357
+ const codexDir = join(home, '.codex');
358
+ await mkdir(codexDir, { recursive: true });
359
+ await writeFile(join(codexDir, 'config.toml'), buildOmxConfig());
360
+ const first = runOmx(wd, ['uninstall'], { HOME: home });
361
+ if (shouldSkipForSpawnPermissions(first.error))
362
+ return;
363
+ assert.equal(first.status, 0, first.stderr || first.stdout);
364
+ assert.match(first.stdout, /Removed OMX configuration block/);
365
+ const second = runOmx(wd, ['uninstall'], { HOME: home });
366
+ if (shouldSkipForSpawnPermissions(second.error))
367
+ return;
368
+ assert.equal(second.status, 0, second.stderr || second.stdout);
369
+ assert.match(second.stdout, /Nothing to remove/);
370
+ }
371
+ finally {
372
+ await rm(wd, { recursive: true, force: true });
373
+ }
374
+ });
375
+ it('does not delete user AGENTS.md that merely mentions oh-my-codex', async () => {
376
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
377
+ try {
378
+ const home = join(wd, 'home');
379
+ await mkdir(home, { recursive: true });
380
+ const userAgentsMd = '# My Agents\n\nDo not use oh-my-codex for this project.\n';
381
+ await writeFile(join(wd, 'AGENTS.md'), userAgentsMd);
382
+ const res = runOmx(wd, ['uninstall'], { HOME: home });
383
+ if (shouldSkipForSpawnPermissions(res.error))
384
+ return;
385
+ assert.equal(res.status, 0, res.stderr || res.stdout);
386
+ // User AGENTS.md should be preserved
387
+ assert.equal(existsSync(join(wd, 'AGENTS.md')), true);
388
+ const content = await readFile(join(wd, 'AGENTS.md'), 'utf-8');
389
+ assert.equal(content, userAgentsMd);
390
+ }
391
+ finally {
392
+ await rm(wd, { recursive: true, force: true });
393
+ }
394
+ });
395
+ it('removes setup-scope.json and hud-config.json without --purge', async () => {
396
+ const wd = await mkdtemp(join(tmpdir(), 'omx-uninstall-'));
397
+ try {
398
+ const home = join(wd, 'home');
399
+ await mkdir(home, { recursive: true });
400
+ const omxDir = join(wd, '.omx');
401
+ await mkdir(omxDir, { recursive: true });
402
+ await writeFile(join(omxDir, 'setup-scope.json'), JSON.stringify({ scope: 'user' }));
403
+ await writeFile(join(omxDir, 'hud-config.json'), JSON.stringify({ preset: 'focused' }));
404
+ await writeFile(join(omxDir, 'notepad.md'), '# keep this');
405
+ const res = runOmx(wd, ['uninstall', '--keep-config'], { HOME: home });
406
+ if (shouldSkipForSpawnPermissions(res.error))
407
+ return;
408
+ assert.equal(res.status, 0, res.stderr || res.stdout);
409
+ assert.equal(existsSync(join(omxDir, 'setup-scope.json')), false);
410
+ assert.equal(existsSync(join(omxDir, 'hud-config.json')), false);
411
+ // notepad.md should still exist (not purged)
412
+ assert.equal(existsSync(join(omxDir, 'notepad.md')), true);
413
+ }
414
+ finally {
415
+ await rm(wd, { recursive: true, force: true });
416
+ }
417
+ });
418
+ });
419
+ describe('stripOmxFeatureFlags', () => {
420
+ it('removes OMX feature flags and preserves user flags', async () => {
421
+ const { stripOmxFeatureFlags } = await import('../../config/generator.js');
422
+ const config = [
423
+ '[features]',
424
+ 'multi_agent = true',
425
+ 'child_agents_md = true',
426
+ 'web_search = true',
427
+ '',
428
+ ].join('\n');
429
+ const result = stripOmxFeatureFlags(config);
430
+ assert.doesNotMatch(result, /multi_agent/);
431
+ assert.doesNotMatch(result, /child_agents_md/);
432
+ assert.match(result, /web_search = true/);
433
+ assert.match(result, /\[features\]/);
434
+ });
435
+ it('removes [features] section if it becomes empty', async () => {
436
+ const { stripOmxFeatureFlags } = await import('../../config/generator.js');
437
+ const config = [
438
+ '[features]',
439
+ 'multi_agent = true',
440
+ 'child_agents_md = true',
441
+ '',
442
+ ].join('\n');
443
+ const result = stripOmxFeatureFlags(config);
444
+ assert.doesNotMatch(result, /\[features\]/);
445
+ assert.doesNotMatch(result, /multi_agent/);
446
+ });
447
+ it('handles config without [features] section', async () => {
448
+ const { stripOmxFeatureFlags } = await import('../../config/generator.js');
449
+ const config = 'model = "o4-mini"\n';
450
+ const result = stripOmxFeatureFlags(config);
451
+ assert.equal(result, config);
452
+ });
453
+ });
454
+ //# sourceMappingURL=uninstall.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/uninstall.test.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * Multi-agent orchestration for OpenAI Codex CLI
4
4
  */
5
5
  import { type SetupScope } from './setup.js';
6
- type CliCommand = 'launch' | 'setup' | 'doctor' | 'team' | 'version' | 'tmux-hook' | 'hooks' | 'hud' | 'status' | 'cancel' | 'help' | 'reasoning' | string;
6
+ type CliCommand = 'launch' | 'setup' | 'uninstall' | 'doctor' | 'team' | 'version' | 'tmux-hook' | 'hooks' | 'hud' | 'status' | 'cancel' | 'help' | 'reasoning' | string;
7
7
  export interface ResolvedCliInvocation {
8
8
  command: CliCommand;
9
9
  launchArgs: string[];