oh-my-codex 0.6.4 → 0.7.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 (432) hide show
  1. package/README.md +19 -9
  2. package/bin/omx.js +3 -5
  3. package/dist/agents/__tests__/definitions.test.d.ts +2 -0
  4. package/dist/agents/__tests__/definitions.test.d.ts.map +1 -0
  5. package/dist/agents/__tests__/definitions.test.js +35 -0
  6. package/dist/agents/__tests__/definitions.test.js.map +1 -0
  7. package/dist/agents/__tests__/native-config.test.d.ts +2 -0
  8. package/dist/agents/__tests__/native-config.test.d.ts.map +1 -0
  9. package/dist/agents/__tests__/native-config.test.js +48 -0
  10. package/dist/agents/__tests__/native-config.test.js.map +1 -0
  11. package/dist/catalog/__tests__/schema.test.js +15 -0
  12. package/dist/catalog/__tests__/schema.test.js.map +1 -1
  13. package/dist/catalog/schema.d.ts.map +1 -1
  14. package/dist/catalog/schema.js +6 -0
  15. package/dist/catalog/schema.js.map +1 -1
  16. package/dist/cli/__tests__/catalog-contract.test.d.ts +2 -0
  17. package/dist/cli/__tests__/catalog-contract.test.d.ts.map +1 -0
  18. package/dist/cli/__tests__/catalog-contract.test.js +18 -0
  19. package/dist/cli/__tests__/catalog-contract.test.js.map +1 -0
  20. package/dist/cli/__tests__/doctor-team.test.js +3 -2
  21. package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
  22. package/dist/cli/__tests__/error-handling-warnings.test.d.ts +2 -0
  23. package/dist/cli/__tests__/error-handling-warnings.test.d.ts.map +1 -0
  24. package/dist/cli/__tests__/error-handling-warnings.test.js +35 -0
  25. package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -0
  26. package/dist/cli/__tests__/index.test.js +81 -8
  27. package/dist/cli/__tests__/index.test.js.map +1 -1
  28. package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts +2 -0
  29. package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts.map +1 -0
  30. package/dist/cli/__tests__/setup-agents-overwrite.test.js +124 -0
  31. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -0
  32. package/dist/cli/__tests__/setup-scope.test.js +79 -21
  33. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  34. package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts +2 -0
  35. package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts.map +1 -0
  36. package/dist/cli/__tests__/setup-skills-overwrite.test.js +32 -0
  37. package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -0
  38. package/dist/cli/__tests__/star-prompt.test.js +74 -0
  39. package/dist/cli/__tests__/star-prompt.test.js.map +1 -1
  40. package/dist/cli/__tests__/team.test.js +8 -0
  41. package/dist/cli/__tests__/team.test.js.map +1 -1
  42. package/dist/cli/doctor.d.ts.map +1 -1
  43. package/dist/cli/doctor.js +75 -18
  44. package/dist/cli/doctor.js.map +1 -1
  45. package/dist/cli/index.d.ts +10 -1
  46. package/dist/cli/index.d.ts.map +1 -1
  47. package/dist/cli/index.js +153 -45
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/cli/setup.d.ts +2 -1
  50. package/dist/cli/setup.d.ts.map +1 -1
  51. package/dist/cli/setup.js +104 -60
  52. package/dist/cli/setup.js.map +1 -1
  53. package/dist/cli/star-prompt.d.ts +21 -1
  54. package/dist/cli/star-prompt.d.ts.map +1 -1
  55. package/dist/cli/star-prompt.js +34 -13
  56. package/dist/cli/star-prompt.js.map +1 -1
  57. package/dist/cli/team.d.ts.map +1 -1
  58. package/dist/cli/team.js +10 -3
  59. package/dist/cli/team.js.map +1 -1
  60. package/dist/cli/update.d.ts.map +1 -1
  61. package/dist/cli/update.js.map +1 -1
  62. package/dist/config/__tests__/generator-notify.test.js +16 -0
  63. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  64. package/dist/config/__tests__/models.test.js +9 -1
  65. package/dist/config/__tests__/models.test.js.map +1 -1
  66. package/dist/config/generator.js +9 -10
  67. package/dist/config/generator.js.map +1 -1
  68. package/dist/config/models.d.ts +8 -1
  69. package/dist/config/models.d.ts.map +1 -1
  70. package/dist/config/models.js +27 -5
  71. package/dist/config/models.js.map +1 -1
  72. package/dist/hooks/__tests__/agents-overlay.test.js +24 -0
  73. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  74. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +18 -0
  75. package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts.map +1 -0
  76. package/dist/hooks/__tests__/consensus-execution-handoff.test.js +204 -0
  77. package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -0
  78. package/dist/hooks/__tests__/emulator.test.d.ts +2 -0
  79. package/dist/hooks/__tests__/emulator.test.d.ts.map +1 -0
  80. package/dist/hooks/__tests__/emulator.test.js +47 -0
  81. package/dist/hooks/__tests__/emulator.test.js.map +1 -0
  82. package/dist/hooks/__tests__/keyword-detector.test.js +330 -4
  83. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  84. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +44 -0
  85. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  86. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +101 -0
  87. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
  88. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +13 -7
  89. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
  90. package/dist/hooks/__tests__/notify-hook-modules.test.js +61 -0
  91. package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
  92. package/dist/hooks/__tests__/notify-hook-session-scope.test.js +47 -0
  93. package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
  94. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.d.ts +2 -0
  95. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.d.ts.map +1 -0
  96. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +135 -0
  97. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -0
  98. package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts +2 -0
  99. package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts.map +1 -0
  100. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +560 -0
  101. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -0
  102. package/dist/hooks/__tests__/session.test.d.ts +2 -0
  103. package/dist/hooks/__tests__/session.test.d.ts.map +1 -0
  104. package/dist/hooks/__tests__/session.test.js +161 -0
  105. package/dist/hooks/__tests__/session.test.js.map +1 -0
  106. package/dist/hooks/__tests__/task-size-detector.test.d.ts +2 -0
  107. package/dist/hooks/__tests__/task-size-detector.test.d.ts.map +1 -0
  108. package/dist/hooks/__tests__/task-size-detector.test.js +336 -0
  109. package/dist/hooks/__tests__/task-size-detector.test.js.map +1 -0
  110. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts +2 -0
  111. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts.map +1 -0
  112. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js +24 -0
  113. package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js.map +1 -0
  114. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  115. package/dist/hooks/agents-overlay.js +46 -2
  116. package/dist/hooks/agents-overlay.js.map +1 -1
  117. package/dist/hooks/code-simplifier/__tests__/index.test.js +67 -15
  118. package/dist/hooks/code-simplifier/__tests__/index.test.js.map +1 -1
  119. package/dist/hooks/code-simplifier/index.d.ts +10 -4
  120. package/dist/hooks/code-simplifier/index.d.ts.map +1 -1
  121. package/dist/hooks/code-simplifier/index.js +38 -12
  122. package/dist/hooks/code-simplifier/index.js.map +1 -1
  123. package/dist/hooks/codebase-map.d.ts.map +1 -1
  124. package/dist/hooks/codebase-map.js +5 -32
  125. package/dist/hooks/codebase-map.js.map +1 -1
  126. package/dist/hooks/emulator.d.ts.map +1 -1
  127. package/dist/hooks/emulator.js +11 -18
  128. package/dist/hooks/emulator.js.map +1 -1
  129. package/dist/hooks/extensibility/__tests__/dispatcher.test.js +59 -1
  130. package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
  131. package/dist/hooks/extensibility/__tests__/loader.test.js +19 -0
  132. package/dist/hooks/extensibility/__tests__/loader.test.js.map +1 -1
  133. package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
  134. package/dist/hooks/extensibility/dispatcher.js +51 -39
  135. package/dist/hooks/extensibility/dispatcher.js.map +1 -1
  136. package/dist/hooks/extensibility/loader.d.ts.map +1 -1
  137. package/dist/hooks/extensibility/loader.js +25 -13
  138. package/dist/hooks/extensibility/loader.js.map +1 -1
  139. package/dist/hooks/extensibility/logging.d.ts.map +1 -1
  140. package/dist/hooks/extensibility/logging.js +6 -1
  141. package/dist/hooks/extensibility/logging.js.map +1 -1
  142. package/dist/hooks/extensibility/sdk.js.map +1 -1
  143. package/dist/hooks/keyword-detector.d.ts +87 -0
  144. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  145. package/dist/hooks/keyword-detector.js +235 -23
  146. package/dist/hooks/keyword-detector.js.map +1 -1
  147. package/dist/hooks/keyword-registry.d.ts +15 -0
  148. package/dist/hooks/keyword-registry.d.ts.map +1 -0
  149. package/dist/hooks/keyword-registry.js +41 -0
  150. package/dist/hooks/keyword-registry.js.map +1 -0
  151. package/dist/hooks/session.d.ts +18 -2
  152. package/dist/hooks/session.d.ts.map +1 -1
  153. package/dist/hooks/session.js +84 -11
  154. package/dist/hooks/session.js.map +1 -1
  155. package/dist/hooks/task-size-detector.d.ts +72 -0
  156. package/dist/hooks/task-size-detector.d.ts.map +1 -0
  157. package/dist/hooks/task-size-detector.js +204 -0
  158. package/dist/hooks/task-size-detector.js.map +1 -0
  159. package/dist/hud/__tests__/colors.test.js +1 -103
  160. package/dist/hud/__tests__/colors.test.js.map +1 -1
  161. package/dist/hud/__tests__/index.test.d.ts +2 -0
  162. package/dist/hud/__tests__/index.test.d.ts.map +1 -0
  163. package/dist/hud/__tests__/index.test.js +131 -0
  164. package/dist/hud/__tests__/index.test.js.map +1 -0
  165. package/dist/hud/__tests__/render.test.js +53 -0
  166. package/dist/hud/__tests__/render.test.js.map +1 -1
  167. package/dist/hud/__tests__/watch.test.d.ts +2 -0
  168. package/dist/hud/__tests__/watch.test.d.ts.map +1 -0
  169. package/dist/hud/__tests__/watch.test.js +63 -0
  170. package/dist/hud/__tests__/watch.test.js.map +1 -0
  171. package/dist/hud/colors.d.ts +2 -9
  172. package/dist/hud/colors.d.ts.map +1 -1
  173. package/dist/hud/colors.js +19 -34
  174. package/dist/hud/colors.js.map +1 -1
  175. package/dist/hud/constants.d.ts +1 -0
  176. package/dist/hud/constants.d.ts.map +1 -1
  177. package/dist/hud/constants.js +1 -0
  178. package/dist/hud/constants.js.map +1 -1
  179. package/dist/hud/index.d.ts +27 -0
  180. package/dist/hud/index.d.ts.map +1 -1
  181. package/dist/hud/index.js +149 -9
  182. package/dist/hud/index.js.map +1 -1
  183. package/dist/hud/render.d.ts.map +1 -1
  184. package/dist/hud/render.js +20 -7
  185. package/dist/hud/render.js.map +1 -1
  186. package/dist/mcp/__tests__/bootstrap.test.d.ts +2 -0
  187. package/dist/mcp/__tests__/bootstrap.test.d.ts.map +1 -0
  188. package/dist/mcp/__tests__/bootstrap.test.js +25 -0
  189. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -0
  190. package/dist/mcp/__tests__/code-intel-server.test.d.ts +2 -0
  191. package/dist/mcp/__tests__/code-intel-server.test.d.ts.map +1 -0
  192. package/dist/mcp/__tests__/code-intel-server.test.js +43 -0
  193. package/dist/mcp/__tests__/code-intel-server.test.js.map +1 -0
  194. package/dist/mcp/__tests__/memory-server.test.d.ts +2 -0
  195. package/dist/mcp/__tests__/memory-server.test.d.ts.map +1 -0
  196. package/dist/mcp/__tests__/memory-server.test.js +34 -0
  197. package/dist/mcp/__tests__/memory-server.test.js.map +1 -0
  198. package/dist/mcp/__tests__/memory-validation.test.d.ts +2 -0
  199. package/dist/mcp/__tests__/memory-validation.test.d.ts.map +1 -0
  200. package/dist/mcp/__tests__/memory-validation.test.js +29 -0
  201. package/dist/mcp/__tests__/memory-validation.test.js.map +1 -0
  202. package/dist/mcp/__tests__/path-traversal.test.js +55 -0
  203. package/dist/mcp/__tests__/path-traversal.test.js.map +1 -1
  204. package/dist/mcp/__tests__/state-paths.test.js +43 -6
  205. package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
  206. package/dist/mcp/__tests__/state-server-ralph-phase.test.js +50 -0
  207. package/dist/mcp/__tests__/state-server-ralph-phase.test.js.map +1 -1
  208. package/dist/mcp/__tests__/state-server-schema.test.js +5 -8
  209. package/dist/mcp/__tests__/state-server-schema.test.js.map +1 -1
  210. package/dist/mcp/__tests__/state-server.test.js +30 -1
  211. package/dist/mcp/__tests__/state-server.test.js.map +1 -1
  212. package/dist/mcp/__tests__/trace-server.test.js +58 -0
  213. package/dist/mcp/__tests__/trace-server.test.js.map +1 -1
  214. package/dist/mcp/bootstrap.d.ts +3 -0
  215. package/dist/mcp/bootstrap.d.ts.map +1 -0
  216. package/dist/mcp/bootstrap.js +13 -0
  217. package/dist/mcp/bootstrap.js.map +1 -0
  218. package/dist/mcp/code-intel-server.d.ts +8 -0
  219. package/dist/mcp/code-intel-server.d.ts.map +1 -1
  220. package/dist/mcp/code-intel-server.js +50 -24
  221. package/dist/mcp/code-intel-server.js.map +1 -1
  222. package/dist/mcp/memory-server.js +34 -13
  223. package/dist/mcp/memory-server.js.map +1 -1
  224. package/dist/mcp/memory-validation.d.ts +9 -0
  225. package/dist/mcp/memory-validation.d.ts.map +1 -0
  226. package/dist/mcp/memory-validation.js +11 -0
  227. package/dist/mcp/memory-validation.js.map +1 -0
  228. package/dist/mcp/state-paths.d.ts +2 -0
  229. package/dist/mcp/state-paths.d.ts.map +1 -1
  230. package/dist/mcp/state-paths.js +83 -12
  231. package/dist/mcp/state-paths.js.map +1 -1
  232. package/dist/mcp/state-server.d.ts.map +1 -1
  233. package/dist/mcp/state-server.js +85 -47
  234. package/dist/mcp/state-server.js.map +1 -1
  235. package/dist/mcp/trace-server.d.ts +16 -0
  236. package/dist/mcp/trace-server.d.ts.map +1 -1
  237. package/dist/mcp/trace-server.js +84 -24
  238. package/dist/mcp/trace-server.js.map +1 -1
  239. package/dist/modes/__tests__/base-ralph-contract.test.d.ts +2 -0
  240. package/dist/modes/__tests__/base-ralph-contract.test.d.ts.map +1 -0
  241. package/dist/modes/__tests__/base-ralph-contract.test.js +49 -0
  242. package/dist/modes/__tests__/base-ralph-contract.test.js.map +1 -0
  243. package/dist/modes/__tests__/base-tmux-pane.test.js +13 -1
  244. package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
  245. package/dist/modes/base.d.ts +0 -4
  246. package/dist/modes/base.d.ts.map +1 -1
  247. package/dist/modes/base.js +31 -11
  248. package/dist/modes/base.js.map +1 -1
  249. package/dist/notifications/__tests__/config.test.js +47 -1
  250. package/dist/notifications/__tests__/config.test.js.map +1 -1
  251. package/dist/notifications/__tests__/formatter.test.js +54 -2
  252. package/dist/notifications/__tests__/formatter.test.js.map +1 -1
  253. package/dist/notifications/__tests__/hook-config.test.d.ts +5 -0
  254. package/dist/notifications/__tests__/hook-config.test.d.ts.map +1 -0
  255. package/dist/notifications/__tests__/hook-config.test.js +139 -0
  256. package/dist/notifications/__tests__/hook-config.test.js.map +1 -0
  257. package/dist/notifications/__tests__/idle-cooldown.test.d.ts +5 -0
  258. package/dist/notifications/__tests__/idle-cooldown.test.d.ts.map +1 -0
  259. package/dist/notifications/__tests__/idle-cooldown.test.js +100 -0
  260. package/dist/notifications/__tests__/idle-cooldown.test.js.map +1 -0
  261. package/dist/notifications/__tests__/notifier.test.js +89 -1
  262. package/dist/notifications/__tests__/notifier.test.js.map +1 -1
  263. package/dist/notifications/__tests__/reply-config.test.d.ts +2 -0
  264. package/dist/notifications/__tests__/reply-config.test.d.ts.map +1 -0
  265. package/dist/notifications/__tests__/reply-config.test.js +79 -0
  266. package/dist/notifications/__tests__/reply-config.test.js.map +1 -0
  267. package/dist/notifications/__tests__/reply-listener.test.js +35 -1
  268. package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
  269. package/dist/notifications/__tests__/session-registry.test.js +40 -0
  270. package/dist/notifications/__tests__/session-registry.test.js.map +1 -1
  271. package/dist/notifications/__tests__/template-engine.test.d.ts +5 -0
  272. package/dist/notifications/__tests__/template-engine.test.d.ts.map +1 -0
  273. package/dist/notifications/__tests__/template-engine.test.js +147 -0
  274. package/dist/notifications/__tests__/template-engine.test.js.map +1 -0
  275. package/dist/notifications/config.d.ts +8 -0
  276. package/dist/notifications/config.d.ts.map +1 -1
  277. package/dist/notifications/config.js +110 -19
  278. package/dist/notifications/config.js.map +1 -1
  279. package/dist/notifications/formatter.d.ts +5 -0
  280. package/dist/notifications/formatter.d.ts.map +1 -1
  281. package/dist/notifications/formatter.js +45 -10
  282. package/dist/notifications/formatter.js.map +1 -1
  283. package/dist/notifications/hook-config-types.d.ts +43 -0
  284. package/dist/notifications/hook-config-types.d.ts.map +1 -0
  285. package/dist/notifications/hook-config-types.js +8 -0
  286. package/dist/notifications/hook-config-types.js.map +1 -0
  287. package/dist/notifications/hook-config.d.ts +40 -0
  288. package/dist/notifications/hook-config.d.ts.map +1 -0
  289. package/dist/notifications/hook-config.js +127 -0
  290. package/dist/notifications/hook-config.js.map +1 -0
  291. package/dist/notifications/idle-cooldown.d.ts +35 -0
  292. package/dist/notifications/idle-cooldown.d.ts.map +1 -0
  293. package/dist/notifications/idle-cooldown.js +108 -0
  294. package/dist/notifications/idle-cooldown.js.map +1 -0
  295. package/dist/notifications/index.d.ts +3 -0
  296. package/dist/notifications/index.d.ts.map +1 -1
  297. package/dist/notifications/index.js +43 -1
  298. package/dist/notifications/index.js.map +1 -1
  299. package/dist/notifications/notifier.d.ts +9 -0
  300. package/dist/notifications/notifier.d.ts.map +1 -1
  301. package/dist/notifications/notifier.js +36 -30
  302. package/dist/notifications/notifier.js.map +1 -1
  303. package/dist/notifications/reply-listener.d.ts +3 -0
  304. package/dist/notifications/reply-listener.d.ts.map +1 -1
  305. package/dist/notifications/reply-listener.js +61 -7
  306. package/dist/notifications/reply-listener.js.map +1 -1
  307. package/dist/notifications/session-registry.d.ts +1 -1
  308. package/dist/notifications/session-registry.d.ts.map +1 -1
  309. package/dist/notifications/session-registry.js +18 -6
  310. package/dist/notifications/session-registry.js.map +1 -1
  311. package/dist/notifications/template-engine.d.ts +34 -0
  312. package/dist/notifications/template-engine.d.ts.map +1 -0
  313. package/dist/notifications/template-engine.js +246 -0
  314. package/dist/notifications/template-engine.js.map +1 -0
  315. package/dist/notifications/types.d.ts +6 -0
  316. package/dist/notifications/types.d.ts.map +1 -1
  317. package/dist/openclaw/__tests__/config.test.d.ts +6 -0
  318. package/dist/openclaw/__tests__/config.test.d.ts.map +1 -0
  319. package/dist/openclaw/__tests__/config.test.js +174 -0
  320. package/dist/openclaw/__tests__/config.test.js.map +1 -0
  321. package/dist/openclaw/__tests__/dispatcher.test.d.ts +5 -0
  322. package/dist/openclaw/__tests__/dispatcher.test.d.ts.map +1 -0
  323. package/dist/openclaw/__tests__/dispatcher.test.js +104 -0
  324. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -0
  325. package/dist/openclaw/__tests__/index.test.d.ts +6 -0
  326. package/dist/openclaw/__tests__/index.test.d.ts.map +1 -0
  327. package/dist/openclaw/__tests__/index.test.js +131 -0
  328. package/dist/openclaw/__tests__/index.test.js.map +1 -0
  329. package/dist/openclaw/config.d.ts +37 -0
  330. package/dist/openclaw/config.d.ts.map +1 -0
  331. package/dist/openclaw/config.js +106 -0
  332. package/dist/openclaw/config.js.map +1 -0
  333. package/dist/openclaw/dispatcher.d.ts +63 -0
  334. package/dist/openclaw/dispatcher.d.ts.map +1 -0
  335. package/dist/openclaw/dispatcher.js +223 -0
  336. package/dist/openclaw/dispatcher.js.map +1 -0
  337. package/dist/openclaw/index.d.ts +27 -0
  338. package/dist/openclaw/index.d.ts.map +1 -0
  339. package/dist/openclaw/index.js +130 -0
  340. package/dist/openclaw/index.js.map +1 -0
  341. package/dist/openclaw/types.d.ts +105 -0
  342. package/dist/openclaw/types.d.ts.map +1 -0
  343. package/dist/openclaw/types.js +12 -0
  344. package/dist/openclaw/types.js.map +1 -0
  345. package/dist/ralph/contract.d.ts.map +1 -1
  346. package/dist/ralph/contract.js +13 -4
  347. package/dist/ralph/contract.js.map +1 -1
  348. package/dist/team/__tests__/mcp-comm.test.js +117 -7
  349. package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
  350. package/dist/team/__tests__/phase-controller.test.js +14 -0
  351. package/dist/team/__tests__/phase-controller.test.js.map +1 -1
  352. package/dist/team/__tests__/runtime.test.js +369 -2
  353. package/dist/team/__tests__/runtime.test.js.map +1 -1
  354. package/dist/team/__tests__/scaling.test.d.ts +2 -0
  355. package/dist/team/__tests__/scaling.test.d.ts.map +1 -0
  356. package/dist/team/__tests__/scaling.test.js +295 -0
  357. package/dist/team/__tests__/scaling.test.js.map +1 -0
  358. package/dist/team/__tests__/state.test.js +137 -1
  359. package/dist/team/__tests__/state.test.js.map +1 -1
  360. package/dist/team/__tests__/tmux-session.test.js +156 -8
  361. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  362. package/dist/team/__tests__/worker-bootstrap.test.js +4 -0
  363. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  364. package/dist/team/contracts.d.ts +14 -0
  365. package/dist/team/contracts.d.ts.map +1 -0
  366. package/dist/team/contracts.js +31 -0
  367. package/dist/team/contracts.js.map +1 -0
  368. package/dist/team/mcp-comm.d.ts +28 -4
  369. package/dist/team/mcp-comm.d.ts.map +1 -1
  370. package/dist/team/mcp-comm.js +172 -6
  371. package/dist/team/mcp-comm.js.map +1 -1
  372. package/dist/team/model-contract.d.ts +1 -0
  373. package/dist/team/model-contract.d.ts.map +1 -1
  374. package/dist/team/model-contract.js +5 -1
  375. package/dist/team/model-contract.js.map +1 -1
  376. package/dist/team/phase-controller.d.ts +2 -0
  377. package/dist/team/phase-controller.d.ts.map +1 -1
  378. package/dist/team/phase-controller.js +16 -2
  379. package/dist/team/phase-controller.js.map +1 -1
  380. package/dist/team/runtime.d.ts.map +1 -1
  381. package/dist/team/runtime.js +715 -102
  382. package/dist/team/runtime.js.map +1 -1
  383. package/dist/team/scaling.d.ts +58 -0
  384. package/dist/team/scaling.d.ts.map +1 -0
  385. package/dist/team/scaling.js +396 -0
  386. package/dist/team/scaling.js.map +1 -0
  387. package/dist/team/state.d.ts +63 -2
  388. package/dist/team/state.d.ts.map +1 -1
  389. package/dist/team/state.js +395 -30
  390. package/dist/team/state.js.map +1 -1
  391. package/dist/team/team-ops.d.ts +10 -1
  392. package/dist/team/team-ops.d.ts.map +1 -1
  393. package/dist/team/team-ops.js +11 -0
  394. package/dist/team/team-ops.js.map +1 -1
  395. package/dist/team/tmux-session.d.ts +18 -4
  396. package/dist/team/tmux-session.d.ts.map +1 -1
  397. package/dist/team/tmux-session.js +110 -32
  398. package/dist/team/tmux-session.js.map +1 -1
  399. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  400. package/dist/team/worker-bootstrap.js +20 -0
  401. package/dist/team/worker-bootstrap.js.map +1 -1
  402. package/dist/utils/__tests__/paths.test.js +8 -1
  403. package/dist/utils/__tests__/paths.test.js.map +1 -1
  404. package/dist/utils/paths.d.ts.map +1 -1
  405. package/dist/utils/paths.js +14 -6
  406. package/dist/utils/paths.js.map +1 -1
  407. package/dist/verification/__tests__/verifier.test.js +20 -1
  408. package/dist/verification/__tests__/verifier.test.js.map +1 -1
  409. package/dist/verification/verifier.d.ts +5 -0
  410. package/dist/verification/verifier.d.ts.map +1 -1
  411. package/dist/verification/verifier.js +19 -0
  412. package/dist/verification/verifier.js.map +1 -1
  413. package/package.json +2 -1
  414. package/prompts/architect.md +11 -0
  415. package/prompts/critic.md +14 -1
  416. package/prompts/planner.md +21 -0
  417. package/scripts/notify-fallback-watcher.js +4 -0
  418. package/scripts/notify-hook/auto-nudge.js +80 -1
  419. package/scripts/notify-hook/payload-parser.js +21 -0
  420. package/scripts/notify-hook/team-dispatch.js +274 -0
  421. package/scripts/notify-hook/team-worker.js +142 -0
  422. package/scripts/notify-hook/tmux-injection.js +3 -3
  423. package/scripts/notify-hook.js +66 -4
  424. package/skills/configure-notifications/SKILL.md +278 -0
  425. package/skills/configure-openclaw/SKILL.md +267 -0
  426. package/skills/configure-slack/SKILL.md +226 -0
  427. package/skills/omx-setup/SKILL.md +14 -19
  428. package/skills/plan/SKILL.md +57 -33
  429. package/skills/ralplan/SKILL.md +107 -21
  430. package/skills/team/SKILL.md +3 -2
  431. package/skills/worker/SKILL.md +4 -0
  432. package/templates/AGENTS.md +11 -3
package/README.md CHANGED
@@ -65,7 +65,7 @@ omx --xhigh --madmax
65
65
 
66
66
  ## New in v0.5.0
67
67
 
68
- - **Scope-aware setup** with `omx setup --scope user|project-local|project` for flexible install modes.
68
+ - **Scope-aware setup** with `omx setup --scope user|project` for flexible install modes.
69
69
  - **Spark worker routing** via `--spark` / `--madmax-spark` so team workers can use `gpt-5.3-codex-spark` without forcing the leader model.
70
70
  - **Catalog consolidation** — removed deprecated prompts (`deep-executor`, `scientist`) and 9 deprecated skills for a leaner surface.
71
71
  - **Notifier verbosity levels** for fine-grained CCNotifier output control.
@@ -141,12 +141,23 @@ See `docs/hooks-extension.md` for the full extension workflow and event model.
141
141
  --force
142
142
  --dry-run
143
143
  --verbose
144
- --scope <user|project-local|project> # setup only
144
+ --scope <user|project> # setup only
145
145
  ```
146
146
 
147
147
  `--madmax` maps to Codex `--dangerously-bypass-approvals-and-sandbox`.
148
148
  Use it only in trusted/external sandbox environments.
149
149
 
150
+ ### MCP workingDirectory policy (optional hardening)
151
+
152
+ By default, MCP state/memory/trace tools accept caller-provided `workingDirectory`.
153
+ To constrain this, set an allowlist of roots:
154
+
155
+ ```bash
156
+ export OMX_MCP_WORKDIR_ROOTS="/path/to/project:/path/to/another-root"
157
+ ```
158
+
159
+ When set, `workingDirectory` values outside these roots are rejected.
160
+
150
161
  ## Codex-First Prompt Control
151
162
 
152
163
  By default, OMX injects:
@@ -207,11 +218,10 @@ Notes:
207
218
  - `.omx/setup-scope.json` (persisted setup scope)
208
219
  - Scope-dependent installs:
209
220
  - `user`: `~/.codex/prompts/`, `~/.agents/skills/`, `~/.codex/config.toml`, `~/.omx/agents/`
210
- - `project-local`: `./.codex/prompts/`, `./.agents/skills/`, `./.codex/config.toml`, `./.omx/agents/`
211
- - `project`: skips prompt/skill/config/native-agent installs
212
- - Launch behavior: if persisted scope is `project-local`, `omx` launch auto-uses `CODEX_HOME=./.codex` (unless `CODEX_HOME` is already set).
213
- - Existing `AGENTS.md` is preserved unless `--force` is used (and active-session safety checks still apply).
214
- - `config.toml` updates (for `user`/`project-local` scopes):
221
+ - `project`: `./.codex/prompts/`, `./.agents/skills/`, `./.codex/config.toml`, `./.omx/agents/`
222
+ - Launch behavior: if persisted scope is `project`, `omx` launch auto-uses `CODEX_HOME=./.codex` (unless `CODEX_HOME` is already set).
223
+ - Existing `AGENTS.md` is preserved by default. In interactive TTY runs, setup prompts before overwrite; `--force` overwrites without prompt (active-session safety checks still apply).
224
+ - `config.toml` updates (for both scopes):
215
225
  - `notify = ["node", "..."]`
216
226
  - `model_reasoning_effort = "high"`
217
227
  - `developer_instructions = "..."`
@@ -223,8 +233,8 @@ Notes:
223
233
 
224
234
  ## Agents and Skills
225
235
 
226
- - Prompts: `prompts/*.md` (installed to `~/.codex/prompts/` for `user`, `./.codex/prompts/` for `project-local`)
227
- - Skills: `skills/*/SKILL.md` (installed to `~/.agents/skills/` for `user`, `./.agents/skills/` for `project-local`)
236
+ - Prompts: `prompts/*.md` (installed to `~/.codex/prompts/` for `user`, `./.codex/prompts/` for `project`)
237
+ - Skills: `skills/*/SKILL.md` (installed to `~/.agents/skills/` for `user`, `./.agents/skills/` for `project`)
228
238
 
229
239
  Examples:
230
240
  - Agents: `architect`, `planner`, `executor`, `debugger`, `verifier`, `security-reviewer`
package/bin/omx.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // oh-my-codex CLI entry point
4
- // Supports both compiled (dist/) and direct TypeScript execution
4
+ // Requires compiled JavaScript output in dist/
5
5
 
6
6
  import { fileURLToPath } from 'url';
7
7
  import { dirname, join } from 'path';
@@ -11,16 +11,14 @@ const __filename = fileURLToPath(import.meta.url);
11
11
  const __dirname = dirname(__filename);
12
12
  const root = join(__dirname, '..');
13
13
 
14
- // Try compiled first, fall back to source
14
+ // Execute compiled entrypoint
15
15
  const distEntry = join(root, 'dist', 'cli', 'index.js');
16
- const srcEntry = join(root, 'src', 'cli', 'index.ts');
17
16
 
18
17
  if (existsSync(distEntry)) {
19
18
  const { main } = await import(distEntry);
20
19
  await main(process.argv.slice(2));
21
20
  process.exit(process.exitCode ?? 0);
22
21
  } else {
23
- // Direct TS execution requires tsx or similar
24
- console.error('oh-my-codex: run "npm run build" first, or use tsx/ts-node');
22
+ console.error('oh-my-codex: run "npm run build" first');
25
23
  process.exit(1);
26
24
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=definitions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.test.d.ts","sourceRoot":"","sources":["../../../src/agents/__tests__/definitions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { AGENT_DEFINITIONS, getAgent, getAgentNames, getAgentsByCategory, } from '../definitions.js';
4
+ describe('agents/definitions', () => {
5
+ it('returns known agents and undefined for unknown names', () => {
6
+ assert.equal(getAgent('executor'), AGENT_DEFINITIONS.executor);
7
+ assert.equal(getAgent('does-not-exist'), undefined);
8
+ });
9
+ it('keeps key/name contract aligned', () => {
10
+ const names = getAgentNames();
11
+ assert.ok(names.length > 20, 'expected non-trivial agent catalog');
12
+ for (const name of names) {
13
+ const agent = AGENT_DEFINITIONS[name];
14
+ assert.equal(agent.name, name);
15
+ assert.ok(agent.description.length > 0);
16
+ }
17
+ });
18
+ it('filters agents by category', () => {
19
+ const buildAgents = getAgentsByCategory('build');
20
+ assert.ok(buildAgents.length > 0);
21
+ assert.ok(buildAgents.some((agent) => agent.name === 'executor'));
22
+ const allowed = [
23
+ 'build',
24
+ 'review',
25
+ 'domain',
26
+ 'product',
27
+ 'coordination',
28
+ ];
29
+ for (const category of allowed) {
30
+ const agents = getAgentsByCategory(category);
31
+ assert.ok(agents.every((agent) => agent.category === category));
32
+ }
33
+ });
34
+ });
35
+ //# sourceMappingURL=definitions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.test.js","sourceRoot":"","sources":["../../../src/agents/__tests__/definitions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,oCAAoC,CAAC,CAAC;QAEnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;QAElE,MAAM,OAAO,GAAkC;YAC7C,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,SAAS;YACT,cAAc;SACf,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=native-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-config.test.d.ts","sourceRoot":"","sources":["../../../src/agents/__tests__/native-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
4
+ import { existsSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { tmpdir } from 'node:os';
7
+ import { generateAgentToml, installNativeAgentConfigs } from '../native-config.js';
8
+ describe('agents/native-config', () => {
9
+ it('generates TOML with stripped frontmatter and escaped triple quotes', () => {
10
+ const agent = {
11
+ name: 'executor',
12
+ description: 'Code implementation',
13
+ model: 'sonnet',
14
+ tools: 'execution',
15
+ category: 'build',
16
+ };
17
+ const prompt = `---\ntitle: demo\n---\n\nInstruction line\n\"\"\"danger\"\"\"`;
18
+ const toml = generateAgentToml(agent, prompt);
19
+ assert.match(toml, /# oh-my-codex agent: executor/);
20
+ assert.match(toml, /model_reasoning_effort = "medium"/);
21
+ assert.ok(!toml.includes('title: demo'));
22
+ assert.ok(toml.includes('Instruction line'));
23
+ const tripleQuoteBlocks = toml.match(/"""/g) || [];
24
+ assert.equal(tripleQuoteBlocks.length, 2, 'only TOML delimiters should remain as raw triple quotes');
25
+ });
26
+ it('installs only agents with prompt files and skips existing files without force', async () => {
27
+ const root = await mkdtemp(join(tmpdir(), 'omx-native-config-'));
28
+ const promptsDir = join(root, 'prompts');
29
+ const outDir = join(root, 'agents-out');
30
+ try {
31
+ await mkdir(promptsDir, { recursive: true });
32
+ await writeFile(join(promptsDir, 'executor.md'), 'executor prompt');
33
+ await writeFile(join(promptsDir, 'planner.md'), 'planner prompt');
34
+ const created = await installNativeAgentConfigs(root, { agentsDir: outDir });
35
+ assert.equal(created, 2);
36
+ assert.equal(existsSync(join(outDir, 'executor.toml')), true);
37
+ assert.equal(existsSync(join(outDir, 'planner.toml')), true);
38
+ const executorToml = await readFile(join(outDir, 'executor.toml'), 'utf8');
39
+ assert.match(executorToml, /model_reasoning_effort = "medium"/);
40
+ const skipped = await installNativeAgentConfigs(root, { agentsDir: outDir });
41
+ assert.equal(skipped, 0);
42
+ }
43
+ finally {
44
+ await rm(root, { recursive: true, force: true });
45
+ }
46
+ });
47
+ });
48
+ //# sourceMappingURL=native-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-config.test.js","sourceRoot":"","sources":["../../../src/agents/__tests__/native-config.test.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,21 @@ describe('catalog schema', () => {
21
21
  broken.skills[idx].status = 'deprecated';
22
22
  assert.throws(() => validateCatalogManifest(broken), /missing_core_skill:team/);
23
23
  });
24
+ it('requires canonical for alias/merged skill entries', () => {
25
+ const broken = JSON.parse(JSON.stringify(readSourceManifest()));
26
+ const idx = broken.skills.findIndex((s) => s.status === 'alias');
27
+ delete broken.skills[idx].canonical;
28
+ assert.throws(() => validateCatalogManifest(broken), /skills\[\d+\]\.canonical/);
29
+ });
30
+ it('requires canonical for alias/merged agent entries', () => {
31
+ const broken = JSON.parse(JSON.stringify(readSourceManifest()));
32
+ broken.agents.push({
33
+ name: 'tmp-merged-agent',
34
+ category: 'build',
35
+ status: 'merged',
36
+ });
37
+ assert.throws(() => validateCatalogManifest(broken), /agents\[\d+\]\.canonical/);
38
+ });
24
39
  it('summarizes counts', () => {
25
40
  const parsed = validateCatalogManifest(readSourceManifest());
26
41
  const counts = summarizeCatalogCounts(parsed);
@@ -1 +1 @@
1
- {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../src/catalog/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE/E,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../src/catalog/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE/E,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;QAEpC,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EACrC,0BAA0B,CAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EACrC,0BAA0B,CAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/catalog/schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AACrF,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;AAC9F,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAiBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAuFvE;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,aAAa,CAO/E"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/catalog/schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AACrF,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;AAC9F,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAiBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CA+FvE;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,aAAa,CAO/E"}
@@ -41,6 +41,9 @@ export function validateCatalogManifest(input) {
41
41
  const canonical = typeof entry.canonical === 'string' && entry.canonical.trim() !== ''
42
42
  ? entry.canonical.trim()
43
43
  : undefined;
44
+ if ((entry.status === 'alias' || entry.status === 'merged') && !canonical) {
45
+ throw new Error(`catalog_manifest_invalid:skills[${index}].canonical`);
46
+ }
44
47
  return {
45
48
  name,
46
49
  category: entry.category,
@@ -70,6 +73,9 @@ export function validateCatalogManifest(input) {
70
73
  const canonical = typeof entry.canonical === 'string' && entry.canonical.trim() !== ''
71
74
  ? entry.canonical.trim()
72
75
  : undefined;
76
+ if ((entry.status === 'alias' || entry.status === 'merged') && !canonical) {
77
+ throw new Error(`catalog_manifest_invalid:agents[${index}].canonical`);
78
+ }
73
79
  return {
74
80
  name,
75
81
  category: entry.category,
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/catalog/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/catalog/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=catalog-contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-contract.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/catalog-contract.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { getCatalogExpectations, getCatalogHeadlineCounts } from '../catalog-contract.js';
4
+ describe('cli/catalog-contract', () => {
5
+ it('derives expectations from current manifest counts', () => {
6
+ const headline = getCatalogHeadlineCounts();
7
+ assert.ok(headline, 'expected catalog headline counts when manifest exists');
8
+ const expectations = getCatalogExpectations();
9
+ assert.equal(expectations.promptMin, Math.max(1, headline.prompts - 2));
10
+ assert.equal(expectations.skillMin, Math.max(1, headline.skills - 2));
11
+ });
12
+ it('never returns non-positive minimum expectations', () => {
13
+ const expectations = getCatalogExpectations();
14
+ assert.ok(expectations.promptMin >= 1);
15
+ assert.ok(expectations.skillMin >= 1);
16
+ });
17
+ });
18
+ //# sourceMappingURL=catalog-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-contract.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/catalog-contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAE1F,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,uDAAuD,CAAC,CAAC;QAE7E,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -111,7 +111,7 @@ describe('omx doctor --team', () => {
111
111
  await rm(wd, { recursive: true, force: true });
112
112
  }
113
113
  });
114
- it('prints orphan_tmux_session when tmux session exists without matching team state', async () => {
114
+ it('prints orphan_tmux_session as warning when tmux session cannot be attributed', async () => {
115
115
  const wd = await mkdtemp(join(tmpdir(), 'omx-doctor-team-'));
116
116
  try {
117
117
  const fakeBin = join(wd, 'bin');
@@ -122,8 +122,9 @@ describe('omx doctor --team', () => {
122
122
  const res = runOmx(wd, ['doctor', '--team'], { PATH: `${fakeBin}:${process.env.PATH || ''}` });
123
123
  if (shouldSkipForSpawnPermissions(res.error))
124
124
  return;
125
- assert.equal(res.status, 1, res.stderr || res.stdout);
125
+ assert.equal(res.status, 0, res.stderr || res.stdout);
126
126
  assert.match(res.stdout, /orphan_tmux_session/);
127
+ assert.match(res.stdout, /possibly external project/);
127
128
  }
128
129
  finally {
129
130
  await rm(wd, { recursive: true, force: true });
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-team.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/doctor-team.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-team.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/doctor-team.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=error-handling-warnings.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handling-warnings.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/error-handling-warnings.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { readFile } from 'node:fs/promises';
4
+ import { join } from 'node:path';
5
+ async function readSource(relativePath) {
6
+ return readFile(join(process.cwd(), relativePath), 'utf8');
7
+ }
8
+ describe('error-handling warning guards', () => {
9
+ it('removes silent shutdown mode-state swallow in team command', async () => {
10
+ const source = await readSource('src/cli/team.ts');
11
+ assert.match(source, /failed to persist team mode shutdown state/);
12
+ assert.ok(!source.includes("completed_at: new Date().toISOString(),\n }).catch(() => {});"));
13
+ });
14
+ it('uses warning logs for watcher lifecycle best-effort failures', async () => {
15
+ const source = await readSource('src/cli/index.ts');
16
+ assert.ok(!source.includes("await mkdir(join(cwd, '.omx', 'state'), { recursive: true }).catch(() => {});"));
17
+ assert.ok(!source.includes('await unlink(pidPath).catch(() => {});'));
18
+ assert.match(source, /failed to write notify fallback watcher pid file/);
19
+ assert.match(source, /failed to write hook-derived watcher pid file/);
20
+ assert.match(source, /failed to remove notify fallback watcher pid file/);
21
+ assert.match(source, /failed to remove hook-derived watcher pid file/);
22
+ });
23
+ it('replaces silent log-write catches with warning logs', async () => {
24
+ const loggingSource = await readSource('src/hooks/extensibility/logging.ts');
25
+ const dispatchSource = await readSource('src/hooks/extensibility/dispatcher.ts');
26
+ const keywordSource = await readSource('src/hooks/keyword-detector.ts');
27
+ assert.ok(!loggingSource.includes('.catch(() => {});'));
28
+ assert.ok(!dispatchSource.includes('.catch(() => {});'));
29
+ assert.ok(!keywordSource.includes('.catch(() => {});'));
30
+ assert.match(loggingSource, /failed to append hook plugin log entry/);
31
+ assert.match(dispatchSource, /failed to append hook dispatch log entry/);
32
+ assert.match(keywordSource, /failed to persist keyword activation state/);
33
+ });
34
+ });
35
+ //# sourceMappingURL=error-handling-warnings.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handling-warnings.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/error-handling-warnings.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,KAAK,UAAU,UAAU,CAAC,YAAoB;IAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,4CAA4C,CAAC,CAAC;QACnE,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,kEAAkE,CAAC,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAEpD,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,+EAA+E,CAAC,CAAC,CAAC;QAC7G,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAEtE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kDAAkD,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,+CAA+C,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,mDAAmD,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,oCAAoC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,uCAAuC,CAAC,CAAC;QACjF,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,+BAA+B,CAAC,CAAC;QAExE,MAAM,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAExD,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,wCAAwC,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,0CAA0C,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,4CAA4C,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -3,7 +3,7 @@ import assert from 'node:assert/strict';
3
3
  import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
4
4
  import { join } from 'node:path';
5
5
  import { tmpdir } from 'node:os';
6
- import { normalizeCodexLaunchArgs, buildTmuxShellCommand, buildTmuxSessionName, resolveCliInvocation, resolveCodexLaunchPolicy, parseTmuxPaneSnapshot, findHudWatchPaneIds, buildHudPaneCleanupTargets, readTopLevelTomlString, upsertTopLevelTomlString, collectInheritableTeamWorkerArgs, resolveTeamWorkerLaunchArgsEnv, injectModelInstructionsBypassArgs, resolveWorkerSparkModel, resolveSetupScopeArg, readPersistedSetupScope, resolveCodexHomeForLaunch, buildDetachedSessionBootstrapSteps, buildDetachedSessionFinalizeSteps, buildDetachedSessionRollbackSteps, } from '../index.js';
6
+ import { normalizeCodexLaunchArgs, buildTmuxShellCommand, buildTmuxSessionName, resolveCliInvocation, resolveCodexLaunchPolicy, classifyCodexExecFailure, resolveSignalExitCode, parseTmuxPaneSnapshot, findHudWatchPaneIds, buildHudPaneCleanupTargets, readTopLevelTomlString, upsertTopLevelTomlString, collectInheritableTeamWorkerArgs, resolveTeamWorkerLaunchArgsEnv, injectModelInstructionsBypassArgs, resolveWorkerSparkModel, resolveSetupScopeArg, readPersistedSetupScope, resolveCodexHomeForLaunch, buildDetachedSessionBootstrapSteps, buildDetachedSessionFinalizeSteps, buildDetachedSessionRollbackSteps, } from '../index.js';
7
7
  import { HUD_TMUX_HEIGHT_LINES } from '../../hud/constants.js';
8
8
  describe('normalizeCodexLaunchArgs', () => {
9
9
  it('maps --madmax to codex bypass flag', () => {
@@ -78,6 +78,16 @@ describe('resolveWorkerSparkModel', () => {
78
78
  it('returns undefined for empty args', () => {
79
79
  assert.equal(resolveWorkerSparkModel([]), undefined);
80
80
  });
81
+ it('reads low-complexity team model from config when codexHomeOverride is provided', async () => {
82
+ const codexHome = await mkdtemp(join(tmpdir(), 'omx-codex-home-'));
83
+ try {
84
+ await writeFile(join(codexHome, '.omx-config.json'), JSON.stringify({ models: { team_low_complexity: 'gpt-4.1-mini' } }));
85
+ assert.equal(resolveWorkerSparkModel(['--spark'], codexHome), 'gpt-4.1-mini');
86
+ }
87
+ finally {
88
+ await rm(codexHome, { recursive: true, force: true });
89
+ }
90
+ });
81
91
  });
82
92
  describe('resolveTeamWorkerLaunchArgsEnv (spark)', () => {
83
93
  it('injects spark model as worker default when no explicit env model', () => {
@@ -115,7 +125,7 @@ describe('resolveSetupScopeArg', () => {
115
125
  assert.equal(resolveSetupScopeArg(['--dry-run']), undefined);
116
126
  });
117
127
  it('parses --scope <value> form', () => {
118
- assert.equal(resolveSetupScopeArg(['--dry-run', '--scope', 'project-local']), 'project-local');
128
+ assert.equal(resolveSetupScopeArg(['--dry-run', '--scope', 'project']), 'project');
119
129
  });
120
130
  it('parses --scope=<value> form', () => {
121
131
  assert.equal(resolveSetupScopeArg(['--scope=project']), 'project');
@@ -127,13 +137,13 @@ describe('resolveSetupScopeArg', () => {
127
137
  assert.throws(() => resolveSetupScopeArg(['--scope']), /Missing setup scope value after --scope/);
128
138
  });
129
139
  });
130
- describe('project-local launch scope helpers', () => {
140
+ describe('project launch scope helpers', () => {
131
141
  it('reads persisted setup scope when valid', async () => {
132
142
  const wd = await mkdtemp(join(tmpdir(), 'omx-launch-scope-'));
133
143
  try {
134
144
  await mkdir(join(wd, '.omx'), { recursive: true });
135
- await writeFile(join(wd, '.omx', 'setup-scope.json'), JSON.stringify({ scope: 'project-local' }));
136
- assert.equal(readPersistedSetupScope(wd), 'project-local');
145
+ await writeFile(join(wd, '.omx', 'setup-scope.json'), JSON.stringify({ scope: 'project' }));
146
+ assert.equal(readPersistedSetupScope(wd), 'project');
137
147
  }
138
148
  finally {
139
149
  await rm(wd, { recursive: true, force: true });
@@ -150,11 +160,11 @@ describe('project-local launch scope helpers', () => {
150
160
  await rm(wd, { recursive: true, force: true });
151
161
  }
152
162
  });
153
- it('uses project-local CODEX_HOME when persisted scope is project-local', async () => {
163
+ it('uses project CODEX_HOME when persisted scope is project', async () => {
154
164
  const wd = await mkdtemp(join(tmpdir(), 'omx-launch-scope-'));
155
165
  try {
156
166
  await mkdir(join(wd, '.omx'), { recursive: true });
157
- await writeFile(join(wd, '.omx', 'setup-scope.json'), JSON.stringify({ scope: 'project-local' }));
167
+ await writeFile(join(wd, '.omx', 'setup-scope.json'), JSON.stringify({ scope: 'project' }));
158
168
  assert.equal(resolveCodexHomeForLaunch(wd, {}), join(wd, '.codex'));
159
169
  }
160
170
  finally {
@@ -165,13 +175,35 @@ describe('project-local launch scope helpers', () => {
165
175
  const wd = await mkdtemp(join(tmpdir(), 'omx-launch-scope-'));
166
176
  try {
167
177
  await mkdir(join(wd, '.omx'), { recursive: true });
168
- await writeFile(join(wd, '.omx', 'setup-scope.json'), JSON.stringify({ scope: 'project-local' }));
178
+ await writeFile(join(wd, '.omx', 'setup-scope.json'), JSON.stringify({ scope: 'project' }));
169
179
  assert.equal(resolveCodexHomeForLaunch(wd, { CODEX_HOME: '/tmp/explicit-codex-home' }), '/tmp/explicit-codex-home');
170
180
  }
171
181
  finally {
172
182
  await rm(wd, { recursive: true, force: true });
173
183
  }
174
184
  });
185
+ it('migrates legacy "project-local" persisted scope to "project"', async () => {
186
+ const wd = await mkdtemp(join(tmpdir(), 'omx-launch-scope-'));
187
+ try {
188
+ await mkdir(join(wd, '.omx'), { recursive: true });
189
+ await writeFile(join(wd, '.omx', 'setup-scope.json'), JSON.stringify({ scope: 'project-local' }));
190
+ assert.equal(readPersistedSetupScope(wd), 'project');
191
+ }
192
+ finally {
193
+ await rm(wd, { recursive: true, force: true });
194
+ }
195
+ });
196
+ it('resolves CODEX_HOME for legacy "project-local" persisted scope', async () => {
197
+ const wd = await mkdtemp(join(tmpdir(), 'omx-launch-scope-'));
198
+ try {
199
+ await mkdir(join(wd, '.omx'), { recursive: true });
200
+ await writeFile(join(wd, '.omx', 'setup-scope.json'), JSON.stringify({ scope: 'project-local' }));
201
+ assert.equal(resolveCodexHomeForLaunch(wd, {}), join(wd, '.codex'));
202
+ }
203
+ finally {
204
+ await rm(wd, { recursive: true, force: true });
205
+ }
206
+ });
175
207
  });
176
208
  describe('resolveCodexLaunchPolicy', () => {
177
209
  it('launches directly when outside tmux', () => {
@@ -181,6 +213,27 @@ describe('resolveCodexLaunchPolicy', () => {
181
213
  assert.equal(resolveCodexLaunchPolicy({ TMUX: '/tmp/tmux-1000/default,123,0' }), 'inside-tmux');
182
214
  });
183
215
  });
216
+ describe('classifyCodexExecFailure', () => {
217
+ it('classifies child process exit status as codex exit', () => {
218
+ const err = Object.assign(new Error('codex exited 9'), { status: 9 });
219
+ const classified = classifyCodexExecFailure(err);
220
+ assert.equal(classified.kind, 'exit');
221
+ assert.equal(classified.exitCode, 9);
222
+ });
223
+ it('classifies signal termination as codex exit and maps to signal-based exit code', () => {
224
+ const err = Object.assign(new Error('terminated'), { status: null, signal: 'SIGTERM' });
225
+ const classified = classifyCodexExecFailure(err);
226
+ assert.equal(classified.kind, 'exit');
227
+ assert.equal(classified.signal, 'SIGTERM');
228
+ assert.equal(classified.exitCode, resolveSignalExitCode('SIGTERM'));
229
+ });
230
+ it('classifies ENOENT as launch error', () => {
231
+ const err = Object.assign(new Error('spawn codex ENOENT'), { code: 'ENOENT' });
232
+ const classified = classifyCodexExecFailure(err);
233
+ assert.equal(classified.kind, 'launch-error');
234
+ assert.equal(classified.code, 'ENOENT');
235
+ });
236
+ });
184
237
  describe('tmux HUD pane helpers', () => {
185
238
  it('findHudWatchPaneIds detects stale HUD watch panes and excludes current pane', () => {
186
239
  const panes = parseTmuxPaneSnapshot([
@@ -228,6 +281,18 @@ describe('detached tmux new-session sequencing', () => {
228
281
  assert.equal(names.includes('register-resize-hook'), true);
229
282
  assert.equal(names.includes('reconcile-hud-resize'), true);
230
283
  });
284
+ it('buildDetachedSessionFinalizeSteps uses quiet best-effort tmux resize commands', () => {
285
+ const steps = buildDetachedSessionFinalizeSteps('omx-demo', '%12', '3', false, false);
286
+ const registerHook = steps.find((step) => step.name === 'register-resize-hook');
287
+ const schedule = steps.find((step) => step.name === 'schedule-delayed-resize');
288
+ const reconcile = steps.find((step) => step.name === 'reconcile-hud-resize');
289
+ assert.match(registerHook?.args[4] ?? '', />\/dev\/null 2>&1 \|\| true/);
290
+ assert.match(registerHook?.args[4] ?? '', new RegExp(`-y ${HUD_TMUX_HEIGHT_LINES}\\b`));
291
+ assert.match(schedule?.args[2] ?? '', />\/dev\/null 2>&1 \|\| true/);
292
+ assert.match(schedule?.args[2] ?? '', new RegExp(`-y ${HUD_TMUX_HEIGHT_LINES}\\b`));
293
+ assert.match((reconcile?.args ?? []).join(' '), />\/dev\/null 2>&1 \|\| true/);
294
+ assert.match((reconcile?.args ?? []).join(' '), new RegExp(`-y ${HUD_TMUX_HEIGHT_LINES}\\b`));
295
+ });
231
296
  it('buildDetachedSessionRollbackSteps unregisters hooks before killing session', () => {
232
297
  const steps = buildDetachedSessionRollbackSteps('omx-demo', 'omx-demo:0', 'omx_resize_launch_demo_0_12', 'omx_attached_launch_demo_0_12');
233
298
  assert.deepEqual(steps.map((step) => step.name), ['unregister-client-attached-reconcile', 'unregister-resize-hook', 'kill-session']);
@@ -260,6 +325,14 @@ describe('buildTmuxSessionName', () => {
260
325
  assert.equal(name.includes('_'), false);
261
326
  assert.equal(name.includes(' '), false);
262
327
  });
328
+ it('includes repo name when cwd is inside .omx-worktrees', () => {
329
+ const name = buildTmuxSessionName('/home/user/my-repo.omx-worktrees/launch-feature-x', 'omx-123-abc');
330
+ assert.match(name, /^omx-my-repo-launch-feature-x-/);
331
+ });
332
+ it('includes repo name for detached worktree paths', () => {
333
+ const name = buildTmuxSessionName('/projects/cool-project.omx-worktrees/launch-detached', 'omx-456-def');
334
+ assert.match(name, /^omx-cool-project-launch-detached-/);
335
+ });
263
336
  });
264
337
  describe('team worker launch arg inheritance helpers', () => {
265
338
  it('collectInheritableTeamWorkerArgs extracts bypass, reasoning, and model overrides', () => {