commandmate 0.23.0 → 0.24.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 (662) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +393 -384
  3. package/.next/app-path-routes-manifest.json +15 -14
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/react-loadable-manifest.json +1 -1
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  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 +2 -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/fs/browse/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  48. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  49. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  51. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  52. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  54. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  55. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/push/escalation/route.js +1 -0
  59. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -0
  60. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -0
  61. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  62. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/push/vapid/route.js +1 -1
  64. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  65. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  68. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  70. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  72. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  73. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/clone/route.js +1 -1
  75. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/restore/route.js +1 -1
  79. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/route.js +1 -1
  82. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  83. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/repositories/scan/route.js +1 -1
  85. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  86. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/repositories/sync/route.js +1 -1
  88. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  89. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  100. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/todos/route.js +1 -1
  104. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  106. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/verification/runs/route.js +1 -1
  108. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  111. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  114. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  119. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  122. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  161. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +5 -5
  168. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  185. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  191. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
  217. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  225. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/route.js +1 -1
  244. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/chat/page.js +2 -2
  247. package/.next/server/app/chat/page.js.nft.json +1 -1
  248. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  249. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  250. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/more/page.js +2 -2
  252. package/.next/server/app/more/page.js.nft.json +1 -1
  253. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  254. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  255. package/.next/server/app/page.js +1 -1
  256. package/.next/server/app/page.js.nft.json +1 -1
  257. package/.next/server/app/page_client-reference-manifest.js +1 -1
  258. package/.next/server/app/proxy/[...path]/route.js +1 -1
  259. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/repositories/page.js +2 -2
  261. package/.next/server/app/repositories/page.js.nft.json +1 -1
  262. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  263. package/.next/server/app/review/page.js +1 -1
  264. package/.next/server/app/review/page.js.nft.json +1 -1
  265. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  266. package/.next/server/app/sessions/page.js +1 -1
  267. package/.next/server/app/sessions/page.js.nft.json +1 -1
  268. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/skills/[skillId]/page.js +2 -2
  270. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  271. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  272. package/.next/server/app/skills/installed/page.js +2 -2
  273. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  274. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  275. package/.next/server/app/skills/page.js +1 -1
  276. package/.next/server/app/skills/page.js.nft.json +1 -1
  277. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/worktrees/[id]/page.js +6 -6
  280. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  281. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app-paths-manifest.json +15 -14
  284. package/.next/server/chunks/1029.js +1 -1
  285. package/.next/server/chunks/1296.js +1 -1
  286. package/.next/server/chunks/1366.js +1 -1
  287. package/.next/server/chunks/1601.js +7 -0
  288. package/.next/server/chunks/1825.js +1 -1
  289. package/.next/server/chunks/2119.js +1 -1
  290. package/.next/server/chunks/2445.js +1 -1
  291. package/.next/server/chunks/2546.js +1 -1
  292. package/.next/server/chunks/3417.js +1 -1
  293. package/.next/server/chunks/3451.js +1 -1
  294. package/.next/server/chunks/3480.js +1 -1
  295. package/.next/server/chunks/3543.js +1 -1
  296. package/.next/server/chunks/3945.js +1 -1
  297. package/.next/server/chunks/4393.js +1 -0
  298. package/.next/server/chunks/4444.js +1 -1
  299. package/.next/server/chunks/4455.js +1 -0
  300. package/.next/server/chunks/5164.js +1 -0
  301. package/.next/server/chunks/5959.js +5 -5
  302. package/.next/server/chunks/5998.js +1 -1
  303. package/.next/server/chunks/6130.js +1 -1
  304. package/.next/server/chunks/6159.js +1 -1
  305. package/.next/server/chunks/6274.js +2 -2
  306. package/.next/server/chunks/6401.js +1 -1
  307. package/.next/server/chunks/7458.js +5 -5
  308. package/.next/server/chunks/8536.js +1 -1
  309. package/.next/server/chunks/880.js +21 -0
  310. package/.next/server/chunks/8807.js +134 -129
  311. package/.next/server/chunks/9058.js +1 -1
  312. package/.next/server/chunks/9123.js +8 -8
  313. package/.next/server/chunks/9358.js +1 -1
  314. package/.next/server/chunks/9373.js +3 -3
  315. package/.next/server/chunks/9687.js +1 -1
  316. package/.next/server/middleware-build-manifest.js +1 -1
  317. package/.next/server/middleware-manifest.json +5 -5
  318. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  319. package/.next/server/pages/500.html +1 -1
  320. package/.next/server/server-reference-manifest.json +1 -1
  321. package/.next/static/chunks/4322-dfd5a7119b5ba4fc.js +1 -0
  322. package/.next/static/chunks/{4974-eaf66770bfa9dea0.js → 4974-35592ec312322124.js} +1 -1
  323. package/.next/static/chunks/5229-0610b4e3288e777d.js +1 -0
  324. package/.next/static/chunks/6381-18a6a02a94d00d76.js +1 -0
  325. package/.next/static/chunks/7229.7f0f5a7032b612b4.js +1 -0
  326. package/.next/static/chunks/{744-fa8c0ae444c8338c.js → 744-3ad06d8c8ca482fc.js} +1 -1
  327. package/.next/static/chunks/app/api/app/update/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
  328. package/.next/static/chunks/app/api/app/update-check/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
  329. package/.next/static/chunks/app/api/assistant/conversation/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
  330. package/.next/static/chunks/app/api/assistant/current-output/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
  331. package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +1 -0
  332. package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +1 -0
  333. package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +1 -0
  334. package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +1 -0
  335. package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +1 -0
  336. package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +1 -0
  337. package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +1 -0
  338. package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +1 -0
  339. package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +1 -0
  340. package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +1 -0
  341. package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +1 -0
  342. package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +1 -0
  343. package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +1 -0
  344. package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +1 -0
  345. package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +1 -0
  346. package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +1 -0
  347. package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +1 -0
  348. package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +1 -0
  349. package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +1 -0
  350. package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +1 -0
  351. package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +1 -0
  352. package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +1 -0
  353. package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +1 -0
  354. package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +1 -0
  355. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +1 -0
  356. package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +1 -0
  357. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +1 -0
  358. package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +1 -0
  359. package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +1 -0
  360. package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +1 -0
  361. package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +1 -0
  362. package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +1 -0
  363. package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +1 -0
  364. package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +1 -0
  365. package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +1 -0
  366. package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +1 -0
  367. package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +1 -0
  368. package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +1 -0
  369. package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +1 -0
  370. package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +1 -0
  371. package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +1 -0
  372. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +1 -0
  373. package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +1 -0
  374. package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +1 -0
  375. package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +1 -0
  376. package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +1 -0
  377. package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +1 -0
  378. package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +1 -0
  379. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +1 -0
  380. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +1 -0
  381. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +1 -0
  382. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +1 -0
  383. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +1 -0
  384. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +1 -0
  385. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +1 -0
  386. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +1 -0
  387. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +1 -0
  388. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +1 -0
  389. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +1 -0
  390. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +1 -0
  391. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +1 -0
  392. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +1 -0
  393. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +1 -0
  394. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +1 -0
  396. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +1 -0
  397. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +1 -0
  398. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +1 -0
  399. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +1 -0
  400. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +1 -0
  401. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +1 -0
  402. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +1 -0
  403. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +1 -0
  404. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +1 -0
  405. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +1 -0
  451. package/.next/static/chunks/app/chat/page-15d13fc024d78f5d.js +1 -0
  452. package/.next/static/chunks/app/layout-6a26ea22d5cf03dc.js +1 -0
  453. package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +1 -0
  454. package/.next/static/chunks/app/more/page-b8ba537baeac8d5b.js +1 -0
  455. package/.next/static/chunks/app/page-afc64708362f31e5.js +1 -0
  456. package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +1 -0
  457. package/.next/static/chunks/app/repositories/page-3469dacb6be7842f.js +1 -0
  458. package/.next/static/chunks/app/review/page-2d9cb7e068f8f35a.js +1 -0
  459. package/.next/static/chunks/app/sessions/page-7470c2bfd89e0df9.js +1 -0
  460. package/.next/static/chunks/app/skills/[skillId]/page-5e24481162f7ea78.js +1 -0
  461. package/.next/static/chunks/app/skills/installed/page-efd2d710a27f9735.js +1 -0
  462. package/.next/static/chunks/app/skills/page-0498adfc6e48684b.js +1 -0
  463. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9ddcb224594f620f.js +1 -0
  464. package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +1 -0
  465. package/.next/static/chunks/app/worktrees/[id]/page-e611d30e47989e5d.js +1 -0
  466. package/.next/static/chunks/{webpack-180bebdee221b6f4.js → webpack-3534d858912a6c92.js} +1 -1
  467. package/.next/static/css/3ac44cfc082d02ad.css +1 -0
  468. package/.next/static/smu4mnL7qMf8w38n9dQJE/_buildManifest.js +1 -0
  469. package/.next/trace +12 -12
  470. package/.next/types/app/api/push/escalation/route.ts +347 -0
  471. package/.next/types/routes.d.ts +2 -1
  472. package/.next/types/validator.ts +9 -0
  473. package/dist/cli/commands/capture.d.ts.map +1 -1
  474. package/dist/cli/commands/capture.js +6 -0
  475. package/dist/cli/commands/instances.d.ts.map +1 -1
  476. package/dist/cli/commands/instances.js +19 -1
  477. package/dist/cli/commands/task.d.ts.map +1 -1
  478. package/dist/cli/commands/task.js +6 -0
  479. package/dist/cli/commands/verify.js +6 -1
  480. package/dist/cli/types/api-responses.d.ts +46 -0
  481. package/dist/cli/types/api-responses.d.ts.map +1 -1
  482. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  483. package/dist/cli/utils/verify-runner.js +17 -1
  484. package/dist/server/locales/en/notifications.json +20 -1
  485. package/dist/server/locales/ja/notifications.json +20 -1
  486. package/dist/server/server.js +23 -0
  487. package/dist/server/src/lib/db/db.js +2 -1
  488. package/dist/server/src/lib/db/migrations/index.js +2 -0
  489. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  490. package/dist/server/src/lib/db/migrations/v56-gate-result-source.js +58 -0
  491. package/dist/server/src/lib/db/verification-db.js +26 -6
  492. package/dist/server/src/lib/detection/model-info-extractor.js +384 -0
  493. package/dist/server/src/lib/hooks/sources/antigravity/source.js +4 -0
  494. package/dist/server/src/lib/hooks/sources/claude/source.js +7 -0
  495. package/dist/server/src/lib/hooks/sources/codex/source.js +5 -0
  496. package/dist/server/src/lib/hooks/sources/define-source.js +8 -0
  497. package/dist/server/src/lib/hooks/sources/event-mapper.js +20 -0
  498. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +6 -0
  499. package/dist/server/src/lib/hooks/sources/opencode/mappers.js +22 -0
  500. package/dist/server/src/lib/hooks/sources/opencode/source.js +3 -0
  501. package/dist/server/src/lib/polling/response-checker.js +47 -0
  502. package/dist/server/src/lib/push/escalation-settings.js +114 -0
  503. package/dist/server/src/lib/push/index.js +21 -1
  504. package/dist/server/src/lib/push/notification-dedup.js +35 -0
  505. package/dist/server/src/lib/push/push-sender.js +66 -7
  506. package/dist/server/src/lib/push/waiting-push-notifier.js +231 -0
  507. package/dist/server/src/lib/realtime/waiting-broadcast.js +93 -0
  508. package/dist/server/src/lib/session/agent-event-state.js +260 -0
  509. package/dist/server/src/lib/session/current-output-builder.js +24 -0
  510. package/dist/server/src/lib/session/next-action-helper.js +93 -0
  511. package/dist/server/src/lib/session/prompt-waiting-composition.js +38 -0
  512. package/dist/server/src/lib/session/waiting-episode-state.js +136 -0
  513. package/dist/server/src/lib/session/waiting-kind.js +59 -0
  514. package/dist/server/src/lib/tasks/contract-message.js +64 -21
  515. package/dist/server/src/lib/tasks/contract-parser.js +58 -12
  516. package/dist/server/src/lib/verification/gate-runner.js +64 -22
  517. package/dist/server/src/lib/verification/verify-config.js +84 -51
  518. package/dist/server/src/lib/ws-server.js +9 -0
  519. package/dist/server/src/types/sidebar.js +68 -0
  520. package/package.json +1 -1
  521. package/.next/server/chunks/6283.js +0 -1
  522. package/.next/server/chunks/646.js +0 -21
  523. package/.next/static/chunks/4560-0917ae2e6a0e5400.js +0 -1
  524. package/.next/static/chunks/6488-95ba9d24a76f0cc5.js +0 -1
  525. package/.next/static/chunks/7229.edb331fb9fbafa27.js +0 -1
  526. package/.next/static/chunks/app/api/assistant/messages/route-973ec48531555712.js +0 -1
  527. package/.next/static/chunks/app/api/assistant/session/route-973ec48531555712.js +0 -1
  528. package/.next/static/chunks/app/api/assistant/start/route-973ec48531555712.js +0 -1
  529. package/.next/static/chunks/app/api/assistant/terminal/route-973ec48531555712.js +0 -1
  530. package/.next/static/chunks/app/api/assistant/tools/route-973ec48531555712.js +0 -1
  531. package/.next/static/chunks/app/api/auth/login/route-973ec48531555712.js +0 -1
  532. package/.next/static/chunks/app/api/auth/logout/route-973ec48531555712.js +0 -1
  533. package/.next/static/chunks/app/api/auth/status/route-973ec48531555712.js +0 -1
  534. package/.next/static/chunks/app/api/daily-summary/route-973ec48531555712.js +0 -1
  535. package/.next/static/chunks/app/api/daily-summary/status/route-973ec48531555712.js +0 -1
  536. package/.next/static/chunks/app/api/external-apps/[id]/health/route-973ec48531555712.js +0 -1
  537. package/.next/static/chunks/app/api/external-apps/[id]/route-973ec48531555712.js +0 -1
  538. package/.next/static/chunks/app/api/external-apps/route-973ec48531555712.js +0 -1
  539. package/.next/static/chunks/app/api/fs/browse/route-973ec48531555712.js +0 -1
  540. package/.next/static/chunks/app/api/fs/recent-paths/route-973ec48531555712.js +0 -1
  541. package/.next/static/chunks/app/api/hooks/agent-event/route-973ec48531555712.js +0 -1
  542. package/.next/static/chunks/app/api/hooks/claude-done/route-973ec48531555712.js +0 -1
  543. package/.next/static/chunks/app/api/hooks/permission-request/route-973ec48531555712.js +0 -1
  544. package/.next/static/chunks/app/api/metrics/vibe/route-973ec48531555712.js +0 -1
  545. package/.next/static/chunks/app/api/ollama/models/route-973ec48531555712.js +0 -1
  546. package/.next/static/chunks/app/api/push/subscriptions/route-973ec48531555712.js +0 -1
  547. package/.next/static/chunks/app/api/push/vapid/route-973ec48531555712.js +0 -1
  548. package/.next/static/chunks/app/api/repositories/[id]/route-973ec48531555712.js +0 -1
  549. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-973ec48531555712.js +0 -1
  550. package/.next/static/chunks/app/api/repositories/[id]/todos/route-973ec48531555712.js +0 -1
  551. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-973ec48531555712.js +0 -1
  552. package/.next/static/chunks/app/api/repositories/clone/route-973ec48531555712.js +0 -1
  553. package/.next/static/chunks/app/api/repositories/excluded/route-973ec48531555712.js +0 -1
  554. package/.next/static/chunks/app/api/repositories/restore/route-973ec48531555712.js +0 -1
  555. package/.next/static/chunks/app/api/repositories/route-973ec48531555712.js +0 -1
  556. package/.next/static/chunks/app/api/repositories/scan/route-973ec48531555712.js +0 -1
  557. package/.next/static/chunks/app/api/repositories/sync/route-973ec48531555712.js +0 -1
  558. package/.next/static/chunks/app/api/repositories/validate-path/route-973ec48531555712.js +0 -1
  559. package/.next/static/chunks/app/api/sidebar/group-order/route-973ec48531555712.js +0 -1
  560. package/.next/static/chunks/app/api/skills/[id]/route-973ec48531555712.js +0 -1
  561. package/.next/static/chunks/app/api/skills/installations/route-973ec48531555712.js +0 -1
  562. package/.next/static/chunks/app/api/skills/operations/route-973ec48531555712.js +0 -1
  563. package/.next/static/chunks/app/api/skills/reindex/route-973ec48531555712.js +0 -1
  564. package/.next/static/chunks/app/api/skills/route-973ec48531555712.js +0 -1
  565. package/.next/static/chunks/app/api/slash-commands/route-973ec48531555712.js +0 -1
  566. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-973ec48531555712.js +0 -1
  567. package/.next/static/chunks/app/api/tasks/[taskId]/route-973ec48531555712.js +0 -1
  568. package/.next/static/chunks/app/api/templates/[id]/route-973ec48531555712.js +0 -1
  569. package/.next/static/chunks/app/api/templates/route-973ec48531555712.js +0 -1
  570. package/.next/static/chunks/app/api/todos/route-973ec48531555712.js +0 -1
  571. package/.next/static/chunks/app/api/verification/runs/[runId]/route-973ec48531555712.js +0 -1
  572. package/.next/static/chunks/app/api/verification/runs/route-973ec48531555712.js +0 -1
  573. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-973ec48531555712.js +0 -1
  574. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-973ec48531555712.js +0 -1
  575. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-973ec48531555712.js +0 -1
  576. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-973ec48531555712.js +0 -1
  577. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-973ec48531555712.js +0 -1
  578. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-973ec48531555712.js +0 -1
  579. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-973ec48531555712.js +0 -1
  580. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-973ec48531555712.js +0 -1
  581. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-973ec48531555712.js +0 -1
  582. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-973ec48531555712.js +0 -1
  583. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-973ec48531555712.js +0 -1
  584. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-973ec48531555712.js +0 -1
  585. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-973ec48531555712.js +0 -1
  586. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-973ec48531555712.js +0 -1
  587. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-973ec48531555712.js +0 -1
  588. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-973ec48531555712.js +0 -1
  589. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-973ec48531555712.js +0 -1
  590. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-973ec48531555712.js +0 -1
  591. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-973ec48531555712.js +0 -1
  592. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-973ec48531555712.js +0 -1
  593. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-973ec48531555712.js +0 -1
  594. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-973ec48531555712.js +0 -1
  595. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-973ec48531555712.js +0 -1
  596. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-973ec48531555712.js +0 -1
  597. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-973ec48531555712.js +0 -1
  598. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-973ec48531555712.js +0 -1
  599. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-973ec48531555712.js +0 -1
  600. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-973ec48531555712.js +0 -1
  601. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-973ec48531555712.js +0 -1
  602. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-973ec48531555712.js +0 -1
  603. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-973ec48531555712.js +0 -1
  604. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-973ec48531555712.js +0 -1
  605. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-973ec48531555712.js +0 -1
  606. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-973ec48531555712.js +0 -1
  607. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-973ec48531555712.js +0 -1
  608. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-973ec48531555712.js +0 -1
  609. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-973ec48531555712.js +0 -1
  610. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-973ec48531555712.js +0 -1
  611. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-973ec48531555712.js +0 -1
  612. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-973ec48531555712.js +0 -1
  613. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-973ec48531555712.js +0 -1
  614. package/.next/static/chunks/app/api/worktrees/[id]/route-973ec48531555712.js +0 -1
  615. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-973ec48531555712.js +0 -1
  616. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-973ec48531555712.js +0 -1
  617. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-973ec48531555712.js +0 -1
  618. package/.next/static/chunks/app/api/worktrees/[id]/search/route-973ec48531555712.js +0 -1
  619. package/.next/static/chunks/app/api/worktrees/[id]/send/route-973ec48531555712.js +0 -1
  620. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-973ec48531555712.js +0 -1
  621. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-973ec48531555712.js +0 -1
  622. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-973ec48531555712.js +0 -1
  623. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-973ec48531555712.js +0 -1
  624. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-973ec48531555712.js +0 -1
  625. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-973ec48531555712.js +0 -1
  626. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-973ec48531555712.js +0 -1
  627. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-973ec48531555712.js +0 -1
  628. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-973ec48531555712.js +0 -1
  629. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-973ec48531555712.js +0 -1
  630. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-973ec48531555712.js +0 -1
  631. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-973ec48531555712.js +0 -1
  632. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-973ec48531555712.js +0 -1
  633. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-973ec48531555712.js +0 -1
  634. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-973ec48531555712.js +0 -1
  635. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-973ec48531555712.js +0 -1
  636. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-973ec48531555712.js +0 -1
  637. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-973ec48531555712.js +0 -1
  638. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-973ec48531555712.js +0 -1
  639. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-973ec48531555712.js +0 -1
  640. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-973ec48531555712.js +0 -1
  641. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-973ec48531555712.js +0 -1
  642. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-973ec48531555712.js +0 -1
  643. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-973ec48531555712.js +0 -1
  644. package/.next/static/chunks/app/api/worktrees/route-973ec48531555712.js +0 -1
  645. package/.next/static/chunks/app/chat/page-83a2238ab453afaa.js +0 -1
  646. package/.next/static/chunks/app/layout-86574192bd3c0e6b.js +0 -1
  647. package/.next/static/chunks/app/manifest.webmanifest/route-973ec48531555712.js +0 -1
  648. package/.next/static/chunks/app/more/page-1619018cac999bbc.js +0 -1
  649. package/.next/static/chunks/app/page-a34d26812f085b6c.js +0 -1
  650. package/.next/static/chunks/app/proxy/[...path]/route-973ec48531555712.js +0 -1
  651. package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +0 -1
  652. package/.next/static/chunks/app/review/page-b559bfb11c46931b.js +0 -1
  653. package/.next/static/chunks/app/sessions/page-3fa7e767d0ab3889.js +0 -1
  654. package/.next/static/chunks/app/skills/[skillId]/page-10d6f983e5f06ffb.js +0 -1
  655. package/.next/static/chunks/app/skills/installed/page-6641f95e6a6e5f9d.js +0 -1
  656. package/.next/static/chunks/app/skills/page-184f8e23e31a3667.js +0 -1
  657. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-6041d3c3db326317.js +0 -1
  658. package/.next/static/chunks/app/worktrees/[id]/layout-973ec48531555712.js +0 -1
  659. package/.next/static/chunks/app/worktrees/[id]/page-966a451ae7b0903a.js +0 -1
  660. package/.next/static/css/d3453a6876553d32.css +0 -1
  661. package/.next/static/wH6K6QNPHSdATFkVoIcy3/_buildManifest.js +0 -1
  662. /package/.next/static/{wH6K6QNPHSdATFkVoIcy3 → smu4mnL7qMf8w38n9dQJE}/_ssgManifest.js +0 -0
@@ -8,7 +8,8 @@
8
8
  * Server-only: reads from disk, so import this from API routes / CLI only.
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.VerifyConfigError = exports.DEFAULT_MAX_LOG_TAIL_BYTES = exports.DEFAULT_TIMEOUT_SEC = exports.VERIFY_CONFIG_RELATIVE_PATH = exports.RESERVED_GATE_IDS = exports.ENV_CLEAN_GATE_ID = exports.SCOPE_GATE_ID = exports.WORK_EVIDENCE_GATE_ID = void 0;
11
+ exports.VerifyConfigError = exports.GATE_ID_PATTERN = exports.DEFAULT_MAX_LOG_TAIL_BYTES = exports.DEFAULT_TIMEOUT_SEC = exports.VERIFY_CONFIG_RELATIVE_PATH = exports.RESERVED_GATE_IDS = exports.ENV_CLEAN_GATE_ID = exports.SCOPE_GATE_ID = exports.WORK_EVIDENCE_GATE_ID = void 0;
12
+ exports.validateGateEntries = validateGateEntries;
12
13
  exports.loadVerifyConfig = loadVerifyConfig;
13
14
  const fs_1 = require("fs");
14
15
  const path_1 = require("path");
@@ -46,7 +47,15 @@ exports.DEFAULT_MAX_LOG_TAIL_BYTES = 8192;
46
47
  const MIN_TIMEOUT_SEC = 1;
47
48
  const MAX_TIMEOUT_SEC = 7200;
48
49
  const MAX_LOG_TAIL_BYTES = 1048576;
49
- const GATE_ID_PATTERN = /^[a-z0-9][a-z0-9-]{0,31}$/;
50
+ /**
51
+ * Shape a gate id may take, wherever a gate is declared.
52
+ *
53
+ * Exported because the task contract declares gates too (#1791) and names them
54
+ * in `verify.gates`. A second copy of this expression would let the two
55
+ * declaration sites drift into accepting different ids, and a contract gate the
56
+ * runner refuses to resolve is a completion criterion nothing can evaluate.
57
+ */
58
+ exports.GATE_ID_PATTERN = /^[a-z0-9][a-z0-9-]{0,31}$/;
50
59
  const TOP_LEVEL_KEYS = ['version', 'gates', 'options'];
51
60
  const GATE_KEYS = ['id', 'command', 'timeoutSec'];
52
61
  const OPTION_KEYS = [
@@ -108,65 +117,89 @@ function collectUnknownKeys(mapping, allowed, at, issues) {
108
117
  }
109
118
  }
110
119
  }
111
- function validateGates(value, issues) {
112
- if (value === undefined || value === null) {
113
- issues.push('gates: required, at least one gate must be defined');
114
- return [];
115
- }
120
+ /**
121
+ * Validate a list of `{ id, command, timeoutSec }` entries.
122
+ *
123
+ * Shared with the task contract's `verify.gateDefinitions` (#1791), which
124
+ * declares gates in the same shape and must be held to the same constraints —
125
+ * id pattern, reserved ids, duplicates, integer timeout in range. Calling this
126
+ * is what makes "the same constraints" a fact rather than a comment: a contract
127
+ * gate accepted here is one the runner can execute and the report can name.
128
+ *
129
+ * Deliberately does *not* decide whether the list may be absent or empty. That
130
+ * is the caller's rule: verify.yaml requires at least one gate, a contract that
131
+ * declares none is the normal case.
132
+ *
133
+ * @param at path prefix for issue messages (`gates`, `verify.gateDefinitions`)
134
+ * @returns the accepted entries; an entry that produced an issue is dropped so
135
+ * the result never carries a value that failed validation
136
+ */
137
+ function validateGateEntries(value, at, issues) {
116
138
  if (!Array.isArray(value)) {
117
- issues.push(`gates: must be a list (got ${describe(value)})`);
118
- return [];
119
- }
120
- if (value.length === 0) {
121
- issues.push('gates: at least one gate must be defined');
139
+ issues.push(`${at}: must be a list (got ${describe(value)})`);
122
140
  return [];
123
141
  }
124
142
  const gates = [];
125
143
  const seenIds = new Set();
126
144
  value.forEach((entry, index) => {
127
- const at = `gates[${index}]`;
128
- const issuesBefore = issues.length;
129
- if (!isMapping(entry)) {
130
- issues.push(`${at}: must be a mapping (got ${describe(entry)})`);
131
- return;
132
- }
133
- collectUnknownKeys(entry, GATE_KEYS, at, issues);
134
- if (typeof entry.id !== 'string' || entry.id === '') {
135
- issues.push(`${at}.id: required, must be a non-empty string (got ${describe(entry.id)})`);
136
- }
137
- else if (!GATE_ID_PATTERN.test(entry.id)) {
138
- issues.push(`${at}.id: "${entry.id}" must match ${GATE_ID_PATTERN.source}`);
139
- }
140
- else if (exports.RESERVED_GATE_IDS.includes(entry.id)) {
141
- issues.push(`${at}.id: "${entry.id}" is reserved for a built-in gate`);
145
+ const entryAt = `${at}[${index}]`;
146
+ validateGateEntry(entry, entryAt, seenIds, gates, issues);
147
+ });
148
+ return gates;
149
+ }
150
+ /** One gate entry; accepted entries are appended to `gates`. */
151
+ function validateGateEntry(entry, at, seenIds, gates, issues) {
152
+ const issuesBefore = issues.length;
153
+ if (!isMapping(entry)) {
154
+ issues.push(`${at}: must be a mapping (got ${describe(entry)})`);
155
+ return;
156
+ }
157
+ collectUnknownKeys(entry, GATE_KEYS, at, issues);
158
+ if (typeof entry.id !== 'string' || entry.id === '') {
159
+ issues.push(`${at}.id: required, must be a non-empty string (got ${describe(entry.id)})`);
160
+ }
161
+ else if (!exports.GATE_ID_PATTERN.test(entry.id)) {
162
+ issues.push(`${at}.id: "${entry.id}" must match ${exports.GATE_ID_PATTERN.source}`);
163
+ }
164
+ else if (exports.RESERVED_GATE_IDS.includes(entry.id)) {
165
+ issues.push(`${at}.id: "${entry.id}" is reserved for a built-in gate`);
166
+ }
167
+ else if (seenIds.has(entry.id)) {
168
+ issues.push(`${at}.id: duplicate gate id "${entry.id}"`);
169
+ }
170
+ else {
171
+ seenIds.add(entry.id);
172
+ }
173
+ if (typeof entry.command !== 'string' || entry.command.trim() === '') {
174
+ issues.push(`${at}.command: required, must be a non-empty string (got ${describe(entry.command)})`);
175
+ }
176
+ let timeoutSec = exports.DEFAULT_TIMEOUT_SEC;
177
+ if (entry.timeoutSec !== undefined) {
178
+ const parsed = asInteger(entry.timeoutSec);
179
+ if (parsed === null) {
180
+ issues.push(`${at}.timeoutSec: must be an integer (got ${describe(entry.timeoutSec)})`);
142
181
  }
143
- else if (seenIds.has(entry.id)) {
144
- issues.push(`${at}.id: duplicate gate id "${entry.id}"`);
182
+ else if (parsed < MIN_TIMEOUT_SEC || parsed > MAX_TIMEOUT_SEC) {
183
+ issues.push(`${at}.timeoutSec: must be ${MIN_TIMEOUT_SEC}..${MAX_TIMEOUT_SEC} (got ${parsed})`);
145
184
  }
146
185
  else {
147
- seenIds.add(entry.id);
148
- }
149
- if (typeof entry.command !== 'string' || entry.command.trim() === '') {
150
- issues.push(`${at}.command: required, must be a non-empty string (got ${describe(entry.command)})`);
151
- }
152
- let timeoutSec = exports.DEFAULT_TIMEOUT_SEC;
153
- if (entry.timeoutSec !== undefined) {
154
- const parsed = asInteger(entry.timeoutSec);
155
- if (parsed === null) {
156
- issues.push(`${at}.timeoutSec: must be an integer (got ${describe(entry.timeoutSec)})`);
157
- }
158
- else if (parsed < MIN_TIMEOUT_SEC || parsed > MAX_TIMEOUT_SEC) {
159
- issues.push(`${at}.timeoutSec: must be ${MIN_TIMEOUT_SEC}..${MAX_TIMEOUT_SEC} (got ${parsed})`);
160
- }
161
- else {
162
- timeoutSec = parsed;
163
- }
186
+ timeoutSec = parsed;
164
187
  }
165
- if (issues.length === issuesBefore) {
166
- gates.push({ id: entry.id, command: entry.command, timeoutSec });
167
- }
168
- });
169
- return gates;
188
+ }
189
+ if (issues.length === issuesBefore) {
190
+ gates.push({ id: entry.id, command: entry.command, timeoutSec });
191
+ }
192
+ }
193
+ function validateGates(value, issues) {
194
+ if (value === undefined || value === null) {
195
+ issues.push('gates: required, at least one gate must be defined');
196
+ return [];
197
+ }
198
+ if (Array.isArray(value) && value.length === 0) {
199
+ issues.push('gates: at least one gate must be defined');
200
+ return [];
201
+ }
202
+ return validateGateEntries(value, 'gates', issues);
170
203
  }
171
204
  function validateOptions(value, issues) {
172
205
  const options = {
@@ -28,6 +28,7 @@ const tmux_control_mode_flags_1 = require("./tmux/tmux-control-mode-flags");
28
28
  const cache_1 = require("./external-apps/cache");
29
29
  const version_checker_1 = require("../lib/version-checker");
30
30
  const types_2 = require("../lib/realtime/types");
31
+ const waiting_broadcast_1 = require("../lib/realtime/waiting-broadcast");
31
32
  const logger_1 = require("../lib/logger");
32
33
  const logger = (0, logger_1.createLogger)('ws-server');
33
34
  // Global state
@@ -231,6 +232,11 @@ function isExpectedWebSocketError(error) {
231
232
  */
232
233
  function setupWebSocket(server) {
233
234
  wss = new ws_1.WebSocketServer({ noServer: true });
235
+ // Issue #1788: publish the waiting edge to the worktree room. Started here
236
+ // rather than at module scope so the listener's lifetime matches the server's
237
+ // — and so the closure it registers is the one holding *this* bundle's `rooms`
238
+ // map, which is what a broadcast has to reach.
239
+ (0, waiting_broadcast_1.startWaitingStatusBroadcast)(handleBroadcast);
234
240
  // Handle upgrade requests - only accept app WebSocket connections, not Next.js HMR
235
241
  server.on('upgrade', (request, socket, head) => {
236
242
  const pathname = request.url || '/';
@@ -881,6 +887,9 @@ function cleanupRooms(worktreeIds) {
881
887
  * Used for testing and graceful shutdown
882
888
  */
883
889
  function closeWebSocket() {
890
+ // Issue #1788: drop the waiting-edge subscription first — it outlives `wss`
891
+ // otherwise, and CI shares one process across the whole suite.
892
+ (0, waiting_broadcast_1.stopWaitingStatusBroadcast)();
884
893
  if (wss) {
885
894
  // Close all client connections
886
895
  clients.forEach((clientInfo) => {
@@ -8,12 +8,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.deriveCliStatus = void 0;
9
9
  exports.aggregateCliStatus = aggregateCliStatus;
10
10
  exports.formatCliStatusBreakdown = formatCliStatusBreakdown;
11
+ exports.deriveWorktreeWaitingDetail = deriveWorktreeWaitingDetail;
11
12
  exports.calculateHasUnread = calculateHasUnread;
12
13
  exports.toBranchItem = toBranchItem;
13
14
  const types_1 = require("../lib/cli-tools/types");
14
15
  const selected_agents_validator_1 = require("../lib/selected-agents-validator");
15
16
  const status_mapping_1 = require("../lib/session/status-mapping");
16
17
  Object.defineProperty(exports, "deriveCliStatus", { enumerable: true, get: function () { return status_mapping_1.deriveCliStatus; } });
18
+ const next_action_helper_1 = require("../lib/session/next-action-helper");
19
+ /**
20
+ * `BranchStatus` → `SessionStatus`, so the sidebar can reuse `getNextAction`
21
+ * (Issue #1787) instead of growing a second next-action table.
22
+ *
23
+ * `generating` folds into `running`: `SessionStatus` has no fifth value, and the
24
+ * next action is identical for both ("it is working, leave it alone").
25
+ * `idle` maps to `null` — `getNextAction` distinguishes "no session" from
26
+ * "session sitting idle" only through null, and both mean "start it".
27
+ */
28
+ const BRANCH_STATUS_TO_SESSION_STATUS = {
29
+ idle: null,
30
+ ready: 'ready',
31
+ running: 'running',
32
+ generating: 'running',
33
+ waiting: 'waiting',
34
+ };
17
35
  /**
18
36
  * Aggregate per-agent CLI statuses into a single representative BranchStatus
19
37
  * for the sidebar's single status indicator (Issue #867).
@@ -65,6 +83,42 @@ function formatCliStatusBreakdown(cliStatus, labels) {
65
83
  .map(([instanceId, status]) => `${labels?.[instanceId] ?? (0, types_1.getCliToolDisplayNameSafe)(instanceId, instanceId)}: ${status ?? 'idle'}`)
66
84
  .join(', ');
67
85
  }
86
+ /** Precedence for folding per-instance kinds: answerable-now wins (Issue #1786). */
87
+ const WAITING_KIND_PRECEDENCE = [
88
+ 'prompt',
89
+ 'menu',
90
+ 'unclassified',
91
+ ];
92
+ /**
93
+ * Fold every instance's {@link SessionWaitingDetail} into one worktree-level
94
+ * verdict (Issue #1787).
95
+ *
96
+ * Reads `sessionStatusByInstance` when present and falls back to
97
+ * `sessionStatusByCli`, matching how `deriveSidebarCliStatus` picks its source
98
+ * — the two must not disagree about which map is authoritative, or the dot and
99
+ * its emphasis would come from different snapshots.
100
+ *
101
+ * The kind fold uses `prompt > menu > unclassified` (the same precedence the
102
+ * server uses per CLI tool): with two agents waiting, the one the user can
103
+ * answer from the app is the one worth shouting about.
104
+ *
105
+ * @param worktree - Source worktree data (any vintage of the payload)
106
+ * @returns The folded waiting detail; `{ waitingKind: null, awaitingInstruction: false }`
107
+ * when nothing in the payload carries the #1786 fields
108
+ */
109
+ function deriveWorktreeWaitingDetail(worktree) {
110
+ const entries = Object.values(worktree.sessionStatusByInstance ?? worktree.sessionStatusByCli ?? {}).filter((entry) => entry !== undefined);
111
+ let awaitingInstruction = false;
112
+ const kinds = new Set();
113
+ for (const entry of entries) {
114
+ if (entry.awaitingInstruction)
115
+ awaitingInstruction = true;
116
+ if (entry.waitingKind)
117
+ kinds.add(entry.waitingKind);
118
+ }
119
+ const waitingKind = WAITING_KIND_PRECEDENCE.find((kind) => kinds.has(kind)) ?? null;
120
+ return { waitingKind, awaitingInstruction };
121
+ }
68
122
  /**
69
123
  * Calculate whether a worktree has unread messages
70
124
  *
@@ -178,6 +232,10 @@ function toBranchItem(worktree) {
178
232
  // reflected. Falls back to the legacy selectedAgents path when no per-instance
179
233
  // data is present.
180
234
  const { cliStatus, cliStatusLabels } = deriveSidebarCliStatus(worktree);
235
+ // Issue #1787: the row's emphasis and its "what do I do next" label both come
236
+ // from the AGGREGATED status, matching the single dot the row renders.
237
+ const aggregated = aggregateCliStatus(cliStatus);
238
+ const { waitingKind, awaitingInstruction } = deriveWorktreeWaitingDetail(worktree);
181
239
  return {
182
240
  id: worktree.id,
183
241
  name: worktree.name,
@@ -189,5 +247,15 @@ function toBranchItem(worktree) {
189
247
  cliStatus,
190
248
  cliStatusLabels,
191
249
  worktreePath: worktree.path,
250
+ waitingKind,
251
+ awaitingInstruction,
252
+ // `promptType` mirrors what `/api/worktrees` does with the same data
253
+ // (`isWaitingForResponse ? 'approval' : null`) rather than branching on
254
+ // `waitingKind`: the card and the sidebar row show the same worktree, and
255
+ // one saying "Approve / Reject" while the other says "Reply to prompt"
256
+ // would be a bug the user cannot explain. `isStalled` is server-only
257
+ // (`isWorktreeStalled` needs the detector's timers), so the sidebar never
258
+ // claims "Check stalled".
259
+ nextActionKey: (0, next_action_helper_1.getNextAction)(BRANCH_STATUS_TO_SESSION_STATUS[aggregated], aggregated === 'waiting' ? 'approval' : null, false),
192
260
  };
193
261
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.23.0",
3
+ "version": "0.24.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 +0,0 @@
1
- "use strict";exports.id=6283,exports.ids=[6283],exports.modules={26283:(a,b,c)=>{c.d(b,{kT:()=>Y,aU:()=>j,l8:()=>K,hx:()=>n,XY:()=>L,F0:()=>aa,Fw:()=>ab,CX:()=>q,Dd:()=>y,pn:()=>z,gm:()=>r,Jn:()=>x,aW:()=>A,Du:()=>O,Mi:()=>R,J7:()=>S,wN:()=>C,kD:()=>I,uA:()=>F,sy:()=>E,Md:()=>H,LO:()=>J,sx:()=>N,fW:()=>B,KO:()=>ac,ut:()=>$,GT:()=>p,_X:()=>function a(b){switch(b){case"claude":return{promptPattern:n,separatorPattern:o,thinkingPattern:i,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,i,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/,B]};case"codex":return{promptPattern:r,separatorPattern:w,thinkingPattern:k,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,k,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/,B]};case"gemini":return{promptPattern:C,separatorPattern:/^[─━]{3,}$/m,thinkingPattern:D,skipPatterns:[C,D,/^\s*$/,/Gemini\s+\d+\.\d+/,B]};case"vibe-local":return{promptPattern:T,separatorPattern:/^[·]{10,}$/m,thinkingPattern:U,skipPatterns:[T,U,/^\s*$/,/vibe-local|vibe-coder/,/ctx:\s*\d+%/,/Model\s+\w/,/Engine\s+\w/,/Mode\s+/,/RAM\s+/,/CWD\s+/,/^[·]{10,}$/,/✦\s*Ready/,/ESC:\s*stop/,B]};case"opencode":return{promptPattern:E,separatorPattern:M,thinkingPattern:G,skipPatterns:[...N]};case"copilot":return{promptPattern:O,separatorPattern:Q,thinkingPattern:P,skipPatterns:[...S]};case"antigravity":return{promptPattern:V,separatorPattern:X,thinkingPattern:W,skipPatterns:[...Z]};default:return a("claude")}},Qh:()=>v,zZ:()=>u,DR:()=>m,aJ:()=>f,_A:()=>_});var d=c(72626);let e=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function f(a){return a.replace(e,"")}var g=c(46423);let h=(0,d.h)("cli-patterns"),i=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),j=/esc to interrupt/,k=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,l=/esc to interrupt/;function m(a,b){let c=f(a.slice(Math.max(0,a.length-b)).join("\n"));if(l.test(c))return!0;let d=-1;for(let b=a.length-1;b>=Math.max(0,a.length-8);b--)if(r.test(f(a[b]))){d=b;break}if(d<0)return k.test(c);let e=Math.max(0,d-g.$+1),h=f(a.slice(e,d+1).join("\n"));return k.test(h)}let n=/^[>❯](\s*$|\s+\S)/m,o=/^─{10,}$/m;function p(a){let b=a=>/^─{10,}$/.test(f(a).trimEnd()),c=a.length-1;for(;c>=0&&""===a[c].trim();)c--;if(c<0)return -1;let d=-1;for(let e=c;e>=Math.max(0,c-4);e--)if(b(a[e])){d=e;break}if(d<0)return -1;let e=-1;for(let c=d-1;c>=Math.max(0,d-40);c--)if(b(a[c])){e=c;break}return e<0||!/^[>❯]/.test(f(a[e+1]??""))?-1:Math.max(0,e-1)}let q=/Yes, I trust this folder/m,r=/^›\s*/m,s=/Skip until next version|Do you trust|Press enter to continue|^\s*›\s*\d+\.\s/m,t=/^\s*›(?!\s*\d+\.)/;function u(a){let b=a.split("\n"),c=-1,d=-1;for(let a=0;a<b.length;a++){let e=b[a];if(s.test(e)){c=a;continue}t.test(e)&&(d=a)}return d>=0&&d>c}function v(a){let b=a.split("\n"),c=-1;for(let a=b.length-1;a>=0;a--)if(t.test(b[a])){c=a;break}let d=b.slice(c+1).join("\n");return""===d?null:d.includes("Skip until next version")||d.includes("Update")&&d.includes("Skip")?"update":d.includes("Do you trust")?"trust":d.includes("Press enter to continue")?"press-enter":null}let w=/^─.*Worked for.*─+$/m,x=/press\s+enter\s+to\s+(?:confirm|select)/i,y=/esc\s+to\s+cancel/i,z=/(?:↑\/↓|pgup\/pgdn|home\/end)\s+to\s+(?:scroll|page|jump)|to\s+edit\s+(?:prev|next|message)/i,A=/^\s*\S.*·\s*~?\/\S*\s*$/,B=/\[Pasted text #\d+/,C=/^[>❯]\s*$|^\s*[>❯]\s+Type your message.*$/m,D=/[\u2800-\u28FF]|Thinking\.\.\./,E=/Ask anything\.\.\./,F=/tab agents\s+ctrl\+p commands/,G=/Thinking:/,H=/\u25A3\s+\w+\s+\u00b7\s+\S+(?:\s+\u00b7\s+(?:[\d]+h\s*)?(?:[\d]+m\s*)?[\d.]+s)?/,I=/esc interrupt/,J=/^\s*(Select\s+(model|provider)|Connect\s+a\s+provider)/m,K=/Enter\s+to\s+set\s+as\s+default\b/i,L=/Enter\s+to\s+(?:select\s+.*to\s+navigate|confirm\s+·\s+Esc|set\s+as\s+default)/,M=/^[\u2503\u2579\u25A3\u2580\u2500\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C]+$/,N=[M,/\u2B1D{4,}/,/^Build\s+/,F,I,E,B],O=/^[>❯]\s|^\?\s+/m,P=/[\u2800-\u28FF]|\(Esc to cancel|Reasoning\s+[■▪▮]|\.\.\.\s+Thinking|Generating|Processing/,Q=/^─{10,}$/m,R=/Search\s+\w+\.\.\.|Select\s+Model|to (?:navigate|select).*Enter to (?:select|confirm)/m,S=[B,Q,P,R,/^GitHub Copilot\s+v/,/[█▘▝▖▗▔▄▌▐]/,/[╭╮╰╯│]/,/\[⎇\s+\w[^\]]*\]/,/^shift\+tab\s/,/^\?\s+for\s+shortcuts/,/^ctrl\+[a-z]\s+\w/,/^[❯>]\s*(Type\s+@|$)/,/^Tip:\s+\//,/^Describe a task to get started/,/^Copilot uses AI, so always check for mistakes\.$/,/^● 💡/,/^● Environment loaded:/],T=/ctx:\d+%\s*[>❯]/m,U=/[\u2800-\u28FF]|Thinking|⠋|⠙|⠹|⠸|⠼|⠴|⠦|⠧|⠇|⠏|Running|Executing/,V=/^>\s*$/m,W=/[\u2800-\u28FF]|Generating|esc to cancel/,X=/^─{3,}$/m,Y=/Switch Model|↑\/↓\s*Navigate/m,Z=[X,/^>\s*$/,/^\?\s+for\s+shortcuts/,W,/[▄▀█▌▐]/,B];function $(a,b){let c,d=h.withContext({cliToolId:a});switch(d.debug("detectThinking:check",{contentLength:b.length}),a){case"claude":default:c=i.test(b);break;case"codex":c=k.test(b);break;case"gemini":c=D.test(b);break;case"vibe-local":c=U.test(b);break;case"opencode":c=G.test(b);break;case"copilot":c=P.test(b);break;case"antigravity":c=W.test(b)}return d.debug("detectThinking:result",{isThinking:c}),c}function _(a){return a.split("\n").map(a=>/^[\u2502\u2503\u256D\u256E\u256F\u2570\u2500\u2579\u2580\u2588\s]+$/.test(a)?"":a.replace(/^\s*[\u2502\u2503]\s?/,"").replace(/\s*[\u2502\u2503\u2588]$/,"")).join("\n")}let aa=["Claude Code cannot be launched inside another Claude Code session"],ab=[/^Error:.*Claude Code/];function ac(a){if("claude"===a||"opencode"===a||"copilot"===a||"antigravity"===a)return{requireDefaultIndicator:!1}}},46423:(a,b,c)=>{c.d(b,{$:()=>d});let d=5}};
@@ -1,21 +0,0 @@
1
- "use strict";exports.id=646,exports.ids=[646],exports.modules={1102:(a,b,c)=>{c.d(b,{m_:()=>i});var d=c(21124),e=c(38301),f=c(23312);function g(a,b,c){return Math.min(Math.max(a,4),Math.max(4,c-b-4))}let h={top:-9999,left:-9999};function i({content:a,placement:b="right",delay:c=100,children:i}){let[j,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(null),n=(0,e.useRef)(null),o=(0,e.useRef)(null),p=(0,e.useRef)(null),q=(0,e.useCallback)(()=>{null!==p.current&&(clearTimeout(p.current),p.current=null)},[]),r=(0,e.useCallback)(()=>{q(),p.current=setTimeout(()=>{k(!0),p.current=null},c)},[c,q]),s=(0,e.useCallback)(()=>{q(),k(!1),m(null)},[q]);return(0,e.useCallback)(()=>{let a=n.current,c=o.current;if(!a||!c)return;let d=a.getBoundingClientRect(),e=c.getBoundingClientRect();m(function(a,b,c,d){let e,f,h=b.left+b.width/2-c.width/2,i=b.top+b.height/2-c.height/2;switch(a){case"top":e=b.top-c.height-8,f=h;break;case"bottom":e=b.top+b.height+8,f=h;break;case"left":e=i,f=b.left-c.width-8;break;default:e=i,f=b.left+b.width+8}return{top:g(e,c.height,d.height),left:g(f,c.width,d.width)}}(b,{top:d.top,left:d.left,width:d.width,height:d.height},{width:e.width,height:e.height},{width:window.innerWidth,height:window.innerHeight}))},[b]),(0,d.jsxs)("span",{ref:n,"data-testid":"tooltip-wrapper",className:"relative inline-flex",tabIndex:-1,onMouseEnter:r,onMouseLeave:s,children:[i,j&&"undefined"!=typeof document&&(0,f.createPortal)((0,d.jsx)("span",{ref:o,role:"tooltip","aria-hidden":"true","data-placement":b,className:"fixed z-40 whitespace-nowrap px-2 py-1 text-xs font-medium rounded bg-foreground text-background shadow-lg pointer-events-none",style:l??h,children:a}),document.body)]})}},4267:(a,b,c)=>{c.d(b,{fJ:()=>d}),c(17252);let d=["claude","codex","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},65899:(a,b,c)=>{c.d(b,{A7:()=>g,kA:()=>f,dw:()=>h,XK:()=>i});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=(0,e.useRef)(null),l=(0,e.useRef)(null),[m,n]=(0,e.useState)(!1),[o,p]=(0,e.useState)({top:-9999,left:-9999}),q=(0,e.useCallback)(()=>{null!==k.current&&(clearTimeout(k.current),k.current=null)},[]),r=(0,e.useCallback)(()=>{let a=i.current;a&&(a.scrollWidth>a.clientWidth||h)&&(q(),k.current=setTimeout(()=>{let b=a.getBoundingClientRect(),c=b.left;l.current={top:b.top,bottom:b.bottom},p({top:b.bottom+4,left:Math.min(b.left,c)}),n(!0),k.current=null},b))},[q,b,h]),s=(0,e.useCallback)(()=>{q(),n(!1)},[q]);return(0,d.jsxs)("span",{ref:i,className:c,onMouseEnter:r,onMouseLeave:s,children:[g??a,m&&"undefined"!=typeof document&&(0,f.createPortal)((0,d.jsxs)("span",{ref:j,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:o.top,left:o.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)]})}},90646:(a,b,c)=>{c.d(b,{GV:()=>a6});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(67619);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(65899),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}),i=(0,e.useRef)(null);if("undefined"==typeof document||!c)return null;let j=Math.min(384,Math.max(0,window.innerWidth-16));return L().createPortal((0,d.jsxs)("div",{ref:i,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,maxWidth:j},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)}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);function T(a,b,c){if(b<=0||c<=0)return 0;let d=a+b+8-c;return d>0?-Math.min(d,Math.max(0,a-8)):a<8?8-a:0}let U=(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),q=(0,e.useRef)(null),r=(0,e.useRef)({x:0,y:0}),[s,t]=(0,e.useState)({x:0,y:0});(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]),(0,e.useLayoutEffect)(()=>{let a=a=>{r.current=a,t(b=>b.x===a.x&&b.y===a.y?b:a)};if(!n)return void a({x:0,y:0});let b=q.current;if(!b)return;let c=b.getBoundingClientRect();a({x:T(c.left-r.current.x,c.width,window.innerWidth),y:T(c.top-r.current.y,c.height,window.innerHeight)})},[n]);let u=(0,e.useCallback)(()=>{o(a=>!a)},[]),v=(0,e.useCallback)(d=>{d===a?f("asc"===b?"desc":"asc"):(c(d),f(h?.[d]??"asc")),o(!1)},[a,b,c,f,h]),w=(0,e.useCallback)(()=>{f("asc"===b?"desc":"asc")},[b,f]),x=g.find(b=>b.key===a)?.label||"Sort",y=(0,d.jsxs)("button",{type:"button",onClick:u,"aria-expanded":n,"aria-haspopup":"listbox","aria-label":`Sort by ${x}`,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)(V,{className:k}),(0,d.jsx)("span",{className:i?"hidden":"hidden sm:inline",children:x})]});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:y}):y,(0,d.jsx)("button",{type:"button",onClick:w,"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)(W,{className:k}):(0,d.jsx)(X,{className:k})})]}),n&&(0,d.jsx)("div",{ref:q,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 ",style:0!==s.x||0!==s.y?{transform:`translate(${s.x}px, ${s.y}px)`}:void 0,children:g.map(c=>(0,d.jsxs)("button",{type:"button",role:"option","aria-selected":a===c.key,onClick:()=>v(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 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:"M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12"})})}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:"M5 15l7-7 7 7"})})}function X({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 Y=[{key:"updatedAt",labelKey:"sort.updatedAt"},{key:"repositoryName",labelKey:"sort.repositoryName"},{key:"branchName",labelKey:"sort.branchName"},{key:"status",labelKey:"sort.status"}],Z={updatedAt:"desc"},$=(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)(()=>Y.map(({key:a,labelKey:b})=>({key:a,label:g(b)})),[g]);return(0,d.jsx)(U,{sortKey:a,sortDirection:b,onSortKeyChange:c,onSortDirectionChange:f,options:h,defaultDirections:Z,compact:!0,tooltip:g("tooltips.sort"),iconClassName:"w-4 h-4"})});var _=c(73451),aa=c(81497),ab=c(55992);let ac=["en","ja"],ad={en:"English",ja:"日本語"};function ae(){return{currentLocale:(0,ab.Ym)(),switchLocale:a=>{if(ac.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 af(){let{currentLocale:a,switchLocale:b}=ae(),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:ac.map(a=>(0,d.jsx)("option",{value:a,children:ad[a]},a))})}var ag=c(84342);function ah(){let a=(0,l.c)("auth"),b=(0,ag.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 ai=c(63474),aj=c(78352),ak=c(32482);let al="w-4 h-4",am=0,an=null;function ao(){return an??[]}let ap=(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)(ao),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),an=a.order)}).catch(()=>{}))},[]);let B=(0,e.useMemo)(()=>(0,ak.UZ)(c),[c]),C=(0,e.useMemo)(()=>(0,ak.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,ak.Xn)(h,c,d),[h,c,d]),groupedItems:(0,e.useMemo)(()=>"grouped"===f?(0,ak._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;am=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=am});return()=>{window.cancelAnimationFrame(b)}},[Y,o]);let Z=(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),an=g,fetch("/api/sidebar/group-order",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({order:g})}).catch(()=>{y(d),an=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)(as,{viewMode:o,onToggle:p}),(0,d.jsx)($,{}),(0,d.jsx)(ay,{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:al,"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)(aq,{group:a,isExpanded:b,selectedWorktreeId:f,onToggle:()=>W(a.repositoryName),onBranchClick:Z,isDragDisabled:!!r.trim()},a.repositoryName)})})}):Q.map(a=>(0,d.jsx)(R,{branch:a,isSelected:a.id===f,onClick:()=>Z(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)(af,{})}),(0,d.jsx)(t,{})]}),(0,d.jsx)(ah,{})]})]})});function aq({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)(ar,{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 ar({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)(aw,{})}),(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)(at,{isExpanded:c}),(0,d.jsx)(au,{color:(0,ak.LV)(a)}),(0,d.jsx)(aa.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 as({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)(av,{className:al}):(0,d.jsx)(au,{className:al})})})}function at({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 au({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 av({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 aw(){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 ax({className:a=""}){return(0,d.jsx)("svg",{className:`${al} ${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 ay=(0,e.memo)(function({refreshWorktrees:a}){let[b,c]=(0,e.useState)(!1),f=(0,e.useRef)(!1),{showToast:g}=(0,ai.dj)(),h=(0,l.c)("common"),i=(0,e.useCallback)(async()=>{if(!f.current){f.current=!0,c(!0);try{let b=await aj.Rx.sync();await a(),g(h("syncSuccess",{count:b.worktreeCount}),"success",3e3)}catch(a){a instanceof aj.hD&&401===a.status?g(h("syncAuthError"),"error",5e3):g(h("syncError"),"error",5e3)}finally{f.current=!1,c(!1)}}},[a,g,h]);return(0,d.jsx)(d.Fragment,{children:(0,d.jsx)(S.m_,{content:h("tooltips.sync"),placement:"bottom",children:(0,d.jsx)("button",{type:"button",onClick:i,disabled:b,"aria-label":h("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)(ax,{className:b?"animate-spin":""})})})})});var az=c(78733),aA=c(44688),aB=c(75903),aC=c(59268),aD=c(38882);let aE=[{labelKey:"nav.home",href:"/",isActive:a=>"/"===a,icon:(0,d.jsx)(az.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.chat",href:"/chat",isActive:a=>a.startsWith("/chat"),icon:(0,d.jsx)(aA.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.sessions",href:"/sessions",isActive:a=>a.startsWith("/sessions"),icon:(0,d.jsx)(aB.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.review",href:"/review",isActive:a=>a.startsWith("/review"),icon:(0,d.jsx)(aC.A,{size:20,"aria-hidden":"true"})},{labelKey:"nav.more",href:"/more",isActive:a=>a.startsWith("/more"),icon:(0,d.jsx)(aD.A,{size:20,"aria-hidden":"true"})}];function aF(){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:[aE.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 aG=c(67565),aH=c(50987),aI=c(75234),aJ=c(34487),aK=c(25345),aL=c(96558),aM=c(75692),aN=c(57898),aO=c(35595),aP=c(11010),aQ=c(89184),aR=c(63157),aS=c(12480);let aT=[{key:"home",href:"/"},{key:"chat",href:"/chat"},{key:"sessions",href:"/sessions"},{key:"repositories",href:"/repositories"},{key:"review",href:"/review"},{key:"skills",href:"/skills"},{key:"more",href:"/more"}],aU={home:az.A,chat:aA.A,sessions:aB.A,repositories:aH.A,review:aC.A,skills:aI.A,more:aD.A};function aV(a){return a.isWaitingForResponse?"waiting":a.isProcessing?"running":a.isSessionRunning?"ready":"idle"}let aW=(0,aO.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"),aX="shrink-0 text-muted-foreground";function aY(){let{open:a,setOpen:b}=(0,x.C)(),{setOpen:c}=(0,aQ.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}=ae(),v=(0,aR.rC)(),{showToast:y}=(0,ai.dj)(),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(""),[D,F]=(0,e.useState)([]),G=(0,e.useRef)(null);(0,e.useRef)(null),(0,e.useRef)(a);let H=(0,e.useCallback)((a,c)=>{c&&F(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]),I=(0,e.useCallback)(async()=>{try{await aj.Rx.sync(),await v?.refresh?.(),y(h("actions.syncSuccess"),"success")}catch{y(h("actions.syncError"),"error")}},[v,y,h]),J="dark"===j,L=""===B.trim(),M=v?.error??null,O=v?.isLoading??!1,P=M?[]:v?.worktrees??[],Q=P.length>0,R=!M&&O&&0===P.length,S=[...P].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}),T=L?S.slice(0,8):S,U=[{id:"theme",label:J?h("actions.toLight"):h("actions.toDark"),icon:J?r.A:s.A,run:()=>k(J?"light":"dark")},...p?[]:aS.Uf.map(a=>({id:`displaysize:${a}`,label:`${h("actions.displaySizePrefix")}: ${i(`displaySize.${a}`)}`,icon:aJ.A,run:()=>m(a)})),{id:"sync",label:h("actions.syncRepositories"),icon:aK.A,run:()=>{I()}},{id:"locale",label:h("actions.switchLanguage"),icon:aL.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:aM.A,run:()=>c(!0)}],V=L?D.map(a=>{if("nav"===a.kind){let b=aT.find(b=>b.key===a.id);if(!b)return null;let c=aU[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:aX,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:e})]}),onSelect:()=>H(()=>f.push(b.href),{kind:"nav",id:b.key})}}if("worktree"===a.kind){let b=P.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)(aN.A,{size:16,className:aX,"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:aV(b),size:"sm",className:c?"ml-2":"ml-auto"})]}),onSelect:()=>H(()=>f.push(`/worktrees/${b.id}`),{kind:"worktree",id:b.id})}}let b=U.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:aX,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:b.label})]}),onSelect:()=>H(b.run,{kind:"action",id:b.id})}}).filter(a=>null!==a):[];return z?(0,K.createPortal)((0,d.jsx)(d.Fragment,{children:a&&(0,d.jsxs)("div",{className:"fixed inset-0 overflow-y-auto",style:{zIndex:aP.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,aO.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)(aG.uB,{label:h("title"),className:(0,aO.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)(aG.uB.Input,{ref:G,value:B,onValueChange:C,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)(aG.uB.List,{className:"max-h-[min(60vh,360px)] overflow-y-auto p-2",children:[(0,d.jsx)(aG.uB.Empty,{"data-testid":"command-palette-empty",className:"py-6 text-center text-sm text-muted-foreground",children:h("empty")}),R&&(0,d.jsx)(aG.uB.Loading,{"data-testid":"command-palette-loading",className:"py-6 text-center text-sm text-muted-foreground",children:h("loading")}),V.length>0&&(0,d.jsx)(aG.uB.Group,{heading:h("groups.recent"),children:V.map(a=>(0,d.jsx)(aG.uB.Item,{value:a.value,onSelect:a.onSelect,className:aW,children:a.node},a.id))}),(0,d.jsx)(aG.uB.Group,{heading:h("groups.navigation"),children:aT.map(a=>{let b=i(`nav.${a.key}`),c=aU[a.key];return(0,d.jsxs)(aG.uB.Item,{value:`nav ${b} ${a.href}`,onSelect:()=>H(()=>f.push(a.href),{kind:"nav",id:a.key}),className:aW,children:[c&&(0,d.jsx)(c,{size:16,className:aX,"aria-hidden":"true"}),(0,d.jsx)("span",{className:"truncate",children:b})]},a.key)})}),Q&&(0,d.jsx)(aG.uB.Group,{heading:h("groups.worktrees"),children:T.map(a=>{let b=a.repositoryDisplayName||a.repositoryName||"",c=a.branch||a.name;return(0,d.jsxs)(aG.uB.Item,{value:`worktree ${b} ${c} ${a.name} ${a.id}`,onSelect:()=>H(()=>f.push(`/worktrees/${a.id}`),{kind:"worktree",id:a.id}),className:aW,children:[(0,d.jsx)(aN.A,{size:16,className:aX,"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:aV(a),size:"sm",className:b?"ml-2":"ml-auto"})]},a.id)})}),(0,d.jsx)(aG.uB.Group,{heading:h("groups.actions"),children:U.map(a=>{let b=a.icon;return(0,d.jsxs)(aG.uB.Item,{value:`action ${a.id} ${a.label}`,onSelect:()=>H(a.run,{kind:"action",id:a.id}),className:aW,children:[(0,d.jsx)(b,{size:16,className:aX,"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")]})]})]})})})]})}),document.body):null}var aZ=c(98033);let a$=["global","terminal","composer","editor"],a_=[{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"},{id:"editorIndent",keys:["Tab"],scope:"editor"},{id:"editorOutdent",keys:["Shift","Tab"],scope:"editor"},{id:"editorTabFocus",keys:["Ctrl","M"],scope:"editor"},{id:"editorSave",keys:["MOD","S"],scope:"editor"},{id:"editorFullscreen",keys:["MOD","Shift","F"],scope:"editor"}];function a0(){let{open:a,setOpen:b}=(0,aQ.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=a_){return a$.map(b=>({scope:b,shortcuts:a.filter(a=>a.scope===b)})).filter(a=>a.shortcuts.length>0)}();return(0,d.jsx)(aZ.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))})})}var a1=c(16945),a2=c(47089),a3=c(12055);function a4(){let a=(0,l.c)("common"),[b,c]=(0,e.useState)(null),[f,g]=(0,e.useState)(null),h=(0,e.useCallback)(a=>{if(a.type!==a3.Oo)return;let{serverVersion:b,clientVersion:d}=a;"string"==typeof b&&"string"==typeof d&&b&&d&&b!==f&&c({serverVersion:b,clientVersion:d})},[f]);(0,u.T3)(h);let i=(0,e.useCallback)(()=>{window.location.reload()},[]),j=(0,e.useCallback)(()=>{c(a=>(a&&g(a.serverVersion),null))},[]);return b?(0,d.jsxs)("div",{"data-testid":"version-mismatch-banner",role:"alert","aria-live":"assertive",className:"fixed top-3 left-1/2 -translate-x-1/2 flex items-start gap-3 max-w-[92vw] rounded-lg border border-warning-border bg-warning-subtle px-4 py-3 text-warning-foreground shadow-lg",style:{zIndex:aP.M.TOAST},children:[(0,d.jsx)(a1.A,{className:"h-5 w-5 shrink-0 mt-0.5","aria-hidden":"true"}),(0,d.jsxs)("div",{className:"flex flex-col gap-0.5 text-sm",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("versionMismatch.title")}),(0,d.jsx)("span",{children:a("versionMismatch.description",{serverVersion:b.serverVersion,clientVersion:b.clientVersion})})]}),(0,d.jsxs)("button",{type:"button","data-testid":"version-mismatch-reload",onClick:i,className:"shrink-0 inline-flex items-center gap-1.5 rounded-md border border-warning-border px-3 py-1.5 text-sm font-medium hover:opacity-80 focus:outline-none focus:ring-2 focus:ring-offset-2",children:[(0,d.jsx)(aK.A,{className:"h-4 w-4","aria-hidden":"true"}),a("versionMismatch.reload")]}),(0,d.jsx)("button",{type:"button","data-testid":"version-mismatch-dismiss",onClick:j,"aria-label":a("versionMismatch.dismiss"),className:"shrink-0 hover:opacity-70 focus:outline-none focus:ring-2 focus:ring-offset-2",children:(0,d.jsx)(a2.A,{className:"h-4 w-4","aria-hidden":"true"})})]}):null}let a5="transform transition-transform duration-300 ease-out",a6=(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
- ${a5}
14
- ${c?"translate-x-0":"-translate-x-full"}
15
- `,role:"complementary",children:(0,d.jsx)(ap,{})}),(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)(aF,{}),(0,d.jsx)(aY,{}),(0,d.jsx)(a0,{}),(0,d.jsx)(a4,{})]}):(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
- ${a5}
20
- ${b?"translate-x-0":"-translate-x-full"}
21
- `,style:{width:`${p}px`,zIndex:aP.M.SIDEBAR},role:"complementary","aria-hidden":!b,children:[(0,d.jsx)(ap,{}),(0,d.jsx)(a7,{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)(aY,{}),(0,d.jsx)(a0,{}),(0,d.jsx)(a4,{})]})});function a7({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"})}}};