oh-my-codex 0.16.4 → 0.17.1

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 (278) hide show
  1. package/Cargo.lock +5 -5
  2. package/Cargo.toml +1 -1
  3. package/dist/catalog/__tests__/generator.test.js +2 -0
  4. package/dist/catalog/__tests__/generator.test.js.map +1 -1
  5. package/dist/cli/__tests__/doctor-warning-copy.test.js +80 -7
  6. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  7. package/dist/cli/__tests__/index.test.js +17 -11
  8. package/dist/cli/__tests__/index.test.js.map +1 -1
  9. package/dist/cli/__tests__/mcp-serve.test.js +4 -0
  10. package/dist/cli/__tests__/mcp-serve.test.js.map +1 -1
  11. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +3 -0
  12. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
  13. package/dist/cli/__tests__/ralph.test.js +0 -124
  14. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  15. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js +8 -3
  16. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js.map +1 -1
  17. package/dist/cli/__tests__/setup-install-mode.test.js +183 -4
  18. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  19. package/dist/cli/__tests__/setup-refresh.test.js +3 -3
  20. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  21. package/dist/cli/__tests__/team.test.js +166 -42
  22. package/dist/cli/__tests__/team.test.js.map +1 -1
  23. package/dist/cli/__tests__/ultragoal.test.js +22 -0
  24. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  25. package/dist/cli/doctor.d.ts.map +1 -1
  26. package/dist/cli/doctor.js +75 -14
  27. package/dist/cli/doctor.js.map +1 -1
  28. package/dist/cli/index.d.ts +8 -2
  29. package/dist/cli/index.d.ts.map +1 -1
  30. package/dist/cli/index.js +17 -7
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/cli/mcp-serve.d.ts.map +1 -1
  33. package/dist/cli/mcp-serve.js +4 -0
  34. package/dist/cli/mcp-serve.js.map +1 -1
  35. package/dist/cli/plugin-marketplace.d.ts +25 -1
  36. package/dist/cli/plugin-marketplace.d.ts.map +1 -1
  37. package/dist/cli/plugin-marketplace.js +146 -3
  38. package/dist/cli/plugin-marketplace.js.map +1 -1
  39. package/dist/cli/question.d.ts +1 -1
  40. package/dist/cli/question.d.ts.map +1 -1
  41. package/dist/cli/question.js +98 -4
  42. package/dist/cli/question.js.map +1 -1
  43. package/dist/cli/ralph.d.ts.map +1 -1
  44. package/dist/cli/ralph.js +1 -49
  45. package/dist/cli/ralph.js.map +1 -1
  46. package/dist/cli/setup.d.ts +1 -0
  47. package/dist/cli/setup.d.ts.map +1 -1
  48. package/dist/cli/setup.js +103 -18
  49. package/dist/cli/setup.js.map +1 -1
  50. package/dist/cli/team.d.ts.map +1 -1
  51. package/dist/cli/team.js +21 -29
  52. package/dist/cli/team.js.map +1 -1
  53. package/dist/cli/ultragoal.d.ts.map +1 -1
  54. package/dist/cli/ultragoal.js +7 -1
  55. package/dist/cli/ultragoal.js.map +1 -1
  56. package/dist/config/__tests__/codex-hooks.test.js +136 -9
  57. package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
  58. package/dist/config/__tests__/generator-idempotent.test.js +15 -0
  59. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  60. package/dist/config/codex-hooks.d.ts +13 -14
  61. package/dist/config/codex-hooks.d.ts.map +1 -1
  62. package/dist/config/codex-hooks.js +85 -7
  63. package/dist/config/codex-hooks.js.map +1 -1
  64. package/dist/config/generator.d.ts +8 -1
  65. package/dist/config/generator.d.ts.map +1 -1
  66. package/dist/config/generator.js +73 -9
  67. package/dist/config/generator.js.map +1 -1
  68. package/dist/config/omx-first-party-mcp.d.ts.map +1 -1
  69. package/dist/config/omx-first-party-mcp.js +7 -0
  70. package/dist/config/omx-first-party-mcp.js.map +1 -1
  71. package/dist/hooks/__tests__/agents-overlay.test.js +29 -0
  72. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  73. package/dist/hooks/__tests__/design-skill.test.d.ts +2 -0
  74. package/dist/hooks/__tests__/design-skill.test.d.ts.map +1 -0
  75. package/dist/hooks/__tests__/design-skill.test.js +55 -0
  76. package/dist/hooks/__tests__/design-skill.test.js.map +1 -0
  77. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +265 -0
  78. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
  79. package/dist/hooks/__tests__/session.test.js +126 -1
  80. package/dist/hooks/__tests__/session.test.js.map +1 -1
  81. package/dist/hooks/__tests__/skill-catalog-hygiene.test.js +1 -1
  82. package/dist/hooks/__tests__/skill-catalog-hygiene.test.js.map +1 -1
  83. package/dist/hooks/__tests__/skill-guidance-contract.test.js +41 -0
  84. package/dist/hooks/__tests__/skill-guidance-contract.test.js.map +1 -1
  85. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  86. package/dist/hooks/agents-overlay.js +6 -3
  87. package/dist/hooks/agents-overlay.js.map +1 -1
  88. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  89. package/dist/hooks/keyword-detector.js +5 -1
  90. package/dist/hooks/keyword-detector.js.map +1 -1
  91. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  92. package/dist/hooks/keyword-registry.js +2 -0
  93. package/dist/hooks/keyword-registry.js.map +1 -1
  94. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  95. package/dist/hooks/prompt-guidance-contract.js +47 -2
  96. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  97. package/dist/hooks/session.d.ts +11 -3
  98. package/dist/hooks/session.d.ts.map +1 -1
  99. package/dist/hooks/session.js +68 -6
  100. package/dist/hooks/session.js.map +1 -1
  101. package/dist/hud/__tests__/reconcile.test.js +63 -0
  102. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  103. package/dist/hud/__tests__/tmux.test.d.ts +2 -0
  104. package/dist/hud/__tests__/tmux.test.d.ts.map +1 -0
  105. package/dist/hud/__tests__/tmux.test.js +92 -0
  106. package/dist/hud/__tests__/tmux.test.js.map +1 -0
  107. package/dist/hud/reconcile.d.ts +2 -0
  108. package/dist/hud/reconcile.d.ts.map +1 -1
  109. package/dist/hud/reconcile.js +14 -1
  110. package/dist/hud/reconcile.js.map +1 -1
  111. package/dist/hud/tmux.d.ts +12 -0
  112. package/dist/hud/tmux.d.ts.map +1 -1
  113. package/dist/hud/tmux.js +88 -0
  114. package/dist/hud/tmux.js.map +1 -1
  115. package/dist/mcp/__tests__/bootstrap.test.js +3 -0
  116. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  117. package/dist/mcp/__tests__/hermes-bridge.test.d.ts +2 -0
  118. package/dist/mcp/__tests__/hermes-bridge.test.d.ts.map +1 -0
  119. package/dist/mcp/__tests__/hermes-bridge.test.js +441 -0
  120. package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -0
  121. package/dist/mcp/__tests__/state-paths.test.js +96 -13
  122. package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
  123. package/dist/mcp/bootstrap.d.ts +1 -1
  124. package/dist/mcp/bootstrap.d.ts.map +1 -1
  125. package/dist/mcp/bootstrap.js +2 -0
  126. package/dist/mcp/bootstrap.js.map +1 -1
  127. package/dist/mcp/hermes-bridge.d.ts +111 -0
  128. package/dist/mcp/hermes-bridge.d.ts.map +1 -0
  129. package/dist/mcp/hermes-bridge.js +474 -0
  130. package/dist/mcp/hermes-bridge.js.map +1 -0
  131. package/dist/mcp/hermes-server.d.ts +374 -0
  132. package/dist/mcp/hermes-server.d.ts.map +1 -0
  133. package/dist/mcp/hermes-server.js +158 -0
  134. package/dist/mcp/hermes-server.js.map +1 -0
  135. package/dist/mcp/state-paths.d.ts.map +1 -1
  136. package/dist/mcp/state-paths.js +41 -9
  137. package/dist/mcp/state-paths.js.map +1 -1
  138. package/dist/modes/__tests__/base-tmux-pane.test.js +31 -1
  139. package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
  140. package/dist/pipeline/__tests__/stages.test.js +18 -9
  141. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  142. package/dist/pipeline/stages/team-exec.d.ts.map +1 -1
  143. package/dist/pipeline/stages/team-exec.js +2 -7
  144. package/dist/pipeline/stages/team-exec.js.map +1 -1
  145. package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js +111 -269
  146. package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js.map +1 -1
  147. package/dist/planning/__tests__/approved-launch-hint-lineage-matrix.test.js +31 -72
  148. package/dist/planning/__tests__/approved-launch-hint-lineage-matrix.test.js.map +1 -1
  149. package/dist/planning/__tests__/artifacts.test.js +27 -372
  150. package/dist/planning/__tests__/artifacts.test.js.map +1 -1
  151. package/dist/planning/artifacts.d.ts +1 -14
  152. package/dist/planning/artifacts.d.ts.map +1 -1
  153. package/dist/planning/artifacts.js +11 -31
  154. package/dist/planning/artifacts.js.map +1 -1
  155. package/dist/question/__tests__/state.test.js +287 -1
  156. package/dist/question/__tests__/state.test.js.map +1 -1
  157. package/dist/question/__tests__/ui.test.js +8 -8
  158. package/dist/question/__tests__/ui.test.js.map +1 -1
  159. package/dist/question/events.d.ts +53 -0
  160. package/dist/question/events.d.ts.map +1 -0
  161. package/dist/question/events.js +201 -0
  162. package/dist/question/events.js.map +1 -0
  163. package/dist/question/state.d.ts +25 -1
  164. package/dist/question/state.d.ts.map +1 -1
  165. package/dist/question/state.js +259 -3
  166. package/dist/question/state.js.map +1 -1
  167. package/dist/question/types.d.ts +1 -0
  168. package/dist/question/types.d.ts.map +1 -1
  169. package/dist/question/types.js.map +1 -1
  170. package/dist/question/ui.d.ts.map +1 -1
  171. package/dist/question/ui.js +1 -18
  172. package/dist/question/ui.js.map +1 -1
  173. package/dist/ralph/__tests__/completion-audit.test.js +39 -0
  174. package/dist/ralph/__tests__/completion-audit.test.js.map +1 -1
  175. package/dist/scripts/__tests__/codex-native-hook.test.js +298 -3
  176. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  177. package/dist/scripts/__tests__/run-test-files.test.js +22 -0
  178. package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
  179. package/dist/scripts/codex-native-hook.d.ts +1 -0
  180. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  181. package/dist/scripts/codex-native-hook.js +137 -18
  182. package/dist/scripts/codex-native-hook.js.map +1 -1
  183. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  184. package/dist/scripts/codex-native-pre-post.js +12 -6
  185. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  186. package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
  187. package/dist/scripts/notify-hook/tmux-injection.js +91 -2
  188. package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
  189. package/dist/scripts/run-test-files.js +12 -1
  190. package/dist/scripts/run-test-files.js.map +1 -1
  191. package/dist/state/mode-state-context.d.ts +2 -0
  192. package/dist/state/mode-state-context.d.ts.map +1 -1
  193. package/dist/state/mode-state-context.js +21 -0
  194. package/dist/state/mode-state-context.js.map +1 -1
  195. package/dist/team/__tests__/approved-execution.test.js +25 -24
  196. package/dist/team/__tests__/approved-execution.test.js.map +1 -1
  197. package/dist/team/__tests__/runtime.test.js +173 -26
  198. package/dist/team/__tests__/runtime.test.js.map +1 -1
  199. package/dist/team/__tests__/scaling.test.js +66 -17
  200. package/dist/team/__tests__/scaling.test.js.map +1 -1
  201. package/dist/team/__tests__/tmux-session.test.js +42 -0
  202. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  203. package/dist/team/__tests__/worker-bootstrap.test.js +205 -0
  204. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  205. package/dist/team/approved-execution.d.ts +13 -0
  206. package/dist/team/approved-execution.d.ts.map +1 -1
  207. package/dist/team/approved-execution.js +65 -30
  208. package/dist/team/approved-execution.js.map +1 -1
  209. package/dist/team/runtime.d.ts.map +1 -1
  210. package/dist/team/runtime.js +28 -24
  211. package/dist/team/runtime.js.map +1 -1
  212. package/dist/team/scaling.d.ts.map +1 -1
  213. package/dist/team/scaling.js +7 -8
  214. package/dist/team/scaling.js.map +1 -1
  215. package/dist/team/tmux-session.d.ts.map +1 -1
  216. package/dist/team/tmux-session.js +48 -2
  217. package/dist/team/tmux-session.js.map +1 -1
  218. package/dist/team/ultragoal-context.d.ts +35 -0
  219. package/dist/team/ultragoal-context.d.ts.map +1 -0
  220. package/dist/team/ultragoal-context.js +191 -0
  221. package/dist/team/ultragoal-context.js.map +1 -0
  222. package/dist/ultragoal/__tests__/artifacts.test.js +121 -0
  223. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  224. package/dist/ultragoal/__tests__/docs-contract.test.js +19 -0
  225. package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
  226. package/dist/ultragoal/artifacts.d.ts +9 -1
  227. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  228. package/dist/ultragoal/artifacts.js +105 -3
  229. package/dist/ultragoal/artifacts.js.map +1 -1
  230. package/dist/utils/__tests__/paths.test.js +31 -1
  231. package/dist/utils/__tests__/paths.test.js.map +1 -1
  232. package/dist/utils/paths.d.ts +6 -0
  233. package/dist/utils/paths.d.ts.map +1 -1
  234. package/dist/utils/paths.js +18 -0
  235. package/dist/utils/paths.js.map +1 -1
  236. package/dist/wiki/lifecycle.js +3 -3
  237. package/dist/wiki/lifecycle.js.map +1 -1
  238. package/package.json +1 -1
  239. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  240. package/plugins/oh-my-codex/.mcp.json +8 -0
  241. package/plugins/oh-my-codex/skills/design/SKILL.md +180 -0
  242. package/plugins/oh-my-codex/skills/plan/SKILL.md +3 -3
  243. package/plugins/oh-my-codex/skills/ralph/SKILL.md +2 -2
  244. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +1 -1
  245. package/plugins/oh-my-codex/skills/skill/SKILL.md +2 -1
  246. package/plugins/oh-my-codex/skills/team/SKILL.md +6 -0
  247. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +11 -0
  248. package/plugins/oh-my-codex/skills/ultraqa/SKILL.md +161 -47
  249. package/plugins/oh-my-codex/skills/visual-ralph/SKILL.md +2 -2
  250. package/skills/design/SKILL.md +180 -0
  251. package/skills/frontend-ui-ux/SKILL.md +6 -2
  252. package/skills/plan/SKILL.md +3 -3
  253. package/skills/ralph/SKILL.md +2 -2
  254. package/skills/ralplan/SKILL.md +1 -1
  255. package/skills/skill/SKILL.md +2 -1
  256. package/skills/team/SKILL.md +6 -0
  257. package/skills/ultragoal/SKILL.md +11 -0
  258. package/skills/ultraqa/SKILL.md +161 -47
  259. package/skills/visual-ralph/SKILL.md +2 -2
  260. package/src/scripts/__tests__/codex-native-hook.test.ts +339 -2
  261. package/src/scripts/__tests__/run-test-files.test.ts +32 -0
  262. package/src/scripts/codex-native-hook.ts +166 -20
  263. package/src/scripts/codex-native-pre-post.ts +12 -6
  264. package/src/scripts/notify-hook/tmux-injection.ts +110 -3
  265. package/src/scripts/run-test-files.ts +13 -2
  266. package/templates/catalog-manifest.json +9 -2
  267. package/dist/planning/__tests__/context-pack-status.test.d.ts +0 -2
  268. package/dist/planning/__tests__/context-pack-status.test.d.ts.map +0 -1
  269. package/dist/planning/__tests__/context-pack-status.test.js +0 -795
  270. package/dist/planning/__tests__/context-pack-status.test.js.map +0 -1
  271. package/dist/planning/__tests__/ready-context-pack-role-refs.test.d.ts +0 -2
  272. package/dist/planning/__tests__/ready-context-pack-role-refs.test.d.ts.map +0 -1
  273. package/dist/planning/__tests__/ready-context-pack-role-refs.test.js +0 -612
  274. package/dist/planning/__tests__/ready-context-pack-role-refs.test.js.map +0 -1
  275. package/dist/planning/context-pack-status.d.ts +0 -73
  276. package/dist/planning/context-pack-status.d.ts.map +0 -1
  277. package/dist/planning/context-pack-status.js +0 -745
  278. package/dist/planning/context-pack-status.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
package/dist/cli/setup.js CHANGED
@@ -9,8 +9,8 @@ import { spawnSync } from "child_process";
9
9
  import { createInterface } from "readline/promises";
10
10
  import { homedir } from "os";
11
11
  import { codexHome, codexConfigPath, codexPromptsDir, codexAgentsDir, userSkillsDir, omxStateDir, detectLegacySkillRootOverlap, omxPlansDir, omxLogsDir, } from "../utils/paths.js";
12
- import { buildMergedConfig, getRootModelName, getRootTomlArray, hasLegacyOmxTeamRunTable, isOmxManagedNotifyCommand, sanitizePreviousNotifyCommand, stripExistingOmxBlocks, stripExistingSharedMcpRegistryBlock, mergeSharedMcpRegistryBlock, stripOmxEnvSettings, stripOmxFeatureFlags, stripOmxSeededBehavioralDefaults, upsertPluginModeRuntimeFeatureFlags, upsertManagedCodexHookTrustState, stripManagedCodexHookTrustState, OMX_PLUGIN_DEVELOPER_INSTRUCTIONS, } from "../config/generator.js";
13
- import { mergeManagedCodexHooksConfig } from "../config/codex-hooks.js";
12
+ import { buildMergedConfig, getRootModelName, getRootTomlArray, hasLegacyOmxTeamRunTable, isOmxManagedNotifyCommand, sanitizePreviousNotifyCommand, stripExistingOmxBlocks, stripExistingSharedMcpRegistryBlock, mergeSharedMcpRegistryBlock, stripOmxEnvSettings, stripOmxFeatureFlags, stripOmxSeededBehavioralDefaults, upsertPluginModeRuntimeFeatureFlags, upsertManagedCodexHookTrustState, stripManagedCodexHookTrustState, OMX_PLUGIN_DEVELOPER_INSTRUCTIONS, hasFirstPartyOmxMcpRegistrations, extractFirstPartyOmxMcpSections, stripFirstPartyOmxMcpSections, } from "../config/generator.js";
13
+ import { buildManagedCodexNativeHookWindowsShimContent, buildManagedCodexNativeHookWindowsShimPath, mergeManagedCodexHooksConfig, } from "../config/codex-hooks.js";
14
14
  import { getLegacyUnifiedMcpRegistryCandidate, getUnifiedMcpRegistryCandidates, loadUnifiedMcpRegistry, planClaudeCodeMcpSettingsSync, } from "../config/mcp-registry.js";
15
15
  import { generateAgentToml } from "../agents/native-config.js";
16
16
  import { AGENT_DEFINITIONS } from "../agents/definitions.js";
@@ -23,7 +23,7 @@ import { DEFAULT_FRONTIER_MODEL } from "../config/models.js";
23
23
  import { addGeneratedAgentsMarker, hasOmxManagedAgentsSections, isOmxGeneratedAgentsMd, upsertManagedAgentsBlock, } from "../utils/agents-md.js";
24
24
  import { DEFAULT_HUD_CONFIG } from "../hud/types.js";
25
25
  import { SETUP_INSTALL_MODES, SETUP_MCP_MODES, SETUP_SCOPES, getSetupScopeFilePath, readPersistedSetupPreferences, } from "./setup-preferences.js";
26
- import { OMX_LOCAL_MARKETPLACE_NAME, resolvePackagedOmxMarketplace, upsertLocalOmxMarketplaceRegistration, upsertLocalOmxPluginEnablement, upsertLocalOmxPluginMcpServerEnablement, } from "./plugin-marketplace.js";
26
+ import { OMX_LOCAL_MARKETPLACE_NAME, OMX_PLUGIN_NAME, materializePackagedOmxPluginCache, resolvePackagedOmxMarketplace, upsertLocalOmxMarketplaceRegistration, upsertLocalOmxPluginEnablement, upsertLocalOmxPluginMcpServerEnablement, hasLocalOmxPluginMcpServerRegistrations, } from "./plugin-marketplace.js";
27
27
  import { resolveCodexHookFeatureFlagForCli } from "./codex-feature-probe.js";
28
28
  async function resolveStatusLinePresetForSetup(projectRoot, options) {
29
29
  if (options.force) {
@@ -349,6 +349,28 @@ async function promptForSetupInstallMode(defaultMode) {
349
349
  rl.close();
350
350
  }
351
351
  }
352
+ async function promptForFirstPartyMcpRemoval(configPath, registrationKinds) {
353
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
354
+ return false;
355
+ }
356
+ const rl = createInterface({
357
+ input: process.stdin,
358
+ output: process.stdout,
359
+ });
360
+ try {
361
+ console.log("Deprecated first-party OMX MCP registration detected:");
362
+ console.log(` ${configPath}`);
363
+ console.log(` ${registrationKinds.join(", ")}`);
364
+ console.log(" OMX is CLI-first by default now; first-party MCP compatibility is legacy/explicit.");
365
+ const answer = (await rl.question("Remove first-party OMX MCP registrations now? [y/N]: "))
366
+ .trim()
367
+ .toLowerCase();
368
+ return answer === "y" || answer === "yes";
369
+ }
370
+ finally {
371
+ rl.close();
372
+ }
373
+ }
352
374
  function hasPersistedSetupPreferences(preferences) {
353
375
  return Boolean(preferences?.scope || preferences?.installMode);
354
376
  }
@@ -585,7 +607,7 @@ async function discoverOmxPluginCacheDirs(cacheRoot = join(codexHome(), "plugins
585
607
  async function discoverOmxPluginCacheDir(cacheRoot = join(codexHome(), "plugins", "cache")) {
586
608
  return (await discoverOmxPluginCacheDirs(cacheRoot))[0] ?? null;
587
609
  }
588
- async function refreshOmxPluginDiscoveryCache(pkgRoot, options) {
610
+ async function refreshOmxPluginDiscoveryCache(pkgRoot, options, codexHomeDir = codexHome()) {
589
611
  const packagedMarketplace = await resolvePackagedOmxMarketplace(pkgRoot);
590
612
  if (!packagedMarketplace) {
591
613
  return { status: "unavailable", staleDirs: [] };
@@ -593,7 +615,7 @@ async function refreshOmxPluginDiscoveryCache(pkgRoot, options) {
593
615
  const [pkg, expectedSkillNames, cachedDirs] = await Promise.all([
594
616
  readFile(join(pkgRoot, "package.json"), "utf-8").then((raw) => JSON.parse(raw)),
595
617
  listChildDirectoryNames(join(packagedMarketplace.pluginRoot, "skills")),
596
- discoverOmxPluginCacheDirs(),
618
+ discoverOmxPluginCacheDirs(join(codexHomeDir, "plugins", "cache")),
597
619
  ]);
598
620
  const expectedVersion = typeof pkg.version === "string" ? pkg.version : null;
599
621
  const staleDirs = [];
@@ -902,7 +924,7 @@ function insertRootTomlKey(config, line) {
902
924
  const after = lines.slice(firstTableIndex);
903
925
  return [...before, line, "", ...after].join("\n") + "\n";
904
926
  }
905
- async function ensurePluginMarketplaceRegistration(configPath, pkgRoot, mcpMode, backupContext, summary, options) {
927
+ async function ensurePluginMarketplaceRegistration(configPath, pkgRoot, mcpMode, removeFirstPartyMcp, backupContext, summary, options) {
906
928
  const packagedMarketplace = await resolvePackagedOmxMarketplace(pkgRoot);
907
929
  if (!packagedMarketplace) {
908
930
  summary.skipped += 1;
@@ -911,7 +933,7 @@ async function ensurePluginMarketplaceRegistration(configPath, pkgRoot, mcpMode,
911
933
  const existingConfig = existsSync(configPath)
912
934
  ? await readFile(configPath, "utf-8")
913
935
  : "";
914
- const nextConfig = upsertLocalOmxMarketplaceRegistration(upsertLocalOmxPluginMcpServerEnablement(upsertLocalOmxPluginEnablement(existingConfig), mcpMode === "compat"), pkgRoot);
936
+ const nextConfig = upsertLocalOmxMarketplaceRegistration(upsertLocalOmxPluginMcpServerEnablement(upsertLocalOmxPluginEnablement(existingConfig), mcpMode === "compat", { removeWhenDisabled: removeFirstPartyMcp }), pkgRoot);
915
937
  const destinationExists = existsSync(configPath);
916
938
  if (nextConfig === existingConfig) {
917
939
  summary.unchanged += 1;
@@ -930,11 +952,11 @@ async function ensurePluginMarketplaceRegistration(configPath, pkgRoot, mcpMode,
930
952
  }
931
953
  return "updated";
932
954
  }
933
- async function applyPluginModeHooksConfig(configPath, hooksPath, pkgRoot, backupContext, summary, options) {
955
+ async function applyPluginModeHooksConfig(configPath, hooksPath, pkgRoot, codexHomeDir, backupContext, summary, options) {
934
956
  const existingConfig = existsSync(configPath)
935
957
  ? await readFile(configPath, "utf-8")
936
958
  : "";
937
- const nextConfig = upsertManagedCodexHookTrustState(upsertPluginModeRuntimeFeatureFlags(stripManagedCodexHookTrustState(existingConfig), options.codexHookFeatureFlag), pkgRoot, hooksPath);
959
+ const nextConfig = upsertManagedCodexHookTrustState(upsertPluginModeRuntimeFeatureFlags(stripManagedCodexHookTrustState(existingConfig), options.codexHookFeatureFlag), pkgRoot, hooksPath, { platform: process.platform, codexHomeDir });
938
960
  if (nextConfig !== existingConfig) {
939
961
  if (await ensureBackup(configPath, existsSync(configPath), backupContext, options)) {
940
962
  summary.backedUp += 1;
@@ -951,8 +973,9 @@ async function applyPluginModeHooksConfig(configPath, hooksPath, pkgRoot, backup
951
973
  const existingHooksContent = existsSync(hooksPath)
952
974
  ? await readFile(hooksPath, "utf-8")
953
975
  : null;
954
- const hooksConfig = mergeManagedCodexHooksConfig(existingHooksContent, pkgRoot, hooksPath);
976
+ const hooksConfig = mergeManagedCodexHooksConfig(existingHooksContent, pkgRoot, hooksPath, { platform: process.platform, codexHomeDir });
955
977
  await syncManagedContent(hooksConfig, hooksPath, summary, backupContext, options, `native hooks ${hooksPath}`);
978
+ await syncManagedWindowsNativeHookShim(codexHomeDir, pkgRoot, summary, backupContext, options);
956
979
  if (options.verbose) {
957
980
  console.log(` ${options.dryRun ? "would configure" : "configured"} plugin-mode native hooks and runtime feature flags at ${hooksPath}`);
958
981
  }
@@ -996,7 +1019,11 @@ async function cleanupPluginModeLegacyConfig(configPath, backupContext, options)
996
1019
  if (!existsSync(configPath))
997
1020
  return false;
998
1021
  const original = await readFile(configPath, "utf-8");
1022
+ const preservedFirstPartyMcp = options.preserveFirstPartyMcp
1023
+ ? extractFirstPartyOmxMcpSections(original)
1024
+ : "";
999
1025
  let config = original;
1026
+ config = stripFirstPartyOmxMcpSections(config);
1000
1027
  config = stripExistingOmxBlocks(config).cleaned;
1001
1028
  config = stripExistingSharedMcpRegistryBlock(config).cleaned;
1002
1029
  config = stripPluginModeLegacyRootDefaults(config);
@@ -1004,6 +1031,9 @@ async function cleanupPluginModeLegacyConfig(configPath, backupContext, options)
1004
1031
  config = stripOmxFeatureFlags(config);
1005
1032
  config = stripManagedCodexHookTrustState(config);
1006
1033
  config = stripOmxEnvSettings(config);
1034
+ if (preservedFirstPartyMcp) {
1035
+ config = `${config.trimEnd()}\n\n${preservedFirstPartyMcp}\n`;
1036
+ }
1007
1037
  config = config.trim();
1008
1038
  const nextConfig = config.length > 0 ? `${config}\n` : "";
1009
1039
  if (nextConfig === original)
@@ -1042,7 +1072,7 @@ async function cleanupPluginModeLegacyAgentsMd(agentsMdPath, backupContext, opti
1042
1072
  return true;
1043
1073
  }
1044
1074
  export async function setup(options = {}) {
1045
- const { force = false, dryRun = false, installMode: requestedInstallMode, mcpMode: requestedMcpMode, scope: requestedScope, verbose = false, setupScopePrompt, persistedSetupReviewPrompt, installModePrompt, modelUpgradePrompt, pluginAgentsMdPrompt, pluginDeveloperInstructionsPrompt, pluginDeveloperInstructionsOverwritePrompt, } = options;
1075
+ const { force = false, dryRun = false, installMode: requestedInstallMode, mcpMode: requestedMcpMode, scope: requestedScope, verbose = false, setupScopePrompt, persistedSetupReviewPrompt, installModePrompt, modelUpgradePrompt, pluginAgentsMdPrompt, pluginDeveloperInstructionsPrompt, pluginDeveloperInstructionsOverwritePrompt, firstPartyMcpRemovalPrompt, } = options;
1046
1076
  const pkgRoot = getPackageRoot();
1047
1077
  const projectRoot = process.cwd();
1048
1078
  const persistedPreferences = await readPersistedSetupPreferences(projectRoot, { warnOnLegacyScope: true });
@@ -1071,6 +1101,29 @@ export async function setup(options = {}) {
1071
1101
  const resolvedInstallMode = await resolveSetupInstallMode(projectRoot, resolvedScope.scope, requestedInstallMode, installModePrompt, persistedReviewDecision, persistedPreferences);
1072
1102
  const resolvedMcpMode = resolveSetupMcpMode(resolvedScope.scope, requestedMcpMode, persistedReviewDecision, persistedPreferences);
1073
1103
  const scopeDirs = resolveScopeDirectories(resolvedScope.scope, projectRoot);
1104
+ const existingConfigForMcpMigration = existsSync(scopeDirs.codexConfigFile)
1105
+ ? await readFile(scopeDirs.codexConfigFile, "utf-8")
1106
+ : "";
1107
+ const firstPartyMcpRegistrationKinds = [
1108
+ hasFirstPartyOmxMcpRegistrations(existingConfigForMcpMigration)
1109
+ ? "config.toml [mcp_servers.omx_*]"
1110
+ : null,
1111
+ hasLocalOmxPluginMcpServerRegistrations(existingConfigForMcpMigration)
1112
+ ? "plugin mcp_servers overrides"
1113
+ : null,
1114
+ ].filter((kind) => typeof kind === "string");
1115
+ let removeFirstPartyMcpRegistrations = false;
1116
+ const shouldOfferFirstPartyMcpRemoval = resolvedMcpMode.mcpMode !== "compat" &&
1117
+ firstPartyMcpRegistrationKinds.length > 0;
1118
+ if (shouldOfferFirstPartyMcpRemoval) {
1119
+ const canPrompt = typeof firstPartyMcpRemovalPrompt === "function" ||
1120
+ (process.stdin.isTTY && process.stdout.isTTY);
1121
+ if (canPrompt) {
1122
+ removeFirstPartyMcpRegistrations = firstPartyMcpRemovalPrompt
1123
+ ? await firstPartyMcpRemovalPrompt(scopeDirs.codexConfigFile, firstPartyMcpRegistrationKinds)
1124
+ : await promptForFirstPartyMcpRemoval(scopeDirs.codexConfigFile, firstPartyMcpRegistrationKinds);
1125
+ }
1126
+ }
1074
1127
  const scopeSourceMessage = resolvedScope.source === "persisted" ? " (from .omx/setup-scope.json)" : "";
1075
1128
  const backupContext = getBackupContext(resolvedScope.scope, projectRoot);
1076
1129
  const isPluginInstallMode = resolvedInstallMode?.installMode === "plugin";
@@ -1100,6 +1153,14 @@ export async function setup(options = {}) {
1100
1153
  ? " (from .omx/setup-scope.json)"
1101
1154
  : "";
1102
1155
  console.log(`Using setup MCP mode: ${resolvedMcpMode.mcpMode}${mcpModeSourceMessage}\n`);
1156
+ if (shouldOfferFirstPartyMcpRemoval) {
1157
+ if (removeFirstPartyMcpRegistrations) {
1158
+ console.log("Deprecated first-party OMX MCP registrations will be removed from config.toml during this setup run.\n");
1159
+ }
1160
+ else {
1161
+ console.log("warning: deprecated first-party OMX MCP registrations were detected but preserved. OMX supports CLI-first setup by default; rerun interactively and answer yes to remove them, or use --mcp compat only when explicit MCP compatibility is required.\n");
1162
+ }
1163
+ }
1103
1164
  // Step 1: Ensure directories exist
1104
1165
  console.log("[1/8] Creating directories...");
1105
1166
  const dirs = isPluginInstallMode
@@ -1269,14 +1330,19 @@ export async function setup(options = {}) {
1269
1330
  console.log(` warning: ${warning}`);
1270
1331
  }
1271
1332
  if (isPluginInstallMode) {
1272
- const configCleaned = await cleanupPluginModeLegacyConfig(scopeDirs.codexConfigFile, backupContext, { dryRun, verbose });
1333
+ const configCleaned = await cleanupPluginModeLegacyConfig(scopeDirs.codexConfigFile, backupContext, {
1334
+ dryRun,
1335
+ verbose,
1336
+ preserveFirstPartyMcp: shouldOfferFirstPartyMcpRemoval &&
1337
+ !removeFirstPartyMcpRegistrations,
1338
+ });
1273
1339
  if (configCleaned)
1274
1340
  summary.config.removed += 1;
1275
1341
  console.log(configCleaned
1276
1342
  ? ` ${dryRun ? "Would clean" : "Cleaned"} legacy OMX config entries for plugin mode.\n`
1277
1343
  : " Config refresh skipped; no legacy OMX config entries found.\n");
1278
- await applyPluginModeHooksConfig(scopeDirs.codexConfigFile, scopeDirs.codexHooksFile, pkgRoot, backupContext, summary.config, { dryRun, verbose, codexHookFeatureFlag });
1279
- const pluginMarketplaceResult = await ensurePluginMarketplaceRegistration(scopeDirs.codexConfigFile, pkgRoot, resolvedMcpMode.mcpMode, backupContext, summary.config, { dryRun, verbose });
1344
+ await applyPluginModeHooksConfig(scopeDirs.codexConfigFile, scopeDirs.codexHooksFile, pkgRoot, scopeDirs.codexHomeDir, backupContext, summary.config, { dryRun, verbose, codexHookFeatureFlag });
1345
+ const pluginMarketplaceResult = await ensurePluginMarketplaceRegistration(scopeDirs.codexConfigFile, pkgRoot, resolvedMcpMode.mcpMode, removeFirstPartyMcpRegistrations, backupContext, summary.config, { dryRun, verbose });
1280
1346
  if (pluginMarketplaceResult === "unavailable") {
1281
1347
  console.log(` warning: packaged ${OMX_LOCAL_MARKETPLACE_NAME} Codex plugin marketplace metadata not found; /skills plugin discovery was not registered.`);
1282
1348
  }
@@ -1286,16 +1352,24 @@ export async function setup(options = {}) {
1286
1352
  else {
1287
1353
  console.log(` Local Codex plugin marketplace ${OMX_LOCAL_MARKETPLACE_NAME} already registered (${pkgRoot}).`);
1288
1354
  }
1355
+ const packagedMarketplace = await resolvePackagedOmxMarketplace(pkgRoot);
1289
1356
  const pluginCacheRefresh = await refreshOmxPluginDiscoveryCache(pkgRoot, {
1290
1357
  dryRun,
1291
1358
  verbose,
1292
- });
1359
+ }, scopeDirs.codexHomeDir);
1293
1360
  if (pluginCacheRefresh.status === "refreshed") {
1294
1361
  console.log(` ${dryRun ? "Would invalidate" : "Invalidated"} ${pluginCacheRefresh.staleDirs.length} stale Codex plugin discovery cache entr${pluginCacheRefresh.staleDirs.length === 1 ? "y" : "ies"} so plugin skills refresh from the packaged manifest.`);
1295
1362
  }
1296
1363
  else if (pluginCacheRefresh.status === "unchanged") {
1297
1364
  console.log(" Codex plugin discovery cache already matches packaged plugin metadata.");
1298
1365
  }
1366
+ const pluginCacheMaterialize = await materializePackagedOmxPluginCache(scopeDirs.codexHomeDir, packagedMarketplace, { dryRun });
1367
+ if (pluginCacheMaterialize.status === "materialized") {
1368
+ console.log(` ${dryRun ? "Would install" : "Installed"} local Codex plugin cache for ${OMX_LOCAL_MARKETPLACE_NAME}/${OMX_PLUGIN_NAME} at ${pluginCacheMaterialize.cacheDir}.`);
1369
+ }
1370
+ else if (pluginCacheMaterialize.status === "unchanged") {
1371
+ console.log(" Local Codex plugin cache already exposes packaged OMX skills.");
1372
+ }
1299
1373
  if (shouldSyncSharedMcpRegistry) {
1300
1374
  resolvedConfig = await syncSharedMcpRegistryIntoConfig(scopeDirs.codexConfigFile, sharedMcpRegistry, summary.config, backupContext, { dryRun, verbose });
1301
1375
  if (resolvedScope.scope === "user") {
@@ -1328,7 +1402,7 @@ export async function setup(options = {}) {
1328
1402
  }
1329
1403
  else {
1330
1404
  const statusLinePreset = await resolveStatusLinePresetForSetup(projectRoot, { force });
1331
- const managedConfig = await updateManagedConfig(scopeDirs.codexConfigFile, scopeDirs.codexHooksFile, pkgRoot, sharedMcpRegistry, resolvedMcpMode.mcpMode, resolvedScope.scope, scopeDirs.codexHomeDir, summary.config, backupContext, {
1405
+ const managedConfig = await updateManagedConfig(scopeDirs.codexConfigFile, scopeDirs.codexHooksFile, pkgRoot, sharedMcpRegistry, resolvedMcpMode.mcpMode, shouldOfferFirstPartyMcpRemoval && !removeFirstPartyMcpRegistrations, resolvedScope.scope, scopeDirs.codexHomeDir, summary.config, backupContext, {
1332
1406
  dryRun,
1333
1407
  modelUpgradePrompt,
1334
1408
  verbose,
@@ -1348,8 +1422,9 @@ export async function setup(options = {}) {
1348
1422
  const existingHooksContent = existsSync(scopeDirs.codexHooksFile)
1349
1423
  ? await readFile(scopeDirs.codexHooksFile, "utf-8")
1350
1424
  : null;
1351
- const hooksConfig = mergeManagedCodexHooksConfig(existingHooksContent, pkgRoot);
1425
+ const hooksConfig = mergeManagedCodexHooksConfig(existingHooksContent, pkgRoot, scopeDirs.codexHooksFile, { platform: process.platform, codexHomeDir: scopeDirs.codexHomeDir });
1352
1426
  await syncManagedContent(hooksConfig, scopeDirs.codexHooksFile, summary.config, backupContext, { dryRun, verbose }, `native hooks ${scopeDirs.codexHooksFile}`);
1427
+ await syncManagedWindowsNativeHookShim(scopeDirs.codexHomeDir, pkgRoot, summary.config, backupContext, { dryRun, verbose });
1353
1428
  console.log(` Native Codex hooks refresh complete (${scopeDirs.codexHooksFile}).\n`);
1354
1429
  }
1355
1430
  // Step 5.5: Verify team CLI interop surface is available.
@@ -1656,6 +1731,13 @@ async function syncManagedContent(content, dstPath, summary, backupContext, opti
1656
1731
  console.log(` ${options.dryRun ? "would update" : "updated"} ${verboseLabel}`);
1657
1732
  }
1658
1733
  }
1734
+ async function syncManagedWindowsNativeHookShim(codexHomeDir, pkgRoot, summary, backupContext, options) {
1735
+ if (process.platform !== "win32")
1736
+ return;
1737
+ const shimPath = buildManagedCodexNativeHookWindowsShimPath(codexHomeDir);
1738
+ const shimContent = buildManagedCodexNativeHookWindowsShimContent(pkgRoot);
1739
+ await syncManagedContent(shimContent, shimPath, summary, backupContext, options, `native hook Windows shim ${shimPath}`);
1740
+ }
1659
1741
  async function syncManagedAgentsContent(content, dstPath, summary, backupContext, options) {
1660
1742
  const destinationExists = existsSync(dstPath);
1661
1743
  let existing = "";
@@ -2133,7 +2215,7 @@ async function buildNotifyMergePlan(existingConfig, pkgRoot, codexHomeDir, scope
2133
2215
  },
2134
2216
  };
2135
2217
  }
2136
- async function updateManagedConfig(configPath, hooksPath, pkgRoot, sharedMcpRegistry, mcpMode, scope, codexHomeDir, summary, backupContext, options) {
2218
+ async function updateManagedConfig(configPath, hooksPath, pkgRoot, sharedMcpRegistry, mcpMode, preserveExistingFirstPartyMcp, scope, codexHomeDir, summary, backupContext, options) {
2137
2219
  const existing = existsSync(configPath)
2138
2220
  ? await readFile(configPath, "utf-8")
2139
2221
  : "";
@@ -2157,6 +2239,8 @@ async function updateManagedConfig(configPath, hooksPath, pkgRoot, sharedMcpRegi
2157
2239
  const finalConfig = buildMergedConfig(existing, pkgRoot, {
2158
2240
  includeTui: omxManagesTui,
2159
2241
  codexHooksFile: hooksPath,
2242
+ codexHomeDir,
2243
+ hookCommandPlatform: process.platform,
2160
2244
  codexHookFeatureFlag: options.codexHookFeatureFlag,
2161
2245
  modelOverride,
2162
2246
  sharedMcpServers: sharedMcpRegistry.servers,
@@ -2166,6 +2250,7 @@ async function updateManagedConfig(configPath, hooksPath, pkgRoot, sharedMcpRegi
2166
2250
  forceStatusLinePreset: options.forceStatusLinePreset,
2167
2251
  notifyCommand: notifyPlan.notifyCommand,
2168
2252
  includeFirstPartyMcp: mcpMode === "compat",
2253
+ preserveExistingFirstPartyMcp,
2169
2254
  });
2170
2255
  const changed = existing !== finalConfig;
2171
2256
  if (!changed) {