claudecode-omc 4.8.2 → 4.8.3

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 (667) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +3 -3
  3. package/README.de.md +60 -0
  4. package/README.es.md +60 -0
  5. package/README.fr.md +60 -0
  6. package/README.it.md +60 -0
  7. package/README.ja.md +60 -0
  8. package/README.ko.md +60 -0
  9. package/README.md +101 -16
  10. package/README.pt.md +60 -0
  11. package/README.ru.md +60 -0
  12. package/README.tr.md +60 -0
  13. package/README.vi.md +60 -0
  14. package/README.zh.md +60 -0
  15. package/agents/code-reviewer.md +107 -6
  16. package/agents/critic.md +212 -42
  17. package/agents/debugger.md +52 -4
  18. package/agents/document-specialist.md +39 -60
  19. package/agents/executor.md +29 -9
  20. package/agents/explore.md +3 -1
  21. package/agents/security-reviewer.md +57 -0
  22. package/agents/test-engineer.md +21 -0
  23. package/agents/verifier.md +2 -0
  24. package/agents/writer.md +2 -0
  25. package/bridge/cli.cjs +7402 -3580
  26. package/bridge/mcp-server.cjs +558 -43
  27. package/bridge/runtime-cli.cjs +3034 -1801
  28. package/bridge/team-bridge.cjs +25 -1
  29. package/bridge/team-mcp.cjs +257 -88
  30. package/bridge/team.js +5226 -413
  31. package/dist/__tests__/agent-boundary-guidance.test.d.ts +2 -0
  32. package/dist/__tests__/agent-boundary-guidance.test.d.ts.map +1 -0
  33. package/dist/__tests__/agent-boundary-guidance.test.js +48 -0
  34. package/dist/__tests__/agent-boundary-guidance.test.js.map +1 -0
  35. package/dist/__tests__/agent-registry.test.js +48 -11
  36. package/dist/__tests__/agent-registry.test.js.map +1 -1
  37. package/dist/__tests__/auto-slash-aliases.test.js +25 -0
  38. package/dist/__tests__/auto-slash-aliases.test.js.map +1 -1
  39. package/dist/__tests__/bedrock-model-routing.test.d.ts +21 -0
  40. package/dist/__tests__/bedrock-model-routing.test.d.ts.map +1 -0
  41. package/dist/__tests__/bedrock-model-routing.test.js +397 -0
  42. package/dist/__tests__/bedrock-model-routing.test.js.map +1 -0
  43. package/dist/__tests__/cleanup-validation.test.js +7 -3
  44. package/dist/__tests__/cleanup-validation.test.js.map +1 -1
  45. package/dist/__tests__/cli-win32-warning.test.js +15 -2
  46. package/dist/__tests__/cli-win32-warning.test.js.map +1 -1
  47. package/dist/__tests__/consolidation-contracts.test.js +28 -3
  48. package/dist/__tests__/consolidation-contracts.test.js.map +1 -1
  49. package/dist/__tests__/context-guard-stop.test.d.ts +2 -0
  50. package/dist/__tests__/context-guard-stop.test.d.ts.map +1 -0
  51. package/dist/__tests__/context-guard-stop.test.js +58 -0
  52. package/dist/__tests__/context-guard-stop.test.js.map +1 -0
  53. package/dist/__tests__/delegation-enforcer.test.js +76 -11
  54. package/dist/__tests__/delegation-enforcer.test.js.map +1 -1
  55. package/dist/__tests__/doctor-conflicts.test.js +62 -1
  56. package/dist/__tests__/doctor-conflicts.test.js.map +1 -1
  57. package/dist/__tests__/hooks.test.js +165 -4
  58. package/dist/__tests__/hooks.test.js.map +1 -1
  59. package/dist/__tests__/hud/defaults.test.js +4 -0
  60. package/dist/__tests__/hud/defaults.test.js.map +1 -1
  61. package/dist/__tests__/hud/limits-error.test.js +2 -4
  62. package/dist/__tests__/hud/limits-error.test.js.map +1 -1
  63. package/dist/__tests__/hud/mission-board-state.test.d.ts +2 -0
  64. package/dist/__tests__/hud/mission-board-state.test.d.ts.map +1 -0
  65. package/dist/__tests__/hud/mission-board-state.test.js +170 -0
  66. package/dist/__tests__/hud/mission-board-state.test.js.map +1 -0
  67. package/dist/__tests__/hud/mission-board.test.d.ts +2 -0
  68. package/dist/__tests__/hud/mission-board.test.d.ts.map +1 -0
  69. package/dist/__tests__/hud/mission-board.test.js +143 -0
  70. package/dist/__tests__/hud/mission-board.test.js.map +1 -0
  71. package/dist/__tests__/hud/rate-limits-error.test.js +13 -0
  72. package/dist/__tests__/hud/rate-limits-error.test.js.map +1 -1
  73. package/dist/__tests__/hud/render-rate-limits-priority.test.d.ts +8 -0
  74. package/dist/__tests__/hud/render-rate-limits-priority.test.d.ts.map +1 -0
  75. package/dist/__tests__/hud/render-rate-limits-priority.test.js +145 -0
  76. package/dist/__tests__/hud/render-rate-limits-priority.test.js.map +1 -0
  77. package/dist/__tests__/hud/render.test.js +22 -0
  78. package/dist/__tests__/hud/render.test.js.map +1 -1
  79. package/dist/__tests__/hud/stale-indicator.test.d.ts +9 -0
  80. package/dist/__tests__/hud/stale-indicator.test.d.ts.map +1 -0
  81. package/dist/__tests__/hud/stale-indicator.test.js +81 -0
  82. package/dist/__tests__/hud/stale-indicator.test.js.map +1 -0
  83. package/dist/__tests__/hud/state.test.js +30 -0
  84. package/dist/__tests__/hud/state.test.js.map +1 -1
  85. package/dist/__tests__/hud/usage-api-lock.test.d.ts +2 -0
  86. package/dist/__tests__/hud/usage-api-lock.test.d.ts.map +1 -0
  87. package/dist/__tests__/hud/usage-api-lock.test.js +245 -0
  88. package/dist/__tests__/hud/usage-api-lock.test.js.map +1 -0
  89. package/dist/__tests__/hud/usage-api-stale.test.d.ts +9 -0
  90. package/dist/__tests__/hud/usage-api-stale.test.d.ts.map +1 -0
  91. package/dist/__tests__/hud/usage-api-stale.test.js +297 -0
  92. package/dist/__tests__/hud/usage-api-stale.test.js.map +1 -0
  93. package/dist/__tests__/hud/usage-api.test.js +223 -0
  94. package/dist/__tests__/hud/usage-api.test.js.map +1 -1
  95. package/dist/__tests__/hud/watch-mode-init.test.d.ts +2 -0
  96. package/dist/__tests__/hud/watch-mode-init.test.d.ts.map +1 -0
  97. package/dist/__tests__/hud/watch-mode-init.test.js +133 -0
  98. package/dist/__tests__/hud/watch-mode-init.test.js.map +1 -0
  99. package/dist/__tests__/hud-agents.test.js +12 -10
  100. package/dist/__tests__/hud-agents.test.js.map +1 -1
  101. package/dist/__tests__/hud-build-guidance.test.js +6 -2
  102. package/dist/__tests__/hud-build-guidance.test.js.map +1 -1
  103. package/dist/__tests__/hud-marketplace-resolution.test.d.ts +2 -0
  104. package/dist/__tests__/hud-marketplace-resolution.test.d.ts.map +1 -0
  105. package/dist/__tests__/hud-marketplace-resolution.test.js +53 -0
  106. package/dist/__tests__/hud-marketplace-resolution.test.js.map +1 -0
  107. package/dist/__tests__/installer-hud-skip.test.js +12 -0
  108. package/dist/__tests__/installer-hud-skip.test.js.map +1 -1
  109. package/dist/__tests__/installer-plugin-agents.test.d.ts +2 -0
  110. package/dist/__tests__/installer-plugin-agents.test.d.ts.map +1 -0
  111. package/dist/__tests__/installer-plugin-agents.test.js +111 -0
  112. package/dist/__tests__/installer-plugin-agents.test.js.map +1 -0
  113. package/dist/__tests__/installer-version-guard.test.d.ts +2 -0
  114. package/dist/__tests__/installer-version-guard.test.d.ts.map +1 -0
  115. package/dist/__tests__/installer-version-guard.test.js +75 -0
  116. package/dist/__tests__/installer-version-guard.test.js.map +1 -0
  117. package/dist/__tests__/installer.test.js +58 -4
  118. package/dist/__tests__/installer.test.js.map +1 -1
  119. package/dist/__tests__/omc-tools-server.test.js +8 -5
  120. package/dist/__tests__/omc-tools-server.test.js.map +1 -1
  121. package/dist/__tests__/pre-tool-enforcer.test.js +38 -0
  122. package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -1
  123. package/dist/__tests__/prompt-injection.test.js +3 -3
  124. package/dist/__tests__/prompt-injection.test.js.map +1 -1
  125. package/dist/__tests__/ralph-prd-mandatory.test.js +53 -2
  126. package/dist/__tests__/ralph-prd-mandatory.test.js.map +1 -1
  127. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js +42 -0
  128. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js.map +1 -1
  129. package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +1 -1
  130. package/dist/__tests__/session-history-search.test.d.ts +2 -0
  131. package/dist/__tests__/session-history-search.test.d.ts.map +1 -0
  132. package/dist/__tests__/session-history-search.test.js +115 -0
  133. package/dist/__tests__/session-history-search.test.js.map +1 -0
  134. package/dist/__tests__/session-start-script-context.test.d.ts +2 -0
  135. package/dist/__tests__/session-start-script-context.test.d.ts.map +1 -0
  136. package/dist/__tests__/session-start-script-context.test.js +49 -0
  137. package/dist/__tests__/session-start-script-context.test.js.map +1 -0
  138. package/dist/__tests__/skills.test.js +71 -24
  139. package/dist/__tests__/skills.test.js.map +1 -1
  140. package/dist/__tests__/standalone-server.test.js +8 -4
  141. package/dist/__tests__/standalone-server.test.js.map +1 -1
  142. package/dist/__tests__/tier0-docs-consistency.test.js +10 -2
  143. package/dist/__tests__/tier0-docs-consistency.test.js.map +1 -1
  144. package/dist/agents/definitions.d.ts +5 -15
  145. package/dist/agents/definitions.d.ts.map +1 -1
  146. package/dist/agents/definitions.js +48 -49
  147. package/dist/agents/definitions.js.map +1 -1
  148. package/dist/agents/document-specialist.d.ts +1 -1
  149. package/dist/agents/document-specialist.d.ts.map +1 -1
  150. package/dist/agents/document-specialist.js +46 -21
  151. package/dist/agents/document-specialist.js.map +1 -1
  152. package/dist/agents/explore.d.ts.map +1 -1
  153. package/dist/agents/explore.js +3 -2
  154. package/dist/agents/explore.js.map +1 -1
  155. package/dist/agents/index.d.ts +2 -4
  156. package/dist/agents/index.d.ts.map +1 -1
  157. package/dist/agents/index.js +3 -6
  158. package/dist/agents/index.js.map +1 -1
  159. package/dist/agents/types.d.ts +2 -2
  160. package/dist/agents/types.d.ts.map +1 -1
  161. package/dist/cli/__tests__/ask.test.js +255 -8
  162. package/dist/cli/__tests__/ask.test.js.map +1 -1
  163. package/dist/cli/__tests__/session-search-help.test.d.ts +2 -0
  164. package/dist/cli/__tests__/session-search-help.test.d.ts.map +1 -0
  165. package/dist/cli/__tests__/session-search-help.test.js +13 -0
  166. package/dist/cli/__tests__/session-search-help.test.js.map +1 -0
  167. package/dist/cli/__tests__/session-search.test.d.ts +2 -0
  168. package/dist/cli/__tests__/session-search.test.d.ts.map +1 -0
  169. package/dist/cli/__tests__/session-search.test.js +72 -0
  170. package/dist/cli/__tests__/session-search.test.js.map +1 -0
  171. package/dist/cli/__tests__/team-help.test.js +1 -1
  172. package/dist/cli/__tests__/team-help.test.js.map +1 -1
  173. package/dist/cli/__tests__/team.test.js +256 -4
  174. package/dist/cli/__tests__/team.test.js.map +1 -1
  175. package/dist/cli/commands/__tests__/team.test.js +52 -2
  176. package/dist/cli/commands/__tests__/team.test.js.map +1 -1
  177. package/dist/cli/commands/doctor-conflicts.d.ts.map +1 -1
  178. package/dist/cli/commands/doctor-conflicts.js +15 -1
  179. package/dist/cli/commands/doctor-conflicts.js.map +1 -1
  180. package/dist/cli/commands/session-search.d.ts +18 -0
  181. package/dist/cli/commands/session-search.d.ts.map +1 -0
  182. package/dist/cli/commands/session-search.js +47 -0
  183. package/dist/cli/commands/session-search.js.map +1 -0
  184. package/dist/cli/commands/team.d.ts +11 -0
  185. package/dist/cli/commands/team.d.ts.map +1 -1
  186. package/dist/cli/commands/team.js +94 -24
  187. package/dist/cli/commands/team.js.map +1 -1
  188. package/dist/cli/commands/wait.d.ts.map +1 -1
  189. package/dist/cli/commands/wait.js +12 -1
  190. package/dist/cli/commands/wait.js.map +1 -1
  191. package/dist/cli/index.js +70 -2
  192. package/dist/cli/index.js.map +1 -1
  193. package/dist/cli/team.d.ts +1 -0
  194. package/dist/cli/team.d.ts.map +1 -1
  195. package/dist/cli/team.js +100 -214
  196. package/dist/cli/team.js.map +1 -1
  197. package/dist/cli/win32-warning.d.ts +2 -1
  198. package/dist/cli/win32-warning.d.ts.map +1 -1
  199. package/dist/cli/win32-warning.js +20 -6
  200. package/dist/cli/win32-warning.js.map +1 -1
  201. package/dist/config/__tests__/loader.test.d.ts +2 -0
  202. package/dist/config/__tests__/loader.test.d.ts.map +1 -0
  203. package/dist/config/__tests__/loader.test.js +145 -0
  204. package/dist/config/__tests__/loader.test.js.map +1 -0
  205. package/dist/config/__tests__/models.test.d.ts +2 -0
  206. package/dist/config/__tests__/models.test.d.ts.map +1 -0
  207. package/dist/config/__tests__/models.test.js +147 -0
  208. package/dist/config/__tests__/models.test.js.map +1 -0
  209. package/dist/config/__tests__/test-helpers.d.ts +3 -0
  210. package/dist/config/__tests__/test-helpers.d.ts.map +1 -0
  211. package/dist/config/__tests__/test-helpers.js +19 -0
  212. package/dist/config/__tests__/test-helpers.js.map +1 -0
  213. package/dist/config/loader.d.ts +3 -1
  214. package/dist/config/loader.d.ts.map +1 -1
  215. package/dist/config/loader.js +140 -126
  216. package/dist/config/loader.js.map +1 -1
  217. package/dist/config/models.d.ts +29 -10
  218. package/dist/config/models.d.ts.map +1 -1
  219. package/dist/config/models.js +96 -10
  220. package/dist/config/models.js.map +1 -1
  221. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  222. package/dist/features/builtin-skills/skills.js +8 -1
  223. package/dist/features/builtin-skills/skills.js.map +1 -1
  224. package/dist/features/builtin-skills/types.d.ts +3 -0
  225. package/dist/features/builtin-skills/types.d.ts.map +1 -1
  226. package/dist/features/delegation-enforcer.d.ts +5 -12
  227. package/dist/features/delegation-enforcer.d.ts.map +1 -1
  228. package/dist/features/delegation-enforcer.js +48 -54
  229. package/dist/features/delegation-enforcer.js.map +1 -1
  230. package/dist/features/delegation-routing/__tests__/resolver.test.js +4 -3
  231. package/dist/features/delegation-routing/__tests__/resolver.test.js.map +1 -1
  232. package/dist/features/delegation-routing/types.d.ts.map +1 -1
  233. package/dist/features/delegation-routing/types.js +7 -4
  234. package/dist/features/delegation-routing/types.js.map +1 -1
  235. package/dist/features/index.d.ts +1 -0
  236. package/dist/features/index.d.ts.map +1 -1
  237. package/dist/features/index.js +2 -0
  238. package/dist/features/index.js.map +1 -1
  239. package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
  240. package/dist/features/rate-limit-wait/daemon.js +8 -5
  241. package/dist/features/rate-limit-wait/daemon.js.map +1 -1
  242. package/dist/features/rate-limit-wait/index.d.ts +1 -1
  243. package/dist/features/rate-limit-wait/index.d.ts.map +1 -1
  244. package/dist/features/rate-limit-wait/index.js +1 -1
  245. package/dist/features/rate-limit-wait/index.js.map +1 -1
  246. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts +9 -0
  247. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts.map +1 -1
  248. package/dist/features/rate-limit-wait/rate-limit-monitor.js +38 -0
  249. package/dist/features/rate-limit-wait/rate-limit-monitor.js.map +1 -1
  250. package/dist/features/rate-limit-wait/tmux-detector.d.ts +2 -1
  251. package/dist/features/rate-limit-wait/tmux-detector.d.ts.map +1 -1
  252. package/dist/features/rate-limit-wait/tmux-detector.js +8 -9
  253. package/dist/features/rate-limit-wait/tmux-detector.js.map +1 -1
  254. package/dist/features/rate-limit-wait/types.d.ts +11 -0
  255. package/dist/features/rate-limit-wait/types.d.ts.map +1 -1
  256. package/dist/features/session-history-search/index.d.ts +6 -0
  257. package/dist/features/session-history-search/index.d.ts.map +1 -0
  258. package/dist/features/session-history-search/index.js +480 -0
  259. package/dist/features/session-history-search/index.js.map +1 -0
  260. package/dist/features/session-history-search/types.d.ts +36 -0
  261. package/dist/features/session-history-search/types.d.ts.map +1 -0
  262. package/dist/features/session-history-search/types.js +2 -0
  263. package/dist/features/session-history-search/types.js.map +1 -0
  264. package/dist/hooks/__tests__/background-process-guard.test.js +101 -5
  265. package/dist/hooks/__tests__/background-process-guard.test.js.map +1 -1
  266. package/dist/hooks/__tests__/bridge-openclaw.test.js +16 -5
  267. package/dist/hooks/__tests__/bridge-openclaw.test.js.map +1 -1
  268. package/dist/hooks/__tests__/bridge-routing.test.js +48 -1
  269. package/dist/hooks/__tests__/bridge-routing.test.js.map +1 -1
  270. package/dist/hooks/auto-slash-command/executor.d.ts.map +1 -1
  271. package/dist/hooks/auto-slash-command/executor.js +9 -1
  272. package/dist/hooks/auto-slash-command/executor.js.map +1 -1
  273. package/dist/hooks/auto-slash-command/types.d.ts +2 -0
  274. package/dist/hooks/auto-slash-command/types.d.ts.map +1 -1
  275. package/dist/hooks/auto-slash-command/types.js +0 -7
  276. package/dist/hooks/auto-slash-command/types.js.map +1 -1
  277. package/dist/hooks/autopilot/adapters/execution-adapter.js +3 -3
  278. package/dist/hooks/autopilot/prompts.js +1 -1
  279. package/dist/hooks/bridge-normalize.d.ts.map +1 -1
  280. package/dist/hooks/bridge-normalize.js +2 -0
  281. package/dist/hooks/bridge-normalize.js.map +1 -1
  282. package/dist/hooks/bridge.d.ts.map +1 -1
  283. package/dist/hooks/bridge.js +248 -39
  284. package/dist/hooks/bridge.js.map +1 -1
  285. package/dist/hooks/keyword-detector/__tests__/index.test.js +41 -0
  286. package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -1
  287. package/dist/hooks/keyword-detector/index.d.ts +1 -1
  288. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  289. package/dist/hooks/keyword-detector/index.js +3 -1
  290. package/dist/hooks/keyword-detector/index.js.map +1 -1
  291. package/dist/hooks/permission-handler/index.d.ts +8 -0
  292. package/dist/hooks/permission-handler/index.d.ts.map +1 -1
  293. package/dist/hooks/permission-handler/index.js +76 -0
  294. package/dist/hooks/permission-handler/index.js.map +1 -1
  295. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.d.ts +2 -0
  296. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.d.ts.map +1 -0
  297. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js +90 -0
  298. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js.map +1 -0
  299. package/dist/hooks/persistent-mode/__tests__/team-ralplan-stop.test.d.ts +2 -0
  300. package/dist/hooks/persistent-mode/__tests__/team-ralplan-stop.test.d.ts.map +1 -0
  301. package/dist/hooks/persistent-mode/__tests__/team-ralplan-stop.test.js +535 -0
  302. package/dist/hooks/persistent-mode/__tests__/team-ralplan-stop.test.js.map +1 -0
  303. package/dist/hooks/persistent-mode/index.d.ts +1 -1
  304. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  305. package/dist/hooks/persistent-mode/index.js +296 -21
  306. package/dist/hooks/persistent-mode/index.js.map +1 -1
  307. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js +156 -0
  308. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js.map +1 -1
  309. package/dist/hooks/project-memory/__tests__/integration.test.js +27 -2
  310. package/dist/hooks/project-memory/__tests__/integration.test.js.map +1 -1
  311. package/dist/hooks/project-memory/__tests__/storage.test.js +37 -0
  312. package/dist/hooks/project-memory/__tests__/storage.test.js.map +1 -1
  313. package/dist/hooks/project-memory/storage.d.ts +1 -1
  314. package/dist/hooks/project-memory/storage.d.ts.map +1 -1
  315. package/dist/hooks/project-memory/storage.js +5 -4
  316. package/dist/hooks/project-memory/storage.js.map +1 -1
  317. package/dist/hooks/ralph/index.d.ts +1 -1
  318. package/dist/hooks/ralph/index.d.ts.map +1 -1
  319. package/dist/hooks/ralph/index.js +1 -1
  320. package/dist/hooks/ralph/index.js.map +1 -1
  321. package/dist/hooks/ralph/loop.d.ts +18 -0
  322. package/dist/hooks/ralph/loop.d.ts.map +1 -1
  323. package/dist/hooks/ralph/loop.js +31 -0
  324. package/dist/hooks/ralph/loop.js.map +1 -1
  325. package/dist/hooks/ralph/verifier.d.ts +4 -1
  326. package/dist/hooks/ralph/verifier.d.ts.map +1 -1
  327. package/dist/hooks/ralph/verifier.js +56 -21
  328. package/dist/hooks/ralph/verifier.js.map +1 -1
  329. package/dist/hooks/recovery/__tests__/storage.test.d.ts +2 -0
  330. package/dist/hooks/recovery/__tests__/storage.test.d.ts.map +1 -0
  331. package/dist/hooks/recovery/__tests__/storage.test.js +65 -0
  332. package/dist/hooks/recovery/__tests__/storage.test.js.map +1 -0
  333. package/dist/hooks/recovery/storage.d.ts +5 -1
  334. package/dist/hooks/recovery/storage.d.ts.map +1 -1
  335. package/dist/hooks/recovery/storage.js +7 -29
  336. package/dist/hooks/recovery/storage.js.map +1 -1
  337. package/dist/hooks/recovery/types.d.ts +1 -1
  338. package/dist/hooks/recovery/types.d.ts.map +1 -1
  339. package/dist/hooks/session-end/__tests__/duplicate-notifications.test.d.ts +2 -0
  340. package/dist/hooks/session-end/__tests__/duplicate-notifications.test.d.ts.map +1 -0
  341. package/dist/hooks/session-end/__tests__/duplicate-notifications.test.js +140 -0
  342. package/dist/hooks/session-end/__tests__/duplicate-notifications.test.js.map +1 -0
  343. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.d.ts +2 -0
  344. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.d.ts.map +1 -0
  345. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.js +122 -0
  346. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.js.map +1 -0
  347. package/dist/hooks/session-end/__tests__/openclaw-session-end.test.js +38 -12
  348. package/dist/hooks/session-end/__tests__/openclaw-session-end.test.js.map +1 -1
  349. package/dist/hooks/session-end/callbacks.d.ts +4 -1
  350. package/dist/hooks/session-end/callbacks.d.ts.map +1 -1
  351. package/dist/hooks/session-end/callbacks.js +5 -4
  352. package/dist/hooks/session-end/callbacks.js.map +1 -1
  353. package/dist/hooks/session-end/index.d.ts.map +1 -1
  354. package/dist/hooks/session-end/index.js +162 -36
  355. package/dist/hooks/session-end/index.js.map +1 -1
  356. package/dist/hooks/skill-state/__tests__/skill-state.test.js +35 -33
  357. package/dist/hooks/skill-state/__tests__/skill-state.test.js.map +1 -1
  358. package/dist/hooks/skill-state/index.d.ts +3 -3
  359. package/dist/hooks/skill-state/index.d.ts.map +1 -1
  360. package/dist/hooks/skill-state/index.js +7 -11
  361. package/dist/hooks/skill-state/index.js.map +1 -1
  362. package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
  363. package/dist/hooks/subagent-tracker/index.js +22 -0
  364. package/dist/hooks/subagent-tracker/index.js.map +1 -1
  365. package/dist/hooks/think-mode/__tests__/index.test.js +20 -20
  366. package/dist/hooks/think-mode/__tests__/index.test.js.map +1 -1
  367. package/dist/hooks/think-mode/switcher.d.ts.map +1 -1
  368. package/dist/hooks/think-mode/switcher.js +13 -10
  369. package/dist/hooks/think-mode/switcher.js.map +1 -1
  370. package/dist/hooks/thinking-block-validator/__tests__/index.test.d.ts +2 -0
  371. package/dist/hooks/thinking-block-validator/__tests__/index.test.d.ts.map +1 -0
  372. package/dist/hooks/thinking-block-validator/__tests__/index.test.js +56 -0
  373. package/dist/hooks/thinking-block-validator/__tests__/index.test.js.map +1 -0
  374. package/dist/hooks/thinking-block-validator/index.d.ts.map +1 -1
  375. package/dist/hooks/thinking-block-validator/index.js +7 -6
  376. package/dist/hooks/thinking-block-validator/index.js.map +1 -1
  377. package/dist/hooks/todo-continuation/index.d.ts +6 -0
  378. package/dist/hooks/todo-continuation/index.d.ts.map +1 -1
  379. package/dist/hooks/todo-continuation/index.js +14 -5
  380. package/dist/hooks/todo-continuation/index.js.map +1 -1
  381. package/dist/hud/elements/agents.d.ts.map +1 -1
  382. package/dist/hud/elements/agents.js +8 -14
  383. package/dist/hud/elements/agents.js.map +1 -1
  384. package/dist/hud/elements/index.d.ts +1 -0
  385. package/dist/hud/elements/index.d.ts.map +1 -1
  386. package/dist/hud/elements/index.js +1 -0
  387. package/dist/hud/elements/index.js.map +1 -1
  388. package/dist/hud/elements/limits.d.ts +3 -3
  389. package/dist/hud/elements/limits.d.ts.map +1 -1
  390. package/dist/hud/elements/limits.js +26 -18
  391. package/dist/hud/elements/limits.js.map +1 -1
  392. package/dist/hud/elements/mission-board.d.ts +2 -0
  393. package/dist/hud/elements/mission-board.d.ts.map +1 -0
  394. package/dist/hud/elements/mission-board.js +2 -0
  395. package/dist/hud/elements/mission-board.js.map +1 -0
  396. package/dist/hud/index.d.ts +1 -1
  397. package/dist/hud/index.d.ts.map +1 -1
  398. package/dist/hud/index.js +10 -2
  399. package/dist/hud/index.js.map +1 -1
  400. package/dist/hud/mission-board.d.ts +75 -0
  401. package/dist/hud/mission-board.d.ts.map +1 -0
  402. package/dist/hud/mission-board.js +420 -0
  403. package/dist/hud/mission-board.js.map +1 -0
  404. package/dist/hud/render.d.ts.map +1 -1
  405. package/dist/hud/render.js +16 -8
  406. package/dist/hud/render.js.map +1 -1
  407. package/dist/hud/state.d.ts.map +1 -1
  408. package/dist/hud/state.js +13 -0
  409. package/dist/hud/state.js.map +1 -1
  410. package/dist/hud/types.d.ts +11 -0
  411. package/dist/hud/types.d.ts.map +1 -1
  412. package/dist/hud/types.js +10 -0
  413. package/dist/hud/types.js.map +1 -1
  414. package/dist/hud/usage-api.d.ts +1 -1
  415. package/dist/hud/usage-api.d.ts.map +1 -1
  416. package/dist/hud/usage-api.js +207 -106
  417. package/dist/hud/usage-api.js.map +1 -1
  418. package/dist/index.d.ts +1 -0
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +2 -3
  421. package/dist/index.js.map +1 -1
  422. package/dist/installer/__tests__/claude-md-merge.test.js +53 -9
  423. package/dist/installer/__tests__/claude-md-merge.test.js.map +1 -1
  424. package/dist/installer/__tests__/hook-templates.test.d.ts +2 -0
  425. package/dist/installer/__tests__/hook-templates.test.d.ts.map +1 -0
  426. package/dist/installer/__tests__/hook-templates.test.js +76 -0
  427. package/dist/installer/__tests__/hook-templates.test.js.map +1 -0
  428. package/dist/installer/hooks.d.ts +15 -0
  429. package/dist/installer/hooks.d.ts.map +1 -1
  430. package/dist/installer/hooks.js +51 -0
  431. package/dist/installer/hooks.js.map +1 -1
  432. package/dist/installer/index.d.ts +25 -0
  433. package/dist/installer/index.d.ts.map +1 -1
  434. package/dist/installer/index.js +273 -64
  435. package/dist/installer/index.js.map +1 -1
  436. package/dist/lib/mode-names.d.ts.map +1 -1
  437. package/dist/lib/mode-names.js +2 -0
  438. package/dist/lib/mode-names.js.map +1 -1
  439. package/dist/mcp/__tests__/team-server-artifact-convergence.test.js +30 -3
  440. package/dist/mcp/__tests__/team-server-artifact-convergence.test.js.map +1 -1
  441. package/dist/mcp/__tests__/team-server-deprecation.test.js +2 -0
  442. package/dist/mcp/__tests__/team-server-deprecation.test.js.map +1 -1
  443. package/dist/mcp/team-job-convergence.d.ts.map +1 -1
  444. package/dist/mcp/team-job-convergence.js +12 -3
  445. package/dist/mcp/team-job-convergence.js.map +1 -1
  446. package/dist/mcp/team-server.d.ts.map +1 -1
  447. package/dist/mcp/team-server.js +18 -4
  448. package/dist/mcp/team-server.js.map +1 -1
  449. package/dist/notifications/__tests__/config-merge.test.js +36 -1
  450. package/dist/notifications/__tests__/config-merge.test.js.map +1 -1
  451. package/dist/notifications/__tests__/formatter.test.js +13 -5
  452. package/dist/notifications/__tests__/formatter.test.js.map +1 -1
  453. package/dist/notifications/__tests__/notify-registry-integration.test.js +27 -1
  454. package/dist/notifications/__tests__/notify-registry-integration.test.js.map +1 -1
  455. package/dist/notifications/__tests__/verbosity.test.js +33 -1
  456. package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
  457. package/dist/notifications/config.d.ts +7 -0
  458. package/dist/notifications/config.d.ts.map +1 -1
  459. package/dist/notifications/config.js +18 -0
  460. package/dist/notifications/config.js.map +1 -1
  461. package/dist/notifications/formatter.d.ts +2 -2
  462. package/dist/notifications/formatter.d.ts.map +1 -1
  463. package/dist/notifications/formatter.js +7 -6
  464. package/dist/notifications/formatter.js.map +1 -1
  465. package/dist/notifications/index.d.ts +1 -1
  466. package/dist/notifications/index.d.ts.map +1 -1
  467. package/dist/notifications/index.js +5 -3
  468. package/dist/notifications/index.js.map +1 -1
  469. package/dist/notifications/template-engine.js +1 -1
  470. package/dist/notifications/template-engine.js.map +1 -1
  471. package/dist/notifications/types.d.ts +4 -0
  472. package/dist/notifications/types.d.ts.map +1 -1
  473. package/dist/openclaw/__tests__/dispatcher.test.js +26 -0
  474. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  475. package/dist/openclaw/__tests__/index.test.js +42 -0
  476. package/dist/openclaw/__tests__/index.test.js.map +1 -1
  477. package/dist/openclaw/__tests__/signal.test.d.ts +2 -0
  478. package/dist/openclaw/__tests__/signal.test.d.ts.map +1 -0
  479. package/dist/openclaw/__tests__/signal.test.js +69 -0
  480. package/dist/openclaw/__tests__/signal.test.js.map +1 -0
  481. package/dist/openclaw/dispatcher.d.ts +5 -1
  482. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  483. package/dist/openclaw/dispatcher.js +13 -2
  484. package/dist/openclaw/dispatcher.js.map +1 -1
  485. package/dist/openclaw/index.d.ts +2 -1
  486. package/dist/openclaw/index.d.ts.map +1 -1
  487. package/dist/openclaw/index.js +29 -15
  488. package/dist/openclaw/index.js.map +1 -1
  489. package/dist/openclaw/signal.d.ts +3 -0
  490. package/dist/openclaw/signal.d.ts.map +1 -0
  491. package/dist/openclaw/signal.js +215 -0
  492. package/dist/openclaw/signal.js.map +1 -0
  493. package/dist/openclaw/types.d.ts +35 -0
  494. package/dist/openclaw/types.d.ts.map +1 -1
  495. package/dist/shared/types.d.ts +2 -12
  496. package/dist/shared/types.d.ts.map +1 -1
  497. package/dist/skills/__tests__/mingw-escape.test.js +41 -11
  498. package/dist/skills/__tests__/mingw-escape.test.js.map +1 -1
  499. package/dist/team/__tests__/api-interop.cwd-resolution.test.d.ts +2 -0
  500. package/dist/team/__tests__/api-interop.cwd-resolution.test.d.ts.map +1 -0
  501. package/dist/team/__tests__/api-interop.cwd-resolution.test.js +78 -0
  502. package/dist/team/__tests__/api-interop.cwd-resolution.test.js.map +1 -0
  503. package/dist/team/__tests__/api-interop.dispatch.test.d.ts +2 -0
  504. package/dist/team/__tests__/api-interop.dispatch.test.d.ts.map +1 -0
  505. package/dist/team/__tests__/api-interop.dispatch.test.js +125 -0
  506. package/dist/team/__tests__/api-interop.dispatch.test.js.map +1 -0
  507. package/dist/team/__tests__/cli-detection.test.d.ts +2 -0
  508. package/dist/team/__tests__/cli-detection.test.d.ts.map +1 -0
  509. package/dist/team/__tests__/cli-detection.test.js +36 -0
  510. package/dist/team/__tests__/cli-detection.test.js.map +1 -0
  511. package/dist/team/__tests__/model-contract.test.js +79 -2
  512. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  513. package/dist/team/__tests__/runtime-done-recovery.test.js +1 -0
  514. package/dist/team/__tests__/runtime-done-recovery.test.js.map +1 -1
  515. package/dist/team/__tests__/runtime-prompt-mode.test.js +84 -8
  516. package/dist/team/__tests__/runtime-prompt-mode.test.js.map +1 -1
  517. package/dist/team/__tests__/runtime-v2.dispatch.test.d.ts +2 -0
  518. package/dist/team/__tests__/runtime-v2.dispatch.test.d.ts.map +1 -0
  519. package/dist/team/__tests__/runtime-v2.dispatch.test.js +237 -0
  520. package/dist/team/__tests__/runtime-v2.dispatch.test.js.map +1 -0
  521. package/dist/team/__tests__/runtime-v2.monitor.test.d.ts +2 -0
  522. package/dist/team/__tests__/runtime-v2.monitor.test.d.ts.map +1 -0
  523. package/dist/team/__tests__/runtime-v2.monitor.test.js +103 -0
  524. package/dist/team/__tests__/runtime-v2.monitor.test.js.map +1 -0
  525. package/dist/team/__tests__/runtime-v2.shutdown.test.d.ts +2 -0
  526. package/dist/team/__tests__/runtime-v2.shutdown.test.d.ts.map +1 -0
  527. package/dist/team/__tests__/runtime-v2.shutdown.test.js +49 -0
  528. package/dist/team/__tests__/runtime-v2.shutdown.test.js.map +1 -0
  529. package/dist/team/__tests__/runtime-watchdog-retry.test.js +3 -0
  530. package/dist/team/__tests__/runtime-watchdog-retry.test.js.map +1 -1
  531. package/dist/team/__tests__/tmux-session.create-team.test.js +29 -12
  532. package/dist/team/__tests__/tmux-session.create-team.test.js.map +1 -1
  533. package/dist/team/__tests__/tmux-session.kill-team-session.test.js +6 -0
  534. package/dist/team/__tests__/tmux-session.kill-team-session.test.js.map +1 -1
  535. package/dist/team/__tests__/tmux-session.test.js +9 -0
  536. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  537. package/dist/team/__tests__/worker-bootstrap.test.js +32 -3
  538. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  539. package/dist/team/api-interop.d.ts.map +1 -1
  540. package/dist/team/api-interop.js +153 -2
  541. package/dist/team/api-interop.js.map +1 -1
  542. package/dist/team/cli-detection.d.ts.map +1 -1
  543. package/dist/team/cli-detection.js +6 -2
  544. package/dist/team/cli-detection.js.map +1 -1
  545. package/dist/team/idle-nudge.js +1 -1
  546. package/dist/team/idle-nudge.js.map +1 -1
  547. package/dist/team/mcp-team-bridge.d.ts.map +1 -1
  548. package/dist/team/mcp-team-bridge.js +2 -1
  549. package/dist/team/mcp-team-bridge.js.map +1 -1
  550. package/dist/team/model-contract.d.ts +1 -1
  551. package/dist/team/model-contract.d.ts.map +1 -1
  552. package/dist/team/model-contract.js +35 -4
  553. package/dist/team/model-contract.js.map +1 -1
  554. package/dist/team/runtime-cli.d.ts.map +1 -1
  555. package/dist/team/runtime-cli.js +10 -7
  556. package/dist/team/runtime-cli.js.map +1 -1
  557. package/dist/team/runtime-v2.d.ts +4 -0
  558. package/dist/team/runtime-v2.d.ts.map +1 -1
  559. package/dist/team/runtime-v2.js +231 -59
  560. package/dist/team/runtime-v2.js.map +1 -1
  561. package/dist/team/runtime.d.ts +6 -1
  562. package/dist/team/runtime.d.ts.map +1 -1
  563. package/dist/team/runtime.js +39 -14
  564. package/dist/team/runtime.js.map +1 -1
  565. package/dist/team/tmux-session.d.ts +20 -11
  566. package/dist/team/tmux-session.d.ts.map +1 -1
  567. package/dist/team/tmux-session.js +108 -51
  568. package/dist/team/tmux-session.js.map +1 -1
  569. package/dist/team/types.d.ts +1 -0
  570. package/dist/team/types.d.ts.map +1 -1
  571. package/dist/team/types.js.map +1 -1
  572. package/dist/team/worker-bootstrap.d.ts +2 -0
  573. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  574. package/dist/team/worker-bootstrap.js +46 -12
  575. package/dist/team/worker-bootstrap.js.map +1 -1
  576. package/dist/tools/__tests__/memory-tools.test.js +29 -1
  577. package/dist/tools/__tests__/memory-tools.test.js.map +1 -1
  578. package/dist/tools/lsp/client.d.ts +11 -0
  579. package/dist/tools/lsp/client.d.ts.map +1 -1
  580. package/dist/tools/lsp/client.js +46 -0
  581. package/dist/tools/lsp/client.js.map +1 -1
  582. package/dist/tools/session-history-tools.d.ts +23 -0
  583. package/dist/tools/session-history-tools.d.ts.map +1 -0
  584. package/dist/tools/session-history-tools.js +41 -0
  585. package/dist/tools/session-history-tools.js.map +1 -0
  586. package/dist/tools/trace-tools.d.ts +9 -0
  587. package/dist/tools/trace-tools.d.ts.map +1 -1
  588. package/dist/tools/trace-tools.js +2 -1
  589. package/dist/tools/trace-tools.js.map +1 -1
  590. package/dist/utils/frontmatter.d.ts +5 -0
  591. package/dist/utils/frontmatter.d.ts.map +1 -1
  592. package/dist/utils/frontmatter.js +22 -0
  593. package/dist/utils/frontmatter.js.map +1 -1
  594. package/dist/utils/skill-pipeline.d.ts +9 -0
  595. package/dist/utils/skill-pipeline.d.ts.map +1 -0
  596. package/dist/utils/skill-pipeline.js +97 -0
  597. package/dist/utils/skill-pipeline.js.map +1 -0
  598. package/docs/AGENTS.md +1 -1
  599. package/docs/ANALYTICS-SYSTEM.md +23 -132
  600. package/docs/CLAUDE.md +40 -139
  601. package/docs/MIGRATION.md +4 -4
  602. package/docs/OPENCLAW-ROUTING.md +102 -0
  603. package/docs/PERFORMANCE-MONITORING.md +30 -55
  604. package/docs/REFERENCE.md +62 -35
  605. package/docs/TIERED_AGENTS_V2.md +3 -2
  606. package/docs/design/SKILL_AUDIT_1445.md +75 -0
  607. package/docs/ko/MIGRATION.md +2 -2
  608. package/docs/ko/REFERENCE.md +14 -22
  609. package/docs/partials/agent-tiers.md +11 -15
  610. package/docs/partials/features.md +2 -2
  611. package/docs/partials/mode-selection-guide.md +2 -2
  612. package/docs/shared/agent-tiers.md +11 -15
  613. package/docs/shared/features.md +2 -2
  614. package/docs/shared/mode-selection-guide.md +2 -2
  615. package/package.json +4 -1
  616. package/scripts/code-simplifier.mjs +1 -1
  617. package/scripts/context-guard-stop.mjs +26 -10
  618. package/scripts/keyword-detector.mjs +99 -39
  619. package/scripts/persistent-mode.cjs +295 -34
  620. package/scripts/persistent-mode.mjs +79 -21
  621. package/scripts/plugin-setup.mjs +10 -1
  622. package/scripts/post-tool-verifier.mjs +57 -3
  623. package/scripts/pre-tool-enforcer.mjs +207 -2
  624. package/scripts/run-provider-advisor.js +30 -3
  625. package/scripts/session-start.mjs +3 -3
  626. package/scripts/setup-claude-md.sh +159 -0
  627. package/scripts/setup-progress.sh +123 -0
  628. package/scripts/sync-metadata.ts +11 -1
  629. package/skills/AGENTS.md +13 -17
  630. package/skills/ai-slop-cleaner/SKILL.md +130 -0
  631. package/skills/ask/SKILL.md +51 -0
  632. package/skills/ccg/SKILL.md +6 -6
  633. package/skills/deep-interview/SKILL.md +4 -0
  634. package/skills/omc-doctor/SKILL.md +2 -2
  635. package/skills/omc-setup/SKILL.md +75 -1206
  636. package/skills/omc-setup/phases/01-install-claude-md.md +76 -0
  637. package/skills/omc-setup/phases/02-configure.md +211 -0
  638. package/skills/omc-setup/phases/03-integrations.md +192 -0
  639. package/skills/omc-setup/phases/04-welcome.md +192 -0
  640. package/skills/omc-teams/SKILL.md +35 -2
  641. package/skills/plan/SKILL.md +3 -0
  642. package/skills/ralph/SKILL.md +16 -10
  643. package/skills/release/SKILL.md +4 -0
  644. package/skills/setup/SKILL.md +40 -0
  645. package/skills/team/SKILL.md +6 -6
  646. package/templates/hooks/code-simplifier.mjs +1 -1
  647. package/templates/hooks/keyword-detector.mjs +100 -32
  648. package/templates/hooks/persistent-mode.mjs +43 -4
  649. package/templates/hooks/pre-tool-use.mjs +115 -1
  650. package/templates/hooks/session-start.mjs +1 -1
  651. package/agents/build-fixer.md +0 -90
  652. package/agents/deep-executor.md +0 -112
  653. package/agents/harsh-critic.md +0 -254
  654. package/agents/quality-reviewer.md +0 -151
  655. package/skills/analyze/SKILL.md +0 -87
  656. package/skills/ask-codex/SKILL.md +0 -47
  657. package/skills/ask-gemini/SKILL.md +0 -47
  658. package/skills/build-fix/SKILL.md +0 -123
  659. package/skills/code-review/SKILL.md +0 -573
  660. package/skills/configure-openclaw/SKILL.md +0 -383
  661. package/skills/learn-about-omc/SKILL.md +0 -37
  662. package/skills/note/SKILL.md +0 -62
  663. package/skills/omc-help/SKILL.md +0 -192
  664. package/skills/ralph-init/SKILL.md +0 -40
  665. package/skills/security-review/SKILL.md +0 -282
  666. package/skills/tdd/SKILL.md +0 -104
  667. package/skills/trace/SKILL.md +0 -33
@@ -408,11 +408,11 @@ var require_codegen = __commonJS({
408
408
  const rhs = this.rhs === void 0 ? "" : ` = ${this.rhs}`;
409
409
  return `${varKind} ${this.name}${rhs};` + _n;
410
410
  }
411
- optimizeNames(names, constants) {
411
+ optimizeNames(names, constants2) {
412
412
  if (!names[this.name.str])
413
413
  return;
414
414
  if (this.rhs)
415
- this.rhs = optimizeExpr(this.rhs, names, constants);
415
+ this.rhs = optimizeExpr(this.rhs, names, constants2);
416
416
  return this;
417
417
  }
418
418
  get names() {
@@ -429,10 +429,10 @@ var require_codegen = __commonJS({
429
429
  render({ _n }) {
430
430
  return `${this.lhs} = ${this.rhs};` + _n;
431
431
  }
432
- optimizeNames(names, constants) {
432
+ optimizeNames(names, constants2) {
433
433
  if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)
434
434
  return;
435
- this.rhs = optimizeExpr(this.rhs, names, constants);
435
+ this.rhs = optimizeExpr(this.rhs, names, constants2);
436
436
  return this;
437
437
  }
438
438
  get names() {
@@ -493,8 +493,8 @@ var require_codegen = __commonJS({
493
493
  optimizeNodes() {
494
494
  return `${this.code}` ? this : void 0;
495
495
  }
496
- optimizeNames(names, constants) {
497
- this.code = optimizeExpr(this.code, names, constants);
496
+ optimizeNames(names, constants2) {
497
+ this.code = optimizeExpr(this.code, names, constants2);
498
498
  return this;
499
499
  }
500
500
  get names() {
@@ -523,12 +523,12 @@ var require_codegen = __commonJS({
523
523
  }
524
524
  return nodes.length > 0 ? this : void 0;
525
525
  }
526
- optimizeNames(names, constants) {
526
+ optimizeNames(names, constants2) {
527
527
  const { nodes } = this;
528
528
  let i = nodes.length;
529
529
  while (i--) {
530
530
  const n = nodes[i];
531
- if (n.optimizeNames(names, constants))
531
+ if (n.optimizeNames(names, constants2))
532
532
  continue;
533
533
  subtractNames(names, n.names);
534
534
  nodes.splice(i, 1);
@@ -581,12 +581,12 @@ var require_codegen = __commonJS({
581
581
  return void 0;
582
582
  return this;
583
583
  }
584
- optimizeNames(names, constants) {
584
+ optimizeNames(names, constants2) {
585
585
  var _a;
586
- this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);
587
- if (!(super.optimizeNames(names, constants) || this.else))
586
+ this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants2);
587
+ if (!(super.optimizeNames(names, constants2) || this.else))
588
588
  return;
589
- this.condition = optimizeExpr(this.condition, names, constants);
589
+ this.condition = optimizeExpr(this.condition, names, constants2);
590
590
  return this;
591
591
  }
592
592
  get names() {
@@ -609,10 +609,10 @@ var require_codegen = __commonJS({
609
609
  render(opts) {
610
610
  return `for(${this.iteration})` + super.render(opts);
611
611
  }
612
- optimizeNames(names, constants) {
613
- if (!super.optimizeNames(names, constants))
612
+ optimizeNames(names, constants2) {
613
+ if (!super.optimizeNames(names, constants2))
614
614
  return;
615
- this.iteration = optimizeExpr(this.iteration, names, constants);
615
+ this.iteration = optimizeExpr(this.iteration, names, constants2);
616
616
  return this;
617
617
  }
618
618
  get names() {
@@ -648,10 +648,10 @@ var require_codegen = __commonJS({
648
648
  render(opts) {
649
649
  return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);
650
650
  }
651
- optimizeNames(names, constants) {
652
- if (!super.optimizeNames(names, constants))
651
+ optimizeNames(names, constants2) {
652
+ if (!super.optimizeNames(names, constants2))
653
653
  return;
654
- this.iterable = optimizeExpr(this.iterable, names, constants);
654
+ this.iterable = optimizeExpr(this.iterable, names, constants2);
655
655
  return this;
656
656
  }
657
657
  get names() {
@@ -693,11 +693,11 @@ var require_codegen = __commonJS({
693
693
  (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();
694
694
  return this;
695
695
  }
696
- optimizeNames(names, constants) {
696
+ optimizeNames(names, constants2) {
697
697
  var _a, _b;
698
- super.optimizeNames(names, constants);
699
- (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);
700
- (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);
698
+ super.optimizeNames(names, constants2);
699
+ (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants2);
700
+ (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants2);
701
701
  return this;
702
702
  }
703
703
  get names() {
@@ -998,7 +998,7 @@ var require_codegen = __commonJS({
998
998
  function addExprNames(names, from) {
999
999
  return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;
1000
1000
  }
1001
- function optimizeExpr(expr, names, constants) {
1001
+ function optimizeExpr(expr, names, constants2) {
1002
1002
  if (expr instanceof code_1.Name)
1003
1003
  return replaceName(expr);
1004
1004
  if (!canOptimize(expr))
@@ -1013,14 +1013,14 @@ var require_codegen = __commonJS({
1013
1013
  return items;
1014
1014
  }, []));
1015
1015
  function replaceName(n) {
1016
- const c = constants[n.str];
1016
+ const c = constants2[n.str];
1017
1017
  if (c === void 0 || names[n.str] !== 1)
1018
1018
  return n;
1019
1019
  delete names[n.str];
1020
1020
  return c;
1021
1021
  }
1022
1022
  function canOptimize(e) {
1023
- return e instanceof code_1._Code && e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== void 0);
1023
+ return e instanceof code_1._Code && e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants2[c.str] !== void 0);
1024
1024
  }
1025
1025
  }
1026
1026
  function subtractNames(names, from) {
@@ -2982,7 +2982,7 @@ var require_compile = __commonJS({
2982
2982
  const schOrFunc = root.refs[ref];
2983
2983
  if (schOrFunc)
2984
2984
  return schOrFunc;
2985
- let _sch = resolve.call(this, root, ref);
2985
+ let _sch = resolve2.call(this, root, ref);
2986
2986
  if (_sch === void 0) {
2987
2987
  const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref];
2988
2988
  const { schemaId } = this.opts;
@@ -3009,7 +3009,7 @@ var require_compile = __commonJS({
3009
3009
  function sameSchemaEnv(s1, s2) {
3010
3010
  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
3011
3011
  }
3012
- function resolve(root, ref) {
3012
+ function resolve2(root, ref) {
3013
3013
  let sch;
3014
3014
  while (typeof (sch = this.refs[ref]) == "string")
3015
3015
  ref = sch;
@@ -3584,55 +3584,55 @@ var require_fast_uri = __commonJS({
3584
3584
  }
3585
3585
  return uri;
3586
3586
  }
3587
- function resolve(baseURI, relativeURI, options) {
3587
+ function resolve2(baseURI, relativeURI, options) {
3588
3588
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
3589
3589
  const resolved = resolveComponent(parse3(baseURI, schemelessOptions), parse3(relativeURI, schemelessOptions), schemelessOptions, true);
3590
3590
  schemelessOptions.skipEscape = true;
3591
3591
  return serialize(resolved, schemelessOptions);
3592
3592
  }
3593
- function resolveComponent(base, relative, options, skipNormalization) {
3593
+ function resolveComponent(base, relative2, options, skipNormalization) {
3594
3594
  const target = {};
3595
3595
  if (!skipNormalization) {
3596
3596
  base = parse3(serialize(base, options), options);
3597
- relative = parse3(serialize(relative, options), options);
3597
+ relative2 = parse3(serialize(relative2, options), options);
3598
3598
  }
3599
3599
  options = options || {};
3600
- if (!options.tolerant && relative.scheme) {
3601
- target.scheme = relative.scheme;
3602
- target.userinfo = relative.userinfo;
3603
- target.host = relative.host;
3604
- target.port = relative.port;
3605
- target.path = removeDotSegments(relative.path || "");
3606
- target.query = relative.query;
3600
+ if (!options.tolerant && relative2.scheme) {
3601
+ target.scheme = relative2.scheme;
3602
+ target.userinfo = relative2.userinfo;
3603
+ target.host = relative2.host;
3604
+ target.port = relative2.port;
3605
+ target.path = removeDotSegments(relative2.path || "");
3606
+ target.query = relative2.query;
3607
3607
  } else {
3608
- if (relative.userinfo !== void 0 || relative.host !== void 0 || relative.port !== void 0) {
3609
- target.userinfo = relative.userinfo;
3610
- target.host = relative.host;
3611
- target.port = relative.port;
3612
- target.path = removeDotSegments(relative.path || "");
3613
- target.query = relative.query;
3608
+ if (relative2.userinfo !== void 0 || relative2.host !== void 0 || relative2.port !== void 0) {
3609
+ target.userinfo = relative2.userinfo;
3610
+ target.host = relative2.host;
3611
+ target.port = relative2.port;
3612
+ target.path = removeDotSegments(relative2.path || "");
3613
+ target.query = relative2.query;
3614
3614
  } else {
3615
- if (!relative.path) {
3615
+ if (!relative2.path) {
3616
3616
  target.path = base.path;
3617
- if (relative.query !== void 0) {
3618
- target.query = relative.query;
3617
+ if (relative2.query !== void 0) {
3618
+ target.query = relative2.query;
3619
3619
  } else {
3620
3620
  target.query = base.query;
3621
3621
  }
3622
3622
  } else {
3623
- if (relative.path[0] === "/") {
3624
- target.path = removeDotSegments(relative.path);
3623
+ if (relative2.path[0] === "/") {
3624
+ target.path = removeDotSegments(relative2.path);
3625
3625
  } else {
3626
3626
  if ((base.userinfo !== void 0 || base.host !== void 0 || base.port !== void 0) && !base.path) {
3627
- target.path = "/" + relative.path;
3627
+ target.path = "/" + relative2.path;
3628
3628
  } else if (!base.path) {
3629
- target.path = relative.path;
3629
+ target.path = relative2.path;
3630
3630
  } else {
3631
- target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path;
3631
+ target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative2.path;
3632
3632
  }
3633
3633
  target.path = removeDotSegments(target.path);
3634
3634
  }
3635
- target.query = relative.query;
3635
+ target.query = relative2.query;
3636
3636
  }
3637
3637
  target.userinfo = base.userinfo;
3638
3638
  target.host = base.host;
@@ -3640,7 +3640,7 @@ var require_fast_uri = __commonJS({
3640
3640
  }
3641
3641
  target.scheme = base.scheme;
3642
3642
  }
3643
- target.fragment = relative.fragment;
3643
+ target.fragment = relative2.fragment;
3644
3644
  return target;
3645
3645
  }
3646
3646
  function equal(uriA, uriB, options) {
@@ -3811,7 +3811,7 @@ var require_fast_uri = __commonJS({
3811
3811
  var fastUri = {
3812
3812
  SCHEMES,
3813
3813
  normalize,
3814
- resolve,
3814
+ resolve: resolve2,
3815
3815
  resolveComponent,
3816
3816
  equal,
3817
3817
  serialize,
@@ -16664,7 +16664,7 @@ var Protocol = class {
16664
16664
  return;
16665
16665
  }
16666
16666
  const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1e3;
16667
- await new Promise((resolve) => setTimeout(resolve, pollInterval));
16667
+ await new Promise((resolve2) => setTimeout(resolve2, pollInterval));
16668
16668
  options?.signal?.throwIfAborted();
16669
16669
  }
16670
16670
  } catch (error2) {
@@ -16681,7 +16681,7 @@ var Protocol = class {
16681
16681
  */
16682
16682
  request(request, resultSchema, options) {
16683
16683
  const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {};
16684
- return new Promise((resolve, reject) => {
16684
+ return new Promise((resolve2, reject) => {
16685
16685
  const earlyReject = (error2) => {
16686
16686
  reject(error2);
16687
16687
  };
@@ -16759,7 +16759,7 @@ var Protocol = class {
16759
16759
  if (!parseResult.success) {
16760
16760
  reject(parseResult.error);
16761
16761
  } else {
16762
- resolve(parseResult.data);
16762
+ resolve2(parseResult.data);
16763
16763
  }
16764
16764
  } catch (error2) {
16765
16765
  reject(error2);
@@ -17020,12 +17020,12 @@ var Protocol = class {
17020
17020
  }
17021
17021
  } catch {
17022
17022
  }
17023
- return new Promise((resolve, reject) => {
17023
+ return new Promise((resolve2, reject) => {
17024
17024
  if (signal.aborted) {
17025
17025
  reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
17026
17026
  return;
17027
17027
  }
17028
- const timeoutId = setTimeout(resolve, interval);
17028
+ const timeoutId = setTimeout(resolve2, interval);
17029
17029
  signal.addEventListener("abort", () => {
17030
17030
  clearTimeout(timeoutId);
17031
17031
  reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
@@ -17754,12 +17754,12 @@ var StdioServerTransport = class {
17754
17754
  this.onclose?.();
17755
17755
  }
17756
17756
  send(message) {
17757
- return new Promise((resolve) => {
17757
+ return new Promise((resolve2) => {
17758
17758
  const json = serializeMessage(message);
17759
17759
  if (this._stdout.write(json)) {
17760
- resolve();
17760
+ resolve2();
17761
17761
  } else {
17762
- this._stdout.once("drain", resolve);
17762
+ this._stdout.once("drain", resolve2);
17763
17763
  }
17764
17764
  });
17765
17765
  }
@@ -17767,8 +17767,8 @@ var StdioServerTransport = class {
17767
17767
 
17768
17768
  // src/mcp/team-server.ts
17769
17769
  var import_child_process3 = require("child_process");
17770
- var import_path3 = require("path");
17771
- var import_fs2 = require("fs");
17770
+ var import_path4 = require("path");
17771
+ var import_fs3 = require("fs");
17772
17772
  var import_promises2 = require("fs/promises");
17773
17773
  var import_os = require("os");
17774
17774
 
@@ -17800,6 +17800,16 @@ async function tmuxAsync(args) {
17800
17800
  }
17801
17801
  return promisifiedExecFile("tmux", args);
17802
17802
  }
17803
+ function sanitizeName(name) {
17804
+ const sanitized = name.replace(/[^a-zA-Z0-9-]/g, "");
17805
+ if (sanitized.length === 0) {
17806
+ throw new Error(`Invalid name: "${name}" contains no valid characters (alphanumeric or hyphen)`);
17807
+ }
17808
+ if (sanitized.length < 2) {
17809
+ throw new Error(`Invalid name: "${name}" too short after sanitization (minimum 2 characters)`);
17810
+ }
17811
+ return sanitized.slice(0, 50);
17812
+ }
17803
17813
  function normalizeTmuxCapture(value) {
17804
17814
  return value.replace(/\r/g, "").replace(/\s+/g, " ").trim();
17805
17815
  }
@@ -17963,19 +17973,58 @@ async function killWorkerPanes(opts) {
17963
17973
  }
17964
17974
  }
17965
17975
  }
17976
+ async function killTeamSession(sessionName, workerPaneIds, leaderPaneId, options = {}) {
17977
+ const { execFile: execFile3 } = await import("child_process");
17978
+ const { promisify: promisify2 } = await import("util");
17979
+ const execFileAsync = promisify2(execFile3);
17980
+ const sessionMode = options.sessionMode ?? (sessionName.includes(":") ? "split-pane" : "detached-session");
17981
+ if (sessionMode === "split-pane") {
17982
+ if (!workerPaneIds?.length) return;
17983
+ for (const id of workerPaneIds) {
17984
+ if (id === leaderPaneId) continue;
17985
+ try {
17986
+ await execFileAsync("tmux", ["kill-pane", "-t", id]);
17987
+ } catch {
17988
+ }
17989
+ }
17990
+ return;
17991
+ }
17992
+ if (sessionMode === "dedicated-window") {
17993
+ try {
17994
+ await execFileAsync("tmux", ["kill-window", "-t", sessionName]);
17995
+ } catch {
17996
+ }
17997
+ return;
17998
+ }
17999
+ const sessionTarget = sessionName.split(":")[0] ?? sessionName;
18000
+ if (process.env.OMC_TEAM_ALLOW_KILL_CURRENT_SESSION !== "1" && process.env.TMUX) {
18001
+ try {
18002
+ const current = await tmuxAsync(["display-message", "-p", "#S"]);
18003
+ const currentSessionName = current.stdout.trim();
18004
+ if (currentSessionName && currentSessionName === sessionTarget) {
18005
+ return;
18006
+ }
18007
+ } catch {
18008
+ }
18009
+ }
18010
+ try {
18011
+ await execFileAsync("tmux", ["kill-session", "-t", sessionTarget]);
18012
+ } catch {
18013
+ }
18014
+ }
17966
18015
 
17967
18016
  // src/team/idle-nudge.ts
17968
18017
  var import_child_process2 = require("child_process");
17969
18018
  var DEFAULT_NUDGE_CONFIG = {
17970
18019
  delayMs: 3e4,
17971
18020
  maxCount: 3,
17972
- message: "Continue working on your assigned task."
18021
+ message: "Continue working on your assigned task and report concrete progress (not ACK-only)."
17973
18022
  };
17974
18023
  function capturePane(paneId) {
17975
- return new Promise((resolve) => {
18024
+ return new Promise((resolve2) => {
17976
18025
  (0, import_child_process2.execFile)("tmux", ["capture-pane", "-t", paneId, "-p", "-S", "-80"], (err, stdout) => {
17977
- if (err) resolve("");
17978
- else resolve(stdout ?? "");
18026
+ if (err) resolve2("");
18027
+ else resolve2(stdout ?? "");
17979
18028
  });
17980
18029
  });
17981
18030
  }
@@ -18054,14 +18103,114 @@ var NudgeTracker = class {
18054
18103
  };
18055
18104
 
18056
18105
  // src/mcp/team-job-convergence.ts
18106
+ var import_fs2 = require("fs");
18107
+ var import_path3 = require("path");
18108
+
18109
+ // src/team/git-worktree.ts
18110
+ var import_node_fs = require("node:fs");
18111
+ var import_node_path = require("node:path");
18112
+ var import_node_child_process = require("node:child_process");
18113
+
18114
+ // src/team/fs-utils.ts
18057
18115
  var import_fs = require("fs");
18058
18116
  var import_path2 = require("path");
18117
+ function atomicWriteJson(filePath, data, mode = 384) {
18118
+ const dir = (0, import_path2.dirname)(filePath);
18119
+ if (!(0, import_fs.existsSync)(dir)) (0, import_fs.mkdirSync)(dir, { recursive: true, mode: 448 });
18120
+ const tmpPath = `${filePath}.tmp.${process.pid}.${Date.now()}`;
18121
+ (0, import_fs.writeFileSync)(tmpPath, JSON.stringify(data, null, 2) + "\n", { encoding: "utf-8", mode });
18122
+ (0, import_fs.renameSync)(tmpPath, filePath);
18123
+ }
18124
+ function ensureDirWithMode(dirPath, mode = 448) {
18125
+ if (!(0, import_fs.existsSync)(dirPath)) (0, import_fs.mkdirSync)(dirPath, { recursive: true, mode });
18126
+ }
18127
+ function canonicalizePath(p) {
18128
+ const absInput = (0, import_path2.resolve)(p);
18129
+ const tail = [];
18130
+ let probe = absInput;
18131
+ while (true) {
18132
+ try {
18133
+ const realBase = (0, import_fs.realpathSync)(probe);
18134
+ return tail.reduce((acc, seg) => (0, import_path2.resolve)(acc, seg), realBase);
18135
+ } catch {
18136
+ const parent = (0, import_path2.dirname)(probe);
18137
+ if (parent === probe) return absInput;
18138
+ tail.unshift((0, import_path2.basename)(probe));
18139
+ probe = parent;
18140
+ }
18141
+ }
18142
+ }
18143
+ function validateResolvedPath(resolvedPath, expectedBase) {
18144
+ const absResolved = canonicalizePath(resolvedPath);
18145
+ const absBase = canonicalizePath(expectedBase);
18146
+ const rel = (0, import_path2.relative)(absBase, absResolved);
18147
+ if (rel !== "" && (rel.startsWith("..") || (0, import_path2.isAbsolute)(rel) || (0, import_path2.resolve)(absBase, rel) !== absResolved)) {
18148
+ throw new Error(`Path traversal detected: "${resolvedPath}" escapes base "${expectedBase}"`);
18149
+ }
18150
+ }
18151
+
18152
+ // src/team/git-worktree.ts
18153
+ function getWorktreePath(repoRoot, teamName, workerName) {
18154
+ return (0, import_node_path.join)(repoRoot, ".omc", "worktrees", sanitizeName(teamName), sanitizeName(workerName));
18155
+ }
18156
+ function getBranchName(teamName, workerName) {
18157
+ return `omc-team/${sanitizeName(teamName)}/${sanitizeName(workerName)}`;
18158
+ }
18159
+ function getMetadataPath(repoRoot, teamName) {
18160
+ return (0, import_node_path.join)(repoRoot, ".omc", "state", "team-bridge", sanitizeName(teamName), "worktrees.json");
18161
+ }
18162
+ function readMetadata(repoRoot, teamName) {
18163
+ const metaPath = getMetadataPath(repoRoot, teamName);
18164
+ if (!(0, import_node_fs.existsSync)(metaPath)) return [];
18165
+ try {
18166
+ return JSON.parse((0, import_node_fs.readFileSync)(metaPath, "utf-8"));
18167
+ } catch {
18168
+ return [];
18169
+ }
18170
+ }
18171
+ function writeMetadata(repoRoot, teamName, entries) {
18172
+ const metaPath = getMetadataPath(repoRoot, teamName);
18173
+ validateResolvedPath(metaPath, repoRoot);
18174
+ const dir = (0, import_node_path.join)(repoRoot, ".omc", "state", "team-bridge", sanitizeName(teamName));
18175
+ ensureDirWithMode(dir);
18176
+ atomicWriteJson(metaPath, entries);
18177
+ }
18178
+ function removeWorkerWorktree(teamName, workerName, repoRoot) {
18179
+ const wtPath = getWorktreePath(repoRoot, teamName, workerName);
18180
+ const branch = getBranchName(teamName, workerName);
18181
+ try {
18182
+ (0, import_node_child_process.execFileSync)("git", ["worktree", "remove", "--force", wtPath], { cwd: repoRoot, stdio: "pipe" });
18183
+ } catch {
18184
+ }
18185
+ try {
18186
+ (0, import_node_child_process.execFileSync)("git", ["worktree", "prune"], { cwd: repoRoot, stdio: "pipe" });
18187
+ } catch {
18188
+ }
18189
+ try {
18190
+ (0, import_node_child_process.execFileSync)("git", ["branch", "-D", branch], { cwd: repoRoot, stdio: "pipe" });
18191
+ } catch {
18192
+ }
18193
+ const existing = readMetadata(repoRoot, teamName);
18194
+ const updated = existing.filter((e) => e.workerName !== workerName);
18195
+ writeMetadata(repoRoot, teamName, updated);
18196
+ }
18197
+ function cleanupTeamWorktrees(teamName, repoRoot) {
18198
+ const entries = readMetadata(repoRoot, teamName);
18199
+ for (const entry of entries) {
18200
+ try {
18201
+ removeWorkerWorktree(teamName, entry.workerName, repoRoot);
18202
+ } catch {
18203
+ }
18204
+ }
18205
+ }
18206
+
18207
+ // src/mcp/team-job-convergence.ts
18059
18208
  function readResultArtifact(omcJobsDir, jobId) {
18060
- const artifactPath = (0, import_path2.join)(omcJobsDir, `${jobId}-result.json`);
18061
- if (!(0, import_fs.existsSync)(artifactPath)) return { kind: "none" };
18209
+ const artifactPath = (0, import_path3.join)(omcJobsDir, `${jobId}-result.json`);
18210
+ if (!(0, import_fs2.existsSync)(artifactPath)) return { kind: "none" };
18062
18211
  let raw;
18063
18212
  try {
18064
- raw = (0, import_fs.readFileSync)(artifactPath, "utf-8");
18213
+ raw = (0, import_fs2.readFileSync)(artifactPath, "utf-8");
18065
18214
  } catch {
18066
18215
  return { kind: "none" };
18067
18216
  }
@@ -18131,21 +18280,28 @@ function clearScopedTeamState(job) {
18131
18280
  } catch (error2) {
18132
18281
  return `team state cleanup skipped (invalid teamName): ${error2 instanceof Error ? error2.message : String(error2)}`;
18133
18282
  }
18134
- const stateDir = (0, import_path2.join)(job.cwd, ".omc", "state", "team", job.teamName);
18283
+ const stateDir = (0, import_path3.join)(job.cwd, ".omc", "state", "team", job.teamName);
18284
+ let worktreeMessage = "worktree cleanup skipped.";
18135
18285
  try {
18136
- if (!(0, import_fs.existsSync)(stateDir)) {
18137
- return `team state dir not found at ${stateDir}.`;
18286
+ cleanupTeamWorktrees(job.teamName, job.cwd);
18287
+ worktreeMessage = `worktree cleanup attempted for ${job.teamName}.`;
18288
+ } catch (error2) {
18289
+ worktreeMessage = `worktree cleanup skipped: ${error2 instanceof Error ? error2.message : String(error2)}`;
18290
+ }
18291
+ try {
18292
+ if (!(0, import_fs2.existsSync)(stateDir)) {
18293
+ return `${worktreeMessage} team state dir not found at ${stateDir}.`;
18138
18294
  }
18139
- (0, import_fs.rmSync)(stateDir, { recursive: true, force: true });
18140
- return `team state dir removed at ${stateDir}.`;
18295
+ (0, import_fs2.rmSync)(stateDir, { recursive: true, force: true });
18296
+ return `${worktreeMessage} team state dir removed at ${stateDir}.`;
18141
18297
  } catch (error2) {
18142
- return `team state cleanup failed at ${stateDir}: ${error2 instanceof Error ? error2.message : String(error2)}`;
18298
+ return `${worktreeMessage} team state cleanup failed at ${stateDir}: ${error2 instanceof Error ? error2.message : String(error2)}`;
18143
18299
  }
18144
18300
  }
18145
18301
 
18146
18302
  // src/mcp/team-server.ts
18147
18303
  var omcTeamJobs = /* @__PURE__ */ new Map();
18148
- var OMC_JOBS_DIR = process.env.OMC_JOBS_DIR || (0, import_path3.join)((0, import_os.homedir)(), ".omc", "team-jobs");
18304
+ var OMC_JOBS_DIR = process.env.OMC_JOBS_DIR || (0, import_path4.join)((0, import_os.homedir)(), ".omc", "team-jobs");
18149
18305
  var DEPRECATION_CODE = "deprecated_cli_only";
18150
18306
  var TEAM_CLI_REPLACEMENT_HINTS = {
18151
18307
  omc_run_team_start: "omc team start",
@@ -18171,6 +18327,7 @@ function buildCliReplacement(toolName, args) {
18171
18327
  if (toolName === "omc_run_team_start") {
18172
18328
  const teamName = typeof parsed.teamName === "string" ? parsed.teamName.trim() : "";
18173
18329
  const cwd = typeof parsed.cwd === "string" ? parsed.cwd.trim() : "";
18330
+ const newWindow = parsed.newWindow === true;
18174
18331
  const agentTypes = Array.isArray(parsed.agentTypes) ? parsed.agentTypes.filter((item) => typeof item === "string" && item.trim().length > 0) : [];
18175
18332
  const tasks = Array.isArray(parsed.tasks) ? parsed.tasks.map(
18176
18333
  (task) => typeof task === "object" && task !== null && typeof task.description === "string" ? task.description.trim() : ""
@@ -18178,6 +18335,7 @@ function buildCliReplacement(toolName, args) {
18178
18335
  const flags = ["omc", "team", "start"];
18179
18336
  if (teamName) flags.push("--name", quoteCliValue(teamName));
18180
18337
  if (cwd) flags.push("--cwd", quoteCliValue(cwd));
18338
+ if (newWindow) flags.push("--new-window");
18181
18339
  if (agentTypes.length > 0) {
18182
18340
  const uniqueAgentTypes = new Set(agentTypes);
18183
18341
  if (uniqueAgentTypes.size === 1) {
@@ -18228,20 +18386,20 @@ function createDeprecatedCliOnlyEnvelopeWithArgs(toolName, args) {
18228
18386
  }
18229
18387
  function persistJob(jobId, job) {
18230
18388
  try {
18231
- if (!(0, import_fs2.existsSync)(OMC_JOBS_DIR)) (0, import_fs2.mkdirSync)(OMC_JOBS_DIR, { recursive: true });
18232
- (0, import_fs2.writeFileSync)((0, import_path3.join)(OMC_JOBS_DIR, `${jobId}.json`), JSON.stringify(job), "utf-8");
18389
+ if (!(0, import_fs3.existsSync)(OMC_JOBS_DIR)) (0, import_fs3.mkdirSync)(OMC_JOBS_DIR, { recursive: true });
18390
+ (0, import_fs3.writeFileSync)((0, import_path4.join)(OMC_JOBS_DIR, `${jobId}.json`), JSON.stringify(job), "utf-8");
18233
18391
  } catch {
18234
18392
  }
18235
18393
  }
18236
18394
  function loadJobFromDisk(jobId) {
18237
18395
  try {
18238
- return JSON.parse((0, import_fs2.readFileSync)((0, import_path3.join)(OMC_JOBS_DIR, `${jobId}.json`), "utf-8"));
18396
+ return JSON.parse((0, import_fs3.readFileSync)((0, import_path4.join)(OMC_JOBS_DIR, `${jobId}.json`), "utf-8"));
18239
18397
  } catch {
18240
18398
  return void 0;
18241
18399
  }
18242
18400
  }
18243
18401
  async function loadPaneIds(jobId) {
18244
- const p = (0, import_path3.join)(OMC_JOBS_DIR, `${jobId}-panes.json`);
18402
+ const p = (0, import_path4.join)(OMC_JOBS_DIR, `${jobId}-panes.json`);
18245
18403
  try {
18246
18404
  return JSON.parse(await (0, import_promises2.readFile)(p, "utf-8"));
18247
18405
  } catch {
@@ -18278,7 +18436,8 @@ var startSchema = external_exports.object({
18278
18436
  subject: external_exports.string().describe("Brief task title"),
18279
18437
  description: external_exports.string().describe("Full task description")
18280
18438
  })).describe("Tasks to distribute to workers"),
18281
- cwd: external_exports.string().describe("Working directory (absolute path)")
18439
+ cwd: external_exports.string().describe("Working directory (absolute path)"),
18440
+ newWindow: external_exports.boolean().optional().describe("Spawn workers in a dedicated tmux window instead of splitting the current window")
18282
18441
  });
18283
18442
  var statusSchema = external_exports.object({
18284
18443
  job_id: external_exports.string().describe("Job ID returned by omc_run_team_start")
@@ -18288,7 +18447,7 @@ var waitSchema = external_exports.object({
18288
18447
  timeout_ms: external_exports.number().optional().describe("Maximum wait time in ms (default: 300000, max: 3600000)"),
18289
18448
  nudge_delay_ms: external_exports.number().optional().describe("Milliseconds a pane must be idle before nudging (default: 30000)"),
18290
18449
  nudge_max_count: external_exports.number().optional().describe("Maximum nudges per pane (default: 3)"),
18291
- nudge_message: external_exports.string().optional().describe('Message sent as nudge (default: "Continue working on your assigned task.")')
18450
+ nudge_message: external_exports.string().optional().describe('Message sent as nudge (default: "Continue working on your assigned task and report concrete progress (not ACK-only).")')
18292
18451
  });
18293
18452
  var cleanupSchema = external_exports.object({
18294
18453
  job_id: external_exports.string().describe("Job ID returned by omc_run_team_start"),
@@ -18303,7 +18462,7 @@ async function handleStart(args) {
18303
18462
  const input = startSchema.parse(args);
18304
18463
  validateTeamName(input.teamName);
18305
18464
  const jobId = `omc-${Date.now().toString(36)}`;
18306
- const runtimeCliPath = (0, import_path3.join)(__dirname, "runtime-cli.cjs");
18465
+ const runtimeCliPath = (0, import_path4.join)(__dirname, "runtime-cli.cjs");
18307
18466
  const job = { status: "running", startedAt: Date.now(), teamName: input.teamName, cwd: input.cwd };
18308
18467
  omcTeamJobs.set(jobId, job);
18309
18468
  const child = (0, import_child_process3.spawn)("node", [runtimeCliPath], {
@@ -18454,7 +18613,16 @@ async function handleCleanup(args) {
18454
18613
  if (!job) return { content: [{ type: "text", text: `Job ${job_id} not found` }] };
18455
18614
  const panes = await loadPaneIds(job_id);
18456
18615
  let paneCleanupMessage = "No pane IDs recorded for this job \u2014 pane cleanup skipped.";
18457
- if (panes?.paneIds?.length) {
18616
+ if (panes?.sessionName && (panes.ownsWindow === true || !panes.sessionName.includes(":"))) {
18617
+ const sessionMode = panes.ownsWindow === true ? panes.sessionName.includes(":") ? "dedicated-window" : "detached-session" : "detached-session";
18618
+ await killTeamSession(
18619
+ panes.sessionName,
18620
+ panes.paneIds,
18621
+ panes.leaderPaneId,
18622
+ { sessionMode }
18623
+ );
18624
+ paneCleanupMessage = panes.ownsWindow ? "Cleaned up team tmux window." : `Cleaned up ${panes.paneIds.length} worker pane(s).`;
18625
+ } else if (panes?.paneIds?.length) {
18458
18626
  await killWorkerPanes({
18459
18627
  paneIds: panes.paneIds,
18460
18628
  leaderPaneId: panes.leaderPaneId,
@@ -18490,7 +18658,8 @@ var TOOLS = [
18490
18658
  },
18491
18659
  description: "Tasks to distribute to workers"
18492
18660
  },
18493
- cwd: { type: "string", description: "Working directory (absolute path)" }
18661
+ cwd: { type: "string", description: "Working directory (absolute path)" },
18662
+ newWindow: { type: "boolean", description: "Spawn workers in a dedicated tmux window instead of splitting the current window" }
18494
18663
  },
18495
18664
  required: ["teamName", "agentTypes", "tasks", "cwd"]
18496
18665
  }
@@ -18516,7 +18685,7 @@ var TOOLS = [
18516
18685
  timeout_ms: { type: "number", description: "Maximum wait time in ms (default: 300000, max: 3600000)" },
18517
18686
  nudge_delay_ms: { type: "number", description: "Milliseconds a pane must be idle before nudging (default: 30000)" },
18518
18687
  nudge_max_count: { type: "number", description: "Maximum nudges per pane (default: 3)" },
18519
- nudge_message: { type: "string", description: 'Message sent as nudge (default: "Continue working on your assigned task.")' }
18688
+ nudge_message: { type: "string", description: 'Message sent as nudge (default: "Continue working on your assigned task and report concrete progress (not ACK-only).")' }
18520
18689
  },
18521
18690
  required: ["job_id"]
18522
18691
  }