oh-my-codex 0.8.2 → 0.8.4

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 (53) hide show
  1. package/README.md +10 -2
  2. package/dist/cli/__tests__/setup-agents-overwrite.test.js +17 -27
  3. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
  4. package/dist/cli/__tests__/setup-codex-version.test.d.ts +2 -0
  5. package/dist/cli/__tests__/setup-codex-version.test.d.ts.map +1 -0
  6. package/dist/cli/__tests__/setup-codex-version.test.js +99 -0
  7. package/dist/cli/__tests__/setup-codex-version.test.js.map +1 -0
  8. package/dist/cli/__tests__/setup-refresh.test.d.ts +2 -0
  9. package/dist/cli/__tests__/setup-refresh.test.d.ts.map +1 -0
  10. package/dist/cli/__tests__/setup-refresh.test.js +166 -0
  11. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -0
  12. package/dist/cli/__tests__/setup-scope.test.js +7 -4
  13. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  14. package/dist/cli/__tests__/setup-skills-overwrite.test.js +5 -2
  15. package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -1
  16. package/dist/cli/__tests__/uninstall.test.js +53 -0
  17. package/dist/cli/__tests__/uninstall.test.js.map +1 -1
  18. package/dist/cli/setup.d.ts +2 -1
  19. package/dist/cli/setup.d.ts.map +1 -1
  20. package/dist/cli/setup.js +335 -175
  21. package/dist/cli/setup.js.map +1 -1
  22. package/dist/config/__tests__/generator-idempotent.test.js +199 -128
  23. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  24. package/dist/config/__tests__/generator-notify.test.js +55 -0
  25. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  26. package/dist/config/generator.d.ts +4 -1
  27. package/dist/config/generator.d.ts.map +1 -1
  28. package/dist/config/generator.js +154 -111
  29. package/dist/config/generator.js.map +1 -1
  30. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +26 -4
  31. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  32. package/dist/team/__tests__/runtime.test.js +76 -0
  33. package/dist/team/__tests__/runtime.test.js.map +1 -1
  34. package/dist/team/__tests__/tmux-claude-workers-demo.test.js +4 -3
  35. package/dist/team/__tests__/tmux-claude-workers-demo.test.js.map +1 -1
  36. package/dist/team/__tests__/tmux-session.test.js +10 -3
  37. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  38. package/dist/team/runtime.d.ts.map +1 -1
  39. package/dist/team/runtime.js +92 -62
  40. package/dist/team/runtime.js.map +1 -1
  41. package/dist/team/tmux-session.d.ts +4 -3
  42. package/dist/team/tmux-session.d.ts.map +1 -1
  43. package/dist/team/tmux-session.js +15 -9
  44. package/dist/team/tmux-session.js.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/hooks/__tests__/emulator.test.d.ts +0 -2
  47. package/dist/hooks/__tests__/emulator.test.d.ts.map +0 -1
  48. package/dist/hooks/__tests__/emulator.test.js +0 -53
  49. package/dist/hooks/__tests__/emulator.test.js.map +0 -1
  50. package/dist/hooks/emulator.d.ts +0 -44
  51. package/dist/hooks/emulator.d.ts.map +0 -1
  52. package/dist/hooks/emulator.js +0 -105
  53. package/dist/hooks/emulator.js.map +0 -1
@@ -15,14 +15,23 @@ describe('config generator', () => {
15
15
  const notifyIdx = toml.indexOf('notify =');
16
16
  const reasoningIdx = toml.indexOf('model_reasoning_effort =');
17
17
  const devInstrIdx = toml.indexOf('developer_instructions =');
18
+ const modelIdx = toml.indexOf('model = "gpt-5.4"');
19
+ const contextIdx = toml.indexOf('model_context_window = 1000000');
20
+ const compactIdx = toml.indexOf('model_auto_compact_token_limit = 900000');
18
21
  const featuresIdx = toml.indexOf('[features]');
19
22
  assert.ok(notifyIdx >= 0, 'notify not found');
20
23
  assert.ok(reasoningIdx >= 0, 'model_reasoning_effort not found');
21
24
  assert.ok(devInstrIdx >= 0, 'developer_instructions not found');
25
+ assert.ok(modelIdx >= 0, 'model not found');
26
+ assert.ok(contextIdx >= 0, 'model_context_window not found');
27
+ assert.ok(compactIdx >= 0, 'model_auto_compact_token_limit not found');
22
28
  assert.ok(featuresIdx >= 0, '[features] not found');
23
29
  assert.ok(notifyIdx < featuresIdx, 'notify must come before [features]');
24
30
  assert.ok(reasoningIdx < featuresIdx, 'model_reasoning_effort must come before [features]');
25
31
  assert.ok(devInstrIdx < featuresIdx, 'developer_instructions must come before [features]');
32
+ assert.ok(modelIdx < featuresIdx, 'model must come before [features]');
33
+ assert.ok(contextIdx < featuresIdx, 'model_context_window must come before [features]');
34
+ assert.ok(compactIdx < featuresIdx, 'model_auto_compact_token_limit must come before [features]');
26
35
  }
27
36
  finally {
28
37
  await rm(wd, { recursive: true, force: true });
@@ -40,6 +49,37 @@ describe('config generator', () => {
40
49
  await rm(wd, { recursive: true, force: true });
41
50
  }
42
51
  });
52
+ it('seeds gpt-5.4 model and context defaults for fresh configs', async () => {
53
+ const wd = await mkdtemp(join(tmpdir(), 'omx-config-gen-'));
54
+ try {
55
+ const configPath = join(wd, 'config.toml');
56
+ await mergeConfig(configPath, wd);
57
+ const toml = await readFile(configPath, 'utf-8');
58
+ assert.match(toml, /^model = "gpt-5\.4"$/m);
59
+ assert.match(toml, /^model_context_window = 1000000$/m);
60
+ assert.match(toml, /^model_auto_compact_token_limit = 900000$/m);
61
+ }
62
+ finally {
63
+ await rm(wd, { recursive: true, force: true });
64
+ }
65
+ });
66
+ it('seeds default model and context settings on fresh config', async () => {
67
+ const wd = await mkdtemp(join(tmpdir(), 'omx-config-gen-'));
68
+ try {
69
+ const configPath = join(wd, 'config.toml');
70
+ await mergeConfig(configPath, wd);
71
+ const toml = await readFile(configPath, 'utf-8');
72
+ assert.match(toml, /^model = "gpt-5\.4"$/m);
73
+ assert.match(toml, /^model_context_window = 1000000$/m);
74
+ assert.match(toml, /^model_auto_compact_token_limit = 900000$/m);
75
+ const modelIdx = toml.indexOf('model = "gpt-5.4"');
76
+ const featuresIdx = toml.indexOf('[features]');
77
+ assert.ok(modelIdx >= 0 && modelIdx < featuresIdx, 'seeded model must come before [features]');
78
+ }
79
+ finally {
80
+ await rm(wd, { recursive: true, force: true });
81
+ }
82
+ });
43
83
  it('writes model_reasoning_effort and developer_instructions', async () => {
44
84
  const wd = await mkdtemp(join(tmpdir(), 'omx-config-gen-'));
45
85
  try {
@@ -103,6 +143,21 @@ describe('config generator', () => {
103
143
  await rm(wd, { recursive: true, force: true });
104
144
  }
105
145
  });
146
+ it('does not seed 1M context keys for non-gpt-5.4 models', async () => {
147
+ const wd = await mkdtemp(join(tmpdir(), 'omx-config-gen-'));
148
+ try {
149
+ const configPath = join(wd, 'config.toml');
150
+ await writeFile(configPath, 'model = \"o3\"\n');
151
+ await mergeConfig(configPath, wd);
152
+ const toml = await readFile(configPath, 'utf-8');
153
+ assert.match(toml, /^model = "o3"$/m);
154
+ assert.doesNotMatch(toml, /^model_context_window = 1000000$/m);
155
+ assert.doesNotMatch(toml, /^model_auto_compact_token_limit = 900000$/m);
156
+ }
157
+ finally {
158
+ await rm(wd, { recursive: true, force: true });
159
+ }
160
+ });
106
161
  it('preserves existing user top-level config', async () => {
107
162
  const wd = await mkdtemp(join(tmpdir(), 'omx-config-gen-'));
108
163
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"generator-notify.test.js","sourceRoot":"","sources":["../../../src/config/__tests__/generator-notify.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator-notify.test.js","sourceRoot":"","sources":["../../../src/config/__tests__/generator-notify.test.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,13 @@
11
11
  */
12
12
  interface MergeOptions {
13
13
  agentsConfigDir?: string;
14
+ modelOverride?: string;
14
15
  verbose?: boolean;
15
16
  }
17
+ export declare function getRootModelName(config: string): string | undefined;
16
18
  /**
17
19
  * Remove any existing OMX-owned top-level keys so we can re-insert them
18
- * cleanly. Also removes the comment line that precedes them.
20
+ * cleanly. Also removes the comment line that precedes them.
19
21
  */
20
22
  export declare function stripOmxTopLevelKeys(config: string): string;
21
23
  /**
@@ -37,6 +39,7 @@ export declare function stripExistingOmxBlocks(config: string): {
37
39
  * 3. … user sections …
38
40
  * 4. OMX [table] sections (mcp_servers, tui)
39
41
  */
42
+ export declare function buildMergedConfig(existingConfig: string, pkgRoot: string, options?: MergeOptions): string;
40
43
  export declare function mergeConfig(configPath: string, pkgRoot: string, options?: MergeOptions): Promise<void>;
41
44
  export {};
42
45
  //# sourceMappingURL=generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/config/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,UAAU,YAAY;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA6BD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAuB3D;AAkED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA2C3D;AAyED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAoC3F;AA8FD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAqCf"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/config/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,UAAU,YAAY;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnE;AAsFD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAoED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA+C3D;AA4ED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAuCA;AAwGD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,MAAM,CA0BR;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -9,55 +9,95 @@
9
9
  * 2. [features] flags
10
10
  * 3. [table] sections (mcp_servers, tui)
11
11
  */
12
- import { readFile, writeFile } from 'fs/promises';
13
- import { existsSync } from 'fs';
14
- import { join } from 'path';
15
- import { AGENT_DEFINITIONS } from '../agents/definitions.js';
16
- import { omxAgentsConfigDir } from '../utils/paths.js';
12
+ import { readFile, writeFile } from "fs/promises";
13
+ import { existsSync } from "fs";
14
+ import { join } from "path";
15
+ import { AGENT_DEFINITIONS } from "../agents/definitions.js";
16
+ import { omxAgentsConfigDir } from "../utils/paths.js";
17
17
  function escapeTomlString(value) {
18
- return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
18
+ return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
19
19
  }
20
20
  // ---------------------------------------------------------------------------
21
21
  // Top-level OMX keys (must live before any [table] header)
22
22
  // ---------------------------------------------------------------------------
23
23
  /** Keys we own at the TOML root level. Used for upsert + strip. */
24
24
  const OMX_TOP_LEVEL_KEYS = [
25
- 'notify',
26
- 'model_reasoning_effort',
27
- 'developer_instructions',
25
+ "notify",
26
+ "model_reasoning_effort",
27
+ "developer_instructions",
28
28
  ];
29
- function getOmxTopLevelLines(pkgRoot) {
30
- const notifyHookPath = join(pkgRoot, 'scripts', 'notify-hook.js');
29
+ const DEFAULT_SETUP_MODEL = "gpt-5.4";
30
+ const DEFAULT_SETUP_MODEL_CONTEXT_WINDOW = 1000000;
31
+ const DEFAULT_SETUP_MODEL_AUTO_COMPACT_TOKEN_LIMIT = 900000;
32
+ function unwrapTomlString(value) {
33
+ return value?.match(/^"(.*)"$/)?.[1];
34
+ }
35
+ export function getRootModelName(config) {
36
+ return unwrapTomlString(parseRootKeyValues(config).get("model"));
37
+ }
38
+ function parseRootKeyValues(config) {
39
+ const values = new Map();
40
+ const lines = config.split(/\r?\n/);
41
+ for (const line of lines) {
42
+ if (/^\s*\[/.test(line))
43
+ break;
44
+ const match = line.match(/^\s*([A-Za-z0-9_-]+)\s*=\s*(.+?)\s*$/);
45
+ if (!match)
46
+ continue;
47
+ values.set(match[1], match[2]);
48
+ }
49
+ return values;
50
+ }
51
+ function getOmxTopLevelLines(pkgRoot, existingConfig = "", modelOverride) {
52
+ const notifyHookPath = join(pkgRoot, "scripts", "notify-hook.js");
31
53
  const escapedPath = escapeTomlString(notifyHookPath);
32
- return [
33
- '# oh-my-codex top-level settings (must be before any [table])',
54
+ const rootValues = parseRootKeyValues(existingConfig);
55
+ const lines = [
56
+ "# oh-my-codex top-level settings (must be before any [table])",
34
57
  `notify = ["node", "${escapedPath}"]`,
35
58
  'model_reasoning_effort = "high"',
36
59
  `developer_instructions = "You have oh-my-codex installed. Use /prompts:architect, /prompts:executor, /prompts:planner for specialized agent roles. Workflow skills via $name: $ralph, $autopilot, $plan. AGENTS.md is your orchestration brain."`,
37
60
  ];
61
+ const existingModel = rootValues.get("model");
62
+ const existingContextWindow = rootValues.get("model_context_window");
63
+ const existingAutoCompact = rootValues.get("model_auto_compact_token_limit");
64
+ const selectedModel = modelOverride ?? unwrapTomlString(existingModel) ?? DEFAULT_SETUP_MODEL;
65
+ if (modelOverride || !existingModel) {
66
+ lines.push(`model = "${selectedModel}"`);
67
+ }
68
+ if (selectedModel === DEFAULT_SETUP_MODEL &&
69
+ !existingContextWindow &&
70
+ !existingAutoCompact) {
71
+ lines.push(`model_context_window = ${DEFAULT_SETUP_MODEL_CONTEXT_WINDOW}`);
72
+ lines.push(`model_auto_compact_token_limit = ${DEFAULT_SETUP_MODEL_AUTO_COMPACT_TOKEN_LIMIT}`);
73
+ }
74
+ return lines;
38
75
  }
39
- /**
40
- * Remove any existing OMX-owned top-level keys so we can re-insert them
41
- * cleanly. Also removes the comment line that precedes them.
42
- */
43
- export function stripOmxTopLevelKeys(config) {
76
+ function stripRootLevelKeys(config, keys) {
44
77
  let lines = config.split(/\r?\n/);
45
- // Remove the OMX top-level comment line
46
- lines = lines.filter((l) => l.trim() !== '# oh-my-codex top-level settings (must be before any [table])');
47
- // Remove lines matching OMX-owned keys (only in root scope, i.e. before
48
- // the first [table] header).
78
+ if (keys.some((key) => OMX_TOP_LEVEL_KEYS.includes(key))) {
79
+ lines = lines.filter((l) => l.trim() !==
80
+ "# oh-my-codex top-level settings (must be before any [table])");
81
+ }
49
82
  const firstTable = lines.findIndex((l) => /^\s*\[/.test(l));
50
83
  const boundary = firstTable >= 0 ? firstTable : lines.length;
51
84
  const result = [];
52
85
  for (let i = 0; i < lines.length; i++) {
53
86
  if (i < boundary) {
54
- const isOmxKey = OMX_TOP_LEVEL_KEYS.some((k) => new RegExp(`^\\s*${k}\\s*=`).test(lines[i]));
55
- if (isOmxKey)
87
+ const isManagedKey = keys.some((key) => new RegExp(`^\\s*${key}\\s*=`).test(lines[i]));
88
+ if (isManagedKey)
56
89
  continue;
57
90
  }
58
91
  result.push(lines[i]);
59
92
  }
60
- return result.join('\n');
93
+ return result.join("\n");
94
+ }
95
+ /**
96
+ * Remove any existing OMX-owned top-level keys so we can re-insert them
97
+ * cleanly. Also removes the comment line that precedes them.
98
+ */
99
+ export function stripOmxTopLevelKeys(config) {
100
+ return stripRootLevelKeys(config, OMX_TOP_LEVEL_KEYS);
61
101
  }
62
102
  // ---------------------------------------------------------------------------
63
103
  // [features] upsert
@@ -68,11 +108,11 @@ function upsertFeatureFlags(config) {
68
108
  if (featuresStart < 0) {
69
109
  const base = config.trimEnd();
70
110
  const featureBlock = [
71
- '[features]',
72
- 'multi_agent = true',
73
- 'child_agents_md = true',
74
- '',
75
- ].join('\n');
111
+ "[features]",
112
+ "multi_agent = true",
113
+ "child_agents_md = true",
114
+ "",
115
+ ].join("\n");
76
116
  if (base.length === 0) {
77
117
  return featureBlock;
78
118
  }
@@ -103,19 +143,19 @@ function upsertFeatureFlags(config) {
103
143
  }
104
144
  }
105
145
  if (multiAgentIdx >= 0) {
106
- lines[multiAgentIdx] = 'multi_agent = true';
146
+ lines[multiAgentIdx] = "multi_agent = true";
107
147
  }
108
148
  else {
109
- lines.splice(sectionEnd, 0, 'multi_agent = true');
149
+ lines.splice(sectionEnd, 0, "multi_agent = true");
110
150
  sectionEnd += 1;
111
151
  }
112
152
  if (childAgentsIdx >= 0) {
113
- lines[childAgentsIdx] = 'child_agents_md = true';
153
+ lines[childAgentsIdx] = "child_agents_md = true";
114
154
  }
115
155
  else {
116
- lines.splice(sectionEnd, 0, 'child_agents_md = true');
156
+ lines.splice(sectionEnd, 0, "child_agents_md = true");
117
157
  }
118
- return lines.join('\n');
158
+ return lines.join("\n");
119
159
  }
120
160
  /**
121
161
  * Remove OMX-owned feature flags from the [features] section.
@@ -133,7 +173,7 @@ export function stripOmxFeatureFlags(config) {
133
173
  break;
134
174
  }
135
175
  }
136
- const omxFlags = ['multi_agent', 'child_agents_md', 'collab'];
176
+ const omxFlags = ["multi_agent", "child_agents_md", "collab"];
137
177
  const filtered = [];
138
178
  for (let i = 0; i < lines.length; i++) {
139
179
  if (i > featuresStart && i < sectionEnd) {
@@ -154,11 +194,11 @@ export function stripOmxFeatureFlags(config) {
154
194
  }
155
195
  }
156
196
  const sectionContent = filtered.slice(newFeaturesStart + 1, newSectionEnd);
157
- if (sectionContent.every((l) => l.trim() === '')) {
197
+ if (sectionContent.every((l) => l.trim() === "")) {
158
198
  filtered.splice(newFeaturesStart, newSectionEnd - newFeaturesStart);
159
199
  }
160
200
  }
161
- return filtered.join('\n');
201
+ return filtered.join("\n");
162
202
  }
163
203
  // ---------------------------------------------------------------------------
164
204
  // Orphaned OMX table sections (no marker block)
@@ -199,7 +239,7 @@ function stripOrphanedOmxSections(config) {
199
239
  // Remove preceding OMX comment lines and blank lines
200
240
  while (result.length > 0) {
201
241
  const last = result[result.length - 1];
202
- if (last.trim() === '' || /^#\s*(OMX|oh-my-codex)/i.test(last)) {
242
+ if (last.trim() === "" || /^#\s*(OMX|oh-my-codex)/i.test(last)) {
203
243
  result.pop();
204
244
  }
205
245
  else {
@@ -217,25 +257,25 @@ function stripOrphanedOmxSections(config) {
217
257
  result.push(line);
218
258
  i++;
219
259
  }
220
- return result.join('\n');
260
+ return result.join("\n");
221
261
  }
222
262
  // ---------------------------------------------------------------------------
223
263
  // OMX [table] sections block (appended at end of file)
224
264
  // ---------------------------------------------------------------------------
225
265
  export function stripExistingOmxBlocks(config) {
226
- const marker = 'oh-my-codex (OMX) Configuration';
227
- const endMarker = '# End oh-my-codex';
266
+ const marker = "oh-my-codex (OMX) Configuration";
267
+ const endMarker = "# End oh-my-codex";
228
268
  let cleaned = config;
229
269
  let removed = 0;
230
270
  while (true) {
231
271
  const markerIdx = cleaned.indexOf(marker);
232
272
  if (markerIdx < 0)
233
273
  break;
234
- let blockStart = cleaned.lastIndexOf('\n', markerIdx);
274
+ let blockStart = cleaned.lastIndexOf("\n", markerIdx);
235
275
  blockStart = blockStart >= 0 ? blockStart + 1 : 0;
236
276
  const previousLineEnd = blockStart - 1;
237
277
  if (previousLineEnd >= 0) {
238
- const previousLineStart = cleaned.lastIndexOf('\n', previousLineEnd - 1);
278
+ const previousLineStart = cleaned.lastIndexOf("\n", previousLineEnd - 1);
239
279
  const previousLine = cleaned.slice(previousLineStart + 1, previousLineEnd);
240
280
  if (/^# =+$/.test(previousLine.trim())) {
241
281
  blockStart = previousLineStart >= 0 ? previousLineStart + 1 : 0;
@@ -244,12 +284,12 @@ export function stripExistingOmxBlocks(config) {
244
284
  let blockEnd = cleaned.length;
245
285
  const endIdx = cleaned.indexOf(endMarker, markerIdx);
246
286
  if (endIdx >= 0) {
247
- const endLineBreak = cleaned.indexOf('\n', endIdx);
287
+ const endLineBreak = cleaned.indexOf("\n", endIdx);
248
288
  blockEnd = endLineBreak >= 0 ? endLineBreak + 1 : cleaned.length;
249
289
  }
250
290
  const before = cleaned.slice(0, blockStart).trimEnd();
251
291
  const after = cleaned.slice(blockEnd).trimStart();
252
- cleaned = [before, after].filter(Boolean).join('\n\n');
292
+ cleaned = [before, after].filter(Boolean).join("\n\n");
253
293
  removed += 1;
254
294
  }
255
295
  return { cleaned, removed };
@@ -260,14 +300,14 @@ export function stripExistingOmxBlocks(config) {
260
300
  */
261
301
  function getAgentEntries(agentsConfigDir) {
262
302
  const entries = [
263
- '',
264
- '# OMX Native Agent Roles (Codex multi-agent)',
303
+ "",
304
+ "# OMX Native Agent Roles (Codex multi-agent)",
265
305
  ];
266
306
  for (const [name, agent] of Object.entries(AGENT_DEFINITIONS)) {
267
307
  // TOML table headers with special chars need quoting
268
- const tableKey = name.includes('-') ? `agents."${name}"` : `agents.${name}`;
308
+ const tableKey = name.includes("-") ? `agents."${name}"` : `agents.${name}`;
269
309
  const configFile = escapeTomlString(join(agentsConfigDir, `${name}.toml`));
270
- entries.push('');
310
+ entries.push("");
271
311
  entries.push(`[${tableKey}]`);
272
312
  entries.push(`description = "${agent.description}"`);
273
313
  entries.push(`config_file = "${configFile}"`);
@@ -279,62 +319,62 @@ function getAgentEntries(agentsConfigDir) {
279
319
  * Contains ONLY [table] sections — no bare keys.
280
320
  */
281
321
  function getOmxTablesBlock(pkgRoot, agentsConfigDir) {
282
- const stateServerPath = escapeTomlString(join(pkgRoot, 'dist', 'mcp', 'state-server.js'));
283
- const memoryServerPath = escapeTomlString(join(pkgRoot, 'dist', 'mcp', 'memory-server.js'));
284
- const codeIntelServerPath = escapeTomlString(join(pkgRoot, 'dist', 'mcp', 'code-intel-server.js'));
285
- const traceServerPath = escapeTomlString(join(pkgRoot, 'dist', 'mcp', 'trace-server.js'));
286
- const teamServerPath = escapeTomlString(join(pkgRoot, 'dist', 'mcp', 'team-server.js'));
322
+ const stateServerPath = escapeTomlString(join(pkgRoot, "dist", "mcp", "state-server.js"));
323
+ const memoryServerPath = escapeTomlString(join(pkgRoot, "dist", "mcp", "memory-server.js"));
324
+ const codeIntelServerPath = escapeTomlString(join(pkgRoot, "dist", "mcp", "code-intel-server.js"));
325
+ const traceServerPath = escapeTomlString(join(pkgRoot, "dist", "mcp", "trace-server.js"));
326
+ const teamServerPath = escapeTomlString(join(pkgRoot, "dist", "mcp", "team-server.js"));
287
327
  return [
288
- '',
289
- '# ============================================================',
290
- '# oh-my-codex (OMX) Configuration',
291
- '# Managed by omx setup - manual edits preserved on next setup',
292
- '# ============================================================',
293
- '',
294
- '# OMX State Management MCP Server',
295
- '[mcp_servers.omx_state]',
328
+ "",
329
+ "# ============================================================",
330
+ "# oh-my-codex (OMX) Configuration",
331
+ "# Managed by omx setup - manual edits preserved on next setup",
332
+ "# ============================================================",
333
+ "",
334
+ "# OMX State Management MCP Server",
335
+ "[mcp_servers.omx_state]",
296
336
  'command = "node"',
297
337
  `args = ["${stateServerPath}"]`,
298
- 'enabled = true',
299
- 'startup_timeout_sec = 5',
300
- '',
301
- '# OMX Project Memory MCP Server',
302
- '[mcp_servers.omx_memory]',
338
+ "enabled = true",
339
+ "startup_timeout_sec = 5",
340
+ "",
341
+ "# OMX Project Memory MCP Server",
342
+ "[mcp_servers.omx_memory]",
303
343
  'command = "node"',
304
344
  `args = ["${memoryServerPath}"]`,
305
- 'enabled = true',
306
- 'startup_timeout_sec = 5',
307
- '',
308
- '# OMX Code Intelligence MCP Server (LSP diagnostics, AST search)',
309
- '[mcp_servers.omx_code_intel]',
345
+ "enabled = true",
346
+ "startup_timeout_sec = 5",
347
+ "",
348
+ "# OMX Code Intelligence MCP Server (LSP diagnostics, AST search)",
349
+ "[mcp_servers.omx_code_intel]",
310
350
  'command = "node"',
311
351
  `args = ["${codeIntelServerPath}"]`,
312
- 'enabled = true',
313
- 'startup_timeout_sec = 10',
314
- '',
315
- '# OMX Trace MCP Server (agent flow timeline & statistics)',
316
- '[mcp_servers.omx_trace]',
352
+ "enabled = true",
353
+ "startup_timeout_sec = 10",
354
+ "",
355
+ "# OMX Trace MCP Server (agent flow timeline & statistics)",
356
+ "[mcp_servers.omx_trace]",
317
357
  'command = "node"',
318
358
  `args = ["${traceServerPath}"]`,
319
- 'enabled = true',
320
- 'startup_timeout_sec = 5',
321
- '',
322
- '# OMX Team MCP Server (team job lifecycle: start, status, wait, cleanup)',
323
- '[mcp_servers.omx_team_run]',
359
+ "enabled = true",
360
+ "startup_timeout_sec = 5",
361
+ "",
362
+ "# OMX Team MCP Server (team job lifecycle: start, status, wait, cleanup)",
363
+ "[mcp_servers.omx_team_run]",
324
364
  'command = "node"',
325
365
  `args = ["${teamServerPath}"]`,
326
- 'enabled = true',
327
- 'startup_timeout_sec = 5',
366
+ "enabled = true",
367
+ "startup_timeout_sec = 5",
328
368
  ...getAgentEntries(agentsConfigDir),
329
- '',
330
- '# OMX TUI StatusLine (Codex CLI v0.101.0+)',
331
- '[tui]',
369
+ "",
370
+ "# OMX TUI StatusLine (Codex CLI v0.101.0+)",
371
+ "[tui]",
332
372
  'status_line = ["model-with-reasoning", "git-branch", "context-remaining", "total-input-tokens", "total-output-tokens", "five-hour-limit"]',
333
- '',
334
- '# ============================================================',
335
- '# End oh-my-codex',
336
- '',
337
- ].join('\n');
373
+ "",
374
+ "# ============================================================",
375
+ "# End oh-my-codex",
376
+ "",
377
+ ].join("\n");
338
378
  }
339
379
  // ---------------------------------------------------------------------------
340
380
  // Public API
@@ -349,31 +389,34 @@ function getOmxTablesBlock(pkgRoot, agentsConfigDir) {
349
389
  * 3. … user sections …
350
390
  * 4. OMX [table] sections (mcp_servers, tui)
351
391
  */
352
- export async function mergeConfig(configPath, pkgRoot, options = {}) {
353
- let existing = '';
354
- if (existsSync(configPath)) {
355
- existing = await readFile(configPath, 'utf-8');
356
- }
357
- // Strip old OMX table-section block
358
- if (existing.includes('oh-my-codex (OMX) Configuration')) {
392
+ export function buildMergedConfig(existingConfig, pkgRoot, options = {}) {
393
+ let existing = existingConfig;
394
+ if (existing.includes("oh-my-codex (OMX) Configuration")) {
359
395
  const stripped = stripExistingOmxBlocks(existing);
360
396
  existing = stripped.cleaned;
361
- if (options.verbose && stripped.removed > 0) {
362
- console.log(' Updating existing OMX config block.');
363
- }
364
397
  }
365
- // Strip any stale OMX top-level keys (from previous runs or wrong positions)
366
398
  existing = stripOmxTopLevelKeys(existing);
367
- // Strip orphaned OMX table sections that may exist outside the marker block
368
- // (legacy configs, or configs where markers were accidentally removed)
399
+ if (options.modelOverride) {
400
+ existing = stripRootLevelKeys(existing, ["model"]);
401
+ }
369
402
  existing = stripOrphanedOmxSections(existing);
370
- // Upsert [features] flags
371
403
  existing = upsertFeatureFlags(existing);
372
- // Build final config:
373
- // top-level keys → existing content (with [features]) → OMX tables block
374
- const topLines = getOmxTopLevelLines(pkgRoot);
404
+ const topLines = getOmxTopLevelLines(pkgRoot, existing, options.modelOverride);
375
405
  const tablesBlock = getOmxTablesBlock(pkgRoot, options.agentsConfigDir || omxAgentsConfigDir());
376
- const finalConfig = topLines.join('\n') + '\n\n' + existing.trimEnd() + '\n' + tablesBlock;
406
+ return topLines.join("\n") + "\n\n" + existing.trimEnd() + "\n" + tablesBlock;
407
+ }
408
+ export async function mergeConfig(configPath, pkgRoot, options = {}) {
409
+ let existing = "";
410
+ if (existsSync(configPath)) {
411
+ existing = await readFile(configPath, "utf-8");
412
+ }
413
+ if (existing.includes("oh-my-codex (OMX) Configuration")) {
414
+ const stripped = stripExistingOmxBlocks(existing);
415
+ if (options.verbose && stripped.removed > 0) {
416
+ console.log(" Updating existing OMX config block.");
417
+ }
418
+ }
419
+ const finalConfig = buildMergedConfig(existing, pkgRoot, options);
377
420
  await writeFile(configPath, finalConfig);
378
421
  if (options.verbose) {
379
422
  console.log(` Written to ${configPath}`);