oh-my-codex 0.11.13 → 0.12.0

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 (369) hide show
  1. package/Cargo.lock +5 -5
  2. package/Cargo.toml +1 -1
  3. package/README.md +27 -17
  4. package/crates/omx-runtime/src/main.rs +6 -2
  5. package/dist/agents/native-config.js +1 -1
  6. package/dist/agents/native-config.js.map +1 -1
  7. package/dist/cli/__tests__/autoresearch-guided.test.js +74 -2
  8. package/dist/cli/__tests__/autoresearch-guided.test.js.map +1 -1
  9. package/dist/cli/__tests__/cleanup.test.js +22 -30
  10. package/dist/cli/__tests__/cleanup.test.js.map +1 -1
  11. package/dist/cli/__tests__/error-handling-warnings.test.js +3 -1
  12. package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -1
  13. package/dist/cli/__tests__/index.test.js +217 -4
  14. package/dist/cli/__tests__/index.test.js.map +1 -1
  15. package/dist/cli/__tests__/setup-refresh.test.js +49 -9
  16. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  17. package/dist/cli/__tests__/setup-scope.test.js +9 -0
  18. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  19. package/dist/cli/__tests__/team.test.js +136 -11
  20. package/dist/cli/__tests__/team.test.js.map +1 -1
  21. package/dist/cli/__tests__/uninstall.test.js +10 -0
  22. package/dist/cli/__tests__/uninstall.test.js.map +1 -1
  23. package/dist/cli/__tests__/windows-popup-loop-contract.test.js +1 -0
  24. package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
  25. package/dist/cli/autoresearch-guided.d.ts.map +1 -1
  26. package/dist/cli/autoresearch-guided.js +2 -1
  27. package/dist/cli/autoresearch-guided.js.map +1 -1
  28. package/dist/cli/autoresearch.d.ts.map +1 -1
  29. package/dist/cli/autoresearch.js +2 -1
  30. package/dist/cli/autoresearch.js.map +1 -1
  31. package/dist/cli/cleanup.d.ts.map +1 -1
  32. package/dist/cli/cleanup.js +4 -2
  33. package/dist/cli/cleanup.js.map +1 -1
  34. package/dist/cli/index.d.ts +12 -0
  35. package/dist/cli/index.d.ts.map +1 -1
  36. package/dist/cli/index.js +238 -30
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/cli/omx.js +2 -0
  39. package/dist/cli/omx.js.map +1 -1
  40. package/dist/cli/setup.d.ts +1 -0
  41. package/dist/cli/setup.d.ts.map +1 -1
  42. package/dist/cli/setup.js +41 -7
  43. package/dist/cli/setup.js.map +1 -1
  44. package/dist/cli/team.d.ts.map +1 -1
  45. package/dist/cli/team.js +16 -557
  46. package/dist/cli/team.js.map +1 -1
  47. package/dist/cli/uninstall.d.ts.map +1 -1
  48. package/dist/cli/uninstall.js +34 -9
  49. package/dist/cli/uninstall.js.map +1 -1
  50. package/dist/config/__tests__/generator-idempotent.test.js +79 -2
  51. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  52. package/dist/config/__tests__/generator-notify.test.js +2 -0
  53. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  54. package/dist/config/codex-hooks.d.ts +11 -0
  55. package/dist/config/codex-hooks.d.ts.map +1 -0
  56. package/dist/config/codex-hooks.js +50 -0
  57. package/dist/config/codex-hooks.js.map +1 -0
  58. package/dist/config/generator.d.ts +5 -3
  59. package/dist/config/generator.d.ts.map +1 -1
  60. package/dist/config/generator.js +24 -14
  61. package/dist/config/generator.js.map +1 -1
  62. package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts +2 -0
  63. package/dist/hooks/__tests__/debugger-log-recency-contract.test.d.ts.map +1 -0
  64. package/dist/hooks/__tests__/debugger-log-recency-contract.test.js +20 -0
  65. package/dist/hooks/__tests__/debugger-log-recency-contract.test.js.map +1 -0
  66. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +236 -2
  67. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  68. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +86 -0
  69. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  70. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +40 -0
  71. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
  72. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts +2 -0
  73. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.d.ts.map +1 -0
  74. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +54 -0
  75. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -0
  76. package/dist/hooks/__tests__/notify-hook-modules.test.js +31 -0
  77. package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
  78. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +51 -0
  79. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +1 -1
  80. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts +2 -0
  81. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.d.ts.map +1 -0
  82. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js +136 -0
  83. package/dist/hooks/__tests__/notify-hook-session-idle-dedupe.test.js.map +1 -0
  84. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +120 -0
  85. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  86. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +145 -20
  87. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  88. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +116 -0
  89. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
  90. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +86 -0
  91. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  92. package/dist/hooks/__tests__/pre-context-gate-skills.test.js +1 -0
  93. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -1
  94. package/dist/hooks/extensibility/__tests__/runtime.test.js +49 -0
  95. package/dist/hooks/extensibility/__tests__/runtime.test.js.map +1 -1
  96. package/dist/hooks/extensibility/runtime.d.ts.map +1 -1
  97. package/dist/hooks/extensibility/runtime.js +10 -0
  98. package/dist/hooks/extensibility/runtime.js.map +1 -1
  99. package/dist/hooks/extensibility/types.d.ts +1 -1
  100. package/dist/hooks/extensibility/types.d.ts.map +1 -1
  101. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  102. package/dist/hooks/prompt-guidance-contract.js +12 -8
  103. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  104. package/dist/hooks/session.d.ts +5 -1
  105. package/dist/hooks/session.d.ts.map +1 -1
  106. package/dist/hooks/session.js +10 -6
  107. package/dist/hooks/session.js.map +1 -1
  108. package/dist/hud/index.d.ts.map +1 -1
  109. package/dist/hud/index.js +6 -1
  110. package/dist/hud/index.js.map +1 -1
  111. package/dist/mcp/__tests__/bootstrap.test.js +0 -3
  112. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  113. package/dist/mcp/__tests__/code-intel-server.test.js +27 -1
  114. package/dist/mcp/__tests__/code-intel-server.test.js.map +1 -1
  115. package/dist/mcp/__tests__/server-lifecycle.test.js +0 -5
  116. package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
  117. package/dist/mcp/bootstrap.d.ts +1 -1
  118. package/dist/mcp/bootstrap.d.ts.map +1 -1
  119. package/dist/mcp/bootstrap.js +0 -1
  120. package/dist/mcp/bootstrap.js.map +1 -1
  121. package/dist/mcp/code-intel-server.d.ts +20 -0
  122. package/dist/mcp/code-intel-server.d.ts.map +1 -1
  123. package/dist/mcp/code-intel-server.js +6 -5
  124. package/dist/mcp/code-intel-server.js.map +1 -1
  125. package/dist/notifications/__tests__/idle-cooldown.test.js +24 -1
  126. package/dist/notifications/__tests__/idle-cooldown.test.js.map +1 -1
  127. package/dist/notifications/__tests__/reply-listener.test.js +20 -1
  128. package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
  129. package/dist/notifications/__tests__/tmux.test.js +41 -0
  130. package/dist/notifications/__tests__/tmux.test.js.map +1 -1
  131. package/dist/notifications/idle-cooldown.d.ts +13 -0
  132. package/dist/notifications/idle-cooldown.d.ts.map +1 -1
  133. package/dist/notifications/idle-cooldown.js +50 -16
  134. package/dist/notifications/idle-cooldown.js.map +1 -1
  135. package/dist/notifications/reply-listener.d.ts.map +1 -1
  136. package/dist/notifications/reply-listener.js +2 -0
  137. package/dist/notifications/reply-listener.js.map +1 -1
  138. package/dist/notifications/tmux.d.ts.map +1 -1
  139. package/dist/notifications/tmux.js +4 -0
  140. package/dist/notifications/tmux.js.map +1 -1
  141. package/dist/scripts/__tests__/codex-native-hook.test.d.ts +2 -0
  142. package/dist/scripts/__tests__/codex-native-hook.test.d.ts.map +1 -0
  143. package/dist/scripts/__tests__/codex-native-hook.test.js +720 -0
  144. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -0
  145. package/dist/scripts/codex-native-hook.d.ts +22 -0
  146. package/dist/scripts/codex-native-hook.d.ts.map +1 -0
  147. package/dist/scripts/codex-native-hook.js +594 -0
  148. package/dist/scripts/codex-native-hook.js.map +1 -0
  149. package/dist/scripts/codex-native-pre-post.d.ts +26 -0
  150. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -0
  151. package/dist/scripts/codex-native-pre-post.js +118 -0
  152. package/dist/scripts/codex-native-pre-post.js.map +1 -0
  153. package/dist/scripts/notify-fallback-watcher.js +262 -18
  154. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  155. package/dist/scripts/notify-hook/auto-nudge.d.ts.map +1 -1
  156. package/dist/scripts/notify-hook/auto-nudge.js +5 -6
  157. package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
  158. package/dist/scripts/notify-hook/log.d.ts +2 -2
  159. package/dist/scripts/notify-hook/log.d.ts.map +1 -1
  160. package/dist/scripts/notify-hook/log.js +10 -2
  161. package/dist/scripts/notify-hook/log.js.map +1 -1
  162. package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
  163. package/dist/scripts/notify-hook/managed-tmux.js +2 -0
  164. package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
  165. package/dist/scripts/notify-hook/orchestration-intent.d.ts +18 -0
  166. package/dist/scripts/notify-hook/orchestration-intent.d.ts.map +1 -0
  167. package/dist/scripts/notify-hook/orchestration-intent.js +72 -0
  168. package/dist/scripts/notify-hook/orchestration-intent.js.map +1 -0
  169. package/dist/scripts/notify-hook/process-runner.js.map +1 -1
  170. package/dist/scripts/notify-hook/ralph-session-resume.d.ts.map +1 -1
  171. package/dist/scripts/notify-hook/ralph-session-resume.js +7 -0
  172. package/dist/scripts/notify-hook/ralph-session-resume.js.map +1 -1
  173. package/dist/scripts/notify-hook/team-dispatch.d.ts +15 -6
  174. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  175. package/dist/scripts/notify-hook/team-dispatch.js +125 -6
  176. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  177. package/dist/scripts/notify-hook/team-leader-nudge.d.ts +3 -2
  178. package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
  179. package/dist/scripts/notify-hook/team-leader-nudge.js +165 -37
  180. package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
  181. package/dist/scripts/notify-hook/team-tmux-guard.d.ts +4 -1
  182. package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
  183. package/dist/scripts/notify-hook/team-tmux-guard.js +33 -44
  184. package/dist/scripts/notify-hook/team-tmux-guard.js.map +1 -1
  185. package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
  186. package/dist/scripts/notify-hook/team-worker.js +68 -5
  187. package/dist/scripts/notify-hook/team-worker.js.map +1 -1
  188. package/dist/scripts/notify-hook/utils.d.ts +1 -1
  189. package/dist/scripts/notify-hook/utils.d.ts.map +1 -1
  190. package/dist/scripts/notify-hook/utils.js.map +1 -1
  191. package/dist/scripts/notify-hook.js +55 -32
  192. package/dist/scripts/notify-hook.js.map +1 -1
  193. package/dist/team/__tests__/api-interop.test.js +344 -18
  194. package/dist/team/__tests__/api-interop.test.js.map +1 -1
  195. package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts +2 -0
  196. package/dist/team/__tests__/delivery-e2e-smoke.test.d.ts.map +1 -0
  197. package/dist/team/__tests__/delivery-e2e-smoke.test.js +671 -0
  198. package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -0
  199. package/dist/team/__tests__/mcp-comm.test.js +5 -0
  200. package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
  201. package/dist/team/__tests__/runtime.test.js +422 -12
  202. package/dist/team/__tests__/runtime.test.js.map +1 -1
  203. package/dist/team/__tests__/state.test.js +126 -8
  204. package/dist/team/__tests__/state.test.js.map +1 -1
  205. package/dist/team/__tests__/team-ops-contract.test.js +4 -0
  206. package/dist/team/__tests__/team-ops-contract.test.js.map +1 -1
  207. package/dist/team/__tests__/tmux-session.test.js +160 -0
  208. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  209. package/dist/team/__tests__/worker-bootstrap.test.js +19 -1
  210. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  211. package/dist/team/api-interop.d.ts.map +1 -1
  212. package/dist/team/api-interop.js +95 -23
  213. package/dist/team/api-interop.js.map +1 -1
  214. package/dist/team/contracts.d.ts +11 -1
  215. package/dist/team/contracts.d.ts.map +1 -1
  216. package/dist/team/contracts.js +29 -0
  217. package/dist/team/contracts.js.map +1 -1
  218. package/dist/team/delivery-log.d.ts +14 -0
  219. package/dist/team/delivery-log.d.ts.map +1 -0
  220. package/dist/team/delivery-log.js +35 -0
  221. package/dist/team/delivery-log.js.map +1 -0
  222. package/dist/team/idle-nudge.d.ts +2 -2
  223. package/dist/team/idle-nudge.js +2 -2
  224. package/dist/team/mcp-comm.d.ts +4 -0
  225. package/dist/team/mcp-comm.d.ts.map +1 -1
  226. package/dist/team/mcp-comm.js +84 -1
  227. package/dist/team/mcp-comm.js.map +1 -1
  228. package/dist/team/pane-status.d.ts +149 -0
  229. package/dist/team/pane-status.d.ts.map +1 -0
  230. package/dist/team/pane-status.js +558 -0
  231. package/dist/team/pane-status.js.map +1 -0
  232. package/dist/team/reminder-intents.d.ts +11 -0
  233. package/dist/team/reminder-intents.d.ts.map +1 -0
  234. package/dist/team/reminder-intents.js +40 -0
  235. package/dist/team/reminder-intents.js.map +1 -0
  236. package/dist/team/runtime-cli.d.ts +1 -1
  237. package/dist/team/runtime-cli.js +2 -2
  238. package/dist/team/runtime-cli.js.map +1 -1
  239. package/dist/team/runtime.d.ts +2 -1
  240. package/dist/team/runtime.d.ts.map +1 -1
  241. package/dist/team/runtime.js +407 -190
  242. package/dist/team/runtime.js.map +1 -1
  243. package/dist/team/scaling.d.ts.map +1 -1
  244. package/dist/team/scaling.js +6 -5
  245. package/dist/team/scaling.js.map +1 -1
  246. package/dist/team/state/dispatch.d.ts +4 -1
  247. package/dist/team/state/dispatch.d.ts.map +1 -1
  248. package/dist/team/state/dispatch.js +59 -18
  249. package/dist/team/state/dispatch.js.map +1 -1
  250. package/dist/team/state/mailbox.d.ts.map +1 -1
  251. package/dist/team/state/mailbox.js +39 -2
  252. package/dist/team/state/mailbox.js.map +1 -1
  253. package/dist/team/state/monitor.d.ts +2 -1
  254. package/dist/team/state/monitor.d.ts.map +1 -1
  255. package/dist/team/state/monitor.js +30 -1
  256. package/dist/team/state/monitor.js.map +1 -1
  257. package/dist/team/state/types.d.ts +5 -2
  258. package/dist/team/state/types.d.ts.map +1 -1
  259. package/dist/team/state/types.js.map +1 -1
  260. package/dist/team/state.d.ts +30 -3
  261. package/dist/team/state.d.ts.map +1 -1
  262. package/dist/team/state.js +170 -2
  263. package/dist/team/state.js.map +1 -1
  264. package/dist/team/team-ops.d.ts +5 -1
  265. package/dist/team/team-ops.d.ts.map +1 -1
  266. package/dist/team/team-ops.js +4 -0
  267. package/dist/team/team-ops.js.map +1 -1
  268. package/dist/team/tmux-session.d.ts +2 -0
  269. package/dist/team/tmux-session.d.ts.map +1 -1
  270. package/dist/team/tmux-session.js +19 -3
  271. package/dist/team/tmux-session.js.map +1 -1
  272. package/dist/team/worker-bootstrap.d.ts +4 -0
  273. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  274. package/dist/team/worker-bootstrap.js +33 -6
  275. package/dist/team/worker-bootstrap.js.map +1 -1
  276. package/dist/utils/__tests__/paths.test.js +63 -1
  277. package/dist/utils/__tests__/paths.test.js.map +1 -1
  278. package/dist/utils/__tests__/platform-command.test.js +50 -4
  279. package/dist/utils/__tests__/platform-command.test.js.map +1 -1
  280. package/dist/utils/paths.d.ts +12 -0
  281. package/dist/utils/paths.d.ts.map +1 -1
  282. package/dist/utils/paths.js +44 -2
  283. package/dist/utils/paths.js.map +1 -1
  284. package/dist/utils/platform-command.d.ts.map +1 -1
  285. package/dist/utils/platform-command.js +13 -5
  286. package/dist/utils/platform-command.js.map +1 -1
  287. package/dist/utils/sleep.d.ts.map +1 -1
  288. package/dist/utils/sleep.js +10 -1
  289. package/dist/utils/sleep.js.map +1 -1
  290. package/package.json +1 -1
  291. package/prompts/analyst.md +2 -2
  292. package/prompts/api-reviewer.md +2 -2
  293. package/prompts/architect.md +2 -2
  294. package/prompts/build-fixer.md +2 -2
  295. package/prompts/code-reviewer.md +2 -2
  296. package/prompts/code-simplifier.md +1 -1
  297. package/prompts/critic.md +2 -2
  298. package/prompts/debugger.md +3 -2
  299. package/prompts/dependency-expert.md +2 -2
  300. package/prompts/designer.md +2 -2
  301. package/prompts/executor.md +3 -2
  302. package/prompts/explore.md +2 -2
  303. package/prompts/git-master.md +2 -2
  304. package/prompts/information-architect.md +2 -2
  305. package/prompts/performance-reviewer.md +2 -2
  306. package/prompts/planner.md +3 -2
  307. package/prompts/product-analyst.md +2 -2
  308. package/prompts/product-manager.md +2 -2
  309. package/prompts/qa-tester.md +2 -2
  310. package/prompts/quality-reviewer.md +2 -2
  311. package/prompts/quality-strategist.md +2 -2
  312. package/prompts/researcher.md +2 -2
  313. package/prompts/security-reviewer.md +2 -2
  314. package/prompts/sisyphus-lite.md +2 -2
  315. package/prompts/style-reviewer.md +2 -2
  316. package/prompts/team-executor.md +2 -2
  317. package/prompts/test-engineer.md +2 -2
  318. package/prompts/ux-researcher.md +2 -2
  319. package/prompts/verifier.md +3 -2
  320. package/prompts/vision.md +2 -2
  321. package/prompts/writer.md +2 -2
  322. package/skills/team/SKILL.md +18 -33
  323. package/src/scripts/__tests__/codex-native-hook.test.ts +931 -0
  324. package/src/scripts/codex-native-hook.ts +721 -0
  325. package/src/scripts/codex-native-pre-post.ts +161 -0
  326. package/src/scripts/notify-fallback-watcher.ts +318 -26
  327. package/src/scripts/notify-hook/auto-nudge.ts +5 -10
  328. package/src/scripts/notify-hook/log.ts +18 -4
  329. package/src/scripts/notify-hook/managed-tmux.ts +1 -0
  330. package/src/scripts/notify-hook/orchestration-intent.ts +82 -0
  331. package/src/scripts/notify-hook/process-runner.ts +4 -4
  332. package/src/scripts/notify-hook/ralph-session-resume.ts +9 -0
  333. package/src/scripts/notify-hook/team-dispatch.ts +134 -6
  334. package/src/scripts/notify-hook/team-leader-nudge.ts +183 -37
  335. package/src/scripts/notify-hook/team-tmux-guard.ts +35 -43
  336. package/src/scripts/notify-hook/team-worker.ts +73 -4
  337. package/src/scripts/notify-hook/utils.ts +1 -1
  338. package/src/scripts/notify-hook.ts +64 -32
  339. package/templates/AGENTS.md +21 -11
  340. package/README.de.md +0 -263
  341. package/README.el.md +0 -223
  342. package/README.es.md +0 -263
  343. package/README.fr.md +0 -263
  344. package/README.it.md +0 -263
  345. package/README.ja.md +0 -264
  346. package/README.ko.md +0 -264
  347. package/README.pl.md +0 -216
  348. package/README.pt.md +0 -263
  349. package/README.ru.md +0 -263
  350. package/README.tr.md +0 -263
  351. package/README.vi.md +0 -223
  352. package/README.zh-TW.md +0 -293
  353. package/README.zh.md +0 -264
  354. package/dist/mcp/__tests__/team-server-cleanup.test.d.ts +0 -2
  355. package/dist/mcp/__tests__/team-server-cleanup.test.d.ts.map +0 -1
  356. package/dist/mcp/__tests__/team-server-cleanup.test.js +0 -219
  357. package/dist/mcp/__tests__/team-server-cleanup.test.js.map +0 -1
  358. package/dist/mcp/__tests__/team-server-runtime-deps.test.d.ts +0 -2
  359. package/dist/mcp/__tests__/team-server-runtime-deps.test.d.ts.map +0 -1
  360. package/dist/mcp/__tests__/team-server-runtime-deps.test.js +0 -13
  361. package/dist/mcp/__tests__/team-server-runtime-deps.test.js.map +0 -1
  362. package/dist/mcp/__tests__/team-server-wait.test.d.ts +0 -2
  363. package/dist/mcp/__tests__/team-server-wait.test.d.ts.map +0 -1
  364. package/dist/mcp/__tests__/team-server-wait.test.js +0 -155
  365. package/dist/mcp/__tests__/team-server-wait.test.js.map +0 -1
  366. package/dist/mcp/team-server.d.ts +0 -24
  367. package/dist/mcp/team-server.d.ts.map +0 -1
  368. package/dist/mcp/team-server.js +0 -482
  369. package/dist/mcp/team-server.js.map +0 -1
@@ -1,482 +0,0 @@
1
- /**
2
- * OMX Team Runner MCP Server
3
- * Provides omx_run_team_* tools for spawning and managing tmux CLI worker teams.
4
- * Storage: ~/.omx/team-jobs/
5
- */
6
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
- import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
8
- import { readFile } from 'fs/promises';
9
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
10
- import { dirname, join } from 'path';
11
- import { fileURLToPath } from 'url';
12
- import { spawn } from 'child_process';
13
- import { homedir } from 'os';
14
- import { z } from 'zod';
15
- import { killWorkerPanes } from '../team/tmux-session.js';
16
- import { teamReadConfig as readTeamConfig } from '../team/team-ops.js';
17
- import { NudgeTracker } from '../team/idle-nudge.js';
18
- import { getLatestTeamEventCursor, waitForTeamEvent } from '../team/state/events.js';
19
- import { autoStartStdioMcpServer } from './bootstrap.js';
20
- // ---------------------------------------------------------------------------
21
- // Zod schemas
22
- // ---------------------------------------------------------------------------
23
- const startSchema = z.object({
24
- teamName: z.string().min(1),
25
- agentTypes: z.array(z.string()).min(1),
26
- tasks: z.array(z.object({ subject: z.string(), description: z.string() })).min(1),
27
- cwd: z.string().min(1),
28
- });
29
- const jobIdSchema = z.string().regex(/^omx-[a-z0-9]{1,12}$/);
30
- const statusSchema = z.object({ job_id: jobIdSchema });
31
- const waitSchema = z.object({
32
- job_id: jobIdSchema,
33
- timeout_ms: z.number().max(3_600_000).optional().default(300_000),
34
- nudge_delay_ms: z.number().optional(),
35
- nudge_max_count: z.number().optional(),
36
- nudge_message: z.string().optional(),
37
- wake_on: z.enum(['terminal', 'event']).optional().default('terminal'),
38
- after_event_id: z.string().optional(),
39
- });
40
- const cleanupSchema = z.object({
41
- job_id: jobIdSchema,
42
- grace_ms: z.number().optional().default(10_000),
43
- });
44
- const omxTeamJobs = new Map();
45
- function getOmxJobsDir() {
46
- return join(homedir(), '.omx', 'team-jobs');
47
- }
48
- function persistJob(jobId, job) {
49
- try {
50
- const jobsDir = getOmxJobsDir();
51
- if (!existsSync(jobsDir))
52
- mkdirSync(jobsDir, { recursive: true });
53
- writeFileSync(join(jobsDir, `${jobId}.json`), JSON.stringify(job), 'utf-8');
54
- }
55
- catch (err) {
56
- process.stderr.write(`[team-server] persist job failed: ${err}\n`);
57
- }
58
- }
59
- function loadJobFromDisk(jobId) {
60
- try {
61
- return JSON.parse(readFileSync(join(getOmxJobsDir(), `${jobId}.json`), 'utf-8'));
62
- }
63
- catch (err) {
64
- process.stderr.write(`[team-server] load job failed: ${err}\n`);
65
- return undefined;
66
- }
67
- }
68
- function parseJsonFromStdout(rawStdout) {
69
- const text = rawStdout.trim();
70
- if (!text)
71
- return { text };
72
- try {
73
- return { parsed: JSON.parse(text), text };
74
- }
75
- catch {
76
- const lines = text.split('\n').map((line) => line.trim()).filter(Boolean);
77
- for (let i = lines.length - 1; i >= 0; i--) {
78
- try {
79
- return { parsed: JSON.parse(lines[i]), text: lines[i] };
80
- }
81
- catch {
82
- // continue
83
- }
84
- }
85
- return { text };
86
- }
87
- }
88
- async function loadPaneIds(jobId) {
89
- try {
90
- const parsed = JSON.parse(await readFile(join(getOmxJobsDir(), `${jobId}-panes.json`), 'utf-8'));
91
- const paneIds = Array.isArray(parsed.paneIds)
92
- ? parsed.paneIds.filter((paneId) => typeof paneId === 'string' && paneId.trim().startsWith('%'))
93
- : [];
94
- const leaderPaneId = typeof parsed.leaderPaneId === 'string' && parsed.leaderPaneId.trim().startsWith('%')
95
- ? parsed.leaderPaneId.trim()
96
- : '';
97
- return { paneIds, leaderPaneId };
98
- }
99
- catch (err) {
100
- process.stderr.write(`[team-server] load pane ids failed: ${err}\n`);
101
- return null;
102
- }
103
- }
104
- function normalizePaneId(value) {
105
- if (typeof value !== 'string')
106
- return null;
107
- const trimmed = value.trim();
108
- return trimmed.startsWith('%') ? trimmed : null;
109
- }
110
- async function listLiveSessionPaneIds(sessionName) {
111
- if (!sessionName || !sessionName.trim())
112
- return [];
113
- if (!/^[a-zA-Z0-9_-]+$/.test(sessionName.trim()))
114
- return [];
115
- return await new Promise((resolve) => {
116
- const child = spawn('tmux', ['list-panes', '-t', sessionName, '-F', '#{pane_id}'], {
117
- stdio: ['ignore', 'pipe', 'ignore'],
118
- });
119
- const outChunks = [];
120
- child.stdout.on('data', (chunk) => outChunks.push(chunk));
121
- child.on('close', (code) => {
122
- if (code !== 0) {
123
- resolve([]);
124
- return;
125
- }
126
- const paneIds = Buffer.concat(outChunks).toString('utf-8')
127
- .split('\n')
128
- .map((line) => line.trim())
129
- .filter((paneId) => paneId.startsWith('%'));
130
- resolve(paneIds);
131
- });
132
- child.on('error', () => resolve([]));
133
- });
134
- }
135
- async function resolveCleanupTargets(jobId, job) {
136
- const panes = await loadPaneIds(jobId);
137
- const paneFileIds = panes?.paneIds ?? [];
138
- const paneFileSet = new Set(paneFileIds);
139
- const paneFileLeader = normalizePaneId(panes?.leaderPaneId);
140
- const config = (job.teamName && job.cwd)
141
- ? await readTeamConfig(job.teamName, job.cwd)
142
- : null;
143
- const configWorkerPaneIds = (config?.workers ?? [])
144
- .map((worker) => normalizePaneId(worker.pane_id))
145
- .filter((paneId) => paneId !== null);
146
- const configSet = new Set(configWorkerPaneIds);
147
- const knownIdentity = new Set([...paneFileSet, ...configSet]);
148
- const liveSessionPaneIds = config?.tmux_session ? await listLiveSessionPaneIds(config.tmux_session) : [];
149
- const liveIntersection = liveSessionPaneIds.filter((paneId) => knownIdentity.has(paneId));
150
- const liveIntersectionSet = new Set(liveIntersection);
151
- const deduped = Array.from(new Set([...knownIdentity, ...liveIntersectionSet]));
152
- return {
153
- targets: deduped,
154
- leaderPaneId: normalizePaneId(config?.leader_pane_id) ?? paneFileLeader ?? '',
155
- hudPaneId: normalizePaneId(config?.hud_pane_id) ?? '',
156
- counts: {
157
- from_panes_file: paneFileSet.size,
158
- from_team_config: configSet.size,
159
- from_live_session: liveIntersectionSet.size,
160
- deduped_total: deduped.length,
161
- },
162
- };
163
- }
164
- // ---------------------------------------------------------------------------
165
- // MCP Server
166
- // ---------------------------------------------------------------------------
167
- const server = new Server({ name: 'omx-team-server', version: '0.1.0' }, { capabilities: { tools: {} } });
168
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
169
- tools: [
170
- {
171
- name: 'omx_run_team_start',
172
- description: 'Spawn tmux CLI workers (codex/claude/gemini) in the background. Returns jobId immediately. Poll with omx_run_team_status.',
173
- inputSchema: {
174
- type: 'object',
175
- properties: {
176
- teamName: { type: 'string', description: 'Slug name for the team' },
177
- agentTypes: { type: 'array', items: { type: 'string' }, description: '"codex", "claude", or "gemini" per worker' },
178
- tasks: {
179
- type: 'array',
180
- items: {
181
- type: 'object',
182
- properties: {
183
- subject: { type: 'string' },
184
- description: { type: 'string' },
185
- },
186
- required: ['subject', 'description'],
187
- },
188
- description: 'Tasks to distribute to workers',
189
- },
190
- cwd: { type: 'string', description: 'Working directory (absolute path)' },
191
- },
192
- required: ['teamName', 'agentTypes', 'tasks', 'cwd'],
193
- },
194
- },
195
- {
196
- name: 'omx_run_team_status',
197
- description: 'Non-blocking status check for a background omx_run_team job. Returns status and result when done.',
198
- inputSchema: {
199
- type: 'object',
200
- properties: {
201
- job_id: { type: 'string', description: 'Job ID returned by omx_run_team_start' },
202
- },
203
- required: ['job_id'],
204
- },
205
- },
206
- {
207
- name: 'omx_run_team_wait',
208
- description: 'Block (poll internally) until a background omx_run_team job reaches a terminal state (completed or failed) or, in wake_on=event mode, until the next team event arrives. Uses exponential backoff (500ms to 2000ms). Auto-nudges idle teammate panes via tmux send-keys. If this wait call times out, workers are left running -- call omx_run_team_wait again to keep waiting, or omx_run_team_cleanup to stop them explicitly.',
209
- inputSchema: {
210
- type: 'object',
211
- properties: {
212
- job_id: { type: 'string', description: 'Job ID returned by omx_run_team_start' },
213
- timeout_ms: { type: 'number', description: 'Maximum wait time in ms (default: 300000, max: 3600000)' },
214
- nudge_delay_ms: { type: 'number', description: 'Milliseconds a pane must be idle before nudging (default: 30000)' },
215
- nudge_max_count: { type: 'number', description: 'Maximum nudges per pane (default: 3)' },
216
- nudge_message: { type: 'string', description: 'Message sent as nudge (default: "Next: read your inbox/mailbox, continue your assigned task now, and if blocked send the leader a concrete status update.")' },
217
- wake_on: { type: 'string', enum: ['terminal', 'event'], description: 'Wake on terminal completion (default) or the next team event.' },
218
- after_event_id: { type: 'string', description: 'Optional event cursor; in wake_on=event mode, wait for the next event after this id.' },
219
- },
220
- required: ['job_id'],
221
- },
222
- },
223
- {
224
- name: 'omx_run_team_cleanup',
225
- description: 'Explicitly clean up worker panes when you want to stop workers. Kills all worker panes recorded for the job without touching the leader pane or the user session.',
226
- inputSchema: {
227
- type: 'object',
228
- properties: {
229
- job_id: { type: 'string', description: 'Job ID returned by omx_run_team_start' },
230
- grace_ms: { type: 'number', description: 'Grace period in ms before force-killing panes (default: 10000)' },
231
- },
232
- required: ['job_id'],
233
- },
234
- },
235
- ],
236
- }));
237
- export async function handleTeamToolCall(request) {
238
- const { name, arguments: args } = request.params;
239
- const a = (args || {});
240
- try {
241
- switch (name) {
242
- case 'omx_run_team_start': {
243
- const { teamName, agentTypes, tasks, cwd: inputCwd } = startSchema.parse(a);
244
- const jobId = `omx-${Date.now().toString(36)}`;
245
- const runtimeCliPath = join(dirname(fileURLToPath(import.meta.url)), '..', 'team', 'runtime-cli.js');
246
- const job = { status: 'running', startedAt: Date.now(), teamName, cwd: inputCwd };
247
- omxTeamJobs.set(jobId, job);
248
- const child = spawn('node', [runtimeCliPath], {
249
- env: { ...process.env, OMX_JOB_ID: jobId, OMX_JOBS_DIR: getOmxJobsDir() },
250
- stdio: ['pipe', 'pipe', 'pipe'],
251
- });
252
- job.pid = child.pid;
253
- persistJob(jobId, job);
254
- child.stdin.write(JSON.stringify({ teamName, agentTypes, tasks, cwd: inputCwd }));
255
- child.stdin.end();
256
- const outChunks = [];
257
- const errChunks = [];
258
- child.stdout.on('data', (c) => outChunks.push(c));
259
- child.stderr.on('data', (c) => errChunks.push(c));
260
- child.on('close', (code) => {
261
- const stdout = Buffer.concat(outChunks).toString('utf-8').trim();
262
- const stderr = Buffer.concat(errChunks).toString('utf-8').trim();
263
- if (stdout) {
264
- const { parsed, text } = parseJsonFromStdout(stdout);
265
- if (parsed) {
266
- const s = typeof parsed.status === 'string' ? parsed.status : undefined;
267
- if (job.status === 'running') {
268
- job.status = (s === 'completed' || s === 'failed') ? s : 'failed';
269
- }
270
- job.result = text;
271
- }
272
- else {
273
- if (job.status === 'running')
274
- job.status = 'failed';
275
- job.result = stdout;
276
- }
277
- }
278
- if (job.status === 'running') {
279
- if (code === 0)
280
- job.status = 'completed';
281
- else
282
- job.status = 'failed';
283
- }
284
- if (stderr)
285
- job.stderr = stderr;
286
- persistJob(jobId, job);
287
- });
288
- child.on('error', (err) => {
289
- job.status = 'failed';
290
- job.stderr = `spawn error: ${err.message}`;
291
- persistJob(jobId, job);
292
- });
293
- return {
294
- content: [{ type: 'text', text: JSON.stringify({ jobId, pid: job.pid, message: 'Team started. Poll with omx_run_team_status.' }) }],
295
- };
296
- }
297
- case 'omx_run_team_status': {
298
- const { job_id: jobId } = statusSchema.parse(a);
299
- const job = omxTeamJobs.get(jobId) ?? loadJobFromDisk(jobId);
300
- if (!job) {
301
- return { content: [{ type: 'text', text: JSON.stringify({ error: `No job found: ${jobId}` }) }] };
302
- }
303
- const elapsed = ((Date.now() - job.startedAt) / 1000).toFixed(1);
304
- const out = { jobId, status: job.status, elapsedSeconds: elapsed };
305
- if (job.result) {
306
- try {
307
- out.result = JSON.parse(job.result);
308
- }
309
- catch {
310
- out.result = job.result;
311
- }
312
- }
313
- if (job.stderr)
314
- out.stderr = job.stderr;
315
- return { content: [{ type: 'text', text: JSON.stringify(out) }] };
316
- }
317
- case 'omx_run_team_wait': {
318
- const { job_id: jobId, timeout_ms: timeoutMs, nudge_delay_ms: nudgeDelayMs, nudge_max_count: nudgeMaxCount, nudge_message: nudgeMessage, wake_on: wakeOn, after_event_id: afterEventId, } = waitSchema.parse(a);
319
- const deadline = Date.now() + Math.min(timeoutMs, 3_600_000);
320
- let pollDelay = 500;
321
- let eventCursor = afterEventId;
322
- const nudgeTracker = new NudgeTracker({
323
- ...(nudgeDelayMs != null ? { delayMs: nudgeDelayMs } : {}),
324
- ...(nudgeMaxCount != null ? { maxCount: nudgeMaxCount } : {}),
325
- ...(nudgeMessage != null ? { message: nudgeMessage } : {}),
326
- });
327
- while (Date.now() < deadline) {
328
- const job = omxTeamJobs.get(jobId) ?? loadJobFromDisk(jobId);
329
- if (!job) {
330
- return { content: [{ type: 'text', text: JSON.stringify({ error: `No job found: ${jobId}` }) }] };
331
- }
332
- // Detect orphan PIDs: if job is 'running' but the process is dead,
333
- // mark it failed immediately rather than polling forever.
334
- if (job.status === 'running' && job.pid != null) {
335
- try {
336
- process.kill(job.pid, 0);
337
- }
338
- catch (e) {
339
- if (e.code === 'ESRCH') {
340
- job.status = 'failed';
341
- if (!job.result)
342
- job.result = JSON.stringify({ error: 'Process no longer alive (MCP restart?)' });
343
- persistJob(jobId, job);
344
- const elapsed = ((Date.now() - job.startedAt) / 1000).toFixed(1);
345
- return { content: [{ type: 'text', text: JSON.stringify({ jobId, status: 'failed', elapsedSeconds: elapsed, error: 'Process no longer alive (MCP restart?)' }) }] };
346
- }
347
- }
348
- }
349
- if (job.status !== 'running') {
350
- const elapsed = ((Date.now() - job.startedAt) / 1000).toFixed(1);
351
- const out = { jobId, status: job.status, elapsedSeconds: elapsed };
352
- if (job.result) {
353
- try {
354
- out.result = JSON.parse(job.result);
355
- }
356
- catch {
357
- out.result = job.result;
358
- }
359
- }
360
- if (job.stderr)
361
- out.stderr = job.stderr;
362
- if (nudgeTracker.totalNudges > 0)
363
- out.nudges = nudgeTracker.getSummary();
364
- return { content: [{ type: 'text', text: JSON.stringify(out) }] };
365
- }
366
- let waitedForEvent = false;
367
- if (wakeOn === 'event' && job.teamName && job.cwd) {
368
- if (!eventCursor) {
369
- eventCursor = await getLatestTeamEventCursor(job.teamName, job.cwd);
370
- }
371
- const eventResult = await waitForTeamEvent(job.teamName, job.cwd, {
372
- afterEventId: eventCursor,
373
- timeoutMs: pollDelay,
374
- pollMs: Math.min(pollDelay, 200),
375
- wakeableOnly: true,
376
- });
377
- waitedForEvent = true;
378
- if (eventResult.status === 'event' && eventResult.event) {
379
- eventCursor = eventResult.cursor;
380
- const elapsed = ((Date.now() - job.startedAt) / 1000).toFixed(1);
381
- const out = {
382
- jobId,
383
- status: 'running',
384
- elapsedSeconds: elapsed,
385
- wake_on: 'event',
386
- cursor: eventResult.cursor,
387
- event: eventResult.event,
388
- };
389
- if (nudgeTracker.totalNudges > 0)
390
- out.nudges = nudgeTracker.getSummary();
391
- return { content: [{ type: 'text', text: JSON.stringify(out) }] };
392
- }
393
- }
394
- if (!waitedForEvent) {
395
- // Yield to Node.js event loop -- lets child.on('close', ...) fire between polls.
396
- await new Promise(r => setTimeout(r, pollDelay));
397
- }
398
- pollDelay = Math.min(Math.floor(pollDelay * 1.5), 2000);
399
- // Auto-nudge idle panes
400
- try {
401
- const panes = await loadPaneIds(jobId);
402
- if (panes?.paneIds?.length) {
403
- await nudgeTracker.checkAndNudge(panes.paneIds, panes.leaderPaneId, job.teamName ?? '');
404
- }
405
- }
406
- catch { /* nudge is best-effort */ }
407
- }
408
- // Timeout: leave workers running
409
- const elapsed = ((Date.now() - (omxTeamJobs.get(jobId)?.startedAt ?? Date.now())) / 1000).toFixed(1);
410
- const timeoutOut = {
411
- error: `Timed out waiting for job ${jobId} after ${(timeoutMs / 1000).toFixed(0)}s -- workers are still running; call omx_run_team_wait again to keep waiting or omx_run_team_cleanup to stop them`,
412
- jobId,
413
- status: 'running',
414
- wake_on: wakeOn,
415
- elapsedSeconds: elapsed,
416
- };
417
- if (nudgeTracker.totalNudges > 0)
418
- timeoutOut.nudges = nudgeTracker.getSummary();
419
- return { content: [{ type: 'text', text: JSON.stringify(timeoutOut) }] };
420
- }
421
- case 'omx_run_team_cleanup': {
422
- const { job_id: jobId, grace_ms: graceMs } = cleanupSchema.parse(a);
423
- const job = omxTeamJobs.get(jobId) ?? loadJobFromDisk(jobId);
424
- if (!job)
425
- return { content: [{ type: 'text', text: `Job ${jobId} not found` }] };
426
- const selected = await resolveCleanupTargets(jobId, job);
427
- const cleanedUpAt = new Date().toISOString();
428
- if (selected.targets.length === 0) {
429
- const summary = {
430
- job_id: jobId,
431
- status: 'noop',
432
- targets: selected.counts,
433
- excluded: { leader: 0, hud: 0, invalid: 0 },
434
- kill: { attempted: 0, succeeded: 0, failed: 0 },
435
- grace_ms: graceMs,
436
- cleaned_up_at: cleanedUpAt,
437
- };
438
- return {
439
- content: [
440
- { type: 'text', text: 'No pane IDs recorded for this job -- nothing to clean up.' },
441
- { type: 'text', text: JSON.stringify(summary) },
442
- ],
443
- };
444
- }
445
- const killSummary = await killWorkerPanes(selected.targets, selected.leaderPaneId, graceMs, selected.hudPaneId);
446
- const summary = {
447
- job_id: jobId,
448
- status: killSummary.kill.attempted > 0 ? 'cleaned' : 'noop',
449
- targets: selected.counts,
450
- excluded: killSummary.excluded,
451
- kill: killSummary.kill,
452
- grace_ms: graceMs,
453
- cleaned_up_at: cleanedUpAt,
454
- };
455
- job.cleanedUpAt = cleanedUpAt;
456
- persistJob(jobId, job);
457
- return {
458
- content: [
459
- {
460
- type: 'text',
461
- text: killSummary.kill.attempted > 0
462
- ? `Cleaned up ${selected.targets.length} worker pane(s).`
463
- : 'No pane IDs recorded for this job -- nothing to clean up.',
464
- },
465
- { type: 'text', text: JSON.stringify(summary) },
466
- ],
467
- };
468
- }
469
- default:
470
- return { content: [{ type: 'text', text: `Unknown tool: ${name}` }], isError: true };
471
- }
472
- }
473
- catch (error) {
474
- return {
475
- content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
476
- isError: true,
477
- };
478
- }
479
- }
480
- server.setRequestHandler(CallToolRequestSchema, handleTeamToolCall);
481
- autoStartStdioMcpServer('team', server);
482
- //# sourceMappingURL=team-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team-server.js","sourceRoot":"","sources":["../../src/mcp/team-server.ts"],"names":[],"mappings":"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"}