claudecode-omc 4.4.4 → 4.4.6

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 (842) hide show
  1. package/.mcp.json +2 -6
  2. package/README.es.md +64 -8
  3. package/README.ja.md +64 -8
  4. package/README.ko.md +64 -8
  5. package/README.pt.md +29 -0
  6. package/README.vi.md +29 -0
  7. package/README.zh.md +64 -8
  8. package/agents/architect.md +17 -7
  9. package/agents/code-reviewer.md +6 -7
  10. package/agents/critic.md +14 -1
  11. package/agents/deep-executor.md +6 -7
  12. package/agents/designer.md +6 -8
  13. package/agents/executor.md +6 -7
  14. package/agents/planner.md +21 -0
  15. package/agents/quality-reviewer.md +6 -7
  16. package/agents/security-reviewer.md +6 -7
  17. package/agents/test-engineer.md +6 -7
  18. package/bridge/mcp-server.cjs +517 -202
  19. package/bridge/runtime-cli.cjs +1547 -0
  20. package/bridge/team-bridge.cjs +348 -92
  21. package/bridge/{gemini-server.cjs → team-mcp.cjs} +10914 -10240
  22. package/dist/__tests__/auto-update.test.js +1 -1
  23. package/dist/__tests__/auto-update.test.js.map +1 -1
  24. package/dist/__tests__/cli-win32-warning.test.d.ts +2 -0
  25. package/dist/__tests__/cli-win32-warning.test.d.ts.map +1 -0
  26. package/dist/__tests__/cli-win32-warning.test.js +46 -0
  27. package/dist/__tests__/cli-win32-warning.test.js.map +1 -0
  28. package/dist/__tests__/codex-callsite-normalization.test.js +112 -0
  29. package/dist/__tests__/consensus-execution-handoff.test.d.ts +2 -0
  30. package/dist/__tests__/consensus-execution-handoff.test.d.ts.map +1 -1
  31. package/dist/__tests__/consensus-execution-handoff.test.js +48 -0
  32. package/dist/__tests__/consensus-execution-handoff.test.js.map +1 -1
  33. package/dist/__tests__/context-safety.test.d.ts +2 -0
  34. package/dist/__tests__/context-safety.test.d.ts.map +1 -0
  35. package/dist/__tests__/context-safety.test.js +59 -0
  36. package/dist/__tests__/context-safety.test.js.map +1 -0
  37. package/dist/__tests__/hooks.test.js +15 -0
  38. package/dist/__tests__/hooks.test.js.map +1 -1
  39. package/dist/__tests__/hud/call-counts.test.js +0 -3
  40. package/dist/__tests__/hud/call-counts.test.js.map +1 -1
  41. package/dist/__tests__/hud/defaults.test.js +3 -5
  42. package/dist/__tests__/hud/defaults.test.js.map +1 -1
  43. package/dist/__tests__/hud/prompt-time.test.d.ts +2 -0
  44. package/dist/__tests__/hud/prompt-time.test.d.ts.map +1 -0
  45. package/dist/__tests__/hud/prompt-time.test.js +24 -0
  46. package/dist/__tests__/hud/prompt-time.test.js.map +1 -0
  47. package/dist/__tests__/hud/render.test.js +0 -1
  48. package/dist/__tests__/hud/render.test.js.map +1 -1
  49. package/dist/__tests__/hud/version-display.test.js +1 -0
  50. package/dist/__tests__/hud/version-display.test.js.map +1 -1
  51. package/dist/__tests__/hud/windows-platform.test.js +0 -4
  52. package/dist/__tests__/hud/windows-platform.test.js.map +1 -1
  53. package/dist/__tests__/hud-windows.test.js +5 -3
  54. package/dist/__tests__/hud-windows.test.js.map +1 -1
  55. package/dist/__tests__/installer-hud-skip.test.js +12 -2
  56. package/dist/__tests__/installer-hud-skip.test.js.map +1 -1
  57. package/dist/__tests__/job-management-sqlite.test.js +0 -15
  58. package/dist/__tests__/job-management-sqlite.test.js.map +1 -1
  59. package/dist/__tests__/job-management.test.js +0 -16
  60. package/dist/__tests__/job-management.test.js.map +1 -1
  61. package/dist/__tests__/load-agent-prompt.test.js +0 -23
  62. package/dist/__tests__/load-agent-prompt.test.js.map +1 -1
  63. package/dist/__tests__/model-routing.test.js +3 -2
  64. package/dist/__tests__/model-routing.test.js.map +1 -1
  65. package/dist/__tests__/omc-tools-server-interop.test.js +1 -1
  66. package/dist/__tests__/omc-tools-server-interop.test.js.map +1 -1
  67. package/dist/__tests__/pre-tool-enforcer.test.d.ts +2 -0
  68. package/dist/__tests__/pre-tool-enforcer.test.d.ts.map +1 -0
  69. package/dist/__tests__/pre-tool-enforcer.test.js +194 -0
  70. package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -0
  71. package/dist/__tests__/prompt-injection.test.js +0 -26
  72. package/dist/__tests__/prompt-injection.test.js.map +1 -1
  73. package/dist/__tests__/purge-stale-cache.test.js +3 -2
  74. package/dist/__tests__/purge-stale-cache.test.js.map +1 -1
  75. package/dist/__tests__/run-cjs-graceful-fallback.test.d.ts +2 -0
  76. package/dist/__tests__/run-cjs-graceful-fallback.test.d.ts.map +1 -0
  77. package/dist/__tests__/run-cjs-graceful-fallback.test.js +167 -0
  78. package/dist/__tests__/run-cjs-graceful-fallback.test.js.map +1 -0
  79. package/dist/__tests__/session-start-cache-cleanup.test.d.ts +2 -0
  80. package/dist/__tests__/session-start-cache-cleanup.test.d.ts.map +1 -0
  81. package/dist/__tests__/session-start-cache-cleanup.test.js +150 -0
  82. package/dist/__tests__/session-start-cache-cleanup.test.js.map +1 -0
  83. package/dist/__tests__/skills.test.js +10 -8
  84. package/dist/__tests__/skills.test.js.map +1 -1
  85. package/dist/__tests__/team-server-validation.test.d.ts +2 -0
  86. package/dist/__tests__/team-server-validation.test.d.ts.map +1 -0
  87. package/dist/__tests__/team-server-validation.test.js +122 -0
  88. package/dist/__tests__/team-server-validation.test.js.map +1 -0
  89. package/dist/agents/index.d.ts +0 -1
  90. package/dist/agents/index.d.ts.map +1 -1
  91. package/dist/agents/index.js +0 -2
  92. package/dist/agents/index.js.map +1 -1
  93. package/dist/agents/prompt-helpers.d.ts +74 -0
  94. package/dist/agents/prompt-helpers.d.ts.map +1 -0
  95. package/dist/agents/prompt-helpers.js +187 -0
  96. package/dist/agents/prompt-helpers.js.map +1 -0
  97. package/dist/agents/utils.d.ts +1 -5
  98. package/dist/agents/utils.d.ts.map +1 -1
  99. package/dist/agents/utils.js +1 -34
  100. package/dist/agents/utils.js.map +1 -1
  101. package/dist/cli/__tests__/launch.test.d.ts +1 -2
  102. package/dist/cli/__tests__/launch.test.d.ts.map +1 -1
  103. package/dist/cli/__tests__/launch.test.js +442 -48
  104. package/dist/cli/__tests__/launch.test.js.map +1 -1
  105. package/dist/cli/__tests__/teleport-help.test.d.ts +2 -0
  106. package/dist/cli/__tests__/teleport-help.test.d.ts.map +1 -0
  107. package/dist/cli/__tests__/teleport-help.test.js +17 -0
  108. package/dist/cli/__tests__/teleport-help.test.js.map +1 -0
  109. package/dist/cli/commands/teleport.d.ts +2 -1
  110. package/dist/cli/commands/teleport.d.ts.map +1 -1
  111. package/dist/cli/commands/teleport.js +6 -3
  112. package/dist/cli/commands/teleport.js.map +1 -1
  113. package/dist/cli/index.js +40 -290
  114. package/dist/cli/index.js.map +1 -1
  115. package/dist/cli/launch.d.ts +83 -3
  116. package/dist/cli/launch.d.ts.map +1 -1
  117. package/dist/cli/launch.js +213 -48
  118. package/dist/cli/launch.js.map +1 -1
  119. package/dist/cli/win32-warning.d.ts +6 -0
  120. package/dist/cli/win32-warning.d.ts.map +1 -0
  121. package/dist/cli/win32-warning.js +15 -0
  122. package/dist/cli/win32-warning.js.map +1 -0
  123. package/dist/config/loader.d.ts +9 -1
  124. package/dist/config/loader.d.ts.map +1 -1
  125. package/dist/config/loader.js +29 -19
  126. package/dist/config/loader.js.map +1 -1
  127. package/dist/config/models.d.ts +33 -0
  128. package/dist/config/models.d.ts.map +1 -0
  129. package/dist/config/models.js +49 -0
  130. package/dist/config/models.js.map +1 -0
  131. package/dist/constants/names.d.ts +2 -0
  132. package/dist/constants/names.d.ts.map +1 -1
  133. package/dist/constants/names.js +2 -0
  134. package/dist/constants/names.js.map +1 -1
  135. package/dist/features/auto-update.d.ts.map +1 -1
  136. package/dist/features/auto-update.js +21 -11
  137. package/dist/features/auto-update.js.map +1 -1
  138. package/dist/features/background-agent/manager.d.ts.map +1 -1
  139. package/dist/features/background-agent/manager.js +1 -2
  140. package/dist/features/background-agent/manager.js.map +1 -1
  141. package/dist/features/boulder-state/storage.d.ts.map +1 -1
  142. package/dist/features/boulder-state/storage.js +9 -5
  143. package/dist/features/boulder-state/storage.js.map +1 -1
  144. package/dist/features/boulder-state/types.d.ts +4 -0
  145. package/dist/features/boulder-state/types.d.ts.map +1 -1
  146. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  147. package/dist/features/builtin-skills/skills.js +25 -78
  148. package/dist/features/builtin-skills/skills.js.map +1 -1
  149. package/dist/features/delegation-enforcer.d.ts.map +1 -1
  150. package/dist/features/delegation-enforcer.js +4 -1
  151. package/dist/features/delegation-enforcer.js.map +1 -1
  152. package/dist/features/delegation-routing/__tests__/resolver.test.js +47 -122
  153. package/dist/features/delegation-routing/__tests__/resolver.test.js.map +1 -1
  154. package/dist/features/delegation-routing/resolver.d.ts.map +1 -1
  155. package/dist/features/delegation-routing/resolver.js +24 -47
  156. package/dist/features/delegation-routing/resolver.js.map +1 -1
  157. package/dist/features/delegation-routing/types.d.ts.map +1 -1
  158. package/dist/features/delegation-routing/types.js +2 -0
  159. package/dist/features/delegation-routing/types.js.map +1 -1
  160. package/dist/features/model-routing/external-model-policy.d.ts.map +1 -1
  161. package/dist/features/model-routing/external-model-policy.js.map +1 -1
  162. package/dist/features/model-routing/router.d.ts.map +1 -1
  163. package/dist/features/model-routing/router.js +12 -2
  164. package/dist/features/model-routing/router.js.map +1 -1
  165. package/dist/features/model-routing/types.d.ts +5 -1
  166. package/dist/features/model-routing/types.d.ts.map +1 -1
  167. package/dist/features/model-routing/types.js +7 -6
  168. package/dist/features/model-routing/types.js.map +1 -1
  169. package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
  170. package/dist/features/rate-limit-wait/daemon.js +40 -4
  171. package/dist/features/rate-limit-wait/daemon.js.map +1 -1
  172. package/dist/features/state-manager/index.js +2 -2
  173. package/dist/features/state-manager/index.js.map +1 -1
  174. package/dist/features/task-decomposer/index.js +14 -4
  175. package/dist/features/task-decomposer/index.js.map +1 -1
  176. package/dist/hooks/__tests__/bridge-openclaw.test.d.ts +2 -0
  177. package/dist/hooks/__tests__/bridge-openclaw.test.d.ts.map +1 -0
  178. package/dist/hooks/__tests__/bridge-openclaw.test.js +124 -0
  179. package/dist/hooks/__tests__/bridge-openclaw.test.js.map +1 -0
  180. package/dist/hooks/__tests__/bridge-security.test.js +1 -1
  181. package/dist/hooks/__tests__/bridge-security.test.js.map +1 -1
  182. package/dist/hooks/auto-slash-command/executor.d.ts.map +1 -1
  183. package/dist/hooks/auto-slash-command/executor.js +38 -61
  184. package/dist/hooks/auto-slash-command/executor.js.map +1 -1
  185. package/dist/hooks/autopilot/prompts.js +3 -3
  186. package/dist/hooks/bridge.d.ts +11 -0
  187. package/dist/hooks/bridge.d.ts.map +1 -1
  188. package/dist/hooks/bridge.js +154 -82
  189. package/dist/hooks/bridge.js.map +1 -1
  190. package/dist/hooks/comment-checker/index.d.ts.map +1 -1
  191. package/dist/hooks/comment-checker/index.js +3 -1
  192. package/dist/hooks/comment-checker/index.js.map +1 -1
  193. package/dist/hooks/keyword-detector/__tests__/index.test.js +348 -1
  194. package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -1
  195. package/dist/hooks/keyword-detector/index.d.ts +29 -0
  196. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  197. package/dist/hooks/keyword-detector/index.js +123 -1
  198. package/dist/hooks/keyword-detector/index.js.map +1 -1
  199. package/dist/hooks/mode-registry/__tests__/session-isolation.test.js +40 -0
  200. package/dist/hooks/mode-registry/__tests__/session-isolation.test.js.map +1 -1
  201. package/dist/hooks/mode-registry/index.d.ts.map +1 -1
  202. package/dist/hooks/mode-registry/index.js +135 -52
  203. package/dist/hooks/mode-registry/index.js.map +1 -1
  204. package/dist/hooks/notepad/index.d.ts.map +1 -1
  205. package/dist/hooks/notepad/index.js +5 -3
  206. package/dist/hooks/notepad/index.js.map +1 -1
  207. package/dist/hooks/persistent-mode/__tests__/cancel-race.test.d.ts +2 -0
  208. package/dist/hooks/persistent-mode/__tests__/cancel-race.test.d.ts.map +1 -0
  209. package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js +73 -0
  210. package/dist/hooks/persistent-mode/__tests__/cancel-race.test.js.map +1 -0
  211. package/dist/hooks/persistent-mode/__tests__/idle-cooldown.test.js +89 -13
  212. package/dist/hooks/persistent-mode/__tests__/idle-cooldown.test.js.map +1 -1
  213. package/dist/hooks/persistent-mode/__tests__/skill-state-stop.test.d.ts +2 -0
  214. package/dist/hooks/persistent-mode/__tests__/skill-state-stop.test.d.ts.map +1 -0
  215. package/dist/hooks/persistent-mode/__tests__/skill-state-stop.test.js +156 -0
  216. package/dist/hooks/persistent-mode/__tests__/skill-state-stop.test.js.map +1 -0
  217. package/dist/hooks/persistent-mode/idle-cooldown.test.d.ts +2 -3
  218. package/dist/hooks/persistent-mode/idle-cooldown.test.d.ts.map +1 -1
  219. package/dist/hooks/persistent-mode/idle-cooldown.test.js +19 -4
  220. package/dist/hooks/persistent-mode/idle-cooldown.test.js.map +1 -1
  221. package/dist/hooks/persistent-mode/index.d.ts +2 -2
  222. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  223. package/dist/hooks/persistent-mode/index.js +144 -26
  224. package/dist/hooks/persistent-mode/index.js.map +1 -1
  225. package/dist/hooks/plugin-patterns/index.d.ts.map +1 -1
  226. package/dist/hooks/plugin-patterns/index.js +22 -31
  227. package/dist/hooks/plugin-patterns/index.js.map +1 -1
  228. package/dist/hooks/pre-compact/index.js +1 -1
  229. package/dist/hooks/preemptive-compaction/index.d.ts.map +1 -1
  230. package/dist/hooks/preemptive-compaction/index.js +3 -1
  231. package/dist/hooks/preemptive-compaction/index.js.map +1 -1
  232. package/dist/hooks/project-memory/index.d.ts.map +1 -1
  233. package/dist/hooks/project-memory/index.js +9 -0
  234. package/dist/hooks/project-memory/index.js.map +1 -1
  235. package/dist/hooks/project-memory/learner.d.ts.map +1 -1
  236. package/dist/hooks/project-memory/learner.js +107 -85
  237. package/dist/hooks/project-memory/learner.js.map +1 -1
  238. package/dist/hooks/project-memory/storage.d.ts.map +1 -1
  239. package/dist/hooks/project-memory/storage.js +3 -2
  240. package/dist/hooks/project-memory/storage.js.map +1 -1
  241. package/dist/hooks/recovery/context-window.d.ts +4 -0
  242. package/dist/hooks/recovery/context-window.d.ts.map +1 -1
  243. package/dist/hooks/recovery/context-window.js +22 -1
  244. package/dist/hooks/recovery/context-window.js.map +1 -1
  245. package/dist/hooks/recovery/session-recovery.js +1 -1
  246. package/dist/hooks/recovery/session-recovery.js.map +1 -1
  247. package/dist/hooks/session-end/index.d.ts.map +1 -1
  248. package/dist/hooks/session-end/index.js +13 -22
  249. package/dist/hooks/session-end/index.js.map +1 -1
  250. package/dist/hooks/setup/__tests__/windows-patch.test.d.ts +2 -0
  251. package/dist/hooks/setup/__tests__/windows-patch.test.d.ts.map +1 -0
  252. package/dist/hooks/setup/__tests__/windows-patch.test.js +110 -0
  253. package/dist/hooks/setup/__tests__/windows-patch.test.js.map +1 -0
  254. package/dist/hooks/setup/index.d.ts +18 -0
  255. package/dist/hooks/setup/index.d.ts.map +1 -1
  256. package/dist/hooks/setup/index.js +59 -1
  257. package/dist/hooks/setup/index.js.map +1 -1
  258. package/dist/hooks/skill-bridge.cjs +1 -0
  259. package/dist/hooks/skill-state/__tests__/skill-state.test.d.ts +2 -0
  260. package/dist/hooks/skill-state/__tests__/skill-state.test.d.ts.map +1 -0
  261. package/dist/hooks/skill-state/__tests__/skill-state.test.js +301 -0
  262. package/dist/hooks/skill-state/__tests__/skill-state.test.js.map +1 -0
  263. package/dist/hooks/skill-state/index.d.ts +79 -0
  264. package/dist/hooks/skill-state/index.d.ts.map +1 -0
  265. package/dist/hooks/skill-state/index.js +245 -0
  266. package/dist/hooks/skill-state/index.js.map +1 -0
  267. package/dist/hooks/team-pipeline/state.d.ts.map +1 -1
  268. package/dist/hooks/team-pipeline/state.js +5 -0
  269. package/dist/hooks/team-pipeline/state.js.map +1 -1
  270. package/dist/hooks/todo-continuation/index.d.ts +17 -0
  271. package/dist/hooks/todo-continuation/index.d.ts.map +1 -1
  272. package/dist/hooks/todo-continuation/index.js +44 -2
  273. package/dist/hooks/todo-continuation/index.js.map +1 -1
  274. package/dist/hud/elements/call-counts.d.ts.map +1 -1
  275. package/dist/hud/elements/call-counts.js +6 -4
  276. package/dist/hud/elements/call-counts.js.map +1 -1
  277. package/dist/hud/elements/index.d.ts +1 -0
  278. package/dist/hud/elements/index.d.ts.map +1 -1
  279. package/dist/hud/elements/index.js +1 -0
  280. package/dist/hud/elements/index.js.map +1 -1
  281. package/dist/hud/elements/prompt-time.d.ts +13 -0
  282. package/dist/hud/elements/prompt-time.d.ts.map +1 -0
  283. package/dist/hud/elements/prompt-time.js +21 -0
  284. package/dist/hud/elements/prompt-time.js.map +1 -0
  285. package/dist/hud/index.d.ts +2 -1
  286. package/dist/hud/index.d.ts.map +1 -1
  287. package/dist/hud/index.js +40 -215
  288. package/dist/hud/index.js.map +1 -1
  289. package/dist/hud/render.d.ts.map +1 -1
  290. package/dist/hud/render.js +7 -108
  291. package/dist/hud/render.js.map +1 -1
  292. package/dist/hud/state.d.ts.map +1 -1
  293. package/dist/hud/state.js +4 -3
  294. package/dist/hud/state.js.map +1 -1
  295. package/dist/hud/stdin.d.ts +10 -0
  296. package/dist/hud/stdin.d.ts.map +1 -1
  297. package/dist/hud/stdin.js +43 -0
  298. package/dist/hud/stdin.js.map +1 -1
  299. package/dist/hud/types.d.ts +6 -18
  300. package/dist/hud/types.d.ts.map +1 -1
  301. package/dist/hud/types.js +6 -46
  302. package/dist/hud/types.js.map +1 -1
  303. package/dist/index.d.ts +1 -1
  304. package/dist/index.d.ts.map +1 -1
  305. package/dist/index.js +2 -11
  306. package/dist/index.js.map +1 -1
  307. package/dist/installer/hooks.d.ts +5 -0
  308. package/dist/installer/hooks.d.ts.map +1 -1
  309. package/dist/installer/hooks.js +8 -0
  310. package/dist/installer/hooks.js.map +1 -1
  311. package/dist/installer/index.d.ts.map +1 -1
  312. package/dist/installer/index.js +26 -11
  313. package/dist/installer/index.js.map +1 -1
  314. package/dist/interop/omx-team-state.d.ts.map +1 -1
  315. package/dist/interop/omx-team-state.js +38 -6
  316. package/dist/interop/omx-team-state.js.map +1 -1
  317. package/dist/interop/shared-state.d.ts.map +1 -1
  318. package/dist/interop/shared-state.js +58 -7
  319. package/dist/interop/shared-state.js.map +1 -1
  320. package/dist/lib/__tests__/worktree-paths.test.js +250 -1
  321. package/dist/lib/__tests__/worktree-paths.test.js.map +1 -1
  322. package/dist/lib/job-state-db.d.ts +150 -0
  323. package/dist/lib/job-state-db.d.ts.map +1 -0
  324. package/dist/lib/job-state-db.js +650 -0
  325. package/dist/lib/job-state-db.js.map +1 -0
  326. package/dist/lib/mode-names.d.ts +46 -0
  327. package/dist/lib/mode-names.d.ts.map +1 -0
  328. package/dist/lib/mode-names.js +73 -0
  329. package/dist/lib/mode-names.js.map +1 -0
  330. package/dist/lib/session-isolation.d.ts +32 -0
  331. package/dist/lib/session-isolation.d.ts.map +1 -0
  332. package/dist/lib/session-isolation.js +39 -0
  333. package/dist/lib/session-isolation.js.map +1 -0
  334. package/dist/lib/worktree-paths.d.ts +38 -8
  335. package/dist/lib/worktree-paths.d.ts.map +1 -1
  336. package/dist/lib/worktree-paths.js +124 -56
  337. package/dist/lib/worktree-paths.js.map +1 -1
  338. package/dist/mcp/__tests__/team-cleanup.test.d.ts +11 -0
  339. package/dist/mcp/__tests__/team-cleanup.test.d.ts.map +1 -0
  340. package/dist/mcp/__tests__/team-cleanup.test.js +228 -0
  341. package/dist/mcp/__tests__/team-cleanup.test.js.map +1 -0
  342. package/dist/mcp/cli-detection.d.ts +4 -8
  343. package/dist/mcp/cli-detection.d.ts.map +1 -1
  344. package/dist/mcp/cli-detection.js +5 -8
  345. package/dist/mcp/cli-detection.js.map +1 -1
  346. package/dist/mcp/codex-request-normalizer.js +59 -0
  347. package/dist/mcp/codex-server.js +16 -4
  348. package/dist/mcp/codex-standalone-server.js +13 -4
  349. package/dist/mcp/index.d.ts +2 -4
  350. package/dist/mcp/index.d.ts.map +1 -1
  351. package/dist/mcp/index.js +1 -5
  352. package/dist/mcp/index.js.map +1 -1
  353. package/dist/mcp/job-management.d.ts.map +1 -1
  354. package/dist/mcp/job-management.js +11 -9
  355. package/dist/mcp/job-management.js.map +1 -1
  356. package/dist/mcp/job-state-db.d.ts +1 -149
  357. package/dist/mcp/job-state-db.d.ts.map +1 -1
  358. package/dist/mcp/job-state-db.js +2 -649
  359. package/dist/mcp/job-state-db.js.map +1 -1
  360. package/dist/mcp/mcp-config.d.ts +1 -1
  361. package/dist/mcp/mcp-config.js +1 -1
  362. package/dist/mcp/prompt-injection.d.ts +14 -76
  363. package/dist/mcp/prompt-injection.d.ts.map +1 -1
  364. package/dist/mcp/prompt-injection.js +34 -175
  365. package/dist/mcp/prompt-injection.js.map +1 -1
  366. package/dist/mcp/standalone-server.js +2 -0
  367. package/dist/mcp/standalone-server.js.map +1 -1
  368. package/dist/mcp/team-server.d.ts +16 -0
  369. package/dist/mcp/team-server.d.ts.map +1 -0
  370. package/dist/mcp/team-server.js +356 -0
  371. package/dist/mcp/team-server.js.map +1 -0
  372. package/dist/notifications/__tests__/formatter.test.js +62 -0
  373. package/dist/notifications/__tests__/formatter.test.js.map +1 -1
  374. package/dist/notifications/__tests__/hook-config.test.d.ts +14 -0
  375. package/dist/notifications/__tests__/hook-config.test.d.ts.map +1 -0
  376. package/dist/notifications/__tests__/hook-config.test.js +210 -0
  377. package/dist/notifications/__tests__/hook-config.test.js.map +1 -0
  378. package/dist/notifications/__tests__/platform-gating.test.d.ts +12 -0
  379. package/dist/notifications/__tests__/platform-gating.test.d.ts.map +1 -0
  380. package/dist/notifications/__tests__/platform-gating.test.js +140 -0
  381. package/dist/notifications/__tests__/platform-gating.test.js.map +1 -0
  382. package/dist/notifications/__tests__/template-engine.test.d.ts +13 -0
  383. package/dist/notifications/__tests__/template-engine.test.d.ts.map +1 -0
  384. package/dist/notifications/__tests__/template-engine.test.js +378 -0
  385. package/dist/notifications/__tests__/template-engine.test.js.map +1 -0
  386. package/dist/notifications/config.d.ts.map +1 -1
  387. package/dist/notifications/config.js +54 -18
  388. package/dist/notifications/config.js.map +1 -1
  389. package/dist/notifications/dispatcher.d.ts +2 -2
  390. package/dist/notifications/dispatcher.d.ts.map +1 -1
  391. package/dist/notifications/dispatcher.js +10 -6
  392. package/dist/notifications/dispatcher.js.map +1 -1
  393. package/dist/notifications/formatter.d.ts.map +1 -1
  394. package/dist/notifications/formatter.js +22 -0
  395. package/dist/notifications/formatter.js.map +1 -1
  396. package/dist/notifications/hook-config-types.d.ts +44 -0
  397. package/dist/notifications/hook-config-types.d.ts.map +1 -0
  398. package/dist/notifications/hook-config-types.js +8 -0
  399. package/dist/notifications/hook-config-types.js.map +1 -0
  400. package/dist/notifications/hook-config.d.ts +36 -0
  401. package/dist/notifications/hook-config.d.ts.map +1 -0
  402. package/dist/notifications/hook-config.js +95 -0
  403. package/dist/notifications/hook-config.js.map +1 -0
  404. package/dist/notifications/index.d.ts +3 -0
  405. package/dist/notifications/index.d.ts.map +1 -1
  406. package/dist/notifications/index.js +31 -3
  407. package/dist/notifications/index.js.map +1 -1
  408. package/dist/notifications/reply-listener.d.ts.map +1 -1
  409. package/dist/notifications/reply-listener.js +1 -0
  410. package/dist/notifications/reply-listener.js.map +1 -1
  411. package/dist/notifications/session-registry.d.ts.map +1 -1
  412. package/dist/notifications/session-registry.js +13 -5
  413. package/dist/notifications/session-registry.js.map +1 -1
  414. package/dist/notifications/template-engine.d.ts +34 -0
  415. package/dist/notifications/template-engine.d.ts.map +1 -0
  416. package/dist/notifications/template-engine.js +248 -0
  417. package/dist/notifications/template-engine.js.map +1 -0
  418. package/dist/notifications/types.d.ts +0 -2
  419. package/dist/notifications/types.d.ts.map +1 -1
  420. package/dist/openclaw/__tests__/config.test.d.ts +2 -0
  421. package/dist/openclaw/__tests__/config.test.d.ts.map +1 -0
  422. package/dist/openclaw/__tests__/config.test.js +200 -0
  423. package/dist/openclaw/__tests__/config.test.js.map +1 -0
  424. package/dist/openclaw/__tests__/dispatcher.test.d.ts +2 -0
  425. package/dist/openclaw/__tests__/dispatcher.test.d.ts.map +1 -0
  426. package/dist/openclaw/__tests__/dispatcher.test.js +348 -0
  427. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -0
  428. package/dist/openclaw/__tests__/index.test.d.ts +2 -0
  429. package/dist/openclaw/__tests__/index.test.d.ts.map +1 -0
  430. package/dist/openclaw/__tests__/index.test.js +235 -0
  431. package/dist/openclaw/__tests__/index.test.js.map +1 -0
  432. package/dist/openclaw/config.d.ts +33 -0
  433. package/dist/openclaw/config.d.ts.map +1 -0
  434. package/dist/openclaw/config.js +83 -0
  435. package/dist/openclaw/config.js.map +1 -0
  436. package/dist/openclaw/dispatcher.d.ts +47 -0
  437. package/dist/openclaw/dispatcher.d.ts.map +1 -0
  438. package/dist/openclaw/dispatcher.js +138 -0
  439. package/dist/openclaw/dispatcher.js.map +1 -0
  440. package/dist/openclaw/index.d.ts +25 -0
  441. package/dist/openclaw/index.d.ts.map +1 -0
  442. package/dist/openclaw/index.js +132 -0
  443. package/dist/openclaw/index.js.map +1 -0
  444. package/dist/openclaw/types.d.ts +102 -0
  445. package/dist/openclaw/types.d.ts.map +1 -0
  446. package/dist/openclaw/types.js +8 -0
  447. package/dist/openclaw/types.js.map +1 -0
  448. package/dist/platform/index.d.ts +5 -0
  449. package/dist/platform/index.d.ts.map +1 -1
  450. package/dist/platform/index.js +17 -0
  451. package/dist/platform/index.js.map +1 -1
  452. package/dist/platform/process-utils.d.ts.map +1 -1
  453. package/dist/platform/process-utils.js +55 -9
  454. package/dist/platform/process-utils.js.map +1 -1
  455. package/dist/shared/types.d.ts +7 -5
  456. package/dist/shared/types.d.ts.map +1 -1
  457. package/dist/team/__tests__/bridge-integration.test.js +10 -8
  458. package/dist/team/__tests__/bridge-integration.test.js.map +1 -1
  459. package/dist/team/__tests__/edge-cases.test.js +40 -29
  460. package/dist/team/__tests__/edge-cases.test.js.map +1 -1
  461. package/dist/team/__tests__/idle-nudge.test.d.ts +11 -0
  462. package/dist/team/__tests__/idle-nudge.test.d.ts.map +1 -0
  463. package/dist/team/__tests__/idle-nudge.test.js +282 -0
  464. package/dist/team/__tests__/idle-nudge.test.js.map +1 -0
  465. package/dist/team/__tests__/mcp-team-bridge.spawn-args.test.js +2 -2
  466. package/dist/team/__tests__/mcp-team-bridge.spawn-args.test.js.map +1 -1
  467. package/dist/team/__tests__/mcp-team-bridge.usage.test.d.ts +2 -0
  468. package/dist/team/__tests__/mcp-team-bridge.usage.test.d.ts.map +1 -0
  469. package/dist/team/__tests__/mcp-team-bridge.usage.test.js +49 -0
  470. package/dist/team/__tests__/mcp-team-bridge.usage.test.js.map +1 -0
  471. package/dist/team/__tests__/model-contract.test.d.ts +2 -0
  472. package/dist/team/__tests__/model-contract.test.d.ts.map +1 -0
  473. package/dist/team/__tests__/model-contract.test.js +121 -0
  474. package/dist/team/__tests__/model-contract.test.js.map +1 -0
  475. package/dist/team/__tests__/phase-controller.test.d.ts +2 -0
  476. package/dist/team/__tests__/phase-controller.test.d.ts.map +1 -0
  477. package/dist/team/__tests__/phase-controller.test.js +45 -0
  478. package/dist/team/__tests__/phase-controller.test.js.map +1 -0
  479. package/dist/team/__tests__/runtime-assign.test.d.ts +2 -0
  480. package/dist/team/__tests__/runtime-assign.test.d.ts.map +1 -0
  481. package/dist/team/__tests__/runtime-assign.test.js +43 -0
  482. package/dist/team/__tests__/runtime-assign.test.js.map +1 -0
  483. package/dist/team/__tests__/runtime-gemini-prompt.test.d.ts +2 -0
  484. package/dist/team/__tests__/runtime-gemini-prompt.test.d.ts.map +1 -0
  485. package/dist/team/__tests__/runtime-gemini-prompt.test.js +153 -0
  486. package/dist/team/__tests__/runtime-gemini-prompt.test.js.map +1 -0
  487. package/dist/team/__tests__/runtime-prompt-mode.test.d.ts +2 -0
  488. package/dist/team/__tests__/runtime-prompt-mode.test.d.ts.map +1 -0
  489. package/dist/team/__tests__/runtime-prompt-mode.test.js +162 -0
  490. package/dist/team/__tests__/runtime-prompt-mode.test.js.map +1 -0
  491. package/dist/team/__tests__/runtime.test.d.ts +2 -0
  492. package/dist/team/__tests__/runtime.test.d.ts.map +1 -0
  493. package/dist/team/__tests__/runtime.test.js +37 -0
  494. package/dist/team/__tests__/runtime.test.js.map +1 -0
  495. package/dist/team/__tests__/task-file-ops.test.js +63 -59
  496. package/dist/team/__tests__/task-file-ops.test.js.map +1 -1
  497. package/dist/team/__tests__/team-name.test.d.ts +2 -0
  498. package/dist/team/__tests__/team-name.test.d.ts.map +1 -0
  499. package/dist/team/__tests__/team-name.test.js +18 -0
  500. package/dist/team/__tests__/team-name.test.js.map +1 -0
  501. package/dist/team/__tests__/team-status.test.js +52 -6
  502. package/dist/team/__tests__/team-status.test.js.map +1 -1
  503. package/dist/team/__tests__/tmux-comm.test.d.ts +2 -0
  504. package/dist/team/__tests__/tmux-comm.test.d.ts.map +1 -0
  505. package/dist/team/__tests__/tmux-comm.test.js +26 -0
  506. package/dist/team/__tests__/tmux-comm.test.js.map +1 -0
  507. package/dist/team/__tests__/tmux-session.create-team.test.d.ts +2 -0
  508. package/dist/team/__tests__/tmux-session.create-team.test.d.ts.map +1 -0
  509. package/dist/team/__tests__/tmux-session.create-team.test.js +104 -0
  510. package/dist/team/__tests__/tmux-session.create-team.test.js.map +1 -0
  511. package/dist/team/__tests__/tmux-session.spawn.test.d.ts +2 -0
  512. package/dist/team/__tests__/tmux-session.spawn.test.d.ts.map +1 -0
  513. package/dist/team/__tests__/tmux-session.spawn.test.js +61 -0
  514. package/dist/team/__tests__/tmux-session.spawn.test.js.map +1 -0
  515. package/dist/team/__tests__/tmux-session.test.js +161 -2
  516. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  517. package/dist/team/__tests__/worker-bootstrap.test.d.ts +2 -0
  518. package/dist/team/__tests__/worker-bootstrap.test.d.ts.map +1 -0
  519. package/dist/team/__tests__/worker-bootstrap.test.js +58 -0
  520. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -0
  521. package/dist/team/bridge-entry.d.ts.map +1 -1
  522. package/dist/team/bridge-entry.js +4 -0
  523. package/dist/team/bridge-entry.js.map +1 -1
  524. package/dist/team/capabilities.d.ts.map +1 -1
  525. package/dist/team/capabilities.js +3 -0
  526. package/dist/team/capabilities.js.map +1 -1
  527. package/dist/team/cli-detection.d.ts +9 -0
  528. package/dist/team/cli-detection.d.ts.map +1 -0
  529. package/dist/team/cli-detection.js +29 -0
  530. package/dist/team/cli-detection.js.map +1 -0
  531. package/dist/team/idle-nudge.d.ts +53 -0
  532. package/dist/team/idle-nudge.d.ts.map +1 -0
  533. package/dist/team/idle-nudge.js +124 -0
  534. package/dist/team/idle-nudge.js.map +1 -0
  535. package/dist/team/inbox-outbox.d.ts.map +1 -1
  536. package/dist/team/inbox-outbox.js +7 -3
  537. package/dist/team/inbox-outbox.js.map +1 -1
  538. package/dist/team/index.d.ts +14 -1
  539. package/dist/team/index.d.ts.map +1 -1
  540. package/dist/team/index.js +12 -1
  541. package/dist/team/index.js.map +1 -1
  542. package/dist/team/mcp-team-bridge.d.ts +9 -0
  543. package/dist/team/mcp-team-bridge.d.ts.map +1 -1
  544. package/dist/team/mcp-team-bridge.js +82 -3
  545. package/dist/team/mcp-team-bridge.js.map +1 -1
  546. package/dist/team/model-contract.d.ts +37 -0
  547. package/dist/team/model-contract.d.ts.map +1 -0
  548. package/dist/team/model-contract.js +139 -0
  549. package/dist/team/model-contract.js.map +1 -0
  550. package/dist/team/phase-controller.d.ts +33 -0
  551. package/dist/team/phase-controller.d.ts.map +1 -0
  552. package/dist/team/phase-controller.js +79 -0
  553. package/dist/team/phase-controller.js.map +1 -0
  554. package/dist/team/runtime-cli.d.ts +9 -0
  555. package/dist/team/runtime-cli.d.ts.map +1 -0
  556. package/dist/team/runtime-cli.js +188 -0
  557. package/dist/team/runtime-cli.js.map +1 -0
  558. package/dist/team/runtime.d.ts +95 -0
  559. package/dist/team/runtime.d.ts.map +1 -0
  560. package/dist/team/runtime.js +692 -0
  561. package/dist/team/runtime.js.map +1 -0
  562. package/dist/team/state-paths.d.ts +72 -0
  563. package/dist/team/state-paths.d.ts.map +1 -0
  564. package/dist/team/state-paths.js +87 -0
  565. package/dist/team/state-paths.js.map +1 -0
  566. package/dist/team/task-file-ops.d.ts +27 -7
  567. package/dist/team/task-file-ops.d.ts.map +1 -1
  568. package/dist/team/task-file-ops.js +116 -55
  569. package/dist/team/task-file-ops.js.map +1 -1
  570. package/dist/team/team-name.d.ts +2 -0
  571. package/dist/team/team-name.d.ts.map +1 -0
  572. package/dist/team/team-name.js +8 -0
  573. package/dist/team/team-name.js.map +1 -0
  574. package/dist/team/team-registration.d.ts +1 -1
  575. package/dist/team/team-registration.d.ts.map +1 -1
  576. package/dist/team/team-registration.js.map +1 -1
  577. package/dist/team/team-status.d.ts +11 -1
  578. package/dist/team/team-status.d.ts.map +1 -1
  579. package/dist/team/team-status.js +32 -3
  580. package/dist/team/team-status.js.map +1 -1
  581. package/dist/team/tmux-comm.d.ts +36 -0
  582. package/dist/team/tmux-comm.d.ts.map +1 -0
  583. package/dist/team/tmux-comm.js +115 -0
  584. package/dist/team/tmux-comm.js.map +1 -0
  585. package/dist/team/tmux-session.d.ts +92 -0
  586. package/dist/team/tmux-session.d.ts.map +1 -1
  587. package/dist/team/tmux-session.js +533 -2
  588. package/dist/team/tmux-session.js.map +1 -1
  589. package/dist/team/types.d.ts +10 -3
  590. package/dist/team/types.d.ts.map +1 -1
  591. package/dist/team/unified-team.d.ts.map +1 -1
  592. package/dist/team/unified-team.js +13 -3
  593. package/dist/team/unified-team.js.map +1 -1
  594. package/dist/team/worker-bootstrap.d.ts +39 -0
  595. package/dist/team/worker-bootstrap.d.ts.map +1 -0
  596. package/dist/team/worker-bootstrap.js +117 -0
  597. package/dist/team/worker-bootstrap.js.map +1 -0
  598. package/dist/team/worker-health.d.ts.map +1 -1
  599. package/dist/team/worker-health.js +15 -3
  600. package/dist/team/worker-health.js.map +1 -1
  601. package/dist/tools/ast-tools.js +1 -1
  602. package/dist/tools/ast-tools.js.map +1 -1
  603. package/dist/tools/diagnostics/lsp-aggregator.d.ts.map +1 -1
  604. package/dist/tools/diagnostics/lsp-aggregator.js +4 -2
  605. package/dist/tools/diagnostics/lsp-aggregator.js.map +1 -1
  606. package/dist/tools/lsp/__tests__/client-handle-data.test.d.ts +2 -0
  607. package/dist/tools/lsp/__tests__/client-handle-data.test.d.ts.map +1 -0
  608. package/dist/tools/lsp/__tests__/client-handle-data.test.js +138 -0
  609. package/dist/tools/lsp/__tests__/client-handle-data.test.js.map +1 -0
  610. package/dist/tools/lsp/client.d.ts +13 -0
  611. package/dist/tools/lsp/client.d.ts.map +1 -1
  612. package/dist/tools/lsp/client.js +64 -8
  613. package/dist/tools/lsp/client.js.map +1 -1
  614. package/dist/tools/lsp/servers.d.ts.map +1 -1
  615. package/dist/tools/lsp/servers.js +4 -9
  616. package/dist/tools/lsp/servers.js.map +1 -1
  617. package/dist/tools/lsp-tools.d.ts.map +1 -1
  618. package/dist/tools/lsp-tools.js +4 -0
  619. package/dist/tools/lsp-tools.js.map +1 -1
  620. package/dist/tools/python-repl/bridge-manager.d.ts.map +1 -1
  621. package/dist/tools/python-repl/bridge-manager.js +15 -1
  622. package/dist/tools/python-repl/bridge-manager.js.map +1 -1
  623. package/dist/tools/python-repl/session-lock.d.ts.map +1 -1
  624. package/dist/tools/python-repl/session-lock.js +35 -15
  625. package/dist/tools/python-repl/session-lock.js.map +1 -1
  626. package/dist/tools/state-tools.d.ts.map +1 -1
  627. package/dist/tools/state-tools.js +10 -0
  628. package/dist/tools/state-tools.js.map +1 -1
  629. package/dist/utils/__tests__/frontmatter.test.d.ts +2 -0
  630. package/dist/utils/__tests__/frontmatter.test.d.ts.map +1 -0
  631. package/dist/utils/__tests__/frontmatter.test.js +147 -0
  632. package/dist/utils/__tests__/frontmatter.test.js.map +1 -0
  633. package/dist/utils/frontmatter.d.ts +24 -0
  634. package/dist/utils/frontmatter.d.ts.map +1 -0
  635. package/dist/utils/frontmatter.js +62 -0
  636. package/dist/utils/frontmatter.js.map +1 -0
  637. package/dist/utils/paths.d.ts.map +1 -1
  638. package/dist/utils/paths.js +4 -2
  639. package/dist/utils/paths.js.map +1 -1
  640. package/dist/utils/string-width.d.ts.map +1 -1
  641. package/dist/utils/string-width.js +15 -4
  642. package/dist/utils/string-width.js.map +1 -1
  643. package/dist/verification/tier-selector.js +1 -1
  644. package/dist/verification/tier-selector.js.map +1 -1
  645. package/docs/AGENTS.md +4 -2
  646. package/docs/CLAUDE.md +8 -48
  647. package/docs/MIGRATION.md +114 -0
  648. package/docs/REFERENCE.md +35 -102
  649. package/hooks/hooks.json +23 -23
  650. package/package.json +8 -8
  651. package/scripts/build-runtime-cli.mjs +24 -0
  652. package/scripts/build-team-server.mjs +28 -0
  653. package/scripts/cleanup-orphans.mjs +22 -5
  654. package/scripts/context-safety.mjs +5 -1
  655. package/scripts/demo-team.mjs +26 -0
  656. package/scripts/keyword-detector.mjs +6 -76
  657. package/scripts/openclaw-gateway-demo.mjs +168 -0
  658. package/scripts/persistent-mode.cjs +30 -4
  659. package/scripts/persistent-mode.mjs +48 -3
  660. package/scripts/plugin-setup.mjs +66 -3
  661. package/scripts/post-tool-use-failure.mjs +20 -2
  662. package/scripts/post-tool-verifier.mjs +57 -6
  663. package/scripts/pre-tool-enforcer.mjs +125 -5
  664. package/scripts/run.cjs +114 -0
  665. package/scripts/session-start.mjs +56 -7
  666. package/scripts/status.mjs +144 -0
  667. package/scripts/test-codex-gemini-team.mjs +78 -0
  668. package/skills/AGENTS.md +5 -2
  669. package/skills/analyze/SKILL.md +5 -11
  670. package/skills/autopilot/SKILL.md +16 -25
  671. package/skills/ccg/SKILL.md +88 -99
  672. package/skills/configure-notifications/SKILL.md +177 -0
  673. package/skills/configure-openclaw/SKILL.md +320 -0
  674. package/skills/external-context/SKILL.md +7 -83
  675. package/skills/hud/SKILL.md +68 -46
  676. package/skills/omc-setup/SKILL.md +58 -19
  677. package/skills/omc-teams/SKILL.md +178 -0
  678. package/skills/pipeline/SKILL.md +4 -4
  679. package/skills/plan/SKILL.md +28 -16
  680. package/skills/ralph/SKILL.md +3 -4
  681. package/skills/ralph-init/SKILL.md +3 -1
  682. package/skills/ralplan/SKILL.md +93 -8
  683. package/skills/security-review/SKILL.md +5 -6
  684. package/skills/tdd/SKILL.md +5 -6
  685. package/skills/team/SKILL.md +35 -34
  686. package/templates/hooks/keyword-detector.mjs +11 -82
  687. package/templates/hooks/persistent-mode.mjs +120 -3
  688. package/templates/hooks/post-tool-use-failure.mjs +20 -2
  689. package/templates/hooks/session-start.mjs +2 -16
  690. package/dist/__tests__/analytics/backfill-dedup.test.d.ts +0 -2
  691. package/dist/__tests__/analytics/backfill-dedup.test.d.ts.map +0 -1
  692. package/dist/__tests__/analytics/backfill-dedup.test.js +0 -179
  693. package/dist/__tests__/analytics/backfill-dedup.test.js.map +0 -1
  694. package/dist/__tests__/analytics/backfill-engine.test.d.ts +0 -2
  695. package/dist/__tests__/analytics/backfill-engine.test.d.ts.map +0 -1
  696. package/dist/__tests__/analytics/backfill-engine.test.js +0 -362
  697. package/dist/__tests__/analytics/backfill-engine.test.js.map +0 -1
  698. package/dist/__tests__/analytics/output-estimator.test.d.ts +0 -2
  699. package/dist/__tests__/analytics/output-estimator.test.d.ts.map +0 -1
  700. package/dist/__tests__/analytics/output-estimator.test.js +0 -124
  701. package/dist/__tests__/analytics/output-estimator.test.js.map +0 -1
  702. package/dist/__tests__/analytics/token-extractor.test.d.ts +0 -2
  703. package/dist/__tests__/analytics/token-extractor.test.d.ts.map +0 -1
  704. package/dist/__tests__/analytics/token-extractor.test.js +0 -165
  705. package/dist/__tests__/analytics/token-extractor.test.js.map +0 -1
  706. package/dist/__tests__/analytics/token-tracker.test.d.ts +0 -2
  707. package/dist/__tests__/analytics/token-tracker.test.d.ts.map +0 -1
  708. package/dist/__tests__/analytics/token-tracker.test.js +0 -189
  709. package/dist/__tests__/analytics/token-tracker.test.js.map +0 -1
  710. package/dist/__tests__/analytics/tokscale-adapter.test.d.ts +0 -2
  711. package/dist/__tests__/analytics/tokscale-adapter.test.d.ts.map +0 -1
  712. package/dist/__tests__/analytics/tokscale-adapter.test.js +0 -79
  713. package/dist/__tests__/analytics/tokscale-adapter.test.js.map +0 -1
  714. package/dist/__tests__/analytics/transcript-parser.test.d.ts +0 -2
  715. package/dist/__tests__/analytics/transcript-parser.test.d.ts.map +0 -1
  716. package/dist/__tests__/analytics/transcript-parser.test.js +0 -285
  717. package/dist/__tests__/analytics/transcript-parser.test.js.map +0 -1
  718. package/dist/__tests__/analytics/transcript-scanner.test.d.ts +0 -2
  719. package/dist/__tests__/analytics/transcript-scanner.test.d.ts.map +0 -1
  720. package/dist/__tests__/analytics/transcript-scanner.test.js +0 -443
  721. package/dist/__tests__/analytics/transcript-scanner.test.js.map +0 -1
  722. package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts +0 -2
  723. package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts.map +0 -1
  724. package/dist/__tests__/analytics/transcript-token-extractor.test.js +0 -177
  725. package/dist/__tests__/analytics/transcript-token-extractor.test.js.map +0 -1
  726. package/dist/analytics/analytics-summary.d.ts +0 -47
  727. package/dist/analytics/analytics-summary.d.ts.map +0 -1
  728. package/dist/analytics/analytics-summary.js +0 -171
  729. package/dist/analytics/analytics-summary.js.map +0 -1
  730. package/dist/analytics/backfill-dedup.d.ts +0 -49
  731. package/dist/analytics/backfill-dedup.d.ts.map +0 -1
  732. package/dist/analytics/backfill-dedup.js +0 -115
  733. package/dist/analytics/backfill-dedup.js.map +0 -1
  734. package/dist/analytics/backfill-engine.d.ts +0 -59
  735. package/dist/analytics/backfill-engine.d.ts.map +0 -1
  736. package/dist/analytics/backfill-engine.js +0 -172
  737. package/dist/analytics/backfill-engine.js.map +0 -1
  738. package/dist/analytics/cost-estimator.d.ts +0 -29
  739. package/dist/analytics/cost-estimator.d.ts.map +0 -1
  740. package/dist/analytics/cost-estimator.js +0 -135
  741. package/dist/analytics/cost-estimator.js.map +0 -1
  742. package/dist/analytics/export.d.ts +0 -7
  743. package/dist/analytics/export.d.ts.map +0 -1
  744. package/dist/analytics/export.js +0 -93
  745. package/dist/analytics/export.js.map +0 -1
  746. package/dist/analytics/index.d.ts +0 -24
  747. package/dist/analytics/index.d.ts.map +0 -1
  748. package/dist/analytics/index.js +0 -30
  749. package/dist/analytics/index.js.map +0 -1
  750. package/dist/analytics/metrics-collector.d.ts +0 -30
  751. package/dist/analytics/metrics-collector.d.ts.map +0 -1
  752. package/dist/analytics/metrics-collector.js +0 -96
  753. package/dist/analytics/metrics-collector.js.map +0 -1
  754. package/dist/analytics/output-estimator.d.ts +0 -26
  755. package/dist/analytics/output-estimator.d.ts.map +0 -1
  756. package/dist/analytics/output-estimator.js +0 -65
  757. package/dist/analytics/output-estimator.js.map +0 -1
  758. package/dist/analytics/query-engine.d.ts +0 -35
  759. package/dist/analytics/query-engine.d.ts.map +0 -1
  760. package/dist/analytics/query-engine.js +0 -239
  761. package/dist/analytics/query-engine.js.map +0 -1
  762. package/dist/analytics/session-catalog.d.ts +0 -45
  763. package/dist/analytics/session-catalog.d.ts.map +0 -1
  764. package/dist/analytics/session-catalog.js +0 -153
  765. package/dist/analytics/session-catalog.js.map +0 -1
  766. package/dist/analytics/session-manager.d.ts +0 -58
  767. package/dist/analytics/session-manager.d.ts.map +0 -1
  768. package/dist/analytics/session-manager.js +0 -396
  769. package/dist/analytics/session-manager.js.map +0 -1
  770. package/dist/analytics/session-types.d.ts +0 -37
  771. package/dist/analytics/session-types.d.ts.map +0 -1
  772. package/dist/analytics/session-types.js +0 -2
  773. package/dist/analytics/session-types.js.map +0 -1
  774. package/dist/analytics/token-extractor.d.ts +0 -31
  775. package/dist/analytics/token-extractor.d.ts.map +0 -1
  776. package/dist/analytics/token-extractor.js +0 -57
  777. package/dist/analytics/token-extractor.js.map +0 -1
  778. package/dist/analytics/token-tracker.d.ts +0 -33
  779. package/dist/analytics/token-tracker.d.ts.map +0 -1
  780. package/dist/analytics/token-tracker.js +0 -443
  781. package/dist/analytics/token-tracker.js.map +0 -1
  782. package/dist/analytics/tokscale-adapter.d.ts +0 -71
  783. package/dist/analytics/tokscale-adapter.d.ts.map +0 -1
  784. package/dist/analytics/tokscale-adapter.js +0 -223
  785. package/dist/analytics/tokscale-adapter.js.map +0 -1
  786. package/dist/analytics/transcript-parser.d.ts +0 -42
  787. package/dist/analytics/transcript-parser.d.ts.map +0 -1
  788. package/dist/analytics/transcript-parser.js +0 -90
  789. package/dist/analytics/transcript-parser.js.map +0 -1
  790. package/dist/analytics/transcript-scanner.d.ts +0 -51
  791. package/dist/analytics/transcript-scanner.d.ts.map +0 -1
  792. package/dist/analytics/transcript-scanner.js +0 -279
  793. package/dist/analytics/transcript-scanner.js.map +0 -1
  794. package/dist/analytics/transcript-token-extractor.d.ts +0 -35
  795. package/dist/analytics/transcript-token-extractor.d.ts.map +0 -1
  796. package/dist/analytics/transcript-token-extractor.js +0 -136
  797. package/dist/analytics/transcript-token-extractor.js.map +0 -1
  798. package/dist/analytics/types.d.ts +0 -119
  799. package/dist/analytics/types.d.ts.map +0 -1
  800. package/dist/analytics/types.js +0 -32
  801. package/dist/analytics/types.js.map +0 -1
  802. package/dist/cli/analytics.d.ts +0 -3
  803. package/dist/cli/analytics.d.ts.map +0 -1
  804. package/dist/cli/analytics.js +0 -105
  805. package/dist/cli/analytics.js.map +0 -1
  806. package/dist/cli/commands/agents.d.ts +0 -5
  807. package/dist/cli/commands/agents.d.ts.map +0 -1
  808. package/dist/cli/commands/agents.js +0 -31
  809. package/dist/cli/commands/agents.js.map +0 -1
  810. package/dist/cli/commands/backfill.d.ts +0 -15
  811. package/dist/cli/commands/backfill.d.ts.map +0 -1
  812. package/dist/cli/commands/backfill.js +0 -146
  813. package/dist/cli/commands/backfill.js.map +0 -1
  814. package/dist/cli/commands/cleanup.d.ts +0 -4
  815. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  816. package/dist/cli/commands/cleanup.js +0 -31
  817. package/dist/cli/commands/cleanup.js.map +0 -1
  818. package/dist/cli/commands/cost.d.ts +0 -4
  819. package/dist/cli/commands/cost.d.ts.map +0 -1
  820. package/dist/cli/commands/cost.js +0 -53
  821. package/dist/cli/commands/cost.js.map +0 -1
  822. package/dist/cli/commands/export.d.ts +0 -5
  823. package/dist/cli/commands/export.d.ts.map +0 -1
  824. package/dist/cli/commands/export.js +0 -30
  825. package/dist/cli/commands/export.js.map +0 -1
  826. package/dist/cli/commands/sessions.d.ts +0 -5
  827. package/dist/cli/commands/sessions.d.ts.map +0 -1
  828. package/dist/cli/commands/sessions.js +0 -89
  829. package/dist/cli/commands/sessions.js.map +0 -1
  830. package/dist/cli/commands/stats.d.ts +0 -5
  831. package/dist/cli/commands/stats.d.ts.map +0 -1
  832. package/dist/cli/commands/stats.js +0 -84
  833. package/dist/cli/commands/stats.js.map +0 -1
  834. package/dist/cli/utils/tokscale-launcher.d.ts +0 -25
  835. package/dist/cli/utils/tokscale-launcher.d.ts.map +0 -1
  836. package/dist/cli/utils/tokscale-launcher.js +0 -70
  837. package/dist/cli/utils/tokscale-launcher.js.map +0 -1
  838. package/dist/hud/analytics-display.d.ts +0 -63
  839. package/dist/hud/analytics-display.d.ts.map +0 -1
  840. package/dist/hud/analytics-display.js +0 -190
  841. package/dist/hud/analytics-display.js.map +0 -1
  842. package/scripts/build-codex-server.mjs +0 -95
@@ -12,9 +12,11 @@ try {
12
12
  } catch (_e) { /* npm not available - native modules will gracefully degrade */ }
13
13
 
14
14
  "use strict";
15
+ var __create = Object.create;
15
16
  var __defProp = Object.defineProperty;
16
17
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
17
18
  var __getOwnPropNames = Object.getOwnPropertyNames;
19
+ var __getProtoOf = Object.getPrototypeOf;
18
20
  var __hasOwnProp = Object.prototype.hasOwnProperty;
19
21
  var __export = (target, all) => {
20
22
  for (var name in all)
@@ -28,6 +30,14 @@ var __copyProps = (to, from, except, desc) => {
28
30
  }
29
31
  return to;
30
32
  };
33
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
34
+ // If the importer is in node compatibility mode or this is not an ESM
35
+ // file that has been converted to a CommonJS file using a Babel-
36
+ // compatible transform (i.e. "__esModule" has not been set), then set
37
+ // "default" to the CommonJS "module.exports" for node compatibility.
38
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
39
+ mod
40
+ ));
31
41
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
42
 
33
43
  // src/team/bridge-entry.ts
@@ -37,13 +47,13 @@ __export(bridge_entry_exports, {
37
47
  });
38
48
  module.exports = __toCommonJS(bridge_entry_exports);
39
49
  var import_fs10 = require("fs");
40
- var import_path10 = require("path");
50
+ var import_path12 = require("path");
41
51
  var import_os2 = require("os");
42
52
 
43
53
  // src/team/mcp-team-bridge.ts
44
54
  var import_child_process2 = require("child_process");
45
55
  var import_fs8 = require("fs");
46
- var import_path8 = require("path");
56
+ var import_path10 = require("path");
47
57
 
48
58
  // src/team/fs-utils.ts
49
59
  var import_fs = require("fs");
@@ -93,7 +103,7 @@ function validateResolvedPath(resolvedPath, expectedBase) {
93
103
 
94
104
  // src/team/task-file-ops.ts
95
105
  var import_fs3 = require("fs");
96
- var import_path3 = require("path");
106
+ var import_path5 = require("path");
97
107
 
98
108
  // src/utils/paths.ts
99
109
  var import_path2 = require("path");
@@ -111,11 +121,16 @@ function getConfigDir() {
111
121
  function getClaudeConfigDir() {
112
122
  return getConfigDir();
113
123
  }
114
- var STALE_THRESHOLD_MS = 60 * 60 * 1e3;
124
+ var STALE_THRESHOLD_MS = 24 * 60 * 60 * 1e3;
115
125
 
116
126
  // src/team/tmux-session.ts
117
127
  var import_child_process = require("child_process");
128
+ var import_path3 = require("path");
129
+ var import_util = require("util");
130
+ var import_promises = __toESM(require("fs/promises"), 1);
118
131
  var TMUX_SESSION_PREFIX = "omc-team";
132
+ var promisifiedExec = (0, import_util.promisify)(import_child_process.exec);
133
+ var promisifiedExecFile = (0, import_util.promisify)(import_child_process.execFile);
119
134
  function sanitizeName(name) {
120
135
  const sanitized = name.replace(/[^a-zA-Z0-9-]/g, "");
121
136
  if (sanitized.length === 0) {
@@ -137,6 +152,38 @@ function killSession(teamName, workerName) {
137
152
  }
138
153
  }
139
154
 
155
+ // src/team/state-paths.ts
156
+ var import_path4 = require("path");
157
+ var TeamPaths = {
158
+ root: (teamName) => `.omc/state/team/${teamName}`,
159
+ config: (teamName) => `.omc/state/team/${teamName}/config.json`,
160
+ shutdown: (teamName) => `.omc/state/team/${teamName}/shutdown.json`,
161
+ tasks: (teamName) => `.omc/state/team/${teamName}/tasks`,
162
+ taskFile: (teamName, taskId) => `.omc/state/team/${teamName}/tasks/${taskId}.json`,
163
+ workers: (teamName) => `.omc/state/team/${teamName}/workers`,
164
+ workerDir: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}`,
165
+ heartbeat: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/heartbeat.json`,
166
+ inbox: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/inbox.md`,
167
+ outbox: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/outbox.jsonl`,
168
+ ready: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/.ready`,
169
+ overlay: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/AGENTS.md`,
170
+ shutdownAck: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/shutdown-ack.json`,
171
+ done: (teamName, workerName) => `.omc/state/team/${teamName}/workers/${workerName}/done.json`,
172
+ mailbox: (teamName, workerName) => `.omc/state/team/${teamName}/mailbox/${workerName}.jsonl`
173
+ };
174
+ function getTaskStoragePath(cwd, teamName, taskId) {
175
+ if (taskId !== void 0) {
176
+ return (0, import_path4.join)(cwd, TeamPaths.taskFile(teamName, taskId));
177
+ }
178
+ return (0, import_path4.join)(cwd, TeamPaths.tasks(teamName));
179
+ }
180
+ function getLegacyTaskStoragePath(claudeConfigDir, teamName, taskId) {
181
+ if (taskId !== void 0) {
182
+ return (0, import_path4.join)(claudeConfigDir, "tasks", teamName, `${taskId}.json`);
183
+ }
184
+ return (0, import_path4.join)(claudeConfigDir, "tasks", teamName);
185
+ }
186
+
140
187
  // src/team/task-file-ops.ts
141
188
  var DEFAULT_STALE_LOCK_MS = 3e4;
142
189
  function isPidAlive(pid) {
@@ -151,9 +198,9 @@ function isPidAlive(pid) {
151
198
  }
152
199
  function acquireTaskLock(teamName, taskId, opts) {
153
200
  const staleLockMs = opts?.staleLockMs ?? DEFAULT_STALE_LOCK_MS;
154
- const dir = tasksDir(teamName);
201
+ const dir = canonicalTasksDir(teamName, opts?.cwd);
155
202
  ensureDirWithMode(dir);
156
- const lockPath = (0, import_path3.join)(dir, `${sanitizeTaskId(taskId)}.lock`);
203
+ const lockPath = (0, import_path5.join)(dir, `${sanitizeTaskId(taskId)}.lock`);
157
204
  for (let attempt = 0; attempt < 2; attempt++) {
158
205
  try {
159
206
  const fd = (0, import_fs3.openSync)(lockPath, import_fs3.constants.O_CREAT | import_fs3.constants.O_EXCL | import_fs3.constants.O_WRONLY, 384);
@@ -212,19 +259,33 @@ function sanitizeTaskId(taskId) {
212
259
  }
213
260
  return taskId;
214
261
  }
215
- function tasksDir(teamName) {
216
- const result = (0, import_path3.join)(getClaudeConfigDir(), "tasks", sanitizeName(teamName));
217
- validateResolvedPath(result, (0, import_path3.join)(getClaudeConfigDir(), "tasks"));
218
- return result;
262
+ function canonicalTasksDir(teamName, cwd) {
263
+ const root = cwd ?? process.cwd();
264
+ const dir = getTaskStoragePath(root, sanitizeName(teamName));
265
+ validateResolvedPath(dir, (0, import_path5.join)(root, ".omc", "state", "team"));
266
+ return dir;
267
+ }
268
+ function legacyTasksDir(teamName) {
269
+ const claudeConfigDir = getClaudeConfigDir();
270
+ const dir = getLegacyTaskStoragePath(claudeConfigDir, sanitizeName(teamName));
271
+ validateResolvedPath(dir, (0, import_path5.join)(claudeConfigDir, "tasks"));
272
+ return dir;
219
273
  }
220
- function taskPath(teamName, taskId) {
221
- return (0, import_path3.join)(tasksDir(teamName), `${sanitizeTaskId(taskId)}.json`);
274
+ function resolveTaskPathForRead(teamName, taskId, cwd) {
275
+ const canonical = (0, import_path5.join)(canonicalTasksDir(teamName, cwd), `${sanitizeTaskId(taskId)}.json`);
276
+ if ((0, import_fs3.existsSync)(canonical)) return canonical;
277
+ const legacy = (0, import_path5.join)(legacyTasksDir(teamName), `${sanitizeTaskId(taskId)}.json`);
278
+ if ((0, import_fs3.existsSync)(legacy)) return legacy;
279
+ return canonical;
222
280
  }
223
- function failureSidecarPath(teamName, taskId) {
224
- return (0, import_path3.join)(tasksDir(teamName), `${sanitizeTaskId(taskId)}.failure.json`);
281
+ function resolveTaskPathForWrite(teamName, taskId, cwd) {
282
+ return (0, import_path5.join)(canonicalTasksDir(teamName, cwd), `${sanitizeTaskId(taskId)}.json`);
225
283
  }
226
- function readTask(teamName, taskId) {
227
- const filePath = taskPath(teamName, taskId);
284
+ function failureSidecarPath(teamName, taskId, cwd) {
285
+ return (0, import_path5.join)(canonicalTasksDir(teamName, cwd), `${sanitizeTaskId(taskId)}.failure.json`);
286
+ }
287
+ function readTask(teamName, taskId, opts) {
288
+ const filePath = resolveTaskPathForRead(teamName, taskId, opts?.cwd);
228
289
  if (!(0, import_fs3.existsSync)(filePath)) return null;
229
290
  try {
230
291
  const raw = (0, import_fs3.readFileSync)(filePath, "utf-8");
@@ -236,10 +297,10 @@ function readTask(teamName, taskId) {
236
297
  function updateTask(teamName, taskId, updates, opts) {
237
298
  const useLock = opts?.useLock ?? true;
238
299
  const doUpdate = () => {
239
- const filePath = taskPath(teamName, taskId);
300
+ const readPath = resolveTaskPathForRead(teamName, taskId, opts?.cwd);
240
301
  let task;
241
302
  try {
242
- const raw = (0, import_fs3.readFileSync)(filePath, "utf-8");
303
+ const raw = (0, import_fs3.readFileSync)(readPath, "utf-8");
243
304
  task = JSON.parse(raw);
244
305
  } catch {
245
306
  throw new Error(`Task file not found or malformed: ${taskId}`);
@@ -249,13 +310,14 @@ function updateTask(teamName, taskId, updates, opts) {
249
310
  task[key] = value;
250
311
  }
251
312
  }
252
- atomicWriteJson(filePath, task);
313
+ const writePath = resolveTaskPathForWrite(teamName, taskId, opts?.cwd);
314
+ atomicWriteJson(writePath, task);
253
315
  };
254
316
  if (!useLock) {
255
317
  doUpdate();
256
318
  return;
257
319
  }
258
- const handle = acquireTaskLock(teamName, taskId);
320
+ const handle = acquireTaskLock(teamName, taskId, { cwd: opts?.cwd });
259
321
  if (!handle) {
260
322
  if (typeof process !== "undefined" && process.stderr) {
261
323
  process.stderr.write(`[task-file-ops] WARN: could not acquire lock for task ${taskId}, updating without lock
@@ -270,27 +332,28 @@ function updateTask(teamName, taskId, updates, opts) {
270
332
  releaseTaskLock(handle);
271
333
  }
272
334
  }
273
- async function findNextTask(teamName, workerName) {
274
- const dir = tasksDir(teamName);
335
+ async function findNextTask(teamName, workerName, opts) {
336
+ const dir = canonicalTasksDir(teamName, opts?.cwd);
275
337
  if (!(0, import_fs3.existsSync)(dir)) return null;
276
- const taskIds = listTaskIds(teamName);
338
+ const taskIds = listTaskIds(teamName, opts);
277
339
  for (const id of taskIds) {
278
- const task = readTask(teamName, id);
340
+ const task = readTask(teamName, id, opts);
279
341
  if (!task) continue;
280
342
  if (task.status !== "pending") continue;
281
343
  if (task.owner !== workerName) continue;
282
- if (!areBlockersResolved(teamName, task.blockedBy)) continue;
283
- const handle = acquireTaskLock(teamName, id, { workerName });
344
+ if (!areBlockersResolved(teamName, task.blockedBy, opts)) continue;
345
+ const handle = acquireTaskLock(teamName, id, { workerName, cwd: opts?.cwd });
284
346
  if (!handle) continue;
285
347
  try {
286
- const freshTask = readTask(teamName, id);
287
- if (!freshTask || freshTask.status !== "pending" || freshTask.owner !== workerName || !areBlockersResolved(teamName, freshTask.blockedBy)) {
348
+ const freshTask = readTask(teamName, id, opts);
349
+ if (!freshTask || freshTask.status !== "pending" || freshTask.owner !== workerName || !areBlockersResolved(teamName, freshTask.blockedBy, opts)) {
288
350
  continue;
289
351
  }
290
- const filePath = (0, import_path3.join)(tasksDir(teamName), `${sanitizeTaskId(id)}.json`);
352
+ const filePath = resolveTaskPathForWrite(teamName, id, opts?.cwd);
291
353
  let taskData;
292
354
  try {
293
- const raw = (0, import_fs3.readFileSync)(filePath, "utf-8");
355
+ const readPath = resolveTaskPathForRead(teamName, id, opts?.cwd);
356
+ const raw = (0, import_fs3.readFileSync)(readPath, "utf-8");
294
357
  taskData = JSON.parse(raw);
295
358
  } catch {
296
359
  continue;
@@ -307,17 +370,17 @@ async function findNextTask(teamName, workerName) {
307
370
  }
308
371
  return null;
309
372
  }
310
- function areBlockersResolved(teamName, blockedBy) {
373
+ function areBlockersResolved(teamName, blockedBy, opts) {
311
374
  if (!blockedBy || blockedBy.length === 0) return true;
312
375
  for (const blockerId of blockedBy) {
313
- const blocker = readTask(teamName, blockerId);
376
+ const blocker = readTask(teamName, blockerId, opts);
314
377
  if (!blocker || blocker.status !== "completed") return false;
315
378
  }
316
379
  return true;
317
380
  }
318
- function writeTaskFailure(teamName, taskId, error) {
319
- const filePath = failureSidecarPath(teamName, taskId);
320
- const existing = readTaskFailure(teamName, taskId);
381
+ function writeTaskFailure(teamName, taskId, error, opts) {
382
+ const filePath = failureSidecarPath(teamName, taskId, opts?.cwd);
383
+ const existing = readTaskFailure(teamName, taskId, opts);
321
384
  const sidecar = {
322
385
  taskId,
323
386
  lastError: error,
@@ -326,8 +389,8 @@ function writeTaskFailure(teamName, taskId, error) {
326
389
  };
327
390
  atomicWriteJson(filePath, sidecar);
328
391
  }
329
- function readTaskFailure(teamName, taskId) {
330
- const filePath = failureSidecarPath(teamName, taskId);
392
+ function readTaskFailure(teamName, taskId, opts) {
393
+ const filePath = failureSidecarPath(teamName, taskId, opts?.cwd);
331
394
  if (!(0, import_fs3.existsSync)(filePath)) return null;
332
395
  try {
333
396
  const raw = (0, import_fs3.readFileSync)(filePath, "utf-8");
@@ -337,52 +400,58 @@ function readTaskFailure(teamName, taskId) {
337
400
  }
338
401
  }
339
402
  var DEFAULT_MAX_TASK_RETRIES = 5;
340
- function isTaskRetryExhausted(teamName, taskId, maxRetries = DEFAULT_MAX_TASK_RETRIES) {
341
- const failure = readTaskFailure(teamName, taskId);
403
+ function isTaskRetryExhausted(teamName, taskId, maxRetries = DEFAULT_MAX_TASK_RETRIES, opts) {
404
+ const failure = readTaskFailure(teamName, taskId, opts);
342
405
  if (!failure) return false;
343
406
  return failure.retryCount >= maxRetries;
344
407
  }
345
- function listTaskIds(teamName) {
346
- const dir = tasksDir(teamName);
347
- if (!(0, import_fs3.existsSync)(dir)) return [];
348
- try {
349
- return (0, import_fs3.readdirSync)(dir).filter((f) => f.endsWith(".json") && !f.includes(".tmp.") && !f.includes(".failure.")).map((f) => f.replace(".json", "")).sort((a, b) => {
350
- const numA = parseInt(a, 10);
351
- const numB = parseInt(b, 10);
352
- if (!isNaN(numA) && !isNaN(numB)) return numA - numB;
353
- return a.localeCompare(b);
354
- });
355
- } catch {
356
- return [];
357
- }
408
+ function listTaskIds(teamName, opts) {
409
+ const scanDir = (dir) => {
410
+ if (!(0, import_fs3.existsSync)(dir)) return [];
411
+ try {
412
+ return (0, import_fs3.readdirSync)(dir).filter((f) => f.endsWith(".json") && !f.includes(".tmp.") && !f.includes(".failure.") && !f.endsWith(".lock")).map((f) => f.replace(".json", ""));
413
+ } catch {
414
+ return [];
415
+ }
416
+ };
417
+ let ids = scanDir(canonicalTasksDir(teamName, opts?.cwd));
418
+ if (ids.length === 0) {
419
+ ids = scanDir(legacyTasksDir(teamName));
420
+ }
421
+ return ids.sort((a, b) => {
422
+ const numA = parseInt(a, 10);
423
+ const numB = parseInt(b, 10);
424
+ if (!isNaN(numA) && !isNaN(numB)) return numA - numB;
425
+ return a.localeCompare(b);
426
+ });
358
427
  }
359
428
 
360
429
  // src/team/inbox-outbox.ts
361
430
  var import_fs4 = require("fs");
362
- var import_path4 = require("path");
431
+ var import_path6 = require("path");
363
432
  var MAX_INBOX_READ_SIZE = 10 * 1024 * 1024;
364
433
  function teamsDir(teamName) {
365
- const result = (0, import_path4.join)(getClaudeConfigDir(), "teams", sanitizeName(teamName));
366
- validateResolvedPath(result, (0, import_path4.join)(getClaudeConfigDir(), "teams"));
434
+ const result = (0, import_path6.join)(getClaudeConfigDir(), "teams", sanitizeName(teamName));
435
+ validateResolvedPath(result, (0, import_path6.join)(getClaudeConfigDir(), "teams"));
367
436
  return result;
368
437
  }
369
438
  function inboxPath(teamName, workerName) {
370
- return (0, import_path4.join)(teamsDir(teamName), "inbox", `${sanitizeName(workerName)}.jsonl`);
439
+ return (0, import_path6.join)(teamsDir(teamName), "inbox", `${sanitizeName(workerName)}.jsonl`);
371
440
  }
372
441
  function inboxCursorPath(teamName, workerName) {
373
- return (0, import_path4.join)(teamsDir(teamName), "inbox", `${sanitizeName(workerName)}.offset`);
442
+ return (0, import_path6.join)(teamsDir(teamName), "inbox", `${sanitizeName(workerName)}.offset`);
374
443
  }
375
444
  function outboxPath(teamName, workerName) {
376
- return (0, import_path4.join)(teamsDir(teamName), "outbox", `${sanitizeName(workerName)}.jsonl`);
445
+ return (0, import_path6.join)(teamsDir(teamName), "outbox", `${sanitizeName(workerName)}.jsonl`);
377
446
  }
378
447
  function signalPath(teamName, workerName) {
379
- return (0, import_path4.join)(teamsDir(teamName), "signals", `${sanitizeName(workerName)}.shutdown`);
448
+ return (0, import_path6.join)(teamsDir(teamName), "signals", `${sanitizeName(workerName)}.shutdown`);
380
449
  }
381
450
  function drainSignalPath(teamName, workerName) {
382
- return (0, import_path4.join)(teamsDir(teamName), "signals", `${sanitizeName(workerName)}.drain`);
451
+ return (0, import_path6.join)(teamsDir(teamName), "signals", `${sanitizeName(workerName)}.drain`);
383
452
  }
384
453
  function ensureDir(filePath) {
385
- const dir = (0, import_path4.dirname)(filePath);
454
+ const dir = (0, import_path6.dirname)(filePath);
386
455
  ensureDirWithMode(dir);
387
456
  }
388
457
  function appendOutbox(teamName, workerName, message) {
@@ -398,7 +467,7 @@ function rotateOutboxIfNeeded(teamName, workerName, maxLines) {
398
467
  const lines = content.split("\n").filter((l) => l.trim());
399
468
  if (lines.length <= maxLines) return;
400
469
  const keepCount = Math.floor(maxLines / 2);
401
- const kept = lines.slice(-keepCount);
470
+ const kept = keepCount === 0 ? [] : lines.slice(-keepCount);
402
471
  const tmpPath = `${filePath}.tmp.${process.pid}.${Date.now()}`;
403
472
  writeFileWithMode(tmpPath, kept.join("\n") + "\n");
404
473
  (0, import_fs4.renameSync)(tmpPath, filePath);
@@ -475,7 +544,8 @@ function readNewInboxMessages(teamName, workerName) {
475
544
  messages.push(JSON.parse(cleanLine));
476
545
  bytesProcessed += lineBytes;
477
546
  } catch {
478
- break;
547
+ console.warn(`[inbox-outbox] Skipping malformed JSONL line for ${workerName}: ${cleanLine.slice(0, 80)}`);
548
+ bytesProcessed += lineBytes;
479
549
  }
480
550
  }
481
551
  const newOffset = offset + (bytesProcessed > 0 ? bytesProcessed : 0);
@@ -525,15 +595,15 @@ function deleteDrainSignal(teamName, workerName) {
525
595
 
526
596
  // src/team/team-registration.ts
527
597
  var import_fs5 = require("fs");
528
- var import_path5 = require("path");
598
+ var import_path7 = require("path");
529
599
  function configPath(teamName) {
530
- const result = (0, import_path5.join)(getClaudeConfigDir(), "teams", sanitizeName(teamName), "config.json");
531
- validateResolvedPath(result, (0, import_path5.join)(getClaudeConfigDir(), "teams"));
600
+ const result = (0, import_path7.join)(getClaudeConfigDir(), "teams", sanitizeName(teamName), "config.json");
601
+ validateResolvedPath(result, (0, import_path7.join)(getClaudeConfigDir(), "teams"));
532
602
  return result;
533
603
  }
534
604
  function shadowRegistryPath(workingDirectory) {
535
- const result = (0, import_path5.join)(workingDirectory, ".omc", "state", "team-mcp-workers.json");
536
- validateResolvedPath(result, (0, import_path5.join)(workingDirectory, ".omc", "state"));
605
+ const result = (0, import_path7.join)(workingDirectory, ".omc", "state", "team-mcp-workers.json");
606
+ validateResolvedPath(result, (0, import_path7.join)(workingDirectory, ".omc", "state"));
537
607
  return result;
538
608
  }
539
609
  function unregisterMcpWorker(teamName, workerName, workingDirectory) {
@@ -592,9 +662,9 @@ function listMcpWorkers(teamName, workingDirectory) {
592
662
 
593
663
  // src/team/heartbeat.ts
594
664
  var import_fs6 = require("fs");
595
- var import_path6 = require("path");
665
+ var import_path8 = require("path");
596
666
  function heartbeatPath(workingDirectory, teamName, workerName) {
597
- return (0, import_path6.join)(workingDirectory, ".omc", "state", "team-bridge", sanitizeName(teamName), `${sanitizeName(workerName)}.heartbeat.json`);
667
+ return (0, import_path8.join)(workingDirectory, ".omc", "state", "team-bridge", sanitizeName(teamName), `${sanitizeName(workerName)}.heartbeat.json`);
598
668
  }
599
669
  function writeHeartbeat(workingDirectory, data) {
600
670
  const filePath = heartbeatPath(workingDirectory, data.teamName, data.workerName);
@@ -767,11 +837,96 @@ function findPermissionViolations(changedPaths, permissions, cwd) {
767
837
 
768
838
  // src/team/team-status.ts
769
839
  var import_fs7 = require("fs");
770
- var import_path7 = require("path");
840
+ var import_path9 = require("path");
841
+
842
+ // src/team/usage-tracker.ts
843
+ var import_node_fs = require("node:fs");
844
+ var import_node_path4 = require("node:path");
845
+ function getUsageLogPath(workingDirectory, teamName) {
846
+ return (0, import_node_path4.join)(workingDirectory, ".omc", "logs", `team-usage-${teamName}.jsonl`);
847
+ }
848
+ function recordTaskUsage(workingDirectory, teamName, record) {
849
+ const logPath = getUsageLogPath(workingDirectory, teamName);
850
+ const dir = (0, import_node_path4.join)(workingDirectory, ".omc", "logs");
851
+ validateResolvedPath(logPath, workingDirectory);
852
+ ensureDirWithMode(dir);
853
+ appendFileWithMode(logPath, JSON.stringify(record) + "\n");
854
+ }
855
+ function measureCharCounts(promptFilePath, outputFilePath) {
856
+ let promptChars = 0;
857
+ let responseChars = 0;
858
+ try {
859
+ if ((0, import_node_fs.existsSync)(promptFilePath)) {
860
+ promptChars = (0, import_node_fs.statSync)(promptFilePath).size;
861
+ }
862
+ } catch {
863
+ }
864
+ try {
865
+ if ((0, import_node_fs.existsSync)(outputFilePath)) {
866
+ responseChars = (0, import_node_fs.statSync)(outputFilePath).size;
867
+ }
868
+ } catch {
869
+ }
870
+ return { promptChars, responseChars };
871
+ }
872
+ function readUsageRecords(workingDirectory, teamName) {
873
+ const logPath = getUsageLogPath(workingDirectory, teamName);
874
+ if (!(0, import_node_fs.existsSync)(logPath)) return [];
875
+ const content = (0, import_node_fs.readFileSync)(logPath, "utf-8");
876
+ const lines = content.split("\n").filter((l) => l.trim());
877
+ const records = [];
878
+ for (const line of lines) {
879
+ try {
880
+ records.push(JSON.parse(line));
881
+ } catch {
882
+ }
883
+ }
884
+ return records;
885
+ }
886
+ function generateUsageReport(workingDirectory, teamName) {
887
+ const records = readUsageRecords(workingDirectory, teamName);
888
+ const workerMap = /* @__PURE__ */ new Map();
889
+ for (const r of records) {
890
+ const existing = workerMap.get(r.workerName);
891
+ if (existing) {
892
+ existing.taskCount++;
893
+ existing.totalWallClockMs += r.wallClockMs;
894
+ existing.totalPromptChars += r.promptChars;
895
+ existing.totalResponseChars += r.responseChars;
896
+ } else {
897
+ workerMap.set(r.workerName, {
898
+ workerName: r.workerName,
899
+ provider: r.provider,
900
+ model: r.model,
901
+ taskCount: 1,
902
+ totalWallClockMs: r.wallClockMs,
903
+ totalPromptChars: r.promptChars,
904
+ totalResponseChars: r.responseChars
905
+ });
906
+ }
907
+ }
908
+ const workers = Array.from(workerMap.values());
909
+ return {
910
+ teamName,
911
+ totalWallClockMs: workers.reduce((sum, w) => sum + w.totalWallClockMs, 0),
912
+ taskCount: workers.reduce((sum, w) => sum + w.taskCount, 0),
913
+ workers
914
+ };
915
+ }
916
+
917
+ // src/team/team-status.ts
918
+ function emptyUsageReport(teamName) {
919
+ return {
920
+ teamName,
921
+ totalWallClockMs: 0,
922
+ taskCount: 0,
923
+ workers: []
924
+ };
925
+ }
771
926
  function peekRecentOutboxMessages(teamName, workerName, maxMessages = 10) {
772
927
  const safeName = sanitizeName(teamName);
773
928
  const safeWorker = sanitizeName(workerName);
774
- const outboxPath2 = (0, import_path7.join)(getClaudeConfigDir(), "teams", safeName, "outbox", `${safeWorker}.jsonl`);
929
+ const outboxPath2 = (0, import_path9.join)(getClaudeConfigDir(), "teams", safeName, "outbox", `${safeWorker}.jsonl`);
775
930
  if (!(0, import_fs7.existsSync)(outboxPath2)) return [];
776
931
  try {
777
932
  const content = (0, import_fs7.readFileSync)(outboxPath2, "utf-8");
@@ -789,14 +944,18 @@ function peekRecentOutboxMessages(teamName, workerName, maxMessages = 10) {
789
944
  return [];
790
945
  }
791
946
  }
792
- function getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs = 3e4) {
947
+ function getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs = 3e4, options) {
948
+ const startedAt = Date.now();
793
949
  const mcpWorkers = listMcpWorkers(teamName, workingDirectory);
794
- const taskIds = listTaskIds(teamName);
950
+ const taskScanStartedAt = Date.now();
951
+ const taskIds = listTaskIds(teamName, { cwd: workingDirectory });
795
952
  const tasks = [];
796
953
  for (const id of taskIds) {
797
- const task = readTask(teamName, id);
954
+ const task = readTask(teamName, id, { cwd: workingDirectory });
798
955
  if (task) tasks.push(task);
799
956
  }
957
+ const taskScanMs = Date.now() - taskScanStartedAt;
958
+ const workerScanStartedAt = Date.now();
800
959
  const workers = mcpWorkers.map((w) => {
801
960
  const heartbeat = readHeartbeat(workingDirectory, teamName, w.name);
802
961
  const alive = isWorkerAlive(workingDirectory, teamName, w.name, heartbeatMaxAgeMs);
@@ -821,6 +980,15 @@ function getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs = 3e4) {
821
980
  taskStats
822
981
  };
823
982
  });
983
+ const workerScanMs = Date.now() - workerScanStartedAt;
984
+ const includeUsage = options?.includeUsage ?? true;
985
+ let usage = emptyUsageReport(teamName);
986
+ let usageReadMs = 0;
987
+ if (includeUsage) {
988
+ const usageReadStartedAt = Date.now();
989
+ usage = generateUsageReport(workingDirectory, teamName);
990
+ usageReadMs = Date.now() - usageReadStartedAt;
991
+ }
824
992
  const totalFailed = tasks.filter((t) => t.status === "completed" && t.metadata?.permanentlyFailed === true).length;
825
993
  const taskSummary = {
826
994
  total: tasks.length,
@@ -833,6 +1001,13 @@ function getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs = 3e4) {
833
1001
  teamName,
834
1002
  workers,
835
1003
  taskSummary,
1004
+ usage,
1005
+ performance: {
1006
+ taskScanMs,
1007
+ workerScanMs,
1008
+ usageReadMs,
1009
+ totalMs: Date.now() - startedAt
1010
+ },
836
1011
  lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
837
1012
  };
838
1013
  }
@@ -989,18 +1164,18 @@ function buildTaskPrompt(task, messages, config) {
989
1164
  return result;
990
1165
  }
991
1166
  function writePromptFile(config, taskId, prompt) {
992
- const dir = (0, import_path8.join)(config.workingDirectory, ".omc", "prompts");
1167
+ const dir = (0, import_path10.join)(config.workingDirectory, ".omc", "prompts");
993
1168
  ensureDirWithMode(dir);
994
1169
  const filename = `team-${config.teamName}-task-${taskId}-${Date.now()}.md`;
995
- const filePath = (0, import_path8.join)(dir, filename);
1170
+ const filePath = (0, import_path10.join)(dir, filename);
996
1171
  writeFileWithMode(filePath, prompt);
997
1172
  return filePath;
998
1173
  }
999
1174
  function getOutputPath(config, taskId) {
1000
- const dir = (0, import_path8.join)(config.workingDirectory, ".omc", "outputs");
1175
+ const dir = (0, import_path10.join)(config.workingDirectory, ".omc", "outputs");
1001
1176
  ensureDirWithMode(dir);
1002
1177
  const suffix = Math.random().toString(36).slice(2, 8);
1003
- return (0, import_path8.join)(dir, `team-${config.teamName}-task-${taskId}-${Date.now()}-${suffix}.md`);
1178
+ return (0, import_path10.join)(dir, `team-${config.teamName}-task-${taskId}-${Date.now()}-${suffix}.md`);
1004
1179
  }
1005
1180
  function readOutputSummary(outputFile) {
1006
1181
  try {
@@ -1022,6 +1197,22 @@ function readOutputSummary(outputFile) {
1022
1197
  return "(error reading output)";
1023
1198
  }
1024
1199
  }
1200
+ function recordTaskCompletionUsage(args) {
1201
+ const completedAt = (/* @__PURE__ */ new Date()).toISOString();
1202
+ const wallClockMs = Math.max(0, Date.now() - args.startedAt);
1203
+ const { promptChars, responseChars } = measureCharCounts(args.promptFile, args.outputFile);
1204
+ recordTaskUsage(args.config.workingDirectory, args.config.teamName, {
1205
+ taskId: args.taskId,
1206
+ workerName: args.config.workerName,
1207
+ provider: args.provider,
1208
+ model: args.config.model ?? "default",
1209
+ startedAt: args.startedAtIso,
1210
+ completedAt,
1211
+ wallClockMs,
1212
+ promptChars,
1213
+ responseChars
1214
+ });
1215
+ }
1025
1216
  var MAX_CODEX_OUTPUT_SIZE = 1024 * 1024;
1026
1217
  function parseCodexOutput(output) {
1027
1218
  const lines = output.trim().split("\n").filter((l) => l.trim());
@@ -1065,7 +1256,7 @@ function spawnCliProcess(provider, prompt, model, cwd, timeoutMs) {
1065
1256
  let cmd;
1066
1257
  if (provider === "codex") {
1067
1258
  cmd = "codex";
1068
- args = ["exec", "-m", model || "gpt-5.3-codex", "--json", "--full-auto", "--skip-git-repo-check"];
1259
+ args = ["exec", "-m", model || "gpt-5.3-codex", "--json", "--dangerously-bypass-approvals-and-sandbox", "--skip-git-repo-check"];
1069
1260
  } else {
1070
1261
  cmd = "gemini";
1071
1262
  args = ["--yolo"];
@@ -1240,8 +1431,10 @@ async function runBridge(config) {
1240
1431
  await handleShutdown(config, shutdownBeforeSpawn, null);
1241
1432
  return;
1242
1433
  }
1434
+ const taskStartedAt = Date.now();
1435
+ const taskStartedAtIso = new Date(taskStartedAt).toISOString();
1243
1436
  const prompt = buildTaskPrompt(task, messages, config);
1244
- const _promptFile = writePromptFile(config, task.id, prompt);
1437
+ const promptFile = writePromptFile(config, task.id, prompt);
1245
1438
  const outputFile = getOutputPath(config, task.id);
1246
1439
  log(`[bridge] Executing task ${task.id}: ${task.subject}`);
1247
1440
  try {
@@ -1295,6 +1488,19 @@ ${violationSummary}`,
1295
1488
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1296
1489
  });
1297
1490
  log(`[bridge] Task ${task.id} failed: permission violations (enforce mode)`);
1491
+ try {
1492
+ recordTaskCompletionUsage({
1493
+ config,
1494
+ taskId: task.id,
1495
+ promptFile,
1496
+ outputFile,
1497
+ provider,
1498
+ startedAt: taskStartedAt,
1499
+ startedAtIso: taskStartedAtIso
1500
+ });
1501
+ } catch (usageErr) {
1502
+ log(`[bridge] usage tracking failed for task ${task.id}: ${usageErr.message}`);
1503
+ }
1298
1504
  consecutiveErrors = 0;
1299
1505
  } else {
1300
1506
  audit(config, "permission_audit", task.id, {
@@ -1314,6 +1520,19 @@ ${violationSummary}`);
1314
1520
  [AUDIT WARNING: ${violations.length} permission violation(s) detected]`,
1315
1521
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1316
1522
  });
1523
+ try {
1524
+ recordTaskCompletionUsage({
1525
+ config,
1526
+ taskId: task.id,
1527
+ promptFile,
1528
+ outputFile,
1529
+ provider,
1530
+ startedAt: taskStartedAt,
1531
+ startedAtIso: taskStartedAtIso
1532
+ });
1533
+ } catch (usageErr) {
1534
+ log(`[bridge] usage tracking failed for task ${task.id}: ${usageErr.message}`);
1535
+ }
1317
1536
  log(`[bridge] Task ${task.id} completed (with ${violations.length} audit warning(s))`);
1318
1537
  }
1319
1538
  } else {
@@ -1327,6 +1546,19 @@ ${violationSummary}`);
1327
1546
  summary,
1328
1547
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1329
1548
  });
1549
+ try {
1550
+ recordTaskCompletionUsage({
1551
+ config,
1552
+ taskId: task.id,
1553
+ promptFile,
1554
+ outputFile,
1555
+ provider,
1556
+ startedAt: taskStartedAt,
1557
+ startedAtIso: taskStartedAtIso
1558
+ });
1559
+ } catch (usageErr) {
1560
+ log(`[bridge] usage tracking failed for task ${task.id}: ${usageErr.message}`);
1561
+ }
1330
1562
  log(`[bridge] Task ${task.id} completed`);
1331
1563
  }
1332
1564
  } catch (err) {
@@ -1358,6 +1590,19 @@ ${violationSummary}`);
1358
1590
  error: `Task permanently failed after ${attempt} attempts: ${errorMsg}`,
1359
1591
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
1360
1592
  });
1593
+ try {
1594
+ recordTaskCompletionUsage({
1595
+ config,
1596
+ taskId: task.id,
1597
+ promptFile,
1598
+ outputFile,
1599
+ provider,
1600
+ startedAt: taskStartedAt,
1601
+ startedAtIso: taskStartedAtIso
1602
+ });
1603
+ } catch (usageErr) {
1604
+ log(`[bridge] usage tracking failed for task ${task.id}: ${usageErr.message}`);
1605
+ }
1361
1606
  log(`[bridge] Task ${task.id} permanently failed after ${attempt} attempts`);
1362
1607
  } else {
1363
1608
  updateTask(teamName, task.id, { status: "pending" });
@@ -1382,7 +1627,7 @@ ${violationSummary}`);
1382
1627
  idleNotified = true;
1383
1628
  }
1384
1629
  try {
1385
- const teamStatus = getTeamStatus(teamName, workingDirectory);
1630
+ const teamStatus = getTeamStatus(teamName, workingDirectory, 3e4, { includeUsage: false });
1386
1631
  if (teamStatus.taskSummary.total > 0 && teamStatus.taskSummary.pending === 0 && teamStatus.taskSummary.inProgress === 0) {
1387
1632
  log(`[bridge] All team tasks complete. Auto-terminating worker.`);
1388
1633
  appendOutbox(teamName, workerName, {
@@ -1410,14 +1655,19 @@ ${violationSummary}`);
1410
1655
  }
1411
1656
 
1412
1657
  // src/lib/worktree-paths.ts
1658
+ var import_crypto = require("crypto");
1413
1659
  var import_child_process3 = require("child_process");
1414
1660
  var import_fs9 = require("fs");
1415
- var import_path9 = require("path");
1416
- var worktreeCache = null;
1661
+ var import_path11 = require("path");
1662
+ var MAX_WORKTREE_CACHE_SIZE = 8;
1663
+ var worktreeCacheMap = /* @__PURE__ */ new Map();
1417
1664
  function getWorktreeRoot(cwd) {
1418
1665
  const effectiveCwd = cwd || process.cwd();
1419
- if (worktreeCache && worktreeCache.cwd === effectiveCwd) {
1420
- return worktreeCache.root || null;
1666
+ if (worktreeCacheMap.has(effectiveCwd)) {
1667
+ const root = worktreeCacheMap.get(effectiveCwd);
1668
+ worktreeCacheMap.delete(effectiveCwd);
1669
+ worktreeCacheMap.set(effectiveCwd, root);
1670
+ return root || null;
1421
1671
  }
1422
1672
  try {
1423
1673
  const root = (0, import_child_process3.execSync)("git rev-parse --show-toplevel", {
@@ -1425,7 +1675,13 @@ function getWorktreeRoot(cwd) {
1425
1675
  encoding: "utf-8",
1426
1676
  stdio: ["pipe", "pipe", "pipe"]
1427
1677
  }).trim();
1428
- worktreeCache = { cwd: effectiveCwd, root };
1678
+ if (worktreeCacheMap.size >= MAX_WORKTREE_CACHE_SIZE) {
1679
+ const oldest = worktreeCacheMap.keys().next().value;
1680
+ if (oldest !== void 0) {
1681
+ worktreeCacheMap.delete(oldest);
1682
+ }
1683
+ }
1684
+ worktreeCacheMap.set(effectiveCwd, root);
1429
1685
  return root;
1430
1686
  } catch {
1431
1687
  return null;
@@ -1434,15 +1690,15 @@ function getWorktreeRoot(cwd) {
1434
1690
 
1435
1691
  // src/team/bridge-entry.ts
1436
1692
  function validateConfigPath(configPath2, homeDir, claudeConfigDir) {
1437
- const resolved = (0, import_path10.resolve)(configPath2);
1693
+ const resolved = (0, import_path12.resolve)(configPath2);
1438
1694
  const isUnderHome = resolved.startsWith(homeDir + "/") || resolved === homeDir;
1439
- const normalizedConfigDir = (0, import_path10.resolve)(claudeConfigDir);
1440
- const normalizedOmcDir = (0, import_path10.resolve)(homeDir, ".omc");
1695
+ const normalizedConfigDir = (0, import_path12.resolve)(claudeConfigDir);
1696
+ const normalizedOmcDir = (0, import_path12.resolve)(homeDir, ".omc");
1441
1697
  const hasOmcComponent = resolved.includes("/.omc/") || resolved.endsWith("/.omc");
1442
1698
  const isTrustedSubpath = resolved === normalizedConfigDir || resolved.startsWith(normalizedConfigDir + "/") || resolved === normalizedOmcDir || resolved.startsWith(normalizedOmcDir + "/") || hasOmcComponent;
1443
1699
  if (!isUnderHome || !isTrustedSubpath) return false;
1444
1700
  try {
1445
- const parentDir = (0, import_path10.resolve)(resolved, "..");
1701
+ const parentDir = (0, import_path12.resolve)(resolved, "..");
1446
1702
  const realParent = (0, import_fs10.realpathSync)(parentDir);
1447
1703
  if (!realParent.startsWith(homeDir + "/") && realParent !== homeDir) {
1448
1704
  return false;
@@ -1477,7 +1733,7 @@ function main() {
1477
1733
  console.error("Usage: node bridge-entry.js --config <path-to-config.json>");
1478
1734
  process.exit(1);
1479
1735
  }
1480
- const configPath2 = (0, import_path10.resolve)(process.argv[configIdx + 1]);
1736
+ const configPath2 = (0, import_path12.resolve)(process.argv[configIdx + 1]);
1481
1737
  const home = (0, import_os2.homedir)();
1482
1738
  const claudeConfigDir = getClaudeConfigDir();
1483
1739
  if (!validateConfigPath(configPath2, home, claudeConfigDir)) {