commandmate 0.34.1 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +176 -163
  3. package/.next/app-path-routes-manifest.json +27 -27
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update-check/route.js +1 -1
  12. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  14. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  16. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/messages/route.js +1 -1
  18. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  19. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/session/route.js +1 -1
  21. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  22. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/assistant/start/route.js +1 -1
  24. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  25. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/assistant/terminal/route.js +1 -1
  27. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  28. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/capabilities/route.js +1 -1
  35. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  44. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  46. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  47. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  49. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  56. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  57. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/relays/route.js +1 -1
  59. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  60. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  66. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/clone/route.js +1 -1
  69. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  70. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/restore/route.js +1 -1
  73. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/route.js +1 -1
  76. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/scan/route.js +1 -1
  79. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/sync/route.js +1 -1
  82. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  83. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  86. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  104. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  106. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  115. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  146. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  148. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  151. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  163. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  167. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/route.js +1 -1
  211. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/chat/page.js +2 -2
  214. package/.next/server/app/chat/page.js.nft.json +1 -1
  215. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  216. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  217. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/more/page.js +2 -2
  219. package/.next/server/app/more/page.js.nft.json +1 -1
  220. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  221. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  222. package/.next/server/app/page.js +1 -1
  223. package/.next/server/app/page.js.nft.json +1 -1
  224. package/.next/server/app/page_client-reference-manifest.js +1 -1
  225. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/repositories/page.js +2 -2
  227. package/.next/server/app/repositories/page.js.nft.json +1 -1
  228. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  229. package/.next/server/app/review/page.js +1 -1
  230. package/.next/server/app/review/page.js.nft.json +1 -1
  231. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  232. package/.next/server/app/sessions/page.js +1 -1
  233. package/.next/server/app/sessions/page.js.nft.json +1 -1
  234. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  235. package/.next/server/app/skills/[skillId]/page.js +2 -2
  236. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  237. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/skills/installed/page.js +2 -2
  239. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  240. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  241. package/.next/server/app/skills/page.js +1 -1
  242. package/.next/server/app/skills/page.js.nft.json +1 -1
  243. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  244. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  245. package/.next/server/app/worktrees/[id]/page.js +11 -11
  246. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  247. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  249. package/.next/server/app-paths-manifest.json +27 -27
  250. package/.next/server/chunks/1210.js +1 -1
  251. package/.next/server/chunks/{6286.js → 1467.js} +6 -6
  252. package/.next/server/chunks/1886.js +1 -1
  253. package/.next/server/chunks/2980.js +1 -1
  254. package/.next/server/chunks/3077.js +1 -1
  255. package/.next/server/chunks/3241.js +1 -1
  256. package/.next/server/chunks/3323.js +1 -1
  257. package/.next/server/chunks/434.js +1 -1
  258. package/.next/server/chunks/4443.js +1 -1
  259. package/.next/server/chunks/450.js +1 -1
  260. package/.next/server/chunks/6130.js +1 -1
  261. package/.next/server/chunks/650.js +1 -1
  262. package/.next/server/chunks/6677.js +3 -3
  263. package/.next/server/chunks/7075.js +1 -1
  264. package/.next/server/chunks/7506.js +1 -1
  265. package/.next/server/chunks/7905.js +1 -1
  266. package/.next/server/chunks/8728.js +8 -0
  267. package/.next/server/chunks/8918.js +5 -5
  268. package/.next/server/chunks/9123.js +2 -2
  269. package/.next/server/middleware-manifest.json +5 -5
  270. package/.next/server/pages/500.html +1 -1
  271. package/.next/server/server-reference-manifest.json +1 -1
  272. package/.next/static/chunks/2407-b9001cc6041876e1.js +1 -0
  273. package/.next/static/chunks/{4322-dfd5a7119b5ba4fc.js → 4322-59a7dbd77a7763cc.js} +1 -1
  274. package/.next/static/chunks/4388-410b1d8ed0d8d98b.js +1 -0
  275. package/.next/static/chunks/4718-56ebb6e55073ed5e.js +1 -0
  276. package/.next/static/chunks/{2652-18b8fea64413467e.js → 4809-145884b958e7d9a6.js} +1 -1
  277. package/.next/static/chunks/app/chat/{page-e60d07c4c79602f0.js → page-609c9a0f5ce44799.js} +1 -1
  278. package/.next/static/chunks/app/error-c1dc1038d0a84a33.js +1 -0
  279. package/.next/static/chunks/app/global-error-49f765ecb7fd6527.js +1 -0
  280. package/.next/static/chunks/app/{layout-4c2f21e3f653ee4c.js → layout-114dc6e93e332392.js} +1 -1
  281. package/.next/static/chunks/app/more/{page-fc94f86aa881489e.js → page-7c5380e4a7561935.js} +1 -1
  282. package/.next/static/chunks/app/{page-26a42881c8648cd3.js → page-a4f03c188610c6c8.js} +1 -1
  283. package/.next/static/chunks/app/repositories/{page-2576158c8420fda0.js → page-a15efb4ce1d1721e.js} +1 -1
  284. package/.next/static/chunks/app/review/{page-35b99baaf3c93b38.js → page-90ac618489676cbc.js} +1 -1
  285. package/.next/static/chunks/app/sessions/{page-a3ab6f122ec60d5a.js → page-6486d9a643c1dc6f.js} +1 -1
  286. package/.next/static/chunks/app/skills/[skillId]/{page-06799157652e8fa9.js → page-844872df04f52943.js} +1 -1
  287. package/.next/static/chunks/app/skills/installed/{page-2f3987e3a131c8d0.js → page-566dfde26d7e63ba.js} +1 -1
  288. package/.next/static/chunks/app/skills/{page-e70bfcf5ed4e4865.js → page-7859540e8092aace.js} +1 -1
  289. package/.next/static/chunks/app/worktrees/[id]/page-3a58ae66e203f935.js +1 -0
  290. package/.next/trace +14 -13
  291. package/dist/lib/detection/tools/verified-against.d.ts +20 -0
  292. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  293. package/dist/lib/detection/tools/verified-against.js +20 -0
  294. package/dist/server/src/config/websocket-config.js +67 -0
  295. package/dist/server/src/lib/auto-yes-poller.js +40 -7
  296. package/dist/server/src/lib/detection/selection-shape.js +361 -3
  297. package/dist/server/src/lib/detection/tools/command-code/detect.js +96 -0
  298. package/dist/server/src/lib/detection/tools/command-code/dialog.js +314 -0
  299. package/dist/server/src/lib/detection/tools/verified-against.js +20 -0
  300. package/dist/server/src/lib/polling/response-checker.js +48 -2
  301. package/dist/server/src/lib/ws-server.js +111 -1
  302. package/package.json +1 -1
  303. package/public/sw.js +12 -0
  304. package/.next/server/chunks/595.js +0 -8
  305. package/.next/static/chunks/4718-29cfcfb806724d9a.js +0 -1
  306. package/.next/static/chunks/8361-0142beb59be2abf3.js +0 -1
  307. package/.next/static/chunks/app/error-27ab04bce6545dae.js +0 -1
  308. package/.next/static/chunks/app/global-error-7b761b8e181ffc1f.js +0 -1
  309. package/.next/static/chunks/app/worktrees/[id]/page-60eab4e24c37cb77.js +0 -1
  310. /package/.next/static/{oDWX0JcwfhUYrMnnqDWVC → 0vChXhzA5YWj3f0D6A-Cn}/_buildManifest.js +0 -0
  311. /package/.next/static/{oDWX0JcwfhUYrMnnqDWVC → 0vChXhzA5YWj3f0D6A-Cn}/_ssgManifest.js +0 -0
@@ -40,6 +40,7 @@ const waiting_broadcast_1 = require("../lib/realtime/waiting-broadcast");
40
40
  // build has two instances of it (`dist/server` + a `.next/server/chunks` copy).
41
41
  // The registry is how a route handler's copy reaches the one holding sockets.
42
42
  const publisher_registry_1 = require("../lib/realtime/publisher-registry");
43
+ const websocket_config_1 = require("../config/websocket-config");
43
44
  const logger_1 = require("../lib/logger");
44
45
  const logger = (0, logger_1.createLogger)('ws-server');
45
46
  // Global state
@@ -54,6 +55,14 @@ const rooms = new Map();
54
55
  * bare "clear the registry" would let a torn-down instance silence a newer one.
55
56
  */
56
57
  let publisherHandle = null;
58
+ /**
59
+ * Issue #2502: the heartbeat sweep's interval, or null while no server is up.
60
+ *
61
+ * Module-scoped like `wss` and torn down with it — a timer that outlived
62
+ * `closeWebSocket` would go on pinging a `clients` map nobody reads, and CI
63
+ * shares one process across the whole suite.
64
+ */
65
+ let heartbeatTimer = null;
57
66
  const MAX_TERMINAL_INPUT_LENGTH = 4096;
58
67
  const MAX_TERMINAL_SUBSCRIBERS_PER_SESSION = 4;
59
68
  const TERMINAL_FALLBACK_CAPTURE_LINES = -200;
@@ -289,6 +298,79 @@ function isExpectedWebSocketError(error) {
289
298
  error.message?.includes('ECONNRESET') ||
290
299
  error.message?.includes('EPIPE'));
291
300
  }
301
+ /**
302
+ * One heartbeat sweep over every connected client (Issue #2502).
303
+ *
304
+ * The `ws` library's standard liveness recipe, with one addition. The recipe:
305
+ * a connection that has not ponged since the previous sweep is gone — the peer
306
+ * crashed, or the path between us is half-open — so `terminate()` it rather
307
+ * than `close()` it. A close handshake needs a live peer to answer, which is
308
+ * exactly what is in question, so `close()` on a dead path just parks the
309
+ * socket in CLOSING until the OS TCP timeout fires, minutes later, with the
310
+ * room membership and any terminal subscription still held open the whole time.
311
+ *
312
+ * The addition is the application-level beat. A browser answers protocol pings
313
+ * for free but exposes neither the ping nor its own pong to page JavaScript, so
314
+ * the ping alone only ever teaches the SERVER that a client is gone. The extra
315
+ * frame is what lets the tab reach the same conclusion about us
316
+ * (`useWebSocket`'s liveness check).
317
+ *
318
+ * Exported through `__internal` so the behaviour can be tested without waiting
319
+ * {@link WS_SERVER_HEARTBEAT_INTERVAL_MS} for a real interval to fire.
320
+ */
321
+ function runHeartbeatSweep() {
322
+ clients.forEach((clientInfo, ws) => {
323
+ if (!clientInfo.isAlive) {
324
+ logger.warn('heartbeat:terminate', { rooms: clientInfo.worktreeIds.size });
325
+ try {
326
+ ws.terminate();
327
+ }
328
+ catch {
329
+ // Already destroyed; the disconnect bookkeeping below still has to run.
330
+ }
331
+ // `terminate()` emits 'close' and that handler cleans up too, but this is
332
+ // not belt-and-braces: on an already-destroyed socket no event fires at
333
+ // all, and `handleDisconnect` is idempotent (it returns early for a ws it
334
+ // no longer knows). Deleting the current key mid-`forEach` is defined
335
+ // behaviour for a Map.
336
+ handleDisconnect(ws);
337
+ return;
338
+ }
339
+ clientInfo.isAlive = false;
340
+ try {
341
+ ws.ping();
342
+ }
343
+ catch (error) {
344
+ logger.error('heartbeat:ping-failed', {
345
+ error: error instanceof Error ? error.message : String(error),
346
+ });
347
+ }
348
+ if (ws.readyState !== ws_1.WebSocket.OPEN)
349
+ return;
350
+ try {
351
+ ws.send(JSON.stringify({ type: websocket_config_1.WS_HEARTBEAT_MESSAGE_TYPE, at: Date.now() }));
352
+ }
353
+ catch {
354
+ // Best-effort: a failing send means the socket is already going away, and
355
+ // the next sweep terminates it.
356
+ }
357
+ });
358
+ }
359
+ /** Start the heartbeat sweep, replacing any previous one. */
360
+ function startHeartbeat() {
361
+ stopHeartbeat();
362
+ heartbeatTimer = setInterval(runHeartbeatSweep, websocket_config_1.WS_SERVER_HEARTBEAT_INTERVAL_MS);
363
+ // Never the reason the process stays alive: `commandmate stop` and the CLI's
364
+ // short-lived server should not have to wait out a 30s tick.
365
+ heartbeatTimer.unref?.();
366
+ }
367
+ /** Stop the heartbeat sweep. Safe to call when none is running. */
368
+ function stopHeartbeat() {
369
+ if (heartbeatTimer !== null) {
370
+ clearInterval(heartbeatTimer);
371
+ heartbeatTimer = null;
372
+ }
373
+ }
292
374
  /**
293
375
  * Setup WebSocket server on HTTP or HTTPS server
294
376
  * Issue #331: Added auth check on WebSocket upgrade
@@ -317,6 +399,9 @@ function setupWebSocket(server, options) {
317
399
  // — and so the closure it registers is the one holding *this* bundle's `rooms`
318
400
  // map, which is what a broadcast has to reach.
319
401
  (0, waiting_broadcast_1.startWaitingStatusBroadcast)(handleBroadcast);
402
+ // Issue #2502: and the liveness sweep, for the same lifetime reason — it has
403
+ // to die with this `wss`, not with the process.
404
+ startHeartbeat();
320
405
  // Handle upgrade requests - only accept app WebSocket connections, not Next.js HMR
321
406
  const handleUpgrade = (request, socket, head) => {
322
407
  const pathname = request.url || '/';
@@ -415,8 +500,17 @@ function setupWebSocket(server, options) {
415
500
  ws,
416
501
  worktreeIds: new Set(),
417
502
  terminalSubscription: null,
503
+ isAlive: true,
418
504
  };
419
505
  clients.set(ws, clientInfo);
506
+ // Issue #2502: the other half of the liveness recipe. Browsers answer a
507
+ // protocol ping automatically, so a client needs no code for this to work —
508
+ // silence here is evidence about the path, not about the page.
509
+ ws.on('pong', () => {
510
+ const info = clients.get(ws);
511
+ if (info)
512
+ info.isAlive = true;
513
+ });
420
514
  // Issue #573: Removed _socket direct access (as unknown as pattern).
421
515
  // ws.on('error') handler below covers socket-level errors because the ws library
422
516
  // internally propagates underlying socket errors to the WebSocket 'error' event
@@ -1105,6 +1199,10 @@ function closeWebSocket() {
1105
1199
  if (wasOwner || (0, publisher_registry_1.getRoomPublisher)() === null) {
1106
1200
  (0, waiting_broadcast_1.stopWaitingStatusBroadcast)();
1107
1201
  }
1202
+ // Issue #2502: unconditionally — unlike the waiting-edge subscription this is
1203
+ // a plain module-local timer, not a `globalThis` slot, so a superseded
1204
+ // instance clearing it cannot reach a live server's sweep.
1205
+ stopHeartbeat();
1108
1206
  if (wss) {
1109
1207
  // Close all client connections
1110
1208
  clients.forEach((clientInfo) => {
@@ -1121,6 +1219,9 @@ function closeWebSocket() {
1121
1219
  }
1122
1220
  exports.__internal = {
1123
1221
  handleMessage,
1222
+ runHeartbeatSweep,
1223
+ startHeartbeat,
1224
+ stopHeartbeat,
1124
1225
  handleClientVersion,
1125
1226
  handleProxyUpgrade,
1126
1227
  handleTerminalSubscribe,
@@ -1128,17 +1229,26 @@ exports.__internal = {
1128
1229
  handleTerminalResize,
1129
1230
  handleTerminalUnsubscribe,
1130
1231
  handleDisconnect,
1131
- registerClientForTest(ws) {
1232
+ registerClientForTest(ws, isAlive = true) {
1132
1233
  clients.set(ws, {
1133
1234
  ws,
1134
1235
  worktreeIds: new Set(),
1135
1236
  terminalSubscription: null,
1237
+ isAlive,
1136
1238
  });
1137
1239
  },
1138
1240
  getClientInfoForTest(ws) {
1139
1241
  return clients.get(ws);
1140
1242
  },
1243
+ /**
1244
+ * Every live client, for tests that hold the *client* end of a real socket and
1245
+ * therefore have no handle on the server-side `WebSocket` to look up by.
1246
+ */
1247
+ listClientsForTest() {
1248
+ return Array.from(clients.values());
1249
+ },
1141
1250
  resetStateForTest() {
1251
+ stopHeartbeat();
1142
1252
  clients.clear();
1143
1253
  rooms.clear();
1144
1254
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.34.1",
3
+ "version": "0.35.0",
4
4
  "description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
5
5
  "keywords": [
6
6
  "claude-code",
package/public/sw.js CHANGED
@@ -26,6 +26,18 @@ const OFFLINE_URL = '/offline';
26
26
  const PRECACHE_URLS = [OFFLINE_URL];
27
27
 
28
28
  // Denylist — never cached (mirror of EXCLUDED_PATH_PREFIXES).
29
+ //
30
+ // `/api` is load-bearing and is not a default anyone forgot to revisit: Issue
31
+ // #2504 asked for two of its GETs to be served from cache while revalidating,
32
+ // and was closed wontfix. The short reason is that a cache read in this file
33
+ // cannot be authenticated — the auth cookie is httpOnly and invisible here, the
34
+ // server sends no `Vary: Cookie`, and the token is one server-wide secret, so
35
+ // there is no identity to key a cache on. Whatever lands in the Cache API is
36
+ // readable by anyone who can open this origin in this browser profile.
37
+ // Note also that `matchesPrefix` below is a PREFIX match: `/api/worktrees` is
38
+ // 36 routes, among them current-output, files, env, messages and terminal.
39
+ // The rest of the reasoning is in src/lib/pwa/cache-policy.ts; the full argument
40
+ // is the design policy filed on Issue #2504.
29
41
  const EXCLUDED_PATH_PREFIXES = ['/api', '/login', '/proxy'];
30
42
  // Allowlist — cache-first (mirror of STATIC_CACHE_PREFIXES / STATIC_CACHE_EXACT).
31
43
  const STATIC_CACHE_PREFIXES = ['/_next/static/', '/icons/'];
@@ -1,8 +0,0 @@
1
- exports.id=595,exports.ids=[595],exports.modules={3453:(a,b,c)=>{"use strict";c.d(b,{Rh:()=>r,T1:()=>o,Z2:()=>m,c$:()=>n,nu:()=>q});var d=c(72626),e=c(80438);let f=(0,d.h)("ip-restriction"),g="::ffff:",h=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,i=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/(\d{1,2})$/,j=process.env.CM_ALLOWED_IPS?.trim()||"",k=process.env.CM_TRUST_PROXY?.trim()||"";""!==k&&"true"!==k&&"false"!==k&&(0,e.h)(f,"trust-proxy-unexpected",{value:k});let l="true"===k;function m(a){return a?a.toLowerCase().startsWith(g)?a.substring(g.length):a:""}function n(a,b){if(0===b.length)return!1;let c=function(a){let b=a.match(h);if(!b)return null;let c=[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10),parseInt(b[4],10)];for(let a of c)if(a<0||a>255)return null;return(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0}(m(a));if(null===c)return!1;for(let a of b)if((c&a.mask)>>>0===a.network)return!0;return!1}function o(a){if(l){let b=a.get("x-forwarded-for");if(b){let a=b.split(",")[0].trim();if(a)return a}}return a.get("x-real-ip")||null}let p=j.length>0?function(a){let b=a.trim();if(0===b.length)return[];let c=b.split(",").map(a=>a.trim()).filter(a=>a.length>0);if(c.length>256)throw Error(`CM_ALLOWED_IPS: too many entries (${c.length}). Maximum is 256.`);let d=[];for(let a of c){if(a.length>18)throw Error(`CM_ALLOWED_IPS: entry "${a}" exceeds maximum length of 18 characters.`);let b=a.match(i);if(b){let c=[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10),parseInt(b[4],10)],e=parseInt(b[5],10);for(let b of c)if(b<0||b>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${a}". Octets must be 0-255.`);if(e<0||e>32)throw Error(`CM_ALLOWED_IPS: invalid prefix length in "${a}". Must be 0-32.`);let f=(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0,g=0===e?0:0xffffffff<<32-e>>>0;d.push({network:(f&g)>>>0,mask:g});continue}let c=a.match(h);if(c){let b=[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10),parseInt(c[4],10)];for(let c of b)if(c<0||c>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${a}". Octets must be 0-255.`);let e=(b[0]<<24|b[1]<<16|b[2]<<8|b[3])>>>0;d.push({network:e,mask:0xffffffff});continue}throw Error(`CM_ALLOWED_IPS: invalid entry "${a}". Expected IPv4 address or CIDR notation.`)}return d}(j):[];function q(){return p}function r(){return j.length>0}},7015:(a,b,c)=>{"use strict";c.d(b,{Ds:()=>g});var d=c(81719);class e{constructor(a,b=3e4){this.cache=new Map,this.allAppsCache=null,this.lastRefresh=0,this.db=a,this.ttl=b}getTTL(){return this.ttl}isStale(){return Date.now()-this.lastRefresh>this.ttl}async refresh(){let a=(0,d.$i)(this.db);for(let b of(this.cache.clear(),a))this.cache.set(b.pathPrefix,b);this.allAppsCache=a,this.lastRefresh=Date.now()}async getByPathPrefix(a){return this.isStale()&&await this.refresh(),this.cache.get(a)??null}async getAll(){return this.isStale()&&await this.refresh(),this.allAppsCache??[]}invalidate(){this.cache.clear(),this.allAppsCache=null,this.lastRefresh=0}invalidateByIssueNo(a){this.invalidate()}}let f=null;function g(a){if(!f){if(!a)throw Error("Database instance required to initialize cache");f=new e(a)}return f}},23854:(a,b,c)=>{"use strict";c.d(b,{$G:()=>f,AL:()=>h,DZ:()=>d,Qe:()=>g,ie:()=>e});let d=4e3,e=15e3;function f(a){var b,c;if(b=a.from,c=a.to,b.worktreeId===c.worktreeId&&b.instanceId===c.instanceId)return{code:"RELAY_SELF_TARGET",message:"A session cannot relay a reply to itself. --reply-to must name a different worktree or a different agent instance."};let d=null===a.parentHops?1:a.parentHops+1;return null===a.parentHops||a.allowRelayChain?d>3?{code:"RELAY_HOPS_EXCEEDED",message:`Relay chains stop at 3 hops; this one would be ${d}. Report the reply to whoever asked instead of forwarding it again.`}:a.openBetween>=1?{code:"RELAY_DUPLICATE_PENDING",message:"There is already an open relay between these two sessions. Wait for it, or withdraw it with `commandmate relays cancel <id>`."}:{ok:!0,hops:d}:{code:"RELAY_CHAIN_BLOCKED",message:"The last message this session was given arrived over a relay, so opening another one would chain two deliveries together. Pass --allow-relay-chain if that is what you mean."}}function g(a){return"code"in a}function h(a){return void 0!==a&&Number.isFinite(a)?Math.min(6048e5,Math.max(6e4,Math.trunc(a))):864e5}},26838:(a,b,c)=>{"use strict";c.d(b,{E2:()=>o,Mj:()=>m,Sw:()=>l,lX:()=>p});var d=c(29021),e=c(33873),f=c(54325),g=c(90164);let h=/^v?\d+\.\d+\.\d+$/,i=/^[a-zA-Z0-9.\-\s_v]+$/,j=[".next","required-server-files.json"],k=globalThis.__versionCheckCache??(globalThis.__versionCheckCache={result:null,fetchedAt:0,rateLimitResetAt:null});function l(){return function(){try{let a=(0,d.readFileSync)((0,e.join)(process.cwd(),"package.json"),"utf-8"),b=JSON.parse(a);if("commandmate"===b.name&&"string"==typeof b.version&&b.version.length>0)return b.version;return null}catch{return null}}()??"0.34.1"}function m(){return l()}let n=null;function o(a){let b=n??=function(){{let a=function(){try{let a=(0,d.readFileSync)((0,e.join)(process.cwd(),...j),"utf-8"),b=JSON.parse(a),c=b.config?.env?.NEXT_PUBLIC_APP_VERSION;if("string"==typeof c&&c.length>0)return c;return null}catch{return null}}();if(a)return a}return"0.34.1"}();return(0,f.LE)(b,a)?{serverVersion:b,clientVersion:a}:null}async function p(){try{var a,b,c;if(null!==k.result&&Date.now()-k.fetchedAt<36e5||k.rateLimitResetAt&&(!(Date.now()>=k.rateLimitResetAt)||(k.rateLimitResetAt=null,0)))return k.result;let d=await fetch("https://api.github.com/repos/Kewton/CommandMate/releases/latest",{headers:{Accept:"application/vnd.github+json","User-Agent":`CommandMate/${m()}`},cache:"no-store",signal:AbortSignal.timeout(5e3)});if(403===d.status)return function(a){let b=a.headers.get("X-RateLimit-Reset");b?k.rateLimitResetAt=1e3*parseInt(b,10):k.rateLimitResetAt=Date.now()+36e5}(d),k.result;if(!d.ok)return k.result;let e=await d.json(),f=m(),j=e.tag_name.replace(/^v/,""),l={hasUpdate:function(a,b){if(!h.test(a)||!h.test(b))return!1;let c=a=>a.replace(/^v/,"").split(".").map(Number),[d,e,f]=c(a),[g,i,j]=c(b);return g!==d?g>d:i!==e?i>e:j>f}(f,e.tag_name),currentVersion:f,latestVersion:j,releaseUrl:(a=e.html_url).startsWith(g.Dk)?a:null,releaseName:(b=e.name,c=e.tag_name,i.test(b)&&b.length<=128?b:c),publishedAt:e.published_at};return k.result=l,k.fetchedAt=Date.now(),l}catch{return k.result}}},39727:()=>{},43925:(a,b,c)=>{"use strict";c.d(b,{PJ:()=>i,dz:()=>j,vQ:()=>g});var d=c(57836),e=c(23854);let f=(0,c(72626).h)("relay-triggers");function g(a,b,d,e){let g={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayTurnCompleted:a}=await Promise.all([c.e(1634),c.e(9130),c.e(4443),c.e(8800),c.e(7905),c.e(1886),c.e(6337),c.e(3323),c.e(8918),c.e(650),c.e(6677),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a(g,{settled:e})}catch(c){f.warn("relay-turn-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:g.instanceId,error:c instanceof Error?c.message:String(c)})}})()}async function h(){try{let{runRelayMaintenanceTick:a}=await Promise.all([c.e(1634),c.e(9130),c.e(4443),c.e(8800),c.e(7905),c.e(1886),c.e(6337),c.e(3323),c.e(8918),c.e(650),c.e(6677),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a()}catch(a){f.warn("relay-maintenance-failed",{error:a instanceof Error?a.message:String(a)})}}function i(){j(),globalThis.__relayTriggersUnsubscribe=(0,d.wN)(a=>{a.waiting&&"prompt"===a.kind&&function(a,b,d){let e={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayPromptWaiting:a}=await Promise.all([c.e(1634),c.e(9130),c.e(4443),c.e(8800),c.e(7905),c.e(1886),c.e(6337),c.e(3323),c.e(8918),c.e(650),c.e(6677),c.e(3077),c.e(1210)]).then(c.bind(c,71210));a(e)}catch(c){f.warn("relay-prompt-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:e.instanceId,error:c instanceof Error?c.message:String(c)})}})()}(a.worktreeId,a.cliToolId,a.instanceId)});let a=setInterval(()=>void h(),e.ie);a.unref?.(),globalThis.__relayMaintenanceTimer=a}function j(){let a=globalThis.__relayTriggersUnsubscribe;a&&(a(),globalThis.__relayTriggersUnsubscribe=void 0),globalThis.__relayMaintenanceTimer&&(clearInterval(globalThis.__relayMaintenanceTimer),globalThis.__relayMaintenanceTimer=void 0)}},47990:()=>{},49640:(a,b,c)=>{"use strict";c.r(b),c.d(b,{CM_INGRESS_HEADER:()=>S,REMOTE_ONLY_AUTH_SCOPE:()=>T,WORKTREE_RENAMED_EVENT_TYPE:()=>an,__internal:()=>at,broadcast:()=>ak,broadcastMessage:()=>am,cleanupRooms:()=>aq,closeWebSocket:()=>as,handleProxyUpgrade:()=>X,hasRoomSubscribers:()=>al,isIngressAuthExempt:()=>V,migrateWorktreeRooms:()=>ao,setupWebSocket:()=>Y,stampIngress:()=>U});var d=c(81503),e=c(91645),f=c(88081),g=c(3453),h=c(15194),i=c(40964),j=c(88807),k=c(56791);let l={capturePaneCalls:0,activeControlSessions:0,subscriberCount:0,cleanupCount:0,firstOutputLatencyCount:0,firstOutputLatencyTotalMs:0,firstOutputLatencyLastMs:null,firstOutputLatencyMinMs:null,firstOutputLatencyMaxMs:null};var m=c(79892),n=c(72626),o=c(79646);class p{push(a){if(0===a.length)return[];let b=(this.remainder+a).split("\n");this.remainder=b.pop()??"";let c=[];for(let a of b){let b=a.endsWith("\r")?a.slice(0,-1):a,d=this.parseLine(b);d&&c.push(d)}return c}flush(){if(0===this.remainder.length)return[];let a=this.parseLine(this.remainder);return this.remainder="",a?[a]:[]}parseLine(a){return 0===a.length?{type:"output",data:"\n"}:a.startsWith("%output ")?{type:"output",data:`${a.slice(8)}
2
- `}:"%exit"===a||a.startsWith("%exit ")?{type:"exit",exitCode:null}:a.startsWith("%error ")?{type:"error",error:Error(a.slice(7))}:a.startsWith("%")?null:{type:"output",data:`${a}
3
- `}}constructor(){this.remainder=""}}let q=(0,n.h)("tmux-control-client");class r{constructor(a={}){this.parser=new p,this.handlers=new Set,this.child=null,this.sessionName=null,this.idleTimer=null,this.started=!1,this.spawnProcess=a.spawnProcess??((a,b,c)=>(0,o.spawn)(a,b,c)),this.tmuxBinary=a.tmuxBinary??"tmux",this.idleTimeoutMs=a.idleTimeoutMs??3e4}start(a){this.started||(this.sessionName=a,this.child=this.spawnProcess(this.tmuxBinary,["-C","attach-session","-t",(0,m.lA)(a)],{stdio:"pipe"}),this.started=!0,this.child.stdout.setEncoding("utf8"),this.child.stdout.on("data",a=>{this.touch();let b="string"==typeof a?a:a.toString("utf8");for(let a of this.parser.push(b))this.emit(a)}),this.child.stderr.setEncoding("utf8"),this.child.stderr.on("data",a=>{let b="string"==typeof a?a:a.toString("utf8");this.emit({type:"error",error:Error(b.trim()||"tmux control stderr")})}),this.child.on("close",a=>{for(let a of this.parser.flush())this.emit(a);this.emit({type:"exit",exitCode:a}),this.stop()}),this.child.on("error",a=>{this.emit({type:"error",error:a}),this.stop()}),this.resetIdleTimer(),q.debug("start",{sessionName:a}))}onEvent(a){return this.handlers.add(a),()=>{this.handlers.delete(a)}}sendInput(a){if(!this.child?.stdin.writable)throw Error("Tmux control client is not writable");this.touch(),this.child.stdin.write(a)}resize(a,b){if(!this.child?.stdin.writable)throw Error("Tmux control client is not writable");this.touch(),this.child.stdin.write(`refresh-client -C ${a}x${b}
4
- `)}stop(){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null),this.child&&(this.child.removeAllListeners(),this.child.stdout.removeAllListeners(),this.child.stderr.removeAllListeners(),this.child.kill(),this.child=null),this.started=!1}isStarted(){return this.started}setSessionName(a){this.sessionName=a}emit(a){for(let b of this.handlers)b(a)}touch(){this.resetIdleTimer()}resetIdleTimer(){this.idleTimeoutMs<=0||(this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{q.debug("idle-timeout",{sessionName:this.sessionName}),this.stop()},this.idleTimeoutMs))}}let s=(0,n.h)("tmux-control-registry");class t{constructor(a={}){this.entries=new Map,this.handlers=new Map,this.idleTimeoutMs=a.idleTimeoutMs??15e3,this.createClient=a.createClient??(()=>new r(a))}subscribe(a,b,c){let d=this.ensureEntry(a);d.subscribers.add(b),this.cancelIdleCleanup(d),this.updateMetrics();let e=this.handlers.get(a);return e||(e=new Set,this.handlers.set(a,e)),e.add(c),()=>{e?.delete(c),this.unsubscribe(a,b)}}sendInput(a,b){let c=this.entries.get(a);if(!c)throw Error(`No control client registered for ${a}`);c.client.sendInput(b)}resize(a,b,c){let d=this.entries.get(a);if(!d)throw Error(`No control client registered for ${a}`);d.client.resize(b,c)}hasSession(a){return this.entries.has(a)}getSubscriberCount(a){return this.entries.get(a)?.subscribers.size??0}getTotalSubscriberCount(){let a=0;for(let b of this.entries.values())a+=b.subscribers.size;return a}getSessionCount(){return this.entries.size}shutdown(){for(let[a,b]of this.entries)this.teardownEntry(a,b);this.entries.clear(),this.handlers.clear(),this.updateMetrics()}renameSession(a,b){if(a===b)return!1;let c=this.entries.get(a);if(!c)return!1;if(this.entries.has(b))return s.warn("rename:destination-occupied",{oldName:a,newName:b}),!1;this.entries.delete(a),c.sessionName=b,this.entries.set(b,c),c.client.setSessionName(b);let d=this.handlers.get(a);return d&&(this.handlers.delete(a),this.handlers.set(b,d)),s.debug("rename",{oldName:a,newName:b}),!0}ensureEntry(a){let b=this.entries.get(a);if(b)return b;let c=this.createClient(a);c.start(a);let d={client:c,subscribers:new Set,unsubscribeClientEvent:()=>{},idleTimer:null,sessionName:a};return d.unsubscribeClientEvent=c.onEvent(a=>{let b=this.handlers.get(d.sessionName);if(b)for(let c of b)c(a);("exit"===a.type||"error"===a.type)&&this.deleteEntry(d.sessionName)}),this.entries.set(a,d),this.updateMetrics(),d}unsubscribe(a,b){let c=this.entries.get(a);c&&(c.subscribers.delete(b),this.updateMetrics(),0===c.subscribers.size&&this.scheduleIdleCleanup(a,c))}scheduleIdleCleanup(a,b){if(this.idleTimeoutMs<=0)return void this.deleteEntry(a);this.cancelIdleCleanup(b),b.idleTimer=setTimeout(()=>{s.debug("idle-cleanup",{sessionName:b.sessionName}),this.deleteEntry(b.sessionName)},this.idleTimeoutMs)}cancelIdleCleanup(a){a.idleTimer&&(clearTimeout(a.idleTimer),a.idleTimer=null)}deleteEntry(a){let b=this.entries.get(a);b&&(this.teardownEntry(a,b),this.entries.delete(a),this.handlers.delete(a),this.updateMetrics())}teardownEntry(a,b){this.cancelIdleCleanup(b),b.unsubscribeClientEvent(),b.client.stop(),l.cleanupCount+=1}updateMetrics(){l.activeControlSessions=Math.max(0,this.getSessionCount()),l.subscriberCount=Math.max(0,this.getTotalSubscriberCount())}}let u=null,v={streamingOutput:!0,explicitResize:!0,snapshotFallback:!0};class w{constructor(a={}){this.registry=a.registry??(u||(u=new t),u)}async ensureSession(a,b){await (0,m.N)(a)||await (0,m.jw)(a,b)}async sessionExists(a){return(0,m.N)(a)}async sendInput(a,b){if(this.registry.hasSession(a))return void this.registry.sendInput(a,b);await (0,m.V1)(a,b)}async sendSpecialKey(a,b){if("Escape"!==b&&"C-c"!==b&&"C-d"!==b&&"C-m"!==b&&"Enter"!==b)throw Error(`Unsupported special key for ControlModeTmuxTransport: ${b}`);await (0,m.ds)(a,b)}async resize(a,b,c){this.registry.resize(a,b,c)}async captureSnapshot(a,b){return l.capturePaneCalls+=1,(0,m.Xg)(a,b)}async subscribe(a,b){let c=`sub-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,d=this.registry.subscribe(a,c,a=>{"output"===a.type?b.onOutput(a.data):"exit"===a.type?b.onExit?.({exitCode:a.exitCode}):b.onError(a.error)});return{async unsubscribe(){d()}}}getCapabilities(){return v}getSubscriberCount(a){return this.registry.getSubscriberCount(a)}renameSession(a,b){return this.registry.renameSession(a,b)}async killSession(a){return(0,m.fY)(a)}}let x=null;function y(){return x||(x=new w),x}var z=c(7015),A=c(26838),B=c(54325),C=c(52660),D=c(55233),E=c(48083);let F=(0,n.h)("model-change-broadcast");function G(){let a=globalThis.__modelChangeBroadcastUnsubscribe;a&&(a(),globalThis.__modelChangeBroadcastUnsubscribe=void 0)}var H=c(43925),I=c(57836);function J(){let a=globalThis.__waitingStatusBroadcastUnsubscribe;a&&(a(),globalThis.__waitingStatusBroadcastUnsubscribe=void 0),G(),(0,H.dz)()}let K=(0,n.h)("publisher-registry");function L(){return globalThis.__realtimeRoomPublisher?.publisher??null}let M=(0,n.h)("ws-server"),N=null,O=new Map,P=new Map,Q=null,R=new Set(["localhost","127.0.0.1"]),S="x-cm-ingress",T="remote-only";function U(a,b){a[S]=b}function V(a,b=process.env){return b.CM_AUTH_SCOPE===T&&"local"===a[S]}function W(a,b){try{a.write(`HTTP/1.1 ${b}\r
5
- Content-Length: 0\r
6
- Connection: close\r
7
- \r
8
- `)}catch{}a.destroy()}async function X(a,b,c,d){let e,f=(a.url||"/").split("?")[0].split("/")[2]||"";if(!f)return void W(b,"400 Bad Request");try{let a=d.getDb(),b=d.getCache(a);e=await b.getByPathPrefix(f)}catch(a){M.error("ws-proxy:cache-error",{pathPrefix:f,error:a instanceof Error?a.message:String(a)}),!b.destroyed&&b.writable&&W(b,"502 Bad Gateway");return}if(b.destroyed||!b.writable)return;if(!e)return void W(b,"404 Not Found");if(!e.enabled)return void W(b,"503 Service Unavailable");if(!e.websocketEnabled)return void W(b,"403 Forbidden");if(!R.has(e.targetHost)){M.warn("ws-proxy:ssrf-blocked",{pathPrefix:f}),W(b,"403 Forbidden");return}let g=d.netConnect({host:e.targetHost,port:e.targetPort}),h=!1,i=!1,j=()=>{if(!i){i=!0;try{g.destroy()}catch{}try{b.destroy()}catch{}}};g.on("connect",()=>{h=!0;try{let b=function(a){let b=a.method||"GET",c=a.url||"/",d=a.httpVersion||"1.1",e=[`${b} ${c} HTTP/${d}`];for(let[b,c]of Object.entries(a.headers))if(void 0!==c)if(Array.isArray(c))for(let a of c)e.push(`${b}: ${a}`);else e.push(`${b}: ${c}`);return e.join("\r\n")+"\r\n\r\n"}(a);g.write(b)}catch(a){M.error("ws-proxy:upstream-write-error",{pathPrefix:f,error:a instanceof Error?a.message:String(a)}),j();return}b.pipe(g),g.pipe(b)}),g.on("error",a=>{M.error("ws-proxy:upstream-error",{pathPrefix:f,error:a.message}),h||b.destroyed||!b.writable?j():W(b,"502 Bad Gateway")}),g.on("close",()=>{j()}),b.on("error",a=>{M.error("ws-proxy:client-error",{pathPrefix:f,error:a.message}),j()}),b.on("close",()=>{j()})}function Y(a,b){N=new d.zu({noServer:!0}),Q=function(a){let b=(globalThis.__realtimeRoomPublisherGeneration??0)+1;return globalThis.__realtimeRoomPublisherGeneration=b,globalThis.__realtimeRoomPublisher={generation:b,publisher:a},globalThis.__realtimeUnroutedPublish=void 0,{token:b,unregister:()=>(function(a){let b=globalThis.__realtimeRoomPublisher;return!!b&&b.generation===a&&(globalThis.__realtimeRoomPublisher=void 0,!0)})(b)}}(ah),function(a){J();let b=(0,I.wN)(b=>{a(b.worktreeId,{type:"session_status_changed",worktreeId:b.worktreeId,cliTool:b.cliToolId,instance:b.instanceId??b.cliToolId,isWaitingForResponse:b.waiting,waitingKind:b.kind??null,waitingSince:b.since})});globalThis.__waitingStatusBroadcastUnsubscribe=b,function(a){G();let b=(0,E.onAgentModelChange)(b=>{F.info("model-changed",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId,from:b.from,to:b.to,source:b.source});let c=function(a){try{let b=(0,j.getDbInstance)(),c=(0,D.dV)(b),d=(0,C.createModelChangeMessage)(b,{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,content:(0,D.DH)(c,a.from,a.to),at:a.at});return{type:"message",worktreeId:a.worktreeId,message:d}}catch(b){return F.warn("model-change-history-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)}),null}}(b);try{c&&a(b.worktreeId,c),a(b.worktreeId,{type:B.T4,worktreeId:b.worktreeId,cliTool:b.cliToolId,instance:b.instanceId,from:b.from,to:b.to,source:b.source,at:b.at})}catch(a){F.warn("model-change-broadcast-failed",{worktreeId:b.worktreeId,instanceId:b.instanceId,error:a instanceof Error?a.message:String(a)})}(0,D.b3)(b)});globalThis.__modelChangeBroadcastUnsubscribe=b}(a),(0,H.PJ)()}(_);let c=(a,b,c)=>{let d=a.url||"/";if(d.startsWith("/_next/")){b.write("HTTP/1.1 426 Upgrade Required\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"),b.destroy();return}if((0,g.Rh)()){let c=(0,g.Z2)(a.socket.remoteAddress||"");if(!(0,g.c$)(c,(0,g.nu)())){let a=c.substring(0,45);M.warn("websocket:denied",{ip:a}),b.write("HTTP/1.1 403 Forbidden\r\n\r\n"),b.destroy();return}}if((0,f.y2)()&&!V(a.headers)){let c=a.headers.cookie||"",d=(0,f.JT)(c)[f.aq];if(!d||!(0,f.nr)(d)){b.write("HTTP/1.1 401 Unauthorized\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"),b.destroy();return}}if(d.startsWith("/proxy/"))return void(async()=>{try{await X(a,b,c,{getDb:()=>(0,j.getDbInstance)(),getCache:a=>(0,z.Ds)(a),netConnect:a=>(0,e.connect)(a)})}catch(a){if(M.error("ws-proxy:unhandled-error",{error:a instanceof Error?a.message:String(a)}),!b.destroyed&&b.writable){try{b.write("HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\nConnection: close\r\n\r\n")}catch{}b.destroy()}}})();N.handleUpgrade(a,b,c,b=>{N.emit("connection",b,a)})};for(let d of[a,...b?.additionalServers??[]])d.on("upgrade",c);N.on("error",a=>{M.error("server:error",{error:a.message})}),N.on("connection",a=>{let b={ws:a,worktreeIds:new Set,terminalSubscription:null};O.set(a,b),a.on("message",b=>{try{let c=JSON.parse(b.toString());Z(a,c)}catch(a){M.error("message:parse-failed",{error:a instanceof Error?a.message:String(a)})}}),a.on("close",()=>{aa(a)}),a.on("error",b=>{"WS_ERR_INVALID_CLOSE_CODE"===b.code||b.message?.includes("Invalid WebSocket frame")||b.message?.includes("write after end")||b.message?.includes("ECONNRESET")||b.message?.includes("EPIPE")||M.error("websocket:error",{error:b.message});try{a.terminate()}catch{}aa(a)})})}function Z(a,b){switch(b.type){case"subscribe":if(!b.worktreeId)return;var c=a,d=b.worktreeId;let e=O.get(c);e&&(e.worktreeIds.add(d),P.has(d)||P.set(d,new Set),P.get(d).add(c));break;case"unsubscribe":if(!b.worktreeId)return;!function(a,b){let c=O.get(a);if(!c)return;c.worktreeIds.delete(b);let d=P.get(b);d&&(d.delete(a),0===d.size&&P.delete(b))}(a,b.worktreeId);break;case"broadcast":if(!b.worktreeId)return;_(b.worktreeId,b.data);break;case B.ST:$(a,b);break;case"terminal_subscribe":ac(a,b);break;case"terminal_input":ad(a,b);break;case"terminal_resize":ae(a,b);break;case"terminal_unsubscribe":af(a);break;default:M.warn("message:unknown-type")}}function $(a,b){let c="string"==typeof b.version?b.version:"";if(!c)return;let e=(0,A.E2)(c);if(e&&a.readyState===d.kb.OPEN)try{a.send(JSON.stringify({type:B.Oo,serverVersion:e.serverVersion,clientVersion:e.clientVersion}))}catch(a){M.error("version:notify-failed",{error:a instanceof Error?a.message:String(a)})}}function _(a,b){let c=P.get(a);if(c&&0!==c.size)try{let e=JSON.stringify({type:"broadcast",worktreeId:a,data:b});c.forEach(a=>{if(a.readyState===d.kb.OPEN)try{a.send(e)}catch(a){M.error("broadcast:send-failed",{error:a instanceof Error?a.message:String(a)})}})}catch(b){M.error("broadcast:failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)});try{let b=JSON.stringify({type:"broadcast",worktreeId:a,data:{error:"Message encoding error"}});c.forEach(a=>{if(a.readyState===d.kb.OPEN)try{a.send(b)}catch{}})}catch(a){M.error("fallback:send-failed",{error:a instanceof Error?a.message:String(a)})}}}function aa(a){let b=O.get(a);b&&(b.worktreeIds.forEach(b=>{let c=P.get(b);c&&(c.delete(a),0===c.size&&P.delete(b))}),b.terminalSubscription&&(b.terminalSubscription.unsubscribe(),b.terminalSubscription=null),O.delete(a))}function ab(a,b){a.readyState===d.kb.OPEN&&a.send(JSON.stringify(b))}async function ac(a,b){let c=O.get(a);if(!c)return void ab(a,{type:"terminal_error",error:"Unauthorized WebSocket client"});if("true"!==process.env.TMUX_CONTROL_MODE_ENABLED)return void ab(a,{type:"terminal_error",error:"Tmux control mode is disabled"});let{worktreeId:d,cliToolId:e}=b;if(!d||!e||!(0,h.hR)(e))return void ab(a,{type:"terminal_error",error:"Invalid terminal subscription parameters"});let f=(0,j.getDbInstance)();if(!(0,k.getWorktreeById)(f,d))return void ab(a,{type:"terminal_error",error:"Worktree not found"});c.terminalSubscription&&(await c.terminalSubscription.unsubscribe(),c.terminalSubscription=null);let g=(0,i.m)(e,d),m=y();if(m.getSubscriberCount(g)>=4)return void ab(a,{type:"terminal_error",error:"Terminal subscriber limit reached"});let n=!1,o=Date.now(),p=await m.subscribe(g,{onOutput:b=>{if(!n){n=!0;let a=Math.max(0,Math.round(Date.now()-o));l.firstOutputLatencyCount+=1,l.firstOutputLatencyTotalMs+=a,l.firstOutputLatencyLastMs=a,l.firstOutputLatencyMinMs=null===l.firstOutputLatencyMinMs?a:Math.min(l.firstOutputLatencyMinMs,a),l.firstOutputLatencyMaxMs=null===l.firstOutputLatencyMaxMs?a:Math.max(l.firstOutputLatencyMaxMs,a)}ab(a,{type:"terminal_output",data:b})},onExit:({exitCode:b})=>{ab(a,{type:"terminal_exit",exitCode:b})},onError:b=>{(async()=>{try{let b=await m.captureSnapshot(g,{startLine:-200});b.length>0&&ab(a,{type:"terminal_output",data:b,fallback:!0})}catch{}ab(a,{type:"terminal_error",error:b.message,fallback:!0})})()}});c.terminalSubscription={worktreeId:d,cliToolId:e,sessionName:g,startedAt:o,unsubscribe:p.unsubscribe},ab(a,{type:"terminal_status",connected:!0,worktreeId:d,cliToolId:e})}async function ad(a,b){let c=O.get(a),d=c?.terminalSubscription;if(!d)return void ab(a,{type:"terminal_error",error:"No active terminal subscription"});let e="string"==typeof b.data?b.data:"";if(0===e.length||e.length>4096)return void ab(a,{type:"terminal_error",error:"Invalid terminal input"});try{await y().sendInput(d.sessionName,e)}catch(b){ab(a,{type:"terminal_error",error:b instanceof Error?b.message:"Failed to send terminal input"})}}async function ae(a,b){let c=O.get(a),d=c?.terminalSubscription;if(d){if("number"!=typeof b.cols||!Number.isInteger(b.cols)||b.cols<20||b.cols>500||"number"!=typeof b.rows||!Number.isInteger(b.rows)||b.rows<5||b.rows>200)return void ab(a,{type:"terminal_error",error:"Invalid terminal resize payload"});try{await y().resize(d.sessionName,b.cols,b.rows)}catch(b){ab(a,{type:"terminal_error",error:b instanceof Error?b.message:"Failed to resize terminal"})}}}async function af(a){let b=O.get(a);if(b?.terminalSubscription){try{await b.terminalSubscription.unsubscribe()}catch{}b.terminalSubscription=null,ab(a,{type:"terminal_status",connected:!1})}}function ag(a){let b=P.get(a);return!!b&&b.size>0}let ah={publish:_,hasSubscribers:ag,cleanupRooms:ar,migrateRooms:ap};function ai(){let a=L();return a&&a!==ah?a:null}function aj(a,b){null===L()&&0===P.size&&function(a,b,c=Date.now()){let d=globalThis.__realtimeUnroutedPublish??={total:0,suppressed:0,lastWarnedAt:null,operations:{}};if(d.total+=1,d.operations[a]=(d.operations[a]??0)+1,null!==d.lastWarnedAt&&c-d.lastWarnedAt<6e4){d.suppressed+=1;return}let e=d.suppressed;d.suppressed=0,d.lastWarnedAt=c,K.warn("realtime:no-room-publisher",{operation:a,worktreeId:b,total:d.total,suppressedSinceLastWarning:e,operations:{...d.operations}})}(a,b)}function ak(a,b){let c=ai();if(c)return void c.publish(a,b);aj("broadcast",a),_(a,b)}function al(a){let b=ai();return b?b.hasSubscribers(a):(aj("hasRoomSubscribers",a),ag(a))}function am(a,b){b.worktreeId?ak(b.worktreeId,{type:a,...b}):M.warn("broadcast:missing-worktree-id")}let an="worktree_renamed";function ao(a){let b=ai();return b?b.migrateRooms(a):ap(a)}function ap(a){let b=new Map;for(let{oldId:c,newId:d}of a)c&&d&&c!==d&&b.set(c,d);if(0===b.size)return[];let c=[];for(let[a,d]of b){let b=P.get(a);b&&0!==b.size&&(P.delete(a),c.push({oldId:a,newId:d,sockets:b}))}let d=[];for(let{oldId:a,newId:b,sockets:e}of c){let c=P.get(b)??new Set;for(let d of e){c.add(d);let e=O.get(d);e&&(e.worktreeIds.delete(a),e.worktreeIds.add(b)),ab(d,{type:an,worktreeId:b,previousWorktreeId:a})}P.set(b,c),d.push({oldId:a,newId:b,subscribers:e.size})}for(let a of O.values()){let c=a.terminalSubscription;if(!c)continue;let d=b.get(c.worktreeId);if(d)try{if(!(0,h.hR)(c.cliToolId))continue;c.sessionName=(0,i.m)(c.cliToolId,d),c.worktreeId=d}catch(a){M.warn("terminal:rename-failed",{worktreeId:c.worktreeId,newId:d,error:a instanceof Error?a.message:String(a)})}}return d.length>0&&M.info("rooms:migrated",{count:d.length}),d}function aq(a){let b=ai();if(b)return void b.cleanupRooms(a);ar(a)}function ar(a){for(let b of a){let a=P.get(b);a&&(a.forEach(a=>{let c=O.get(a);c&&c.worktreeIds.delete(b)}),P.delete(b))}}function as(){let a=null!==Q&&Q.unregister();Q=null,(a||null===L())&&J(),N&&(O.forEach(a=>{a.ws.close()}),O.clear(),P.clear(),N.close(),N=null)}let at={handleMessage:Z,handleClientVersion:$,handleProxyUpgrade:X,handleTerminalSubscribe:ac,handleTerminalInput:ad,handleTerminalResize:ae,handleTerminalUnsubscribe:af,handleDisconnect:aa,registerClientForTest(a){O.set(a,{ws:a,worktreeIds:new Set,terminalSubscription:null})},getClientInfoForTest:a=>O.get(a),resetStateForTest(){O.clear(),P.clear()}}},54036:(a,b,c)=>{"use strict";c.d(b,{aq:()=>d,gu:()=>f,kr:()=>h});let d="cm_auth_token",e=/^[0-9a-f]{64}$/;function f(a){return!!a&&e.test(a)}let g=2592e6;function h(){let a=process.env.CM_AUTH_EXPIRE,b=Date.now();if(a)try{return b+function(a){let b=a.match(/^(\d+)([hdm])$/);if(!b)throw Error(`Invalid duration format: "${a}". Use Nh, Nd, or Nm (e.g., "24h", "7d", "90m")`);let c=parseInt(b[1],10),d=b[2],e={h:36e5,d:864e5,m:6e4}[d];if(void 0===e)throw Error(`Invalid duration unit: "${d}"`);let f=c*e;if(f<36e5)throw Error(`Duration too short: minimum is 1h (60m). Got: "${a}"`);if(f>g)throw Error(`Duration too long: maximum is 30d (720h). Got: "${a}"`);return f}(a)}catch{return b+864e5}return process.env.CM_AUTH_TOKEN_HASH?b+864e5:null}},55233:(a,b,c)=>{"use strict";c.d(b,{DH:()=>o,b3:()=>q,dV:()=>p});var d=c(25754),e=c(88807),f=c(43167),g=c(73753),h=c(72626),i=c(72119),j=c(52445),k=c(61191),l=c(27519);let m=(0,h.h)("push/model-change-notifier"),n={en:i.agentModel.changed,ja:j.agentModel.changed};function o(a,b,c){return n[(0,k.resolvePushLocale)(a)].replace("{from}",b).replace("{to}",c)}function p(a){try{let b=(0,f.Se)(a),c=null;for(let a of b){let b=a.updatedAt.getTime();(null===c||b>c.updatedAt)&&(c={updatedAt:b,locale:a.locale})}return(0,k.resolvePushLocale)(c?.locale??d.Xn)}catch{return d.Xn}}async function q(a){if(!(0,l.lU)())return m.debug("model-change-push-suppressed",{worktreeId:a.worktreeId,instanceId:a.instanceId,reason:"unconfigured"}),"unconfigured";try{await (0,k.notifyPushSubscribers)({worktreeId:a.worktreeId,worktreeName:function(a){try{return(0,g.getWorktreeById)((0,e.getDbInstance)(),a)?.name??a}catch{return a}}(a.worktreeId),kind:"failure",agentName:a.instanceId,instanceId:a.instanceId,modelChange:{from:a.from,to:a.to,body:function(a,b){let c={};for(let e of d.dI)c[e]=o(e,a,b);return c}(a.from,a.to)}},a.at),m.info("model-change-push-raised",{worktreeId:a.worktreeId,instanceId:a.instanceId,from:a.from,to:a.to,source:a.source})}catch(b){m.warn("model-change-push-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId,error:b instanceof Error?b.message:String(b)})}return null}},57836:(a,b,c)=>{"use strict";c.d(b,{Jp:()=>k,Te:()=>l,hd:()=>j,wN:()=>h});var d=c(24455);let e=(0,c(72626).h)("waiting-episode-state"),f=globalThis.__sessionWaitingEpisodes??(globalThis.__sessionWaitingEpisodes=new Map),g=globalThis.__sessionWaitingTransitionListeners??(globalThis.__sessionWaitingTransitionListeners=new Set);function h(a){return g.add(a),()=>{g.delete(a)}}function i(a){for(let b of g)try{b(a)}catch(b){e.error("waiting-transition-listener-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waiting:a.waiting,error:b instanceof Error?b.message:String(b)})}}function j({worktreeId:a,cliToolId:b,instanceId:c,waiting:e,kind:g=null,structuredSince:h=null,now:j=Date.now()}){let k=(0,d.v7)(a,b,c),l=f.get(k);if(!e)return void 0===l||(f.delete(k),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!1,since:null,kind:null,at:j})),null;if(void 0!==l)return l.kind=g,l.since;let m=h??j;return f.set(k,{since:m,kind:g}),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!0,since:m,kind:g,at:j}),m}function k(a,b,c){return f.get((0,d.v7)(a,b,c))??null}function l(a){let b=`${a}${d.CS}`;for(let a of f.keys())if(a.startsWith(b))return!0;return!1}},88081:(a,b,c)=>{"use strict";c.d(b,{JT:()=>m,QK:()=>k,aq:()=>f.aq,nr:()=>l,r0:()=>p,sO:()=>h,x:()=>q,y2:()=>n,zr:()=>o});var d=c(55511),e=c.n(d),f=c(54036);let g={maxAttempts:5,lockoutDuration:9e5,cleanupInterval:36e5},h=86400,i=(()=>{let a=process.env.CM_AUTH_TOKEN_HASH||void 0;return a?(0,f.gu)(a)?a:void console.error("[auth] CM_AUTH_TOKEN_HASH is not a valid SHA-256 hash"):void 0})(),j=(0,f.kr)();function k(a){return e().createHash("sha256").update(a).digest("hex")}function l(a){if(!i||!a||"string"!=typeof a||null!==j&&Date.now()>j)return!1;let b=k(a),c=Buffer.from(b,"hex"),d=Buffer.from(i,"hex");return c.length===d.length&&e().timingSafeEqual(c,d)}function m(a){let b={};if(!a)return b;for(let c of a.split(";")){let a=c.indexOf("=");if(-1===a)continue;let d=c.substring(0,a).trim(),e=c.substring(a+1).trim();d&&(b[d]=e)}return b}function n(){return!!i}function o(){if(null===j)return 0;let a=j-Date.now();return a<=0?0:Math.floor(a/1e3)}function p(a){return{httpOnly:!0,sameSite:"strict",secure:!!process.env.CM_HTTPS_CERT,maxAge:a,path:"/"}}function q(){let a=new Map,b=setInterval(()=>{let b=Date.now();for(let[c,d]of a){let e=null===d.lockedUntil||b>d.lockedUntil,f=b-d.lastAttempt>g.lockoutDuration;e&&f&&a.delete(c)}},g.cleanupInterval);return b.unref&&b.unref(),{checkLimit(b){let c=a.get(b);if(!c)return{allowed:!0};if(null!==c.lockedUntil){let a=Date.now();if(a<c.lockedUntil)return{allowed:!1,retryAfter:Math.ceil((c.lockedUntil-a)/1e3)};c.attempts=0,c.lockedUntil=null}return{allowed:!0}},recordFailure(b){let c=Date.now(),d=a.get(b)||{attempts:0,lockedUntil:null,lastAttempt:c};d.attempts++,d.lastAttempt=c,d.attempts>=g.maxAttempts&&(d.lockedUntil=c+g.lockoutDuration),a.set(b,d)},recordSuccess(b){a.delete(b)},destroy(){clearInterval(b),a.clear()}}}},90164:(a,b,c)=>{"use strict";c.d(b,{Dk:()=>e,kD:()=>f});let d="https://github.com/Kewton/CommandMate",e=`${d}/releases/`,f=`${d}/blob/main/docs/security-guide.md`}};
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4718],{2317:(e,t,r)=>{r.d(t,{V:()=>i});var n=r(12115);function o(){try{let e="__localStorage_test__";return window.localStorage.setItem(e,"test"),window.localStorage.removeItem(e),!0}catch(e){return!1}}function i(e){let{key:t,defaultValue:r,validate:i,serialize:a=JSON.stringify,deserialize:s=JSON.parse}=e,l=(0,n.useRef)(r),c=(0,n.useRef)(i),u=(0,n.useRef)(a),d=(0,n.useRef)(s);l.current=r,c.current=i,u.current=a,d.current=s;let[f,p]=(0,n.useState)(!1),[g,m]=(0,n.useState)(r),y=(0,n.useCallback)(()=>{if(!o())return l.current;try{let e=window.localStorage.getItem(t);if(null===e)return l.current;let r=d.current(e);if(c.current)return c.current(r)?r:l.current;return r}catch(e){return l.current}},[t]),h=(0,n.useCallback)(e=>{if(o())try{let r=u.current(e);window.localStorage.setItem(t,r)}catch(e){}},[t]),w=(0,n.useCallback)(e=>{m(t=>{let r="function"==typeof e?e(t):e;return h(r),r})},[h]),b=(0,n.useCallback)(()=>{if(o())try{window.localStorage.removeItem(t)}catch(e){}m(l.current)},[t]);return(0,n.useEffect)(()=>{p(o()),m(y())},[y]),{value:g,setValue:w,removeValue:b,isAvailable:f}}},7636:(e,t,r)=>{r.d(t,{BN:()=>C,EN:()=>a,LV:()=>p,PB:()=>l,Si:()=>i,UZ:()=>d,Xn:()=>b,ZC:()=>T,ZD:()=>E,_s:()=>S,fs:()=>k,j:()=>w,m3:()=>s,nO:()=>g,s6:()=>f,zD:()=>h});var n=r(38606);let o=["updatedAt","repositoryName","branchName","status","lastSent"],i=e=>o.includes(e),a=["always","collapsed","hidden"],s=e=>a.includes(e),l="collapsed",c={waiting:0,ready:1,running:2,generating:3,idle:4},u=["waiting","running","generating","ready","idle"];function d(e){let t=new Set;for(let r of e)!1===r.visible&&t.add(r.path);return t}function f(e,t){return 0===t.size?e.slice():e.filter(e=>{let r=e.repositoryPath;return!r||!t.has(r)})}function p(e){let t=function(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t+e.charCodeAt(r)|0;return Math.abs(t)}(e)%360;return"hsl(".concat(t,", ").concat(65,"%, ").concat(60,"%)")}function g(e,t){if(!e&&!t)return 0;if(!e)return 1;if(!t)return -1;let r=e instanceof Date?e.getTime():new Date(e).getTime();return(t instanceof Date?t.getTime():new Date(t).getTime())-r}function m(e){return e.cliStatus&&Object.keys(e.cliStatus).length>0?(0,n.A7)(e.cliStatus):e.status}function y(e){return"waiting"===m(e)}function h(e){let t=new Set(e.map(m));for(let e of u)if(t.has(e))return e;return"idle"}function w(e){let t=0;for(let r of e)y(r)&&t++;return t}function b(e,t,r){let n=[...e],o="status"!==t;return n.sort((e,n)=>{if(o){let t=Number(y(n))-Number(y(e));if(0!==t)return t}let i=0;switch(t){case"updatedAt":{let t=e=>e?e instanceof Date?e.getTime():new Date(e).getTime():0,r=t(e.lastActivity);i=t(n.lastActivity)-r;break}case"repositoryName":{let t=e.repositoryName.toLowerCase(),r=n.repositoryName.toLowerCase();i=t.localeCompare(r);break}case"branchName":{let t=e.name.toLowerCase(),r=n.name.toLowerCase();i=t.localeCompare(r);break}case"status":i=c[e.status]-c[n.status];break;case"lastSent":{let t=g(e.lastActivity,n.lastActivity);if(!e.lastActivity&&!n.lastActivity){i=0;break}if(!e.lastActivity)return 1;if(!n.lastActivity)return -1;i=t;break}default:i=0}return("updatedAt"===t||"lastSent"===t?"desc"===r:"asc"===r)?i:-i}),n}function S(e,t,r){let n=new Map;for(let t of e){let e=t.repositoryName;n.has(e)||n.set(e,[]),n.get(e).push(t)}return[...n.keys()].sort((e,t)=>e.toLowerCase().localeCompare(t.toLowerCase())).map(e=>({repositoryName:e,branches:b(n.get(e),t,r)}))}let v="mcbd-sidebar-group-order-cache";function E(){try{let e=localStorage.getItem(v);if(!e)return[];let t=function(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return[];return t.filter(e=>"string"==typeof e).slice(0,500)}catch(e){return[]}}(e);return t.length,t}catch(e){return[]}}function T(e){try{localStorage.setItem(v,JSON.stringify(e))}catch(e){}}function C(e,t){if(0===t.length)return e.slice();let r=new Map(t.map((e,t)=>[e,t]));return e.slice().sort((e,t)=>{let n=r.has(e.repositoryName)?r.get(e.repositoryName):1/0,o=r.has(t.repositoryName)?r.get(t.repositoryName):1/0;return n===o?e.repositoryName.localeCompare(t.repositoryName):n-o})}function k(e,t){return"hidden"!==e&&("always"===e||!t)}},22592:(e,t,r)=>{r.d(t,{Ps:()=>d,W5:()=>u});var n=r(95155),o=r(12115),i=r(38218),a=r(68704);let s="data-pc-size",l={size:a.r5,setSize:()=>{},isMobile:!1,factor:a.d8[a.r5].factor,isAvailable:!1},c=(0,o.createContext)(l);function u(e){let{children:t}=e,{size:r,setSize:l,isAvailable:u}=(0,a.of)(),d=(0,i.a)();(0,o.useEffect)(()=>{if("undefined"==typeof document)return;let e=document.documentElement;return d?void e.removeAttribute(s):(e.setAttribute(s,r),()=>{e.removeAttribute(s)})},[r,d]);let f=(0,o.useMemo)(()=>({size:r,setSize:l,isMobile:d,factor:a.d8[r].factor,isAvailable:u}),[r,l,d,u]);return(0,n.jsx)(c.Provider,{value:f,children:t})}function d(){return(0,o.useContext)(c)}},24373:(e,t,r)=>{r.d(t,{Kg:()=>i,Lv:()=>a});var n=r(12115),o=r(66966);function i(e){let t=0;for(let r of e)!0===r.isWaitingForResponse&&t++;return t}function a(){let e=(0,o.rC)(),t=null==e?void 0:e.worktrees;return(0,n.useMemo)(()=>{let e=t?t.filter(e=>!0===e.isWaitingForResponse):[];return{count:e.length,worktrees:e}},[t])}r(44308)},32916:(e,t,r)=>{r.d(t,{GB:()=>u,VF:()=>d,pT:()=>f});var n=r(95155),o=r(12115),i=r(7636);let a="updatedAt",s=(0,o.createContext)(null);function l(e,t,r,n){let i=(0,o.useRef)(!0);(0,o.useEffect)(()=>{try{let t=localStorage.getItem(e);t&&n(t)}catch(e){}},[]),(0,o.useEffect)(()=>{if(i.current){i.current=!1;return}try{localStorage.setItem(e,r())}catch(e){}},[t])}function c(e,t){switch(t.type){case"TOGGLE":return{...e,isOpen:!e.isOpen};case"SET_WIDTH":return{...e,width:t.width};case"OPEN_MOBILE_DRAWER":return{...e,isMobileDrawerOpen:!0};case"CLOSE_MOBILE_DRAWER":return{...e,isMobileDrawerOpen:!1};case"SET_SORT_KEY":return{...e,sortKey:t.sortKey};case"SET_SORT_DIRECTION":return{...e,sortDirection:t.sortDirection};case"LOAD_SORT_SETTINGS":return{...e,sortKey:t.sortKey,sortDirection:t.sortDirection};case"SET_VIEW_MODE":return{...e,viewMode:t.viewMode};case"SET_OPEN":return e.isOpen===t.isOpen?e:{...e,isOpen:t.isOpen};case"SET_REPOSITORY_ORDER":return{...e,repositoryOrder:t.repositoryOrder};case"SET_REPO_TAB_BAR_MODE":return{...e,repoTabBarMode:t.repoTabBarMode};default:return e}}function u(e){let{children:t,initialOpen:r=!0,initialWidth:u=224}=e,[d,f]=(0,o.useReducer)(c,{isOpen:r,width:u,isMobileDrawerOpen:!1,sortKey:a,sortDirection:"desc",viewMode:"grouped",repositoryOrder:(0,i.ZD)(),repoTabBarMode:i.PB});l("mcbd-sidebar-sort","".concat(d.sortKey,":").concat(d.sortDirection),()=>JSON.stringify({sortKey:d.sortKey,sortDirection:d.sortDirection}),e=>{try{let t=JSON.parse(e),r=t.sortDirection,n=(0,i.Si)(t.sortKey)?t.sortKey:a;n&&("asc"===r||"desc"===r)&&f({type:"LOAD_SORT_SETTINGS",sortKey:n,sortDirection:r})}catch(e){}}),l("mcbd-sidebar-view-mode",d.viewMode,()=>d.viewMode,e=>{("grouped"===e||"flat"===e)&&f({type:"SET_VIEW_MODE",viewMode:e})}),l("mcbd-sidebar-width",d.width,()=>String(d.width),e=>{let t=Number(e);!isNaN(t)&&t>0&&f({type:"SET_WIDTH",width:288===t?224:t})}),l("mcbd-sidebar-open",d.isOpen,()=>String(d.isOpen),e=>{("true"===e||"false"===e)&&f({type:"SET_OPEN",isOpen:"true"===e})}),l("mcbd-repo-tab-bar-mode",d.repoTabBarMode,()=>d.repoTabBarMode,e=>{(0,i.m3)(e)&&f({type:"SET_REPO_TAB_BAR_MODE",repoTabBarMode:e})});let p=(0,o.useCallback)(()=>{f({type:"TOGGLE"})},[]),g=(0,o.useCallback)(e=>{f({type:"SET_WIDTH",width:e})},[]),m=(0,o.useCallback)(()=>{f({type:"OPEN_MOBILE_DRAWER"})},[]),y=(0,o.useCallback)(()=>{f({type:"CLOSE_MOBILE_DRAWER"})},[]),h=(0,o.useCallback)(e=>{f({type:"SET_SORT_KEY",sortKey:e})},[]),w=(0,o.useCallback)(e=>{f({type:"SET_SORT_DIRECTION",sortDirection:e})},[]),b=(0,o.useCallback)(e=>{f({type:"SET_VIEW_MODE",viewMode:e})},[]),S=(0,o.useCallback)(e=>{f({type:"SET_REPOSITORY_ORDER",repositoryOrder:e}),(0,i.ZC)(e)},[]),v=(0,o.useCallback)(e=>{f({type:"SET_REPO_TAB_BAR_MODE",repoTabBarMode:e})},[]),E=(0,o.useMemo)(()=>({isOpen:d.isOpen,width:d.width,isMobileDrawerOpen:d.isMobileDrawerOpen,sortKey:d.sortKey,sortDirection:d.sortDirection,toggle:p,setWidth:g,openMobileDrawer:m,closeMobileDrawer:y,setSortKey:h,setSortDirection:w,viewMode:d.viewMode,setViewMode:b,repositoryOrder:d.repositoryOrder,setRepositoryOrder:S,repoTabBarMode:d.repoTabBarMode,setRepoTabBarMode:v}),[d.isOpen,d.width,d.isMobileDrawerOpen,d.sortKey,d.sortDirection,d.viewMode,d.repositoryOrder,d.repoTabBarMode,p,g,m,y,h,w,b,S,v]);return(0,n.jsx)(s.Provider,{value:E,children:t})}function d(){let e=(0,o.useContext)(s);if(!e)throw Error("useSidebarContext must be used within a SidebarProvider");return e}function f(){return(0,o.useContext)(s)}},38218:(e,t,r)=>{r.d(t,{D:()=>i,a:()=>a});var n=r(12115);let o=n.useLayoutEffect,i=768;function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{breakpoint:t=i}=e,[r,a]=(0,n.useState)(!1);return o(()=>{let e=window.matchMedia("(max-width: ".concat(t-1,"px)"));a(e.matches);let r=e=>{a(e.matches)};return e.addEventListener("change",r),()=>{e.removeEventListener("change",r)}},[t]),r}},38606:(e,t,r)=>{r.d(t,{A7:()=>c,kA:()=>i,f_:()=>f,dw:()=>u,XK:()=>p});var n=r(54014),o=r(55449);function i(e){return e?e.isWaitingForResponse?"waiting":e.isProcessing?"running":e.isRunning?"ready":"idle":"idle"}let a={start:"nextAction.start",sendMessage:"nextAction.sendMessage",approveReject:"nextAction.approveReject",replyToPrompt:"nextAction.replyToPrompt",checkStalled:"nextAction.checkStalled",running:"nextAction.running"};Object.values(a);let s="exited",l={idle:null,ready:"ready",running:"running",generating:"running",waiting:"waiting"};function c(e){if(!e)return"idle";let t=Object.values(e).filter(e=>void 0!==e);return 0===t.length?"idle":t.includes("waiting")?"waiting":t.includes("running")?"running":t.includes("generating")?"generating":t.includes("ready")?"ready":"idle"}function u(e,t,r){return e?Object.entries(e).map(e=>{var o;let[i,a]=e,s=null!=(o=null==t?void 0:t[i])?o:(0,n.f_)(i,i),l=null==r?void 0:r(i);return"".concat(s,": ").concat(null!=a?a:"idle").concat(l?" (".concat(l,")"):"")}).join(", "):""}let d=["prompt","menu","unclassified"];function f(e){var t,r,n;let o=Object.values(null!=(r=null!=(t=e.sessionStatusByInstance)?t:e.sessionStatusByCli)?r:{}).filter(e=>void 0!==e),i=!1,a=new Set;for(let e of o)e.awaitingInstruction&&(i=!0),e.waitingKind&&a.add(e.waitingKind);return{waitingKind:null!=(n=d.find(e=>a.has(e)))?n:null,awaitingInstruction:i}}function p(e){var t,r,u,d,p,g;let m=i(void 0!==e.isSessionRunning?{isRunning:null!=(t=e.isSessionRunning)&&t,isWaitingForResponse:null!=(r=e.isWaitingForResponse)&&r,isProcessing:null!=(u=e.isProcessing)&&u}:void 0),y=!!e.lastAssistantMessageAt&&(!e.lastViewedAt||new Date(e.lastAssistantMessageAt)>new Date(e.lastViewedAt)),{cliStatus:h,cliStatusLabels:w,exitedInstanceIds:b}=function(e){var t,r,a,l,c,u;let d={},f={},p=[],g=e.sessionStatusByInstance;if(!g){for(let c of null!=(t=e.selectedAgents)?t:(0,o.sA)())d[c]=i(null==(r=e.sessionStatusByCli)?void 0:r[c]),f[c]=(0,n.oo)(c),(null==(l=e.sessionStatusByCli)||null==(a=l[c])?void 0:a.sessionStatusReason)===s&&p.push(c);return{cliStatus:d,cliStatusLabels:f,exitedInstanceIds:p}}let m=e.agentInstances&&e.agentInstances.length>0?e.agentInstances:(0,n.lu)(null!=(c=e.selectedAgents)?c:(0,o.sA)()),y=new Set;for(let e of m)y.add(e.id),d[e.id]=i(g[e.id]),f[e.id]=(0,n.sw)(e),(null==(u=g[e.id])?void 0:u.sessionStatusReason)===s&&p.push(e.id);for(let[e,t]of Object.entries(g)){if(y.has(e))continue;let r=i(t);"idle"!==r&&(d[e]=r,f[e]=function(e){let t=n.XH.find(t=>e.startsWith("".concat(t,"-")));if(t){let r=e.slice(t.length+1);return"".concat((0,n.oo)(t)," ").concat(r)}return(0,n.f_)(e,e)}(e))}return{cliStatus:d,cliStatusLabels:f,exitedInstanceIds:p}}(e),S=c(h),{waitingKind:v,awaitingInstruction:E}=f(e);return{id:e.id,name:e.name,repositoryName:null!=(d=e.repositoryDisplayName)?d:e.repositoryName,status:m,hasUnread:y,lastActivity:e.updatedAt,description:e.description,cliStatus:h,cliStatusLabels:w,exitedInstanceIds:b,worktreePath:e.path,waitingKind:v,awaitingInstruction:E,nextActionKey:(p=l[S],g="waiting"===S?"approval":null,p&&"idle"!==p?"ready"===p?a.sendMessage:"waiting"===p&&"approval"===g?a.approveReject:"waiting"===p?a.replyToPrompt:(0,a.running):a.start)}}},39649:(e,t,r)=>{r.d(t,{$f:()=>d,H8:()=>u});var n=r(95155),o=r(12115),i=r(80344);let a={PROCESSING:2e3,SESSION_RUNNING:5e3,IDLE:1e4},s=(0,o.createContext)(null),l={selectedWorktreeId:null,worktrees:[],repositories:[],selectedWorktreeDetail:null,isLoading:!0,isLoadingDetail:!1,error:null};function c(e,t){switch(t.type){case"SET_WORKTREES":return{...e,worktrees:t.worktrees,isLoading:!1};case"SET_REPOSITORIES":return{...e,repositories:t.repositories};case"SELECT_WORKTREE":{var r;let n=null!=(r=e.worktrees.find(e=>e.id===t.id))?r:null;return{...e,selectedWorktreeId:t.id,selectedWorktreeDetail:null!=n?n:e.selectedWorktreeDetail,isLoadingDetail:null===n}}case"SET_WORKTREE_DETAIL":return{...e,selectedWorktreeDetail:t.detail};case"SET_LOADING":return{...e,isLoading:t.isLoading};case"SET_LOADING_DETAIL":return{...e,isLoadingDetail:t.isLoadingDetail};case"SET_ERROR":return{...e,error:t.error,isLoading:!1};default:return e}}function u(e){let{children:t,externalWorktrees:r,externalRepositories:u,externalIsLoading:d,externalError:f,externalRefresh:p}=e,g=void 0!==r,[m,y]=(0,o.useReducer)(c,l);(0,o.useEffect)(()=>{g&&r&&y({type:"SET_WORKTREES",worktrees:r})},[g,r]),(0,o.useEffect)(()=>{g&&u&&y({type:"SET_REPOSITORIES",repositories:u})},[g,u]);let h=(0,o.useCallback)(async()=>{if(!g){y({type:"SET_LOADING",isLoading:!0}),y({type:"SET_ERROR",error:null});try{var e;let t=await i.y.getAll();y({type:"SET_WORKTREES",worktrees:t.worktrees}),y({type:"SET_REPOSITORIES",repositories:null!=(e=t.repositories)?e:[]})}catch(e){y({type:"SET_ERROR",error:e instanceof Error?e.message:"Failed to fetch worktrees"})}}},[g]),w=(0,o.useCallback)(async e=>{y({type:"SELECT_WORKTREE",id:e}),y({type:"SET_ERROR",error:null});try{i.y.markAsViewed(e).catch(e=>{console.warn("[WorktreeSelectionContext] Failed to mark as viewed:",e)});let t=await i.y.getById(e);y({type:"SET_WORKTREE_DETAIL",detail:t})}catch(e){y({type:"SET_ERROR",error:e instanceof Error?e.message:"Failed to fetch worktree detail"})}finally{y({type:"SET_LOADING_DETAIL",isLoadingDetail:!1})}},[]),b=(0,o.useCallback)(async()=>{if(g&&p)return void await p();await h()},[g,p,h]);(0,o.useEffect)(()=>{g||h()},[h,g]),(0,o.useEffect)(()=>{if(g)return;let e=null,t=!0,r=async()=>{if(t)try{var n,o;let s=await i.y.getAll();y({type:"SET_WORKTREES",worktrees:s.worktrees}),y({type:"SET_REPOSITORIES",repositories:null!=(n=s.repositories)?n:[]});let l=(o=s.worktrees).some(e=>e.isProcessing||e.isWaitingForResponse)?a.PROCESSING:o.some(e=>e.isSessionRunning)?a.SESSION_RUNNING:a.IDLE;t&&(e=setTimeout(r,l))}catch(n){if(n instanceof i.hD&&401===n.status)return;console.error("[WorktreeSelectionContext] Polling error:",n),t&&(e=setTimeout(r,a.SESSION_RUNNING))}};return r(),()=>{t=!1,e&&clearTimeout(e)}},[g]);let S=g&&void 0!==d?d:m.isLoading,v=g&&f?f.message:null,E={selectedWorktreeId:m.selectedWorktreeId,worktrees:m.worktrees,repositories:m.repositories,selectedWorktreeDetail:m.selectedWorktreeDetail,isLoading:S,isLoadingDetail:m.isLoadingDetail,error:null!=v?v:m.error,selectWorktree:w,refreshWorktrees:b};return(0,n.jsx)(s.Provider,{value:E,children:t})}function d(){let e=(0,o.useContext)(s);if(!e)throw Error("useWorktreeSelection must be used within a WorktreeSelectionProvider");return e}},44308:(e,t,r)=>{r.d(t,{$h:()=>d,DR:()=>o,IH:()=>c,Iu:()=>n,Nb:()=>f,SD:()=>i,_d:()=>l,bm:()=>p,ks:()=>s,t7:()=>u,z7:()=>a});let n=7e3,o=["in_review","approval","stalled"],i="in_review",a="filter",s="/review?".concat(a,"=approval");function l(e){return e&&o.includes(e)?e:null}let c=["claude","codex","copilot","antigravity","opencode"],u=1e3,d=5,f=100,p=1e3},52703:(e,t,r)=>{r.d(t,{Oo:()=>o,ST:()=>n,T4:()=>s,dz:()=>a,rz:()=>i,zS:()=>l});let n="client_version",o="version_mismatch",i="chat_turn_progress",a="messages_invalidated",s="model_changed";function l(e){let t;try{t=JSON.parse(e)}catch(e){return null}if(!t||"object"!=typeof t)return null;let r=t;if("broadcast"===r.type){let e=r.data;return e&&"object"==typeof e?"string"!=typeof e.type?null:(void 0===e.worktreeId&&"string"==typeof r.worktreeId&&(e.worktreeId=r.worktreeId),e):null}return"string"==typeof r.type?r:null}},54014:(e,t,r)=>{r.d(t,{Ab:()=>o,NL:()=>y,O6:()=>p,XH:()=>n,f_:()=>d,hR:()=>c,lu:()=>g,n6:()=>s,oo:()=>u,pQ:()=>i,sw:()=>f,vz:()=>m});let n=["claude","codex","gemini","vibe-local","opencode","copilot","antigravity","command-code"],o=10,i=50,a=/^[a-zA-Z0-9_-]+$/;function s(e){return"string"==typeof e&&e.length>0&&e.length<=64&&a.test(e)}let l={claude:"Claude",codex:"Codex",gemini:"Gemini","vibe-local":"Vibe Local",opencode:"OpenCode",copilot:"Copilot",antigravity:"Antigravity","command-code":"Command Code"};function c(e){return n.includes(e)}function u(e){var t;return null!=(t=l[e])?t:e}function d(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Assistant";return e&&c(e)?u(e):t}function f(e){let t=e.alias;return"string"==typeof t&&t.trim().length>0?t:u(e.cliTool)}function p(e,t,r){let n=e.find(e=>e.id===t);return n?f(n):u(r)}function g(e){return e.map((e,t)=>({id:e,cliTool:e,alias:u(e),order:t}))}let m=128,y=2097152},55449:(e,t,r)=>{r.d(t,{IK:()=>l,qD:()=>d,sA:()=>s,zk:()=>o});var n=r(63001);let o="/api/settings/default-agents",i=n.fJ,a=new Set;function s(){return i}function l(e){if(!Array.isArray(e))return!1;let t=(0,n.Lt)(e);if(!t.valid)return!1;let r=t.value;if(r.length===i.length&&r.every((e,t)=>e===i[t]))return!1;for(let e of(i=r,a))e();return!0}let c=null,u=!1;async function d(){return u?i:c||("function"!=typeof fetch?i:c=(async()=>{try{let e=await fetch(o);if(e.ok){let t=await e.json();l(null==t?void 0:t.defaultSelectedAgents),u=!0}}catch(e){}finally{c=null}return i})())}},63001:(e,t,r)=>{r.d(t,{Lt:()=>s,Wj:()=>i,eu:()=>o,fJ:()=>a});var n=r(54014);let o=2,i=6,a=["claude","codex","antigravity"];function s(e){return e.length<o||e.length>i?{valid:!1,error:"Must be ".concat(o,"-").concat(i," elements")}:e.every(e=>"string"==typeof e&&n.XH.includes(e))?new Set(e).size!==e.length?{valid:!1,error:"Duplicate tool IDs not allowed"}:{valid:!0,value:e}:{valid:!1,error:"Invalid CLI tool ID"}}},63365:(e,t,r)=>{r.d(t,{tS:()=>u,xM:()=>d,T3:()=>f});var n=r(95155),o=r(12115),i=r(52703);function a(){return"undefined"!=typeof globalThis&&"function"==typeof globalThis.WebSocket?globalThis.WebSocket:null}let s=()=>{},l={status:"disconnected",connected:!1,subscribe:s,unsubscribe:s,addListener:()=>s},c=(0,o.createContext)(null);function u(e){let{children:t,enabled:r=!0}=e,s=(0,o.useRef)(new Set),l=(0,o.useRef)(new Map),{status:u,subscribe:d,unsubscribe:f}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{onEvent:t,onStatusChange:r,autoReconnect:n=!0,reconnectBaseDelay:s=1e3,reconnectMaxDelay:l=3e4,enabled:c=!0}=e,[u,d]=(0,o.useState)("disconnected"),f=(0,o.useRef)(null),p=(0,o.useRef)(null),g=(0,o.useRef)(0),m=(0,o.useRef)(new Set),y=(0,o.useRef)(!1),h=(0,o.useRef)(t);h.current=t;let w=(0,o.useRef)(r);w.current=r;let b=(0,o.useCallback)(e=>{var t;d(e),null==(t=w.current)||t.call(w,e)},[]),S=(0,o.useCallback)(()=>{null!==p.current&&(clearTimeout(p.current),p.current=null)},[]),v=(0,o.useCallback)(()=>{if(!c)return;let e=a();if(!e||f.current&&(f.current.readyState===e.OPEN||f.current.readyState===e.CONNECTING))return;S(),y.current=!1,b("connecting");let t="https:"===window.location.protocol?"wss:":"ws:",r=new e("".concat(t,"//").concat(window.location.host));f.current=r,r.onopen=()=>{g.current=0,b("connected");try{r.send(JSON.stringify({type:i.ST,version:"0.34.1"}))}catch(e){}m.current.forEach(e=>{try{r.send(JSON.stringify({type:"subscribe",worktreeId:e}))}catch(e){}})},r.onmessage=e=>{var t;let r="string"==typeof e.data?e.data:String(e.data),n=(0,i.zS)(r);n&&(null==(t=h.current)||t.call(h,n))},r.onerror=()=>{b("error")},r.onclose=()=>{var e;if(f.current=null,b("disconnected"),y.current||!n||"undefined"!=typeof document&&"hidden"===document.visibilityState)return;let t=(e=g.current,Math.min(s*2**Math.max(0,e),l));g.current+=1,p.current=setTimeout(()=>{p.current=null,v()},t)}},[c,n,s,l,b,S]),E=(0,o.useCallback)(()=>{if(S(),y.current=!0,f.current){try{f.current.close(1e3,"Client disconnect")}catch(e){}f.current=null}},[S]),T=(0,o.useCallback)(e=>{let t=f.current,r=a();if(t&&r&&t.readyState===r.OPEN)try{t.send(JSON.stringify(e))}catch(e){}},[]),C=(0,o.useCallback)(e=>{m.current.has(e)||(m.current.add(e),T({type:"subscribe",worktreeId:e}))},[T]),k=(0,o.useCallback)(e=>{m.current.has(e)&&(m.current.delete(e),T({type:"unsubscribe",worktreeId:e}))},[T]);return(0,o.useEffect)(()=>{if(c)return v(),()=>{E()}},[c,v,E]),(0,o.useEffect)(()=>{if(!c||"undefined"==typeof document)return;let e=()=>{"visible"===document.visibilityState&&(f.current||(g.current=0,v()))};return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[c,v]),{status:u,subscribe:C,unsubscribe:k,send:T}}({enabled:r,onEvent:(0,o.useCallback)(e=>{s.current.forEach(t=>{try{t(e)}catch(e){}})},[])}),p=(0,o.useCallback)(e=>{var t;let r=l.current,n=null!=(t=r.get(e))?t:0;r.set(e,n+1),0===n&&d(e)},[d]),g=(0,o.useCallback)(e=>{var t;let r=l.current,n=null!=(t=r.get(e))?t:0;n<=1?(r.delete(e),f(e)):r.set(e,n-1)},[f]),m=(0,o.useCallback)(e=>(s.current.add(e),()=>{s.current.delete(e)}),[]),y=(0,o.useMemo)(()=>({status:u,connected:"connected"===u,subscribe:p,unsubscribe:g,addListener:m}),[u,p,g,m]);return(0,n.jsx)(c.Provider,{value:y,children:t})}function d(){var e;return null!=(e=(0,o.useContext)(c))?e:l}function f(e){let{addListener:t}=d(),r=(0,o.useRef)(e);r.current=e,(0,o.useEffect)(()=>t(e=>r.current(e)),[t])}},65380:(e,t,r)=>{r.d(t,{H:()=>s,O:()=>a});var n=r(95155),o=r(12115);let i=(0,o.createContext)(!1);function a(e){let{children:t,authEnabled:r}=e;return(0,n.jsx)(i.Provider,{value:r,children:t})}function s(){return(0,o.useContext)(i)}},66966:(e,t,r)=>{r.d(t,{g7:()=>u,rC:()=>f,Fn:()=>d});var n=r(95155),o=r(12115),i=r(80344),a=r(63365);let s=[2e3,5e3,1e4];var l=r(39649);let c=(0,o.createContext)(null);function u(e){let{children:t}=e,{worktrees:r,repositories:u,isLoading:d,error:f,refresh:p}=function(){let[e,t]=(0,o.useState)([]),[r,n]=(0,o.useState)([]),[l,c]=(0,o.useState)(!0),[u,d]=(0,o.useState)(null),f=(0,o.useRef)(null),p=(0,o.useRef)([]),g=(0,o.useRef)(null),m=(0,o.useRef)(0),y=(0,o.useRef)(null),h=(0,o.useRef)(async()=>{}),w=(0,o.useCallback)(()=>{null!==y.current&&(clearTimeout(y.current),y.current=null)},[]),{connected:b,subscribe:S,unsubscribe:v,addListener:E}=(0,a.xM)(),T=(0,o.useRef)(b);T.current=b;let C=(0,o.useCallback)(async()=>{try{var e,r;d(null);let a=await fetch("/api/worktrees"),s=(0,i.O0)(a);if(s)throw s;if(!a.ok)throw Error("Failed to fetch worktrees: ".concat(a.status));let l=(0,i.xd)(a);if(l)throw l;let c=await a.json(),u=null!=(e=c.worktrees)?e:[],f=null!=(r=c.repositories)?r:[];(0,o.startTransition)(()=>{t(u),n(f)}),p.current=u,m.current=0,w()}catch(r){let e=r instanceof Error?r:Error(String(r));console.error("[useWorktreesCache] Failed to fetch worktrees:",e),d(e);let t=m.current;0===p.current.length&&t<s.length&&(m.current=t+1,w(),y.current=setTimeout(()=>{y.current=null,h.current()},s[t]))}finally{c(!1)}},[w]);h.current=C,(0,o.useEffect)(()=>{C()},[C]),(0,o.useEffect)(()=>w,[w]);let k=(0,o.useCallback)(()=>p.current.some(e=>!0===e.isSessionRunning),[]),O=(0,o.useCallback)(()=>{let e=k();return T.current?e?2e4:6e4:e?5e3:3e4},[k]),R=(0,o.useCallback)(()=>{null!==f.current&&(clearInterval(f.current),f.current=null),g.current=null},[]),x=(0,o.useCallback)(()=>{R();let e=O();g.current=e,f.current=setInterval(()=>{C()},e)},[O,C,R]);(0,o.useEffect)(()=>{let e=()=>{document.hidden?R():(C(),x())},t=setTimeout(()=>{x()},0);return document.addEventListener("visibilitychange",e),()=>{clearTimeout(t),R(),document.removeEventListener("visibilitychange",e)}},[C,x,R]),(0,o.useEffect)(()=>{if(p.current=e,"undefined"!=typeof document&&document.hidden||null===g.current)return;let t=O();g.current!==t&&x()},[e,b,O,x]);let N=e.map(e=>e.id).sort().join(" ");return(0,o.useEffect)(()=>{let e=N.length>0?N.split(" "):[];return e.forEach(e=>S(e)),()=>{e.forEach(e=>v(e))}},[N,S,v]),(0,o.useEffect)(()=>E(e=>{if("session_status_changed"===e.type&&"string"==typeof e.worktreeId){let i=e.worktreeId,a=e.isWaitingForResponse;if("boolean"==typeof a){var r,n;let s=null!=(r=e.instance)?r:null,l=null!=(n=e.waitingKind)?n:null;(0,o.startTransition)(()=>{t(e=>{let t=!1,r=e.map(e=>{if(e.id!==i)return e;let r=function(e,t){var r,n,o;let i,a=null!=(n=t.instance)?n:null,s=a?null==(r=e.sessionStatusByInstance)?void 0:r[a]:void 0,l=e.sessionStatusByInstance;if(a&&s&&s.isWaitingForResponse!==t.waiting&&(l={...e.sessionStatusByInstance,[a]:{...s,isWaitingForResponse:t.waiting,waitingKind:null!=(o=t.waitingKind)?o:null}}),t.waiting)i=!0;else{let e=l?Object.values(l):[];i=e.length>0&&e.some(e=>(null==e?void 0:e.isWaitingForResponse)===!0)}return l===e.sessionStatusByInstance&&i===e.isWaitingForResponse?e:{...e,sessionStatusByInstance:l,isWaitingForResponse:i}}(e,{waiting:a,instance:s,waitingKind:l});return r!==e&&(t=!0),r});return t?r:e})});return}let s=e.isRunning;if("boolean"==typeof s){if((null!=e.cliTool||null!=e.instance)&&!1===s)return void C();(0,o.startTransition)(()=>{t(e=>{let t=!1,r=e.map(e=>e.id===i&&e.isSessionRunning!==s?(t=!0,{...e,isSessionRunning:s}):e);return t?r:e})})}}else("message"===e.type||"message_updated"===e.type)&&C()}),[E,C]),{worktrees:e,repositories:r,isLoading:l,error:u,refresh:C}}(),g=(0,o.useMemo)(()=>({worktrees:r,repositories:u,isLoading:d,error:f,refresh:p}),[r,u,d,f,p]);return(0,n.jsx)(c.Provider,{value:g,children:(0,n.jsx)(l.H8,{externalWorktrees:r,externalRepositories:u,externalIsLoading:d,externalError:f,externalRefresh:p,children:t})})}function d(){let e=(0,o.useContext)(c);if(null===e)throw Error("useWorktreesCacheContext must be used within a WorktreesCacheProvider");return e}function f(){return(0,o.useContext)(c)}},68704:(e,t,r)=>{r.d(t,{Uf:()=>i,d8:()=>a,fM:()=>s,of:()=>c,r5:()=>o,rq:()=>l});var n=r(2317);let o="medium",i=["large","medium","small","xsmall"],a={large:{value:"large",rootFontSizePx:18,factor:1.125,terminalFontSize:16},medium:{value:"medium",rootFontSizePx:16,factor:1,terminalFontSize:14},small:{value:"small",rootFontSizePx:14,factor:.875,terminalFontSize:12},xsmall:{value:"xsmall",rootFontSizePx:12.5,factor:.78,terminalFontSize:11}};function s(e){return"string"==typeof e&&Object.prototype.hasOwnProperty.call(a,e)}function l(e){return a[e].terminalFontSize}function c(){let{value:e,setValue:t,isAvailable:r}=(0,n.V)({key:"mcbd-pc-display-size",defaultValue:o,validate:s});return{size:e,setSize:t,isAvailable:r}}},70628:(e,t,r)=>{r.d(t,{K:()=>s,S:()=>a});var n=r(95155),o=r(12115);let i=(0,o.createContext)({open:!1,setOpen:()=>{},toggle:()=>{}});function a(e){let{children:t}=e,[r,a]=(0,o.useState)(!1),s=(0,o.useCallback)(()=>a(e=>!e),[]),l=(0,o.useMemo)(()=>({open:r,setOpen:a,toggle:s}),[r,s]);return(0,n.jsx)(i.Provider,{value:l,children:t})}function s(){return(0,o.useContext)(i)}},77016:(e,t,r)=>{r.d(t,{W:()=>w,n:()=>b});var n=r(95155),o=r(12115),i=r(18955),a=r(52056),s=r(89559),l=r(65229),c=r(59854),u=r(63365),d=r(52703);let f=0,p=new Set;function g(){for(let e of p)e()}function m(e){return p.add(e),()=>{p.delete(e)}}function y(){return f>0}function h(){return!1}function w(){return(0,o.useSyncExternalStore)(m,y,h)}function b(){let e=(0,i.c)("common"),[t,r]=(0,o.useState)(null),[p,m]=(0,o.useState)(null),y=(0,o.useCallback)(e=>{if(e.type!==d.Oo)return;let{serverVersion:t,clientVersion:n}=e;"string"==typeof t&&"string"==typeof n&&t&&n&&t!==p&&r({serverVersion:t,clientVersion:n})},[p]);(0,u.T3)(y);let h=null!==t;(0,o.useEffect)(()=>{if(h)return f+=1,g(),()=>{f-=1,g()}},[h]);let w=(0,o.useCallback)(()=>{window.location.reload()},[]),b=(0,o.useCallback)(()=>{r(e=>(e&&m(e.serverVersion),null))},[]);return t?(0,n.jsxs)("div",{"data-testid":"version-mismatch-banner",role:"alert","aria-live":"assertive",className:"fixed top-3 left-1/2 -translate-x-1/2 flex items-start gap-3 max-w-[92vw] rounded-lg border border-warning-border bg-warning-subtle px-4 py-3 text-warning-foreground shadow-lg",style:{zIndex:c.M.TOAST},children:[(0,n.jsx)(a.A,{className:"h-5 w-5 shrink-0 mt-0.5","aria-hidden":"true"}),(0,n.jsxs)("div",{className:"flex flex-col gap-0.5 text-sm",children:[(0,n.jsx)("span",{className:"font-semibold",children:e("versionMismatch.title")}),(0,n.jsx)("span",{children:e("versionMismatch.description",{serverVersion:t.serverVersion,clientVersion:t.clientVersion})})]}),(0,n.jsxs)("button",{type:"button","data-testid":"version-mismatch-reload",onClick:w,className:"shrink-0 inline-flex items-center gap-1.5 rounded-md border border-warning-border px-3 py-1.5 text-sm font-medium hover:opacity-80 focus:outline-none focus:ring-2 focus:ring-offset-2",children:[(0,n.jsx)(s.A,{className:"h-4 w-4","aria-hidden":"true"}),e("versionMismatch.reload")]}),(0,n.jsx)("button",{type:"button","data-testid":"version-mismatch-dismiss",onClick:b,"aria-label":e("versionMismatch.dismiss"),className:"shrink-0 hover:opacity-70 focus:outline-none focus:ring-2 focus:ring-offset-2",children:(0,n.jsx)(l.A,{className:"h-4 w-4","aria-hidden":"true"})})]}):null}},80344:(e,t,r)=>{r.d(t,{$T:()=>d,GQ:()=>p,O0:()=>i,Rx:()=>c,gC:()=>u,hD:()=>n,hS:()=>f,xd:()=>a,y:()=>l});class n extends Error{constructor(e,t,r){super(e),this.status=t,this.data=r,this.name="ApiError"}}async function o(e,t,r){if(!(e.headers.get("content-type")||"").includes("application/json"))return t;try{return await e.json()}catch(e){return t}}function i(e){var t;return e.redirected&&(null!=(t=e.url)?t:"").includes("/login")?new n("Authentication required",401):null}function a(e){return e.headers?(e.headers.get("content-type")||"").includes("application/json")?null:new n("Unexpected response format",e.status):null}async function s(e,t){try{let r=new Headers(null==t?void 0:t.headers);r.set("Content-Type","application/json");let s=await fetch(e,{...t,headers:r}),l=i(s);if(l)throw l;if(!s.ok){let e=await o(s,{},"error-body");throw new n(e.error||"HTTP error ".concat(s.status),s.status,e)}let c=a(s);if(c)throw c;return s.json()}catch(e){if(e instanceof n)throw e;throw new n(e instanceof Error?e.message:"Unknown error",0,e)}}let l={getAll:async()=>s("/api/worktrees"),getById:async e=>s("/api/worktrees/".concat(e)),updateDescription:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({description:t})}),updateLink:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({link:t})}),toggleFavorite:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({favorite:t})}),updateStatus:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({status:t})}),updateCliTool:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({cliToolId:t})}),markAsViewed:async e=>s("/api/worktrees/".concat(e,"/viewed"),{method:"PATCH"}),async getMessages(e,t,r,n){let o=new URLSearchParams;return t&&o.append("cliTool",t),r&&o.append("includeArchived","true"),"number"==typeof n&&Number.isFinite(n)&&o.append("limit",String(n)),s("/api/worktrees/".concat(e,"/messages").concat(o.toString()?"?".concat(o.toString()):""))},async sendMessage(e,t,r){var n;let o={content:t};return(null==r?void 0:r.cliToolId)&&(o.cliToolId=r.cliToolId),(null==r?void 0:r.instanceId)&&(o.instanceId=r.instanceId),(null==r?void 0:r.imagePath)&&(o.imagePath=r.imagePath),null===(n=await s("/api/worktrees/".concat(e,"/send"),{method:"POST",body:JSON.stringify(o)}))||"object"!=typeof n||n.timestamp instanceof Date?n:{...n,timestamp:new Date(n.timestamp)}},async uploadImageFile(e,t){let r=Date.now(),n="".concat(r,"-").concat(t.name),i=".commandmate/attachments",a=new FormData;a.append("file",new File([t],n,{type:t.type}));let s=await fetch("/api/worktrees/".concat(e,"/upload/").concat(i),{method:"POST",body:a});if(!s.ok){var l;let e=await o(s,{},"error-body");throw Error((null==e||null==(l=e.error)?void 0:l.message)||"Upload failed (HTTP ".concat(s.status,")"))}return{path:(await o(s,{},"response-body")).path||"".concat(i,"/").concat(n)}},getLogs:async e=>s("/api/worktrees/".concat(e,"/logs")),async getLogFile(e,t,r){let n=(null==r?void 0:r.sanitize)?"?sanitize=true":"";return s("/api/worktrees/".concat(e,"/logs/").concat(t).concat(n))},async killSession(e,t,r){let n=new URLSearchParams;t&&n.set("cliTool",t),r&&n.set("instance",r);let o=n.toString();return s("/api/worktrees/".concat(e,"/kill-session").concat(o?"?".concat(o):""),{method:"POST"})}},c={scan:async e=>s("/api/repositories/scan",{method:"POST",body:JSON.stringify({repositoryPath:e})}),sync:async()=>s("/api/repositories/sync",{method:"POST"}),delete:async e=>s("/api/repositories",{method:"DELETE",body:JSON.stringify({repositoryPath:e})}),async clone(e,t){var r;return s("/api/repositories/clone",{method:"POST",body:JSON.stringify({cloneUrl:e,fork:null!=(r=null==t?void 0:t.fork)&&r})})},getCloneStatus:async e=>s("/api/repositories/clone/".concat(e)),getExcluded:async()=>s("/api/repositories/excluded"),restore:async e=>s("/api/repositories/restore",{method:"PUT",body:JSON.stringify({repositoryPath:e})}),list:async()=>s("/api/repositories"),updateDisplayName:async(e,t)=>s("/api/repositories/".concat(encodeURIComponent(e)),{method:"PUT",body:JSON.stringify({displayName:t})}),updateVisibility:async(e,t)=>s("/api/repositories/".concat(encodeURIComponent(e)),{method:"PUT",body:JSON.stringify({visible:t})}),updateEnabled:async(e,t)=>s("/api/repositories/".concat(encodeURIComponent(e)),{method:"PUT",body:JSON.stringify({enabled:t})}),validatePath:async e=>s("/api/repositories/validate-path",{method:"POST",body:JSON.stringify({repositoryPath:e})})},u={async browse(e){let t=e?"?path=".concat(encodeURIComponent(e)):"";return s("/api/fs/browse".concat(t))},addRecentPath:async e=>s("/api/fs/recent-paths",{method:"POST",body:JSON.stringify({path:e})})},d={getAll:async e=>(await s("/api/worktrees/".concat(e,"/memos"))).memos,create:async(e,t)=>(await s("/api/worktrees/".concat(e,"/memos"),{method:"POST",body:JSON.stringify(t||{})})).memo,update:async(e,t,r)=>(await s("/api/worktrees/".concat(e,"/memos/").concat(t),{method:"PUT",body:JSON.stringify(r)})).memo,delete:async(e,t)=>s("/api/worktrees/".concat(e,"/memos/").concat(t),{method:"DELETE"}),async reorder(e,t){await s("/api/worktrees/".concat(e,"/memos"),{method:"PATCH",body:JSON.stringify({memoIds:t})})}};function f(e){return e instanceof n||e instanceof Error?e.message:"An unknown error occurred"}let p={checkForUpdate:async()=>s("/api/app/update-check",{method:"GET"}),startUpdate:async()=>s("/api/app/update",{method:"POST"}),async ping(){try{return(await fetch("/api/auth/status",{cache:"no-store"})).ok}catch(e){return!1}}}},89275:(e,t,r)=>{r.d(t,{Bo:()=>u,Hq:()=>l});var n=r(95155),o=r(12115),i=r(20063);let a={startTransition:e=>e()},s=(0,o.createContext)(null);function l(){var e;let t=(0,i.useRouter)(),{startTransition:r}=null!=(e=(0,o.useContext)(s))?e:a;return(0,o.useMemo)(()=>({push:e=>r(()=>t.push(e)),replace:e=>r(()=>t.replace(e))}),[t,r])}function c(e){let{onCommit:t}=e,r=(0,i.usePathname)(),n=(0,o.useRef)(!1);return(0,o.useEffect)(()=>{if(!n.current){n.current=!0;return}t()},[r,t]),null}function u(e){let{children:t}=e,r=(0,o.useRef)(null),i=(0,o.useCallback)(()=>{var e;null==(e=r.current)||e.call(r)},[]),a=(0,o.useCallback)(e=>{var t;t=()=>new Promise(t=>{let n=!1,o=()=>{n||(n=!0,t())};r.current=o,e(),window.setTimeout(o,500)}),"undefined"==typeof document||"function"!=typeof document.startViewTransition||"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches?t():document.startViewTransition(t)},[]),l=(0,o.useMemo)(()=>({startTransition:a}),[a]);return(0,n.jsxs)(s.Provider,{value:l,children:[(0,n.jsx)(c,{onCommit:i}),t]})}},92614:(e,t,r)=>{r.d(t,{C:()=>s,E:()=>a});var n=r(95155),o=r(12115);let i=(0,o.createContext)({open:!1,setOpen:()=>{},toggle:()=>{}});function a(e){let{children:t}=e,[r,a]=(0,o.useState)(!1),s=(0,o.useCallback)(()=>a(e=>!e),[]),l=(0,o.useMemo)(()=>({open:r,setOpen:a,toggle:s}),[r,s]);return(0,n.jsx)(i.Provider,{value:l,children:t})}function s(){return(0,o.useContext)(i)}},94442:(e,t,r)=>{r.d(t,{dj:()=>v,tE:()=>S});var n=r(95155),o=r(12115),i=r(47650),a=r(18955),s=r(42529),l=r(78874),c=r(52056),u=r(23327),d=r(65229),f=r(59854),p=r(9900),g=r(9286);function m(e){let{type:t,iconColor:r}=e,o="h-5 w-5 ".concat(r);switch(t){case"success":return(0,n.jsx)(s.A,{className:o,"data-testid":"toast-icon-success"});case"error":return(0,n.jsx)(l.A,{className:o,"data-testid":"toast-icon-error"});case"warning":return(0,n.jsx)(c.A,{className:o,"data-testid":"toast-icon-warning"});default:return(0,n.jsx)(u.A,{className:o,"data-testid":"toast-icon-info"})}}function y(e){let{id:t,message:r,type:i,onClose:s,duration:l=3e3,onClick:c}=e,u=(0,a.c)("common"),f=(0,o.useRef)(null),y=function(e){switch(e){case"success":return{bgColor:"bg-success-subtle",borderColor:"border-success-border",textColor:"text-success-foreground",iconColor:"text-success-foreground"};case"error":return{bgColor:"bg-danger-subtle",borderColor:"border-danger-border",textColor:"text-danger-foreground",iconColor:"text-danger-foreground"};case"warning":return{bgColor:"bg-warning-subtle",borderColor:"border-warning-border",textColor:"text-warning-foreground",iconColor:"text-warning-foreground"};default:return{bgColor:"bg-info-subtle",borderColor:"border-info-border",textColor:"text-info-foreground",iconColor:"text-info-foreground"}}}(i),[h,w]=(0,o.useState)(!0),{shouldRender:b,isExiting:S}=(0,g.O)(h,p.Ys),v=(0,o.useRef)(s);v.current=s,(0,o.useEffect)(()=>{b||v.current(t)},[b,t]),(0,o.useEffect)(()=>(l>0&&(f.current=setTimeout(()=>{w(!1)},l)),()=>{f.current&&clearTimeout(f.current)}),[l]);let E=(0,o.useCallback)(()=>{f.current&&clearTimeout(f.current),w(!1)},[]);return(0,n.jsxs)("div",{"data-testid":"toast-".concat(t),role:"alert",className:"\n ".concat(y.bgColor,"\n ").concat(y.borderColor,"\n ").concat(y.textColor,"\n border rounded-lg shadow-lg p-4 min-w-[300px] max-w-[400px]\n flex items-start gap-3\n ").concat(S?"animate-out fade-out-0 slide-out-to-right-full duration-200 fill-mode-forwards pointer-events-none":"animate-slide-in","\n "),children:[(0,n.jsx)(m,{type:i,iconColor:y.iconColor}),c?(0,n.jsx)("button",{type:"button","data-testid":"toast-action-button",onClick:()=>{c(),E()},className:"flex-1 text-left text-sm font-medium underline-offset-2 hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm",children:r}):(0,n.jsx)("p",{className:"flex-1 text-sm font-medium",children:r}),(0,n.jsx)("button",{"data-testid":"toast-close-button",onClick:E,"aria-label":u("closeNotification"),className:"\n ".concat(y.textColor,"\n hover:opacity-70\n focus:outline-none focus:ring-2 focus:ring-offset-2\n transition-opacity\n "),children:(0,n.jsx)(d.A,{className:"h-4 w-4"})})]})}function h(e){let{toasts:t,onClose:r}=e,[a,s]=(0,o.useState)(!1);(0,o.useEffect)(()=>{s(!0)},[]);let l=(0,n.jsx)("div",{"data-testid":"toast-container","aria-live":"polite",className:"fixed bottom-4 right-4 flex flex-col gap-2",style:{zIndex:f.M.TOAST},children:t.map(e=>(0,n.jsx)(y,{id:e.id,message:e.message,type:e.type,onClose:r,duration:e.duration,onClick:e.onClick},e.id))});return a?(0,i.createPortal)(l,document.body):null}function w(){let[e,t]=(0,o.useState)([]),r=(0,o.useRef)(0),n=(0,o.useCallback)(function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3e3,i=arguments.length>3?arguments[3]:void 0,a="toast-".concat(++r.current,"-").concat(Date.now()),s={id:a,message:e,type:n,duration:o,...(null==i?void 0:i.onClick)?{onClick:i.onClick}:{}};return t(e=>[...e,s]),a},[]),i=(0,o.useCallback)(e=>{t(t=>t.filter(t=>t.id!==e))},[]),a=(0,o.useCallback)(()=>{t([])},[]);return(0,o.useMemo)(()=>({toasts:e,showToast:n,removeToast:i,clearToasts:a}),[e,n,i,a])}let b=(0,o.createContext)(null);function S(e){let{children:t}=e,r=w();return(0,n.jsxs)(b.Provider,{value:r,children:[t,(0,n.jsx)(h,{toasts:r.toasts,onClose:r.removeToast})]})}function v(){let e=(0,o.useContext)(b),t=w();return null!=e?e:t}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8361],{18848:(e,t,r)=>{r.d(t,{Bz:()=>s,kj:()=>a,wx:()=>n}),r(95704);let n=["send","wait","capture","respond"];function a(e){let{binary:t,worktreeId:r,instanceId:n,messagePlaceholder:a}=e,s=null!=e.portPrefix&&3e3!==e.portPrefix?"CM_PORT=".concat(e.portPrefix," "):"",o="--instance ".concat(n),i="".concat(s).concat(t);return{send:"".concat(i," send ").concat(r,' "').concat(a,'" ').concat(o),wait:"".concat(i," wait ").concat(r," ").concat(o," --on-prompt human"),capture:"".concat(i," capture ").concat(r," ").concat(o),respond:"".concat(i," respond ").concat(r,' "').concat("1",'" ').concat(o)}}function s(e){let{binary:t,worktreeId:r,instanceId:n,instanceLabel:a,toolLabel:s}=e,o=null!=e.portPrefix&&3e3!==e.portPrefix?"CM_PORT=".concat(e.portPrefix," "):"",i="".concat(o).concat(t),l="--instance ".concat(n),c="ja"===e.locale?"ja":"en",d="".concat(i," capture ").concat(r," ").concat(l," --pane --tail ").concat(60),u="".concat(i," ask ").concat(r," ").concat(l,' "<request>" --async');if("ja"===c){let e="".concat(i," ask ").concat(r," ").concat(l,' "<依頼文>" --timeout ').concat(1800);return["## 別セッション「".concat(a,"」への委任"),"- 宛先: worktree `".concat(r,"` / instance `").concat(n,"`(").concat(s,")"),"- 依頼: ".concat(e)," - exit 0: 標準出力が返答本文\n - exit 10: 相手が確認待ち。標準出力のprompt JSONを私に報告して止まる(自分で答えない)\n - exit 124: タイムアウト。captureで状況を見て報告","- 待たない依頼: ".concat(u)," - 即座に relay id を返して exit 0。完了時に `[from ...]` 付きで返答が私のコンポーザーに届く"," - 状況確認: ".concat(i," relays / 取り消し: ").concat(i," relays cancel <relay-id>"),"- 進捗確認: ".concat(d),"- 禁止: respondで相手のプロンプトに答える / auto-yesを有効化する"].join("\n")}let m="".concat(i," ask ").concat(r," ").concat(l,' "<request>" --timeout ').concat(1800);return['## Delegating to session "'.concat(a,'"'),"- Target: worktree `".concat(r,"` / instance `").concat(n,"` (").concat(s,")"),"- Ask: ".concat(m)," - exit 0: stdout is the reply body\n - exit 10: they are waiting on a confirmation. Report the prompt JSON on stdout back to me and stop (do not answer it yourself)\n - exit 124: timed out. Look with capture and report what you see","- Ask without waiting: ".concat(u)," - exits 0 with a relay id on stdout; the reply lands in my composer prefixed `[from ...]` when the turn ends"," - Outstanding: ".concat(i," relays / withdraw: ").concat(i," relays cancel <relay-id>"),"- Progress: ".concat(d),"- Do not: answer their prompt with respond / turn auto-yes on"].join("\n")}},26020:(e,t,r)=>{r.d(t,{dI:()=>n,gB:()=>a,vK:()=>s});let n=["en","ja"],a="locale",s={en:"English",ja:"日本語"}},30061:(e,t,r)=>{r.d(t,{nR:()=>o});var n=r(95155),a=r(12115),s=r(47650);function o(e){let{content:t,delay:r=200,className:o,children:i,metadata:l}=e,c=(0,a.useRef)(null),d=(0,a.useRef)(null),u=(0,a.useRef)(null),m=(0,a.useRef)(null),[f,h]=(0,a.useState)(!1),[p,x]=(0,a.useState)({top:-9999,left:-9999}),b=(0,a.useCallback)(()=>{null!==u.current&&(clearTimeout(u.current),u.current=null)},[]),g=(0,a.useCallback)(()=>{let e=c.current;e&&(e.scrollWidth>e.clientWidth||l)&&(b(),u.current=setTimeout(()=>{let t=e.getBoundingClientRect(),r=Math.max(4,window.innerWidth-384-4);m.current={top:t.top,bottom:t.bottom},x({top:t.bottom+4,left:Math.min(t.left,r)}),h(!0),u.current=null},r))},[b,r,l]);(0,a.useLayoutEffect)(()=>{if(!f)return;let e=d.current,t=m.current;if(!e||!t)return;let{height:r}=e.getBoundingClientRect();if(r<=0)return;let n=window.innerHeight;if(t.bottom+4+r+4<=n)return;let a=t.top-4-r,s=a>=4?a:Math.max(4,n-r-4);x(e=>e.top===s?e:{...e,top:s})},[f]);let y=(0,a.useCallback)(()=>{b(),h(!1)},[b]);return(0,a.useEffect)(()=>()=>b(),[b]),(0,n.jsxs)("span",{ref:c,className:o,onMouseEnter:g,onMouseLeave:y,children:[null!=i?i:t,f&&"undefined"!=typeof document&&(0,s.createPortal)((0,n.jsxs)("span",{ref:d,role:"tooltip","aria-hidden":"true",className:"fixed z-[9999] max-w-md px-2 py-1 text-xs font-medium rounded bg-foreground text-background shadow-lg pointer-events-none",style:{top:p.top,left:p.left},children:[(0,n.jsx)("span",{className:"block break-all",children:t}),l&&(0,n.jsx)("span",{className:"mt-0.5 block whitespace-pre-line font-normal text-background/70",children:l})]}),document.body)]})}},34681:(e,t,r)=>{r.d(t,{g:()=>i});var n=r(95155);r(12115);var a=r(18955),s=r(22592),o=r(68704);function i(){let{size:e,setSize:t,isMobile:r}=(0,s.Ps)(),i=(0,a.c)("common");if(r)return null;let l=i("displaySize.ariaLabel");return(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("label",{htmlFor:"pc-display-size",className:"sr-only",children:l}),(0,n.jsx)("select",{id:"pc-display-size","data-testid":"pc-display-size-select","aria-label":l,value:e,onChange:e=>{let r=e.target.value;(0,o.fM)(r)&&t(r)},className:"text-sm bg-transparent text-foreground border border-input rounded-md px-2 py-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:o.Uf.map(e=>(0,n.jsx)("option",{value:e,children:i("displaySize.".concat(e))},e))})]})}},41898:(e,t,r)=>{r.d(t,{m_:()=>l});var n=r(95155),a=r(12115),s=r(47650);function o(e,t,r){return Math.min(Math.max(e,4),Math.max(4,r-t-4))}let i={top:-9999,left:-9999};function l(e){let{content:t,placement:r="right",delay:l=100,children:c,className:d}=e,[u,m]=(0,a.useState)(!1),[f,h]=(0,a.useState)(!1),p=u||f,[x,b]=(0,a.useState)(null),g=(0,a.useRef)(null),y=(0,a.useRef)(null),v=(0,a.useRef)(null),w=(0,a.useCallback)(()=>{null!==v.current&&(clearTimeout(v.current),v.current=null)},[]),j=(0,a.useCallback)(()=>{w(),v.current=setTimeout(()=>{m(!0),v.current=null},l)},[l,w]),k=(0,a.useCallback)(()=>{w(),m(!1)},[w]),N=(0,a.useCallback)(()=>{h(!0)},[]),C=(0,a.useCallback)(()=>{h(!1)},[]),S=(0,a.useCallback)(()=>{w(),m(!1),h(!1)},[w]),E=(0,a.useCallback)(()=>{let e=g.current,t=y.current;if(!e||!t)return;let n=e.getBoundingClientRect(),a=t.getBoundingClientRect();b(function(e,t,r,n){let a,s,i=t.left+t.width/2-r.width/2,l=t.top+t.height/2-r.height/2;switch(e){case"top":a=t.top-r.height-8,s=i;break;case"bottom":a=t.top+t.height+8,s=i;break;case"left":a=l,s=t.left-r.width-8;break;default:a=l,s=t.left+t.width+8}return{top:o(a,r.height,n.height),left:o(s,r.width,n.width)}}(r,{top:n.top,left:n.left,width:n.width,height:n.height},{width:a.width,height:a.height},{width:window.innerWidth,height:window.innerHeight}))},[r]);return(0,a.useLayoutEffect)(()=>p?(E(),window.addEventListener("resize",E),window.addEventListener("scroll",E,!0),()=>{window.removeEventListener("resize",E),window.removeEventListener("scroll",E,!0)}):void b(null),[p,E]),(0,a.useEffect)(()=>{if(!p)return;let e=e=>{"Escape"===e.key&&S()};return window.addEventListener("keydown",e),()=>{window.removeEventListener("keydown",e)}},[p,S]),(0,a.useEffect)(()=>()=>{w()},[w]),(0,n.jsxs)("span",{ref:g,"data-testid":"tooltip-wrapper",className:d?"relative inline-flex ".concat(d):"relative inline-flex",tabIndex:-1,onMouseEnter:j,onMouseLeave:k,onFocus:N,onBlur:C,children:[c,p&&"undefined"!=typeof document&&(0,s.createPortal)((0,n.jsx)("span",{ref:y,role:"tooltip","aria-hidden":"true","data-placement":r,className:"fixed z-40 whitespace-nowrap px-2 py-1 text-xs font-medium rounded bg-foreground text-background shadow-lg pointer-events-none",style:null!=x?x:i,children:t}),document.body)]})}},45195:(e,t,r)=>{r.d(t,{g:()=>s});var n=r(36809),a=r(26020);function s(){return{currentLocale:(0,n.Ym)(),switchLocale:e=>{if(a.dI.includes(e)){let t="https:"===window.location.protocol;document.cookie="".concat(a.gB,"=").concat(e,";path=/;max-age=").concat(31536e3,";SameSite=Lax").concat(t?";Secure":""),localStorage.setItem("locale",e),window.location.reload()}}}}},45573:(e,t,r)=>{r.d(t,{P0:()=>Z,oQ:()=>$,tJ:()=>U,xk:()=>Y,xq:()=>ee,yW:()=>Q});var n=r(95155),a=r(12115),s=r(47650),o=r(20063),i=r(36809),l=r(18955),c=r(5379),d=r(79698),u=r(65993),m=r(37586),f=r(66685),h=r(24533),p=r(61362),x=r(95740),b=r(37772),g=r(59427),y=r(37494),v=r(79451),w=r(89559),j=r(97470),k=r(94684),N=r(76482),C=r(39332),S=r(86651),E=r(18085),M=r(87531),L=r(59854),A=r(92614),R=r(70628),z=r(22592),B=r(66966),P=r(68704),T=r(45195),I=r(80344),K=r(48481),D=r(79651),W=r(94442),O=r(18848),F=r(54014);let _=[{key:"home",href:"/"},{key:"chat",href:"/chat"},{key:"sessions",href:"/sessions"},{key:"repositories",href:"/repositories"},{key:"review",href:"/review"},{key:"skills",href:"/skills"},{key:"more",href:"/more"}],H={home:u.A,chat:m.A,sessions:f.A,repositories:h.A,review:p.A,skills:x.A,more:b.A},V="cm.palette.recents";function G(e){if(!e||"object"!=typeof e)return!1;let{kind:t,id:r}=e;return("nav"===t||"worktree"===t||"action"===t)&&"string"==typeof r}function q(e){return e.isWaitingForResponse?"waiting":e.isProcessing?"running":e.isSessionRunning?"ready":"idle"}function U(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return!!("INPUT"===t||"TEXTAREA"===t||"SELECT"===t||e.isContentEditable||e.closest('[role="log"]'))}let J=(0,M.cn)("flex cursor-pointer items-center gap-2 rounded-md px-2 py-2 text-sm","text-foreground","data-[selected=true]:bg-accent-500/15 data-[selected=true]:text-accent-700","dark:data-[selected=true]:text-accent-300"),X="shrink-0 text-muted-foreground";function Y(){var e;if("undefined"==typeof document)return null;let t=document.querySelector("[data-instance-id]");return(null==t||null==(e=t.getAttribute("data-instance-id"))?void 0:e.trim())||null}function $(e){var t,r;if("undefined"==typeof document)return!1;let n=Array.from(document.querySelectorAll('[data-testid="message-input-textarea"]'));if(0===n.length)return!1;let a=document.activeElement,s=null!=(r=n.find(e=>e===a))?r:n[0],o=s.value,i=""===o.trim()?e:"".concat(o,"\n\n").concat(e),l=null==(t=Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,"value"))?void 0:t.set;return l?l.call(s,i):s.value=i,s.dispatchEvent(new Event("input",{bubbles:!0})),s.focus(),s.setSelectionRange(i.length,i.length),!0}async function Z(e,t,r){try{let[n,a]=await Promise.all([fetch("/api/worktrees/".concat(e,"/cli-reference")),fetch("/api/worktrees/".concat(e,"/resolve-target?instance=").concat(encodeURIComponent(t.id)))]);if(!n.ok||!a.ok)return null;let[s,o]=await Promise.all([n.json(),a.json()]);return(0,O.Bz)({binary:s.binary,worktreeId:s.worktreeId,instanceId:o.instanceId,instanceLabel:t.alias,toolLabel:(0,F.oo)(o.cliToolId),portPrefix:s.portPrefix,locale:r})}catch(e){return null}}let Q={ja:{heading:"委任 (/delegate)",menuItem:"委任方法をコンポーザーに挿入",inserted:"委任方法をコンポーザーに挿入しました",self:"自分自身には委任できません",noComposer:"コンポーザーが見つかりません。worktree 画面を開いてから実行してください",failed:"委任方法を作成できませんでした"},en:{heading:"Delegate (/delegate)",menuItem:"Insert delegation brief into the composer",inserted:"Delegation brief inserted into the composer",self:"That is this session — nothing to delegate to",noComposer:"No composer on screen. Open a worktree screen and try again",failed:"Could not build the delegation brief"}};function ee(){var e,t,r;let{open:u,setOpen:m}=(0,A.C)(),{setOpen:f}=(0,R.K)(),h=(0,o.useRouter)(),p=(0,o.usePathname)(),x=(0,i.Ym)(),b=(0,l.c)("commandPalette"),O=(0,l.c)("common"),{theme:ee,setTheme:et}=(0,c.D)(),{setSize:er,isMobile:en}=(0,z.Ps)(),{currentLocale:ea,switchLocale:es}=(0,T.g)(),eo=(0,B.rC)(),{showToast:ei}=(0,W.dj)(),[el,ec]=(0,a.useState)(!1),[ed,eu]=(0,a.useState)(""),[em,ef]=(0,a.useState)([]),eh=(0,a.useRef)(null),ep=(0,a.useRef)(null),ex=(0,a.useRef)(u);(0,a.useEffect)(()=>{ex.current=u},[u]),(0,a.useEffect)(()=>{ec(!0)},[]),(0,a.useEffect)(()=>{function e(e){if(("k"===e.key||"K"===e.key)&&(e.metaKey||e.ctrlKey)){if(ex.current){e.preventDefault(),e.stopPropagation(),m(!1);return}if(U(e.target))return;e.preventDefault(),m(!0);return}"Escape"===e.key&&ex.current&&(e.preventDefault(),e.stopPropagation(),m(!1))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[m]),(0,a.useEffect)(()=>{var e,t,r,n;u?(ep.current=null!=(t=document.activeElement)?t:null,null==(e=eh.current)||e.focus(),eu(""),ef(function(){try{let e=localStorage.getItem(V);if(!e)return[];let t=JSON.parse(e);if(!Array.isArray(t))return[];return t.filter(G).slice(0,8)}catch(e){return[]}}())):ep.current&&(null==(r=(n=ep.current).focus)||r.call(n),ep.current=null)},[u]);let eb=(0,a.useCallback)((e,t)=>{t&&ef(e=>(function(e,t){let r=e.filter(e=>e.kind!==t.kind||e.id!==t.id),n=[t,...r].slice(0,8);try{localStorage.setItem(V,JSON.stringify(n))}catch(e){}return n})(e,t)),m(!1),e()},[m]),eg=(0,a.useCallback)(async e=>{let t=Q["ja"===x?"ja":"en"];if(function(e){let t=/^\/worktrees\/([^/?#]+)/.exec(null!=e?e:"");return t?decodeURIComponent(t[1]):null}(p)===e.worktree.id&&Y()===e.instance.id)return void ei(t.self,"info");let r=await Z(e.worktree.id,e.instance,x);if(null===r)return void ei(t.failed,"error");let n=$(r);ei(n?t.inserted:t.noComposer,n?"success":"error")},[x,p,ei]),ey=(0,a.useCallback)(async()=>{try{var e;await I.Rx.sync(),await (null==eo||null==(e=eo.refresh)?void 0:e.call(eo)),ei(b("actions.syncSuccess"),"success")}catch(e){ei(b("actions.syncError"),"error")}},[eo,ei,b]),ev="dark"===ee,ew=""===ed.trim(),ej=null!=(e=null==eo?void 0:eo.error)?e:null,ek=null!=(t=null==eo?void 0:eo.isLoading)&&t,eN=ej?[]:null!=(r=null==eo?void 0:eo.worktrees)?r:[],eC=eN.length>0,eS=!ej&&ek&&0===eN.length,eE=!function(e){let t=e.trim().toLowerCase();return""!==t&&(t.startsWith("/")||t.includes("delegate"))}(ed)?[]:function(e){let t=[];for(let n of e){var r;for(let e of(null==(r=n.agentInstances)?void 0:r.length)?n.agentInstances:n.cliToolId?[{id:n.cliToolId,cliTool:n.cliToolId,alias:(0,F.oo)(n.cliToolId),order:0}]:[])t.push({worktree:n,instance:e})}return t}(eN),eM=Q["ja"===x?"ja":"en"],eL=[...eN].sort((e,t)=>{let r=+!!e.isSessionRunning,n=+!!t.isSessionRunning;if(r!==n)return n-r;let a=e.updatedAt?new Date(e.updatedAt).getTime():0;return(t.updatedAt?new Date(t.updatedAt).getTime():0)-a}),eA=ew?eL.slice(0,8):eL,eR=[{id:"theme",label:ev?b("actions.toLight"):b("actions.toDark"),icon:ev?g.A:y.A,run:()=>et(ev?"light":"dark")},...en?[]:P.Uf.map(e=>({id:"displaysize:".concat(e),label:"".concat(b("actions.displaySizePrefix"),": ").concat(O("displaySize.".concat(e))),icon:v.A,run:()=>er(e)})),{id:"sync",label:b("actions.syncRepositories"),icon:w.A,run:()=>{ey()}},{id:"locale",label:b("actions.switchLanguage"),icon:j.A,run:()=>es("ja"===ea?"en":"ja")},{id:"github",label:b("actions.openGitHub"),icon:k.A,run:()=>window.open("https://github.com/kewton/MyCodeBranchDesk","_blank","noopener,noreferrer")},{id:"keyboardShortcuts",label:b("actions.keyboardShortcuts"),icon:N.A,run:()=>f(!0)}],ez=ew?em.map(e=>{if("nav"===e.kind){let t=_.find(t=>t.key===e.id);if(!t)return null;let r=H[t.key],a=O("nav.".concat(t.key));return{id:"nav-".concat(t.key),value:"recent nav ".concat(t.key),node:(0,n.jsxs)(n.Fragment,{children:[r&&(0,n.jsx)(r,{size:16,className:X,"aria-hidden":"true"}),(0,n.jsx)("span",{className:"truncate",children:a})]}),onSelect:()=>eb(()=>h.push(t.href),{kind:"nav",id:t.key})}}if("worktree"===e.kind){let t=eN.find(t=>t.id===e.id);if(!t)return null;let r=t.repositoryDisplayName||t.repositoryName||"",a=t.branch||t.name;return{id:"worktree-".concat(t.id),value:"recent worktree ".concat(t.id),node:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(C.A,{size:16,className:X,"aria-hidden":"true"}),(0,n.jsx)("span",{className:"truncate",children:a}),r&&(0,n.jsx)("span",{className:"ml-auto truncate pl-2 text-xs text-muted-foreground",children:r}),(0,n.jsx)(K.m,{status:q(t),size:"sm",className:r?"ml-2":"ml-auto"})]}),onSelect:()=>eb(()=>h.push("/worktrees/".concat(t.id)),{kind:"worktree",id:t.id})}}let t=eR.find(t=>t.id===e.id);if(!t)return null;let r=t.icon;return{id:"action-".concat(t.id),value:"recent action ".concat(t.id),node:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r,{size:16,className:X,"aria-hidden":"true"}),(0,n.jsx)("span",{className:"truncate",children:t.label})]}),onSelect:()=>eb(t.run,{kind:"action",id:t.id})}}).filter(e=>null!==e):[];return el?(0,s.createPortal)((0,n.jsx)(n.Fragment,{children:u&&(0,n.jsxs)("div",{className:"fixed inset-0 overflow-y-auto",style:{zIndex:L.M.MODAL},"data-testid":"command-palette",children:[(0,n.jsx)("div",{"data-state":"open","aria-hidden":"true",className:"fixed inset-0 bg-black/40 backdrop-blur-sm transition-opacity data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-200",onClick:()=>m(!1)}),(0,n.jsx)("div",{className:"relative flex min-h-full items-start justify-center p-4 pt-[15vh]",children:(0,n.jsx)("div",{"data-state":"open","data-testid":"command-palette-panel",className:(0,M.cn)("relative w-full max-w-lg overflow-hidden rounded-xl bg-surface/95 shadow-2xl ring-1 ring-border backdrop-blur-xl","data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-200"),children:(0,n.jsxs)(d.uB,{label:b("title"),className:(0,M.cn)("flex flex-col","[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:pb-1 [&_[cmdk-group-heading]]:pt-2","[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground"),children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3",children:[(0,n.jsx)(S.A,{size:16,strokeWidth:2,"aria-hidden":"true",className:"shrink-0 text-muted-foreground"}),(0,n.jsx)(d.uB.Input,{ref:eh,value:ed,onValueChange:eu,placeholder:b("placeholder"),"data-testid":"command-palette-input",className:"flex-1 bg-transparent py-3 text-sm text-foreground outline-none placeholder:text-muted-foreground"})]}),(0,n.jsxs)(d.uB.List,{className:"max-h-[min(60vh,360px)] overflow-y-auto p-2",children:[(0,n.jsx)(d.uB.Empty,{"data-testid":"command-palette-empty",className:"py-6 text-center text-sm text-muted-foreground",children:b("empty")}),eS&&(0,n.jsx)(d.uB.Loading,{"data-testid":"command-palette-loading",className:"py-6 text-center text-sm text-muted-foreground",children:b("loading")}),ez.length>0&&(0,n.jsx)(d.uB.Group,{heading:b("groups.recent"),children:ez.map(e=>(0,n.jsx)(d.uB.Item,{value:e.value,onSelect:e.onSelect,className:J,children:e.node},e.id))}),(0,n.jsx)(d.uB.Group,{heading:b("groups.navigation"),children:_.map(e=>{let t=O("nav.".concat(e.key)),r=H[e.key];return(0,n.jsxs)(d.uB.Item,{value:"nav ".concat(t," ").concat(e.href),onSelect:()=>eb(()=>h.push(e.href),{kind:"nav",id:e.key}),className:J,children:[r&&(0,n.jsx)(r,{size:16,className:X,"aria-hidden":"true"}),(0,n.jsx)("span",{className:"truncate",children:t})]},e.key)})}),eC&&(function(e){let t=new Map;for(let r of e){let e=r.repositoryDisplayName||r.repositoryName||"",n=e||"\0unnamed",a=t.get(n);a?a.worktrees.push(r):t.set(n,{key:n,repository:e,worktrees:[r]})}return[...t.values()]})(eA).map(e=>(0,n.jsx)(d.uB.Group,{heading:e.repository||b("groups.worktrees"),children:e.worktrees.map(t=>{let r=t.branch||t.name;return(0,n.jsxs)(d.uB.Item,{value:"worktree ".concat(e.repository," ").concat(r," ").concat(t.name," ").concat(t.id),onSelect:()=>eb(()=>h.push("/worktrees/".concat(t.id)),{kind:"worktree",id:t.id}),className:J,children:[(0,n.jsx)(C.A,{size:16,className:X,"aria-hidden":"true"}),(0,n.jsx)("span",{className:"truncate",children:r}),(0,n.jsx)(K.m,{status:q(t),size:"sm",className:"ml-auto"})]},t.id)})},e.key)),eE.length>0&&(0,n.jsx)(d.uB.Group,{heading:eM.heading,children:eE.map(e=>{let t=e.worktree.branch||e.worktree.name;return(0,n.jsxs)(d.uB.Item,{"data-testid":"palette-delegate-".concat(e.worktree.id,"-").concat(e.instance.id),value:"/delegate ".concat(e.worktree.id," ").concat(e.instance.id," ").concat(e.instance.alias," ").concat(t),onSelect:()=>eb(()=>{eg(e)}),className:J,children:[(0,n.jsx)(E.A,{size:16,className:X,"aria-hidden":"true"}),(0,n.jsx)("span",{className:"truncate",children:e.instance.alias}),(0,n.jsxs)("span",{className:"ml-auto truncate pl-2 text-xs text-muted-foreground",children:[t," / ",e.instance.id]})]},"".concat(e.worktree.id,":").concat(e.instance.id))})}),(0,n.jsx)(d.uB.Group,{heading:b("groups.actions"),children:eR.map(e=>{let t=e.icon;return(0,n.jsxs)(d.uB.Item,{value:"action ".concat(e.id," ").concat(e.label),onSelect:()=>eb(e.run,{kind:"action",id:e.id}),className:J,children:[(0,n.jsx)(t,{size:16,className:X,"aria-hidden":"true"}),(0,n.jsx)("span",{className:"truncate",children:e.label})]},e.id)})})]}),(0,n.jsxs)("div",{className:"flex items-center gap-3 border-t border-border bg-surface-2 px-3 py-2 text-[11px] text-muted-foreground",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1",children:[(0,n.jsx)(D.u,{children:"↑"}),(0,n.jsx)(D.u,{children:"↓"}),b("footer.navigate")]}),(0,n.jsxs)("span",{className:"flex items-center gap-1",children:[(0,n.jsx)(D.u,{children:"↵"}),b("footer.select")]}),(0,n.jsxs)("span",{className:"flex items-center gap-1",children:[(0,n.jsx)(D.u,{children:"esc"}),b("footer.close")]})]})]})})})]})}),document.body):null}},46892:(e,t,r)=>{r.d(t,{PL:()=>a,sb:()=>s});let n={idle:"bg-muted-foreground",ready:"bg-success",spinner:"border-info",waiting:"bg-warning"},a={idle:{className:n.idle,labelKey:"status.idle",type:"dot"},ready:{className:n.ready,labelKey:"status.ready",type:"dot"},running:{className:n.spinner,labelKey:"status.running",type:"spinner"},waiting:{className:n.waiting,labelKey:"status.waiting",type:"dot"},generating:{className:n.spinner,labelKey:"status.generating",type:"spinner"}},s={idle:"detailStatus.idle",ready:"detailStatus.ready",running:"detailStatus.running",waiting:"detailStatus.waiting"}},68361:(e,t,r)=>{r.d(t,{GV:()=>e0});var n=r(95155),a=r(12115),s=r(20063),o=r(52619),i=r.n(o),l=r(89275);let c=(0,a.forwardRef)(function(e,t){let{href:r,onClick:a,target:o,...c}=e,d=(0,s.usePathname)(),u=(0,l.Hq)();return(0,n.jsx)(i(),{ref:t,href:r,target:o,onClick:e=>{var t;null==a||a(e),e.defaultPrevented||0!==(t=e).button||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||void 0!==o&&"_self"!==o||/^([a-z][a-z0-9+.-]*:)?\/\//i.test(r)||/^(mailto:|tel:)/i.test(r)||(e.preventDefault(),r!==d&&u.push(r))},...c})});var d=r(18955),u=r(59847),m=r(86651),f=r(94684),h=r(34681),p=r(32916),x=r(7636);function b(){let e=(0,p.pT)(),t=(0,d.c)("common");if(!e)return null;let{repoTabBarMode:r,setRepoTabBarMode:a}=e;return(0,n.jsxs)("div",{className:"hidden md:flex items-center",children:[(0,n.jsx)("label",{htmlFor:"repo-tab-bar-mode",className:"sr-only",children:t("repoTabBar.settingLabel")}),(0,n.jsx)("select",{id:"repo-tab-bar-mode","data-testid":"repo-tab-bar-mode-select","aria-label":t("repoTabBar.settingLabel"),title:t("repoTabBar.settingLabel"),value:r,onChange:e=>{let t=e.target.value;(0,x.m3)(t)&&a(t)},className:"rounded-md border border-border bg-surface px-2 py-1 text-sm text-muted-foreground transition-colors hover:text-foreground focus:outline-none focus:ring-2 focus:ring-ring",children:x.EN.map(e=>(0,n.jsx)("option",{value:e,children:t("repoTabBar.mode.".concat(e))},e))})]})}var g=r(5379),y=r(59427),v=r(37494);function w(){let{theme:e,setTheme:t}=(0,g.D)(),[r,s]=(0,a.useState)(!1);if((0,a.useEffect)(()=>{s(!0)},[]),!r)return(0,n.jsx)("div",{"data-testid":"theme-toggle-placeholder",className:"w-8 h-8","aria-hidden":"true"});let o="dark"===e;return(0,n.jsx)("button",{"data-testid":"theme-toggle",onClick:()=>t(o?"light":"dark"),className:"p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted transition-colors focus:outline-none focus:ring-2 focus:ring-ring","aria-label":o?"Switch to light mode":"Switch to dark mode",title:o?"Switch to light mode":"Switch to dark mode",children:o?(0,n.jsx)(y.A,{className:"w-5 h-5","data-testid":"theme-icon-sun"}):(0,n.jsx)(v.A,{className:"w-5 h-5","data-testid":"theme-icon-moon"})})}var j=r(63365);function k(){let{status:e}=(0,j.xM)(),t=(0,d.c)("common");if("connected"===e)return null;let r="connecting"===e,a=t(r?"connection.reconnecting":"connection.offline");return(0,n.jsxs)("span",{"data-testid":"connection-status-indicator",role:"status","aria-live":"polite",title:t(r?"connection.reconnectingTooltip":"connection.offlineTooltip"),className:"hidden sm:inline-flex items-center gap-1.5 rounded-full border border-border bg-surface px-2 py-0.5 text-xs text-muted-foreground",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:["w-1.5 h-1.5 rounded-full",r?"bg-warning motion-safe:animate-pulse":"bg-muted-foreground"].join(" ")}),a]})}var N=r(79651),C=r(92614);let S=[{labelKey:"nav.home",href:"/",isActive:e=>"/"===e},{labelKey:"nav.chat",href:"/chat",isActive:e=>e.startsWith("/chat")},{labelKey:"nav.sessions",href:"/sessions",isActive:e=>e.startsWith("/sessions")},{labelKey:"nav.repositoriesShort",href:"/repositories",isActive:e=>e.startsWith("/repositories")},{labelKey:"nav.reviewReport",href:"/review",isActive:e=>e.startsWith("/review")},{labelKey:"nav.more",href:"/more",isActive:e=>e.startsWith("/more")}];function E(e){let{title:t="CommandMate"}=e,r=(0,s.usePathname)(),o=(0,d.c)("commandPalette"),i=(0,d.c)("common"),{setOpen:l}=(0,C.C)(),[p,x]=a.useState(null);return a.useEffect(()=>{x("undefined"!=typeof navigator&&/Mac|iPhone|iPad|iPod/i.test(navigator.platform||"")?"⌘":"Ctrl")},[]),(0,n.jsx)("header",{className:"sticky top-0 z-50 border-b border-border bg-background supports-[backdrop-filter]:bg-background/80 backdrop-blur-md",children:(0,n.jsx)("div",{className:"container-custom",children:(0,n.jsxs)("div",{className:"flex items-center justify-between h-16",children:[(0,n.jsx)("div",{className:"flex items-center space-x-4",children:(0,n.jsxs)(c,{href:"/",className:"flex items-center space-x-2 hover:opacity-80 transition-opacity",children:[(0,n.jsx)("div",{className:"w-8 h-8 bg-accent-600 rounded-lg flex items-center justify-center",children:(0,n.jsx)(u.A,{size:20,strokeWidth:2,className:"text-white","aria-hidden":"true"})}),(0,n.jsx)("h1",{className:"text-xl font-bold text-foreground",children:t})]})}),(0,n.jsxs)("nav",{className:"flex items-center space-x-6",role:"navigation",children:[S.map(e=>{let t=e.isActive(r);return(0,n.jsx)(c,{href:e.href,"aria-current":t?"page":void 0,className:"relative py-1 text-sm font-medium transition-colors after:absolute after:inset-x-0 after:bottom-0 after:h-0.5 after:rounded-full after:bg-accent-600 dark:after:bg-accent-400 after:origin-center motion-safe:after:transition-transform after:duration-200 after:ease-[var(--motion-ease-out)] ".concat(t?"text-accent-600 dark:text-accent-400 after:scale-x-100":"text-muted-foreground hover:text-foreground after:scale-x-0"),children:i(e.labelKey)},e.href)}),(0,n.jsxs)("button",{type:"button","data-testid":"header-command-palette-trigger",onClick:()=>l(!0),"aria-label":o("mobileTrigger"),className:"hidden md:inline-flex items-center gap-2 rounded-md border border-border bg-surface px-2.5 py-1.5 text-sm text-muted-foreground hover:bg-surface-2 transition-colors",children:[(0,n.jsx)(m.A,{size:16,strokeWidth:2,"aria-hidden":"true",className:"shrink-0"}),(0,n.jsx)("span",{children:o("searchAction")}),p&&(0,n.jsxs)("span",{className:"flex items-center gap-0.5",children:[(0,n.jsx)(N.u,{children:p}),(0,n.jsx)(N.u,{children:"K"})]})]}),(0,n.jsx)(k,{}),(0,n.jsx)(h.g,{}),(0,n.jsx)(b,{}),(0,n.jsx)(w,{}),(0,n.jsxs)("a",{href:"https://github.com/kewton/MyCodeBranchDesk",target:"_blank",rel:"noopener noreferrer",className:"text-sm font-medium text-muted-foreground hover:text-foreground transition-colors flex items-center space-x-1",children:[(0,n.jsx)(f.A,{size:20,strokeWidth:2,"aria-hidden":"true"}),(0,n.jsx)("span",{children:"GitHub"})]})]})]})})})}var M=r(38218);let L={showSidebar:!0,showGlobalNav:!0,showLocalNav:!1,autoCollapseSidebar:!1},A=[{prefix:"/worktrees/",config:{showGlobalNav:!1,showLocalNav:!0}},{prefix:"/sessions",config:{autoCollapseSidebar:!0}}];var R=r(22592),z=r(85710),B=r(17787),P=r(49027),T=r(27587),I=r(39649),K=r(47650),D=r(38606),W=r(48481);let O=(0,a.memo)(function(e){let{status:t,label:r,waitingKind:a}=e;return(0,n.jsx)(W.m,{"data-testid":"status-indicator",status:t,label:r,waitingKind:a,size:"lg"})});function F(e,t,r){let n=r-8-t;return n<=8?8:Math.min(Math.max(e,8),n)}function _(e){let{id:t,branch:r,isVisible:s,anchorRef:o,nextActionLabel:i}=e,[l,c]=(0,a.useState)({top:-9999,left:-9999}),d=(0,a.useRef)(null);if((0,a.useEffect)(()=>{var e,t,r;if(!s||!o.current)return;let n=o.current.getBoundingClientRect(),a=null==(e=d.current)?void 0:e.getBoundingClientRect(),i=null!=(t=null==a?void 0:a.width)?t:0,l=null!=(r=null==a?void 0:a.height)?r:0,u=window.innerWidth,m=window.innerHeight,f=n.right+8;if(f+i>u-8){let e=n.left-8-i;e>=8&&(f=e)}c({top:F(n.top,l,m),left:F(f,i,u)})},[s,o]),"undefined"==typeof document||!s)return null;let u=Math.min(384,Math.max(0,window.innerWidth-16));return K.createPortal((0,n.jsxs)("div",{ref:d,id:t,role:"tooltip",className:" fixed z-[9999] px-3 py-2 rounded-md shadow-lg bg-sidebar text-xs text-sidebar-foreground border border-sidebar-border pointer-events-none max-w-sm transition-opacity duration-150 ",style:{top:l.top,left:l.left,maxWidth:u},children:[(0,n.jsx)("p",{className:"font-medium text-sidebar-foreground whitespace-nowrap",children:r.name}),(0,n.jsx)("p",{className:"text-sidebar-muted whitespace-nowrap",children:r.repositoryName}),(0,n.jsxs)("p",{className:"text-sidebar-muted whitespace-nowrap",children:["Status: ",r.status]}),r.worktreePath&&(0,n.jsx)("p",{className:"text-sidebar-muted truncate",children:r.worktreePath}),i&&(0,n.jsxs)("p",{className:"text-sidebar-muted whitespace-nowrap",children:["Next: ",i]}),r.description&&(0,n.jsx)("p",{className:"text-sidebar-muted mt-1 border-t border-sidebar-border pt-1 whitespace-pre-wrap break-words",children:r.description})]}),document.body)}let H=0,V=(0,a.memo)(function(e){let{branch:t,isSelected:r,onClick:s,showRepositoryName:o=!0}=e,i=(0,d.c)("common"),l=(0,d.c)("worktree"),c="tooltip-".concat(t.id),u=(0,a.useRef)(null),[m,f]=(0,a.useState)(!1),h=(0,a.useRef)(null),p=(0,a.useCallback)(()=>{null!==h.current&&(clearTimeout(h.current),h.current=null)},[]);(0,a.useEffect)(()=>()=>p(),[p]);let x=(0,D.A7)(t.cliStatus),b="waiting"===x,g=!0===t.awaitingInstruction,y=t.nextActionKey?l(t.nextActionKey):null,v=(0,a.useMemo)(()=>{var e;return new Set(null!=(e=t.exitedInstanceIds)?e:[])},[t.exitedInstanceIds]),w=(b||g)&&null!==y,j=m&&!r;return(0,a.useEffect)(()=>{r&&f(!1)},[r]),(0,a.useEffect)(()=>{if(!m)return;let e=()=>f(!1);return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[m]),(0,n.jsxs)("button",{ref:u,"data-testid":"branch-list-item",onClick:()=>{p(),H=Date.now()+400,f(!1),s()},onMouseEnter:()=>{p(),Date.now()>=H&&(h.current=setTimeout(()=>{f(!0)},150))},onMouseLeave:()=>{p(),f(!1)},onFocus:e=>{p(),e.target.matches(":focus-visible")&&(h.current=setTimeout(()=>{f(!0)},150))},onBlur:()=>{p(),f(!1)},"aria-current":r?"true":void 0,"aria-describedby":j?c:void 0,"aria-label":o?void 0:"".concat(t.name," - ").concat(t.repositoryName),className:"\n group relative w-full px-4 py-3 flex flex-col gap-1\n hover:bg-sidebar-hover transition-colors\n focus:outline-none focus:ring-2 focus:ring-inset focus:ring-ring\n ".concat(r?"bg-sidebar-hover border-l-2 border-accent-500":"border-l-2 border-transparent","\n "),children:[(0,n.jsxs)("div",{className:"flex items-center gap-3 w-full",children:[t.cliStatus&&Object.keys(t.cliStatus).length>0&&(0,n.jsx)("div",{className:"flex items-center justify-center flex-shrink-0 w-4","aria-label":i("branchItem.cliToolStatus"),children:(0,n.jsx)(O,{status:x,label:(0,D.dw)(t.cliStatus,t.cliStatusLabels,v.size>0?e=>v.has(e)?i("branchItem.agentExited"):null:void 0),waitingKind:t.waitingKind})}),(0,n.jsxs)("div",{className:"flex-1 min-w-0 text-left",children:[(0,n.jsx)("p",{className:"text-sm font-medium text-sidebar-foreground truncate",children:t.name}),o&&(0,n.jsx)("p",{className:"text-xs text-sidebar-muted truncate",children:t.repositoryName}),w&&(0,n.jsx)("p",{"data-testid":"branch-next-action",className:"text-xs font-medium truncate ".concat(b?"text-warning-foreground":"text-success-foreground"),children:y})]}),g&&(0,n.jsx)("span",{"data-testid":"awaiting-instruction-badge",className:"flex-shrink-0 rounded-full bg-success-subtle px-1.5 py-0.5 text-[10px] font-medium leading-4 text-success-foreground",title:l("awaitingInstruction.label"),children:l("awaitingInstruction.badge")}),t.hasUnread&&(0,n.jsx)("span",{"data-testid":"unread-indicator",className:"w-2 h-2 rounded-full bg-accent-500 flex-shrink-0","aria-label":i("branchItem.hasUnread")})]}),t.description&&(0,n.jsx)("div",{"data-testid":"branch-description",className:"pl-6 pr-2 mt-1 text-left",children:(0,n.jsx)("p",{className:"text-xs text-sidebar-muted line-clamp-2",children:t.description})}),(0,n.jsx)(_,{id:c,branch:t,isVisible:j,anchorRef:u,nextActionLabel:y})]})});var G=r(41898);function q(e,t,r){if(t<=0||r<=0)return 0;let n=e+t+8-r;return n>0?-Math.min(n,Math.max(0,e-8)):e<8?8-e:0}let U=(0,a.memo)(function(e){var t;let{sortKey:r,sortDirection:s,onSortKeyChange:o,onSortDirectionChange:i,options:l,defaultDirections:c,compact:u,tooltip:m,iconClassName:f="w-3 h-3"}=e,h=(0,d.c)("common"),[p,x]=(0,a.useState)(!1),b=(0,a.useRef)(null),g=(0,a.useRef)(null),y=(0,a.useRef)({x:0,y:0}),[v,w]=(0,a.useState)({x:0,y:0});(0,a.useEffect)(()=>{function e(e){b.current&&!b.current.contains(e.target)&&x(!1)}if(p)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[p]),(0,a.useEffect)(()=>{function e(e){"Escape"===e.key&&x(!1)}if(p)return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[p]),(0,a.useLayoutEffect)(()=>{let e=e=>{y.current=e,w(t=>t.x===e.x&&t.y===e.y?t:e)};if(!p)return void e({x:0,y:0});let t=g.current;if(!t)return;let r=t.getBoundingClientRect();e({x:q(r.left-y.current.x,r.width,window.innerWidth),y:q(r.top-y.current.y,r.height,window.innerHeight)})},[p]);let j=(0,a.useCallback)(()=>{x(e=>!e)},[]),k=(0,a.useCallback)(e=>{if(e===r)i("asc"===s?"desc":"asc");else{var t;o(e),i(null!=(t=null==c?void 0:c[e])?t:"asc")}x(!1)},[r,s,o,i,c]),N=(0,a.useCallback)(()=>{i("asc"===s?"desc":"asc")},[s,i]),C=(null==(t=l.find(e=>e.key===r))?void 0:t.label)||"Sort",S=(0,n.jsxs)("button",{type:"button",onClick:j,"aria-expanded":p,"aria-haspopup":"listbox","aria-label":"Sort by ".concat(C),className:" flex items-center gap-1 px-2 py-1 rounded text-xs text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring transition-colors ",children:[(0,n.jsx)(J,{className:f}),(0,n.jsx)("span",{className:u?"hidden":"hidden sm:inline",children:C})]});return(0,n.jsxs)("div",{ref:b,className:"relative","data-testid":"sort-selector-base",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[m?(0,n.jsx)(G.m_,{content:m,placement:"bottom",children:S}):S,(0,n.jsx)("button",{type:"button",onClick:N,"aria-label":"asc"===s?"Sort ascending":"Sort descending",className:" p-1 rounded text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring transition-colors ",children:"asc"===s?(0,n.jsx)(X,{className:f}):(0,n.jsx)(Y,{className:f})})]}),p&&(0,n.jsx)("div",{ref:g,role:"listbox","aria-label":h("sort.options"),className:" absolute right-0 top-full mt-1 z-50 min-w-[140px] py-1 rounded-md shadow-lg bg-sidebar border border-sidebar-border ",style:0!==v.x||0!==v.y?{transform:"translate(".concat(v.x,"px, ").concat(v.y,"px)")}:void 0,children:l.map(e=>(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":r===e.key,onClick:()=>k(e.key),className:"\n w-full px-3 py-2 text-left text-sm\n flex items-center justify-between\n hover:bg-sidebar-hover transition-colors\n ".concat(r===e.key?"text-accent-700 dark:text-accent-400":"text-sidebar-muted","\n "),children:[(0,n.jsx)("span",{children:e.label}),r===e.key&&(0,n.jsx)("span",{className:"text-xs",children:"asc"===s?"ASC":"DESC"})]},e.key))})]})});function J(e){let{className:t}=e;return(0,n.jsx)("svg",{className:t,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12"})})}function X(e){let{className:t}=e;return(0,n.jsx)("svg",{className:t,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 15l7-7 7 7"})})}function Y(e){let{className:t}=e;return(0,n.jsx)("svg",{className:t,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})}let $=[{key:"updatedAt",labelKey:"sort.updatedAt"},{key:"repositoryName",labelKey:"sort.repositoryName"},{key:"branchName",labelKey:"sort.branchName"},{key:"status",labelKey:"sort.status"}],Z={updatedAt:"desc"},Q=(0,a.memo)(function(){let{sortKey:e,sortDirection:t,setSortKey:r,setSortDirection:s}=(0,p.VF)(),o=(0,d.c)("common"),i=(0,a.useMemo)(()=>$.map(e=>{let{key:t,labelKey:r}=e;return{key:t,label:o(r)}}),[o]);return(0,n.jsx)(U,{sortKey:e,sortDirection:t,onSortKeyChange:r,onSortDirectionChange:s,options:i,defaultDirections:Z,compact:!0,tooltip:o("tooltips.sort"),iconClassName:"w-4 h-4"})});var ee=r(28019),et=r(30061),er=r(45195),en=r(26020);function ea(){let{currentLocale:e,switchLocale:t}=(0,er.g)(),r=(0,d.c)("common");return(0,n.jsx)("select",{value:e,onChange:e=>t(e.target.value),"data-testid":"locale-switcher","aria-label":r("language"),className:" w-full px-3 py-2 rounded-md bg-sidebar text-sidebar-foreground border border-sidebar-border focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent text-sm ",children:en.dI.map(e=>(0,n.jsx)("option",{value:e,children:en.vK[e]},e))})}var es=r(65380);function eo(){let e=(0,d.c)("auth"),t=(0,es.H)(),[r,s]=(0,a.useState)(!1);if(!t)return null;async function o(){s(!0);try{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"}catch(e){window.location.href="/login"}}return(0,n.jsx)("button",{type:"button",onClick:o,disabled:r,"data-testid":"logout-button",className:" w-full px-3 py-2 text-sm text-left rounded-md text-muted-foreground hover:text-foreground hover:bg-muted focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50 transition-colors ",children:r?"...":e("logout.button")})}var ei=r(94442),el=r(44308),ec=r(24373);function ed(){let e=(0,d.c)("common"),{count:t}=(0,ec.Lv)();return 0===t?null:(0,n.jsxs)(i(),{href:el.ks,"data-testid":"attention-badge","aria-label":e("attention.badgeLabel",{count:t}),className:"mt-2 inline-flex w-full items-center justify-between gap-2 rounded-md border border-warning-border bg-warning-subtle px-2 py-1 text-xs font-medium text-warning-foreground transition-colors hover:brightness-105 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,n.jsx)("span",{className:"min-w-0 truncate",children:e("attention.label")}),(0,n.jsx)("span",{"data-testid":"attention-badge-count",className:"tabular-nums font-semibold",children:t})]})}function eu(e){let{count:t}=e,r=(0,d.c)("common");return 0===t?null:(0,n.jsx)("span",{"data-testid":"attention-badge-bubble",role:"status","aria-label":r("attention.badgeLabel",{count:t}),className:"absolute -top-1.5 -right-2.5 min-w-[1.05rem] rounded-full bg-warning-foreground px-1 text-[0.625rem] font-bold leading-[1.05rem] text-warning-subtle tabular-nums text-center",children:t>99?"99+":t})}var em=r(80344);function ef(e){let{items:t,sortKey:r,sortDirection:n,viewMode:s,filterText:o}=e,i=(0,a.useMemo)(()=>{if(!o)return t;let e=o.toLowerCase();return t.filter(t=>t.name.toLowerCase().includes(e)||t.repositoryName.toLowerCase().includes(e))},[t,o]);return{sortedItems:(0,a.useMemo)(()=>(0,x.Xn)(i,r,n),[i,r,n]),groupedItems:(0,a.useMemo)(()=>"grouped"===s?(0,x._s)(i,r,n):[],[i,r,n,s])}}let eh="mcbd-sidebar-group-collapsed",ep="mcbd-sidebar-scroll-top",ex="w-4 h-4",eb=0,eg=(0,a.memo)(function(){var e,t;let r=(0,l.Hq)(),{worktrees:s,repositories:o,selectedWorktreeId:c,selectWorktree:u,refreshWorktrees:m,isLoading:f,error:h}=(0,I.$f)(),{closeMobileDrawer:b,sortKey:g,sortDirection:y,viewMode:v,setViewMode:j,repositoryOrder:k,setRepositoryOrder:N}=(0,p.VF)(),C=(0,d.c)("common"),[S,E]=(0,a.useState)(""),M=(0,a.useRef)(null),[L,A]=(0,a.useState)(()=>{try{let e=localStorage.getItem(eh);return e?function(e){try{let t=JSON.parse(e);if("object"!=typeof t||null===t||Array.isArray(t))return{};let r={},n=0;for(let[e,a]of Object.entries(t))if(!ew.has(e)&&"boolean"==typeof a){if(++n>100)break;r[e]=a}return r}catch(e){return{}}}(e):{}}catch(e){return{}}}),R=(0,a.useRef)(!1);(0,a.useEffect)(()=>{R.current||(R.current=!0,fetch("/api/sidebar/group-order").then(e=>e.json()).then(e=>{e.success&&Array.isArray(e.order)&&N(e.order)}).catch(()=>{}))},[N]);let T=(0,a.useMemo)(()=>(0,x.UZ)(o),[o]),K=(0,a.useMemo)(()=>(0,x.s6)(s,T),[s,T]),W=(0,a.useMemo)(()=>K.map(D.XK),[K]),O=(0,a.useDeferredValue)(W),F=(0,a.useRef)(null),_=(0,a.useRef)(null),[H,q]=(0,a.useState)(0);(0,a.useEffect)(()=>()=>{null!==_.current&&clearTimeout(_.current)},[]);let U=(0,a.useCallback)(()=>{null!==_.current&&(clearTimeout(_.current),_.current=null),F.current=null},[]),J=(0,a.useMemo)(()=>{let e=F.current;return!e||0===e.items.length||Date.now()>=e.expiresAt?O:e.items},[O,H]),X=(0,a.useRef)(J);(0,a.useLayoutEffect)(()=>{X.current=J;let e=F.current;e&&0===e.items.length&&O.length>0&&U()});let Y=(0,a.useCallback)(()=>{if(0===X.current.length)return;null!==_.current&&(clearTimeout(_.current),_.current=null);let e=F.current;if(e&&Date.now()<e.expiresAt){F.current={...e,expiresAt:1/0};return}F.current={items:X.current,expiresAt:1/0}},[]),$=(0,a.useCallback)(()=>{F.current&&(F.current={...F.current,expiresAt:Date.now()+1e3},null!==_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{U(),q(e=>e+1)},1e3))},[U]),{sortedItems:Z,groupedItems:et}=ef({items:J,sortKey:g,sortDirection:y,viewMode:v,filterText:S}),er=(0,a.useMemo)(()=>"grouped"===v&&et?S.trim()?et:(0,x.BN)(et,k):null,[v,et,k,S]),en="grouped"===v?er:null;(0,a.useEffect)(()=>{try{localStorage.setItem(eh,JSON.stringify(L))}catch(e){}},[L]);let es=(0,a.useCallback)(e=>{A(t=>({...t,[e]:!t[e]}))},[]),ei=(0,a.useCallback)(()=>{var e,t,r=null!=(t=null==(e=M.current)?void 0:e.scrollTop)?t:0;let n=Number.isFinite(r)&&r>0?r:0;eb=n;try{localStorage.setItem(ep,String(n))}catch(e){}},[]),el=Z.length>0||(null!=(e=null==en?void 0:en.length)?e:0)>0;(0,a.useEffect)(()=>{let e=M.current;if(!e)return;let t=window.requestAnimationFrame(()=>{e.scrollTop=function(){try{let e=localStorage.getItem(ep);if(!e)return eb=0,0;let t=Number(e);Number.isFinite(t)&&t>=0&&(eb=t)}catch(e){}return eb}()});return()=>{window.cancelAnimationFrame(t)}},[el,v]);let ec=(0,a.useCallback)(e=>{ei(),u(e),r.push("/worktrees/".concat(e)),b()},[ei,u,r,b]),eu=(0,B.FR)((0,B.MS)(B.AN,{activationConstraint:{distance:8}})),em=(0,a.useCallback)(e=>{let{active:t,over:r}=e;if(!r||t.id===r.id||!en)return;let n=en.map(e=>e.repositoryName),a=n.indexOf(String(t.id)),s=n.indexOf(String(r.id));if(-1===a||-1===s)return;let o=(0,P.be)(n,a,s);N(o),fetch("/api/sidebar/group-order",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({order:o})}).catch(()=>{N(n)})},[en,N]),eg="flat"===v?0===Z.length:(null!=(t=null==en?void 0:en.length)?t:0)===0,ej=f&&0===s.length,eN=!ej&&!!h&&0===s.length,eC=(0,a.useCallback)(()=>{m()},[m]);return(0,n.jsxs)("nav",{"data-testid":"sidebar","aria-label":C("sidebar.branchNavigation"),className:"h-full flex flex-col bg-sidebar text-sidebar-foreground",role:"navigation",children:[(0,n.jsxs)("div",{"data-testid":"sidebar-header",className:"flex-shrink-0 px-4 py-4 border-b border-sidebar-border",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-y-2",children:[(0,n.jsx)("h2",{className:"min-w-0 truncate text-lg font-semibold text-sidebar-foreground",children:C("sidebar.branches")}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1",children:[(0,n.jsx)(ek,{viewMode:v,onToggle:j}),(0,n.jsx)(Q,{}),(0,n.jsx)(eM,{refreshWorktrees:m}),(0,n.jsx)(G.m_,{content:C("tooltips.repositories"),placement:"bottom",children:(0,n.jsx)(i(),{href:"/repositories","aria-label":C("nav.repositories"),className:"p-1 rounded-md text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring transition-colors inline-flex items-center",children:(0,n.jsx)(z.A,{className:ex,"aria-hidden":"true"})})})]})]}),(0,n.jsx)(ed,{})]}),(0,n.jsx)("div",{className:"flex-shrink-0 px-4 py-3 border-b border-sidebar-border",children:(0,n.jsx)(ee.pd,{type:"text",placeholder:C("sidebar.searchBranches"),value:S,onChange:e=>E(e.target.value),className:"bg-background shadow-none"})}),(0,n.jsx)("div",{ref:M,"data-testid":"branch-list",onScroll:ei,onMouseEnter:Y,onMouseLeave:$,className:"flex-1 overflow-y-auto overflow-x-hidden",children:ej?(0,n.jsx)(ey,{label:C("sidebar.loadingBranches")}):eN?(0,n.jsxs)("div",{"data-testid":"branch-list-error",role:"alert",className:"px-4 py-8 text-center text-sidebar-muted",children:[(0,n.jsx)("p",{className:"text-sm",children:C("sidebar.branchesLoadFailed")}),(0,n.jsx)(ee.$n,{type:"button",variant:"secondary",size:"sm",className:"mt-3","data-testid":"branch-list-retry",onClick:eC,children:C("sidebar.retryLoadBranches")})]}):eg?(0,n.jsx)("div",{className:"px-4 py-8 text-center text-sidebar-muted",children:C(S?"sidebar.noBranchesFound":"sidebar.noBranchesAvailable")}):"grouped"===v&&en?(0,n.jsx)(B.Mp,{sensors:eu,collisionDetection:B.fp,onDragEnd:em,children:(0,n.jsx)(P.gB,{items:en.map(e=>e.repositoryName),strategy:P._G,children:en.map(e=>{let t=!L[e.repositoryName]||!!S.trim();return(0,n.jsx)(ev,{group:e,isExpanded:t,selectedWorktreeId:c,onToggle:()=>es(e.repositoryName),onBranchClick:ec,isDragDisabled:!!S.trim()},e.repositoryName)})})}):Z.map(e=>(0,n.jsx)(V,{branch:e,isSelected:e.id===c,onClick:()=>ec(e.id)},e.id))}),(0,n.jsxs)("div",{className:"flex-shrink-0 px-4 py-3 border-t border-sidebar-border space-y-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("div",{className:"flex-1",children:(0,n.jsx)(ea,{})}),(0,n.jsx)(w,{})]}),(0,n.jsx)(eo,{})]})]})}),ey=(0,a.memo)(function(e){let{label:t}=e;return(0,n.jsxs)("div",{"data-testid":"branch-list-skeleton",role:"status","aria-live":"polite",className:"px-4 py-3 space-y-3",children:[(0,n.jsx)("span",{className:"sr-only",children:t}),[0,1,2,3,4].map(e=>(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(ee.EA,{className:"h-2 w-2 rounded-full"}),(0,n.jsx)(ee.EA,{className:"h-3 flex-1"})]},e))]})});function ev(e){let{group:t,isExpanded:r,selectedWorktreeId:a,onToggle:s,onBranchClick:o,isDragDisabled:i}=e,{attributes:l,listeners:c,setNodeRef:d,setActivatorNodeRef:u,transform:m,transition:f,isDragging:h}=(0,P.gl)({id:t.repositoryName,disabled:i}),p={transform:T.Ks.Transform.toString(m),transition:f,opacity:h?.5:1};return(0,n.jsxs)("div",{ref:d,style:p,className:"w-full min-w-0",children:[(0,n.jsx)(ej,{repositoryName:t.repositoryName,branchCount:t.branches.length,isExpanded:r,onClick:s,dragHandleRef:u,dragHandleListeners:i?void 0:c,dragHandleAttributes:i?void 0:l}),r&&t.branches.map(e=>(0,n.jsx)(V,{branch:e,isSelected:e.id===a,onClick:()=>o(e.id),showRepositoryName:!1},e.id))]})}let ew=new Set(["__proto__","constructor","prototype"]);function ej(e){let{repositoryName:t,branchCount:r,isExpanded:a,onClick:s,dragHandleRef:o,dragHandleListeners:i,dragHandleAttributes:l}=e,c=(0,d.c)("common");return(0,n.jsxs)("div",{className:"flex items-center w-full",children:[i&&(0,n.jsx)("div",{ref:o,...i,...l,"aria-label":c("sidebar.dragToReorderGroup"),className:" flex-shrink-0 flex items-center justify-center w-6 h-full pl-2 cursor-grab active:cursor-grabbing text-sidebar-muted hover:text-sidebar-foreground transition-colors ",children:(0,n.jsx)(eS,{})}),(0,n.jsxs)("button",{"data-testid":"group-header",type:"button",onClick:s,"aria-expanded":a,className:" flex-1 min-w-0 flex items-center gap-2 px-2 py-2 text-xs font-semibold text-sidebar-muted uppercase tracking-wider focus:outline-none focus:ring-2 focus:ring-inset focus:ring-ring transition-colors ",children:[(0,n.jsx)(eN,{isExpanded:a}),(0,n.jsx)(ee.nF,{color:(0,x.LV)(t)}),(0,n.jsx)(et.nR,{content:t,className:"flex-1 min-w-0 text-left truncate",children:t}),(0,n.jsx)("span",{className:"text-sidebar-muted font-normal tabular-nums pr-2",children:r})]})]})}function ek(e){let{viewMode:t,onToggle:r}=e,a=(0,d.c)("common");return(0,n.jsx)(G.m_,{content:a("tooltips.viewMode"),placement:"bottom",children:(0,n.jsx)("button",{"data-testid":"view-mode-toggle",type:"button",onClick:()=>{r("grouped"===t?"flat":"grouped")},"aria-label":a("grouped"===t?"sidebar.switchToFlatView":"sidebar.switchToGroupedView"),className:" p-1 rounded-md text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring transition-colors ",children:"grouped"===t?(0,n.jsx)(eC,{className:ex}):(0,n.jsx)(ee.nF,{className:ex})})})}function eN(e){let{isExpanded:t}=e;return(0,n.jsx)("svg",{className:"w-3 h-3 flex-shrink-0 transition-transform ".concat(t?"rotate-90":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"})})}function eC(e){let{className:t="w-3 h-3"}=e;return(0,n.jsx)("svg",{className:t,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 6h16M4 12h16M4 18h16"})})}function eS(){return(0,n.jsxs)("svg",{className:"w-3 h-3",fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,n.jsx)("circle",{cx:"9",cy:"5",r:"1.5"}),(0,n.jsx)("circle",{cx:"15",cy:"5",r:"1.5"}),(0,n.jsx)("circle",{cx:"9",cy:"12",r:"1.5"}),(0,n.jsx)("circle",{cx:"15",cy:"12",r:"1.5"}),(0,n.jsx)("circle",{cx:"9",cy:"19",r:"1.5"}),(0,n.jsx)("circle",{cx:"15",cy:"19",r:"1.5"})]})}function eE(e){let{className:t=""}=e;return(0,n.jsx)("svg",{className:"".concat(ex," ").concat(t),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 4v5h5M20 20v-5h-5M20.49 9A9 9 0 005.64 5.64L4 4m16 16l-1.64-1.64A9 9 0 014.51 15"})})}let eM=(0,a.memo)(function(e){let{refreshWorktrees:t}=e,[r,s]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{showToast:i}=(0,ei.dj)(),l=(0,d.c)("common"),c=(0,a.useCallback)(async()=>{if(!o.current){o.current=!0,s(!0);try{let e=await em.Rx.sync();await t(),i(l("syncSuccess",{count:e.worktreeCount}),"success",3e3)}catch(e){e instanceof em.hD&&401===e.status?i(l("syncAuthError"),"error",5e3):i(l("syncError"),"error",5e3)}finally{o.current=!1,s(!1)}}},[t,i,l]);return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)(G.m_,{content:l("tooltips.sync"),placement:"bottom",children:(0,n.jsx)("button",{type:"button",onClick:c,disabled:r,"aria-label":l("syncButtonLabel"),className:"p-1 rounded-md text-sidebar-muted hover:text-sidebar-foreground hover:bg-sidebar-hover focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:(0,n.jsx)(eE,{className:r?"animate-spin":""})})})})});var eL=r(37772),eA=r(17848),eR=r(46892),ez=r(59854);let eB=/^\/worktrees\/([^/]+)/;function eP(e,t,r){let n=r-8-t;return n<=8?8:Math.min(Math.max(e.left+t>r-8?e.right-t:e.left,8),n)}function eT(e){var t;null==e||null==(t=e.scrollIntoView)||t.call(e,{block:"nearest",inline:"nearest"})}let eI=(0,a.memo)(function(){var e;let t=(0,d.c)("common"),r=(0,s.usePathname)(),o=(0,l.Hq)(),{sortKey:i,sortDirection:c,repositoryOrder:u}=(0,p.VF)(),{worktrees:m,repositories:f,selectedWorktreeId:h,selectWorktree:b}=(0,I.$f)(),{factor:g}=(0,R.Ps)(),y=(0,a.useMemo)(()=>(0,x.UZ)(null!=f?f:[]),[f]),v=(0,a.useMemo)(()=>(0,x.s6)(null!=m?m:[],y),[m,y]),{groupedItems:w}=ef({items:(0,a.useMemo)(()=>v.map(D.XK),[v]),sortKey:i,sortDirection:c,viewMode:"grouped"}),j=(0,a.useMemo)(()=>(0,x.BN)(w,u),[w,u]),k=function(e,t){let r=eB.exec(e);if(!r)return t;try{return decodeURIComponent(r[1])}catch(e){return r[1]}}(r,h),N=(0,a.useMemo)(()=>{var e,t;return null!=(t=null==(e=j.find(e=>e.branches.some(e=>e.id===k)))?void 0:e.repositoryName)?t:null},[j,k]),[C,S]=(0,a.useState)(null),[E,M]=(0,a.useState)(null),[L,A]=(0,a.useState)(!1),z=(0,a.useRef)(null),B=(0,a.useRef)(null),P=(0,a.useRef)(new Map),T=(0,a.useCallback)((e,t)=>{t?P.current.set(e,t):P.current.delete(e)},[]),K=(0,a.useCallback)(()=>{S(null),M(null),A(!1)},[]),W=(0,a.useCallback)(e=>{let t=P.current.get(e);if(!t)return;let r=t.getBoundingClientRect();M({left:r.left,right:r.right,bottom:r.bottom}),S(e),A(!1)},[]),O=(0,a.useCallback)(e=>{if(C===e)return void K();W(e)},[C,K,W]),[F,_]=(0,a.useState)(!1),H=(0,a.useCallback)(()=>{let e=z.current;e&&_(e.scrollWidth>e.clientWidth+1)},[]);(0,a.useLayoutEffect)(()=>{H()},[H,j.length,g]),(0,a.useEffect)(()=>{window.addEventListener("resize",H);let e="undefined"!=typeof ResizeObserver?new ResizeObserver(()=>H()):null;return e&&z.current&&e.observe(z.current),()=>{window.removeEventListener("resize",H),null==e||e.disconnect()}},[H]);let V=null!==C||L;(0,a.useEffect)(()=>{if(!V)return;let e=e=>{var t,r,n;let a=e.target;!(!a||(null==(t=z.current)?void 0:t.contains(a))||(null==(r=B.current)?void 0:r.contains(a)))&&((null==(n=a.closest)?void 0:n.call(a,"[data-repository-tab-panel]"))||K())},t=e=>{if("Escape"!==e.key)return;let t=C?P.current.get(C):B.current;K(),null==t||t.focus()};return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[V,C,K]),(0,a.useEffect)(()=>{K()},[r,K]),(0,a.useLayoutEffect)(()=>{N&&eT(P.current.get(N))},[N,r,F]);let G=(0,a.useCallback)(e=>{K(),b(e),o.push("/worktrees/".concat(e))},[K,b,o]),q=(0,a.useCallback)(e=>{let t=P.current.get(e);eT(t),W(e),null==t||t.focus()},[W]),U=(0,a.useCallback)(e=>{var t;let r=e.currentTarget,n=(t=r.clientWidth,e.ctrlKey||e.shiftKey||Math.abs(e.deltaY)<=Math.abs(e.deltaX)?0:1===e.deltaMode?40*e.deltaY:2===e.deltaMode?e.deltaY*t:e.deltaY);0!==n&&(r.scrollLeft+=n)},[]);if(0===j.length)return null;let J=Math.round(32*g),X=null!=(e=j.find(e=>e.repositoryName===C))?e:null;return(0,n.jsxs)("div",{"data-testid":"repository-tab-bar",className:"relative flex-shrink-0 flex items-stretch border-b border-border bg-surface",style:{height:"".concat(J,"px")},children:[(0,n.jsx)("nav",{ref:z,"data-testid":"repository-tab-strip","aria-label":t("nav.repositories"),onWheel:U,className:"flex min-w-0 flex-1 flex-nowrap items-stretch overflow-x-auto overflow-y-hidden scrollbar-hide",children:j.map(e=>(0,n.jsx)(eK,{group:e,isActive:e.repositoryName===N,isOpen:e.repositoryName===C,registerTab:T,onToggle:O},e.repositoryName))}),F&&(0,n.jsx)("button",{ref:B,type:"button","data-testid":"repository-tab-overflow","aria-haspopup":"menu","aria-expanded":L,"aria-label":t("nav.more"),title:t("nav.more"),onClick:()=>{S(null),M(null),A(e=>!e)},className:"flex-shrink-0 flex items-center border-l border-border px-2 text-muted-foreground transition-colors hover:bg-surface-2 hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",children:(0,n.jsx)(eL.A,{size:16,strokeWidth:2,"aria-hidden":"true"})}),X&&E&&(0,n.jsx)(eD,{group:X,anchor:E,factor:g,activeWorktreeId:k,onBranchClick:G}),L&&(0,n.jsx)(eW,{groups:j,anchorRef:B,activeRepositoryName:N,onSelect:q})]})}),eK=(0,a.memo)(function(e){let{group:t,isActive:r,isOpen:a,registerTab:s,onToggle:o}=e,i=(0,d.c)("common"),l=(0,x.zD)(t.branches),c=(0,x.j)(t.branches),u=i(eR.PL[l].labelKey);return(0,n.jsxs)("button",{ref:e=>s(t.repositoryName,e),type:"button","data-testid":"repository-tab","data-repository":t.repositoryName,"aria-haspopup":"menu","aria-expanded":a,"aria-current":r?"true":void 0,title:"".concat(t.repositoryName," — ").concat(u),onClick:()=>o(t.repositoryName),onKeyDown:e=>{"ArrowDown"===e.key&&(e.preventDefault(),a||o(t.repositoryName))},className:"\n group/tab flex-shrink-0 flex max-w-[14rem] items-center gap-1.5 px-2.5\n border-b-2 text-xs font-medium transition-colors\n focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\n ".concat(r?"border-accent-500 bg-surface-2 text-foreground":"border-transparent text-muted-foreground hover:bg-surface-2 hover:text-foreground","\n "),children:[(0,n.jsx)(eA.n,{className:"h-3.5 w-3.5",color:(0,x.LV)(t.repositoryName)}),(0,n.jsx)("span",{className:"min-w-0 truncate",children:t.repositoryName}),(0,n.jsx)(W.m,{status:l,size:"sm",label:u,"data-testid":"repository-tab-status"}),c>0&&(0,n.jsx)("span",{"data-testid":"repository-tab-attention-count","aria-label":i("attention.badgeLabel",{count:c}),className:"flex-shrink-0 rounded-full bg-warning-subtle px-1.5 text-[10px] font-semibold leading-4 tabular-nums text-warning-foreground",children:c})]})});function eD(e){let{group:t,anchor:r,factor:s,activeWorktreeId:o,onBranchClick:i}=e,l=(0,d.c)("common"),c=(0,a.useRef)(null);if((0,a.useEffect)(()=>{var e;let t=null==(e=c.current)?void 0:e.querySelector("button");null==t||t.focus()},[t.repositoryName]),"undefined"==typeof document)return null;let u=Math.round(300*s),m=window.innerWidth;return K.createPortal((0,n.jsx)("div",{ref:c,"data-repository-tab-panel":"","data-testid":"repository-tab-popover","data-repository":t.repositoryName,role:"menu","aria-label":l("sidebar.branchNavigation"),className:"fixed rounded-md border border-sidebar-border bg-sidebar text-sidebar-foreground shadow-lg",style:{top:r.bottom+4,left:eP(r,u,m),width:u,zIndex:ez.M.POPOVER},children:(0,n.jsx)("div",{"data-testid":"repository-tab-popover-list",className:"overflow-y-auto overflow-x-hidden py-1",style:{maxHeight:"".concat(Math.round(520*s),"px")},children:0===t.branches.length?(0,n.jsx)("p",{className:"px-4 py-6 text-center text-sm text-sidebar-muted",children:l("sidebar.noBranchesAvailable")}):t.branches.map(e=>(0,n.jsx)(V,{branch:e,isSelected:e.id===o,onClick:()=>i(e.id),showRepositoryName:!1},e.id))})}),document.body)}function eW(e){var t;let{groups:r,anchorRef:a,activeRepositoryName:s,onSelect:o}=e,i=(0,d.c)("common"),l=null==(t=a.current)?void 0:t.getBoundingClientRect();if("undefined"==typeof document||!l)return null;let c=window.innerWidth;return K.createPortal((0,n.jsx)("div",{"data-repository-tab-panel":"","data-testid":"repository-tab-overflow-menu",role:"menu","aria-label":i("nav.repositories"),className:"fixed rounded-md border border-sidebar-border bg-sidebar text-sidebar-foreground shadow-lg",style:{top:l.bottom+4,left:eP({left:l.left,right:l.right,bottom:l.bottom},300,c),width:300,maxHeight:"".concat(520,"px"),zIndex:ez.M.POPOVER},children:(0,n.jsx)("div",{className:"overflow-y-auto py-1",style:{maxHeight:"inherit"},children:r.map(e=>{let t=(0,x.zD)(e.branches);return(0,n.jsxs)("button",{type:"button",role:"menuitem","data-testid":"repository-tab-overflow-item","data-repository":e.repositoryName,"aria-current":e.repositoryName===s?"true":void 0,onClick:()=>o(e.repositoryName),className:"flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors hover:bg-sidebar-hover focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",children:[(0,n.jsx)(eA.n,{className:"h-3.5 w-3.5",color:(0,x.LV)(e.repositoryName)}),(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.repositoryName}),(0,n.jsx)(W.m,{status:t,size:"sm",label:i(eR.PL[t].labelKey)}),(0,n.jsx)("span",{className:"tabular-nums text-xs text-sidebar-muted",children:e.branches.length})]},e.repositoryName)})})}),document.body)}var eO=r(65993),eF=r(37586),e_=r(66685),eH=r(61362);let eV=[{labelKey:"nav.home",href:"/",isActive:e=>"/"===e,icon:(0,n.jsx)(eO.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.chat",href:"/chat",isActive:e=>e.startsWith("/chat"),icon:(0,n.jsx)(eF.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.sessions",href:"/sessions",isActive:e=>e.startsWith("/sessions"),icon:(0,n.jsx)(e_.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.review",href:"/review",isActive:e=>e.startsWith("/review"),icon:(0,n.jsx)(eH.A,{size:20,"aria-hidden":"true"}),showsAttentionBadge:!0},{labelKey:"nav.more",href:"/more",isActive:e=>e.startsWith("/more"),icon:(0,n.jsx)(eL.A,{size:20,"aria-hidden":"true"})}];function eG(){let e=(0,s.usePathname)(),{setOpen:t}=(0,C.C)(),r=(0,d.c)("commandPalette"),a=(0,d.c)("common"),{count:o}=(0,ec.Lv)();return(0,n.jsx)("nav",{"data-testid":"global-mobile-nav",className:"fixed bottom-0 left-0 right-0 z-50 border-t border-border bg-background supports-[backdrop-filter]:bg-background/80 backdrop-blur-md pb-safe",children:(0,n.jsxs)("div",{className:"flex items-center justify-around h-14",children:[eV.map(t=>{let r=t.isActive(e),s=!0===t.showsAttentionBadge&&o>0;return(0,n.jsxs)(c,{href:s?el.ks:t.href,className:"flex flex-col items-center justify-center flex-1 h-full text-xs transition-colors ".concat(r?"text-accent-600 dark:text-accent-400":"text-muted-foreground hover:text-foreground"),children:[(0,n.jsxs)("span",{className:"relative inline-flex",children:[t.icon,!0===t.showsAttentionBadge&&(0,n.jsx)(eu,{count:o})]}),(0,n.jsx)("span",{className:"mt-1 whitespace-nowrap",children:a(t.labelKey)})]},t.href)}),(0,n.jsxs)("button",{type:"button","data-testid":"mobile-command-palette-trigger",onClick:()=>t(!0),"aria-label":r("mobileTrigger"),className:"flex flex-col items-center justify-center flex-1 h-full text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,n.jsx)(m.A,{size:20,"aria-hidden":"true"}),(0,n.jsx)("span",{className:"mt-1 whitespace-nowrap",children:r("mobileLabel")})]})]})})}var eq=r(45573),eU=r(94465),eJ=r(70628);let eX=["global","terminal","composer","editor"],eY=[{id:"commandPalette",keys:["MOD","K"],scope:"global"},{id:"keyboardHelp",keys:["?"],scope:"global"},{id:"closeOverlay",keys:["Esc"],scope:"global"},{id:"navigateList",keys:["↑","↓"],scope:"global"},{id:"terminalSearch",keys:["MOD","F"],scope:"terminal"},{id:"toggleSurfaceMode",keys:["MOD","Shift","M"],scope:"terminal"},{id:"sendMessage",keys:["↵"],scope:"composer"},{id:"composerNewline",keys:["Shift","↵"],scope:"composer"},{id:"editorIndent",keys:["Tab"],scope:"editor"},{id:"editorOutdent",keys:["Shift","Tab"],scope:"editor"},{id:"editorTabFocus",keys:["Ctrl","M"],scope:"editor"},{id:"editorSave",keys:["MOD","S"],scope:"editor"},{id:"editorFullscreen",keys:["MOD","Shift","F"],scope:"editor"}];function e$(){let{open:e,setOpen:t}=(0,eJ.K)(),{open:r}=(0,C.C)(),s=(0,d.c)("keyboardShortcuts"),[o,i]=(0,a.useState)(!1);(0,a.useEffect)(()=>i(function(){if("undefined"==typeof navigator)return!1;let e=navigator.platform||navigator.userAgent||"";return/Mac|iPhone|iPad|iPod/.test(e)}()),[]);let l=(0,a.useRef)(e);(0,a.useEffect)(()=>{l.current=e},[e]);let c=(0,a.useRef)(r);(0,a.useEffect)(()=>{c.current=r},[r]),(0,a.useEffect)(()=>{function e(e){"?"!==e.key||e.isComposing||229===e.keyCode||(0,eq.tJ)(e.target)||c.current||l.current||(e.preventDefault(),t(!0))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[t]);let u=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:eY;return eX.map(t=>({scope:t,shortcuts:e.filter(e=>e.scope===t)})).filter(e=>e.shortcuts.length>0)}();return(0,n.jsx)(eU.a,{isOpen:e,onClose:()=>t(!1),title:s("title"),size:"md",children:(0,n.jsx)("div",{"data-testid":"keyboard-shortcuts-overlay",className:"space-y-6",children:u.map(e=>{let{scope:t,shortcuts:r}=e;return(0,n.jsxs)("section",{"data-testid":"keyboard-shortcuts-scope-".concat(t),children:[(0,n.jsx)("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:s("scopes.".concat(t))}),(0,n.jsx)("ul",{className:"divide-y divide-border",children:r.map(e=>(0,n.jsxs)("li",{"data-testid":"keyboard-shortcut-".concat(e.id),className:"flex items-center justify-between gap-4 py-2",children:[(0,n.jsx)("span",{className:"text-sm text-foreground",children:s("shortcuts.".concat(e.id))}),(0,n.jsx)("span",{className:"flex flex-shrink-0 items-center gap-1",children:e.keys.map((e,t)=>(0,n.jsx)(N.u,{children:"MOD"===e?o?"⌘":"Ctrl":e},t))})]},e.id))})]},t)})})})}var eZ=r(77016);let eQ="transform transition-transform duration-300 ease-out",e0=(0,a.memo)(function(e){let{children:t}=e,{isOpen:r,isMobileDrawerOpen:o,closeMobileDrawer:i,width:l,setWidth:c,repoTabBarMode:d}=(0,p.VF)(),u=(0,M.a)(),{showSidebar:m,showGlobalNav:f}=function(){var e=(0,s.usePathname)();for(let t of A)if(e.startsWith(t.prefix))return{...L,...t.config};return{...L}}(),{factor:h}=(0,R.Ps)(),b=Math.round(160*h),g=Math.round(480*h),y=Math.round(Math.min(g,Math.max(b,l*h))),v=(0,x.fs)(null!=d?d:x.PB,r),w=Math.round(32*h)+64*!!f,j=(0,a.useRef)(null),k=(0,a.useRef)(null),N=(0,a.useCallback)(e=>{c(Math.round(e/h))},[c,h]);return u?(0,n.jsxs)("div",{"data-testid":"app-shell",className:"h-screen flex flex-col",children:[o&&(0,n.jsx)("div",{"data-testid":"drawer-overlay",className:"fixed inset-0 bg-black/50 z-40",onClick:i,"aria-hidden":"true"}),m&&(0,n.jsx)("aside",{"data-testid":"sidebar-container",className:"\n fixed left-0 top-0 h-full w-72 z-50\n ".concat(eQ,"\n ").concat(o?"translate-x-0":"-translate-x-full","\n "),role:"complementary",children:(0,n.jsx)(eg,{})}),(0,n.jsx)("main",{className:"flex-1 min-h-0 overflow-hidden ".concat(f?"pb-14":""),role:"main","data-view-transition":"content",children:t}),f&&(0,n.jsx)(eG,{}),(0,n.jsx)(eq.xq,{}),(0,n.jsx)(e$,{}),(0,n.jsx)(eZ.n,{})]}):(0,n.jsxs)("div",{"data-testid":"app-shell",className:"h-screen flex flex-col",children:[v&&(0,n.jsx)(eI,{}),f&&(0,n.jsx)(E,{}),(0,n.jsxs)("div",{className:"flex flex-1 min-h-0",children:[m&&(0,n.jsxs)("aside",{ref:j,"data-testid":"sidebar-container",className:"\n fixed left-0\n ".concat(f?"top-16 h-[calc(100vh-4rem)]":"top-0 h-full","\n border-r border-border\n ").concat(eQ,"\n ").concat(r?"translate-x-0":"-translate-x-full","\n "),style:{width:"".concat(y,"px"),zIndex:ez.M.SIDEBAR,...v?{top:"".concat(w,"px"),height:"calc(100vh - ".concat(w,"px)")}:{}},role:"complementary","aria-hidden":!r,children:[(0,n.jsx)(eg,{}),(0,n.jsx)(e1,{currentWidth:y,minWidth:b,maxWidth:g,sidebarRef:j,mainRef:k,onWidthChange:N})]}),(0,n.jsx)("main",{ref:k,className:"flex-1 min-w-0 h-full overflow-hidden transition-[padding] duration-300 ease-out",style:{paddingLeft:m&&r?"".concat(y,"px"):0},role:"main","data-view-transition":"content",children:t})]}),(0,n.jsx)(eq.xq,{}),(0,n.jsx)(e$,{}),(0,n.jsx)(eZ.n,{})]})});function e1(e){let{currentWidth:t,minWidth:r,maxWidth:a,sidebarRef:s,mainRef:o,onWidthChange:i}=e;return(0,n.jsx)("div",{"data-testid":"sidebar-resize-handle","aria-hidden":"true",onMouseDown:e=>{e.preventDefault();let n=e.clientX,l=t;o.current&&(o.current.style.transition="none");let c=e=>{l=Math.max(r,Math.min(a,t+(e.clientX-n))),s.current&&(s.current.style.width="".concat(l,"px")),o.current&&(o.current.style.paddingLeft="".concat(l,"px"))},d=()=>{document.body.style.cursor="",document.body.style.userSelect="",o.current&&(o.current.style.transition=""),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d),i(l)};document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",c),document.addEventListener("mouseup",d)},className:"absolute top-0 right-0 w-1 h-full cursor-col-resize hover:bg-accent-500/40 transition-colors"})}}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8039],{18955:(e,t,r)=>{"use strict";r.d(t,{c:()=>c});var n=r(36809);function o(e,t){return(...e)=>{try{return t(...e)}catch{throw Error(void 0)}}}let c=o(0,n.c3);o(0,n.kc)},48278:(e,t,r)=>{"use strict";r.d(t,{oz:()=>o,tV:()=>c});let n="cm:chunk-reload-at";function o(e){if(null==e||"object"!=typeof e)return!1;let{name:t,message:r}=e;return"ChunkLoadError"===t||"string"==typeof r&&(r.includes("Loading chunk")||r.includes("Failed to fetch dynamically imported module"))}function c(e){let t=null;try{t=window.sessionStorage;let e="__cm_chunk_probe__";t.setItem(e,"1"),t.removeItem(e)}catch(e){t=null}var r={storage:t,now:Date.now(),reload:()=>window.location.reload()};if(!o(e))return"skipped";let{storage:c,now:l,reload:s}=r;if(!c)return"guarded";let i=Number(c.getItem(n));return Number.isFinite(i)&&i>0&&l-i<3e4?"guarded":(c.setItem(n,String(l)),s(),"reloaded")}},50960:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(95155),o=r(12115),c=r(18955),l=r(48278);function s(e){let{error:t,reset:r}=e,s=(0,c.c)("error"),i=(0,c.c)("common"),a=(0,l.oz)(t);return(0,o.useEffect)(()=>{a&&(0,l.tV)(t)},[a,t]),(0,n.jsxs)("main",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-background px-6 pt-safe pb-safe text-center",children:[(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:s(a?"chunkReload.title":"unexpected.title")}),(0,n.jsx)("p",{className:"mx-auto max-w-sm text-sm text-muted-foreground",children:s(a?"chunkReload.description":"unexpected.description")})]}),(0,n.jsx)("button",{type:"button",onClick:a?()=>window.location.reload():r,className:"rounded-lg bg-accent-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-accent-700",children:i(a?"reload":"retry")})]})}},93350:(e,t,r)=>{Promise.resolve().then(r.bind(r,50960))}},e=>{e.O(0,[6809,8441,1255,7358],()=>e(e.s=93350)),_N_E=e.O()}]);