oh-my-codex 0.12.3 → 0.12.5

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 (335) hide show
  1. package/Cargo.lock +5 -5
  2. package/Cargo.toml +1 -1
  3. package/README.md +12 -3
  4. package/dist/cli/__tests__/doctor-warning-copy.test.js +28 -0
  5. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  6. package/dist/cli/__tests__/index.test.js +117 -16
  7. package/dist/cli/__tests__/index.test.js.map +1 -1
  8. package/dist/cli/__tests__/launch-fallback.test.js +8 -27
  9. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  10. package/dist/cli/__tests__/mcp-parity.test.d.ts +2 -0
  11. package/dist/cli/__tests__/mcp-parity.test.d.ts.map +1 -0
  12. package/dist/cli/__tests__/mcp-parity.test.js +111 -0
  13. package/dist/cli/__tests__/mcp-parity.test.js.map +1 -0
  14. package/dist/cli/__tests__/nested-help-routing.test.js +13 -0
  15. package/dist/cli/__tests__/nested-help-routing.test.js.map +1 -1
  16. package/dist/cli/__tests__/package-bin-contract.test.js +6 -1
  17. package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
  18. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.d.ts +2 -0
  19. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.d.ts.map +1 -0
  20. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js +189 -0
  21. package/dist/cli/__tests__/setup-hooks-shared-ownership.test.js.map +1 -0
  22. package/dist/cli/__tests__/setup-refresh.test.js +40 -0
  23. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  24. package/dist/cli/__tests__/setup-scope.test.js +48 -0
  25. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  26. package/dist/cli/__tests__/state.test.d.ts +2 -0
  27. package/dist/cli/__tests__/state.test.d.ts.map +1 -0
  28. package/dist/cli/__tests__/state.test.js +46 -0
  29. package/dist/cli/__tests__/state.test.js.map +1 -0
  30. package/dist/cli/__tests__/team.test.js +294 -5
  31. package/dist/cli/__tests__/team.test.js.map +1 -1
  32. package/dist/cli/__tests__/uninstall.test.js +37 -2
  33. package/dist/cli/__tests__/uninstall.test.js.map +1 -1
  34. package/dist/cli/doctor.d.ts.map +1 -1
  35. package/dist/cli/doctor.js +15 -0
  36. package/dist/cli/doctor.js.map +1 -1
  37. package/dist/cli/explore.d.ts.map +1 -1
  38. package/dist/cli/explore.js +4 -0
  39. package/dist/cli/explore.js.map +1 -1
  40. package/dist/cli/index.d.ts +7 -13
  41. package/dist/cli/index.d.ts.map +1 -1
  42. package/dist/cli/index.js +71 -64
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/cli/mcp-parity.d.ts +22 -0
  45. package/dist/cli/mcp-parity.d.ts.map +1 -0
  46. package/dist/cli/mcp-parity.js +227 -0
  47. package/dist/cli/mcp-parity.js.map +1 -0
  48. package/dist/cli/setup.d.ts.map +1 -1
  49. package/dist/cli/setup.js +20 -5
  50. package/dist/cli/setup.js.map +1 -1
  51. package/dist/cli/state.d.ts +8 -0
  52. package/dist/cli/state.d.ts.map +1 -0
  53. package/dist/cli/state.js +71 -0
  54. package/dist/cli/state.js.map +1 -0
  55. package/dist/cli/team.d.ts.map +1 -1
  56. package/dist/cli/team.js +45 -10
  57. package/dist/cli/team.js.map +1 -1
  58. package/dist/cli/uninstall.d.ts.map +1 -1
  59. package/dist/cli/uninstall.js +18 -4
  60. package/dist/cli/uninstall.js.map +1 -1
  61. package/dist/config/__tests__/codex-hooks.test.d.ts +2 -0
  62. package/dist/config/__tests__/codex-hooks.test.d.ts.map +1 -0
  63. package/dist/config/__tests__/codex-hooks.test.js +53 -0
  64. package/dist/config/__tests__/codex-hooks.test.js.map +1 -0
  65. package/dist/config/__tests__/generator-idempotent.test.js +59 -0
  66. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  67. package/dist/config/codex-hooks.d.ts +16 -7
  68. package/dist/config/codex-hooks.d.ts.map +1 -1
  69. package/dist/config/codex-hooks.js +134 -2
  70. package/dist/config/codex-hooks.js.map +1 -1
  71. package/dist/config/generator.d.ts +1 -0
  72. package/dist/config/generator.d.ts.map +1 -1
  73. package/dist/config/generator.js +80 -3
  74. package/dist/config/generator.js.map +1 -1
  75. package/dist/hooks/__tests__/agents-overlay.test.js +21 -0
  76. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  77. package/dist/hooks/__tests__/keyword-detector.test.js +228 -4
  78. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  79. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +252 -21
  80. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  81. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +131 -67
  82. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
  83. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +27 -1
  84. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
  85. package/dist/hooks/__tests__/notify-hook-modules.test.js +52 -12
  86. package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
  87. package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts +2 -3
  88. package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts.map +1 -1
  89. package/dist/hooks/__tests__/notify-hook-regression-205.test.js +18 -23
  90. package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
  91. package/dist/hooks/__tests__/notify-hook-session-scope.test.js +33 -0
  92. package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
  93. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +162 -7
  94. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  95. package/dist/hooks/__tests__/session.test.js +101 -1
  96. package/dist/hooks/__tests__/session.test.js.map +1 -1
  97. package/dist/hooks/extensibility/__tests__/runtime.test.js +31 -0
  98. package/dist/hooks/extensibility/__tests__/runtime.test.js.map +1 -1
  99. package/dist/hooks/extensibility/types.d.ts +1 -0
  100. package/dist/hooks/extensibility/types.d.ts.map +1 -1
  101. package/dist/hooks/keyword-detector.d.ts +6 -1
  102. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  103. package/dist/hooks/keyword-detector.js +171 -5
  104. package/dist/hooks/keyword-detector.js.map +1 -1
  105. package/dist/hooks/session.d.ts +14 -2
  106. package/dist/hooks/session.d.ts.map +1 -1
  107. package/dist/hooks/session.js +96 -14
  108. package/dist/hooks/session.js.map +1 -1
  109. package/dist/hud/__tests__/reconcile.test.d.ts +2 -0
  110. package/dist/hud/__tests__/reconcile.test.d.ts.map +1 -0
  111. package/dist/hud/__tests__/reconcile.test.js +83 -0
  112. package/dist/hud/__tests__/reconcile.test.js.map +1 -0
  113. package/dist/hud/__tests__/render.test.js +43 -0
  114. package/dist/hud/__tests__/render.test.js.map +1 -1
  115. package/dist/hud/__tests__/state.test.js +84 -2
  116. package/dist/hud/__tests__/state.test.js.map +1 -1
  117. package/dist/hud/constants.d.ts +2 -1
  118. package/dist/hud/constants.d.ts.map +1 -1
  119. package/dist/hud/constants.js +2 -1
  120. package/dist/hud/constants.js.map +1 -1
  121. package/dist/hud/index.d.ts +4 -1
  122. package/dist/hud/index.d.ts.map +1 -1
  123. package/dist/hud/index.js +11 -5
  124. package/dist/hud/index.js.map +1 -1
  125. package/dist/hud/reconcile.d.ts +23 -0
  126. package/dist/hud/reconcile.d.ts.map +1 -0
  127. package/dist/hud/reconcile.js +71 -0
  128. package/dist/hud/reconcile.js.map +1 -0
  129. package/dist/hud/render.d.ts +6 -1
  130. package/dist/hud/render.d.ts.map +1 -1
  131. package/dist/hud/render.js +77 -3
  132. package/dist/hud/render.js.map +1 -1
  133. package/dist/hud/state.d.ts.map +1 -1
  134. package/dist/hud/state.js +15 -20
  135. package/dist/hud/state.js.map +1 -1
  136. package/dist/hud/tmux.d.ts +26 -0
  137. package/dist/hud/tmux.d.ts.map +1 -0
  138. package/dist/hud/tmux.js +126 -0
  139. package/dist/hud/tmux.js.map +1 -0
  140. package/dist/mcp/__tests__/bootstrap.test.js +24 -1
  141. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  142. package/dist/mcp/__tests__/server-lifecycle.test.js +3 -0
  143. package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
  144. package/dist/mcp/__tests__/state-paths.test.js +30 -2
  145. package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
  146. package/dist/mcp/__tests__/state-server.test.js +384 -0
  147. package/dist/mcp/__tests__/state-server.test.js.map +1 -1
  148. package/dist/mcp/bootstrap.d.ts +1 -0
  149. package/dist/mcp/bootstrap.d.ts.map +1 -1
  150. package/dist/mcp/bootstrap.js +43 -6
  151. package/dist/mcp/bootstrap.js.map +1 -1
  152. package/dist/mcp/code-intel-server.d.ts +298 -0
  153. package/dist/mcp/code-intel-server.d.ts.map +1 -1
  154. package/dist/mcp/code-intel-server.js +9 -5
  155. package/dist/mcp/code-intel-server.js.map +1 -1
  156. package/dist/mcp/memory-server.d.ts +195 -1
  157. package/dist/mcp/memory-server.d.ts.map +1 -1
  158. package/dist/mcp/memory-server.js +9 -5
  159. package/dist/mcp/memory-server.js.map +1 -1
  160. package/dist/mcp/state-paths.d.ts +5 -0
  161. package/dist/mcp/state-paths.d.ts.map +1 -1
  162. package/dist/mcp/state-paths.js +41 -11
  163. package/dist/mcp/state-paths.js.map +1 -1
  164. package/dist/mcp/state-server.d.ts +4 -4
  165. package/dist/mcp/state-server.d.ts.map +1 -1
  166. package/dist/mcp/state-server.js +43 -1
  167. package/dist/mcp/state-server.js.map +1 -1
  168. package/dist/mcp/trace-server.d.ts +51 -0
  169. package/dist/mcp/trace-server.d.ts.map +1 -1
  170. package/dist/mcp/trace-server.js +9 -5
  171. package/dist/mcp/trace-server.js.map +1 -1
  172. package/dist/modes/__tests__/base-autoresearch-contract.test.js +52 -1
  173. package/dist/modes/__tests__/base-autoresearch-contract.test.js.map +1 -1
  174. package/dist/modes/__tests__/base-multi-state-compat.test.d.ts +2 -0
  175. package/dist/modes/__tests__/base-multi-state-compat.test.d.ts.map +1 -0
  176. package/dist/modes/__tests__/base-multi-state-compat.test.js +38 -0
  177. package/dist/modes/__tests__/base-multi-state-compat.test.js.map +1 -0
  178. package/dist/modes/__tests__/base-tmux-pane.test.js +1 -1
  179. package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
  180. package/dist/modes/base.d.ts +2 -1
  181. package/dist/modes/base.d.ts.map +1 -1
  182. package/dist/modes/base.js +45 -31
  183. package/dist/modes/base.js.map +1 -1
  184. package/dist/notifications/__tests__/reply-listener.test.js +19 -0
  185. package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
  186. package/dist/notifications/reply-listener.d.ts +8 -1
  187. package/dist/notifications/reply-listener.d.ts.map +1 -1
  188. package/dist/notifications/reply-listener.js +7 -5
  189. package/dist/notifications/reply-listener.js.map +1 -1
  190. package/dist/scripts/__tests__/codex-native-hook.test.js +868 -38
  191. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  192. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  193. package/dist/scripts/codex-native-hook.js +305 -94
  194. package/dist/scripts/codex-native-hook.js.map +1 -1
  195. package/dist/scripts/codex-native-pre-post.d.ts +5 -0
  196. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  197. package/dist/scripts/codex-native-pre-post.js +86 -0
  198. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  199. package/dist/scripts/notify-fallback-watcher.js +68 -19
  200. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  201. package/dist/scripts/notify-hook/active-team.d.ts +9 -0
  202. package/dist/scripts/notify-hook/active-team.d.ts.map +1 -0
  203. package/dist/scripts/notify-hook/active-team.js +44 -0
  204. package/dist/scripts/notify-hook/active-team.js.map +1 -0
  205. package/dist/scripts/notify-hook/auto-nudge.d.ts +5 -3
  206. package/dist/scripts/notify-hook/auto-nudge.d.ts.map +1 -1
  207. package/dist/scripts/notify-hook/auto-nudge.js +105 -78
  208. package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
  209. package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
  210. package/dist/scripts/notify-hook/managed-tmux.js +14 -2
  211. package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
  212. package/dist/scripts/notify-hook/operational-events.d.ts.map +1 -1
  213. package/dist/scripts/notify-hook/operational-events.js +28 -2
  214. package/dist/scripts/notify-hook/operational-events.js.map +1 -1
  215. package/dist/scripts/notify-hook/ralph-session-resume.d.ts.map +1 -1
  216. package/dist/scripts/notify-hook/ralph-session-resume.js +3 -2
  217. package/dist/scripts/notify-hook/ralph-session-resume.js.map +1 -1
  218. package/dist/scripts/notify-hook/state-io.d.ts +10 -1
  219. package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
  220. package/dist/scripts/notify-hook/state-io.js +56 -12
  221. package/dist/scripts/notify-hook/state-io.js.map +1 -1
  222. package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
  223. package/dist/scripts/notify-hook/team-leader-nudge.js +8 -12
  224. package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
  225. package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
  226. package/dist/scripts/notify-hook/tmux-injection.js +9 -1
  227. package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
  228. package/dist/scripts/notify-hook.js +26 -16
  229. package/dist/scripts/notify-hook.js.map +1 -1
  230. package/dist/state/__tests__/operations-ralph-phase.test.d.ts +2 -0
  231. package/dist/state/__tests__/operations-ralph-phase.test.d.ts.map +1 -0
  232. package/dist/state/__tests__/operations-ralph-phase.test.js +82 -0
  233. package/dist/state/__tests__/operations-ralph-phase.test.js.map +1 -0
  234. package/dist/state/__tests__/operations.test.d.ts +2 -0
  235. package/dist/state/__tests__/operations.test.d.ts.map +1 -0
  236. package/dist/state/__tests__/operations.test.js +200 -0
  237. package/dist/state/__tests__/operations.test.js.map +1 -0
  238. package/dist/state/__tests__/path-traversal.test.d.ts +2 -0
  239. package/dist/state/__tests__/path-traversal.test.d.ts.map +1 -0
  240. package/dist/state/__tests__/path-traversal.test.js +49 -0
  241. package/dist/state/__tests__/path-traversal.test.js.map +1 -0
  242. package/dist/state/__tests__/skill-active.test.js +35 -0
  243. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  244. package/dist/state/__tests__/workflow-transition.test.d.ts +2 -0
  245. package/dist/state/__tests__/workflow-transition.test.d.ts.map +1 -0
  246. package/dist/state/__tests__/workflow-transition.test.js +56 -0
  247. package/dist/state/__tests__/workflow-transition.test.js.map +1 -0
  248. package/dist/state/operations.d.ts +11 -0
  249. package/dist/state/operations.d.ts.map +1 -0
  250. package/dist/state/operations.js +233 -0
  251. package/dist/state/operations.js.map +1 -0
  252. package/dist/state/skill-active.d.ts +1 -1
  253. package/dist/state/skill-active.d.ts.map +1 -1
  254. package/dist/state/skill-active.js +118 -33
  255. package/dist/state/skill-active.js.map +1 -1
  256. package/dist/state/workflow-transition-reconcile.d.ts +15 -0
  257. package/dist/state/workflow-transition-reconcile.d.ts.map +1 -0
  258. package/dist/state/workflow-transition-reconcile.js +100 -0
  259. package/dist/state/workflow-transition-reconcile.js.map +1 -0
  260. package/dist/state/workflow-transition.d.ts +22 -0
  261. package/dist/state/workflow-transition.d.ts.map +1 -0
  262. package/dist/state/workflow-transition.js +188 -0
  263. package/dist/state/workflow-transition.js.map +1 -0
  264. package/dist/team/__tests__/api-interop.test.js +24 -2
  265. package/dist/team/__tests__/api-interop.test.js.map +1 -1
  266. package/dist/team/__tests__/current-task-baseline.test.d.ts +2 -0
  267. package/dist/team/__tests__/current-task-baseline.test.d.ts.map +1 -0
  268. package/dist/team/__tests__/current-task-baseline.test.js +87 -0
  269. package/dist/team/__tests__/current-task-baseline.test.js.map +1 -0
  270. package/dist/team/__tests__/delivery-e2e-smoke.test.js +9 -1
  271. package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -1
  272. package/dist/team/__tests__/runtime-cli.test.js +45 -0
  273. package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
  274. package/dist/team/__tests__/runtime.test.js +869 -159
  275. package/dist/team/__tests__/runtime.test.js.map +1 -1
  276. package/dist/team/__tests__/shutdown-fallback.test.js +11 -1
  277. package/dist/team/__tests__/shutdown-fallback.test.js.map +1 -1
  278. package/dist/team/__tests__/tmux-session.test.js +270 -4
  279. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  280. package/dist/team/api-interop.d.ts.map +1 -1
  281. package/dist/team/api-interop.js +2 -1
  282. package/dist/team/api-interop.js.map +1 -1
  283. package/dist/team/current-task-baseline.d.ts +32 -0
  284. package/dist/team/current-task-baseline.d.ts.map +1 -0
  285. package/dist/team/current-task-baseline.js +85 -0
  286. package/dist/team/current-task-baseline.js.map +1 -0
  287. package/dist/team/runtime-cli.d.ts.map +1 -1
  288. package/dist/team/runtime-cli.js +21 -2
  289. package/dist/team/runtime-cli.js.map +1 -1
  290. package/dist/team/runtime.d.ts +8 -0
  291. package/dist/team/runtime.d.ts.map +1 -1
  292. package/dist/team/runtime.js +400 -138
  293. package/dist/team/runtime.js.map +1 -1
  294. package/dist/team/scaling.d.ts.map +1 -1
  295. package/dist/team/scaling.js +1 -1
  296. package/dist/team/scaling.js.map +1 -1
  297. package/dist/team/state/dispatch.d.ts.map +1 -1
  298. package/dist/team/state/dispatch.js +9 -0
  299. package/dist/team/state/dispatch.js.map +1 -1
  300. package/dist/team/state.d.ts.map +1 -1
  301. package/dist/team/state.js +2 -13
  302. package/dist/team/state.js.map +1 -1
  303. package/dist/team/tmux-session.d.ts +12 -3
  304. package/dist/team/tmux-session.d.ts.map +1 -1
  305. package/dist/team/tmux-session.js +120 -15
  306. package/dist/team/tmux-session.js.map +1 -1
  307. package/dist/team/worktree.d.ts +2 -0
  308. package/dist/team/worktree.d.ts.map +1 -1
  309. package/dist/team/worktree.js +31 -3
  310. package/dist/team/worktree.js.map +1 -1
  311. package/dist/utils/__tests__/paths.test.js +76 -1
  312. package/dist/utils/__tests__/paths.test.js.map +1 -1
  313. package/dist/utils/paths.d.ts +6 -0
  314. package/dist/utils/paths.d.ts.map +1 -1
  315. package/dist/utils/paths.js +14 -0
  316. package/dist/utils/paths.js.map +1 -1
  317. package/dist/verification/__tests__/ci-rust-gates.test.js +59 -11
  318. package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
  319. package/dist/verification/__tests__/ralph-persistence-gate.test.js +1 -4
  320. package/dist/verification/__tests__/ralph-persistence-gate.test.js.map +1 -1
  321. package/package.json +6 -1
  322. package/src/scripts/__tests__/codex-native-hook.test.ts +1129 -51
  323. package/src/scripts/codex-native-hook.ts +391 -101
  324. package/src/scripts/codex-native-pre-post.ts +104 -0
  325. package/src/scripts/notify-fallback-watcher.ts +73 -18
  326. package/src/scripts/notify-hook/active-team.ts +54 -0
  327. package/src/scripts/notify-hook/auto-nudge.ts +114 -79
  328. package/src/scripts/notify-hook/managed-tmux.ts +15 -2
  329. package/src/scripts/notify-hook/operational-events.ts +27 -2
  330. package/src/scripts/notify-hook/ralph-session-resume.ts +3 -2
  331. package/src/scripts/notify-hook/state-io.ts +89 -12
  332. package/src/scripts/notify-hook/team-leader-nudge.ts +9 -11
  333. package/src/scripts/notify-hook/tmux-injection.ts +9 -1
  334. package/src/scripts/notify-hook.ts +36 -22
  335. package/templates/AGENTS.md +3 -4
package/Cargo.lock CHANGED
@@ -32,11 +32,11 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
32
32
 
33
33
  [[package]]
34
34
  name = "omx-explore-harness"
35
- version = "0.12.3"
35
+ version = "0.12.5"
36
36
 
37
37
  [[package]]
38
38
  name = "omx-mux"
39
- version = "0.12.3"
39
+ version = "0.12.5"
40
40
  dependencies = [
41
41
  "serde",
42
42
  "serde_json",
@@ -44,7 +44,7 @@ dependencies = [
44
44
 
45
45
  [[package]]
46
46
  name = "omx-runtime"
47
- version = "0.12.3"
47
+ version = "0.12.5"
48
48
  dependencies = [
49
49
  "omx-mux",
50
50
  "omx-runtime-core",
@@ -53,7 +53,7 @@ dependencies = [
53
53
 
54
54
  [[package]]
55
55
  name = "omx-runtime-core"
56
- version = "0.12.3"
56
+ version = "0.12.5"
57
57
  dependencies = [
58
58
  "fs2",
59
59
  "serde",
@@ -62,7 +62,7 @@ dependencies = [
62
62
 
63
63
  [[package]]
64
64
  name = "omx-sparkshell"
65
- version = "0.12.3"
65
+ version = "0.12.5"
66
66
  dependencies = [
67
67
  "omx-mux",
68
68
  ]
package/Cargo.toml CHANGED
@@ -10,7 +10,7 @@ resolver = "2"
10
10
 
11
11
  [workspace.package]
12
12
 
13
- version = "0.12.3"
13
+ version = "0.12.5"
14
14
 
15
15
  edition = "2021"
16
16
  license = "MIT"
package/README.md CHANGED
@@ -17,6 +17,12 @@
17
17
 
18
18
  OMX is a workflow layer for [OpenAI Codex CLI](https://github.com/openai/codex).
19
19
 
20
+ <table>
21
+ <tr>
22
+ <td><strong>🚨 CAUTION — RECOMMENDED DEFAULT ONLY: macOS or Linux with Codex CLI.</strong><br><br><strong>OMX is primarily designed and actively tuned for that path.</strong><br><strong>Native Windows and Codex App are not the default experience, may break or behave inconsistently, and currently receive less support.</strong></td>
23
+ </tr>
24
+ </table>
25
+
20
26
  It keeps Codex as the execution engine and makes it easier to:
21
27
  - start a stronger Codex session by default
22
28
  - run one consistent workflow from clarification to completion
@@ -85,8 +91,8 @@ If you want plain Codex with no extra workflow layer, you probably do not need O
85
91
  - Node.js 20+
86
92
  - Codex CLI installed: `npm install -g @openai/codex`
87
93
  - Codex auth configured
88
- - `tmux` on macOS/Linux if you later want the durable team runtime
89
- - `psmux` on native Windows if you later want Windows team mode
94
+ - `tmux` on macOS/Linux if you want the recommended durable team runtime
95
+ - `psmux` on native Windows only if you intentionally want the less-supported Windows team path
90
96
 
91
97
  ### A good first session
92
98
 
@@ -169,6 +175,8 @@ omx team shutdown <team-name>
169
175
 
170
176
  These are operator/support surfaces:
171
177
  - `omx setup` installs prompts, skills, AGENTS scaffolding, `.codex/config.toml`, and OMX-managed native Codex hooks in `.codex/hooks.json`
178
+ - setup refresh preserves non-OMX hook entries in `.codex/hooks.json` and only rewrites OMX-managed wrappers
179
+ - `omx uninstall` removes OMX-managed wrappers from `.codex/hooks.json` but keeps the file when user hooks remain
172
180
  - `omx doctor` verifies the install when something seems wrong
173
181
  - `omx hud --watch` is a monitoring/status surface, not the primary user workflow
174
182
 
@@ -194,7 +202,8 @@ omx sparkshell --tmux-pane %12 --tail-lines 400
194
202
 
195
203
  ### Platform notes for team mode
196
204
 
197
- `omx team` needs a tmux-compatible backend:
205
+ `omx team` works best on macOS/Linux with `tmux`.
206
+ Native Windows remains a secondary path, and WSL2 is generally the better choice if you want a Windows-hosted setup.
198
207
 
199
208
  | Platform | Install |
200
209
  | --- | --- |
@@ -50,6 +50,34 @@ command = "node"
50
50
  await rm(wd, { recursive: true, force: true });
51
51
  }
52
52
  });
53
+ it('warns about retired omx_team_run config left behind after upgrade', async () => {
54
+ const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-copy-'));
55
+ try {
56
+ const home = join(wd, 'home');
57
+ const codexDir = join(home, '.codex');
58
+ await mkdir(codexDir, { recursive: true });
59
+ await writeFile(join(codexDir, 'config.toml'), `
60
+ [mcp_servers.omx_team_run]
61
+ command = "node"
62
+ args = ["/tmp/team-server.js"]
63
+ enabled = true
64
+ `.trimStart());
65
+ const res = runOmx(wd, ['doctor'], {
66
+ HOME: home,
67
+ CODEX_HOME: join(home, '.codex'),
68
+ });
69
+ if (shouldSkipForSpawnPermissions(res.error))
70
+ return;
71
+ assert.equal(res.status, 0, res.stderr || res.stdout);
72
+ assert.match(res.stdout, /Config: retired \[mcp_servers\.omx_team_run\] table still present; run "omx setup --force" to repair the config/);
73
+ assert.match(res.stdout, /MCP Servers: 1 servers configured, but retired \[mcp_servers\.omx_team_run\] is not supported; run "omx setup --force" to repair the config/);
74
+ assert.doesNotMatch(res.stdout, /Config: config\.toml has OMX entries/);
75
+ assert.doesNotMatch(res.stdout, /MCP Servers: 1 servers but no OMX servers yet \(expected before first setup; run "omx setup --force" once\)/);
76
+ }
77
+ finally {
78
+ await rm(wd, { recursive: true, force: true });
79
+ }
80
+ });
53
81
  it('warns when explore harness sources are packaged but cargo is unavailable', async () => {
54
82
  const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-explore-copy-'));
55
83
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-warning-copy.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/doctor-warning-copy.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-warning-copy.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/doctor-warning-copy.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { describe, it } from "node:test";
2
2
  import assert from "node:assert/strict";
3
- import { execFileSync } from "node:child_process";
3
+ import { execFileSync, spawnSync } from "node:child_process";
4
4
  import { chmod, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
5
5
  import { join } from "node:path";
6
6
  import { tmpdir } from "node:os";
7
- import { normalizeCodexLaunchArgs, buildTmuxShellCommand, buildTmuxPaneCommand, buildWindowsPromptCommand, buildTmuxSessionName, resolveCliInvocation, commandOwnsLocalHelp, resolveCodexLaunchPolicy, resolveLeaderLaunchPolicyOverride, classifyCodexExecFailure, resolveSignalExitCode, parseTmuxPaneSnapshot, findHudWatchPaneIds, buildHudPaneCleanupTargets, readTopLevelTomlString, upsertTopLevelTomlString, collectInheritableTeamWorkerArgs, resolveTeamWorkerLaunchArgsEnv, injectModelInstructionsBypassArgs, resolveWorkerSparkModel, resolveSetupScopeArg, readPersistedSetupPreferences, readPersistedSetupScope, resolveCodexHomeForLaunch, buildDetachedSessionBootstrapSteps, buildDetachedTmuxSessionName, buildDetachedSessionFinalizeSteps, buildDetachedSessionRollbackSteps, resolveNotifyTempContract, buildNotifyTempStartupMessages, buildNotifyFallbackWatcherEnv, shouldEnableNotifyFallbackWatcher, reapStaleNotifyFallbackWatcher, cleanupLaunchOrphanedMcpProcesses, reapPostLaunchOrphanedMcpProcesses, cleanupPostLaunchModeStateFiles, resolveBackgroundHelperLaunchMode, shouldDetachBackgroundHelper, resolveNotifyFallbackWatcherScript, resolveHookDerivedWatcherScript, resolveNotifyHookScript, acquireTmuxExtendedKeysLease, releaseTmuxExtendedKeysLease, withTmuxExtendedKeys, } from "../index.js";
7
+ import { normalizeCodexLaunchArgs, buildTmuxShellCommand, buildTmuxPaneCommand, buildWindowsPromptCommand, buildTmuxSessionName, resolveCliInvocation, commandOwnsLocalHelp, resolveCodexLaunchPolicy, resolveLeaderLaunchPolicyOverride, classifyCodexExecFailure, resolveSignalExitCode, parseTmuxPaneSnapshot, findHudWatchPaneIds, buildHudPaneCleanupTargets, readTopLevelTomlString, upsertTopLevelTomlString, collectInheritableTeamWorkerArgs, resolveTeamWorkerLaunchArgsEnv, injectModelInstructionsBypassArgs, resolveWorkerSparkModel, resolveSetupScopeArg, readPersistedSetupPreferences, readPersistedSetupScope, resolveCodexConfigPathForLaunch, resolveCodexHomeForLaunch, buildDetachedSessionBootstrapSteps, buildDetachedTmuxSessionName, buildDetachedSessionFinalizeSteps, buildDetachedSessionRollbackSteps, resolveNotifyTempContract, buildNotifyTempStartupMessages, buildNotifyFallbackWatcherEnv, shouldEnableNotifyFallbackWatcher, reapStaleNotifyFallbackWatcher, cleanupLaunchOrphanedMcpProcesses, reapPostLaunchOrphanedMcpProcesses, cleanupPostLaunchModeStateFiles, resolveBackgroundHelperLaunchMode, shouldDetachBackgroundHelper, resolveNotifyFallbackWatcherScript, resolveHookDerivedWatcherScript, resolveNotifyHookScript, acquireTmuxExtendedKeysLease, releaseTmuxExtendedKeysLease, withTmuxExtendedKeys, } from "../index.js";
8
8
  import { HUD_TMUX_HEIGHT_LINES } from "../../hud/constants.js";
9
9
  import { DEFAULT_FRONTIER_MODEL, getTeamLowComplexityModel, } from "../../config/models.js";
10
10
  function expectedLowComplexityModel(codexHomeOverride) {
@@ -701,6 +701,17 @@ describe("project launch scope helpers", () => {
701
701
  await rm(wd, { recursive: true, force: true });
702
702
  }
703
703
  });
704
+ it("uses project config.toml for launch repair when persisted scope is project", async () => {
705
+ const wd = await mkdtemp(join(tmpdir(), "omx-launch-scope-"));
706
+ try {
707
+ await mkdir(join(wd, ".omx"), { recursive: true });
708
+ await writeFile(join(wd, ".omx", "setup-scope.json"), JSON.stringify({ scope: "project" }));
709
+ assert.equal(resolveCodexConfigPathForLaunch(wd, {}), join(wd, ".codex", "config.toml"));
710
+ }
711
+ finally {
712
+ await rm(wd, { recursive: true, force: true });
713
+ }
714
+ });
704
715
  it("keeps explicit CODEX_HOME override from env", async () => {
705
716
  const wd = await mkdtemp(join(tmpdir(), "omx-launch-scope-"));
706
717
  try {
@@ -714,6 +725,19 @@ describe("project launch scope helpers", () => {
714
725
  await rm(wd, { recursive: true, force: true });
715
726
  }
716
727
  });
728
+ it("uses explicit CODEX_HOME config.toml for launch repair overrides", async () => {
729
+ const wd = await mkdtemp(join(tmpdir(), "omx-launch-scope-"));
730
+ try {
731
+ await mkdir(join(wd, ".omx"), { recursive: true });
732
+ await writeFile(join(wd, ".omx", "setup-scope.json"), JSON.stringify({ scope: "project" }));
733
+ assert.equal(resolveCodexConfigPathForLaunch(wd, {
734
+ CODEX_HOME: "/tmp/explicit-codex-home",
735
+ }), "/tmp/explicit-codex-home/config.toml");
736
+ }
737
+ finally {
738
+ await rm(wd, { recursive: true, force: true });
739
+ }
740
+ });
717
741
  it('migrates legacy "project-local" persisted scope to "project"', async () => {
718
742
  const wd = await mkdtemp(join(tmpdir(), "omx-launch-scope-"));
719
743
  try {
@@ -885,20 +909,22 @@ describe("detached tmux new-session sequencing", () => {
885
909
  assert.equal(steps[1]?.name, "split-and-capture-hud-pane");
886
910
  assert.equal(steps[1]?.args.at(-1), hudCmd);
887
911
  });
888
- it("buildDetachedSessionBootstrapSteps kills detached tmux session on exit and interrupt", () => {
912
+ it("buildDetachedSessionBootstrapSteps kills detached tmux session on normal shell exit", () => {
889
913
  const steps = buildDetachedSessionBootstrapSteps("omx-demo", "/tmp/project", "'codex' '--model' 'gpt-5'", "'node' '/tmp/omx.js' 'hud' '--watch'", null);
890
914
  const leaderCmd = steps[0]?.args.at(-1);
891
915
  assert.equal(typeof leaderCmd, "string");
892
- assert.match(leaderCmd, /^\/bin\/sh -lc '/);
916
+ assert.match(leaderCmd, /^\/bin\/sh -c '/);
917
+ assert.doesNotMatch(leaderCmd, /^\/bin\/sh -lc '/);
893
918
  assert.match(leaderCmd, /acquireTmuxExtendedKeysLease/);
894
919
  assert.match(leaderCmd, /omx_detached_session_cleanup\(\)/);
895
- assert.match(leaderCmd, /trap omx_detached_session_cleanup 0 INT TERM HUP/);
920
+ assert.match(leaderCmd, /trap omx_detached_session_cleanup 0;/);
896
921
  assert.match(leaderCmd, /releaseTmuxExtendedKeysLease/);
922
+ assert.match(leaderCmd, /if \[ "\$status" -lt 128 \]; then/);
897
923
  assert.match(leaderCmd, /tmux kill-session -t/);
898
924
  assert.match(leaderCmd, /"omx-demo"/);
899
925
  assert.match(leaderCmd, /exit \$status/);
900
926
  });
901
- it("detached leader command executes codex and cleanup without shell-quote breakage", async () => {
927
+ it("detached leader command preserves cwd and cleanup without shell-quote breakage", async () => {
902
928
  const cwd = await mkdtemp(join(tmpdir(), "omx-detached-leader-"));
903
929
  const fakeBin = join(cwd, "bin");
904
930
  const logPath = join(cwd, "leader.log");
@@ -906,9 +932,11 @@ describe("detached tmux new-session sequencing", () => {
906
932
  await mkdir(fakeBin, { recursive: true });
907
933
  await writeFile(join(fakeBin, "codex"), `#!/bin/sh
908
934
  printf 'codex:%s\\n' "$*" >> "${logPath}"
935
+ printf 'codex-pwd:%s\\n' "$(pwd)" >> "${logPath}"
909
936
  exit 0
910
937
  `);
911
938
  await chmod(join(fakeBin, "codex"), 0o755);
939
+ await writeFile(join(cwd, ".profile"), "cd ..\n");
912
940
  await writeFile(join(fakeBin, "tmux"), `#!/bin/sh
913
941
  printf 'tmux:%s\\n' "$*" >> "${logPath}"
914
942
  case "$1" in
@@ -931,7 +959,7 @@ exit 0
931
959
  const steps = buildDetachedSessionBootstrapSteps("omx-demo", cwd, buildTmuxPaneCommand("codex", ["--dangerously-bypass-approvals-and-sandbox"], "/bin/sh"), "'node' '/tmp/omx.js' 'hud' '--watch'", null);
932
960
  const leaderCmd = steps[0]?.args.at(-1);
933
961
  assert.equal(typeof leaderCmd, "string");
934
- execFileSync("/bin/sh", ["-lc", leaderCmd], {
962
+ execFileSync("/bin/sh", ["-c", leaderCmd], {
935
963
  cwd,
936
964
  env: {
937
965
  ...process.env,
@@ -942,6 +970,7 @@ exit 0
942
970
  });
943
971
  const log = await readFile(logPath, "utf-8");
944
972
  assert.match(log, /codex:--dangerously-bypass-approvals-and-sandbox/);
973
+ assert.match(log, new RegExp(`codex-pwd:${cwd.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`));
945
974
  assert.match(log, /tmux:display-message -p #\{socket_path\}/);
946
975
  assert.match(log, /tmux:show-options -sv extended-keys/);
947
976
  assert.match(log, /tmux:set-option -sq extended-keys always/);
@@ -952,6 +981,61 @@ exit 0
952
981
  await rm(cwd, { recursive: true, force: true });
953
982
  }
954
983
  });
984
+ it("detached leader command preserves the detached tmux session on signal-derived exits", async () => {
985
+ const cwd = await mkdtemp(join(tmpdir(), "omx-detached-leader-signal-"));
986
+ const fakeBin = join(cwd, "bin");
987
+ const logPath = join(cwd, "leader.log");
988
+ try {
989
+ await mkdir(fakeBin, { recursive: true });
990
+ await writeFile(join(fakeBin, "codex"), `#!/bin/sh
991
+ printf 'codex:%s\\n' "$*" >> "${logPath}"
992
+ exit 143
993
+ `);
994
+ await chmod(join(fakeBin, "codex"), 0o755);
995
+ await writeFile(join(fakeBin, "tmux"), `#!/bin/sh
996
+ printf 'tmux:%s\\n' "$*" >> "${logPath}"
997
+ case "$1" in
998
+ display-message)
999
+ if [ "$3" = '#{socket_path}' ] || [ "$4" = '#{socket_path}' ]; then
1000
+ printf '/tmp/tmux-test.sock\\n'
1001
+ else
1002
+ printf '0\\n'
1003
+ fi
1004
+ ;;
1005
+ show-options)
1006
+ printf 'off\\n'
1007
+ ;;
1008
+ set-option|kill-session)
1009
+ ;;
1010
+ esac
1011
+ exit 0
1012
+ `);
1013
+ await chmod(join(fakeBin, "tmux"), 0o755);
1014
+ const steps = buildDetachedSessionBootstrapSteps("omx-demo", cwd, buildTmuxPaneCommand("codex", ["--dangerously-bypass-approvals-and-sandbox"], "/bin/sh"), "'node' '/tmp/omx.js' 'hud' '--watch'", null);
1015
+ const leaderCmd = steps[0]?.args.at(-1);
1016
+ assert.equal(typeof leaderCmd, "string");
1017
+ const result = spawnSync("/bin/sh", ["-lc", leaderCmd], {
1018
+ cwd,
1019
+ env: {
1020
+ ...process.env,
1021
+ PATH: `${fakeBin}:/usr/bin:/bin`,
1022
+ HOME: cwd,
1023
+ },
1024
+ encoding: "utf-8",
1025
+ });
1026
+ assert.equal(result.status, 143);
1027
+ const log = await readFile(logPath, "utf-8");
1028
+ assert.match(log, /codex:--dangerously-bypass-approvals-and-sandbox/);
1029
+ assert.match(log, /tmux:display-message -p #\{socket_path\}/);
1030
+ assert.match(log, /tmux:show-options -sv extended-keys/);
1031
+ assert.match(log, /tmux:set-option -sq extended-keys always/);
1032
+ assert.match(log, /tmux:set-option -sq extended-keys off/);
1033
+ assert.doesNotMatch(log, /tmux:kill-session -t omx-demo/);
1034
+ }
1035
+ finally {
1036
+ await rm(cwd, { recursive: true, force: true });
1037
+ }
1038
+ });
955
1039
  it("withTmuxExtendedKeys enables tmux extended keys during codex launch and restores them afterwards", async () => {
956
1040
  const cwd = await mkdtemp(join(tmpdir(), "omx-tmux-lease-wrapper-"));
957
1041
  const calls = [];
@@ -1051,7 +1135,14 @@ exit 0
1051
1135
  });
1052
1136
  it("buildDetachedSessionFinalizeSteps skips detached resize hooks on native Windows", () => {
1053
1137
  const steps = buildDetachedSessionFinalizeSteps("omx-demo", "%12", "3", true, true);
1054
- assert.deepEqual(steps.map((step) => step.name), ["set-mouse", "attach-session"]);
1138
+ assert.deepEqual(steps.map((step) => step.name), ["set-mouse", "sanitize-copy-mode-style", "attach-session"]);
1139
+ });
1140
+ it("buildDetachedSessionFinalizeSteps sanitizes copy-mode styling before attach when mouse mode is enabled", () => {
1141
+ const steps = buildDetachedSessionFinalizeSteps("omx-demo", "%12", "3", true);
1142
+ assert.equal(steps.findIndex((step) => step.name === "sanitize-copy-mode-style")
1143
+ > steps.findIndex((step) => step.name === "set-mouse"), true);
1144
+ assert.equal(steps.findIndex((step) => step.name === "attach-session")
1145
+ > steps.findIndex((step) => step.name === "sanitize-copy-mode-style"), true);
1055
1146
  });
1056
1147
  it("buildDetachedSessionFinalizeSteps never appends server-global terminal-overrides", () => {
1057
1148
  const steps = buildDetachedSessionFinalizeSteps("omx-demo", "%12", "3", true);
@@ -1088,27 +1179,37 @@ describe("buildTmuxShellCommand", () => {
1088
1179
  });
1089
1180
  });
1090
1181
  describe("buildTmuxPaneCommand", () => {
1091
- it("wraps command with zsh profile sourcing for zsh shell", () => {
1182
+ it("wraps command with zsh profile sourcing while preserving tmux cwd", () => {
1092
1183
  const result = buildTmuxPaneCommand("codex", ["--model", "gpt-5"], "/usr/bin/zsh");
1093
- assert.ok(result.startsWith("'/usr/bin/zsh' -lc "), "should start with zsh login shell");
1184
+ assert.ok(result.startsWith("'/usr/bin/zsh' -c "), "should start with zsh non-login shell to preserve tmux cwd");
1185
+ assert.ok(!result.includes(" -lc "), "should not use a login shell");
1094
1186
  assert.ok(result.includes("source ~/.zshrc"), "should source .zshrc");
1095
1187
  assert.ok(result.includes("exec "), "should exec the command");
1096
1188
  });
1097
- it("wraps command with bash profile sourcing for bash shell", () => {
1189
+ it("keeps Homebrew zsh instead of downgrading to /bin/sh", () => {
1190
+ const result = buildTmuxPaneCommand("codex", ["--model", "gpt-5"], "/opt/homebrew/bin/zsh");
1191
+ assert.ok(result.startsWith("'/opt/homebrew/bin/zsh' -c "), "should preserve Homebrew zsh when SHELL points to it");
1192
+ assert.ok(!result.startsWith("'/bin/sh' -c "), "should not fall back to /bin/sh for supported Homebrew zsh");
1193
+ assert.ok(result.includes("source ~/.zshrc"), "should source .zshrc");
1194
+ });
1195
+ it("wraps command with bash profile sourcing while preserving tmux cwd", () => {
1098
1196
  const result = buildTmuxPaneCommand("codex", [], "/bin/bash");
1099
- assert.ok(result.startsWith("'/bin/bash' -lc "), "should start with bash login shell");
1197
+ assert.ok(result.startsWith("'/bin/bash' -c "), "should start with bash non-login shell to preserve tmux cwd");
1198
+ assert.ok(!result.includes(" -lc "), "should not use a login shell");
1100
1199
  assert.ok(result.includes("source ~/.bashrc"), "should source .bashrc");
1101
1200
  assert.ok(result.includes("exec "), "should exec the command");
1102
1201
  });
1103
- it("skips rc sourcing for unknown shells but still uses login flag", () => {
1202
+ it("skips rc sourcing for unknown shells without using a login shell", () => {
1104
1203
  const result = buildTmuxPaneCommand("codex", [], "/bin/fish");
1105
- assert.ok(result.startsWith("'/bin/fish' -lc "), "should start with fish login shell");
1204
+ assert.ok(result.startsWith("'/bin/fish' -c "), "should start with fish non-login shell");
1205
+ assert.ok(!result.includes(" -lc "), "should not use a login shell");
1106
1206
  assert.ok(!result.includes("source"), "should not source any rc file");
1107
1207
  assert.ok(result.includes("exec "), "should exec the command");
1108
1208
  });
1109
- it("falls back to /bin/sh when shell path is empty", () => {
1209
+ it("falls back to /bin/sh without using a login shell when shell path is empty", () => {
1110
1210
  const result = buildTmuxPaneCommand("codex", [], "");
1111
- assert.ok(result.startsWith("'/bin/sh' -lc "), "should fall back to /bin/sh");
1211
+ assert.ok(result.startsWith("'/bin/sh' -c "), "should fall back to /bin/sh");
1212
+ assert.ok(!result.includes(" -lc "), "should not use a login shell");
1112
1213
  });
1113
1214
  });
1114
1215
  describe("buildWindowsPromptCommand", () => {