oh-my-codex 0.21.0 → 0.21.2

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 (346) hide show
  1. package/Cargo.toml +1 -1
  2. package/README.md +4 -2
  3. package/dist/cli/__tests__/detached-launch-diagnostics-3578.test.d.ts +2 -0
  4. package/dist/cli/__tests__/detached-launch-diagnostics-3578.test.d.ts.map +1 -0
  5. package/dist/cli/__tests__/detached-launch-diagnostics-3578.test.js +592 -0
  6. package/dist/cli/__tests__/detached-launch-diagnostics-3578.test.js.map +1 -0
  7. package/dist/cli/__tests__/detached-leader-teardown.test.js +270 -33
  8. package/dist/cli/__tests__/detached-leader-teardown.test.js.map +1 -1
  9. package/dist/cli/__tests__/doctor-warning-copy.test.js +133 -5
  10. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  11. package/dist/cli/__tests__/index.test.js +543 -2
  12. package/dist/cli/__tests__/index.test.js.map +1 -1
  13. package/dist/cli/__tests__/issue-windows-cancel-identity.test.d.ts +2 -0
  14. package/dist/cli/__tests__/issue-windows-cancel-identity.test.d.ts.map +1 -0
  15. package/dist/cli/__tests__/issue-windows-cancel-identity.test.js +17 -0
  16. package/dist/cli/__tests__/issue-windows-cancel-identity.test.js.map +1 -0
  17. package/dist/cli/__tests__/launch-fallback.test.js +15 -3
  18. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  19. package/dist/cli/__tests__/package-bin-contract.test.js +20 -0
  20. package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
  21. package/dist/cli/__tests__/plugin-cache-stale-lock.test.d.ts +2 -0
  22. package/dist/cli/__tests__/plugin-cache-stale-lock.test.d.ts.map +1 -0
  23. package/dist/cli/__tests__/plugin-cache-stale-lock.test.js +76 -0
  24. package/dist/cli/__tests__/plugin-cache-stale-lock.test.js.map +1 -0
  25. package/dist/cli/__tests__/plugin-cache-symlink-provenance-3552.test.d.ts +2 -0
  26. package/dist/cli/__tests__/plugin-cache-symlink-provenance-3552.test.d.ts.map +1 -0
  27. package/dist/cli/__tests__/plugin-cache-symlink-provenance-3552.test.js +1662 -0
  28. package/dist/cli/__tests__/plugin-cache-symlink-provenance-3552.test.js.map +1 -0
  29. package/dist/cli/__tests__/plugin-launcher-provenance-3558.test.d.ts +2 -0
  30. package/dist/cli/__tests__/plugin-launcher-provenance-3558.test.d.ts.map +1 -0
  31. package/dist/cli/__tests__/plugin-launcher-provenance-3558.test.js +522 -0
  32. package/dist/cli/__tests__/plugin-launcher-provenance-3558.test.js.map +1 -0
  33. package/dist/cli/__tests__/ralplan-advisory.test.d.ts +2 -0
  34. package/dist/cli/__tests__/ralplan-advisory.test.d.ts.map +1 -0
  35. package/dist/cli/__tests__/ralplan-advisory.test.js +301 -0
  36. package/dist/cli/__tests__/ralplan-advisory.test.js.map +1 -0
  37. package/dist/cli/__tests__/ralplan.test.js +39 -0
  38. package/dist/cli/__tests__/ralplan.test.js.map +1 -1
  39. package/dist/cli/__tests__/resume.test.js +81 -6
  40. package/dist/cli/__tests__/resume.test.js.map +1 -1
  41. package/dist/cli/__tests__/session-scoped-runtime.test.js +423 -4
  42. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  43. package/dist/cli/__tests__/setup-install-mode.test.js +60 -3
  44. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  45. package/dist/cli/__tests__/setup-refresh.test.js +9 -0
  46. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  47. package/dist/cli/__tests__/sparkshell-cli.test.js +4 -0
  48. package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
  49. package/dist/cli/__tests__/ultragoal.test.js +71 -0
  50. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  51. package/dist/cli/__tests__/windows-popup-loop-contract.test.js +30 -4
  52. package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
  53. package/dist/cli/doctor.d.ts.map +1 -1
  54. package/dist/cli/doctor.js +57 -8
  55. package/dist/cli/doctor.js.map +1 -1
  56. package/dist/cli/index.d.ts +113 -7
  57. package/dist/cli/index.d.ts.map +1 -1
  58. package/dist/cli/index.js +1850 -185
  59. package/dist/cli/index.js.map +1 -1
  60. package/dist/cli/native-assets.d.ts +2 -1
  61. package/dist/cli/native-assets.d.ts.map +1 -1
  62. package/dist/cli/native-assets.js +7 -7
  63. package/dist/cli/native-assets.js.map +1 -1
  64. package/dist/cli/plugin-marketplace.d.ts +89 -4
  65. package/dist/cli/plugin-marketplace.d.ts.map +1 -1
  66. package/dist/cli/plugin-marketplace.js +2135 -118
  67. package/dist/cli/plugin-marketplace.js.map +1 -1
  68. package/dist/cli/ralplan.d.ts +2 -1
  69. package/dist/cli/ralplan.d.ts.map +1 -1
  70. package/dist/cli/ralplan.js +149 -9
  71. package/dist/cli/ralplan.js.map +1 -1
  72. package/dist/cli/setup.d.ts.map +1 -1
  73. package/dist/cli/setup.js +7 -1
  74. package/dist/cli/setup.js.map +1 -1
  75. package/dist/cli/sparkshell.d.ts.map +1 -1
  76. package/dist/cli/sparkshell.js +9 -10
  77. package/dist/cli/sparkshell.js.map +1 -1
  78. package/dist/cli/update-worker.js +9 -0
  79. package/dist/cli/update-worker.js.map +1 -1
  80. package/dist/cli/update.d.ts +1 -0
  81. package/dist/cli/update.d.ts.map +1 -1
  82. package/dist/cli/update.js +9 -0
  83. package/dist/cli/update.js.map +1 -1
  84. package/dist/config/__tests__/generator-idempotent.test.js +118 -0
  85. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  86. package/dist/config/generator.d.ts.map +1 -1
  87. package/dist/config/generator.js +74 -4
  88. package/dist/config/generator.js.map +1 -1
  89. package/dist/hooks/__tests__/keyword-detector.test.js +74 -0
  90. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  91. package/dist/hooks/__tests__/ralplan-advisory-keyword.test.d.ts +2 -0
  92. package/dist/hooks/__tests__/ralplan-advisory-keyword.test.d.ts.map +1 -0
  93. package/dist/hooks/__tests__/ralplan-advisory-keyword.test.js +250 -0
  94. package/dist/hooks/__tests__/ralplan-advisory-keyword.test.js.map +1 -0
  95. package/dist/hooks/__tests__/session.test.js +10 -1
  96. package/dist/hooks/__tests__/session.test.js.map +1 -1
  97. package/dist/hooks/keyword-detector.d.ts +8 -1
  98. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  99. package/dist/hooks/keyword-detector.js +130 -9
  100. package/dist/hooks/keyword-detector.js.map +1 -1
  101. package/dist/hooks/session.d.ts +5 -0
  102. package/dist/hooks/session.d.ts.map +1 -1
  103. package/dist/hooks/session.js +17 -3
  104. package/dist/hooks/session.js.map +1 -1
  105. package/dist/hud/__tests__/index.test.js +16 -1
  106. package/dist/hud/__tests__/index.test.js.map +1 -1
  107. package/dist/hud/__tests__/reconcile.test.js +134 -7
  108. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  109. package/dist/hud/__tests__/render.test.js +57 -0
  110. package/dist/hud/__tests__/render.test.js.map +1 -1
  111. package/dist/hud/__tests__/session-attached.test.d.ts +2 -0
  112. package/dist/hud/__tests__/session-attached.test.d.ts.map +1 -0
  113. package/dist/hud/__tests__/session-attached.test.js +82 -0
  114. package/dist/hud/__tests__/session-attached.test.js.map +1 -0
  115. package/dist/hud/__tests__/state.test.js +94 -2
  116. package/dist/hud/__tests__/state.test.js.map +1 -1
  117. package/dist/hud/__tests__/tmux-split-realtmux.test.js +169 -2
  118. package/dist/hud/__tests__/tmux-split-realtmux.test.js.map +1 -1
  119. package/dist/hud/__tests__/tmux.test.js +104 -22
  120. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  121. package/dist/hud/__tests__/types.test.js +9 -0
  122. package/dist/hud/__tests__/types.test.js.map +1 -1
  123. package/dist/hud/__tests__/watch-detached.test.d.ts +2 -0
  124. package/dist/hud/__tests__/watch-detached.test.d.ts.map +1 -0
  125. package/dist/hud/__tests__/watch-detached.test.js +383 -0
  126. package/dist/hud/__tests__/watch-detached.test.js.map +1 -0
  127. package/dist/hud/__tests__/watch-realtmux.test.d.ts +2 -0
  128. package/dist/hud/__tests__/watch-realtmux.test.d.ts.map +1 -0
  129. package/dist/hud/__tests__/watch-realtmux.test.js +322 -0
  130. package/dist/hud/__tests__/watch-realtmux.test.js.map +1 -0
  131. package/dist/hud/index.d.ts +3 -0
  132. package/dist/hud/index.d.ts.map +1 -1
  133. package/dist/hud/index.js +98 -20
  134. package/dist/hud/index.js.map +1 -1
  135. package/dist/hud/reconcile.d.ts.map +1 -1
  136. package/dist/hud/reconcile.js +68 -24
  137. package/dist/hud/reconcile.js.map +1 -1
  138. package/dist/hud/render.d.ts.map +1 -1
  139. package/dist/hud/render.js +20 -0
  140. package/dist/hud/render.js.map +1 -1
  141. package/dist/hud/session-attached.d.ts +15 -0
  142. package/dist/hud/session-attached.d.ts.map +1 -0
  143. package/dist/hud/session-attached.js +47 -0
  144. package/dist/hud/session-attached.js.map +1 -0
  145. package/dist/hud/state.d.ts +9 -1
  146. package/dist/hud/state.d.ts.map +1 -1
  147. package/dist/hud/state.js +140 -3
  148. package/dist/hud/state.js.map +1 -1
  149. package/dist/hud/tmux.d.ts +4 -0
  150. package/dist/hud/tmux.d.ts.map +1 -1
  151. package/dist/hud/tmux.js +86 -23
  152. package/dist/hud/tmux.js.map +1 -1
  153. package/dist/hud/types.d.ts +20 -0
  154. package/dist/hud/types.d.ts.map +1 -1
  155. package/dist/hud/types.js +3 -0
  156. package/dist/hud/types.js.map +1 -1
  157. package/dist/modes/base.d.ts +15 -2
  158. package/dist/modes/base.d.ts.map +1 -1
  159. package/dist/modes/base.js +105 -16
  160. package/dist/modes/base.js.map +1 -1
  161. package/dist/question/autopilot-wait.js +2 -2
  162. package/dist/question/autopilot-wait.js.map +1 -1
  163. package/dist/question/deep-interview.js +2 -2
  164. package/dist/question/deep-interview.js.map +1 -1
  165. package/dist/ralplan/__tests__/advisory-activation.test.d.ts +2 -0
  166. package/dist/ralplan/__tests__/advisory-activation.test.d.ts.map +1 -0
  167. package/dist/ralplan/__tests__/advisory-activation.test.js +700 -0
  168. package/dist/ralplan/__tests__/advisory-activation.test.js.map +1 -0
  169. package/dist/ralplan/__tests__/advisory-detached-transition.test.d.ts +2 -0
  170. package/dist/ralplan/__tests__/advisory-detached-transition.test.d.ts.map +1 -0
  171. package/dist/ralplan/__tests__/advisory-detached-transition.test.js +88 -0
  172. package/dist/ralplan/__tests__/advisory-detached-transition.test.js.map +1 -0
  173. package/dist/ralplan/__tests__/advisory.test.d.ts +2 -0
  174. package/dist/ralplan/__tests__/advisory.test.d.ts.map +1 -0
  175. package/dist/ralplan/__tests__/advisory.test.js +1087 -0
  176. package/dist/ralplan/__tests__/advisory.test.js.map +1 -0
  177. package/dist/ralplan/__tests__/runtime.test.js +416 -7
  178. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  179. package/dist/ralplan/advisory-activation-verifier.d.ts +19 -0
  180. package/dist/ralplan/advisory-activation-verifier.d.ts.map +1 -0
  181. package/dist/ralplan/advisory-activation-verifier.js +77 -0
  182. package/dist/ralplan/advisory-activation-verifier.js.map +1 -0
  183. package/dist/ralplan/advisory-activation.d.ts +34 -0
  184. package/dist/ralplan/advisory-activation.d.ts.map +1 -0
  185. package/dist/ralplan/advisory-activation.js +205 -0
  186. package/dist/ralplan/advisory-activation.js.map +1 -0
  187. package/dist/ralplan/advisory-contract.d.ts +103 -0
  188. package/dist/ralplan/advisory-contract.d.ts.map +1 -0
  189. package/dist/ralplan/advisory-contract.js +83 -0
  190. package/dist/ralplan/advisory-contract.js.map +1 -0
  191. package/dist/ralplan/advisory-detached-transition.d.ts +11 -0
  192. package/dist/ralplan/advisory-detached-transition.d.ts.map +1 -0
  193. package/dist/ralplan/advisory-detached-transition.js +21 -0
  194. package/dist/ralplan/advisory-detached-transition.js.map +1 -0
  195. package/dist/ralplan/advisory-evidence.d.ts +91 -0
  196. package/dist/ralplan/advisory-evidence.d.ts.map +1 -0
  197. package/dist/ralplan/advisory-evidence.js +393 -0
  198. package/dist/ralplan/advisory-evidence.js.map +1 -0
  199. package/dist/ralplan/advisory-lifecycle-validation.d.ts +11 -0
  200. package/dist/ralplan/advisory-lifecycle-validation.d.ts.map +1 -0
  201. package/dist/ralplan/advisory-lifecycle-validation.js +72 -0
  202. package/dist/ralplan/advisory-lifecycle-validation.js.map +1 -0
  203. package/dist/ralplan/advisory-postconditions.d.ts +3 -0
  204. package/dist/ralplan/advisory-postconditions.d.ts.map +1 -0
  205. package/dist/ralplan/advisory-postconditions.js +33 -0
  206. package/dist/ralplan/advisory-postconditions.js.map +1 -0
  207. package/dist/ralplan/advisory-recovery-journal.d.ts +56 -0
  208. package/dist/ralplan/advisory-recovery-journal.d.ts.map +1 -0
  209. package/dist/ralplan/advisory-recovery-journal.js +136 -0
  210. package/dist/ralplan/advisory-recovery-journal.js.map +1 -0
  211. package/dist/ralplan/advisory-storage.d.ts +24 -0
  212. package/dist/ralplan/advisory-storage.d.ts.map +1 -0
  213. package/dist/ralplan/advisory-storage.js +106 -0
  214. package/dist/ralplan/advisory-storage.js.map +1 -0
  215. package/dist/ralplan/advisory.d.ts +99 -0
  216. package/dist/ralplan/advisory.d.ts.map +1 -0
  217. package/dist/ralplan/advisory.js +914 -0
  218. package/dist/ralplan/advisory.js.map +1 -0
  219. package/dist/ralplan/documented-leader-preflight.d.ts +8 -0
  220. package/dist/ralplan/documented-leader-preflight.d.ts.map +1 -1
  221. package/dist/ralplan/documented-leader-preflight.js +60 -2
  222. package/dist/ralplan/documented-leader-preflight.js.map +1 -1
  223. package/dist/ralplan/runtime-advisory-lifecycle.d.ts +74 -0
  224. package/dist/ralplan/runtime-advisory-lifecycle.d.ts.map +1 -0
  225. package/dist/ralplan/runtime-advisory-lifecycle.js +352 -0
  226. package/dist/ralplan/runtime-advisory-lifecycle.js.map +1 -0
  227. package/dist/ralplan/runtime-contract.d.ts +126 -0
  228. package/dist/ralplan/runtime-contract.d.ts.map +1 -0
  229. package/dist/ralplan/runtime-contract.js +2 -0
  230. package/dist/ralplan/runtime-contract.js.map +1 -0
  231. package/dist/ralplan/runtime.d.ts +6 -109
  232. package/dist/ralplan/runtime.d.ts.map +1 -1
  233. package/dist/ralplan/runtime.js +174 -56
  234. package/dist/ralplan/runtime.js.map +1 -1
  235. package/dist/scripts/__tests__/postinstall.test.js +26 -0
  236. package/dist/scripts/__tests__/postinstall.test.js.map +1 -1
  237. package/dist/scripts/__tests__/ralplan-advisory-hook.test.d.ts +2 -0
  238. package/dist/scripts/__tests__/ralplan-advisory-hook.test.d.ts.map +1 -0
  239. package/dist/scripts/__tests__/ralplan-advisory-hook.test.js +299 -0
  240. package/dist/scripts/__tests__/ralplan-advisory-hook.test.js.map +1 -0
  241. package/dist/scripts/__tests__/smoke-packed-install.test.js +102 -8
  242. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
  243. package/dist/scripts/codex-native-hook.d.ts +20 -0
  244. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  245. package/dist/scripts/codex-native-hook.js +226 -15
  246. package/dist/scripts/codex-native-hook.js.map +1 -1
  247. package/dist/scripts/postinstall.d.ts +7 -0
  248. package/dist/scripts/postinstall.d.ts.map +1 -1
  249. package/dist/scripts/postinstall.js +40 -0
  250. package/dist/scripts/postinstall.js.map +1 -1
  251. package/dist/scripts/smoke-packed-install.d.ts +21 -5
  252. package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
  253. package/dist/scripts/smoke-packed-install.js +157 -57
  254. package/dist/scripts/smoke-packed-install.js.map +1 -1
  255. package/dist/state/__tests__/mode-binding-lease.test.d.ts +2 -0
  256. package/dist/state/__tests__/mode-binding-lease.test.d.ts.map +1 -0
  257. package/dist/state/__tests__/mode-binding-lease.test.js +498 -0
  258. package/dist/state/__tests__/mode-binding-lease.test.js.map +1 -0
  259. package/dist/state/__tests__/operations.test.js +1 -0
  260. package/dist/state/__tests__/operations.test.js.map +1 -1
  261. package/dist/state/__tests__/pinned-atomic-file.test.d.ts +2 -0
  262. package/dist/state/__tests__/pinned-atomic-file.test.d.ts.map +1 -0
  263. package/dist/state/__tests__/pinned-atomic-file.test.js +438 -0
  264. package/dist/state/__tests__/pinned-atomic-file.test.js.map +1 -0
  265. package/dist/state/__tests__/skill-active-exact-session-transaction.test.d.ts +2 -0
  266. package/dist/state/__tests__/skill-active-exact-session-transaction.test.d.ts.map +1 -0
  267. package/dist/state/__tests__/skill-active-exact-session-transaction.test.js +179 -0
  268. package/dist/state/__tests__/skill-active-exact-session-transaction.test.js.map +1 -0
  269. package/dist/state/__tests__/skill-active.test.js +29 -1
  270. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  271. package/dist/state/mode-binding-lease-helper.d.ts +2 -0
  272. package/dist/state/mode-binding-lease-helper.d.ts.map +1 -0
  273. package/dist/state/mode-binding-lease-helper.js +623 -0
  274. package/dist/state/mode-binding-lease-helper.js.map +1 -0
  275. package/dist/state/mode-binding-lease.d.ts +25 -0
  276. package/dist/state/mode-binding-lease.d.ts.map +1 -0
  277. package/dist/state/mode-binding-lease.js +380 -0
  278. package/dist/state/mode-binding-lease.js.map +1 -0
  279. package/dist/state/operations.d.ts +29 -1
  280. package/dist/state/operations.d.ts.map +1 -1
  281. package/dist/state/operations.js +203 -122
  282. package/dist/state/operations.js.map +1 -1
  283. package/dist/state/pinned-atomic-file-darwin-client.d.ts +34 -0
  284. package/dist/state/pinned-atomic-file-darwin-client.d.ts.map +1 -0
  285. package/dist/state/pinned-atomic-file-darwin-client.js +174 -0
  286. package/dist/state/pinned-atomic-file-darwin-client.js.map +1 -0
  287. package/dist/state/pinned-atomic-file-darwin-helper.d.ts +2 -0
  288. package/dist/state/pinned-atomic-file-darwin-helper.d.ts.map +1 -0
  289. package/dist/state/pinned-atomic-file-darwin-helper.js +275 -0
  290. package/dist/state/pinned-atomic-file-darwin-helper.js.map +1 -0
  291. package/dist/state/pinned-atomic-file-darwin-janitor.d.ts +2 -0
  292. package/dist/state/pinned-atomic-file-darwin-janitor.d.ts.map +1 -0
  293. package/dist/state/pinned-atomic-file-darwin-janitor.js +272 -0
  294. package/dist/state/pinned-atomic-file-darwin-janitor.js.map +1 -0
  295. package/dist/state/pinned-atomic-file.d.ts +29 -0
  296. package/dist/state/pinned-atomic-file.d.ts.map +1 -0
  297. package/dist/state/pinned-atomic-file.js +536 -0
  298. package/dist/state/pinned-atomic-file.js.map +1 -0
  299. package/dist/state/process-identity.d.ts +30 -0
  300. package/dist/state/process-identity.d.ts.map +1 -0
  301. package/dist/state/process-identity.js +99 -0
  302. package/dist/state/process-identity.js.map +1 -0
  303. package/dist/state/skill-active.d.ts +18 -1
  304. package/dist/state/skill-active.d.ts.map +1 -1
  305. package/dist/state/skill-active.js +82 -5
  306. package/dist/state/skill-active.js.map +1 -1
  307. package/dist/state/workflow-transition-reconcile.js +1 -1
  308. package/dist/state/workflow-transition-reconcile.js.map +1 -1
  309. package/dist/team/__tests__/tmux-session.test.js +109 -0
  310. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  311. package/dist/team/tmux-session.d.ts.map +1 -1
  312. package/dist/team/tmux-session.js +10 -1
  313. package/dist/team/tmux-session.js.map +1 -1
  314. package/dist/utils/__tests__/file-durability.test.js +20 -0
  315. package/dist/utils/__tests__/file-durability.test.js.map +1 -1
  316. package/dist/utils/file-durability.d.ts +1 -1
  317. package/dist/utils/file-durability.d.ts.map +1 -1
  318. package/dist/utils/file-durability.js.map +1 -1
  319. package/dist/verification/__tests__/ci-rust-gates.test.js +12 -4
  320. package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
  321. package/dist/verification/__tests__/ci-trusted-publish.test.d.ts +2 -0
  322. package/dist/verification/__tests__/ci-trusted-publish.test.d.ts.map +1 -0
  323. package/dist/verification/__tests__/ci-trusted-publish.test.js +205 -0
  324. package/dist/verification/__tests__/ci-trusted-publish.test.js.map +1 -0
  325. package/dist/verification/__tests__/explore-harness-release-workflow.test.js +10 -5
  326. package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
  327. package/dist/verification/__tests__/publish-npm-manual-retired.test.d.ts +2 -0
  328. package/dist/verification/__tests__/publish-npm-manual-retired.test.d.ts.map +1 -0
  329. package/dist/verification/__tests__/publish-npm-manual-retired.test.js +22 -0
  330. package/dist/verification/__tests__/publish-npm-manual-retired.test.js.map +1 -0
  331. package/package.json +1 -1
  332. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  333. package/plugins/oh-my-codex/skills/doctor/SKILL.md +1 -1
  334. package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +1 -1
  335. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +10 -1
  336. package/plugins/oh-my-codex/skills/team/SKILL.md +2 -0
  337. package/skills/doctor/SKILL.md +1 -1
  338. package/skills/omx-setup/SKILL.md +1 -1
  339. package/skills/ralplan/SKILL.md +10 -1
  340. package/skills/team/SKILL.md +2 -0
  341. package/src/scripts/__tests__/postinstall.test.ts +28 -0
  342. package/src/scripts/__tests__/ralplan-advisory-hook.test.ts +320 -0
  343. package/src/scripts/__tests__/smoke-packed-install.test.ts +120 -7
  344. package/src/scripts/codex-native-hook.ts +220 -10
  345. package/src/scripts/postinstall.ts +46 -0
  346. package/src/scripts/smoke-packed-install.ts +175 -70
@@ -0,0 +1,522 @@
1
+ import { describe, it, before, after } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { existsSync } from "node:fs";
4
+ import { cp, mkdir, mkdtemp, readFile, rm, writeFile, symlink, } from "node:fs/promises";
5
+ import { tmpdir } from "node:os";
6
+ import { join, dirname } from "node:path";
7
+ import { setup } from "../setup.js";
8
+ import { materializePackagedOmxPluginCache, resolvePackagedOmxMarketplace, getPinnedLauncherIncompatibilityReason, readPinnedLauncherRaw, PLUGIN_LAUNCHER_RECOVERY_HINT, upsertLocalOmxMarketplaceRegistration, upsertLocalOmxPluginEnablement, computeOmxPluginCacheClaimDigest, } from "../plugin-marketplace.js";
9
+ import { doctor } from "../doctor.js";
10
+ const packageRoot = process.cwd();
11
+ let fakeCodexBinDir = null;
12
+ let previousPath;
13
+ before(async () => {
14
+ previousPath = process.env.PATH;
15
+ fakeCodexBinDir = await mkdtemp(join(tmpdir(), "omx-fake-codex-3558-"));
16
+ const fakeCodexPath = join(fakeCodexBinDir, "codex");
17
+ await writeFile(fakeCodexPath, [
18
+ "#!/usr/bin/env node",
19
+ "if (process.argv[2] === 'features' && process.argv[3] === 'list') {",
20
+ " console.log('hooks stable true');",
21
+ " console.log('plugin_hooks experimental true');",
22
+ " console.log('goals experimental true');",
23
+ " process.exit(0);",
24
+ "}",
25
+ "if (process.argv.includes('--version') || process.argv[2] === '--version') {",
26
+ " console.log('codex-cli 0.999.0');",
27
+ " process.exit(0);",
28
+ "}",
29
+ "process.exit(0);",
30
+ "",
31
+ ].join("\n"));
32
+ await import("node:fs/promises").then((m) => m.chmod(fakeCodexPath, 0o755));
33
+ process.env.PATH = `${fakeCodexBinDir}${process.env.PATH ? `:${process.env.PATH}` : ""}`;
34
+ });
35
+ after(async () => {
36
+ if (previousPath === undefined)
37
+ delete process.env.PATH;
38
+ else
39
+ process.env.PATH = previousPath;
40
+ if (fakeCodexBinDir)
41
+ await rm(fakeCodexBinDir, { recursive: true, force: true });
42
+ });
43
+ async function withIsolatedUserHome(wd, fn) {
44
+ const prevHome = process.env.HOME;
45
+ const prevCodex = process.env.CODEX_HOME;
46
+ const homeDir = join(wd, "home");
47
+ const codexHomeDir = join(homeDir, ".codex");
48
+ await mkdir(codexHomeDir, { recursive: true });
49
+ process.env.HOME = homeDir;
50
+ process.env.CODEX_HOME = codexHomeDir;
51
+ try {
52
+ return await fn(codexHomeDir);
53
+ }
54
+ finally {
55
+ if (typeof prevHome === "string")
56
+ process.env.HOME = prevHome;
57
+ else
58
+ delete process.env.HOME;
59
+ if (typeof prevCodex === "string")
60
+ process.env.CODEX_HOME = prevCodex;
61
+ else
62
+ delete process.env.CODEX_HOME;
63
+ }
64
+ }
65
+ async function withTempCwd(wd, fn) {
66
+ const prev = process.cwd();
67
+ process.chdir(wd);
68
+ try {
69
+ await fn();
70
+ }
71
+ finally {
72
+ process.chdir(prev);
73
+ }
74
+ }
75
+ async function captureConsoleOutput(fn) {
76
+ const origLog = console.log;
77
+ const origWarn = console.warn;
78
+ const lines = [];
79
+ console.log = (...args) => lines.push(args.map(String).join(" "));
80
+ console.warn = (...args) => lines.push(args.map(String).join(" "));
81
+ try {
82
+ await fn();
83
+ }
84
+ finally {
85
+ console.log = origLog;
86
+ console.warn = origWarn;
87
+ }
88
+ return lines.join("\n");
89
+ }
90
+ async function packagedPluginCacheDir(codexHomeDir) {
91
+ const manifest = JSON.parse(await readFile(join(packageRoot, "plugins", "oh-my-codex", ".codex-plugin", "plugin.json"), "utf-8"));
92
+ return join(codexHomeDir, "plugins", "cache", "oh-my-codex-local", "oh-my-codex", manifest.version);
93
+ }
94
+ async function seedCurrentLauncher(codexHomeDir) {
95
+ const cacheDir = await packagedPluginCacheDir(codexHomeDir);
96
+ await mkdir(dirname(cacheDir), { recursive: true });
97
+ await cp(join(packageRoot, "plugins", "oh-my-codex"), cacheDir, {
98
+ recursive: true,
99
+ });
100
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify({
101
+ command: process.execPath,
102
+ argsPrefix: [join(packageRoot, "dist", "cli", "omx.js")],
103
+ }, null, 2) + "\n");
104
+ const claimDigest = await computeOmxPluginCacheClaimDigest(cacheDir);
105
+ await writeFile(join(cacheDir, ".omx-complete"), `${JSON.stringify({ claimDigest })}\n`);
106
+ return cacheDir;
107
+ }
108
+ async function writeBoundCompletionMarker(cacheDir) {
109
+ const claimDigest = await computeOmxPluginCacheClaimDigest(cacheDir);
110
+ await writeFile(join(cacheDir, ".omx-complete"), `${JSON.stringify({ claimDigest })}\n`);
111
+ }
112
+ async function makeFakePackageRoot(base, label) {
113
+ const fakeRoot = join(base, label);
114
+ await mkdir(fakeRoot, { recursive: true });
115
+ await cp(join(packageRoot, "plugins"), join(fakeRoot, "plugins"), {
116
+ recursive: true,
117
+ });
118
+ await mkdir(join(fakeRoot, ".agents", "plugins"), { recursive: true });
119
+ await cp(join(packageRoot, ".agents", "plugins", "marketplace.json"), join(fakeRoot, ".agents", "plugins", "marketplace.json"));
120
+ await mkdir(join(fakeRoot, "dist", "cli"), { recursive: true });
121
+ await writeFile(join(fakeRoot, "dist", "cli", "omx.js"), `// fake omx ${label}\n`, "utf-8");
122
+ return fakeRoot;
123
+ }
124
+ describe("issue 3558 launcher provenance", () => {
125
+ it("reproduces exact dead-launcher case: same version different root removed -> stale-launcher, immutable preserved, recovery hint", async () => {
126
+ const wd = await mkdtemp(join(tmpdir(), "omx-3558-repro-"));
127
+ const pkgBase = await mkdtemp(join(tmpdir(), "omx-3558-pkgbase-"));
128
+ try {
129
+ const oldRoot = await makeFakePackageRoot(pkgBase, "old-tmp-src");
130
+ const oldMarketplace = await resolvePackagedOmxMarketplace(oldRoot);
131
+ assert.ok(oldMarketplace);
132
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
133
+ await withTempCwd(wd, async () => {
134
+ // materialize from old temp root (simulates v0.21.0 from /private/tmp)
135
+ const r1 = await materializePackagedOmxPluginCache(codexHomeDir, oldMarketplace);
136
+ assert.equal(r1.status, "materialized");
137
+ const launcherPath = join(r1.cacheDir, "hooks", "omx-command.json");
138
+ const launcher1 = JSON.parse(await readFile(launcherPath, "utf-8"));
139
+ assert.ok(launcher1.argsPrefix[0].includes("old-tmp-src"));
140
+ // Simulate removal of temp build after global install: delete target
141
+ await rm(join(oldRoot, "dist", "cli", "omx.js"), { force: true });
142
+ assert.equal(existsSync(launcher1.argsPrefix[0]), false);
143
+ // Now materialize from current (global) packageRoot — same version 0.21.0 but different root
144
+ const output = await captureConsoleOutput(async () => {
145
+ await setup({ scope: "user", installMode: "plugin" });
146
+ });
147
+ const launcher2 = JSON.parse(await readFile(launcherPath, "utf-8"));
148
+ // Immutable: file not overwritten
149
+ assert.equal(launcher2.argsPrefix[0], launcher1.argsPrefix[0]);
150
+ assert.equal(launcher2.command, launcher1.command);
151
+ // Must NOT claim current
152
+ assert.doesNotMatch(output, /Local Codex plugin cache already exposes packaged OMX skills/);
153
+ assert.match(output, /incompatible launcher provenance/);
154
+ assert.match(output, /does not exist/);
155
+ assert.match(output, /codex plugin remove oh-my-codex@oh-my-codex-local --json/);
156
+ const packaged = await resolvePackagedOmxMarketplace(packageRoot);
157
+ assert.ok(packaged);
158
+ const r2 = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
159
+ assert.equal(r2.status, "stale-launcher");
160
+ assert.ok(r2.reason);
161
+ assert.match(r2.reason, /does not exist/);
162
+ assert.equal(r2.cacheDir, launcherPath.replace("/hooks/omx-command.json", ""));
163
+ });
164
+ });
165
+ }
166
+ finally {
167
+ await rm(wd, { recursive: true, force: true });
168
+ await rm(pkgBase, { recursive: true, force: true });
169
+ }
170
+ });
171
+ it("same-root idempotence remains unchanged and live", async () => {
172
+ const wd = await mkdtemp(join(tmpdir(), "omx-3558-idempotent-"));
173
+ try {
174
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
175
+ await withTempCwd(wd, async () => {
176
+ const cacheDir = await seedCurrentLauncher(codexHomeDir);
177
+ const output = await captureConsoleOutput(async () => {
178
+ await setup({ scope: "user", installMode: "plugin" });
179
+ });
180
+ assert.match(output, /Local Codex plugin cache already exposes packaged OMX skills/);
181
+ assert.doesNotMatch(output, /incompatible launcher/);
182
+ const packaged = await resolvePackagedOmxMarketplace(packageRoot);
183
+ assert.ok(packaged);
184
+ const r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
185
+ assert.equal(r.status, "unchanged");
186
+ const launcher = JSON.parse(await readFile(join(cacheDir, "hooks", "omx-command.json"), "utf-8"));
187
+ assert.equal(launcher.argsPrefix[0], join(packageRoot, "dist", "cli", "omx.js"));
188
+ assert.equal(existsSync(launcher.argsPrefix[0]), true);
189
+ });
190
+ });
191
+ }
192
+ finally {
193
+ await rm(wd, { recursive: true, force: true });
194
+ }
195
+ });
196
+ it("provenance mismatch with live target (different root, not deleted) is stale-launcher, not unchanged", async () => {
197
+ const wd = await mkdtemp(join(tmpdir(), "omx-3558-provenance-live-"));
198
+ const pkgBase = await mkdtemp(join(tmpdir(), "omx-3558-pkgbase-live-"));
199
+ try {
200
+ const fakeRoot = await makeFakePackageRoot(pkgBase, "other-live-root");
201
+ const fakeMarketplace = await resolvePackagedOmxMarketplace(fakeRoot);
202
+ assert.ok(fakeMarketplace);
203
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
204
+ await withTempCwd(wd, async () => {
205
+ // seed with fake live root
206
+ const cacheDir = await packagedPluginCacheDir(codexHomeDir);
207
+ await mkdir(dirname(cacheDir), { recursive: true });
208
+ await cp(join(fakeRoot, "plugins", "oh-my-codex"), cacheDir, {
209
+ recursive: true,
210
+ });
211
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify({
212
+ command: process.execPath,
213
+ argsPrefix: [join(fakeRoot, "dist", "cli", "omx.js")],
214
+ }, null, 2) + "\n");
215
+ await writeBoundCompletionMarker(cacheDir);
216
+ assert.equal(existsSync(join(fakeRoot, "dist", "cli", "omx.js")), true);
217
+ // Now setup with current packageRoot (different but same version) — target still exists at old location
218
+ const output = await captureConsoleOutput(async () => {
219
+ await setup({ scope: "user", installMode: "plugin" });
220
+ });
221
+ assert.doesNotMatch(output, /already exposes/);
222
+ assert.match(output, /incompatible launcher provenance/);
223
+ assert.match(output, /provenance mismatch/);
224
+ const packaged = await resolvePackagedOmxMarketplace(packageRoot);
225
+ assert.ok(packaged);
226
+ const r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
227
+ assert.equal(r.status, "stale-launcher");
228
+ assert.match(r.reason, /provenance mismatch/);
229
+ // still preserved
230
+ const launcher = JSON.parse(await readFile(join(cacheDir, "hooks", "omx-command.json"), "utf-8"));
231
+ assert.equal(launcher.argsPrefix[0], join(fakeRoot, "dist", "cli", "omx.js"));
232
+ });
233
+ });
234
+ }
235
+ finally {
236
+ await rm(wd, { recursive: true, force: true });
237
+ await rm(pkgBase, { recursive: true, force: true });
238
+ }
239
+ });
240
+ it("valid target plus extra argsPrefix entries or extra JSON keys is stale-launcher and immutable", async () => {
241
+ const wd = await mkdtemp(join(tmpdir(), "omx-3558-extra-args-"));
242
+ const pkgBase = await mkdtemp(join(tmpdir(), "omx-3558-pkgbase-extra-"));
243
+ try {
244
+ const fakeRoot = await makeFakePackageRoot(pkgBase, "extra-args-root");
245
+ const packaged = await resolvePackagedOmxMarketplace(fakeRoot);
246
+ assert.ok(packaged);
247
+ const expectedTarget = join(fakeRoot, "dist", "cli", "omx.js");
248
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
249
+ await withTempCwd(wd, async () => {
250
+ const cacheDir = await packagedPluginCacheDir(codexHomeDir);
251
+ await mkdir(dirname(cacheDir), { recursive: true });
252
+ await cp(join(fakeRoot, "plugins", "oh-my-codex"), cacheDir, {
253
+ recursive: true,
254
+ });
255
+ const extraArgsLauncher = {
256
+ command: process.execPath,
257
+ argsPrefix: [expectedTarget, "--eval", "process.exit(0)"],
258
+ };
259
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify(extraArgsLauncher, null, 2) + "\n");
260
+ const extraArgsReason = await getPinnedLauncherIncompatibilityReason(cacheDir, packaged);
261
+ assert.ok(extraArgsReason);
262
+ assert.match(extraArgsReason.reason, /exactly one packaged omx\.js target/);
263
+ const extraArgsResult = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
264
+ assert.equal(extraArgsResult.status, "stale-launcher");
265
+ assert.deepEqual(JSON.parse(await readFile(join(cacheDir, "hooks", "omx-command.json"), "utf-8")), extraArgsLauncher);
266
+ const extraKeysLauncher = {
267
+ command: process.execPath,
268
+ argsPrefix: [expectedTarget],
269
+ env: { OMX_INJECT: "1" },
270
+ };
271
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify(extraKeysLauncher, null, 2) + "\n");
272
+ const extraKeysReason = await getPinnedLauncherIncompatibilityReason(cacheDir, packaged);
273
+ assert.ok(extraKeysReason);
274
+ assert.match(extraKeysReason.reason, /extra keys \(env\)/);
275
+ const extraKeysResult = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
276
+ assert.equal(extraKeysResult.status, "stale-launcher");
277
+ assert.deepEqual(JSON.parse(await readFile(join(cacheDir, "hooks", "omx-command.json"), "utf-8")), extraKeysLauncher);
278
+ });
279
+ });
280
+ }
281
+ finally {
282
+ await rm(wd, { recursive: true, force: true });
283
+ await rm(pkgBase, { recursive: true, force: true });
284
+ }
285
+ });
286
+ it("live-pin does not auto-repair; stale-launcher persists and directory untouched", async () => {
287
+ const wd = await mkdtemp(join(tmpdir(), "omx-3558-livepin-"));
288
+ try {
289
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
290
+ await withTempCwd(wd, async () => {
291
+ const cacheDir = await packagedPluginCacheDir(codexHomeDir);
292
+ await mkdir(dirname(cacheDir), { recursive: true });
293
+ await cp(join(packageRoot, "plugins", "oh-my-codex"), cacheDir, {
294
+ recursive: true,
295
+ });
296
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify({ command: "/stale/node", argsPrefix: ["/stale/omx.js"] }, null, 2) + "\n");
297
+ await writeFile(join(cacheDir, ".omx-live-pin"), "pinned\n");
298
+ await writeBoundCompletionMarker(cacheDir);
299
+ const before = await readFile(join(cacheDir, "hooks", "omx-command.json"), "utf-8");
300
+ const packaged = await resolvePackagedOmxMarketplace(packageRoot);
301
+ assert.ok(packaged);
302
+ const r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
303
+ assert.equal(r.status, "stale-launcher");
304
+ assert.match(r.reason, /does not exist/);
305
+ const after = await readFile(join(cacheDir, "hooks", "omx-command.json"), "utf-8");
306
+ assert.equal(after, before);
307
+ assert.equal(existsSync(join(cacheDir, ".omx-live-pin")), true);
308
+ const output = await captureConsoleOutput(async () => {
309
+ await setup({ scope: "user", installMode: "plugin" });
310
+ });
311
+ assert.doesNotMatch(output, /already exposes/);
312
+ assert.match(output, /incompatible launcher/);
313
+ });
314
+ });
315
+ }
316
+ finally {
317
+ await rm(wd, { recursive: true, force: true });
318
+ }
319
+ });
320
+ it("malformed, missing, non-absolute and symlink cases handled", async () => {
321
+ const wd = await mkdtemp(join(tmpdir(), "omx-3558-edge-"));
322
+ try {
323
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
324
+ await withTempCwd(wd, async () => {
325
+ const packaged = await resolvePackagedOmxMarketplace(packageRoot);
326
+ assert.ok(packaged);
327
+ const cacheDir = await packagedPluginCacheDir(codexHomeDir);
328
+ // malformed JSON
329
+ await mkdir(join(cacheDir, "hooks"), { recursive: true });
330
+ await mkdir(join(cacheDir, ".codex-plugin"), { recursive: true });
331
+ await writeFile(join(cacheDir, ".codex-plugin", "plugin.json"), await readFile(join(packageRoot, "plugins", "oh-my-codex", ".codex-plugin", "plugin.json"), "utf-8"));
332
+ await mkdir(join(cacheDir, "skills"), { recursive: true });
333
+ await cp(join(packageRoot, "plugins", "oh-my-codex", "hooks", "hooks.json"), join(cacheDir, "hooks", "hooks.json"));
334
+ await cp(join(packageRoot, "plugins", "oh-my-codex", "hooks", "codex-native-hook.mjs"), join(cacheDir, "hooks", "codex-native-hook.mjs"));
335
+ // need skills for state
336
+ await cp(join(packageRoot, "plugins", "oh-my-codex", "skills"), join(cacheDir, "skills"), { recursive: true });
337
+ await cp(join(packageRoot, "plugins", "oh-my-codex", ".mcp.json"), join(cacheDir, ".mcp.json"));
338
+ await cp(join(packageRoot, "plugins", "oh-my-codex", ".app.json"), join(cacheDir, ".app.json"));
339
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), "{ malformed", "utf-8");
340
+ await writeBoundCompletionMarker(cacheDir);
341
+ let raw = await readPinnedLauncherRaw(cacheDir);
342
+ assert.match(raw.error, /malformed/);
343
+ let r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
344
+ assert.equal(r.status, "stale-launcher");
345
+ assert.match(r.reason, /malformed/);
346
+ assert.match(r.reason, new RegExp(PLUGIN_LAUNCHER_RECOVERY_HINT.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")));
347
+ // missing launcher
348
+ await rm(join(cacheDir, "hooks", "omx-command.json"), {
349
+ force: true,
350
+ });
351
+ raw = await readPinnedLauncherRaw(cacheDir);
352
+ assert.equal(raw.raw, null);
353
+ r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
354
+ assert.equal(r.status, "stale-launcher");
355
+ assert.match(r.reason, /pinned launcher missing/);
356
+ // JSON null
357
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), "null\n", "utf-8");
358
+ raw = await readPinnedLauncherRaw(cacheDir);
359
+ assert.match(raw.error, /malformed/);
360
+ r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
361
+ assert.equal(r.status, "stale-launcher");
362
+ assert.match(r.reason, /malformed/);
363
+ // must not throw at parsed.command access
364
+ const nullReason = await getPinnedLauncherIncompatibilityReason(cacheDir, packaged);
365
+ assert.ok(nullReason);
366
+ // JSON array
367
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), "[]\n", "utf-8");
368
+ r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
369
+ assert.equal(r.status, "stale-launcher");
370
+ assert.match(r.reason, /malformed/);
371
+ // dead command + live argsPrefix conflict (command validation must still fail-closed)
372
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify({
373
+ command: "/stale/node",
374
+ argsPrefix: [join(packageRoot, "dist", "cli", "omx.js")],
375
+ }) + "\n");
376
+ r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
377
+ assert.equal(r.status, "stale-launcher");
378
+ assert.match(r.reason, /command.*does not exist|command provenance mismatch/);
379
+ // non-absolute target
380
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify({
381
+ command: process.execPath,
382
+ argsPrefix: ["relative/path/omx.js"],
383
+ }) + "\n");
384
+ r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
385
+ assert.equal(r.status, "stale-launcher");
386
+ assert.match(r.reason, /not absolute/);
387
+ // symlink alias: packageRoot canonical alias should be considered live (unchanged)
388
+ const aliasRoot = join(wd, "alias-root");
389
+ await symlink(packageRoot, aliasRoot);
390
+ const aliasLauncherPath = join(aliasRoot, "dist", "cli", "omx.js");
391
+ // aliasLauncherPath canonical should equal packageRoot/dist/cli/omx.js
392
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify({
393
+ command: process.execPath,
394
+ argsPrefix: [aliasLauncherPath],
395
+ }) + "\n");
396
+ await writeBoundCompletionMarker(cacheDir);
397
+ // ensure file exists via alias
398
+ assert.equal(existsSync(aliasLauncherPath), true);
399
+ const incompat = await getPinnedLauncherIncompatibilityReason(cacheDir, packaged);
400
+ assert.equal(incompat, null, "symlink alias should be compatible");
401
+ r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
402
+ assert.equal(r.status, "unchanged", "symlink alias must remain unchanged (provenance-compatible)");
403
+ });
404
+ });
405
+ }
406
+ finally {
407
+ await rm(wd, { recursive: true, force: true });
408
+ }
409
+ });
410
+ it("doctor surfaces stale launcher as warn with recovery hint", async () => {
411
+ const wd = await mkdtemp(join(tmpdir(), "omx-3558-doctor-"));
412
+ try {
413
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
414
+ await withTempCwd(wd, async () => {
415
+ const cacheDir = await packagedPluginCacheDir(codexHomeDir);
416
+ await mkdir(dirname(cacheDir), { recursive: true });
417
+ await cp(join(packageRoot, "plugins", "oh-my-codex"), cacheDir, {
418
+ recursive: true,
419
+ });
420
+ await writeFile(join(cacheDir, "hooks", "omx-command.json"), JSON.stringify({ command: "/stale/node", argsPrefix: ["/stale/omx.js"] }, null, 2) + "\n");
421
+ await writeBoundCompletionMarker(cacheDir);
422
+ // Also ensure doctor's expected plugin-scoped check triggers: need config that enables plugin-scoped hooks
423
+ // Minimal config: ensure checkPluginScopedNativeHooks path via doctor() invocation (not just helpers).
424
+ // Instead of full doctor (which checks many things), directly invoke the exported doctor helper via spawning logic:
425
+ // Call doctor() and inspect output; fallback to direct check if doctor output doesn't contain Native hooks detail in minimal fixture.
426
+ // First prove helper still stale
427
+ const packaged = await resolvePackagedOmxMarketplace(packageRoot);
428
+ assert.ok(packaged);
429
+ const r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
430
+ assert.equal(r.status, "stale-launcher");
431
+ const incompat = await getPinnedLauncherIncompatibilityReason(cacheDir, packaged);
432
+ assert.ok(incompat);
433
+ assert.match(incompat.reason, /codex plugin remove oh-my-codex@oh-my-codex-local --json/);
434
+ // Persist plugin install mode so doctor resolves plugin-scoped check deterministically
435
+ await mkdir(join(wd, ".omx"), { recursive: true });
436
+ await writeFile(join(wd, ".omx", "setup-scope.json"), JSON.stringify({ scope: "user", installMode: "plugin", mcpMode: "none" }) + "\n", "utf-8");
437
+ // Now invoke actual doctor to prove it surfaces the same warn (not generic hook mismatch)
438
+ // MinimalDoctor invocation: we need to ensure doctor writes its Native hooks check; create a temp cwd with .codex link
439
+ // Easiest: invoke doctor via spawned checkNativeHooks by calling doctor() and capturing console.
440
+ const originalLog = console.log;
441
+ const logs = [];
442
+ console.log = (...args) => logs.push(args.map(String).join(" "));
443
+ try {
444
+ // Ensure config signals plugin-scoped hooks: create config.toml with plugin marketplace registration so doctor resolves scope correctly
445
+ const configPath = join(codexHomeDir, "config.toml");
446
+ const { getPackageRoot } = await import("../../utils/package.js");
447
+ const { buildLocalOmxMarketplaceRegistration } = await import("../plugin-marketplace.js");
448
+ let cfg = "plugin_hooks = true\ngoals = true\n";
449
+ cfg = upsertLocalOmxMarketplaceRegistration(cfg, getPackageRoot());
450
+ cfg = upsertLocalOmxPluginEnablement(cfg);
451
+ await writeFile(configPath, cfg, "utf-8");
452
+ // Need hooksPath parent
453
+ await mkdir(join(codexHomeDir, "agents"), { recursive: true });
454
+ await doctor({});
455
+ }
456
+ catch {
457
+ // doctor may throw? ignore, we inspect logs below
458
+ }
459
+ finally {
460
+ console.log = originalLog;
461
+ }
462
+ const output = logs.join("\n");
463
+ assert.match(output, /Native hooks/);
464
+ assert.match(output, /incompatible/);
465
+ assert.match(output, /codex plugin remove oh-my-codex@oh-my-codex-local --json/);
466
+ });
467
+ });
468
+ }
469
+ finally {
470
+ await rm(wd, { recursive: true, force: true });
471
+ }
472
+ });
473
+ it("doctor missing omx-command.json surfaces same actionable stale-launcher warning", async () => {
474
+ const wd = await mkdtemp(join(tmpdir(), "omx-3558-doctor-missing-"));
475
+ try {
476
+ await withIsolatedUserHome(wd, async (codexHomeDir) => {
477
+ await withTempCwd(wd, async () => {
478
+ const cacheDir = await packagedPluginCacheDir(codexHomeDir);
479
+ await mkdir(dirname(cacheDir), { recursive: true });
480
+ await cp(join(packageRoot, "plugins", "oh-my-codex"), cacheDir, { recursive: true });
481
+ await rm(join(cacheDir, "hooks", "omx-command.json"), { force: true });
482
+ await writeBoundCompletionMarker(cacheDir);
483
+ const packaged = await resolvePackagedOmxMarketplace(packageRoot);
484
+ assert.ok(packaged);
485
+ const incompat = await getPinnedLauncherIncompatibilityReason(cacheDir, packaged);
486
+ assert.ok(incompat);
487
+ assert.match(incompat.reason, /pinned launcher missing/);
488
+ assert.match(incompat.reason, /codex plugin remove oh-my-codex@oh-my-codex-local --json/);
489
+ const r = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
490
+ assert.equal(r.status, "stale-launcher");
491
+ // Invoke doctor and ensure missing launcher goes through stale-launcher warn, not generic "expected plugin hook file is missing" for launcher
492
+ const { getPackageRoot } = await import("../../utils/package.js");
493
+ const { buildLocalOmxMarketplaceRegistration } = await import("../plugin-marketplace.js");
494
+ let cfg2 = "";
495
+ cfg2 = upsertLocalOmxMarketplaceRegistration(cfg2, getPackageRoot());
496
+ cfg2 = upsertLocalOmxPluginEnablement(cfg2);
497
+ cfg2 = "[features]\nplugin_hooks = true\n\n" + cfg2;
498
+ await writeFile(join(codexHomeDir, "config.toml"), cfg2, "utf-8");
499
+ await mkdir(join(codexHomeDir, "agents"), { recursive: true });
500
+ const logs = [];
501
+ const origLog = console.log;
502
+ console.log = (...args) => logs.push(args.map(String).join(" "));
503
+ try {
504
+ await doctor({});
505
+ }
506
+ finally {
507
+ console.log = origLog;
508
+ }
509
+ const output = logs.join("\n");
510
+ assert.match(output, /Native hooks/);
511
+ assert.match(output, /incompatible|cached launcher/);
512
+ assert.match(output, /codex plugin remove oh-my-codex@oh-my-codex-local --json/);
513
+ assert.match(output, /omx-command\.json|incompatible/);
514
+ });
515
+ });
516
+ }
517
+ finally {
518
+ await rm(wd, { recursive: true, force: true });
519
+ }
520
+ });
521
+ });
522
+ //# sourceMappingURL=plugin-launcher-provenance-3558.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-launcher-provenance-3558.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/plugin-launcher-provenance-3558.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ralplan-advisory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ralplan-advisory.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/ralplan-advisory.test.ts"],"names":[],"mappings":""}