commandmate 0.10.3 → 0.11.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 (396) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +155 -155
  3. package/.next/app-path-routes-manifest.json +30 -30
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  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/app/update/route.js +3 -3
  9. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update-check/route.js +1 -1
  11. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/assistant/conversation/route.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 +1 -1
  16. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  17. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/messages/route.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  20. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/assistant/session/route.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  23. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/assistant/start/route.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  26. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/assistant/terminal/route.js +3 -2
  28. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  29. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/assistant/tools/route.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  32. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/daily-summary/route.js +1 -1
  37. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  38. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  40. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  41. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/external-apps/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/ollama/models/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  50. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  51. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/repositories/[id]/route.js +1 -47
  54. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  55. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  57. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  58. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  60. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  61. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/clone/route.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/excluded/route.js +1 -47
  69. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  70. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/restore/route.js +1 -1
  72. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  73. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/route.js +1 -1
  75. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/scan/route.js +1 -1
  78. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  79. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/sync/route.js +1 -1
  81. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/todos/route.js +1 -1
  88. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  89. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  92. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  95. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  98. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  101. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  104. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  107. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  109. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  110. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  113. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  116. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  119. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  185. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  191. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +2 -2
  196. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  221. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  223. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  248. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/route.js +1 -1
  268. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/chat/page.js +1 -1
  271. package/.next/server/app/chat/page.js.nft.json +1 -1
  272. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  273. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/more/page.js +2 -2
  276. package/.next/server/app/more/page.js.nft.json +1 -1
  277. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/page.js +1 -1
  280. package/.next/server/app/page.js.nft.json +1 -1
  281. package/.next/server/app/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  283. package/.next/server/app/repositories/page.js +1 -1
  284. package/.next/server/app/repositories/page.js.nft.json +1 -1
  285. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/review/page.js +1 -1
  287. package/.next/server/app/review/page.js.nft.json +1 -1
  288. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  289. package/.next/server/app/sessions/page.js +1 -1
  290. package/.next/server/app/sessions/page.js.nft.json +1 -1
  291. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  292. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  293. package/.next/server/app/worktrees/[id]/page.js +8 -8
  294. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  295. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  296. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app-paths-manifest.json +30 -30
  298. package/.next/server/chunks/1068.js +1 -1
  299. package/.next/server/chunks/1117.js +1 -0
  300. package/.next/server/chunks/2119.js +1 -1
  301. package/.next/server/chunks/233.js +1 -1
  302. package/.next/server/chunks/2404.js +1 -1
  303. package/.next/server/chunks/2445.js +1 -1
  304. package/.next/server/chunks/3270.js +1 -1
  305. package/.next/server/chunks/3480.js +2 -2
  306. package/.next/server/chunks/3543.js +1 -1
  307. package/.next/server/chunks/3945.js +1 -1
  308. package/.next/server/chunks/406.js +47 -0
  309. package/.next/server/chunks/4444.js +1 -1
  310. package/.next/server/chunks/5381.js +1 -47
  311. package/.next/server/chunks/5959.js +2 -2
  312. package/.next/server/chunks/646.js +33 -0
  313. package/.next/server/chunks/8681.js +1 -0
  314. package/.next/server/chunks/8807.js +305 -300
  315. package/.next/server/chunks/9067.js +1 -1
  316. package/.next/server/chunks/9355.js +1 -1
  317. package/.next/server/chunks/9687.js +1 -1
  318. package/.next/server/middleware-manifest.json +5 -5
  319. package/.next/server/pages/500.html +1 -1
  320. package/.next/server/pages-manifest.json +1 -1
  321. package/.next/server/server-reference-manifest.json +1 -1
  322. package/.next/static/chunks/4560-2bf9cb6504cc4425.js +1 -0
  323. package/.next/static/chunks/7347-7ee39e14be89e508.js +1 -0
  324. package/.next/static/chunks/app/chat/page-5d20240f98c07cee.js +1 -0
  325. package/.next/static/chunks/app/layout-fe5857360dfba2b9.js +1 -0
  326. package/.next/static/chunks/app/more/page-af1d2af13ea901d2.js +1 -0
  327. package/.next/static/chunks/app/page-3bbe737ec910d1fb.js +1 -0
  328. package/.next/static/chunks/app/repositories/page-ace9134ac165a6de.js +1 -0
  329. package/.next/static/chunks/app/review/page-331b80f4f58582bc.js +1 -0
  330. package/.next/static/chunks/app/sessions/page-d694149a7e8649b6.js +1 -0
  331. package/.next/static/chunks/app/worktrees/[id]/page-1c311aaa0950db1e.js +1 -0
  332. package/.next/static/css/d7e2e8d1b8d69d36.css +1 -0
  333. package/.next/trace +10 -10
  334. package/dist/cli/commands/quickstart.d.ts.map +1 -1
  335. package/dist/cli/commands/quickstart.js +27 -0
  336. package/dist/cli/commands/status.d.ts.map +1 -1
  337. package/dist/cli/commands/status.js +19 -0
  338. package/dist/cli/commands/update.d.ts.map +1 -1
  339. package/dist/cli/commands/update.js +178 -1
  340. package/dist/cli/program.d.ts.map +1 -1
  341. package/dist/cli/program.js +6 -0
  342. package/dist/cli/types/index.d.ts +13 -0
  343. package/dist/cli/types/index.d.ts.map +1 -1
  344. package/dist/cli/utils/agent-instances.d.ts +1 -1
  345. package/dist/cli/utils/agent-instances.d.ts.map +1 -1
  346. package/dist/cli/utils/agent-instances.js +8 -1
  347. package/dist/cli/utils/api-client.d.ts +36 -0
  348. package/dist/cli/utils/api-client.d.ts.map +1 -1
  349. package/dist/cli/utils/api-client.js +82 -0
  350. package/dist/cli/utils/daemon.d.ts.map +1 -1
  351. package/dist/cli/utils/daemon.js +44 -9
  352. package/dist/cli/utils/npx-runner.d.ts +88 -0
  353. package/dist/cli/utils/npx-runner.d.ts.map +1 -0
  354. package/dist/cli/utils/npx-runner.js +165 -0
  355. package/dist/cli/utils/package-info.d.ts +17 -0
  356. package/dist/cli/utils/package-info.d.ts.map +1 -0
  357. package/dist/cli/utils/package-info.js +31 -0
  358. package/dist/cli/utils/pid-manager.d.ts +65 -9
  359. package/dist/cli/utils/pid-manager.d.ts.map +1 -1
  360. package/dist/cli/utils/pid-manager.js +81 -21
  361. package/dist/cli/utils/process-inspector.d.ts +27 -0
  362. package/dist/cli/utils/process-inspector.d.ts.map +1 -0
  363. package/dist/cli/utils/process-inspector.js +37 -0
  364. package/dist/lib/app-update/update-lock.d.ts +39 -0
  365. package/dist/lib/app-update/update-lock.d.ts.map +1 -0
  366. package/dist/lib/app-update/update-lock.js +116 -0
  367. package/dist/server/src/config/github-links.js +22 -0
  368. package/dist/server/src/lib/db/db-instance.js +22 -3
  369. package/dist/server/src/lib/db/db-repository.js +107 -19
  370. package/dist/server/src/lib/db/db.js +3 -2
  371. package/dist/server/src/lib/db/memo-db.js +32 -1
  372. package/dist/server/src/lib/db/migrations/index.js +2 -0
  373. package/dist/server/src/lib/db/migrations/runner.js +11 -1
  374. package/dist/server/src/lib/db/migrations/v43-remove-cm-root-dir-ghost-repository.js +126 -0
  375. package/dist/server/src/lib/git/worktrees.js +90 -0
  376. package/dist/server/src/lib/job-executor.js +8 -2
  377. package/dist/server/src/lib/realtime/types.js +76 -0
  378. package/dist/server/src/lib/schedule-manager.js +9 -1
  379. package/dist/server/src/lib/version-checker.js +297 -0
  380. package/dist/server/src/lib/ws-server.js +37 -0
  381. package/package.json +1 -1
  382. package/.next/server/chunks/2464.js +0 -33
  383. package/.next/server/chunks/6791.js +0 -47
  384. package/.next/static/chunks/7347-4a031aecf4664a6d.js +0 -1
  385. package/.next/static/chunks/8954-ce15ee4d0423f1b1.js +0 -1
  386. package/.next/static/chunks/app/chat/page-dee86bdf87516e40.js +0 -1
  387. package/.next/static/chunks/app/layout-d02f4691a4eff86b.js +0 -1
  388. package/.next/static/chunks/app/more/page-39ec8b5f27cf52e7.js +0 -1
  389. package/.next/static/chunks/app/page-ebf1db9826b4065d.js +0 -1
  390. package/.next/static/chunks/app/repositories/page-2be54cae5fcc1f7a.js +0 -1
  391. package/.next/static/chunks/app/review/page-ac4efe6857a0f3bf.js +0 -1
  392. package/.next/static/chunks/app/sessions/page-dc545a3d45374187.js +0 -1
  393. package/.next/static/chunks/app/worktrees/[id]/page-9eb2f37809919531.js +0 -1
  394. package/.next/static/css/eabd34bf2ab147a4.css +0 -1
  395. /package/.next/static/{Ndx_NzkoP54cD0UCmjUlu → 8yp8SRJ9h3Uj75SpHLYpl}/_buildManifest.js +0 -0
  396. /package/.next/static/{Ndx_NzkoP54cD0UCmjUlu → 8yp8SRJ9h3Uj75SpHLYpl}/_ssgManifest.js +0 -0
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ /**
3
+ * Version Checker Module
4
+ * Issue #257: Version update notification feature
5
+ *
6
+ * Checks GitHub Releases API for newer versions of CommandMate.
7
+ * Uses globalThis cache pattern (auto-yes-manager.ts reference) for
8
+ * hot-reload persistence.
9
+ *
10
+ * Security:
11
+ * - [SEC-001] GITHUB_API_URL is hardcoded (SSRF prevention, OWASP A10:2021)
12
+ * - [SEC-SF-001] Response validation (validateReleaseUrl, sanitizeReleaseName)
13
+ * - [SEC-SF-002] User-Agent header for GitHub API compliance (OWASP A07:2021)
14
+ *
15
+ * @module version-checker
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.GITHUB_RELEASE_URL_PREFIX = exports.GITHUB_API_URL = void 0;
19
+ exports.isNewerVersion = isNewerVersion;
20
+ exports.getClientVersion = getClientVersion;
21
+ exports.getServerVersion = getServerVersion;
22
+ exports.getCurrentVersion = getCurrentVersion;
23
+ exports.validateReleaseUrl = validateReleaseUrl;
24
+ exports.sanitizeReleaseName = sanitizeReleaseName;
25
+ exports.checkForUpdate = checkForUpdate;
26
+ exports.resetCacheForTesting = resetCacheForTesting;
27
+ const fs_1 = require("fs");
28
+ const path_1 = require("path");
29
+ // =============================================================================
30
+ // Constants
31
+ // =============================================================================
32
+ /**
33
+ * [SEC-001] SSRF Prevention: GitHub API URL is a hardcoded constant.
34
+ * This value MUST NOT be derived from environment variables, config files,
35
+ * or user input. Changing this value requires security review.
36
+ * OWASP A10:2021 - Server-Side Request Forgery
37
+ */
38
+ exports.GITHUB_API_URL = 'https://api.github.com/repos/Kewton/CommandMate/releases/latest';
39
+ /**
40
+ * [SEC-SF-001] GitHub Releases URL allowed prefix for validation.
41
+ * Used to verify html_url from API responses.
42
+ * Imported from github-links.ts (Issue #264 DRY) and re-exported for backward compatibility.
43
+ */
44
+ const github_links_1 = require("../config/github-links");
45
+ Object.defineProperty(exports, "GITHUB_RELEASE_URL_PREFIX", { enumerable: true, get: function () { return github_links_1.GITHUB_RELEASE_URL_PREFIX; } });
46
+ /** Semver pattern: optional v-prefix followed by major.minor.patch */
47
+ const SEMVER_PATTERN = /^v?\d+\.\d+\.\d+$/;
48
+ /** [SEC-SF-001] Release name allowed characters pattern */
49
+ const RELEASE_NAME_PATTERN = /^[a-zA-Z0-9.\-\s_v]+$/;
50
+ /** Maximum allowed release name length */
51
+ const RELEASE_NAME_MAX_LENGTH = 128;
52
+ /** Cache TTL: 1 hour (matches GitHub API unauthenticated rate limit of 60 req/h) */
53
+ const CACHE_TTL_MS = 60 * 60 * 1000;
54
+ /** Fetch timeout: 5 seconds */
55
+ const FETCH_TIMEOUT_MS = 5000;
56
+ /**
57
+ * npm package name. [Issue #1359] Used to verify that a package.json resolved at
58
+ * runtime is CommandMate's own manifest and not an unrelated project's — a guard
59
+ * against an unexpected process.cwd() (e.g. a dev run started from a user's
60
+ * project directory) leaking a foreign version.
61
+ */
62
+ const PACKAGE_NAME = 'commandmate';
63
+ const cache = globalThis.__versionCheckCache ??
64
+ (globalThis.__versionCheckCache = {
65
+ result: null,
66
+ fetchedAt: 0,
67
+ rateLimitResetAt: null,
68
+ });
69
+ // =============================================================================
70
+ // Public Functions
71
+ // =============================================================================
72
+ /**
73
+ * Compare two semver version strings.
74
+ * [SF-003] Includes built-in validation - returns false for invalid formats.
75
+ *
76
+ * @param current - Current version (e.g., "0.2.3", "v0.2.3")
77
+ * @param latest - Latest version (e.g., "0.3.0", "v0.3.0")
78
+ * @returns true if latest is newer than current, false for invalid formats
79
+ */
80
+ function isNewerVersion(current, latest) {
81
+ // [SF-003] Defensive validation: reject invalid formats immediately
82
+ if (!SEMVER_PATTERN.test(current) || !SEMVER_PATTERN.test(latest)) {
83
+ return false;
84
+ }
85
+ const parse = (v) => v.replace(/^v/, '').split('.').map(Number);
86
+ const [cMajor, cMinor, cPatch] = parse(current);
87
+ const [lMajor, lMinor, lPatch] = parse(latest);
88
+ if (lMajor !== cMajor)
89
+ return lMajor > cMajor;
90
+ if (lMinor !== cMinor)
91
+ return lMinor > cMinor;
92
+ return lPatch > cPatch;
93
+ }
94
+ /**
95
+ * Read CommandMate's version from the installed package.json at runtime.
96
+ *
97
+ * [Issue #1359] `NEXT_PUBLIC_APP_VERSION` is baked into the bundle at
98
+ * `next build` time, so it reflects "the version present when the client bundle
99
+ * was last built", not the version of the server code actually running. Reading
100
+ * package.json on each call reflects the real installed version, which is what
101
+ * the update-check API must report as `currentVersion`.
102
+ *
103
+ * The server is spawned with cwd = package root (start.ts), so
104
+ * `process.cwd()/package.json` is the installed manifest. We verify
105
+ * `name === 'commandmate'` so an unexpected cwd can never leak an unrelated
106
+ * project's version; on any mismatch or read failure the caller falls back to
107
+ * the baked value.
108
+ *
109
+ * @returns Runtime version string, or null when unreadable / not CommandMate's package.json
110
+ */
111
+ function readRuntimeServerVersion() {
112
+ try {
113
+ const raw = (0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'package.json'), 'utf-8');
114
+ const parsed = JSON.parse(raw);
115
+ if (parsed.name === PACKAGE_NAME &&
116
+ typeof parsed.version === 'string' &&
117
+ parsed.version.length > 0) {
118
+ return parsed.version;
119
+ }
120
+ return null;
121
+ }
122
+ catch {
123
+ // Unreadable / malformed package.json: fall back to the baked value.
124
+ return null;
125
+ }
126
+ }
127
+ /**
128
+ * Get the client bundle version (baked at build time).
129
+ * [CONS-002] `NEXT_PUBLIC_APP_VERSION` is injected by next.config.js from
130
+ * package.json at `next build` time. This is the correct value to describe
131
+ * "the version of the bundle this page was served from" and is intentionally
132
+ * left build-time baked (Issue #1359).
133
+ *
134
+ * @returns Client bundle version string (e.g., "0.2.3"), or "0.0.0" as fallback
135
+ */
136
+ function getClientVersion() {
137
+ return process.env.NEXT_PUBLIC_APP_VERSION ?? '0.0.0';
138
+ }
139
+ /**
140
+ * Get the server's actually-running version, resolved at runtime.
141
+ * [Issue #1359] Prefers the installed package.json (runtime truth) over the
142
+ * build-time baked `NEXT_PUBLIC_APP_VERSION`, so update-check reports the version
143
+ * of the server code that is really running. Separating this from
144
+ * getClientVersion() is the basis for version-mismatch detection (#1338/#1356).
145
+ *
146
+ * Resolution order:
147
+ * 1. Runtime package.json (name === "commandmate")
148
+ * 2. Baked NEXT_PUBLIC_APP_VERSION
149
+ * 3. "0.0.0"
150
+ *
151
+ * @returns Server runtime version string (e.g., "0.2.3"), or "0.0.0" as fallback
152
+ */
153
+ function getServerVersion() {
154
+ return readRuntimeServerVersion() ?? getClientVersion();
155
+ }
156
+ /**
157
+ * Get the current application version (server runtime version).
158
+ * Retained for backward compatibility; delegates to getServerVersion().
159
+ *
160
+ * @returns Current version string (e.g., "0.2.3"), or "0.0.0" as fallback
161
+ */
162
+ function getCurrentVersion() {
163
+ return getServerVersion();
164
+ }
165
+ /**
166
+ * Validate that a URL is a legitimate GitHub Releases URL.
167
+ * [SEC-SF-001] OWASP A03:2021 - Prevents injection via DNS pollution/MITM.
168
+ *
169
+ * @param url - URL to validate
170
+ * @returns Validated URL, or null if invalid
171
+ */
172
+ function validateReleaseUrl(url) {
173
+ if (!url.startsWith(github_links_1.GITHUB_RELEASE_URL_PREFIX)) {
174
+ return null;
175
+ }
176
+ return url;
177
+ }
178
+ /**
179
+ * Sanitize a release name to safe character set.
180
+ * [SEC-SF-001] Restricts to alphanumeric, dots, hyphens, spaces, underscores, v-prefix.
181
+ *
182
+ * @param name - Release name to sanitize
183
+ * @param tagName - Fallback value (semver-validated tag_name)
184
+ * @returns Sanitized name, or tagName if the name is invalid
185
+ */
186
+ function sanitizeReleaseName(name, tagName) {
187
+ if (RELEASE_NAME_PATTERN.test(name) && name.length <= RELEASE_NAME_MAX_LENGTH) {
188
+ return name;
189
+ }
190
+ // Fallback to tag_name (already validated by SEMVER_PATTERN)
191
+ return tagName;
192
+ }
193
+ /**
194
+ * Check GitHub Releases for newer versions.
195
+ * Uses in-memory cache (globalThis.__versionCheckCache) with 1-hour TTL.
196
+ * Silently fails on network errors, timeouts, or API issues.
197
+ *
198
+ * [SF-002] Multiple calls within the same process are safe: the globalThis cache
199
+ * (1-hour TTL) ensures that only the first call triggers a network request.
200
+ * Subsequent calls within the TTL window return the cached result without
201
+ * network overhead. The cache is stored in globalThis.__versionCheckCache
202
+ * and automatically invalidated after CACHE_TTL_MS (1 hour).
203
+ *
204
+ * @returns Update check result, or null on failure
205
+ */
206
+ async function checkForUpdate() {
207
+ try {
208
+ // Check cache validity
209
+ if (isCacheValid()) {
210
+ return cache.result;
211
+ }
212
+ // Check rate limit
213
+ if (isRateLimited()) {
214
+ return cache.result;
215
+ }
216
+ const response = await fetch(exports.GITHUB_API_URL, {
217
+ headers: {
218
+ 'Accept': 'application/vnd.github+json',
219
+ 'User-Agent': `CommandMate/${getCurrentVersion()}`, // [SEC-SF-002]
220
+ },
221
+ cache: 'no-store', // Issue #278: Prevent Next.js Data Cache from caching GitHub API responses
222
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
223
+ });
224
+ // Handle rate limit (403)
225
+ if (response.status === 403) {
226
+ handleRateLimit(response);
227
+ return cache.result;
228
+ }
229
+ if (!response.ok) {
230
+ return cache.result;
231
+ }
232
+ const data = (await response.json());
233
+ const currentVersion = getCurrentVersion();
234
+ const latestVersion = data.tag_name.replace(/^v/, '');
235
+ const hasUpdate = isNewerVersion(currentVersion, data.tag_name);
236
+ const result = {
237
+ hasUpdate,
238
+ currentVersion,
239
+ latestVersion,
240
+ releaseUrl: validateReleaseUrl(data.html_url),
241
+ releaseName: sanitizeReleaseName(data.name, data.tag_name),
242
+ publishedAt: data.published_at,
243
+ };
244
+ // Update cache
245
+ cache.result = result;
246
+ cache.fetchedAt = Date.now();
247
+ return result;
248
+ }
249
+ catch {
250
+ // Silent failure: network errors, timeouts, parse errors
251
+ return cache.result;
252
+ }
253
+ }
254
+ /**
255
+ * Reset cache for testing purposes only.
256
+ * @internal
257
+ */
258
+ function resetCacheForTesting() {
259
+ cache.result = null;
260
+ cache.fetchedAt = 0;
261
+ cache.rateLimitResetAt = null;
262
+ }
263
+ // =============================================================================
264
+ // Internal Functions
265
+ // =============================================================================
266
+ /** Check if cache is valid (within TTL) */
267
+ function isCacheValid() {
268
+ return cache.result !== null && (Date.now() - cache.fetchedAt) < CACHE_TTL_MS;
269
+ }
270
+ /**
271
+ * Check if currently rate-limited.
272
+ * [C-001] Simplified rate limit handling: uses rateLimitResetAt from 403 response.
273
+ */
274
+ function isRateLimited() {
275
+ if (!cache.rateLimitResetAt)
276
+ return false;
277
+ if (Date.now() >= cache.rateLimitResetAt) {
278
+ cache.rateLimitResetAt = null;
279
+ return false;
280
+ }
281
+ return true;
282
+ }
283
+ /**
284
+ * Handle 403 rate limit response.
285
+ * Extracts X-RateLimit-Reset header for precise retry timing,
286
+ * or falls back to CACHE_TTL_MS extension.
287
+ */
288
+ function handleRateLimit(response) {
289
+ const resetTimestamp = response.headers.get('X-RateLimit-Reset');
290
+ if (resetTimestamp) {
291
+ cache.rateLimitResetAt = parseInt(resetTimestamp, 10) * 1000;
292
+ }
293
+ else {
294
+ // Reset time unknown: retry after 1 hour
295
+ cache.rateLimitResetAt = Date.now() + CACHE_TTL_MS;
296
+ }
297
+ }
@@ -25,6 +25,8 @@ const tmux_control_mode_metrics_1 = require("./tmux/tmux-control-mode-metrics");
25
25
  const control_mode_tmux_transport_1 = require("./tmux/control-mode-tmux-transport");
26
26
  const tmux_control_mode_flags_1 = require("./tmux/tmux-control-mode-flags");
27
27
  const cache_1 = require("./external-apps/cache");
28
+ const version_checker_1 = require("../lib/version-checker");
29
+ const types_2 = require("../lib/realtime/types");
28
30
  const logger_1 = require("../lib/logger");
29
31
  const logger = (0, logger_1.createLogger)('ws-server');
30
32
  // Global state
@@ -373,6 +375,9 @@ function handleMessage(ws, message) {
373
375
  return;
374
376
  handleBroadcast(message.worktreeId, message.data);
375
377
  break;
378
+ case types_2.CLIENT_VERSION_MESSAGE_TYPE:
379
+ handleClientVersion(ws, message);
380
+ break;
376
381
  case 'terminal_subscribe':
377
382
  void handleTerminalSubscribe(ws, message);
378
383
  break;
@@ -389,6 +394,37 @@ function handleMessage(ws, message) {
389
394
  logger.warn('message:unknown-type');
390
395
  }
391
396
  }
397
+ /**
398
+ * Handle a client-version hello (#1338/#1356).
399
+ *
400
+ * The client announces its baked bundle version on every (re)connect. If the
401
+ * server's actually-running version (runtime package.json, resolved by
402
+ * getServerVersion) has drifted from it, reply with a version_mismatch event so
403
+ * the tab can surface a reload nudge. Stays silent when the versions match or
404
+ * either side is an unknown/fallback version (受入条件: 誤検知しない).
405
+ */
406
+ function handleClientVersion(ws, message) {
407
+ const clientVersion = typeof message.version === 'string' ? message.version : '';
408
+ if (!clientVersion)
409
+ return;
410
+ const serverVersion = (0, version_checker_1.getServerVersion)();
411
+ if (!(0, types_2.isVersionMismatch)(serverVersion, clientVersion))
412
+ return;
413
+ if (ws.readyState !== ws_1.WebSocket.OPEN)
414
+ return;
415
+ try {
416
+ ws.send(JSON.stringify({
417
+ type: types_2.VERSION_MISMATCH_EVENT_TYPE,
418
+ serverVersion,
419
+ clientVersion,
420
+ }));
421
+ }
422
+ catch (error) {
423
+ logger.error('version:notify-failed', {
424
+ error: error instanceof Error ? error.message : String(error),
425
+ });
426
+ }
427
+ }
392
428
  /**
393
429
  * Subscribe client to a worktree room
394
430
  */
@@ -758,6 +794,7 @@ function closeWebSocket() {
758
794
  }
759
795
  exports.__internal = {
760
796
  handleMessage,
797
+ handleClientVersion,
761
798
  handleProxyUpgrade,
762
799
  handleTerminalSubscribe,
763
800
  handleTerminalInput,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.10.3",
3
+ "version": "0.11.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",
@@ -1,33 +0,0 @@
1
- "use strict";exports.id=2464,exports.ids=[2464],exports.modules={1102:(a,b,c)=>{c.d(b,{m_:()=>g});var d=c(21124),e=c(38301);let f={top:"bottom-full left-1/2 -translate-x-1/2 mb-2",right:"left-full top-1/2 -translate-y-1/2 ml-2",bottom:"top-full left-1/2 -translate-x-1/2 mt-2",left:"right-full top-1/2 -translate-y-1/2 mr-2"};function g({content:a,placement:b="right",delay:c=100,children:g}){let[h,i]=(0,e.useState)(!1),j=(0,e.useRef)(null),k=(0,e.useCallback)(()=>{null!==j.current&&(clearTimeout(j.current),j.current=null)},[]),l=(0,e.useCallback)(()=>{k(),j.current=setTimeout(()=>{i(!0),j.current=null},c)},[c,k]),m=(0,e.useCallback)(()=>{k(),i(!1)},[k]),n=f[b];return(0,d.jsxs)("span",{"data-testid":"tooltip-wrapper",className:"relative inline-flex",tabIndex:-1,onMouseEnter:l,onMouseLeave:m,children:[g,h&&(0,d.jsx)("span",{role:"tooltip","aria-hidden":"true",className:`absolute z-40 whitespace-nowrap px-2 py-1 text-xs font-medium rounded bg-foreground text-background shadow-lg pointer-events-none ${n}`,children:a})]})}},4267:(a,b,c)=>{c.d(b,{fJ:()=>d}),c(17252);let d=["claude","codex","gemini","opencode","copilot","antigravity"]},8509:(a,b,c)=>{c.d(b,{g:()=>h});var d=c(21124);c(38301);var e=c(20481),f=c(5772),g=c(12480);function h(){let{size:a,setSize:b,isMobile:c}=(0,f.Ps)(),h=(0,e.c)("common");if(c)return null;let i=h("displaySize.ariaLabel");return(0,d.jsxs)("div",{className:"flex items-center",children:[(0,d.jsx)("label",{htmlFor:"pc-display-size",className:"sr-only",children:i}),(0,d.jsx)("select",{id:"pc-display-size","data-testid":"pc-display-size-select","aria-label":i,value:a,onChange:a=>{let c=a.target.value;(0,g.fM)(c)&&b(c)},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:g.Uf.map(a=>(0,d.jsx)("option",{value:a,children:h(`displaySize.${a}`)},a))})]})}},17252:(a,b,c)=>{c.d(b,{Ab:()=>e,NL:()=>q,O6:()=>n,XH:()=>d,f_:()=>l,hR:()=>j,lu:()=>o,n6:()=>h,oo:()=>k,pQ:()=>f,sw:()=>m,vz:()=>p});let d=["claude","codex","gemini","vibe-local","opencode","copilot","antigravity"],e=10,f=50,g=/^[a-zA-Z0-9_-]+$/;function h(a){return"string"==typeof a&&a.length>0&&a.length<=64&&g.test(a)}let i={claude:"Claude",codex:"Codex",gemini:"Gemini","vibe-local":"Vibe Local",opencode:"OpenCode",copilot:"Copilot",antigravity:"Antigravity"};function j(a){return d.includes(a)}function k(a){return i[a]??a}function l(a,b="Assistant"){return a&&j(a)?k(a):b}function m(a){let b=a.alias;return"string"==typeof b&&b.trim().length>0?b:k(a.cliTool)}function n(a,b,c){let d=a.find(a=>a.id===b);return d?m(d):k(c)}function o(a){return a.map((a,b)=>({id:a,cliTool:a,alias:k(a),order:b}))}let p=128,q=2097152},42464:(a,b,c)=>{c.d(b,{GV:()=>a0});var d=c(21124),e=c(38301),f=c.n(e),g=c(42378),h=c(3991),i=c.n(h),j=c(52761);let k=(0,e.forwardRef)(function({href:a,onClick:b,target:c,...e},f){let h=(0,g.usePathname)(),k=(0,j.Hq)();return(0,d.jsx)(i(),{ref:f,href:a,target:c,onClick:d=>{var e;b?.(d),d.defaultPrevented||0!==(e=d).button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||void 0!==c&&"_self"!==c||/^([a-z][a-z0-9+.-]*:)?\/\//i.test(a)||/^(mailto:|tel:)/i.test(a)||(d.preventDefault(),a!==h&&k.push(a))},...e})});var l=c(20481),m=c(15917),n=c(88285),o=c(97950),p=c(8509),q=c(45523),r=c(70175),s=c(60988);function t(){let{theme:a,setTheme:b}=(0,q.D)(),[c,f]=(0,e.useState)(!1);if(!c)return(0,d.jsx)("div",{"data-testid":"theme-toggle-placeholder",className:"w-8 h-8","aria-hidden":"true"});let g="dark"===a;return(0,d.jsx)("button",{"data-testid":"theme-toggle",onClick:()=>b(g?"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":g?"Switch to light mode":"Switch to dark mode",title:g?"Switch to light mode":"Switch to dark mode",children:g?(0,d.jsx)(r.A,{className:"w-5 h-5","data-testid":"theme-icon-sun"}):(0,d.jsx)(s.A,{className:"w-5 h-5","data-testid":"theme-icon-moon"})})}var u=c(40695);function v(){let{status:a}=(0,u.xM)(),b=(0,l.c)("common");if("connected"===a)return null;let c="connecting"===a,e=b(c?"connection.reconnecting":"connection.offline");return(0,d.jsxs)("span",{"data-testid":"connection-status-indicator",role:"status","aria-live":"polite",title:b(c?"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,d.jsx)("span",{"aria-hidden":"true",className:["w-1.5 h-1.5 rounded-full",c?"bg-warning motion-safe:animate-pulse":"bg-muted-foreground"].join(" ")}),e]})}var w=c(85647),x=c(64632);let y=[{labelKey:"nav.home",href:"/",isActive:a=>"/"===a},{labelKey:"nav.chat",href:"/chat",isActive:a=>a.startsWith("/chat")},{labelKey:"nav.sessions",href:"/sessions",isActive:a=>a.startsWith("/sessions")},{labelKey:"nav.repositoriesShort",href:"/repositories",isActive:a=>a.startsWith("/repositories")},{labelKey:"nav.reviewReport",href:"/review",isActive:a=>a.startsWith("/review")},{labelKey:"nav.more",href:"/more",isActive:a=>a.startsWith("/more")}];function z({title:a="CommandMate"}){let b=(0,g.usePathname)(),c=(0,l.c)("commandPalette"),e=(0,l.c)("common"),{setOpen:h}=(0,x.C)(),[i,j]=f().useState(null);return(0,d.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,d.jsx)("div",{className:"container-custom",children:(0,d.jsxs)("div",{className:"flex items-center justify-between h-16",children:[(0,d.jsx)("div",{className:"flex items-center space-x-4",children:(0,d.jsxs)(k,{href:"/",className:"flex items-center space-x-2 hover:opacity-80 transition-opacity",children:[(0,d.jsx)("div",{className:"w-8 h-8 bg-accent-600 rounded-lg flex items-center justify-center",children:(0,d.jsx)(m.A,{size:20,strokeWidth:2,className:"text-white","aria-hidden":"true"})}),(0,d.jsx)("h1",{className:"text-xl font-bold text-foreground",children:a})]})}),(0,d.jsxs)("nav",{className:"flex items-center space-x-6",role:"navigation",children:[y.map(a=>{let c=a.isActive(b);return(0,d.jsx)(k,{href:a.href,"aria-current":c?"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)] ${c?"text-accent-600 dark:text-accent-400 after:scale-x-100":"text-muted-foreground hover:text-foreground after:scale-x-0"}`,children:e(a.labelKey)},a.href)}),(0,d.jsxs)("button",{type:"button","data-testid":"header-command-palette-trigger",onClick:()=>h(!0),"aria-label":c("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,d.jsx)(n.A,{size:16,strokeWidth:2,"aria-hidden":"true",className:"shrink-0"}),(0,d.jsx)("span",{children:c("searchAction")}),i&&(0,d.jsxs)("span",{className:"flex items-center gap-0.5",children:[(0,d.jsx)(w.u,{children:i}),(0,d.jsx)(w.u,{children:"K"})]})]}),(0,d.jsx)(v,{}),(0,d.jsx)(p.g,{}),(0,d.jsx)(t,{}),(0,d.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,d.jsx)(o.A,{size:20,strokeWidth:2,"aria-hidden":"true"}),(0,d.jsx)("span",{children:"GitHub"})]})]})]})})})}var A=c(81092),B=c(90076);let C={showSidebar:!0,showGlobalNav:!0,showLocalNav:!1,autoCollapseSidebar:!1},D=[{prefix:"/worktrees/",config:{showGlobalNav:!1,showLocalNav:!0}},{prefix:"/sessions",config:{autoCollapseSidebar:!0}}];var E=c(5772),F=c(65828),G=c(10366),H=c(99615),I=c(22023),J=c(47817),K=c(23312),L=c.n(K),M=c(67016),N=c(22317);let O=(0,e.memo)(function({status:a,label:b}){return(0,d.jsx)(N.m,{"data-testid":"status-indicator",status:a,label:b,size:"lg"})});function P({id:a,branch:b,isVisible:c,anchorRef:f}){let[g,h]=(0,e.useState)({top:-9999,left:-9999});return"undefined"!=typeof document&&c?L().createPortal((0,d.jsxs)("div",{id:a,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:g.top,left:g.left},children:[(0,d.jsx)("p",{className:"font-medium text-sidebar-foreground whitespace-nowrap",children:b.name}),(0,d.jsx)("p",{className:"text-sidebar-muted whitespace-nowrap",children:b.repositoryName}),(0,d.jsxs)("p",{className:"text-sidebar-muted whitespace-nowrap",children:["Status: ",b.status]}),b.worktreePath&&(0,d.jsx)("p",{className:"text-sidebar-muted truncate",children:b.worktreePath}),b.description&&(0,d.jsx)("p",{className:"text-sidebar-muted mt-1 border-t border-sidebar-border pt-1 whitespace-pre-wrap break-words",children:b.description})]}),document.body):null}let Q=0,R=(0,e.memo)(function({branch:a,isSelected:b,onClick:c,showRepositoryName:f=!0}){let g=(0,l.c)("common"),h=`tooltip-${a.id}`,i=(0,e.useRef)(null),[j,k]=(0,e.useState)(!1),m=(0,e.useRef)(null),n=(0,e.useCallback)(()=>{null!==m.current&&(clearTimeout(m.current),m.current=null)},[]);(0,e.useEffect)(()=>()=>n(),[n]);let o=j&&!b;return(0,e.useEffect)(()=>{b&&k(!1)},[b]),(0,e.useEffect)(()=>{if(!j)return;let a=()=>k(!1);return document.addEventListener("click",a),()=>document.removeEventListener("click",a)},[j]),(0,d.jsxs)("button",{ref:i,"data-testid":"branch-list-item",onClick:()=>{n(),Q=Date.now()+400,k(!1),c()},onMouseEnter:()=>{n(),Date.now()>=Q&&(m.current=setTimeout(()=>{k(!0)},150))},onMouseLeave:()=>{n(),k(!1)},onFocus:a=>{n(),a.target.matches(":focus-visible")&&(m.current=setTimeout(()=>{k(!0)},150))},onBlur:()=>{n(),k(!1)},"aria-current":b?"true":void 0,"aria-describedby":o?h:void 0,"aria-label":f?void 0:`${a.name} - ${a.repositoryName}`,className:`
2
- group relative w-full px-4 py-3 flex flex-col gap-1
3
- hover:bg-sidebar-hover transition-colors
4
- focus:outline-none focus:ring-2 focus:ring-inset focus:ring-ring
5
- ${b?"bg-sidebar-hover border-l-2 border-accent-500":"border-l-2 border-transparent"}
6
- `,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 w-full",children:[a.cliStatus&&Object.keys(a.cliStatus).length>0&&(0,d.jsx)("div",{className:"flex items-center justify-center flex-shrink-0 w-4","aria-label":g("branchItem.cliToolStatus"),children:(0,d.jsx)(O,{status:(0,M.A7)(a.cliStatus),label:(0,M.dw)(a.cliStatus,a.cliStatusLabels)})}),(0,d.jsxs)("div",{className:"flex-1 min-w-0 text-left",children:[(0,d.jsx)("p",{className:"text-sm font-medium text-sidebar-foreground truncate",children:a.name}),f&&(0,d.jsx)("p",{className:"text-xs text-sidebar-muted truncate",children:a.repositoryName})]}),a.hasUnread&&(0,d.jsx)("span",{"data-testid":"unread-indicator",className:"w-2 h-2 rounded-full bg-accent-500 flex-shrink-0","aria-label":g("branchItem.hasUnread")})]}),a.description&&(0,d.jsx)("div",{"data-testid":"branch-description",className:"pl-6 pr-2 mt-1 text-left",children:(0,d.jsx)("p",{className:"text-xs text-sidebar-muted line-clamp-2",children:a.description})}),(0,d.jsx)(P,{id:h,branch:a,isVisible:o,anchorRef:i})]})});var S=c(1102);let T=(0,e.memo)(function({sortKey:a,sortDirection:b,onSortKeyChange:c,onSortDirectionChange:f,options:g,defaultDirections:h,compact:i,tooltip:j,iconClassName:k="w-3 h-3"}){let m=(0,l.c)("common"),[n,o]=(0,e.useState)(!1),p=(0,e.useRef)(null);(0,e.useEffect)(()=>{function a(a){p.current&&!p.current.contains(a.target)&&o(!1)}if(n)return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[n]),(0,e.useEffect)(()=>{function a(a){"Escape"===a.key&&o(!1)}if(n)return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[n]);let q=(0,e.useCallback)(()=>{o(a=>!a)},[]),r=(0,e.useCallback)(d=>{d===a?f("asc"===b?"desc":"asc"):(c(d),f(h?.[d]??"asc")),o(!1)},[a,b,c,f,h]),s=(0,e.useCallback)(()=>{f("asc"===b?"desc":"asc")},[b,f]),t=g.find(b=>b.key===a)?.label||"Sort",u=(0,d.jsxs)("button",{type:"button",onClick:q,"aria-expanded":n,"aria-haspopup":"listbox","aria-label":`Sort by ${t}`,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,d.jsx)(U,{className:k}),(0,d.jsx)("span",{className:i?"hidden":"hidden sm:inline",children:t})]});return(0,d.jsxs)("div",{ref:p,className:"relative","data-testid":"sort-selector-base",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1",children:[j?(0,d.jsx)(S.m_,{content:j,placement:"bottom",children:u}):u,(0,d.jsx)("button",{type:"button",onClick:s,"aria-label":"asc"===b?"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"===b?(0,d.jsx)(V,{className:k}):(0,d.jsx)(W,{className:k})})]}),n&&(0,d.jsx)("div",{role:"listbox","aria-label":m("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 ",children:g.map(c=>(0,d.jsxs)("button",{type:"button",role:"option","aria-selected":a===c.key,onClick:()=>r(c.key),className:`
7
- w-full px-3 py-2 text-left text-sm
8
- flex items-center justify-between
9
- hover:bg-sidebar-hover transition-colors
10
- ${a===c.key?"text-accent-700 dark:text-accent-400":"text-sidebar-muted"}
11
- `,children:[(0,d.jsx)("span",{children:c.label}),a===c.key&&(0,d.jsx)("span",{className:"text-xs",children:"asc"===b?"ASC":"DESC"})]},c.key))})]})});function U({className:a}){return(0,d.jsx)("svg",{className:a,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12"})})}function V({className:a}){return(0,d.jsx)("svg",{className:a,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 15l7-7 7 7"})})}function W({className:a}){return(0,d.jsx)("svg",{className:a,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})}let X=[{key:"updatedAt",labelKey:"sort.updatedAt"},{key:"repositoryName",labelKey:"sort.repositoryName"},{key:"branchName",labelKey:"sort.branchName"},{key:"status",labelKey:"sort.status"}],Y={updatedAt:"desc"},Z=(0,e.memo)(function(){let{sortKey:a,sortDirection:b,setSortKey:c,setSortDirection:f}=(0,A.VF)(),g=(0,l.c)("common"),h=(0,e.useMemo)(()=>X.map(({key:a,labelKey:b})=>({key:a,label:g(b)})),[g]);return(0,d.jsx)(T,{sortKey:a,sortDirection:b,onSortKeyChange:c,onSortDirectionChange:f,options:h,defaultDirections:Y,compact:!0,tooltip:g("tooltips.sort"),iconClassName:"w-4 h-4"})});var $=c(73451),_=c(81497),aa=c(55992);let ab=["en","ja"],ac={en:"English",ja:"日本語"};function ad(){return{currentLocale:(0,aa.Ym)(),switchLocale:a=>{if(ab.includes(a)){let b="https:"===window.location.protocol;document.cookie=`locale=${a};path=/;max-age=31536000;SameSite=Lax${b?";Secure":""}`,localStorage.setItem("locale",a),window.location.reload()}}}}function ae(){let{currentLocale:a,switchLocale:b}=ad(),c=(0,l.c)("common");return(0,d.jsx)("select",{value:a,onChange:a=>b(a.target.value),"data-testid":"locale-switcher","aria-label":c("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:ab.map(a=>(0,d.jsx)("option",{value:a,children:ac[a]},a))})}var af=c(84342);function ag(){let a=(0,l.c)("auth"),b=(0,af.H)(),[c,f]=(0,e.useState)(!1);if(!b)return null;async function g(){f(!0);try{await fetch("/api/auth/logout",{method:"POST"}),window.location.href="/login"}catch{window.location.href="/login"}}return(0,d.jsx)("button",{type:"button",onClick:g,disabled:c,"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:c?"...":a("logout.button")})}var ah=c(63474),ai=c(78352),aj=c(32482);let ak="w-4 h-4",al=0,am=null;function an(){return am??[]}let ao=(0,e.memo)(function(){let a=(0,j.Hq)(),{worktrees:b,repositories:c,selectedWorktreeId:f,selectWorktree:g,refreshWorktrees:h}=(0,J.$f)(),{closeMobileDrawer:k,sortKey:m,sortDirection:n,viewMode:o,setViewMode:p}=(0,A.VF)(),q=(0,l.c)("common"),[r,s]=(0,e.useState)(""),u=(0,e.useRef)(null),[v,w]=(0,e.useState)(()=>({})),[x,y]=(0,e.useState)(an),z=(0,e.useRef)(!1);(0,e.useEffect)(()=>{z.current||(z.current=!0,fetch("/api/sidebar/group-order").then(a=>a.json()).then(a=>{a.success&&Array.isArray(a.order)&&(y(a.order),am=a.order)}).catch(()=>{}))},[]);let B=(0,e.useMemo)(()=>(0,aj.UZ)(c),[c]),C=(0,e.useMemo)(()=>(0,aj.s6)(b,B),[b,B]),D=(0,e.useMemo)(()=>C.map(M.XK),[C]),E=(0,e.useDeferredValue)(D),I=(0,e.useRef)(null),K=(0,e.useRef)(null);(0,e.useEffect)(()=>()=>{null!==K.current&&clearTimeout(K.current)},[]);let L=(0,e.useMemo)(()=>{let a=I.current;return!a||Date.now()>=a.expiresAt?E:a.items},[E]),N=(0,e.useRef)(L);(0,e.useLayoutEffect)(()=>{N.current=L});let O=(0,e.useCallback)(()=>{null!==K.current&&(clearTimeout(K.current),K.current=null);let a=I.current;if(a&&Date.now()<a.expiresAt){I.current={...a,expiresAt:1/0};return}I.current={items:N.current,expiresAt:1/0}},[]),P=(0,e.useCallback)(()=>{I.current&&(I.current={...I.current,expiresAt:Date.now()+1e3},null!==K.current&&clearTimeout(K.current),K.current=setTimeout(()=>{I.current=null},1e3))},[]),{sortedItems:Q,groupedItems:T}=function(a){let{items:b,sortKey:c,sortDirection:d,viewMode:f,filterText:g}=a,h=(0,e.useMemo)(()=>{if(!g)return b;let a=g.toLowerCase();return b.filter(b=>b.name.toLowerCase().includes(a)||b.repositoryName.toLowerCase().includes(a))},[b,g]);return{sortedItems:(0,e.useMemo)(()=>(0,aj.Xn)(h,c,d),[h,c,d]),groupedItems:(0,e.useMemo)(()=>"grouped"===f?(0,aj._s)(h,c,d):[],[h,c,d,f])}}({items:L,sortKey:m,sortDirection:n,viewMode:o,filterText:r}),U=(0,e.useMemo)(()=>{if("grouped"!==o||!T)return null;if(r.trim()||0===x.length)return T;let a=new Map(x.map((a,b)=>[a,b]));return[...T].sort((b,c)=>{let d=a.has(b.repositoryName)?a.get(b.repositoryName):1/0,e=a.has(c.repositoryName)?a.get(c.repositoryName):1/0;return d===e?b.repositoryName.localeCompare(c.repositoryName):d-e})},[o,T,x,r]),V="grouped"===o?U:null;(0,e.useEffect)(()=>{},[v]);let W=(0,e.useCallback)(a=>{w(b=>({...b,[a]:!b[a]}))},[]),X=(0,e.useCallback)(()=>{var a;al=Number.isFinite(a=u.current?.scrollTop??0)&&a>0?a:0},[]),Y=Q.length>0||(V?.length??0)>0;(0,e.useEffect)(()=>{let a=u.current;if(!a)return;let b=window.requestAnimationFrame(()=>{a.scrollTop=al});return()=>{window.cancelAnimationFrame(b)}},[Y,o]);let _=(0,e.useCallback)(b=>{X(),g(b),a.push(`/worktrees/${b}`),k()},[X,g,a,k]),aa=(0,G.FR)((0,G.MS)(G.AN,{activationConstraint:{distance:8}})),ab=(0,e.useCallback)(a=>{let{active:b,over:c}=a;if(!c||b.id===c.id||!V)return;let d=V.map(a=>a.repositoryName),e=d.indexOf(String(b.id)),f=d.indexOf(String(c.id));if(-1===e||-1===f)return;let g=(0,H.be)(d,e,f);y(g),am=g,fetch("/api/sidebar/group-order",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({order:g})}).catch(()=>{y(d),am=d})},[V]),ac="flat"===o?0===Q.length:(V?.length??0)===0;return(0,d.jsxs)("nav",{"data-testid":"sidebar","aria-label":q("sidebar.branchNavigation"),className:"h-full flex flex-col bg-sidebar text-sidebar-foreground",role:"navigation",children:[(0,d.jsx)("div",{"data-testid":"sidebar-header",className:"flex-shrink-0 px-4 py-4 border-b border-sidebar-border",children:(0,d.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-y-2",children:[(0,d.jsx)("h2",{className:"min-w-0 truncate text-lg font-semibold text-sidebar-foreground",children:q("sidebar.branches")}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-1",children:[(0,d.jsx)(ar,{viewMode:o,onToggle:p}),(0,d.jsx)(Z,{}),(0,d.jsx)(ax,{refreshWorktrees:h}),(0,d.jsx)(S.m_,{content:q("tooltips.repositories"),placement:"bottom",children:(0,d.jsx)(i(),{href:"/repositories","aria-label":q("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,d.jsx)(F.A,{className:ak,"aria-hidden":"true"})})})]})]})}),(0,d.jsx)("div",{className:"flex-shrink-0 px-4 py-3 border-b border-sidebar-border",children:(0,d.jsx)($.pd,{type:"text",placeholder:q("sidebar.searchBranches"),value:r,onChange:a=>s(a.target.value),className:"bg-background shadow-none"})}),(0,d.jsx)("div",{ref:u,"data-testid":"branch-list",onScroll:X,onMouseEnter:O,onMouseLeave:P,className:"flex-1 overflow-y-auto overflow-x-hidden",children:ac?(0,d.jsx)("div",{className:"px-4 py-8 text-center text-sidebar-muted",children:q(r?"sidebar.noBranchesFound":"sidebar.noBranchesAvailable")}):"grouped"===o&&V?(0,d.jsx)(G.Mp,{sensors:aa,collisionDetection:G.fp,onDragEnd:ab,children:(0,d.jsx)(H.gB,{items:V.map(a=>a.repositoryName),strategy:H._G,children:V.map(a=>{let b=!v[a.repositoryName]||!!r.trim();return(0,d.jsx)(ap,{group:a,isExpanded:b,selectedWorktreeId:f,onToggle:()=>W(a.repositoryName),onBranchClick:_,isDragDisabled:!!r.trim()},a.repositoryName)})})}):Q.map(a=>(0,d.jsx)(R,{branch:a,isSelected:a.id===f,onClick:()=>_(a.id)},a.id))}),(0,d.jsxs)("div",{className:"flex-shrink-0 px-4 py-3 border-t border-sidebar-border space-y-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("div",{className:"flex-1",children:(0,d.jsx)(ae,{})}),(0,d.jsx)(t,{})]}),(0,d.jsx)(ag,{})]})]})});function ap({group:a,isExpanded:b,selectedWorktreeId:c,onToggle:e,onBranchClick:f,isDragDisabled:g}){let{attributes:h,listeners:i,setNodeRef:j,setActivatorNodeRef:k,transform:l,transition:m,isDragging:n}=(0,H.gl)({id:a.repositoryName,disabled:g}),o={transform:I.Ks.Transform.toString(l),transition:m,opacity:n?.5:1};return(0,d.jsxs)("div",{ref:j,style:o,className:"w-full min-w-0",children:[(0,d.jsx)(aq,{repositoryName:a.repositoryName,branchCount:a.branches.length,isExpanded:b,onClick:e,dragHandleRef:k,dragHandleListeners:g?void 0:i,dragHandleAttributes:g?void 0:h}),b&&a.branches.map(a=>(0,d.jsx)(R,{branch:a,isSelected:a.id===c,onClick:()=>f(a.id),showRepositoryName:!1},a.id))]})}function aq({repositoryName:a,branchCount:b,isExpanded:c,onClick:e,dragHandleRef:f,dragHandleListeners:g,dragHandleAttributes:h}){let i=(0,l.c)("common");return(0,d.jsxs)("div",{className:"flex items-center w-full",children:[g&&(0,d.jsx)("div",{ref:f,...g,...h,"aria-label":i("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,d.jsx)(av,{})}),(0,d.jsxs)("button",{"data-testid":"group-header",type:"button",onClick:e,"aria-expanded":c,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,d.jsx)(as,{isExpanded:c}),(0,d.jsx)(at,{color:(0,aj.LV)(a)}),(0,d.jsx)(_.nR,{content:a,className:"flex-1 min-w-0 text-left truncate",children:a}),(0,d.jsx)("span",{className:"text-sidebar-muted font-normal tabular-nums pr-2",children:b})]})]})}function ar({viewMode:a,onToggle:b}){let c=(0,l.c)("common");return(0,d.jsx)(S.m_,{content:c("tooltips.viewMode"),placement:"bottom",children:(0,d.jsx)("button",{"data-testid":"view-mode-toggle",type:"button",onClick:()=>{b("grouped"===a?"flat":"grouped")},"aria-label":c("grouped"===a?"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"===a?(0,d.jsx)(au,{className:ak}):(0,d.jsx)(at,{className:ak})})})}function as({isExpanded:a}){return(0,d.jsx)("svg",{className:`w-3 h-3 flex-shrink-0 transition-transform ${a?"rotate-90":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"})})}function at({className:a="w-3.5 h-3.5",color:b}){return(0,d.jsx)("svg",{className:`${a} flex-shrink-0`,viewBox:"0 0 24 24",fill:b??"none",stroke:b?"none":"currentColor",strokeWidth:2*!b,"aria-hidden":"true",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"})})}function au({className:a="w-3 h-3"}){return(0,d.jsx)("svg",{className:a,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 6h16M4 12h16M4 18h16"})})}function av(){return(0,d.jsxs)("svg",{className:"w-3 h-3",fill:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"9",cy:"5",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"5",r:"1.5"}),(0,d.jsx)("circle",{cx:"9",cy:"12",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"12",r:"1.5"}),(0,d.jsx)("circle",{cx:"9",cy:"19",r:"1.5"}),(0,d.jsx)("circle",{cx:"15",cy:"19",r:"1.5"})]})}function aw({className:a=""}){return(0,d.jsx)("svg",{className:`${ak} ${a}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.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 ax=(0,e.memo)(function({refreshWorktrees:a}){let[b,c]=(0,e.useState)(!1),f=(0,e.useRef)(!1),{showToast:g,toasts:h,removeToast:i}=(0,ah.dj)(),j=(0,l.c)("common"),k=(0,e.useCallback)(async()=>{if(!f.current){f.current=!0,c(!0);try{let b=await ai.Rx.sync();await a(),g(j("syncSuccess",{count:b.worktreeCount}),"success",3e3)}catch(a){a instanceof ai.hD&&401===a.status?g(j("syncAuthError"),"error",5e3):g(j("syncError"),"error",5e3)}finally{f.current=!1,c(!1)}}},[a,g,j]);return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(S.m_,{content:j("tooltips.sync"),placement:"bottom",children:(0,d.jsx)("button",{type:"button",onClick:k,disabled:b,"aria-label":j("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,d.jsx)(aw,{className:b?"animate-spin":""})})}),(0,d.jsx)(ah.N9,{toasts:h,onClose:i})]})});var ay=c(78733),az=c(44688),aA=c(75903),aB=c(59268),aC=c(38882);let aD=[{labelKey:"nav.home",href:"/",isActive:a=>"/"===a,icon:(0,d.jsx)(ay.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.chat",href:"/chat",isActive:a=>a.startsWith("/chat"),icon:(0,d.jsx)(az.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.sessions",href:"/sessions",isActive:a=>a.startsWith("/sessions"),icon:(0,d.jsx)(aA.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.review",href:"/review",isActive:a=>a.startsWith("/review"),icon:(0,d.jsx)(aB.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.more",href:"/more",isActive:a=>a.startsWith("/more"),icon:(0,d.jsx)(aC.A,{size:20,"aria-hidden":"true"})}];function aE(){let a=(0,g.usePathname)(),{setOpen:b}=(0,x.C)(),c=(0,l.c)("commandPalette"),e=(0,l.c)("common");return(0,d.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,d.jsxs)("div",{className:"flex items-center justify-around h-14",children:[aD.map(b=>{let c=b.isActive(a);return(0,d.jsxs)(k,{href:b.href,className:`flex flex-col items-center justify-center flex-1 h-full text-xs transition-colors ${c?"text-accent-600 dark:text-accent-400":"text-muted-foreground hover:text-foreground"}`,children:[b.icon,(0,d.jsx)("span",{className:"mt-1 whitespace-nowrap",children:e(b.labelKey)})]},b.href)}),(0,d.jsxs)("button",{type:"button","data-testid":"mobile-command-palette-trigger",onClick:()=>b(!0),"aria-label":c("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,d.jsx)(n.A,{size:20,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"mt-1 whitespace-nowrap",children:c("mobileLabel")})]})]})})}var aF=c(67565),aG=c(50987),aH=c(34487),aI=c(25345),aJ=c(96558),aK=c(75692),aL=c(57898),aM=c(35595),aN=c(11010),aO=c(89184),aP=c(63157),aQ=c(12480);let aR=[{key:"home",href:"/"},{key:"chat",href:"/chat"},{key:"sessions",href:"/sessions"},{key:"repositories",href:"/repositories"},{key:"review",href:"/review"},{key:"more",href:"/more"}],aS={home:ay.A,chat:az.A,sessions:aA.A,repositories:aG.A,review:aB.A,more:aC.A};function aT(a){return a.isWaitingForResponse?"waiting":a.isProcessing?"running":a.isSessionRunning?"ready":"idle"}let aU=(0,aM.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"),aV="shrink-0 text-muted-foreground";function aW(){let{open:a,setOpen:b}=(0,x.C)(),{setOpen:c}=(0,aO.K)(),f=(0,g.useRouter)(),h=(0,l.c)("commandPalette"),i=(0,l.c)("common"),{theme:j,setTheme:k}=(0,q.D)(),{setSize:m,isMobile:p}=(0,E.Ps)(),{currentLocale:t,switchLocale:u}=ad(),v=(0,aP.rC)(),{toasts:y,showToast:z,removeToast:A}=(0,ah.dj)(),[B,C]=(0,e.useState)(!1),[D,F]=(0,e.useState)(""),[G,H]=(0,e.useState)([]),I=(0,e.useRef)(null);(0,e.useRef)(null),(0,e.useRef)(a);let J=(0,e.useCallback)((a,c)=>{c&&H(a=>(function(a,b){let c=a.filter(a=>a.kind!==b.kind||a.id!==b.id),d=[b,...c].slice(0,8);try{localStorage.setItem("cm.palette.recents",JSON.stringify(d))}catch{}return d})(a,c)),b(!1),a()},[b]),L=(0,e.useCallback)(async()=>{try{await ai.Rx.sync(),await v?.refresh?.(),z(h("actions.syncSuccess"),"success")}catch{z(h("actions.syncError"),"error")}},[v,z,h]),M="dark"===j,O=""===D.trim(),P=v?.error??null,Q=v?.isLoading??!1,R=P?[]:v?.worktrees??[],S=R.length>0,T=!P&&Q&&0===R.length,U=[...R].sort((a,b)=>{let c=+!!a.isSessionRunning,d=+!!b.isSessionRunning;if(c!==d)return d-c;let e=a.updatedAt?new Date(a.updatedAt).getTime():0;return(b.updatedAt?new Date(b.updatedAt).getTime():0)-e}),V=O?U.slice(0,8):U,W=[{id:"theme",label:M?h("actions.toLight"):h("actions.toDark"),icon:M?r.A:s.A,run:()=>k(M?"light":"dark")},...p?[]:aQ.Uf.map(a=>({id:`displaysize:${a}`,label:`${h("actions.displaySizePrefix")}: ${i(`displaySize.${a}`)}`,icon:aH.A,run:()=>m(a)})),{id:"sync",label:h("actions.syncRepositories"),icon:aI.A,run:()=>{L()}},{id:"locale",label:h("actions.switchLanguage"),icon:aJ.A,run:()=>u("ja"===t?"en":"ja")},{id:"github",label:h("actions.openGitHub"),icon:o.A,run:()=>window.open("https://github.com/kewton/MyCodeBranchDesk","_blank","noopener,noreferrer")},{id:"keyboardShortcuts",label:h("actions.keyboardShortcuts"),icon:aK.A,run:()=>c(!0)}],X=O?G.map(a=>{if("nav"===a.kind){let b=aR.find(b=>b.key===a.id);if(!b)return null;let c=aS[b.key],e=i(`nav.${b.key}`);return{id:`nav-${b.key}`,value:`recent nav ${b.key}`,node:(0,d.jsxs)(d.Fragment,{children:[c&&(0,d.jsx)(c,{size:16,className:aV,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:e})]}),onSelect:()=>J(()=>f.push(b.href),{kind:"nav",id:b.key})}}if("worktree"===a.kind){let b=R.find(b=>b.id===a.id);if(!b)return null;let c=b.repositoryDisplayName||b.repositoryName||"",e=b.branch||b.name;return{id:`worktree-${b.id}`,value:`recent worktree ${b.id}`,node:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(aL.A,{size:16,className:aV,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:e}),c&&(0,d.jsx)("span",{className:"ml-auto truncate pl-2 text-xs text-muted-foreground",children:c}),(0,d.jsx)(N.m,{status:aT(b),size:"sm",className:c?"ml-2":"ml-auto"})]}),onSelect:()=>J(()=>f.push(`/worktrees/${b.id}`),{kind:"worktree",id:b.id})}}let b=W.find(b=>b.id===a.id);if(!b)return null;let c=b.icon;return{id:`action-${b.id}`,value:`recent action ${b.id}`,node:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(c,{size:16,className:aV,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:b.label})]}),onSelect:()=>J(b.run,{kind:"action",id:b.id})}}).filter(a=>null!==a):[];return B?(0,K.createPortal)((0,d.jsxs)(d.Fragment,{children:[a&&(0,d.jsxs)("div",{className:"fixed inset-0 overflow-y-auto",style:{zIndex:aN.M.MODAL},"data-testid":"command-palette",children:[(0,d.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:()=>b(!1)}),(0,d.jsx)("div",{className:"relative flex min-h-full items-start justify-center p-4 pt-[15vh]",children:(0,d.jsx)("div",{"data-state":"open","data-testid":"command-palette-panel",className:(0,aM.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,d.jsxs)(aF.uB,{label:h("title"),className:(0,aM.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,d.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3",children:[(0,d.jsx)(n.A,{size:16,strokeWidth:2,"aria-hidden":"true",className:"shrink-0 text-muted-foreground"}),(0,d.jsx)(aF.uB.Input,{ref:I,value:D,onValueChange:F,placeholder:h("placeholder"),"data-testid":"command-palette-input",className:"flex-1 bg-transparent py-3 text-sm text-foreground outline-none placeholder:text-muted-foreground"})]}),(0,d.jsxs)(aF.uB.List,{className:"max-h-[min(60vh,360px)] overflow-y-auto p-2",children:[(0,d.jsx)(aF.uB.Empty,{"data-testid":"command-palette-empty",className:"py-6 text-center text-sm text-muted-foreground",children:h("empty")}),T&&(0,d.jsx)(aF.uB.Loading,{"data-testid":"command-palette-loading",className:"py-6 text-center text-sm text-muted-foreground",children:h("loading")}),X.length>0&&(0,d.jsx)(aF.uB.Group,{heading:h("groups.recent"),children:X.map(a=>(0,d.jsx)(aF.uB.Item,{value:a.value,onSelect:a.onSelect,className:aU,children:a.node},a.id))}),(0,d.jsx)(aF.uB.Group,{heading:h("groups.navigation"),children:aR.map(a=>{let b=i(`nav.${a.key}`),c=aS[a.key];return(0,d.jsxs)(aF.uB.Item,{value:`nav ${b} ${a.href}`,onSelect:()=>J(()=>f.push(a.href),{kind:"nav",id:a.key}),className:aU,children:[c&&(0,d.jsx)(c,{size:16,className:aV,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:b})]},a.key)})}),S&&(0,d.jsx)(aF.uB.Group,{heading:h("groups.worktrees"),children:V.map(a=>{let b=a.repositoryDisplayName||a.repositoryName||"",c=a.branch||a.name;return(0,d.jsxs)(aF.uB.Item,{value:`worktree ${b} ${c} ${a.name} ${a.id}`,onSelect:()=>J(()=>f.push(`/worktrees/${a.id}`),{kind:"worktree",id:a.id}),className:aU,children:[(0,d.jsx)(aL.A,{size:16,className:aV,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:c}),b&&(0,d.jsx)("span",{className:"ml-auto truncate pl-2 text-xs text-muted-foreground",children:b}),(0,d.jsx)(N.m,{status:aT(a),size:"sm",className:b?"ml-2":"ml-auto"})]},a.id)})}),(0,d.jsx)(aF.uB.Group,{heading:h("groups.actions"),children:W.map(a=>{let b=a.icon;return(0,d.jsxs)(aF.uB.Item,{value:`action ${a.id} ${a.label}`,onSelect:()=>J(a.run,{kind:"action",id:a.id}),className:aU,children:[(0,d.jsx)(b,{size:16,className:aV,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:a.label})]},a.id)})})]}),(0,d.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,d.jsxs)("span",{className:"flex items-center gap-1",children:[(0,d.jsx)(w.u,{children:"↑"}),(0,d.jsx)(w.u,{children:"↓"}),h("footer.navigate")]}),(0,d.jsxs)("span",{className:"flex items-center gap-1",children:[(0,d.jsx)(w.u,{children:"↵"}),h("footer.select")]}),(0,d.jsxs)("span",{className:"flex items-center gap-1",children:[(0,d.jsx)(w.u,{children:"esc"}),h("footer.close")]})]})]})})})]}),(0,d.jsx)(ah.N9,{toasts:y,onClose:A})]}),document.body):null}var aX=c(98033);let aY=["global","terminal","composer"],aZ=[{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:"sendMessage",keys:["↵"],scope:"composer"},{id:"composerNewline",keys:["Shift","↵"],scope:"composer"}];function a$(){let{open:a,setOpen:b}=(0,aO.K)(),{open:c}=(0,x.C)(),f=(0,l.c)("keyboardShortcuts"),[g,h]=(0,e.useState)(!1);(0,e.useRef)(a),(0,e.useRef)(c);let i=function(a=aZ){return aY.map(b=>({scope:b,shortcuts:a.filter(a=>a.scope===b)})).filter(a=>a.shortcuts.length>0)}();return(0,d.jsx)(aX.a,{isOpen:a,onClose:()=>b(!1),title:f("title"),size:"md",children:(0,d.jsx)("div",{"data-testid":"keyboard-shortcuts-overlay",className:"space-y-6",children:i.map(({scope:a,shortcuts:b})=>(0,d.jsxs)("section",{"data-testid":`keyboard-shortcuts-scope-${a}`,children:[(0,d.jsx)("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:f(`scopes.${a}`)}),(0,d.jsx)("ul",{className:"divide-y divide-border",children:b.map(a=>(0,d.jsxs)("li",{"data-testid":`keyboard-shortcut-${a.id}`,className:"flex items-center justify-between gap-4 py-2",children:[(0,d.jsx)("span",{className:"text-sm text-foreground",children:f(`shortcuts.${a.id}`)}),(0,d.jsx)("span",{className:"flex flex-shrink-0 items-center gap-1",children:a.keys.map((a,b)=>(0,d.jsx)(w.u,{children:"MOD"===a?g?"⌘":"Ctrl":a},b))})]},a.id))})]},a))})})}let a_="transform transition-transform duration-300 ease-out",a0=(0,e.memo)(function({children:a}){let{isOpen:b,isMobileDrawerOpen:c,closeMobileDrawer:f,width:h,setWidth:i}=(0,A.VF)(),j=(0,B.a)(),{showSidebar:k,showGlobalNav:l}=function(){var a=(0,g.usePathname)();for(let b of D)if(a.startsWith(b.prefix))return{...C,...b.config};return{...C}}(),{factor:m}=(0,E.Ps)(),n=Math.round(160*m),o=Math.round(480*m),p=Math.round(Math.min(o,Math.max(n,h*m))),q=(0,e.useRef)(null),r=(0,e.useRef)(null),s=(0,e.useCallback)(a=>{i(Math.round(a/m))},[i,m]);return j?(0,d.jsxs)("div",{"data-testid":"app-shell",className:"h-screen flex flex-col",children:[c&&(0,d.jsx)("div",{"data-testid":"drawer-overlay",className:"fixed inset-0 bg-black/50 z-40",onClick:f,"aria-hidden":"true"}),k&&(0,d.jsx)("aside",{"data-testid":"sidebar-container",className:`
12
- fixed left-0 top-0 h-full w-72 z-50
13
- ${a_}
14
- ${c?"translate-x-0":"-translate-x-full"}
15
- `,role:"complementary",children:(0,d.jsx)(ao,{})}),(0,d.jsx)("main",{className:`flex-1 min-h-0 overflow-hidden ${l?"pb-14":""}`,role:"main","data-view-transition":"content",children:a}),l&&(0,d.jsx)(aE,{}),(0,d.jsx)(aW,{}),(0,d.jsx)(a$,{})]}):(0,d.jsxs)("div",{"data-testid":"app-shell",className:"h-screen flex flex-col",children:[l&&(0,d.jsx)(z,{}),(0,d.jsxs)("div",{className:"flex flex-1 min-h-0",children:[k&&(0,d.jsxs)("aside",{ref:q,"data-testid":"sidebar-container",className:`
16
- fixed left-0
17
- ${l?"top-16 h-[calc(100vh-4rem)]":"top-0 h-full"}
18
- border-r border-border
19
- ${a_}
20
- ${b?"translate-x-0":"-translate-x-full"}
21
- `,style:{width:`${p}px`,zIndex:aN.M.SIDEBAR},role:"complementary","aria-hidden":!b,children:[(0,d.jsx)(ao,{}),(0,d.jsx)(a1,{currentWidth:p,minWidth:n,maxWidth:o,sidebarRef:q,mainRef:r,onWidthChange:s})]}),(0,d.jsx)("main",{ref:r,className:"flex-1 min-w-0 h-full overflow-hidden transition-[padding] duration-300 ease-out",style:{paddingLeft:k&&b?`${p}px`:0},role:"main","data-view-transition":"content",children:a})]}),(0,d.jsx)(aW,{}),(0,d.jsx)(a$,{})]})});function a1({currentWidth:a,minWidth:b,maxWidth:c,sidebarRef:e,mainRef:f,onWidthChange:g}){return(0,d.jsx)("div",{"data-testid":"sidebar-resize-handle","aria-hidden":"true",onMouseDown:d=>{d.preventDefault();let h=d.clientX,i=a;f.current&&(f.current.style.transition="none");let j=d=>{i=Math.max(b,Math.min(c,a+(d.clientX-h))),e.current&&(e.current.style.width=`${i}px`),f.current&&(f.current.style.paddingLeft=`${i}px`)},k=()=>{document.body.style.cursor="",document.body.style.userSelect="",f.current&&(f.current.style.transition=""),document.removeEventListener("mousemove",j),document.removeEventListener("mouseup",k),g(i)};document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",j),document.addEventListener("mouseup",k)},className:"absolute top-0 right-0 w-1 h-full cursor-col-resize hover:bg-accent-500/40 transition-colors"})}},63474:(a,b,c)=>{c.d(b,{N9:()=>r,dj:()=>s});var d=c(21124),e=c(38301),f=c(20481),g=c(75219),h=c(91292),i=c(16945),j=c(71117),k=c(47089),l=c(11010),m=c(58970),n=c(6074);let o=3e3;function p({type:a,iconColor:b}){let c=`h-5 w-5 ${b}`;switch(a){case"success":return(0,d.jsx)(g.A,{className:c,"data-testid":"toast-icon-success"});case"error":return(0,d.jsx)(h.A,{className:c,"data-testid":"toast-icon-error"});case"warning":return(0,d.jsx)(i.A,{className:c,"data-testid":"toast-icon-warning"});default:return(0,d.jsx)(j.A,{className:c,"data-testid":"toast-icon-info"})}}function q({id:a,message:b,type:c,onClose:g,duration:h=o}){let i=(0,f.c)("common"),j=(0,e.useRef)(null),l=function(a){switch(a){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"}}}(c),[q,r]=(0,e.useState)(!0),{shouldRender:s,isExiting:t}=(0,n.O)(q,m.Ys);(0,e.useRef)(g).current=g;let u=(0,e.useCallback)(()=>{j.current&&clearTimeout(j.current),r(!1)},[]);return(0,d.jsxs)("div",{"data-testid":`toast-${a}`,role:"alert",className:`
22
- ${l.bgColor}
23
- ${l.borderColor}
24
- ${l.textColor}
25
- border rounded-lg shadow-lg p-4 min-w-[300px] max-w-[400px]
26
- flex items-start gap-3
27
- ${t?"animate-out fade-out-0 slide-out-to-right-full duration-200 fill-mode-forwards pointer-events-none":"animate-slide-in"}
28
- `,children:[(0,d.jsx)(p,{type:c,iconColor:l.iconColor}),(0,d.jsx)("p",{className:"flex-1 text-sm font-medium",children:b}),(0,d.jsx)("button",{"data-testid":"toast-close-button",onClick:u,"aria-label":i("closeNotification"),className:`
29
- ${l.textColor}
30
- hover:opacity-70
31
- focus:outline-none focus:ring-2 focus:ring-offset-2
32
- transition-opacity
33
- `,children:(0,d.jsx)(k.A,{className:"h-4 w-4"})})]})}function r({toasts:a,onClose:b}){return(0,d.jsx)("div",{"data-testid":"toast-container","aria-live":"polite",className:"fixed bottom-4 right-4 flex flex-col gap-2",style:{zIndex:l.M.TOAST},children:a.map(a=>(0,d.jsx)(q,{id:a.id,message:a.message,type:a.type,onClose:b,duration:a.duration},a.id))})}function s(){let[a,b]=(0,e.useState)([]),c=(0,e.useRef)(0),d=(0,e.useCallback)((a,d="info",e=o)=>{let f=`toast-${++c.current}-${Date.now()}`,g={id:f,message:a,type:d,duration:e};return b(a=>[...a,g]),f},[]);return{toasts:a,showToast:d,removeToast:(0,e.useCallback)(a=>{b(b=>b.filter(b=>b.id!==a))},[]),clearToasts:(0,e.useCallback)(()=>{b([])},[])}}},67016:(a,b,c)=>{c.d(b,{A7:()=>g,XK:()=>i,dw:()=>h,kA:()=>f});var d=c(17252),e=c(4267);function f(a){return a?a.isWaitingForResponse?"waiting":a.isProcessing?"running":a.isRunning?"ready":"idle":"idle"}function g(a){if(!a)return"idle";let b=Object.values(a).filter(a=>void 0!==a);return 0===b.length?"idle":b.includes("waiting")?"waiting":b.includes("running")?"running":b.includes("generating")?"generating":b.includes("ready")?"ready":"idle"}function h(a,b){return a?Object.entries(a).map(([a,c])=>`${b?.[a]??(0,d.f_)(a,a)}: ${c??"idle"}`).join(", "):""}function i(a){let b=f(void 0!==a.isSessionRunning?{isRunning:a.isSessionRunning??!1,isWaitingForResponse:a.isWaitingForResponse??!1,isProcessing:a.isProcessing??!1}:void 0),c=!!a.lastAssistantMessageAt&&(!a.lastViewedAt||new Date(a.lastAssistantMessageAt)>new Date(a.lastViewedAt)),{cliStatus:g,cliStatusLabels:h}=function(a){let b={},c={},g=a.sessionStatusByInstance;if(!g){for(let g of a.selectedAgents??e.fJ)b[g]=f(a.sessionStatusByCli?.[g]),c[g]=(0,d.oo)(g);return{cliStatus:b,cliStatusLabels:c}}let h=a.agentInstances&&a.agentInstances.length>0?a.agentInstances:(0,d.lu)(a.selectedAgents??e.fJ),i=new Set;for(let a of h)i.add(a.id),b[a.id]=f(g[a.id]),c[a.id]=(0,d.sw)(a);for(let[a,e]of Object.entries(g)){if(i.has(a))continue;let g=f(e);"idle"!==g&&(b[a]=g,c[a]=function(a){let b=d.XH.find(b=>a.startsWith(`${b}-`));if(b){let c=a.slice(b.length+1);return`${(0,d.oo)(b)} ${c}`}return(0,d.f_)(a,a)}(a))}return{cliStatus:b,cliStatusLabels:c}}(a);return{id:a.id,name:a.name,repositoryName:a.repositoryDisplayName??a.repositoryName,status:b,hasUnread:c,lastActivity:a.updatedAt,description:a.description,cliStatus:g,cliStatusLabels:h,worktreePath:a.path}}},81497:(a,b,c)=>{c.d(b,{nR:()=>g});var d=c(21124),e=c(38301),f=c(23312);function g({content:a,delay:b=200,className:c,children:g,metadata:h}){let i=(0,e.useRef)(null),j=(0,e.useRef)(null),[k,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)({top:-9999,left:-9999}),o=(0,e.useCallback)(()=>{null!==j.current&&(clearTimeout(j.current),j.current=null)},[]),p=(0,e.useCallback)(()=>{let a=i.current;a&&(a.scrollWidth>a.clientWidth||h)&&(o(),j.current=setTimeout(()=>{let b=a.getBoundingClientRect(),c=b.left;n({top:b.bottom+4,left:Math.min(b.left,c)}),l(!0),j.current=null},b))},[o,b,h]),q=(0,e.useCallback)(()=>{o(),l(!1)},[o]);return(0,d.jsxs)("span",{ref:i,className:c,onMouseEnter:p,onMouseLeave:q,children:[g??a,k&&"undefined"!=typeof document&&(0,f.createPortal)((0,d.jsxs)("span",{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:m.top,left:m.left},children:[(0,d.jsx)("span",{className:"block break-all",children:a}),h&&(0,d.jsx)("span",{className:"mt-0.5 block whitespace-pre-line font-normal text-background/70",children:h})]}),document.body)]})}}};
@@ -1,47 +0,0 @@
1
- "use strict";exports.id=6791,exports.ids=[6791],exports.modules={10406:(a,b,c)=>{c.d(b,{$G:()=>s,Ir:()=>n,RS:()=>v,Uj:()=>k,Ux:()=>r,Yg:()=>o,_D:()=>p,bM:()=>x,fD:()=>z,k5:()=>y,l$:()=>t,lS:()=>u,r:()=>l,tw:()=>w,vB:()=>j});var d=c(55511),e=c(33873),f=c.n(e),g=c(7956);function h(a){return{id:a.id,name:a.name,displayName:a.display_name||void 0,path:a.path,enabled:1===a.enabled,visible:1===a.visible,cloneUrl:a.clone_url||void 0,normalizedCloneUrl:a.normalized_clone_url||void 0,cloneSource:a.clone_source,isEnvManaged:1===a.is_env_managed,createdAt:new Date(a.created_at),updatedAt:new Date(a.updated_at)}}function i(a){return{id:a.id,cloneUrl:a.clone_url,normalizedCloneUrl:a.normalized_clone_url,targetPath:a.target_path,repositoryId:a.repository_id||void 0,status:a.status,pid:a.pid||void 0,progress:a.progress,errorCategory:a.error_category||void 0,errorCode:a.error_code||void 0,errorMessage:a.error_message||void 0,startedAt:a.started_at?new Date(a.started_at):void 0,completedAt:a.completed_at?new Date(a.completed_at):void 0,createdAt:new Date(a.created_at)}}function j(a,b){let c=(0,d.randomUUID)(),e=Date.now();return a.prepare(`
2
- INSERT INTO repositories (
3
- id, name, path, enabled, visible, clone_url, normalized_clone_url,
4
- clone_source, is_env_managed, created_at, updated_at
5
- )
6
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
7
- `).run(c,b.name,b.path,+(!1!==b.enabled),+(!1!==b.visible),b.cloneUrl||null,b.normalizedCloneUrl||null,b.cloneSource,+!!b.isEnvManaged,e,e),{id:c,name:b.name,path:b.path,enabled:!1!==b.enabled,visible:!1!==b.visible,cloneUrl:b.cloneUrl,normalizedCloneUrl:b.normalizedCloneUrl,cloneSource:b.cloneSource,isEnvManaged:b.isEnvManaged||!1,createdAt:new Date(e),updatedAt:new Date(e)}}function k(a,b){let c=a.prepare(`
8
- SELECT * FROM repositories
9
- WHERE normalized_clone_url = ?
10
- `).get(b);return c?h(c):null}function l(a,b){let c=a.prepare(`
11
- SELECT * FROM repositories
12
- WHERE id = ?
13
- `).get(b);return c?h(c):null}function m(a,b){let c=a.prepare(`
14
- SELECT * FROM repositories
15
- WHERE path = ?
16
- `).get(b);return c?h(c):null}function n(a,b,c){let d=Date.now(),e=["updated_at = ?"],f=[d];void 0!==c.name&&(e.push("name = ?"),f.push(c.name)),void 0!==c.displayName&&(e.push("display_name = ?"),f.push(c.displayName||null)),void 0!==c.enabled&&(e.push("enabled = ?"),f.push(+!!c.enabled)),void 0!==c.visible&&(e.push("visible = ?"),f.push(+!!c.visible)),void 0!==c.cloneUrl&&(e.push("clone_url = ?"),f.push(c.cloneUrl||null)),void 0!==c.normalizedCloneUrl&&(e.push("normalized_clone_url = ?"),f.push(c.normalizedCloneUrl||null)),f.push(b),a.prepare(`
17
- UPDATE repositories
18
- SET ${e.join(", ")}
19
- WHERE id = ?
20
- `).run(...f)}function o(a){return a.prepare(`
21
- SELECT * FROM repositories
22
- ORDER BY name ASC
23
- `).all().map(h)}function p(a){return a.prepare(`
24
- SELECT r.*,
25
- (SELECT COUNT(*) FROM worktrees w WHERE w.repository_path = r.path) AS worktree_count
26
- FROM repositories r
27
- ORDER BY r.name ASC
28
- `).all().map(a=>({...h(a),worktreeCount:Number(a.worktree_count)||0}))}function q(a){return f().resolve(a)}function r(a){if(!a||"string"!=typeof a)return{valid:!1,error:"repositoryPath is required"};if(a.includes("\0"))return{valid:!1,error:"Invalid repository path"};let b=q(a);return(0,g.fW)(b)?{valid:!1,error:"Invalid repository path"}:{valid:!0,resolvedPath:b}}function s(a,b){for(let c of b){let b=q(c);m(a,b)||j(a,{name:f().basename(b),path:b,cloneSource:"local",isEnvManaged:!0,enabled:!0})}let c=function(a,b){let c=a.prepare("SELECT path FROM repositories WHERE enabled = 0").all().map(a=>a.path);return b.filter(a=>!c.includes(q(a)))}(a,b),d=b.filter(a=>!c.includes(a));return{filteredPaths:c,excludedPaths:d,excludedCount:d.length}}function t(a,b){let c=q(b),d=m(a,c);if(d)n(a,d.id,{enabled:!1});else{if(a.prepare("SELECT COUNT(*) as count FROM repositories WHERE enabled = 0").get().count>=1e3)throw Error("Disabled repository limit exceeded");j(a,{name:f().basename(c),path:c,cloneSource:"local",isEnvManaged:!1,enabled:!1})}}function u(a){return a.prepare("SELECT * FROM repositories WHERE enabled = 0 ORDER BY name ASC").all().map(h)}function v(a,b){let c=m(a,q(b));return c?(n(a,c.id,{enabled:!0}),{...c,enabled:!0}):null}function w(a,b){let c=(0,d.randomUUID)(),e=Date.now();return a.prepare(`
29
- INSERT INTO clone_jobs (
30
- id, clone_url, normalized_clone_url, target_path,
31
- status, progress, created_at
32
- )
33
- VALUES (?, ?, ?, ?, 'pending', 0, ?)
34
- `).run(c,b.cloneUrl,b.normalizedCloneUrl,b.targetPath,e),{id:c,cloneUrl:b.cloneUrl,normalizedCloneUrl:b.normalizedCloneUrl,targetPath:b.targetPath,status:"pending",progress:0,createdAt:new Date(e)}}function x(a,b){let c=a.prepare(`
35
- SELECT * FROM clone_jobs
36
- WHERE id = ?
37
- `).get(b);return c?i(c):null}function y(a,b,c){let d=[],e=[];void 0!==c.status&&(d.push("status = ?"),e.push(c.status)),void 0!==c.pid&&(d.push("pid = ?"),e.push(c.pid)),void 0!==c.progress&&(d.push("progress = ?"),e.push(c.progress)),void 0!==c.repositoryId&&(d.push("repository_id = ?"),e.push(c.repositoryId)),void 0!==c.errorCategory&&(d.push("error_category = ?"),e.push(c.errorCategory)),void 0!==c.errorCode&&(d.push("error_code = ?"),e.push(c.errorCode)),void 0!==c.errorMessage&&(d.push("error_message = ?"),e.push(c.errorMessage)),void 0!==c.startedAt&&(d.push("started_at = ?"),e.push(c.startedAt.getTime())),void 0!==c.completedAt&&(d.push("completed_at = ?"),e.push(c.completedAt.getTime())),0!==d.length&&(e.push(b),a.prepare(`
38
- UPDATE clone_jobs
39
- SET ${d.join(", ")}
40
- WHERE id = ?
41
- `).run(...e))}function z(a,b){let c=a.prepare(`
42
- SELECT * FROM clone_jobs
43
- WHERE normalized_clone_url = ?
44
- AND status IN ('pending', 'running')
45
- ORDER BY created_at DESC
46
- LIMIT 1
47
- `).get(b);return c?i(c):null}},56791:(a,b,c)=>{c.d(b,{AC:()=>d.AC,ug:()=>d.ug,KG:()=>d.KG,cD:()=>d.cD,Jj:()=>d.Jj,YX:()=>d.YX,G4:()=>d.G4,hL:()=>d.hL,qp:()=>d.qp,To:()=>d.To,oH:()=>d.oH,py:()=>d.py,yy:()=>d.yy,pE:()=>d.pE,z2:()=>d.z2,cP:()=>d.cP,DF:()=>d.DF,lA:()=>d.lA,Qp:()=>d.Qp,th:()=>d.th,oZ:()=>d.oZ,ZP:()=>d.ZP,Ys:()=>d.Ys,vg:()=>d.vg,Rm:()=>d.Rm,BN:()=>d.BN,m0:()=>d.m0,Tk:()=>d.Tk,iT:()=>d.iT,gp:()=>d.gp,yE:()=>d.yE,BE:()=>d.BE,qK:()=>d.qK,p4:()=>d.p4,r8:()=>d.r8,of:()=>d.of,DN:()=>d.DN,pZ:()=>d.pZ,kA:()=>d.kA,VL:()=>d.VL,CF:()=>d.CF,NV:()=>d.NV,ce:()=>d.ce,y1:()=>d.y1,Nr:()=>d.Nr,ob:()=>d.ob,fr:()=>d.fr,Ui:()=>d.Ui,P9:()=>d.P9,eN:()=>d.eN,vi:()=>d.vi,uJ:()=>d.uJ,yT:()=>d.yT,PL:()=>d.PL,jp:()=>d.jp,nQ:()=>d.nQ,yb:()=>d.yb,GA:()=>d.GA,Cs:()=>d.Cs,xR:()=>d.xR,az:()=>d.az,nZ:()=>d.nZ,PP:()=>d.PP,Dx:()=>d.Dx,O:()=>d.O,EU:()=>d.EU,HZ:()=>d.HZ,UY:()=>d.UY,cw:()=>d.cw,jJ:()=>d.jJ,DC:()=>d.DC,gb:()=>d.gb,yB:()=>d.yB,uy:()=>d.uy,s:()=>d.s,iu:()=>d.iu,hq:()=>d.hq,z1:()=>d.z1,bl:()=>d.bl,jA:()=>d.jA,ZL:()=>d.ZL});var d=c(25537);c(88807),c(36395),c(20416),c(10406),c(29021),c(33873),c(21820),c(7956),(0,c(72626).h)("db-migration-path")}};