oh-my-codex 0.7.6 → 0.8.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 (376) hide show
  1. package/README.de.md +315 -0
  2. package/README.es.md +296 -17
  3. package/README.fr.md +315 -0
  4. package/README.it.md +315 -0
  5. package/README.ja.md +297 -18
  6. package/README.ko.md +296 -17
  7. package/README.md +110 -13
  8. package/README.pt.md +296 -17
  9. package/README.ru.md +296 -17
  10. package/README.tr.md +315 -0
  11. package/README.vi.md +297 -18
  12. package/README.zh-TW.md +362 -0
  13. package/README.zh.md +293 -17
  14. package/dist/catalog/__tests__/generator.test.js +2 -0
  15. package/dist/catalog/__tests__/generator.test.js.map +1 -1
  16. package/dist/catalog/__tests__/schema.test.js +7 -0
  17. package/dist/catalog/__tests__/schema.test.js.map +1 -1
  18. package/dist/cli/__tests__/ask.test.d.ts +2 -0
  19. package/dist/cli/__tests__/ask.test.d.ts.map +1 -0
  20. package/dist/cli/__tests__/ask.test.js +236 -0
  21. package/dist/cli/__tests__/ask.test.js.map +1 -0
  22. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts +2 -0
  23. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts.map +1 -0
  24. package/dist/cli/__tests__/doctor-warning-copy.test.js +45 -0
  25. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -0
  26. package/dist/cli/__tests__/index.test.js +85 -2
  27. package/dist/cli/__tests__/index.test.js.map +1 -1
  28. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts +2 -0
  29. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts.map +1 -0
  30. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +15 -0
  31. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -0
  32. package/dist/cli/__tests__/ralph.test.js +19 -43
  33. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  34. package/dist/cli/__tests__/setup-scope.test.js +2 -0
  35. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  36. package/dist/cli/__tests__/team.test.js +219 -1
  37. package/dist/cli/__tests__/team.test.js.map +1 -1
  38. package/dist/cli/__tests__/version.test.d.ts +2 -0
  39. package/dist/cli/__tests__/version.test.d.ts.map +1 -0
  40. package/dist/cli/__tests__/version.test.js +21 -0
  41. package/dist/cli/__tests__/version.test.js.map +1 -0
  42. package/dist/cli/ask.d.ts +13 -0
  43. package/dist/cli/ask.d.ts.map +1 -0
  44. package/dist/cli/ask.js +174 -0
  45. package/dist/cli/ask.js.map +1 -0
  46. package/dist/cli/constants.d.ts +10 -0
  47. package/dist/cli/constants.d.ts.map +1 -0
  48. package/dist/cli/constants.js +10 -0
  49. package/dist/cli/constants.js.map +1 -0
  50. package/dist/cli/doctor.js +16 -5
  51. package/dist/cli/doctor.js.map +1 -1
  52. package/dist/cli/index.d.ts +8 -2
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +150 -52
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/ralph.d.ts +3 -11
  57. package/dist/cli/ralph.d.ts.map +1 -1
  58. package/dist/cli/ralph.js +64 -45
  59. package/dist/cli/ralph.js.map +1 -1
  60. package/dist/cli/setup.d.ts.map +1 -1
  61. package/dist/cli/setup.js +17 -18
  62. package/dist/cli/setup.js.map +1 -1
  63. package/dist/cli/team.d.ts.map +1 -1
  64. package/dist/cli/team.js +257 -0
  65. package/dist/cli/team.js.map +1 -1
  66. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts +2 -0
  67. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts.map +1 -0
  68. package/dist/hooks/__tests__/deep-interview-contract.test.js +55 -0
  69. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -0
  70. package/dist/hooks/__tests__/emulator.test.js +6 -0
  71. package/dist/hooks/__tests__/emulator.test.js.map +1 -1
  72. package/dist/hooks/__tests__/keyword-detector.test.js +44 -22
  73. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  74. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +23 -7
  75. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  76. package/dist/hooks/__tests__/notify-hook-session-scope.test.js +59 -0
  77. package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
  78. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +264 -1
  79. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  80. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +61 -1
  81. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  82. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +17 -7
  83. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  84. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts +2 -0
  85. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts.map +1 -0
  86. package/dist/hooks/__tests__/openclaw-setup-contract.test.js +61 -0
  87. package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +1 -0
  88. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts +2 -0
  89. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts.map +1 -0
  90. package/dist/hooks/__tests__/pre-context-gate-skills.test.js +34 -0
  91. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -0
  92. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts +2 -0
  93. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts.map +1 -0
  94. package/dist/hooks/__tests__/visual-verdict-loop.test.js +35 -0
  95. package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -0
  96. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  97. package/dist/hooks/agents-overlay.js +18 -16
  98. package/dist/hooks/agents-overlay.js.map +1 -1
  99. package/dist/hooks/codebase-map.d.ts.map +1 -1
  100. package/dist/hooks/codebase-map.js +6 -2
  101. package/dist/hooks/codebase-map.js.map +1 -1
  102. package/dist/hooks/emulator.d.ts.map +1 -1
  103. package/dist/hooks/emulator.js +2 -0
  104. package/dist/hooks/emulator.js.map +1 -1
  105. package/dist/hooks/extensibility/sdk.d.ts.map +1 -1
  106. package/dist/hooks/extensibility/sdk.js +2 -1
  107. package/dist/hooks/extensibility/sdk.js.map +1 -1
  108. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  109. package/dist/hooks/keyword-registry.js +6 -0
  110. package/dist/hooks/keyword-registry.js.map +1 -1
  111. package/dist/hud/index.d.ts.map +1 -1
  112. package/dist/hud/index.js +2 -24
  113. package/dist/hud/index.js.map +1 -1
  114. package/dist/mcp/__tests__/path-traversal.test.js +9 -227
  115. package/dist/mcp/__tests__/path-traversal.test.js.map +1 -1
  116. package/dist/mcp/__tests__/state-server-schema.test.js +16 -20
  117. package/dist/mcp/__tests__/state-server-schema.test.js.map +1 -1
  118. package/dist/mcp/__tests__/state-server-team-tools.test.js +30 -487
  119. package/dist/mcp/__tests__/state-server-team-tools.test.js.map +1 -1
  120. package/dist/mcp/code-intel-server.d.ts.map +1 -1
  121. package/dist/mcp/code-intel-server.js +18 -8
  122. package/dist/mcp/code-intel-server.js.map +1 -1
  123. package/dist/mcp/memory-server.js +72 -11
  124. package/dist/mcp/memory-server.js.map +1 -1
  125. package/dist/mcp/state-paths.d.ts.map +1 -1
  126. package/dist/mcp/state-paths.js +4 -1
  127. package/dist/mcp/state-paths.js.map +1 -1
  128. package/dist/mcp/state-server.d.ts +179 -0
  129. package/dist/mcp/state-server.d.ts.map +1 -1
  130. package/dist/mcp/state-server.js +221 -1111
  131. package/dist/mcp/state-server.js.map +1 -1
  132. package/dist/mcp/team-server.d.ts.map +1 -1
  133. package/dist/mcp/team-server.js +9 -3
  134. package/dist/mcp/team-server.js.map +1 -1
  135. package/dist/mcp/trace-server.d.ts.map +1 -1
  136. package/dist/mcp/trace-server.js +8 -3
  137. package/dist/mcp/trace-server.js.map +1 -1
  138. package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts +5 -0
  139. package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts.map +1 -0
  140. package/dist/notifications/__tests__/dispatch-cooldown.test.js +100 -0
  141. package/dist/notifications/__tests__/dispatch-cooldown.test.js.map +1 -0
  142. package/dist/notifications/__tests__/temp-mode.test.d.ts +2 -0
  143. package/dist/notifications/__tests__/temp-mode.test.d.ts.map +1 -0
  144. package/dist/notifications/__tests__/temp-mode.test.js +172 -0
  145. package/dist/notifications/__tests__/temp-mode.test.js.map +1 -0
  146. package/dist/notifications/config.d.ts.map +1 -1
  147. package/dist/notifications/config.js +67 -7
  148. package/dist/notifications/config.js.map +1 -1
  149. package/dist/notifications/dispatch-cooldown.d.ts +36 -0
  150. package/dist/notifications/dispatch-cooldown.d.ts.map +1 -0
  151. package/dist/notifications/dispatch-cooldown.js +109 -0
  152. package/dist/notifications/dispatch-cooldown.js.map +1 -0
  153. package/dist/notifications/dispatcher.d.ts.map +1 -1
  154. package/dist/notifications/dispatcher.js +4 -4
  155. package/dist/notifications/dispatcher.js.map +1 -1
  156. package/dist/notifications/index.d.ts +5 -0
  157. package/dist/notifications/index.d.ts.map +1 -1
  158. package/dist/notifications/index.js +39 -8
  159. package/dist/notifications/index.js.map +1 -1
  160. package/dist/notifications/reply-listener.d.ts.map +1 -1
  161. package/dist/notifications/reply-listener.js +6 -2
  162. package/dist/notifications/reply-listener.js.map +1 -1
  163. package/dist/notifications/session-registry.d.ts.map +1 -1
  164. package/dist/notifications/session-registry.js +2 -2
  165. package/dist/notifications/session-registry.js.map +1 -1
  166. package/dist/notifications/temp-contract.d.ts +22 -0
  167. package/dist/notifications/temp-contract.d.ts.map +1 -0
  168. package/dist/notifications/temp-contract.js +147 -0
  169. package/dist/notifications/temp-contract.js.map +1 -0
  170. package/dist/notifications/tmux.js +2 -2
  171. package/dist/notifications/tmux.js.map +1 -1
  172. package/dist/notifications/types.d.ts +18 -0
  173. package/dist/notifications/types.d.ts.map +1 -1
  174. package/dist/openclaw/__tests__/config.test.js +81 -0
  175. package/dist/openclaw/__tests__/config.test.js.map +1 -1
  176. package/dist/openclaw/__tests__/dispatcher.test.js +40 -1
  177. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  178. package/dist/openclaw/config.d.ts +4 -0
  179. package/dist/openclaw/config.d.ts.map +1 -1
  180. package/dist/openclaw/config.js +110 -16
  181. package/dist/openclaw/config.js.map +1 -1
  182. package/dist/openclaw/dispatcher.d.ts +9 -3
  183. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  184. package/dist/openclaw/dispatcher.js +42 -9
  185. package/dist/openclaw/dispatcher.js.map +1 -1
  186. package/dist/openclaw/types.d.ts +5 -1
  187. package/dist/openclaw/types.d.ts.map +1 -1
  188. package/dist/ralph/__tests__/persistence.test.js +28 -1
  189. package/dist/ralph/__tests__/persistence.test.js.map +1 -1
  190. package/dist/ralph/persistence.d.ts +21 -0
  191. package/dist/ralph/persistence.d.ts.map +1 -1
  192. package/dist/ralph/persistence.js +85 -2
  193. package/dist/ralph/persistence.js.map +1 -1
  194. package/dist/state/paths.d.ts +3 -0
  195. package/dist/state/paths.d.ts.map +1 -0
  196. package/dist/state/paths.js +2 -0
  197. package/dist/state/paths.js.map +1 -0
  198. package/dist/team/__tests__/api-interop.test.d.ts +2 -0
  199. package/dist/team/__tests__/api-interop.test.d.ts.map +1 -0
  200. package/dist/team/__tests__/api-interop.test.js +1052 -0
  201. package/dist/team/__tests__/api-interop.test.js.map +1 -0
  202. package/dist/team/__tests__/idle-nudge.test.d.ts +2 -0
  203. package/dist/team/__tests__/idle-nudge.test.d.ts.map +1 -0
  204. package/dist/team/__tests__/idle-nudge.test.js +225 -0
  205. package/dist/team/__tests__/idle-nudge.test.js.map +1 -0
  206. package/dist/team/__tests__/mcp-comm.test.js +30 -0
  207. package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
  208. package/dist/team/__tests__/runtime.test.js +33 -26
  209. package/dist/team/__tests__/runtime.test.js.map +1 -1
  210. package/dist/team/__tests__/state-root.test.d.ts +2 -0
  211. package/dist/team/__tests__/state-root.test.d.ts.map +1 -0
  212. package/dist/team/__tests__/state-root.test.js +9 -0
  213. package/dist/team/__tests__/state-root.test.js.map +1 -0
  214. package/dist/team/__tests__/state.test.js +52 -17
  215. package/dist/team/__tests__/state.test.js.map +1 -1
  216. package/dist/team/__tests__/team-ops-contract.test.d.ts +2 -0
  217. package/dist/team/__tests__/team-ops-contract.test.d.ts.map +1 -0
  218. package/dist/team/__tests__/team-ops-contract.test.js +90 -0
  219. package/dist/team/__tests__/team-ops-contract.test.js.map +1 -0
  220. package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts +2 -0
  221. package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts.map +1 -0
  222. package/dist/team/__tests__/tmux-claude-workers-demo.test.js +176 -0
  223. package/dist/team/__tests__/tmux-claude-workers-demo.test.js.map +1 -0
  224. package/dist/team/__tests__/tmux-session.test.js +8 -0
  225. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  226. package/dist/team/__tests__/worker-bootstrap.test.js +29 -0
  227. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  228. package/dist/team/__tests__/worktree.test.js +54 -1
  229. package/dist/team/__tests__/worktree.test.js.map +1 -1
  230. package/dist/team/api-interop.d.ts +19 -0
  231. package/dist/team/api-interop.d.ts.map +1 -0
  232. package/dist/team/api-interop.js +578 -0
  233. package/dist/team/api-interop.js.map +1 -0
  234. package/dist/team/mcp-comm.d.ts.map +1 -1
  235. package/dist/team/mcp-comm.js +32 -2
  236. package/dist/team/mcp-comm.js.map +1 -1
  237. package/dist/team/orchestrator.d.ts +1 -10
  238. package/dist/team/orchestrator.d.ts.map +1 -1
  239. package/dist/team/orchestrator.js +8 -0
  240. package/dist/team/orchestrator.js.map +1 -1
  241. package/dist/team/runtime-cli.js +14 -8
  242. package/dist/team/runtime-cli.js.map +1 -1
  243. package/dist/team/runtime.d.ts +2 -1
  244. package/dist/team/runtime.d.ts.map +1 -1
  245. package/dist/team/runtime.js +103 -30
  246. package/dist/team/runtime.js.map +1 -1
  247. package/dist/team/scaling.d.ts.map +1 -1
  248. package/dist/team/scaling.js +33 -12
  249. package/dist/team/scaling.js.map +1 -1
  250. package/dist/team/state/approvals.d.ts +25 -0
  251. package/dist/team/state/approvals.d.ts.map +1 -0
  252. package/dist/team/state/approvals.js +31 -0
  253. package/dist/team/state/approvals.js.map +1 -0
  254. package/dist/team/state/config.d.ts +2 -0
  255. package/dist/team/state/config.d.ts.map +1 -0
  256. package/dist/team/state/config.js +2 -0
  257. package/dist/team/state/config.js.map +1 -0
  258. package/dist/team/state/dispatch-lock.d.ts +3 -0
  259. package/dist/team/state/dispatch-lock.d.ts.map +1 -0
  260. package/dist/team/state/dispatch-lock.js +81 -0
  261. package/dist/team/state/dispatch-lock.js.map +1 -0
  262. package/dist/team/state/dispatch.d.ts +61 -0
  263. package/dist/team/state/dispatch.d.ts.map +1 -0
  264. package/dist/team/state/dispatch.js +158 -0
  265. package/dist/team/state/dispatch.js.map +1 -0
  266. package/dist/team/state/events.d.ts +2 -0
  267. package/dist/team/state/events.d.ts.map +1 -0
  268. package/dist/team/state/events.js +2 -0
  269. package/dist/team/state/events.js.map +1 -0
  270. package/dist/team/state/index.d.ts +11 -0
  271. package/dist/team/state/index.d.ts.map +1 -0
  272. package/dist/team/state/index.js +11 -0
  273. package/dist/team/state/index.js.map +1 -0
  274. package/dist/team/state/io.d.ts +2 -0
  275. package/dist/team/state/io.d.ts.map +1 -0
  276. package/dist/team/state/io.js +2 -0
  277. package/dist/team/state/io.js.map +1 -0
  278. package/dist/team/state/locks.d.ts +16 -0
  279. package/dist/team/state/locks.d.ts.map +1 -0
  280. package/dist/team/state/locks.js +201 -0
  281. package/dist/team/state/locks.js.map +1 -0
  282. package/dist/team/state/mailbox.d.ts +39 -0
  283. package/dist/team/state/mailbox.d.ts.map +1 -0
  284. package/dist/team/state/mailbox.js +58 -0
  285. package/dist/team/state/mailbox.js.map +1 -0
  286. package/dist/team/state/monitor.d.ts +96 -0
  287. package/dist/team/state/monitor.d.ts.map +1 -0
  288. package/dist/team/state/monitor.js +163 -0
  289. package/dist/team/state/monitor.js.map +1 -0
  290. package/dist/team/state/shutdown.d.ts +2 -0
  291. package/dist/team/state/shutdown.d.ts.map +1 -0
  292. package/dist/team/state/shutdown.js +2 -0
  293. package/dist/team/state/shutdown.js.map +1 -0
  294. package/dist/team/state/summary.d.ts +2 -0
  295. package/dist/team/state/summary.d.ts.map +1 -0
  296. package/dist/team/state/summary.js +2 -0
  297. package/dist/team/state/summary.js.map +1 -0
  298. package/dist/team/state/tasks.d.ts +49 -0
  299. package/dist/team/state/tasks.d.ts.map +1 -0
  300. package/dist/team/state/tasks.js +182 -0
  301. package/dist/team/state/tasks.js.map +1 -0
  302. package/dist/team/state/types.d.ts +281 -0
  303. package/dist/team/state/types.d.ts.map +1 -0
  304. package/dist/team/state/types.js +3 -0
  305. package/dist/team/state/types.js.map +1 -0
  306. package/dist/team/state/workers.d.ts +2 -0
  307. package/dist/team/state/workers.d.ts.map +1 -0
  308. package/dist/team/state/workers.js +2 -0
  309. package/dist/team/state/workers.js.map +1 -0
  310. package/dist/team/state-root.d.ts +5 -0
  311. package/dist/team/state-root.d.ts.map +1 -0
  312. package/dist/team/state-root.js +8 -0
  313. package/dist/team/state-root.js.map +1 -0
  314. package/dist/team/state.d.ts +4 -1
  315. package/dist/team/state.d.ts.map +1 -1
  316. package/dist/team/state.js +200 -881
  317. package/dist/team/state.js.map +1 -1
  318. package/dist/team/tmux-session.d.ts.map +1 -1
  319. package/dist/team/tmux-session.js +11 -10
  320. package/dist/team/tmux-session.js.map +1 -1
  321. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  322. package/dist/team/worker-bootstrap.js +58 -26
  323. package/dist/team/worker-bootstrap.js.map +1 -1
  324. package/dist/team/worktree.d.ts.map +1 -1
  325. package/dist/team/worktree.js +43 -1
  326. package/dist/team/worktree.js.map +1 -1
  327. package/dist/utils/safe-json.d.ts +3 -0
  328. package/dist/utils/safe-json.d.ts.map +1 -0
  329. package/dist/utils/safe-json.js +19 -0
  330. package/dist/utils/safe-json.js.map +1 -0
  331. package/dist/utils/sleep.d.ts +3 -0
  332. package/dist/utils/sleep.d.ts.map +1 -0
  333. package/dist/utils/sleep.js +15 -0
  334. package/dist/utils/sleep.js.map +1 -0
  335. package/dist/visual/__tests__/verdict.test.d.ts +2 -0
  336. package/dist/visual/__tests__/verdict.test.d.ts.map +1 -0
  337. package/dist/visual/__tests__/verdict.test.js +81 -0
  338. package/dist/visual/__tests__/verdict.test.js.map +1 -0
  339. package/dist/visual/constants.d.ts +4 -0
  340. package/dist/visual/constants.d.ts.map +1 -0
  341. package/dist/visual/constants.js +3 -0
  342. package/dist/visual/constants.js.map +1 -0
  343. package/dist/visual/verdict.d.ts +17 -0
  344. package/dist/visual/verdict.d.ts.map +1 -0
  345. package/dist/visual/verdict.js +61 -0
  346. package/dist/visual/verdict.js.map +1 -0
  347. package/package.json +10 -3
  348. package/scripts/ask-claude.sh +17 -0
  349. package/scripts/ask-gemini.sh +14 -0
  350. package/scripts/demo-claude-workers.sh +241 -0
  351. package/scripts/demo-team-e2e.sh +179 -0
  352. package/scripts/fixtures/ask-advisor-stub.js +12 -0
  353. package/scripts/notify-hook/team-dispatch.js +234 -12
  354. package/scripts/notify-hook/team-leader-nudge.js +42 -2
  355. package/scripts/notify-hook/team-worker.js +63 -4
  356. package/scripts/notify-hook/visual-verdict.js +50 -1
  357. package/scripts/notify-hook.js +1 -0
  358. package/scripts/run-provider-advisor.js +179 -0
  359. package/skills/ask-claude/SKILL.md +61 -0
  360. package/skills/ask-gemini/SKILL.md +61 -0
  361. package/skills/autopilot/SKILL.md +32 -2
  362. package/skills/configure-notifications/SKILL.md +188 -186
  363. package/skills/deep-interview/SKILL.md +247 -0
  364. package/skills/omx-setup/SKILL.md +1 -1
  365. package/skills/ralph/SKILL.md +42 -11
  366. package/skills/ralplan/SKILL.md +17 -0
  367. package/skills/team/SKILL.md +64 -5
  368. package/skills/visual-verdict/SKILL.md +76 -0
  369. package/skills/web-clone/SKILL.md +366 -0
  370. package/skills/worker/SKILL.md +42 -11
  371. package/templates/AGENTS.md +9 -0
  372. package/templates/catalog-manifest.json +39 -18
  373. package/skills/configure-discord/SKILL.md +0 -256
  374. package/skills/configure-openclaw/SKILL.md +0 -267
  375. package/skills/configure-slack/SKILL.md +0 -226
  376. package/skills/configure-telegram/SKILL.md +0 -232
@@ -24,255 +24,257 @@ triggers:
24
24
 
25
25
  # Configure OMX Notifications
26
26
 
27
- Unified entry point for setting up notifications across all supported platforms.
28
- OMX can notify you on Discord, Telegram, Slack, or your own OpenClaw gateway.
27
+ Unified and only entry point for notification setup.
29
28
 
30
- ## How This Skill Works
29
+ - **Native integrations (first-class):** Discord, Telegram, Slack
30
+ - **Generic extensibility integrations:** `custom_webhook_command`, `custom_cli_command`
31
31
 
32
- This skill detects what's already configured, presents a menu, and delegates to the
33
- appropriate platform skill. It also handles cross-cutting settings like verbosity,
34
- notification profiles, reply listener, and idle cooldown.
32
+ > Standalone configure skills (`configure-discord`, `configure-telegram`, `configure-slack`, `configure-openclaw`) are removed.
35
33
 
36
- ## Step 1: Detect Currently Configured Platforms
34
+ ## Step 1: Inspect Current State
37
35
 
38
36
  ```bash
39
37
  CONFIG_FILE="$HOME/.codex/.omx-config.json"
40
38
 
41
39
  if [ -f "$CONFIG_FILE" ]; then
42
- DISCORD_ENABLED=$(jq -r '.notifications.discord.enabled // false' "$CONFIG_FILE" 2>/dev/null)
43
- DISCORD_BOT_ENABLED=$(jq -r '.notifications["discord-bot"].enabled // false' "$CONFIG_FILE" 2>/dev/null)
44
- TELEGRAM_ENABLED=$(jq -r '.notifications.telegram.enabled // false' "$CONFIG_FILE" 2>/dev/null)
45
- SLACK_ENABLED=$(jq -r '.notifications.slack.enabled // false' "$CONFIG_FILE" 2>/dev/null)
46
- OPENCLAW_ENABLED=$(jq -r '.notifications.openclaw.enabled // false' "$CONFIG_FILE" 2>/dev/null)
47
- NOTIF_ENABLED=$(jq -r '.notifications.enabled // false' "$CONFIG_FILE" 2>/dev/null)
48
- VERBOSITY=$(jq -r '.notifications.verbosity // "session"' "$CONFIG_FILE" 2>/dev/null)
49
- COOLDOWN=$(jq -r '.notifications.idleCooldownSeconds // 60' "$CONFIG_FILE" 2>/dev/null)
50
- REPLY_ENABLED=$(jq -r '.notifications.reply.enabled // false' "$CONFIG_FILE" 2>/dev/null)
51
-
52
- echo "NOTIF_ENABLED=$NOTIF_ENABLED"
53
- echo "DISCORD_ENABLED=$DISCORD_ENABLED"
54
- echo "DISCORD_BOT_ENABLED=$DISCORD_BOT_ENABLED"
55
- echo "TELEGRAM_ENABLED=$TELEGRAM_ENABLED"
56
- echo "SLACK_ENABLED=$SLACK_ENABLED"
57
- echo "OPENCLAW_ENABLED=$OPENCLAW_ENABLED"
58
- echo "VERBOSITY=$VERBOSITY"
59
- echo "COOLDOWN=$COOLDOWN"
60
- echo "REPLY_ENABLED=$REPLY_ENABLED"
40
+ jq -r '
41
+ {
42
+ notifications_enabled: (.notifications.enabled // false),
43
+ discord: (.notifications.discord.enabled // false),
44
+ discord_bot: (.notifications["discord-bot"].enabled // false),
45
+ telegram: (.notifications.telegram.enabled // false),
46
+ slack: (.notifications.slack.enabled // false),
47
+ openclaw: (.notifications.openclaw.enabled // false),
48
+ custom_webhook_command: (.notifications.custom_webhook_command.enabled // false),
49
+ custom_cli_command: (.notifications.custom_cli_command.enabled // false),
50
+ verbosity: (.notifications.verbosity // "session"),
51
+ idleCooldownSeconds: (.notifications.idleCooldownSeconds // 60),
52
+ reply_enabled: (.notifications.reply.enabled // false)
53
+ }
54
+ ' "$CONFIG_FILE"
61
55
  else
62
56
  echo "NO_CONFIG_FILE"
63
57
  fi
64
58
  ```
65
59
 
66
- ## Step 2: Show Current Status and Main Menu
60
+ ## Step 2: Main Menu
67
61
 
68
- Display a summary of what's configured:
69
-
70
- ```
71
- OMX Notification Status
72
- ───────────────────────
73
- Discord webhook: enabled / not configured
74
- Discord bot: enabled / not configured
75
- Telegram: enabled / not configured
76
- Slack: enabled / not configured
77
- OpenClaw: enabled / not configured
78
-
79
- Verbosity: session (default)
80
- Idle cooldown: 60s
81
- Reply listener: disabled
82
- ```
83
-
84
- Then use AskUserQuestion:
62
+ Use AskUserQuestion:
85
63
 
86
64
  **Question:** "What would you like to configure?"
87
65
 
88
66
  **Options:**
89
- 1. **Discord** - Webhook or bot notifications to Discord channels
90
- 2. **Telegram** - Bot notifications to personal or group chats
91
- 3. **Slack** - Incoming webhook notifications to Slack channels
92
- 4. **OpenClaw** - Self-hosted HTTP or CLI command gateway
93
- 5. **Cross-cutting settings** - Verbosity, idle cooldown, profiles, reply listener
94
- 6. **Disable all notifications** - Turn off all notification dispatching
67
+ 1. **Discord (native)** - webhook or bot
68
+ 2. **Telegram (native)** - bot token + chat id
69
+ 3. **Slack (native)** - incoming webhook
70
+ 4. **Generic webhook command** - `custom_webhook_command`
71
+ 5. **Generic CLI command** - `custom_cli_command`
72
+ 6. **Cross-cutting settings** - verbosity, idle cooldown, profiles, reply listener
73
+ 7. **Disable all notifications** - set `notifications.enabled = false`
95
74
 
96
- ## Step 3: Delegate to Platform Skill
75
+ ## Step 3: Configure Native Platforms (Discord / Telegram / Slack)
97
76
 
98
- Based on the user's choice, invoke the appropriate platform skill:
77
+ Collect and validate platform-specific values, then write directly under native keys:
99
78
 
100
- - **Discord** invoke `/configure-discord`
101
- - **Telegram** invoke `/configure-telegram`
102
- - **Slack** → invoke `/configure-slack`
103
- - **OpenClaw** → invoke `/configure-openclaw`
104
- - **Cross-cutting settings** → continue with Step 4 below
105
- - **Disable all** → continue with Step 5 below
79
+ - Discord webhook: `notifications.discord`
80
+ - Discord bot: `notifications["discord-bot"]`
81
+ - Telegram: `notifications.telegram`
82
+ - Slack: `notifications.slack`
106
83
 
107
- When delegating, say: "Starting the [Platform] configuration wizard..." and invoke the skill.
84
+ Do not write these as generic command/webhook aliases.
108
85
 
109
- ## Step 4: Cross-Cutting Settings
86
+ ## Step 4: Configure Generic Extensibility
110
87
 
111
- If the user chose "Cross-cutting settings":
88
+ ### 4a) `custom_webhook_command`
112
89
 
113
- ### 4a. Verbosity
90
+ Use AskUserQuestion to collect:
91
+ - URL
92
+ - Optional headers
93
+ - Optional method (`POST` default, or `PUT`)
94
+ - Optional event list (`session-end`, `ask-user-question`, `session-start`, `session-idle`, `stop`)
95
+ - Optional instruction template
114
96
 
115
- Use AskUserQuestion:
97
+ Write:
116
98
 
117
- **Question:** "How verbose should notifications be?"
99
+ ```bash
100
+ jq \
101
+ --arg url "$URL" \
102
+ --arg method "${METHOD:-POST}" \
103
+ --arg instruction "${INSTRUCTION:-OMX event {{event}} for {{projectPath}}}" \
104
+ '.notifications = (.notifications // {enabled: true}) |
105
+ .notifications.enabled = true |
106
+ .notifications.custom_webhook_command = {
107
+ enabled: true,
108
+ url: $url,
109
+ method: $method,
110
+ instruction: $instruction,
111
+ events: ["session-end", "ask-user-question"]
112
+ }' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
113
+ ```
118
114
 
119
- **Options:**
120
- 1. **session (Recommended)** - Start, idle, stop, end events + tmux snippet
121
- 2. **minimal** - Start, stop, end only (no idle events, no tmux tail)
122
- 3. **agent** - All session events plus ask-user-question prompts
123
- 4. **verbose** - Everything including tool call output
115
+ ### 4b) `custom_cli_command`
124
116
 
125
- Write verbosity to config:
117
+ Use AskUserQuestion to collect:
118
+ - Command template (supports `{{event}}`, `{{instruction}}`, `{{sessionId}}`, `{{projectPath}}`)
119
+ - Optional event list
120
+ - Optional instruction template
121
+
122
+ Write:
126
123
 
127
124
  ```bash
128
- echo "$(cat "$CONFIG_FILE")" | jq \
129
- --arg verbosity "$VERBOSITY" \
130
- '.notifications.verbosity = $verbosity' > "$CONFIG_FILE"
125
+ jq \
126
+ --arg command "$COMMAND_TEMPLATE" \
127
+ --arg instruction "${INSTRUCTION:-OMX event {{event}} for {{projectPath}}}" \
128
+ '.notifications = (.notifications // {enabled: true}) |
129
+ .notifications.enabled = true |
130
+ .notifications.custom_cli_command = {
131
+ enabled: true,
132
+ command: $command,
133
+ instruction: $instruction,
134
+ events: ["session-end", "ask-user-question"]
135
+ }' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
131
136
  ```
132
137
 
133
- Env var alternative: `OMX_NOTIFY_VERBOSITY=session`
138
+ > Activation gate: OpenClaw-backed dispatch is active only when `OMX_OPENCLAW=1`.
139
+ > For command gateways, also require `OMX_OPENCLAW_COMMAND=1`.
140
+ > Optional timeout env override: `OMX_OPENCLAW_COMMAND_TIMEOUT_MS` (ms).
134
141
 
135
- ### 4b. Idle Notification Cooldown
142
+ ### 4b-1) OpenClaw + Clawdbot Agent Workflow (recommended for dev)
136
143
 
137
- Use AskUserQuestion:
144
+ If the user explicitly asks to route hook notifications through **clawdbot agent turns**
145
+ (not direct message/webhook forwarding), use a command gateway that invokes
146
+ `clawdbot agent` and delivers back to Discord.
138
147
 
139
- **Question:** "How often should idle notifications fire at most? (in seconds)"
148
+ Notes:
149
+ - Hook name mapping is intentional: notifications `session-stop` -> OpenClaw hook `stop`.
150
+ - OMX shell-escapes template substitutions for command gateways (including `{{instruction}}`).
151
+ - Keep `instruction` templates concise and avoid untrusted shell metacharacters.
152
+ - During troubleshooting, avoid swallowing command output; route it to a log file.
153
+ - Timeout precedence: `gateways.<name>.timeout` > `OMX_OPENCLAW_COMMAND_TIMEOUT_MS` > `5000`.
154
+ - For clawdbot agent workflows, set `gateways.<name>.timeout` to `120000` (recommended).
155
+ - For dev operations, enforce Korean output in all hook instructions.
156
+ - Include both `session={{sessionId}}` and `tmux={{tmuxSession}}` in hook text for traceability.
157
+ - If follow-up is needed, explicitly instruct clawdbot to consult `SOUL.md` and continue in `#omc-dev`.
140
158
 
141
- **Options:**
142
- 1. **60 seconds (default)** - At most once per minute
143
- 2. **300 seconds** - At most once per 5 minutes
144
- 3. **0 (disabled)** - Send every turn with no throttling
145
- 4. **Custom** - Enter a number of seconds
146
-
147
- Write the cooldown to config:
159
+ Example (targeting `#omc-dev`):
148
160
 
149
161
  ```bash
150
- echo "$(cat "$CONFIG_FILE")" | jq \
151
- --argjson cooldown "$COOLDOWN_SECONDS" \
152
- '.notifications.idleCooldownSeconds = $cooldown' > "$CONFIG_FILE"
162
+ jq \
163
+ --arg command "(clawdbot agent --session-id omx-hooks --message {{instruction}} --thinking minimal --deliver --reply-channel discord --reply-to '#omc-dev' --timeout 120 --json >/tmp/omx-openclaw-agent.log 2>&1)" \
164
+ '.notifications = (.notifications // {enabled: true}) |
165
+ .notifications.enabled = true |
166
+ .notifications.verbosity = "verbose" |
167
+ .notifications.events = (.notifications.events // {}) |
168
+ .notifications.events["session-start"] = {enabled: true} |
169
+ .notifications.events["session-idle"] = {enabled: true} |
170
+ .notifications.events["ask-user-question"] = {enabled: true} |
171
+ .notifications.events["session-stop"] = {enabled: true} |
172
+ .notifications.events["session-end"] = {enabled: true} |
173
+ .notifications.openclaw = (.notifications.openclaw // {}) |
174
+ .notifications.openclaw.enabled = true |
175
+ .notifications.openclaw.gateways = (.notifications.openclaw.gateways // {}) |
176
+ .notifications.openclaw.gateways["local"] = {
177
+ type: "command",
178
+ command: $command,
179
+ timeout: 120000
180
+ } |
181
+ .notifications.openclaw.hooks = (.notifications.openclaw.hooks // {}) |
182
+ .notifications.openclaw.hooks["session-start"] = {
183
+ enabled: true,
184
+ gateway: "local",
185
+ instruction: "OMX hook=session-start project={{projectName}} session={{sessionId}} tmux={{tmuxSession}}. 한국어로 상태를 공유하고 SOUL.md를 참고해 필요한 후속 조치를 #omc-dev에 안내하세요."
186
+ } |
187
+ .notifications.openclaw.hooks["session-idle"] = {
188
+ enabled: true,
189
+ gateway: "local",
190
+ instruction: "OMX hook=session-idle project={{projectName}} session={{sessionId}} tmux={{tmuxSession}}. 한국어로 idle 상황을 간단히 공유하고 진행중인 작업 팔로업을 안내하세요."
191
+ } |
192
+ .notifications.openclaw.hooks["ask-user-question"] = {
193
+ enabled: true,
194
+ gateway: "local",
195
+ instruction: "OMX hook=ask-user-question session={{sessionId}} tmux={{tmuxSession}} question={{question}}. 한국어로 사용자 응답 필요를 #omc-dev에 알리고 즉시 액션 아이템을 제시하세요."
196
+ } |
197
+ .notifications.openclaw.hooks["stop"] = {
198
+ enabled: true,
199
+ gateway: "local",
200
+ instruction: "OMX hook=session-stop project={{projectName}} session={{sessionId}} tmux={{tmuxSession}}. 한국어로 중단 상태와 정리 액션을 SOUL.md 기준으로 전달하세요."
201
+ } |
202
+ .notifications.openclaw.hooks["session-end"] = {
203
+ enabled: true,
204
+ gateway: "local",
205
+ instruction: "OMX hook=session-end project={{projectName}} session={{sessionId}} tmux={{tmuxSession}} reason={{reason}}. 한국어로 완료 요약을 1줄로 남기고 필요한 후속 조치를 안내하세요."
206
+ }' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
153
207
  ```
154
208
 
155
- Env var alternative: `OMX_IDLE_COOLDOWN_SECONDS=60`
156
-
157
- ### 4c. Notification Profiles
209
+ Verification for this mode:
158
210
 
159
- Explain that profiles let the user have different notification configs per context:
160
-
161
- ```
162
- Notification Profiles
163
- ─────────────────────
164
- Profiles let you switch notification targets based on context.
165
- For example: a "work" profile for your work Slack, a "personal"
166
- profile for your personal Telegram.
167
-
168
- Activate a profile with: OMX_NOTIFY_PROFILE=work
169
- or set a default: .omx-config.json > notifications.defaultProfile
211
+ ```bash
212
+ clawdbot agent --session-id omx-hooks --message "OMX hook test via clawdbot agent path" \
213
+ --thinking minimal --deliver --reply-channel discord --reply-to '#omc-dev' --timeout 120 --json
170
214
  ```
171
215
 
172
- Use AskUserQuestion:
173
-
174
- **Question:** "Would you like to configure notification profiles?"
175
-
176
- **Options:**
177
- 1. **Yes** - Set up named profiles
178
- 2. **No, use flat config** - Keep the current single-config setup
179
-
180
- If yes, guide the user to manually add profiles under `notifications.profiles` in `.omx-config.json`, and set `defaultProfile`.
216
+ Dev runbook (Korean + tmux follow-up):
181
217
 
182
- ### 4d. Reply Listener
218
+ ```bash
219
+ # 1) identify active OMX tmux sessions
220
+ tmux list-sessions -F '#{session_name}' | rg '^omx-' || true
183
221
 
184
- Explain the reply listener:
222
+ # 2) confirm hook templates include session/tmux context
223
+ jq '.notifications.openclaw.hooks' "$CONFIG_FILE"
185
224
 
186
- ```
187
- Reply Listener
188
- ──────────────
189
- The reply listener lets you send messages back to Codex from
190
- Discord (bot) or Telegram. When OMX asks for input, you can
191
- reply directly from your phone or messaging app.
192
-
193
- Requires:
194
- - Discord Bot or Telegram platform configured
195
- - OMX_REPLY_ENABLED=true in your shell profile
196
- - For Discord: OMX_REPLY_DISCORD_USER_IDS=<your user ID>
197
- (only messages from these IDs are accepted for security)
225
+ # 3) inspect agent logs when delivery looks broken
226
+ tail -n 120 /tmp/omx-openclaw-agent.log
198
227
  ```
199
228
 
200
- Use AskUserQuestion:
229
+ ### 4c) Compatibility + precedence contract
201
230
 
202
- **Question:** "Would you like to enable the reply listener?"
231
+ OMX accepts both:
232
+ - explicit `notifications.openclaw` schema (legacy/runtime shape)
233
+ - generic aliases (`custom_webhook_command`, `custom_cli_command`)
203
234
 
204
- **Options:**
205
- 1. **Yes** - Enable two-way communication from Discord/Telegram
206
- 2. **No** - Keep notifications one-way only
235
+ Deterministic precedence:
236
+ 1. `notifications.openclaw` **wins** when present and valid.
237
+ 2. Generic aliases are ignored in that case (with warning).
207
238
 
208
- If yes, write to config:
239
+ ## Step 5: Cross-Cutting Settings
209
240
 
210
- ```bash
211
- echo "$(cat "$CONFIG_FILE")" | jq \
212
- '.notifications.reply = (.notifications.reply // {}) |
213
- .notifications.reply.enabled = true' > "$CONFIG_FILE"
214
- ```
215
-
216
- And remind them to set `OMX_REPLY_ENABLED=true` and (for Discord) `OMX_REPLY_DISCORD_USER_IDS`.
241
+ ### Verbosity
242
+ - minimal / session (recommended) / agent / verbose
217
243
 
218
- ## Step 5: Disable All Notifications
244
+ ### Idle cooldown
245
+ - `notifications.idleCooldownSeconds`
219
246
 
220
- If the user chose "Disable all notifications":
247
+ ### Profiles
248
+ - `notifications.profiles`
249
+ - `notifications.defaultProfile`
221
250
 
222
- Use AskUserQuestion:
251
+ ### Reply listener
252
+ - `notifications.reply.enabled`
253
+ - env gates: `OMX_REPLY_ENABLED=true`, and for Discord `OMX_REPLY_DISCORD_USER_IDS=...`
223
254
 
224
- **Question:** "Are you sure you want to disable all notifications?"
225
-
226
- **Options:**
227
- 1. **Yes, disable all** - Set notifications.enabled = false
228
- 2. **No, go back** - Return to the main menu
229
-
230
- If confirmed:
255
+ ## Step 6: Disable All Notifications
231
256
 
232
257
  ```bash
233
- echo "$(cat "$CONFIG_FILE")" | jq \
234
- '.notifications.enabled = false' > "$CONFIG_FILE"
258
+ jq '.notifications.enabled = false' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
235
259
  ```
236
260
 
237
- Confirm: "Notifications disabled. Re-enable anytime by running /configure-notifications."
238
-
239
- ## Step 6: After Configuration
240
-
241
- After completing any platform or setting configuration, offer to configure another:
242
-
243
- Use AskUserQuestion:
261
+ ## Step 7: Verification Guidance
244
262
 
245
- **Question:** "Would you like to configure another platform or setting?"
263
+ After writing config, run a smoke check:
246
264
 
247
- **Options:**
248
- 1. **Yes** - Return to the main menu (Step 2)
249
- 2. **No, I'm done** - Show final summary and exit
265
+ ```bash
266
+ npm run build
267
+ ```
250
268
 
251
- ## Final Summary
269
+ For OpenClaw-like HTTP integrations, verify both:
270
+ - `/hooks/wake` smoke test
271
+ - `/hooks/agent` delivery verification
252
272
 
253
- Display a summary of all active notification platforms:
273
+ ## Final Summary Template
254
274
 
255
- ```
256
- OMX Notification Configuration Complete!
257
- ─────────────────────────────────────────
258
- Active platforms:
259
- Discord webhook: enabled
260
- Telegram: enabled
261
-
262
- Verbosity: session
263
- Idle cooldown: 60s
264
- Reply listener: disabled
265
-
266
- Config saved to: ~/.codex/.omx-config.json
267
-
268
- Quick reference — env vars:
269
- OMX_DISCORD_WEBHOOK_URL=...
270
- OMX_TELEGRAM_BOT_TOKEN=...
271
- OMX_TELEGRAM_CHAT_ID=...
272
- OMX_SLACK_WEBHOOK_URL=...
273
- OMX_NOTIFY_VERBOSITY=session
274
- OMX_IDLE_COOLDOWN_SECONDS=60
275
- OMX_OPENCLAW=1
276
-
277
- Run /configure-notifications again to update any settings.
278
- ```
275
+ Show:
276
+ - Native platforms enabled
277
+ - Generic aliases enabled (`custom_webhook_command`, `custom_cli_command`)
278
+ - Whether explicit `notifications.openclaw` exists (and therefore overrides aliases)
279
+ - Verbosity + idle cooldown + reply listener state
280
+ - Config path (`~/.codex/.omx-config.json`)