commandmate 0.18.0 → 0.20.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 (793) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +230 -223
  3. package/.next/app-path-routes-manifest.json +32 -32
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/app/update/route.js +5 -3
  9. package/.next/server/app/api/app/update/route.js.nft.json +1 -1
  10. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update-check/route.js +1 -1
  12. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  15. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  16. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  18. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  19. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js +1 -1
  21. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  22. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js +1 -1
  24. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  25. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/assistant/start/route.js +1 -1
  27. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  28. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/assistant/terminal/route.js +1 -1
  30. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  31. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/assistant/tools/route.js +1 -1
  33. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  34. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/login/route.js +1 -1
  36. package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  37. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/auth/logout/route.js +1 -1
  39. package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  40. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/auth/status/route.js +1 -1
  42. package/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  43. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/daily-summary/route.js +1 -1
  45. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  46. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  48. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  49. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  51. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  52. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  54. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  55. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/external-apps/route.js +1 -1
  57. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  58. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/fs/browse/route.js +2 -2
  60. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  61. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/fs/recent-paths/route.js +2 -2
  63. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  64. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  66. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  67. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  69. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  70. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/metrics/vibe/route.js +2 -2
  72. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  73. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/ollama/models/route.js +1 -1
  75. package/.next/server/app/api/ollama/models/route.js.nft.json +1 -1
  76. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  78. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  79. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/push/vapid/route.js +1 -1
  81. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  82. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  84. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  85. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  87. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  88. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  90. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  91. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  93. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  94. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/repositories/clone/route.js +1 -1
  96. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  97. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  99. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  100. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/repositories/restore/route.js +1 -1
  102. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  103. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/repositories/route.js +1 -1
  105. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  106. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/repositories/scan/route.js +1 -1
  108. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  109. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/repositories/sync/route.js +1 -1
  111. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  112. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  114. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  115. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/sidebar/group-order/route.js +2 -2
  117. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  118. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/skills/[id]/route.js +1 -1
  120. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  121. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/skills/installations/route.js +1 -1
  123. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  124. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/skills/operations/route.js +2 -2
  126. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  127. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/skills/reindex/route.js +1 -1
  129. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  130. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/skills/route.js +1 -1
  132. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  133. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/slash-commands/route.js +1 -1
  135. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  136. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +2 -2
  138. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  139. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/tasks/[taskId]/route.js +2 -2
  141. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  142. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/templates/[id]/route.js +2 -2
  144. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  145. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/templates/route.js +2 -2
  147. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  148. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/todos/route.js +1 -1
  150. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  151. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  153. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  154. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/verification/runs/route.js +1 -1
  156. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  157. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  160. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  163. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  166. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  168. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  169. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  175. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  177. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  178. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  181. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  253. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  256. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  259. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  261. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  262. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +6 -6
  264. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  268. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  271. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  274. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  277. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  280. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  283. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  285. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  286. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  289. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  291. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  292. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  295. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  296. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  298. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  301. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  304. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  305. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  307. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  308. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  310. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  311. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  313. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  314. package/.next/server/app/api/worktrees/[id]/skills/route.js +2 -2
  315. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  316. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  317. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  319. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  320. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  322. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  323. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  325. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  326. package/.next/server/app/api/worktrees/[id]/tasks/route.js +4 -4
  327. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  328. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  329. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  330. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  331. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  332. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  333. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  334. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  335. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  336. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  337. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  338. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  339. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  340. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  341. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  342. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  343. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  344. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  345. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  346. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  347. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  348. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  349. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  350. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  351. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  352. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  353. package/.next/server/app/api/worktrees/[id]/verify/route.js +2 -2
  354. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  355. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  356. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  357. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  358. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  359. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  360. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  361. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  362. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  363. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  364. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  365. package/.next/server/app/api/worktrees/route.js +1 -1
  366. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  367. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  368. package/.next/server/app/apple-icon.png/route.js +1 -1
  369. package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
  370. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  371. package/.next/server/app/icon.png/route.js +1 -1
  372. package/.next/server/app/icon.png/route.js.nft.json +1 -1
  373. package/.next/server/app/icon1.png/route.js +1 -1
  374. package/.next/server/app/icon1.png/route.js.nft.json +1 -1
  375. package/.next/server/app/icon2.png/route.js +1 -1
  376. package/.next/server/app/icon2.png/route.js.nft.json +1 -1
  377. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  378. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  379. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  380. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  381. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  382. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  383. package/.next/server/app/page_client-reference-manifest.js +1 -1
  384. package/.next/server/app/proxy/[...path]/route.js +1 -1
  385. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  386. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  387. package/.next/server/app/repositories/page.js +1 -1
  388. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  389. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  390. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  391. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  392. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  393. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  394. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  395. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  396. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  397. package/.next/server/app/worktrees/[id]/page.js +8 -8
  398. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  399. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  400. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  401. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  402. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  403. package/.next/server/app-paths-manifest.json +32 -32
  404. package/.next/server/chunks/1029.js +1 -0
  405. package/.next/server/chunks/1068.js +1 -1
  406. package/.next/server/chunks/1598.js +4 -0
  407. package/.next/server/chunks/3042.js +1 -1
  408. package/.next/server/chunks/3417.js +1 -0
  409. package/.next/server/chunks/3451.js +1 -1
  410. package/.next/server/chunks/3543.js +1 -1
  411. package/.next/server/chunks/3753.js +23 -23
  412. package/.next/server/chunks/3945.js +1 -1
  413. package/.next/server/chunks/406.js +5 -5
  414. package/.next/server/chunks/{1185.js → 5048.js} +1 -1
  415. package/.next/server/chunks/5959.js +3 -3
  416. package/.next/server/chunks/{5381.js → 5998.js} +2 -2
  417. package/.next/server/chunks/6130.js +1 -1
  418. package/.next/server/chunks/6274.js +6 -5
  419. package/.next/server/chunks/6283.js +1 -1
  420. package/.next/server/chunks/6401.js +1 -0
  421. package/.next/server/chunks/641.js +1 -0
  422. package/.next/server/chunks/8536.js +1 -0
  423. package/.next/server/chunks/8543.js +1 -0
  424. package/.next/server/chunks/8807.js +397 -378
  425. package/.next/server/chunks/8856.js +2 -2
  426. package/.next/server/chunks/9058.js +1 -0
  427. package/.next/server/chunks/9067.js +1 -0
  428. package/.next/server/chunks/9123.js +1 -1
  429. package/.next/server/middleware-manifest.json +5 -5
  430. package/.next/server/pages/500.html +1 -1
  431. package/.next/server/server-reference-manifest.json +1 -1
  432. package/.next/server/src/middleware.js +1 -1
  433. package/.next/server/src/middleware.js.map +1 -1
  434. package/.next/static/chunks/{6488-109e3825c7249e47.js → 6488-3e7539550c3ef358.js} +1 -1
  435. package/.next/static/chunks/744-fa8c0ae444c8338c.js +1 -0
  436. package/.next/static/chunks/app/api/app/update/route-5bdd550ed6386f57.js +1 -0
  437. package/.next/static/chunks/app/api/app/update-check/route-5bdd550ed6386f57.js +1 -0
  438. package/.next/static/chunks/app/api/assistant/conversation/route-5bdd550ed6386f57.js +1 -0
  439. package/.next/static/chunks/app/api/assistant/current-output/route-5bdd550ed6386f57.js +1 -0
  440. package/.next/static/chunks/app/api/assistant/messages/route-5bdd550ed6386f57.js +1 -0
  441. package/.next/static/chunks/app/api/assistant/session/route-5bdd550ed6386f57.js +1 -0
  442. package/.next/static/chunks/app/api/assistant/start/route-5bdd550ed6386f57.js +1 -0
  443. package/.next/static/chunks/app/api/assistant/terminal/route-5bdd550ed6386f57.js +1 -0
  444. package/.next/static/chunks/app/api/assistant/tools/route-5bdd550ed6386f57.js +1 -0
  445. package/.next/static/chunks/app/api/auth/login/route-5bdd550ed6386f57.js +1 -0
  446. package/.next/static/chunks/app/api/auth/logout/route-5bdd550ed6386f57.js +1 -0
  447. package/.next/static/chunks/app/api/auth/status/route-5bdd550ed6386f57.js +1 -0
  448. package/.next/static/chunks/app/api/daily-summary/route-5bdd550ed6386f57.js +1 -0
  449. package/.next/static/chunks/app/api/daily-summary/status/route-5bdd550ed6386f57.js +1 -0
  450. package/.next/static/chunks/app/api/external-apps/[id]/health/route-5bdd550ed6386f57.js +1 -0
  451. package/.next/static/chunks/app/api/external-apps/[id]/route-5bdd550ed6386f57.js +1 -0
  452. package/.next/static/chunks/app/api/external-apps/route-5bdd550ed6386f57.js +1 -0
  453. package/.next/static/chunks/app/api/fs/browse/route-5bdd550ed6386f57.js +1 -0
  454. package/.next/static/chunks/app/api/fs/recent-paths/route-5bdd550ed6386f57.js +1 -0
  455. package/.next/static/chunks/app/api/hooks/agent-event/route-5bdd550ed6386f57.js +1 -0
  456. package/.next/static/chunks/app/api/hooks/claude-done/route-5bdd550ed6386f57.js +1 -0
  457. package/.next/static/chunks/app/api/metrics/vibe/route-5bdd550ed6386f57.js +1 -0
  458. package/.next/static/chunks/app/api/ollama/models/route-5bdd550ed6386f57.js +1 -0
  459. package/.next/static/chunks/app/api/push/subscriptions/route-5bdd550ed6386f57.js +1 -0
  460. package/.next/static/chunks/app/api/push/vapid/route-5bdd550ed6386f57.js +1 -0
  461. package/.next/static/chunks/app/api/repositories/[id]/route-5bdd550ed6386f57.js +1 -0
  462. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +1 -0
  463. package/.next/static/chunks/app/api/repositories/[id]/todos/route-5bdd550ed6386f57.js +1 -0
  464. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-5bdd550ed6386f57.js +1 -0
  465. package/.next/static/chunks/app/api/repositories/clone/route-5bdd550ed6386f57.js +1 -0
  466. package/.next/static/chunks/app/api/repositories/excluded/route-5bdd550ed6386f57.js +1 -0
  467. package/.next/static/chunks/app/api/repositories/restore/route-5bdd550ed6386f57.js +1 -0
  468. package/.next/static/chunks/app/api/repositories/route-5bdd550ed6386f57.js +1 -0
  469. package/.next/static/chunks/app/api/repositories/scan/route-5bdd550ed6386f57.js +1 -0
  470. package/.next/static/chunks/app/api/repositories/sync/route-5bdd550ed6386f57.js +1 -0
  471. package/.next/static/chunks/app/api/repositories/validate-path/route-5bdd550ed6386f57.js +1 -0
  472. package/.next/static/chunks/app/api/sidebar/group-order/route-5bdd550ed6386f57.js +1 -0
  473. package/.next/static/chunks/app/api/skills/[id]/route-5bdd550ed6386f57.js +1 -0
  474. package/.next/static/chunks/app/api/skills/installations/route-5bdd550ed6386f57.js +1 -0
  475. package/.next/static/chunks/app/api/skills/operations/route-5bdd550ed6386f57.js +1 -0
  476. package/.next/static/chunks/app/api/skills/reindex/route-5bdd550ed6386f57.js +1 -0
  477. package/.next/static/chunks/app/api/skills/route-5bdd550ed6386f57.js +1 -0
  478. package/.next/static/chunks/app/api/slash-commands/route-5bdd550ed6386f57.js +1 -0
  479. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-5bdd550ed6386f57.js +1 -0
  480. package/.next/static/chunks/app/api/tasks/[taskId]/route-5bdd550ed6386f57.js +1 -0
  481. package/.next/static/chunks/app/api/templates/[id]/route-5bdd550ed6386f57.js +1 -0
  482. package/.next/static/chunks/app/api/templates/route-5bdd550ed6386f57.js +1 -0
  483. package/.next/static/chunks/app/api/todos/route-5bdd550ed6386f57.js +1 -0
  484. package/.next/static/chunks/app/api/verification/runs/[runId]/route-5bdd550ed6386f57.js +1 -0
  485. package/.next/static/chunks/app/api/verification/runs/route-5bdd550ed6386f57.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-5bdd550ed6386f57.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-5bdd550ed6386f57.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-5bdd550ed6386f57.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-5bdd550ed6386f57.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-5bdd550ed6386f57.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-5bdd550ed6386f57.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-5bdd550ed6386f57.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-5bdd550ed6386f57.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-5bdd550ed6386f57.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-5bdd550ed6386f57.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-5bdd550ed6386f57.js +1 -0
  497. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-5bdd550ed6386f57.js +1 -0
  498. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-5bdd550ed6386f57.js +1 -0
  499. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-5bdd550ed6386f57.js +1 -0
  500. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-5bdd550ed6386f57.js +1 -0
  501. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-5bdd550ed6386f57.js +1 -0
  502. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-5bdd550ed6386f57.js +1 -0
  503. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-5bdd550ed6386f57.js +1 -0
  504. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-5bdd550ed6386f57.js +1 -0
  505. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-5bdd550ed6386f57.js +1 -0
  506. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-5bdd550ed6386f57.js +1 -0
  507. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-5bdd550ed6386f57.js +1 -0
  508. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-5bdd550ed6386f57.js +1 -0
  509. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-5bdd550ed6386f57.js +1 -0
  510. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-5bdd550ed6386f57.js +1 -0
  511. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-5bdd550ed6386f57.js +1 -0
  512. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-5bdd550ed6386f57.js +1 -0
  513. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-5bdd550ed6386f57.js +1 -0
  514. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-5bdd550ed6386f57.js +1 -0
  515. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-5bdd550ed6386f57.js +1 -0
  516. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-5bdd550ed6386f57.js +1 -0
  517. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-5bdd550ed6386f57.js +1 -0
  518. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-5bdd550ed6386f57.js +1 -0
  519. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-5bdd550ed6386f57.js +1 -0
  520. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-5bdd550ed6386f57.js +1 -0
  521. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-5bdd550ed6386f57.js +1 -0
  522. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-5bdd550ed6386f57.js +1 -0
  523. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-5bdd550ed6386f57.js +1 -0
  524. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-5bdd550ed6386f57.js +1 -0
  525. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-5bdd550ed6386f57.js +1 -0
  526. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-5bdd550ed6386f57.js +1 -0
  527. package/.next/static/chunks/app/api/worktrees/[id]/route-5bdd550ed6386f57.js +1 -0
  528. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-5bdd550ed6386f57.js +1 -0
  529. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-5bdd550ed6386f57.js +1 -0
  530. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-5bdd550ed6386f57.js +1 -0
  531. package/.next/static/chunks/app/api/worktrees/[id]/search/route-5bdd550ed6386f57.js +1 -0
  532. package/.next/static/chunks/app/api/worktrees/[id]/send/route-5bdd550ed6386f57.js +1 -0
  533. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-5bdd550ed6386f57.js +1 -0
  534. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-5bdd550ed6386f57.js +1 -0
  535. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-5bdd550ed6386f57.js +1 -0
  536. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-5bdd550ed6386f57.js +1 -0
  537. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-5bdd550ed6386f57.js +1 -0
  538. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-5bdd550ed6386f57.js +1 -0
  539. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-5bdd550ed6386f57.js +1 -0
  540. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-5bdd550ed6386f57.js +1 -0
  541. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-5bdd550ed6386f57.js +1 -0
  542. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-5bdd550ed6386f57.js +1 -0
  543. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-5bdd550ed6386f57.js +1 -0
  544. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-5bdd550ed6386f57.js +1 -0
  545. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-5bdd550ed6386f57.js +1 -0
  546. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +1 -0
  547. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-5bdd550ed6386f57.js +1 -0
  548. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-5bdd550ed6386f57.js +1 -0
  549. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-5bdd550ed6386f57.js +1 -0
  550. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-5bdd550ed6386f57.js +1 -0
  551. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-5bdd550ed6386f57.js +1 -0
  552. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-5bdd550ed6386f57.js +1 -0
  553. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-5bdd550ed6386f57.js +1 -0
  554. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-5bdd550ed6386f57.js +1 -0
  555. package/.next/static/chunks/app/api/worktrees/route-5bdd550ed6386f57.js +1 -0
  556. package/.next/static/chunks/app/manifest.webmanifest/route-5bdd550ed6386f57.js +1 -0
  557. package/.next/static/chunks/app/proxy/[...path]/route-5bdd550ed6386f57.js +1 -0
  558. package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +1 -0
  559. package/.next/static/chunks/app/worktrees/[id]/layout-5bdd550ed6386f57.js +1 -0
  560. package/.next/static/chunks/app/worktrees/[id]/page-214ee8b97dca856b.js +1 -0
  561. package/.next/trace +12 -12
  562. package/.next/types/routes.d.ts +2 -1
  563. package/.next/types/validator.ts +9 -0
  564. package/README.md +10 -1
  565. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  566. package/dist/cli/commands/auto-yes.js +12 -4
  567. package/dist/cli/commands/capture.d.ts +1 -0
  568. package/dist/cli/commands/capture.d.ts.map +1 -1
  569. package/dist/cli/commands/capture.js +115 -4
  570. package/dist/cli/commands/instances.d.ts +24 -0
  571. package/dist/cli/commands/instances.d.ts.map +1 -1
  572. package/dist/cli/commands/instances.js +44 -0
  573. package/dist/cli/commands/ls.d.ts.map +1 -1
  574. package/dist/cli/commands/ls.js +9 -3
  575. package/dist/cli/commands/respond.d.ts.map +1 -1
  576. package/dist/cli/commands/respond.js +13 -4
  577. package/dist/cli/commands/send.d.ts.map +1 -1
  578. package/dist/cli/commands/send.js +24 -14
  579. package/dist/cli/commands/update.d.ts.map +1 -1
  580. package/dist/cli/commands/update.js +66 -0
  581. package/dist/cli/commands/wait.d.ts +4 -1
  582. package/dist/cli/commands/wait.d.ts.map +1 -1
  583. package/dist/cli/commands/wait.js +82 -7
  584. package/dist/cli/config/agent-target-options.d.ts +46 -0
  585. package/dist/cli/config/agent-target-options.d.ts.map +1 -0
  586. package/dist/cli/config/agent-target-options.js +54 -0
  587. package/dist/cli/docs/agent-operations.d.ts +2 -2
  588. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  589. package/dist/cli/docs/agent-operations.js +47 -14
  590. package/dist/cli/types/index.d.ts +16 -0
  591. package/dist/cli/types/index.d.ts.map +1 -1
  592. package/dist/cli/utils/api-client.d.ts +4 -1
  593. package/dist/cli/utils/api-client.d.ts.map +1 -1
  594. package/dist/cli/utils/api-client.js +43 -5
  595. package/dist/cli/utils/npm-runner.d.ts +24 -0
  596. package/dist/cli/utils/npm-runner.d.ts.map +1 -1
  597. package/dist/cli/utils/npm-runner.js +51 -1
  598. package/dist/cli/utils/pager.d.ts +28 -0
  599. package/dist/cli/utils/pager.d.ts.map +1 -0
  600. package/dist/cli/utils/pager.js +57 -0
  601. package/dist/cli/utils/pid-manager.d.ts +12 -2
  602. package/dist/cli/utils/pid-manager.d.ts.map +1 -1
  603. package/dist/cli/utils/pid-manager.js +76 -13
  604. package/dist/lib/detection/ansi.d.ts +30 -0
  605. package/dist/lib/detection/ansi.d.ts.map +1 -0
  606. package/dist/lib/detection/ansi.js +39 -0
  607. package/dist/lib/tmux/transcript-squeeze.d.ts +76 -0
  608. package/dist/lib/tmux/transcript-squeeze.d.ts.map +1 -0
  609. package/dist/lib/tmux/transcript-squeeze.js +96 -0
  610. package/dist/server/server.js +125 -14
  611. package/dist/server/src/config/tmux-pane-config.js +33 -1
  612. package/dist/server/src/lib/auto-yes-state.js +64 -0
  613. package/dist/server/src/lib/cli-tools/antigravity.js +2 -1
  614. package/dist/server/src/lib/cli-tools/codex.js +3 -2
  615. package/dist/server/src/lib/cli-tools/copilot.js +2 -2
  616. package/dist/server/src/lib/cli-tools/gemini.js +2 -2
  617. package/dist/server/src/lib/cli-tools/opencode.js +2 -2
  618. package/dist/server/src/lib/cli-tools/vibe-local.js +2 -2
  619. package/dist/server/src/lib/db/agent-instances-db.js +53 -0
  620. package/dist/server/src/lib/db/db-repository.js +66 -2
  621. package/dist/server/src/lib/db/db.js +12 -3
  622. package/dist/server/src/lib/db/migrations/index.js +8 -0
  623. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  624. package/dist/server/src/lib/db/migrations/v52-orphaned-worktree-children.js +76 -0
  625. package/dist/server/src/lib/db/migrations/v53-worktree-aliases.js +53 -0
  626. package/dist/server/src/lib/db/migrations/v54-worktree-id-path-derived.js +204 -0
  627. package/dist/server/src/lib/db/migrations/v55-compact-churned-worktree-ids.js +207 -0
  628. package/dist/server/src/lib/db/migrations/worktree-child-tables.js +119 -0
  629. package/dist/server/src/lib/db/migrations/worktree-id-rename.js +153 -0
  630. package/dist/server/src/lib/db/worktree-alias-db.js +155 -0
  631. package/dist/server/src/lib/db/worktree-db.js +82 -77
  632. package/dist/server/src/lib/detection/cli-patterns.js +109 -2
  633. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +10 -1
  634. package/dist/server/src/lib/detection/status-detector.js +52 -2
  635. package/dist/server/src/lib/git/worktree-id.js +145 -0
  636. package/dist/server/src/lib/git/worktree-redirect.js +155 -0
  637. package/dist/server/src/lib/git/worktrees.js +173 -27
  638. package/dist/server/src/lib/logger.js +13 -1
  639. package/dist/server/src/lib/polling/auto-yes-manager.js +3 -1
  640. package/dist/server/src/lib/polling/prompt-dedup.js +22 -0
  641. package/dist/server/src/lib/polling/response-checker.js +53 -13
  642. package/dist/server/src/lib/polling/response-dedup.js +22 -0
  643. package/dist/server/src/lib/polling/response-poller-core.js +107 -0
  644. package/dist/server/src/lib/polling/response-poller.js +4 -1
  645. package/dist/server/src/lib/response-extractor.js +22 -2
  646. package/dist/server/src/lib/session/claude-session.js +121 -37
  647. package/dist/server/src/lib/session/current-output-builder.js +14 -1
  648. package/dist/server/src/lib/session/session-start-error.js +125 -0
  649. package/dist/server/src/lib/session/worktree-session-reconcile.js +603 -0
  650. package/dist/server/src/lib/tasks/contract-parser.js +17 -1
  651. package/dist/server/src/lib/tasks/task-state-machine.js +23 -1
  652. package/dist/server/src/lib/tmux/control-mode-tmux-transport.js +7 -0
  653. package/dist/server/src/lib/tmux/read-mode-pager.js +161 -0
  654. package/dist/server/src/lib/tmux/read-mode.js +347 -0
  655. package/dist/server/src/lib/tmux/tmux-capture-cache.js +33 -0
  656. package/dist/server/src/lib/tmux/tmux-control-client.js +12 -0
  657. package/dist/server/src/lib/tmux/tmux-control-registry.js +55 -11
  658. package/dist/server/src/lib/tmux/tmux.js +104 -5
  659. package/dist/server/src/lib/ws-server.js +104 -1
  660. package/package.json +1 -1
  661. package/.next/server/chunks/1117.js +0 -1
  662. package/.next/server/chunks/1356.js +0 -4
  663. package/.next/server/chunks/1692.js +0 -1
  664. package/.next/server/chunks/4018.js +0 -1
  665. package/.next/server/chunks/4390.js +0 -1
  666. package/.next/server/chunks/8681.js +0 -1
  667. package/.next/static/chunks/744-d5e47fe16e7b9e06.js +0 -1
  668. package/.next/static/chunks/app/api/app/update/route-8440b6c72bed83a1.js +0 -1
  669. package/.next/static/chunks/app/api/app/update-check/route-8440b6c72bed83a1.js +0 -1
  670. package/.next/static/chunks/app/api/assistant/conversation/route-8440b6c72bed83a1.js +0 -1
  671. package/.next/static/chunks/app/api/assistant/current-output/route-8440b6c72bed83a1.js +0 -1
  672. package/.next/static/chunks/app/api/assistant/messages/route-8440b6c72bed83a1.js +0 -1
  673. package/.next/static/chunks/app/api/assistant/session/route-8440b6c72bed83a1.js +0 -1
  674. package/.next/static/chunks/app/api/assistant/start/route-8440b6c72bed83a1.js +0 -1
  675. package/.next/static/chunks/app/api/assistant/terminal/route-8440b6c72bed83a1.js +0 -1
  676. package/.next/static/chunks/app/api/assistant/tools/route-8440b6c72bed83a1.js +0 -1
  677. package/.next/static/chunks/app/api/auth/login/route-8440b6c72bed83a1.js +0 -1
  678. package/.next/static/chunks/app/api/auth/logout/route-8440b6c72bed83a1.js +0 -1
  679. package/.next/static/chunks/app/api/auth/status/route-8440b6c72bed83a1.js +0 -1
  680. package/.next/static/chunks/app/api/daily-summary/route-8440b6c72bed83a1.js +0 -1
  681. package/.next/static/chunks/app/api/daily-summary/status/route-8440b6c72bed83a1.js +0 -1
  682. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8440b6c72bed83a1.js +0 -1
  683. package/.next/static/chunks/app/api/external-apps/[id]/route-8440b6c72bed83a1.js +0 -1
  684. package/.next/static/chunks/app/api/external-apps/route-8440b6c72bed83a1.js +0 -1
  685. package/.next/static/chunks/app/api/fs/browse/route-8440b6c72bed83a1.js +0 -1
  686. package/.next/static/chunks/app/api/fs/recent-paths/route-8440b6c72bed83a1.js +0 -1
  687. package/.next/static/chunks/app/api/hooks/agent-event/route-8440b6c72bed83a1.js +0 -1
  688. package/.next/static/chunks/app/api/hooks/claude-done/route-8440b6c72bed83a1.js +0 -1
  689. package/.next/static/chunks/app/api/metrics/vibe/route-8440b6c72bed83a1.js +0 -1
  690. package/.next/static/chunks/app/api/ollama/models/route-8440b6c72bed83a1.js +0 -1
  691. package/.next/static/chunks/app/api/push/subscriptions/route-8440b6c72bed83a1.js +0 -1
  692. package/.next/static/chunks/app/api/push/vapid/route-8440b6c72bed83a1.js +0 -1
  693. package/.next/static/chunks/app/api/repositories/[id]/route-8440b6c72bed83a1.js +0 -1
  694. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
  695. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8440b6c72bed83a1.js +0 -1
  696. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8440b6c72bed83a1.js +0 -1
  697. package/.next/static/chunks/app/api/repositories/clone/route-8440b6c72bed83a1.js +0 -1
  698. package/.next/static/chunks/app/api/repositories/excluded/route-8440b6c72bed83a1.js +0 -1
  699. package/.next/static/chunks/app/api/repositories/restore/route-8440b6c72bed83a1.js +0 -1
  700. package/.next/static/chunks/app/api/repositories/route-8440b6c72bed83a1.js +0 -1
  701. package/.next/static/chunks/app/api/repositories/scan/route-8440b6c72bed83a1.js +0 -1
  702. package/.next/static/chunks/app/api/repositories/sync/route-8440b6c72bed83a1.js +0 -1
  703. package/.next/static/chunks/app/api/repositories/validate-path/route-8440b6c72bed83a1.js +0 -1
  704. package/.next/static/chunks/app/api/sidebar/group-order/route-8440b6c72bed83a1.js +0 -1
  705. package/.next/static/chunks/app/api/skills/[id]/route-8440b6c72bed83a1.js +0 -1
  706. package/.next/static/chunks/app/api/skills/installations/route-8440b6c72bed83a1.js +0 -1
  707. package/.next/static/chunks/app/api/skills/operations/route-8440b6c72bed83a1.js +0 -1
  708. package/.next/static/chunks/app/api/skills/reindex/route-8440b6c72bed83a1.js +0 -1
  709. package/.next/static/chunks/app/api/skills/route-8440b6c72bed83a1.js +0 -1
  710. package/.next/static/chunks/app/api/slash-commands/route-8440b6c72bed83a1.js +0 -1
  711. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8440b6c72bed83a1.js +0 -1
  712. package/.next/static/chunks/app/api/tasks/[taskId]/route-8440b6c72bed83a1.js +0 -1
  713. package/.next/static/chunks/app/api/templates/[id]/route-8440b6c72bed83a1.js +0 -1
  714. package/.next/static/chunks/app/api/templates/route-8440b6c72bed83a1.js +0 -1
  715. package/.next/static/chunks/app/api/todos/route-8440b6c72bed83a1.js +0 -1
  716. package/.next/static/chunks/app/api/verification/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
  717. package/.next/static/chunks/app/api/verification/runs/route-8440b6c72bed83a1.js +0 -1
  718. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8440b6c72bed83a1.js +0 -1
  719. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8440b6c72bed83a1.js +0 -1
  720. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8440b6c72bed83a1.js +0 -1
  721. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8440b6c72bed83a1.js +0 -1
  722. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8440b6c72bed83a1.js +0 -1
  723. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8440b6c72bed83a1.js +0 -1
  724. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8440b6c72bed83a1.js +0 -1
  725. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8440b6c72bed83a1.js +0 -1
  726. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8440b6c72bed83a1.js +0 -1
  727. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8440b6c72bed83a1.js +0 -1
  728. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8440b6c72bed83a1.js +0 -1
  729. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8440b6c72bed83a1.js +0 -1
  730. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8440b6c72bed83a1.js +0 -1
  731. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8440b6c72bed83a1.js +0 -1
  732. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8440b6c72bed83a1.js +0 -1
  733. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8440b6c72bed83a1.js +0 -1
  734. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8440b6c72bed83a1.js +0 -1
  735. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8440b6c72bed83a1.js +0 -1
  736. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8440b6c72bed83a1.js +0 -1
  737. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8440b6c72bed83a1.js +0 -1
  738. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8440b6c72bed83a1.js +0 -1
  739. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8440b6c72bed83a1.js +0 -1
  740. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8440b6c72bed83a1.js +0 -1
  741. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8440b6c72bed83a1.js +0 -1
  742. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8440b6c72bed83a1.js +0 -1
  743. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8440b6c72bed83a1.js +0 -1
  744. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8440b6c72bed83a1.js +0 -1
  745. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8440b6c72bed83a1.js +0 -1
  746. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8440b6c72bed83a1.js +0 -1
  747. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8440b6c72bed83a1.js +0 -1
  748. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8440b6c72bed83a1.js +0 -1
  749. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8440b6c72bed83a1.js +0 -1
  750. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8440b6c72bed83a1.js +0 -1
  751. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8440b6c72bed83a1.js +0 -1
  752. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8440b6c72bed83a1.js +0 -1
  753. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8440b6c72bed83a1.js +0 -1
  754. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8440b6c72bed83a1.js +0 -1
  755. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8440b6c72bed83a1.js +0 -1
  756. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8440b6c72bed83a1.js +0 -1
  757. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8440b6c72bed83a1.js +0 -1
  758. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8440b6c72bed83a1.js +0 -1
  759. package/.next/static/chunks/app/api/worktrees/[id]/route-8440b6c72bed83a1.js +0 -1
  760. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8440b6c72bed83a1.js +0 -1
  761. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8440b6c72bed83a1.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8440b6c72bed83a1.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8440b6c72bed83a1.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8440b6c72bed83a1.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8440b6c72bed83a1.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8440b6c72bed83a1.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8440b6c72bed83a1.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8440b6c72bed83a1.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8440b6c72bed83a1.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8440b6c72bed83a1.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8440b6c72bed83a1.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8440b6c72bed83a1.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8440b6c72bed83a1.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8440b6c72bed83a1.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8440b6c72bed83a1.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8440b6c72bed83a1.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8440b6c72bed83a1.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8440b6c72bed83a1.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8440b6c72bed83a1.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8440b6c72bed83a1.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8440b6c72bed83a1.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8440b6c72bed83a1.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8440b6c72bed83a1.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8440b6c72bed83a1.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/route-8440b6c72bed83a1.js +0 -1
  788. package/.next/static/chunks/app/manifest.webmanifest/route-8440b6c72bed83a1.js +0 -1
  789. package/.next/static/chunks/app/proxy/[...path]/route-8440b6c72bed83a1.js +0 -1
  790. package/.next/static/chunks/app/repositories/page-1ed1e5a542ecc168.js +0 -1
  791. package/.next/static/chunks/app/worktrees/[id]/page-12b3c5f32fc6094e.js +0 -1
  792. /package/.next/static/{-BSmW0Ae2YsxyCl_ue7_d → C01FQOE5FCmB3I_GhMa4_}/_buildManifest.js +0 -0
  793. /package/.next/static/{-BSmW0Ae2YsxyCl_ue7_d → C01FQOE5FCmB3I_GhMa4_}/_ssgManifest.js +0 -0
@@ -28,6 +28,8 @@ exports.disableExistingRepository = disableExistingRepository;
28
28
  exports.getExcludedRepositoryPaths = getExcludedRepositoryPaths;
29
29
  exports.getExcludedRepositories = getExcludedRepositories;
30
30
  exports.restoreRepository = restoreRepository;
31
+ exports.countDisabledRepositories = countDisabledRepositories;
32
+ exports.setRepositoryEnabled = setRepositoryEnabled;
31
33
  exports.createCloneJob = createCloneJob;
32
34
  exports.getCloneJob = getCloneJob;
33
35
  exports.updateCloneJob = updateCloneJob;
@@ -449,8 +451,7 @@ function disableRepository(db, repositoryPath) {
449
451
  }
450
452
  const resolvedPath = resolveRepositoryPath(repositoryPath);
451
453
  // SEC-SF-004: Check disabled repository count limit before creating new record
452
- const disabledCount = db.prepare('SELECT COUNT(*) as count FROM repositories WHERE enabled = 0').get();
453
- if (disabledCount.count >= exports.MAX_DISABLED_REPOSITORIES) {
454
+ if (countDisabledRepositories(db) >= exports.MAX_DISABLED_REPOSITORIES) {
454
455
  throw new Error('Disabled repository limit exceeded');
455
456
  }
456
457
  createRepository(db, {
@@ -508,6 +509,69 @@ function restoreRepository(db, repoPath) {
508
509
  updateRepository(db, repo.id, { enabled: true });
509
510
  return { ...repo, enabled: true };
510
511
  }
512
+ /**
513
+ * Number of repositories currently excluded from scans (`enabled = 0`).
514
+ *
515
+ * Extracted so the SEC-SF-004 ceiling is counted the same way by every caller
516
+ * that can create one more disabled row ({@link disableRepository}) or flip an
517
+ * enabled row to disabled ({@link setRepositoryEnabled}).
518
+ */
519
+ function countDisabledRepositories(db) {
520
+ const row = db
521
+ .prepare('SELECT COUNT(*) as count FROM repositories WHERE enabled = 0')
522
+ .get();
523
+ return Number(row.count) || 0;
524
+ }
525
+ /**
526
+ * Flip a repository's scan-inclusion flag by id, and touch NOTHING else
527
+ * (Issue #1658).
528
+ *
529
+ * This is the non-destructive counterpart to `DELETE /api/repositories`, which
530
+ * is "exclude **and purge**": it disables the repository, kills every tmux
531
+ * session under it, and deletes its `worktrees` rows — taking chat history,
532
+ * memos, todos, timers, schedules, execution logs, tasks and verification runs
533
+ * with them (`deleteWorktreeChildRows`). A user who only wants a scan root to
534
+ * stop being scanned had no other route, so "stop scanning this" cost them
535
+ * their history and their running agents.
536
+ *
537
+ * What this function does, exhaustively: one `UPDATE repositories SET enabled`.
538
+ * It does not read, write or delete `worktrees` or any child table, and it
539
+ * never touches `visible` — `enabled` (scan inclusion, Issue #190) and
540
+ * `visible` (sidebar display, Issue #690) stay orthogonal columns, so
541
+ * re-enabling restores the user's own visibility choice rather than a guess.
542
+ *
543
+ * The scan side is the other half of the pair and already reads this flag:
544
+ * `POST /api/repositories/sync` and `server.ts` both drop `enabled = 0` paths
545
+ * via {@link registerAndFilterRepositories}, and neither
546
+ * `syncWorktreesToDB`'s per-repository prune nor `pruneStaleRepositoryWorktrees`
547
+ * can reach the rows of a repository that is merely absent from the scan while
548
+ * its directory still exists.
549
+ *
550
+ * SEC-SF-004: disabling one more repository is refused once
551
+ * {@link MAX_DISABLED_REPOSITORIES} rows are already disabled. Re-disabling an
552
+ * already-disabled repository adds no row and is therefore always allowed.
553
+ *
554
+ * @param db - Database instance
555
+ * @param id - Repository id (`repositories.id`), not a path
556
+ * @param enabled - `true` to include in scans, `false` to exclude
557
+ * @returns The repository as it now stands, or `null` when no row has that id
558
+ * @throws {RepositoryDbError} code `LIMIT_EXCEEDED` when the disabled ceiling
559
+ * would be crossed
560
+ */
561
+ function setRepositoryEnabled(db, id, enabled) {
562
+ const repo = getRepositoryById(db, id);
563
+ if (!repo)
564
+ return null;
565
+ // Already in the requested state: nothing to write, and no ceiling to test
566
+ // (the row is already counted).
567
+ if (repo.enabled === enabled)
568
+ return repo;
569
+ if (!enabled && countDisabledRepositories(db) >= exports.MAX_DISABLED_REPOSITORIES) {
570
+ throw new RepositoryDbError(`Cannot disable more than ${exports.MAX_DISABLED_REPOSITORIES} repositories`, 'LIMIT_EXCEEDED');
571
+ }
572
+ updateRepository(db, id, { enabled });
573
+ return getRepositoryById(db, id);
574
+ }
511
575
  // ============================================================
512
576
  // Clone Job Operations
513
577
  // ============================================================
@@ -10,9 +10,9 @@
10
10
  * @internal functions from being unintentionally exposed.
11
11
  */
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.removeAgentInstance = exports.addAgentInstance = exports.setAgentInstances = exports.countAgentInstances = exports.getAgentInstance = exports.getAgentInstances = exports.deleteSessionState = exports.clearInProgressMessageId = exports.setInProgressMessageId = exports.updateSessionState = exports.getSessionState = exports.getMessagesByDateRange = exports.ACTIVE_FILTER = exports.markPendingPromptsAsAnswered = exports.updatePromptData = exports.getMessageById = exports.recomputeLastUserMessage = exports.clearLastUserMessage = exports.updateLastUserMessage = exports.deleteMessagesByInstance = exports.deleteMessagesByCliTool = exports.deleteMessageById = exports.deleteAllMessages = exports.getLastMessage = exports.getLastUserMessage = exports.getMessages = exports.updateMessageContent = exports.createMessage = exports.getLastAssistantMessageAt = exports.deleteWorktreesByIds = exports.deleteRepositoryWorktrees = exports.migrateWorktreeIdPreservingChildren = exports.getWorktreesByRepository = exports.getWorktreeIdsByRepository = exports.getInitialBranch = exports.saveInitialBranch = exports.updateVibeLocalContextWindow = exports.updateVibeLocalModel = exports.updateSelectedAgents = exports.updateCliToolId = exports.updateStatus = exports.updateFavorite = exports.updateLastViewedAt = exports.updateWorktreeLink = exports.updateWorktreeDescription = exports.upsertWorktree = exports.getWorktreeById = exports.getRepositories = exports.getWorktrees = exports.initDatabase = void 0;
14
- exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = exports.updateAssistantMessageStatus = exports.createAssistantMessage = exports.updateAssistantConversation = exports.createAssistantConversation = exports.getAssistantConversationByRepositoryAndCliTool = exports.getAssistantConversationById = exports.updateDailyReportContent = exports.saveDailyReport = exports.getDailyReport = exports.recoverStuckSendingTimers = exports.clearTimerHistory = exports.cleanupOldTimers = exports.getPendingTimerCountByWorktree = exports.cancelTimersByWorktree = exports.cancelTimer = exports.updateTimerStatus = exports.getPendingTimers = exports.getTimerById = exports.getTimersByWorktree = exports.createTimer = exports.WORKTREE_TODO_STATUSES = exports.isWorktreeTodoStatus = exports.reorderWorktreeTodos = exports.deleteWorktreeTodo = exports.updateWorktreeTodo = exports.createWorktreeTodo = exports.getWorktreeTodoById = exports.getTodosByWorktreeId = exports.deleteTodo = exports.updateTodo = exports.createTodo = exports.getTodoById = exports.getAllTodos = exports.getTodosByRepositoryId = exports.MemoDbError = exports.reorderMemos = exports.deleteMemo = exports.updateMemo = exports.createMemo = exports.getMemoById = exports.getMemosByWorktreeId = exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = void 0;
15
- exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = void 0;
13
+ exports.clearInProgressMessageId = exports.setInProgressMessageId = exports.updateSessionState = exports.getSessionState = exports.getMessagesByDateRange = exports.ACTIVE_FILTER = exports.markPendingPromptsAsAnswered = exports.updatePromptData = exports.getMessageById = exports.recomputeLastUserMessage = exports.clearLastUserMessage = exports.updateLastUserMessage = exports.deleteMessagesByInstance = exports.deleteMessagesByCliTool = exports.deleteMessageById = exports.deleteAllMessages = exports.getLastMessage = exports.getLastUserMessage = exports.getMessages = exports.updateMessageContent = exports.createMessage = exports.getLastAssistantMessageAt = exports.getAliasedWorktreeIds = exports.getAllWorktreeAliases = exports.getWorktreeAliases = exports.resolveWorktreeIdWithAlias = exports.recordWorktreeAlias = exports.deleteWorktreesByIds = exports.deleteRepositoryWorktrees = exports.migrateWorktreeIdPreservingChildren = exports.getAllWorktreePathIds = exports.getAllWorktreeIds = exports.getWorktreesByRepository = exports.getWorktreeIdsByRepository = exports.getInitialBranch = exports.saveInitialBranch = exports.updateVibeLocalContextWindow = exports.updateVibeLocalModel = exports.updateSelectedAgents = exports.updateCliToolId = exports.updateStatus = exports.updateFavorite = exports.updateLastViewedAt = exports.updateWorktreeLink = exports.updateWorktreeDescription = exports.upsertWorktree = exports.getWorktreeById = exports.getRepositories = exports.getWorktrees = exports.initDatabase = void 0;
14
+ exports.updateAssistantMessageStatus = exports.createAssistantMessage = exports.updateAssistantConversation = exports.createAssistantConversation = exports.getAssistantConversationByRepositoryAndCliTool = exports.getAssistantConversationById = exports.updateDailyReportContent = exports.saveDailyReport = exports.getDailyReport = exports.recoverStuckSendingTimers = exports.clearTimerHistory = exports.cleanupOldTimers = exports.getPendingTimerCountByWorktree = exports.cancelTimersByWorktree = exports.cancelTimer = exports.updateTimerStatus = exports.getPendingTimers = exports.getTimerById = exports.getTimersByWorktree = exports.createTimer = exports.WORKTREE_TODO_STATUSES = exports.isWorktreeTodoStatus = exports.reorderWorktreeTodos = exports.deleteWorktreeTodo = exports.updateWorktreeTodo = exports.createWorktreeTodo = exports.getWorktreeTodoById = exports.getTodosByWorktreeId = exports.deleteTodo = exports.updateTodo = exports.createTodo = exports.getTodoById = exports.getAllTodos = exports.getTodosByRepositoryId = exports.MemoDbError = exports.reorderMemos = exports.deleteMemo = exports.updateMemo = exports.createMemo = exports.getMemoById = exports.getMemosByWorktreeId = exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = exports.removeAgentInstance = exports.addAgentInstance = exports.setAgentInstances = exports.countAgentInstances = exports.getAgentInstance = exports.getAgentInstances = exports.deleteSessionState = void 0;
15
+ exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = void 0;
16
16
  // init-db
17
17
  var init_db_1 = require("./init-db");
18
18
  Object.defineProperty(exports, "initDatabase", { enumerable: true, get: function () { return init_db_1.initDatabase; } });
@@ -35,9 +35,18 @@ Object.defineProperty(exports, "saveInitialBranch", { enumerable: true, get: fun
35
35
  Object.defineProperty(exports, "getInitialBranch", { enumerable: true, get: function () { return worktree_db_1.getInitialBranch; } });
36
36
  Object.defineProperty(exports, "getWorktreeIdsByRepository", { enumerable: true, get: function () { return worktree_db_1.getWorktreeIdsByRepository; } });
37
37
  Object.defineProperty(exports, "getWorktreesByRepository", { enumerable: true, get: function () { return worktree_db_1.getWorktreesByRepository; } });
38
+ Object.defineProperty(exports, "getAllWorktreeIds", { enumerable: true, get: function () { return worktree_db_1.getAllWorktreeIds; } });
39
+ Object.defineProperty(exports, "getAllWorktreePathIds", { enumerable: true, get: function () { return worktree_db_1.getAllWorktreePathIds; } });
38
40
  Object.defineProperty(exports, "migrateWorktreeIdPreservingChildren", { enumerable: true, get: function () { return worktree_db_1.migrateWorktreeIdPreservingChildren; } });
39
41
  Object.defineProperty(exports, "deleteRepositoryWorktrees", { enumerable: true, get: function () { return worktree_db_1.deleteRepositoryWorktrees; } });
40
42
  Object.defineProperty(exports, "deleteWorktreesByIds", { enumerable: true, get: function () { return worktree_db_1.deleteWorktreesByIds; } });
43
+ // worktree-alias-db (Issue #1621: old IDs stay resolvable after a rename)
44
+ var worktree_alias_db_1 = require("./worktree-alias-db");
45
+ Object.defineProperty(exports, "recordWorktreeAlias", { enumerable: true, get: function () { return worktree_alias_db_1.recordWorktreeAlias; } });
46
+ Object.defineProperty(exports, "resolveWorktreeIdWithAlias", { enumerable: true, get: function () { return worktree_alias_db_1.resolveWorktreeIdWithAlias; } });
47
+ Object.defineProperty(exports, "getWorktreeAliases", { enumerable: true, get: function () { return worktree_alias_db_1.getWorktreeAliases; } });
48
+ Object.defineProperty(exports, "getAllWorktreeAliases", { enumerable: true, get: function () { return worktree_alias_db_1.getAllWorktreeAliases; } });
49
+ Object.defineProperty(exports, "getAliasedWorktreeIds", { enumerable: true, get: function () { return worktree_alias_db_1.getAliasedWorktreeIds; } });
41
50
  // chat-db
42
51
  var chat_db_1 = require("./chat-db");
43
52
  Object.defineProperty(exports, "getLastAssistantMessageAt", { enumerable: true, get: function () { return chat_db_1.getLastAssistantMessageAt; } });
@@ -35,6 +35,10 @@ const v48_skill_operations_audit_index_1 = require("./v48-skill-operations-audit
35
35
  const v49_verification_runs_1 = require("./v49-verification-runs");
36
36
  const v50_tasks_1 = require("./v50-tasks");
37
37
  const v51_task_events_1 = require("./v51-task-events");
38
+ const v52_orphaned_worktree_children_1 = require("./v52-orphaned-worktree-children");
39
+ const v53_worktree_aliases_1 = require("./v53-worktree-aliases");
40
+ const v54_worktree_id_path_derived_1 = require("./v54-worktree-id-path-derived");
41
+ const v55_compact_churned_worktree_ids_1 = require("./v55-compact-churned-worktree-ids");
38
42
  /**
39
43
  * Complete ordered list of all migrations.
40
44
  * Used internally by the barrel file (db-migrations.ts); NOT exported from the barrel (DR2-004).
@@ -73,4 +77,8 @@ exports.migrations = [
73
77
  ...v49_verification_runs_1.v49_migrations,
74
78
  ...v50_tasks_1.v50_migrations,
75
79
  ...v51_task_events_1.v51_migrations,
80
+ ...v52_orphaned_worktree_children_1.v52_migrations,
81
+ ...v53_worktree_aliases_1.v53_migrations,
82
+ ...v54_worktree_id_path_derived_1.v54_migrations,
83
+ ...v55_compact_churned_worktree_ids_1.v55_migrations,
76
84
  ];
@@ -17,7 +17,7 @@ const path_1 = __importDefault(require("path"));
17
17
  * Current schema version
18
18
  * Increment this when adding new migrations
19
19
  */
20
- exports.CURRENT_SCHEMA_VERSION = 51;
20
+ exports.CURRENT_SCHEMA_VERSION = 55;
21
21
  /**
22
22
  * Get current schema version from database
23
23
  */
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ /**
3
+ * Migration v52: delete child rows pointing at a worktree that no longer exists
4
+ * (Issue #1621, Phase 0).
5
+ *
6
+ * `getWorktreeChildTables` used to enumerate child tables from foreign-key
7
+ * metadata alone, so `tasks` (#1548), `verification_runs` (#1544) and
8
+ * `skill_operations` (#1428) — each holding a `worktree_id` with no constraint
9
+ * declared — were invisible to both the rename path and the delete path. No
10
+ * CASCADE fires without a foreign key, so every worktree deleted since those
11
+ * tables landed left their rows behind, and every worktree ID rename left them
12
+ * addressing an ID nothing resolves. The code fix stops new orphans; this
13
+ * migration removes the ones already written.
14
+ *
15
+ * The sweep reuses the shared enumeration rather than naming tables, so the
16
+ * FK-less tables above and the FK-declared ones are treated identically — an
17
+ * orphan in a CASCADE table is equally unreachable, it just needed a
18
+ * `foreign_keys = OFF` window to be created.
19
+ *
20
+ * Three deliberate narrowings:
21
+ *
22
+ * - Append-only ledgers are excluded (`getDeletableWorktreeChildTables`).
23
+ * `skill_operations` holds a `worktree_id` and does have rows referencing
24
+ * worktrees that are gone, but it declares `BEFORE DELETE ... RAISE(ABORT)`
25
+ * (#1234) and is read across every worktree by the audit feed. Deleting from
26
+ * it aborts the statement, which here would roll back the migration and take
27
+ * startup with it (measured). Its rows are history, not orphans.
28
+ * - `worktree_id IS NULL` rows are left alone. Every current child table
29
+ * declares the column NOT NULL, so this cannot fire today; if a future table
30
+ * makes it nullable, a NULL means "not attached", not "attached to something
31
+ * gone", and deleting it would be data loss rather than cleanup.
32
+ * - `verification_gate_results` has no `worktree_id` and is not swept directly.
33
+ * It reaches its worktree through `verification_runs(id) ON DELETE CASCADE`,
34
+ * so deleting the orphaned runs takes its rows with them (better-sqlite3
35
+ * enables `foreign_keys` by default, and db-instance.ts sets it explicitly).
36
+ * `task_events` is *not* in the same position: v51 declares no foreign key to
37
+ * `tasks` on purpose, because history that vanishes with its subject cannot
38
+ * be audited afterwards. That is a design choice, not an orphan, so it stays.
39
+ */
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.v52_migrations = void 0;
42
+ const worktree_child_tables_1 = require("./worktree-child-tables");
43
+ exports.v52_migrations = [
44
+ {
45
+ version: 52,
46
+ name: 'delete-orphaned-worktree-children',
47
+ up: (db) => {
48
+ let deleted = 0;
49
+ for (const { table, column } of (0, worktree_child_tables_1.getDeletableWorktreeChildTables)(db)) {
50
+ // Identifiers come from sqlite_master / PRAGMA, never from user input.
51
+ // The alias is `cm_parent` rather than something short like `w` so it
52
+ // cannot collide with a child table that happens to be named the same.
53
+ const result = db
54
+ .prepare(`DELETE FROM "${table}"
55
+ WHERE "${column}" IS NOT NULL
56
+ AND NOT EXISTS (
57
+ SELECT 1 FROM worktrees AS cm_parent
58
+ WHERE cm_parent.id = "${table}"."${column}"
59
+ )`)
60
+ .run();
61
+ if (result.changes > 0) {
62
+ console.log(`Deleted ${result.changes} orphaned row(s) from ${table}.${column}`);
63
+ deleted += result.changes;
64
+ }
65
+ }
66
+ if (deleted === 0) {
67
+ console.log('No orphaned worktree child rows found');
68
+ }
69
+ },
70
+ down: () => {
71
+ // Deleted rows cannot be resurrected. Defined anyway so rollback tooling
72
+ // (and the tests that rebuild a v51 database) keep working.
73
+ console.log('No rollback for orphaned child row cleanup (rows are gone)');
74
+ },
75
+ },
76
+ ];
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Migration v53: worktree_aliases (Issue #1621, Phase 2).
4
+ *
5
+ * Every ID a worktree has ever answered to, mapped to the ID it answers to now.
6
+ * #1644 froze the ID at first registration, but rows written before that carry
7
+ * a branch-derived ID, and #1645 will renumber them. The moment an ID moves,
8
+ * every URL a human kept — an open tab, a phone, a PWA shortcut, a bookmark, a
9
+ * script's `commandmate send <id>` — points at something that no longer
10
+ * resolves. An alias makes the old ID keep working instead of 404ing.
11
+ *
12
+ * `old_id` is the primary key: one historical ID resolves to exactly one
13
+ * worktree. `worktree_id` cascades, so a deleted worktree takes its aliases
14
+ * with it rather than leaving redirects to a dead row. (The column is also
15
+ * named `worktree_id`, so `getWorktreeChildTables` finds this table on both of
16
+ * its axes and a *rename* re-points the alias as well — an ID renamed twice
17
+ * still resolves in one hop, never a chain.)
18
+ *
19
+ * Resolution order is worktrees-first, aliases-second, and the ID minter is
20
+ * told about alias IDs too (`deriveWorktreeId`'s taken set), so a fresh
21
+ * worktree cannot be handed an ID that an alias would otherwise shadow. Both
22
+ * halves are needed: the index below exists for the second lookup, which runs
23
+ * on every API request whose worktree ID is not a live row.
24
+ *
25
+ * Timestamps are epoch milliseconds (INTEGER), matching v44 onward.
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.v53_migrations = void 0;
29
+ exports.v53_migrations = [
30
+ {
31
+ version: 53,
32
+ name: 'add-worktree-aliases',
33
+ up: (db) => {
34
+ db.exec(`
35
+ CREATE TABLE IF NOT EXISTS worktree_aliases (
36
+ old_id TEXT PRIMARY KEY,
37
+ worktree_id TEXT NOT NULL REFERENCES worktrees(id) ON DELETE CASCADE,
38
+ created_at INTEGER NOT NULL
39
+ );
40
+ `);
41
+ // Aliases are read by old_id (the PK covers that) and swept by
42
+ // worktree_id whenever a worktree is renamed or deleted.
43
+ db.exec(`
44
+ CREATE INDEX IF NOT EXISTS idx_worktree_aliases_worktree_id
45
+ ON worktree_aliases(worktree_id);
46
+ `);
47
+ },
48
+ down: (db) => {
49
+ db.exec('DROP INDEX IF EXISTS idx_worktree_aliases_worktree_id;');
50
+ db.exec('DROP TABLE IF EXISTS worktree_aliases;');
51
+ },
52
+ },
53
+ ];
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ /**
3
+ * Migration v54: renumber every existing worktree to its path-derived ID
4
+ * (Issue #1621 Phase 4, delivered by #1645).
5
+ *
6
+ * #1644 stopped the ID from moving on its own — `syncWorktreesToDB` now looks a
7
+ * row up by path and keeps whatever ID it already carries. What it deliberately
8
+ * did NOT do is touch the rows already in the database: those still hold
9
+ * `sanitize(repoName)-sanitize(branch)`, so every one of them is still a
10
+ * branch-derived ID that merely happens to be frozen. The failures #1621
11
+ * enumerates are only really gone once the stored IDs are the directory's.
12
+ *
13
+ * This migration is the one moment the whole table moves at once, which is what
14
+ * makes the two problems below real rather than theoretical.
15
+ *
16
+ * ## Why the renaming is staged through temporary IDs
17
+ *
18
+ * One worktree's NEW ID can be another worktree's CURRENT ID. The design's own
19
+ * example: the directory registered today as `mycodebranchdesk-main` (repo
20
+ * `MyCodeBranchDesk`, branch `main`) is at `.../commandmate-main`, so its new ID
21
+ * is `commandmate-main` — which is exactly the shape another row could already
22
+ * be using. Renaming pairwise would then hit
23
+ * `renameWorktreeIdPreservingChildren`'s collision branch, which *merges* the
24
+ * source into the destination and deletes the source row: silent data loss. A
25
+ * straight swap (A→B, B→A) has no safe ordering at all. Every rename therefore
26
+ * goes `old → cmate-mig54-<n> → new`, so no intermediate state can collide.
27
+ *
28
+ * ## Why an ID is never minted onto an ID somebody else is vacating
29
+ *
30
+ * A retired ID does not disappear, it becomes an alias, and live worktrees beat
31
+ * aliases at resolution time. So if worktree B were handed `x` — the ID worktree
32
+ * A is retiring — every bookmark of A's `x` would silently start landing on B.
33
+ * The taken set therefore holds **every current worktree ID** and **every
34
+ * pre-existing alias**, minus the row's own ID (which it is free to keep). A
35
+ * blocked candidate falls back to `basename-<sha256(path)[0..8]>`, exactly as a
36
+ * same-basename collision does.
37
+ *
38
+ * ## What follows the move, and what deliberately does not
39
+ *
40
+ * Child rows follow through `renameWorktreeIdPreservingChildren`, which
41
+ * enumerates by `worktree_id` column rather than by declared foreign key — the
42
+ * only reason `tasks` (#1548), `verification_runs` (#1544) and the aliases
43
+ * themselves come along. `skill_operations` does NOT: it is an append-only
44
+ * ledger whose `BEFORE UPDATE ... RAISE(ABORT)` trigger (#1234) would abort this
45
+ * migration outright. Its rows keep the ID that was in force when they were
46
+ * written, which is what an audit log is for, and the alias recorded here keeps
47
+ * them resolvable.
48
+ *
49
+ * tmux sessions and in-process state cannot be reached from a migration. They
50
+ * are reconciled at startup by `reconcileWorktreeSessionsFromAliases`, which
51
+ * reads the very alias rows this migration writes (`server.ts`).
52
+ */
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.v54_migrations = void 0;
58
+ exports.planWorktreeIdRenumbering = planWorktreeIdRenumbering;
59
+ const path_1 = __importDefault(require("path"));
60
+ const worktree_id_1 = require("../../../lib/git/worktree-id");
61
+ const worktree_id_rename_1 = require("./worktree-id-rename");
62
+ /**
63
+ * Prefix for the intermediate IDs used by the two-stage renaming.
64
+ *
65
+ * Deliberately not a plausible directory basename, and the rows carrying it
66
+ * exist only between the two loops below — both inside the migration's
67
+ * transaction, so no reader ever observes one.
68
+ */
69
+ const TEMP_ID_PREFIX = 'cmate-mig54-';
70
+ /**
71
+ * Decide the new ID for every worktree row.
72
+ *
73
+ * Exported for the unit tests: the planning is the part with the interesting
74
+ * rules (collision, self-retention, alias shadowing), and it is a pure function
75
+ * of the rows plus the reserved set.
76
+ *
77
+ * @param rows - Every worktree row, `id` and `path`
78
+ * @param aliasIds - IDs already answerable as aliases
79
+ * @returns The renames to apply, in row order; rows keeping their ID are omitted
80
+ * @internal
81
+ */
82
+ function planWorktreeIdRenumbering(rows, aliasIds) {
83
+ const currentIds = new Set(rows.map((row) => row.id));
84
+ const reserved = new Set([...currentIds, ...aliasIds]);
85
+ const assigned = new Set();
86
+ const plan = [];
87
+ for (const row of rows) {
88
+ const taken = new Set([...reserved, ...assigned]);
89
+ // A row is never blocked by its own ID: when the directory basename already
90
+ // equals it, the right answer is "keep it" and no rename is emitted.
91
+ taken.delete(row.id);
92
+ const newId = (0, worktree_id_1.deriveWorktreeId)(path_1.default.resolve(row.path), taken);
93
+ assigned.add(newId);
94
+ if (newId !== row.id)
95
+ plan.push({ oldId: row.id, newId });
96
+ }
97
+ return plan;
98
+ }
99
+ exports.v54_migrations = [
100
+ {
101
+ version: 54,
102
+ name: 'renumber-worktree-ids-from-path',
103
+ up: (db) => {
104
+ const rows = db
105
+ .prepare('SELECT id, path FROM worktrees ORDER BY id')
106
+ .all();
107
+ if (rows.length === 0) {
108
+ console.log('No worktrees to renumber');
109
+ return;
110
+ }
111
+ const aliasTableExists = db
112
+ .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'worktree_aliases'")
113
+ .get() !== undefined;
114
+ const aliasIds = aliasTableExists
115
+ ? db.prepare('SELECT old_id FROM worktree_aliases').all().map((row) => row.old_id)
116
+ : [];
117
+ const plan = planWorktreeIdRenumbering(rows, aliasIds);
118
+ if (plan.length === 0) {
119
+ console.log(`Worktree IDs already path-derived (${rows.length} row(s) checked)`);
120
+ return;
121
+ }
122
+ // Temporary IDs must not collide with anything real, including an ID this
123
+ // migration is about to hand out.
124
+ const inUse = new Set([
125
+ ...rows.map((row) => row.id),
126
+ ...aliasIds,
127
+ ...plan.map((entry) => entry.newId),
128
+ ]);
129
+ const tempIds = plan.map((_entry, index) => {
130
+ let candidate = `${TEMP_ID_PREFIX}${index}`;
131
+ for (let attempt = 1; inUse.has(candidate); attempt++) {
132
+ candidate = `${TEMP_ID_PREFIX}${index}-${attempt}`;
133
+ }
134
+ inUse.add(candidate);
135
+ return candidate;
136
+ });
137
+ // A single timestamp for every alias this migration writes, so the rows
138
+ // read as one event. (`Date.now()` is called once rather than per row for
139
+ // the same reason.)
140
+ const now = Date.now();
141
+ // Stage 1: park every row on an ID nothing else can want.
142
+ plan.forEach((entry, index) => {
143
+ (0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, entry.oldId, tempIds[index], now);
144
+ });
145
+ // Stage 2: into the real IDs, now guaranteed free.
146
+ plan.forEach((entry, index) => {
147
+ (0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, tempIds[index], entry.newId, now);
148
+ });
149
+ // Stage 1 recorded `oldId → temp` and stage 2 re-pointed it to
150
+ // `oldId → newId` (aliases are a child table, so the sweep moved them).
151
+ // What stage 2 also wrote is `temp → newId`, which is a redirect for an ID
152
+ // that never left this transaction — drop it so it neither answers
153
+ // requests nor blocks a future ID.
154
+ const deleteAlias = aliasTableExists
155
+ ? db.prepare('DELETE FROM worktree_aliases WHERE old_id = ?')
156
+ : null;
157
+ if (deleteAlias) {
158
+ for (const tempId of tempIds)
159
+ deleteAlias.run(tempId);
160
+ }
161
+ for (const entry of plan) {
162
+ console.log(`Renumbered worktree ${entry.oldId} -> ${entry.newId}`);
163
+ }
164
+ console.log(`Renumbered ${plan.length} of ${rows.length} worktree(s) to path-derived IDs`);
165
+ },
166
+ down: (db) => {
167
+ // The alias rows record where each ID came from, so the move is reversible
168
+ // as long as they are still there. Same two-stage staging, in reverse.
169
+ const aliasTableExists = db
170
+ .prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'worktree_aliases'")
171
+ .get() !== undefined;
172
+ if (!aliasTableExists) {
173
+ console.log('No worktree_aliases table: nothing to roll back');
174
+ return;
175
+ }
176
+ const aliases = db
177
+ .prepare(`SELECT a.old_id, a.worktree_id
178
+ FROM worktree_aliases AS a
179
+ JOIN worktrees AS w ON w.id = a.worktree_id
180
+ ORDER BY a.old_id`)
181
+ .all();
182
+ if (aliases.length === 0) {
183
+ console.log('No worktree aliases to roll back');
184
+ return;
185
+ }
186
+ const now = Date.now();
187
+ const tempIds = aliases.map((_alias, index) => `${TEMP_ID_PREFIX}down-${index}`);
188
+ aliases.forEach((alias, index) => {
189
+ (0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, alias.worktree_id, tempIds[index], now);
190
+ });
191
+ aliases.forEach((alias, index) => {
192
+ (0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, tempIds[index], alias.old_id, now);
193
+ });
194
+ const deleteAlias = db.prepare('DELETE FROM worktree_aliases WHERE old_id = ?');
195
+ for (const tempId of tempIds)
196
+ deleteAlias.run(tempId);
197
+ // The forward IDs are now the historical ones; the rollback should not
198
+ // leave them redirecting back to the IDs it just undid.
199
+ for (const alias of aliases)
200
+ deleteAlias.run(alias.worktree_id);
201
+ console.log(`Rolled back ${aliases.length} worktree ID renumbering(s)`);
202
+ },
203
+ },
204
+ ];