commandmate 0.19.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 (765) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +252 -245
  3. package/.next/app-path-routes-manifest.json +31 -31
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/app/update/route.js +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 +31 -31
  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 +21 -17
  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 +5 -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 +157 -143
  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-2c412c29258637b6.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 +3 -2
  567. package/dist/cli/commands/capture.d.ts.map +1 -1
  568. package/dist/cli/commands/capture.js +3 -2
  569. package/dist/cli/commands/ls.d.ts.map +1 -1
  570. package/dist/cli/commands/ls.js +9 -3
  571. package/dist/cli/commands/respond.d.ts.map +1 -1
  572. package/dist/cli/commands/respond.js +3 -2
  573. package/dist/cli/commands/send.d.ts.map +1 -1
  574. package/dist/cli/commands/send.js +4 -3
  575. package/dist/cli/commands/update.d.ts.map +1 -1
  576. package/dist/cli/commands/update.js +66 -0
  577. package/dist/cli/commands/wait.d.ts.map +1 -1
  578. package/dist/cli/commands/wait.js +2 -1
  579. package/dist/cli/config/agent-target-options.d.ts +46 -0
  580. package/dist/cli/config/agent-target-options.d.ts.map +1 -0
  581. package/dist/cli/config/agent-target-options.js +54 -0
  582. package/dist/cli/docs/agent-operations.d.ts +2 -2
  583. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  584. package/dist/cli/docs/agent-operations.js +47 -14
  585. package/dist/cli/utils/api-client.d.ts +4 -1
  586. package/dist/cli/utils/api-client.d.ts.map +1 -1
  587. package/dist/cli/utils/api-client.js +43 -5
  588. package/dist/cli/utils/npm-runner.d.ts +24 -0
  589. package/dist/cli/utils/npm-runner.d.ts.map +1 -1
  590. package/dist/cli/utils/npm-runner.js +51 -1
  591. package/dist/cli/utils/pid-manager.d.ts +12 -2
  592. package/dist/cli/utils/pid-manager.d.ts.map +1 -1
  593. package/dist/cli/utils/pid-manager.js +76 -13
  594. package/dist/server/server.js +107 -14
  595. package/dist/server/src/lib/auto-yes-state.js +64 -0
  596. package/dist/server/src/lib/db/db-repository.js +66 -2
  597. package/dist/server/src/lib/db/db.js +12 -3
  598. package/dist/server/src/lib/db/migrations/index.js +6 -0
  599. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  600. package/dist/server/src/lib/db/migrations/v53-worktree-aliases.js +53 -0
  601. package/dist/server/src/lib/db/migrations/v54-worktree-id-path-derived.js +204 -0
  602. package/dist/server/src/lib/db/migrations/v55-compact-churned-worktree-ids.js +207 -0
  603. package/dist/server/src/lib/db/migrations/worktree-id-rename.js +153 -0
  604. package/dist/server/src/lib/db/worktree-alias-db.js +155 -0
  605. package/dist/server/src/lib/db/worktree-db.js +53 -71
  606. package/dist/server/src/lib/detection/cli-patterns.js +86 -2
  607. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +10 -1
  608. package/dist/server/src/lib/git/worktree-id.js +145 -0
  609. package/dist/server/src/lib/git/worktree-redirect.js +155 -0
  610. package/dist/server/src/lib/git/worktrees.js +173 -27
  611. package/dist/server/src/lib/logger.js +13 -1
  612. package/dist/server/src/lib/polling/auto-yes-manager.js +3 -1
  613. package/dist/server/src/lib/polling/prompt-dedup.js +22 -0
  614. package/dist/server/src/lib/polling/response-checker.js +53 -13
  615. package/dist/server/src/lib/polling/response-dedup.js +22 -0
  616. package/dist/server/src/lib/polling/response-poller-core.js +107 -0
  617. package/dist/server/src/lib/polling/response-poller.js +4 -1
  618. package/dist/server/src/lib/response-extractor.js +22 -2
  619. package/dist/server/src/lib/session/claude-session.js +117 -35
  620. package/dist/server/src/lib/session/current-output-builder.js +14 -1
  621. package/dist/server/src/lib/session/session-start-error.js +125 -0
  622. package/dist/server/src/lib/session/worktree-session-reconcile.js +603 -0
  623. package/dist/server/src/lib/tasks/contract-parser.js +17 -1
  624. package/dist/server/src/lib/tasks/task-state-machine.js +23 -1
  625. package/dist/server/src/lib/tmux/control-mode-tmux-transport.js +7 -0
  626. package/dist/server/src/lib/tmux/read-mode.js +22 -2
  627. package/dist/server/src/lib/tmux/tmux-capture-cache.js +33 -0
  628. package/dist/server/src/lib/tmux/tmux-control-client.js +12 -0
  629. package/dist/server/src/lib/tmux/tmux-control-registry.js +55 -11
  630. package/dist/server/src/lib/tmux/tmux.js +61 -0
  631. package/dist/server/src/lib/ws-server.js +104 -1
  632. package/package.json +1 -1
  633. package/.next/server/chunks/1117.js +0 -1
  634. package/.next/server/chunks/1356.js +0 -4
  635. package/.next/server/chunks/1692.js +0 -1
  636. package/.next/server/chunks/4018.js +0 -1
  637. package/.next/server/chunks/4390.js +0 -1
  638. package/.next/server/chunks/8681.js +0 -1
  639. package/.next/static/chunks/744-d5e47fe16e7b9e06.js +0 -1
  640. package/.next/static/chunks/app/api/app/update/route-8440b6c72bed83a1.js +0 -1
  641. package/.next/static/chunks/app/api/app/update-check/route-8440b6c72bed83a1.js +0 -1
  642. package/.next/static/chunks/app/api/assistant/conversation/route-8440b6c72bed83a1.js +0 -1
  643. package/.next/static/chunks/app/api/assistant/current-output/route-8440b6c72bed83a1.js +0 -1
  644. package/.next/static/chunks/app/api/assistant/messages/route-8440b6c72bed83a1.js +0 -1
  645. package/.next/static/chunks/app/api/assistant/session/route-8440b6c72bed83a1.js +0 -1
  646. package/.next/static/chunks/app/api/assistant/start/route-8440b6c72bed83a1.js +0 -1
  647. package/.next/static/chunks/app/api/assistant/terminal/route-8440b6c72bed83a1.js +0 -1
  648. package/.next/static/chunks/app/api/assistant/tools/route-8440b6c72bed83a1.js +0 -1
  649. package/.next/static/chunks/app/api/auth/login/route-8440b6c72bed83a1.js +0 -1
  650. package/.next/static/chunks/app/api/auth/logout/route-8440b6c72bed83a1.js +0 -1
  651. package/.next/static/chunks/app/api/auth/status/route-8440b6c72bed83a1.js +0 -1
  652. package/.next/static/chunks/app/api/daily-summary/route-8440b6c72bed83a1.js +0 -1
  653. package/.next/static/chunks/app/api/daily-summary/status/route-8440b6c72bed83a1.js +0 -1
  654. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8440b6c72bed83a1.js +0 -1
  655. package/.next/static/chunks/app/api/external-apps/[id]/route-8440b6c72bed83a1.js +0 -1
  656. package/.next/static/chunks/app/api/external-apps/route-8440b6c72bed83a1.js +0 -1
  657. package/.next/static/chunks/app/api/fs/browse/route-8440b6c72bed83a1.js +0 -1
  658. package/.next/static/chunks/app/api/fs/recent-paths/route-8440b6c72bed83a1.js +0 -1
  659. package/.next/static/chunks/app/api/hooks/agent-event/route-8440b6c72bed83a1.js +0 -1
  660. package/.next/static/chunks/app/api/hooks/claude-done/route-8440b6c72bed83a1.js +0 -1
  661. package/.next/static/chunks/app/api/metrics/vibe/route-8440b6c72bed83a1.js +0 -1
  662. package/.next/static/chunks/app/api/ollama/models/route-8440b6c72bed83a1.js +0 -1
  663. package/.next/static/chunks/app/api/push/subscriptions/route-8440b6c72bed83a1.js +0 -1
  664. package/.next/static/chunks/app/api/push/vapid/route-8440b6c72bed83a1.js +0 -1
  665. package/.next/static/chunks/app/api/repositories/[id]/route-8440b6c72bed83a1.js +0 -1
  666. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
  667. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8440b6c72bed83a1.js +0 -1
  668. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8440b6c72bed83a1.js +0 -1
  669. package/.next/static/chunks/app/api/repositories/clone/route-8440b6c72bed83a1.js +0 -1
  670. package/.next/static/chunks/app/api/repositories/excluded/route-8440b6c72bed83a1.js +0 -1
  671. package/.next/static/chunks/app/api/repositories/restore/route-8440b6c72bed83a1.js +0 -1
  672. package/.next/static/chunks/app/api/repositories/route-8440b6c72bed83a1.js +0 -1
  673. package/.next/static/chunks/app/api/repositories/scan/route-8440b6c72bed83a1.js +0 -1
  674. package/.next/static/chunks/app/api/repositories/sync/route-8440b6c72bed83a1.js +0 -1
  675. package/.next/static/chunks/app/api/repositories/validate-path/route-8440b6c72bed83a1.js +0 -1
  676. package/.next/static/chunks/app/api/sidebar/group-order/route-8440b6c72bed83a1.js +0 -1
  677. package/.next/static/chunks/app/api/skills/[id]/route-8440b6c72bed83a1.js +0 -1
  678. package/.next/static/chunks/app/api/skills/installations/route-8440b6c72bed83a1.js +0 -1
  679. package/.next/static/chunks/app/api/skills/operations/route-8440b6c72bed83a1.js +0 -1
  680. package/.next/static/chunks/app/api/skills/reindex/route-8440b6c72bed83a1.js +0 -1
  681. package/.next/static/chunks/app/api/skills/route-8440b6c72bed83a1.js +0 -1
  682. package/.next/static/chunks/app/api/slash-commands/route-8440b6c72bed83a1.js +0 -1
  683. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8440b6c72bed83a1.js +0 -1
  684. package/.next/static/chunks/app/api/tasks/[taskId]/route-8440b6c72bed83a1.js +0 -1
  685. package/.next/static/chunks/app/api/templates/[id]/route-8440b6c72bed83a1.js +0 -1
  686. package/.next/static/chunks/app/api/templates/route-8440b6c72bed83a1.js +0 -1
  687. package/.next/static/chunks/app/api/todos/route-8440b6c72bed83a1.js +0 -1
  688. package/.next/static/chunks/app/api/verification/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
  689. package/.next/static/chunks/app/api/verification/runs/route-8440b6c72bed83a1.js +0 -1
  690. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8440b6c72bed83a1.js +0 -1
  691. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8440b6c72bed83a1.js +0 -1
  692. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8440b6c72bed83a1.js +0 -1
  693. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8440b6c72bed83a1.js +0 -1
  694. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8440b6c72bed83a1.js +0 -1
  695. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8440b6c72bed83a1.js +0 -1
  696. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8440b6c72bed83a1.js +0 -1
  697. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8440b6c72bed83a1.js +0 -1
  698. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8440b6c72bed83a1.js +0 -1
  699. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8440b6c72bed83a1.js +0 -1
  700. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8440b6c72bed83a1.js +0 -1
  701. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8440b6c72bed83a1.js +0 -1
  702. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8440b6c72bed83a1.js +0 -1
  703. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8440b6c72bed83a1.js +0 -1
  704. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8440b6c72bed83a1.js +0 -1
  705. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8440b6c72bed83a1.js +0 -1
  706. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8440b6c72bed83a1.js +0 -1
  707. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8440b6c72bed83a1.js +0 -1
  708. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8440b6c72bed83a1.js +0 -1
  709. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8440b6c72bed83a1.js +0 -1
  710. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8440b6c72bed83a1.js +0 -1
  711. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8440b6c72bed83a1.js +0 -1
  712. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8440b6c72bed83a1.js +0 -1
  713. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8440b6c72bed83a1.js +0 -1
  714. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8440b6c72bed83a1.js +0 -1
  715. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8440b6c72bed83a1.js +0 -1
  716. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8440b6c72bed83a1.js +0 -1
  717. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8440b6c72bed83a1.js +0 -1
  718. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8440b6c72bed83a1.js +0 -1
  719. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8440b6c72bed83a1.js +0 -1
  720. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8440b6c72bed83a1.js +0 -1
  721. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8440b6c72bed83a1.js +0 -1
  722. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8440b6c72bed83a1.js +0 -1
  723. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8440b6c72bed83a1.js +0 -1
  724. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8440b6c72bed83a1.js +0 -1
  725. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8440b6c72bed83a1.js +0 -1
  726. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8440b6c72bed83a1.js +0 -1
  727. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8440b6c72bed83a1.js +0 -1
  728. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8440b6c72bed83a1.js +0 -1
  729. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8440b6c72bed83a1.js +0 -1
  730. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8440b6c72bed83a1.js +0 -1
  731. package/.next/static/chunks/app/api/worktrees/[id]/route-8440b6c72bed83a1.js +0 -1
  732. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8440b6c72bed83a1.js +0 -1
  733. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8440b6c72bed83a1.js +0 -1
  734. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8440b6c72bed83a1.js +0 -1
  735. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8440b6c72bed83a1.js +0 -1
  736. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8440b6c72bed83a1.js +0 -1
  737. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8440b6c72bed83a1.js +0 -1
  738. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8440b6c72bed83a1.js +0 -1
  739. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8440b6c72bed83a1.js +0 -1
  740. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8440b6c72bed83a1.js +0 -1
  741. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8440b6c72bed83a1.js +0 -1
  742. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8440b6c72bed83a1.js +0 -1
  743. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8440b6c72bed83a1.js +0 -1
  744. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8440b6c72bed83a1.js +0 -1
  745. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8440b6c72bed83a1.js +0 -1
  746. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8440b6c72bed83a1.js +0 -1
  747. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8440b6c72bed83a1.js +0 -1
  748. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8440b6c72bed83a1.js +0 -1
  749. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8440b6c72bed83a1.js +0 -1
  750. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
  751. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8440b6c72bed83a1.js +0 -1
  752. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8440b6c72bed83a1.js +0 -1
  753. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8440b6c72bed83a1.js +0 -1
  754. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8440b6c72bed83a1.js +0 -1
  755. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8440b6c72bed83a1.js +0 -1
  756. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
  757. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8440b6c72bed83a1.js +0 -1
  758. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8440b6c72bed83a1.js +0 -1
  759. package/.next/static/chunks/app/api/worktrees/route-8440b6c72bed83a1.js +0 -1
  760. package/.next/static/chunks/app/manifest.webmanifest/route-8440b6c72bed83a1.js +0 -1
  761. package/.next/static/chunks/app/proxy/[...path]/route-8440b6c72bed83a1.js +0 -1
  762. package/.next/static/chunks/app/repositories/page-1ed1e5a542ecc168.js +0 -1
  763. package/.next/static/chunks/app/worktrees/[id]/page-f6e09d25cd3b56f9.js +0 -1
  764. /package/.next/static/{-E7I667pJDTBamyG8M_Z- → C01FQOE5FCmB3I_GhMa4_}/_buildManifest.js +0 -0
  765. /package/.next/static/{-E7I667pJDTBamyG8M_Z- → C01FQOE5FCmB3I_GhMa4_}/_ssgManifest.js +0 -0
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ /**
3
+ * Turning `/worktrees/<historical id>` into a **real** HTTP redirect
4
+ * (Issue #1621 Phase 2 follow-up, owned by #1645).
5
+ *
6
+ * ## Why this exists rather than the layout redirect #1644 shipped
7
+ *
8
+ * `src/app/worktrees/[id]/layout.tsx` calls `permanentRedirect`, and measured
9
+ * against a real server that returns
10
+ *
11
+ * HTTP/1.1 200 OK
12
+ * <meta id="__next-page-redirect" http-equiv="refresh" content="0;url=…">
13
+ *
14
+ * — not a 301. That is App Router behaviour, not a bug in that layout: an
15
+ * unconditional `permanentRedirect` as the layout's very first statement
16
+ * produces the same 200 + meta tag. A redirect thrown while a page's HTML is
17
+ * already streaming can no longer set a status line, so it ships inside the
18
+ * document. Only Route Handlers, Server Actions and middleware emit a real 3xx.
19
+ *
20
+ * `middleware.ts` is not an option either: it runs on the edge runtime, where
21
+ * the SQLite lookup this needs is impossible. That leaves the custom
22
+ * `server.ts`, which sees the request before Next does — hence this module,
23
+ * which `server.ts` loads lazily and asks about each `/worktrees/…` URL.
24
+ *
25
+ * The layout redirect stays as a fallback for anything serving the app without
26
+ * `server.ts`; when `server.ts` is in front it never sees a historical ID.
27
+ *
28
+ * ## Two things the layout could not do, and this does
29
+ *
30
+ * 1. **A status code.** A meta refresh is followed by browsers and by nothing
31
+ * else — no bookmark rewrite, no non-browser client, no `curl -I`.
32
+ * 2. **Sub-paths.** A layout cannot see the path below it, so
33
+ * `/worktrees/<old>/terminal` landed on the worktree's detail page. Here the
34
+ * tail of the path and the query string are carried across verbatim.
35
+ */
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.WORKTREE_REDIRECT_CACHE_CONTROL = exports.WORKTREE_REDIRECT_STATUS = void 0;
38
+ exports.parseWorktreeUrl = parseWorktreeUrl;
39
+ exports.resolveWorktreeRedirect = resolveWorktreeRedirect;
40
+ const db_instance_1 = require("../../lib/db/db-instance");
41
+ const worktree_alias_db_1 = require("../../lib/db/worktree-alias-db");
42
+ const path_validator_1 = require("../../lib/security/path-validator");
43
+ /**
44
+ * Status code used for the redirect.
45
+ *
46
+ * 308 rather than 301 because it is the method-preserving permanent redirect:
47
+ * `/worktrees/<id>` is a page route today, but a Server Action POSTs to the URL
48
+ * of the page it is on, and 301 historically licenses clients to turn that into
49
+ * a GET.
50
+ *
51
+ * Paired with `Cache-Control: no-store` at the call site — see
52
+ * {@link WORKTREE_REDIRECT_CACHE_CONTROL}.
53
+ */
54
+ exports.WORKTREE_REDIRECT_STATUS = 308;
55
+ /**
56
+ * Cache directive sent with the redirect.
57
+ *
58
+ * A permanent redirect is cacheable by default, and here that would be wrong:
59
+ * "old ID → this worktree" is durable but not eternal. Delete the worktree and
60
+ * its aliases cascade away; a later directory with the same basename can then
61
+ * be minted that ID as a **live** one, and live rows beat aliases. A client
62
+ * holding a cached permanent redirect would never ask again and would keep
63
+ * landing on the wrong worktree. The status code still says "moved" to anything
64
+ * reading it; only the caching of that answer is refused.
65
+ */
66
+ exports.WORKTREE_REDIRECT_CACHE_CONTROL = 'no-store';
67
+ /**
68
+ * `/worktrees/<id>` optionally followed by more path.
69
+ *
70
+ * Anchored at the start so nothing else can match, and the ID segment excludes
71
+ * `/`, `?` and `#` so the split is unambiguous. `/worktrees` on its own does not
72
+ * match — there is no such page, and there is no ID to resolve.
73
+ */
74
+ const WORKTREE_URL_PATTERN = /^\/worktrees\/([^/?#]+)(\/[^?#]*)?/;
75
+ /**
76
+ * Split a request URL into the parts a redirect has to rebuild.
77
+ *
78
+ * Pure and total: returns null for anything that is not a `/worktrees/<id>` URL.
79
+ *
80
+ * @param requestUrl - `req.url`, i.e. an origin-form path with optional query
81
+ */
82
+ function parseWorktreeUrl(requestUrl) {
83
+ if (!requestUrl)
84
+ return null;
85
+ // Fragments never reach a server, but a malformed client could send one.
86
+ const hashIndex = requestUrl.indexOf('#');
87
+ const withoutHash = hashIndex === -1 ? requestUrl : requestUrl.slice(0, hashIndex);
88
+ const queryIndex = withoutHash.indexOf('?');
89
+ const pathname = queryIndex === -1 ? withoutHash : withoutHash.slice(0, queryIndex);
90
+ const search = queryIndex === -1 ? '' : withoutHash.slice(queryIndex);
91
+ const match = WORKTREE_URL_PATTERN.exec(pathname);
92
+ if (!match)
93
+ return null;
94
+ let id;
95
+ try {
96
+ id = decodeURIComponent(match[1]);
97
+ }
98
+ catch {
99
+ // Malformed percent-encoding: not a URL we can reason about. Hand it to
100
+ // Next, which will 404 it as it does today.
101
+ return null;
102
+ }
103
+ return { id, subPath: match[2] ?? '', search };
104
+ }
105
+ /**
106
+ * Map a worktree ID that may be historical onto the ID that is current.
107
+ *
108
+ * Total by construction: any failure — an unmigrated database, an unreadable
109
+ * one, no alias table — degrades to "no redirect", which is exactly today's
110
+ * behaviour.
111
+ */
112
+ function canonicalWorktreeIdFromDb(id) {
113
+ try {
114
+ const db = (0, db_instance_1.getDbInstance)();
115
+ return (0, worktree_alias_db_1.resolveWorktreeIdWithAlias)(db, id) ?? id;
116
+ }
117
+ catch {
118
+ return id;
119
+ }
120
+ }
121
+ /**
122
+ * Decide whether a URL names a worktree by a historical ID, and where it should
123
+ * go instead.
124
+ *
125
+ * @param requestUrl - `req.url` verbatim
126
+ * @param canonicalize - ID resolver; defaults to the alias table. Injectable so
127
+ * the unit tests can state the mapping instead of building a database.
128
+ * @returns The redirect to write, or null to let Next handle the request
129
+ */
130
+ function resolveWorktreeRedirect(requestUrl, canonicalize = canonicalWorktreeIdFromDb) {
131
+ const parsed = parseWorktreeUrl(requestUrl);
132
+ if (!parsed)
133
+ return null;
134
+ // An ID that cannot be valid is not a historical ID either; let the route
135
+ // report what the caller actually sent (Issue #1644's `canonicalWorktreeId`
136
+ // makes the same choice for the same reason).
137
+ if (!(0, path_validator_1.isValidWorktreeId)(parsed.id))
138
+ return null;
139
+ let canonicalId;
140
+ try {
141
+ canonicalId = canonicalize(parsed.id);
142
+ }
143
+ catch {
144
+ return null;
145
+ }
146
+ if (!canonicalId || canonicalId === parsed.id)
147
+ return null;
148
+ return {
149
+ statusCode: exports.WORKTREE_REDIRECT_STATUS,
150
+ // The ID is re-encoded (it is a single segment we just decoded); `subPath`
151
+ // and `search` are carried across byte-for-byte, because they arrived
152
+ // already encoded and re-encoding would corrupt them.
153
+ location: `/worktrees/${encodeURIComponent(canonicalId)}${parsed.subPath}${parsed.search}`,
154
+ };
155
+ }
@@ -7,11 +7,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
7
7
  return (mod && mod.__esModule) ? mod : { "default": mod };
8
8
  };
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.deriveWorktreeId = void 0;
10
11
  exports.generateWorktreeId = generateWorktreeId;
11
12
  exports.parseWorktreeOutput = parseWorktreeOutput;
12
13
  exports.getRepositoryPaths = getRepositoryPaths;
13
14
  exports.scanWorktrees = scanWorktrees;
14
15
  exports.scanMultipleRepositories = scanMultipleRepositories;
16
+ exports.deriveIdIgnoringOwnHistory = deriveIdIgnoringOwnHistory;
15
17
  exports.syncWorktreesToDB = syncWorktreesToDB;
16
18
  exports.repositoryExistsOnDisk = repositoryExistsOnDisk;
17
19
  exports.pruneStaleRepositoryWorktrees = pruneStaleRepositoryWorktrees;
@@ -19,12 +21,32 @@ const child_process_1 = require("child_process");
19
21
  const util_1 = require("util");
20
22
  const fs_1 = __importDefault(require("fs"));
21
23
  const path_1 = __importDefault(require("path"));
24
+ const worktree_id_1 = require("./worktree-id");
22
25
  const db_1 = require("../../lib/db");
23
26
  const logger_1 = require("../../lib/logger");
24
27
  const logger = (0, logger_1.createLogger)('worktrees');
28
+ /**
29
+ * ID minting lives in `worktree-id.ts` — a module that imports nothing but
30
+ * `crypto` and `path`. A migration has to mint IDs too (the Phase 4 renumbering
31
+ * in #1645), and importing THIS module from one would close a cycle through
32
+ * `@/lib/db` and inherit every `vi.mock('@/lib/git/worktrees')` in the suite.
33
+ * Re-exported here so existing callers are unaffected.
34
+ */
35
+ var worktree_id_2 = require("./worktree-id");
36
+ Object.defineProperty(exports, "deriveWorktreeId", { enumerable: true, get: function () { return worktree_id_2.deriveWorktreeId; } });
25
37
  /**
26
38
  * Generate URL-safe ID from repository name and branch name
27
39
  *
40
+ * @deprecated Issue #1621/#1644: worktree IDs are no longer derived from the
41
+ * branch. A branch-derived ID changes whenever the branch changes, so checking
42
+ * out a different branch in the *same* directory renamed the worktree's primary
43
+ * key and broke everything keyed on it outside the DB (tmux session names, open
44
+ * tabs, bookmarks, poller/Auto-Yes keys). IDs are now derived from the directory
45
+ * once — see {@link deriveWorktreeId} — and never re-derived.
46
+ *
47
+ * Retained only so an out-of-tree caller keeps compiling; nothing in `src/`
48
+ * calls it any more.
49
+ *
28
50
  * @param branchName - Git branch name (e.g., "feature/foo", "main")
29
51
  * @param repositoryName - Repository name (e.g., "MyRepo")
30
52
  * @returns URL-safe ID (e.g., "myrepo-feature-foo", "myrepo-main")
@@ -40,14 +62,9 @@ function generateWorktreeId(branchName, repositoryName) {
40
62
  if (!branchName) {
41
63
  return '';
42
64
  }
43
- const sanitize = (str) => str
44
- .toLowerCase()
45
- .replace(/[^a-z0-9-]/g, '-') // Replace non-alphanumeric (except hyphen) with hyphen
46
- .replace(/-+/g, '-') // Replace consecutive hyphens with single hyphen
47
- .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
48
- const sanitizedBranch = sanitize(branchName);
65
+ const sanitizedBranch = (0, worktree_id_1.sanitizeIdSegment)(branchName);
49
66
  if (repositoryName) {
50
- const sanitizedRepo = sanitize(repositoryName);
67
+ const sanitizedRepo = (0, worktree_id_1.sanitizeIdSegment)(repositoryName);
51
68
  return `${sanitizedRepo}-${sanitizedBranch}`;
52
69
  }
53
70
  return sanitizedBranch;
@@ -132,6 +149,22 @@ function getRepositoryPaths() {
132
149
  /**
133
150
  * Scan git worktrees in a single repository
134
151
  *
152
+ * Issue #1621: the `id` on each returned object is a **provisional** suggestion,
153
+ * not the worktree's identity. The scan cannot know which IDs are already taken
154
+ * (it sees one repository, IDs are global) and — more importantly — it must not
155
+ * decide the ID of a directory that is already registered. {@link syncWorktreesToDB}
156
+ * is what confirms an ID: it keeps the existing row's ID when the path is known,
157
+ * and only falls back to this suggestion (or re-derives) for a new path.
158
+ *
159
+ * The field is still populated, rather than dropped from the type, because two
160
+ * callers outside this change's reach — `POST /api/repositories/scan`,
161
+ * `POST /api/repositories/restore` and `syncWorktreesAndCleanup`
162
+ * (`src/lib/session-cleanup.ts`) — are typed on `Worktree[]`.
163
+ *
164
+ * `name` is the **display branch name** and is refreshed on every sync; for a
165
+ * detached HEAD it is `detached-<short sha>` (see {@link parseWorktreeOutput}).
166
+ * Neither `name` nor `branch` participates in the ID any more.
167
+ *
135
168
  * @param rootDir - Root directory to scan for worktrees
136
169
  * @returns Array of Worktree objects
137
170
  *
@@ -140,7 +173,7 @@ function getRepositoryPaths() {
140
173
  * @example
141
174
  * ```typescript
142
175
  * const worktrees = await scanWorktrees('/path/to/repo');
143
- * console.log(worktrees[0].id); // => "main"
176
+ * console.log(worktrees[0].path); // => "/path/to/repo"
144
177
  * ```
145
178
  */
146
179
  async function scanWorktrees(rootDir) {
@@ -155,16 +188,21 @@ async function scanWorktrees(rootDir) {
155
188
  const repositoryName = path_1.default.basename(repositoryPath);
156
189
  // Filter and validate worktree paths
157
190
  return parsed
158
- .map((wt) => ({
159
- id: generateWorktreeId(wt.branch, repositoryName),
160
- name: wt.branch,
161
- // Issue #1003: persist the real branch (sync-time snapshot) so
162
- // `ls --branch` can filter on it rather than the derived name/id slug.
163
- branch: wt.branch,
164
- path: path_1.default.resolve(wt.path),
165
- repositoryPath,
166
- repositoryName,
167
- }))
191
+ .map((wt) => {
192
+ const resolvedPath = path_1.default.resolve(wt.path);
193
+ return {
194
+ // Provisional only syncWorktreesToDB decides the real ID (see above).
195
+ id: (0, worktree_id_1.deriveWorktreeId)(resolvedPath),
196
+ // Display branch name (Issue #1621): re-read from git on every scan.
197
+ name: wt.branch,
198
+ // Issue #1003: persist the real branch (sync-time snapshot) so
199
+ // `ls --branch` can filter on it rather than the derived name/id slug.
200
+ branch: wt.branch,
201
+ path: resolvedPath,
202
+ repositoryPath,
203
+ repositoryName,
204
+ };
205
+ })
168
206
  .filter((wt) => {
169
207
  // Git worktrees can be outside the repo root, so we use a more lenient validation
170
208
  // Only filter out obviously dangerous system paths
@@ -232,13 +270,50 @@ async function scanMultipleRepositories(repositoryPaths) {
232
270
  }
233
271
  return allWorktrees;
234
272
  }
273
+ /**
274
+ * Mint an ID for `resolvedPath` without letting the path's **own** history block
275
+ * it (Issue #1658).
276
+ *
277
+ * `takenIds` holds every live ID plus every alias, which is right for a path
278
+ * nobody has seen before. For a path that IS already registered it is exactly
279
+ * wrong: its own current ID sits in that set, and so does every ID it has ever
280
+ * been renamed away from. `deriveWorktreeId` then rejects the basename it should
281
+ * have produced and walks up the digest ladder — `foo`, `foo-2f4530fe`,
282
+ * `foo-2f4530fe1cf1f9f8`, … — one rung longer on every call. That is the runaway
283
+ * this hotfix is about: production reached an 81-character ID whose derived tmux
284
+ * session name no longer matched the running session.
285
+ *
286
+ * Re-derivation for a known path should be reachable only through a bug now that
287
+ * the lookup is global, so this is a floor rather than a mechanism: excluding
288
+ * the row's own history makes the derivation converge (it re-mints the ID the
289
+ * row already has, or a shorter one), instead of growing without bound.
290
+ *
291
+ * Exported for the unit tests only: the branch it guards is unreachable through
292
+ * `syncWorktreesToDB` now that the path lookup is global, and a floor nobody can
293
+ * exercise is a floor nobody can prove.
294
+ *
295
+ * @param resolvedPath - Absolute, `path.resolve()`d worktree directory
296
+ * @param takenIds - IDs that are unavailable
297
+ * @param ownIds - IDs this very path already answers to (current ID + aliases)
298
+ * @internal
299
+ */
300
+ function deriveIdIgnoringOwnHistory(resolvedPath, takenIds, ownIds) {
301
+ if (!ownIds || ownIds.size === 0) {
302
+ return (0, worktree_id_1.deriveWorktreeId)(resolvedPath, takenIds);
303
+ }
304
+ const available = new Set(takenIds);
305
+ for (const ownId of ownIds)
306
+ available.delete(ownId);
307
+ return (0, worktree_id_1.deriveWorktreeId)(resolvedPath, available);
308
+ }
235
309
  /**
236
310
  * Sync scanned worktrees to database
237
311
  *
238
312
  * This function performs a true sync:
239
313
  * 1. Groups worktrees by repository
240
314
  * 2. For each repository, removes worktrees that no longer exist
241
- * 3. Upserts all current worktrees
315
+ * 3. Resolves each worktree's ID (existing row by path wins — Issue #1621)
316
+ * 4. Upserts all current worktrees, refreshing the display branch name
242
317
  *
243
318
  * @param db - Database instance
244
319
  * @param worktrees - Array of worktrees to sync
@@ -266,31 +341,102 @@ function syncWorktreesToDB(db, worktrees) {
266
341
  }
267
342
  worktreesByRepo.get(repoPath).push(worktree);
268
343
  }
344
+ // IDs are a GLOBAL primary key, so collision detection has to look at every
345
+ // repository, not just the one being synced. `takenIds` also absorbs the IDs
346
+ // handed out earlier in this same run, so two directories that share a
347
+ // basename across repositories cannot both claim it (which would violate the
348
+ // UNIQUE(path) constraint on the second upsert).
349
+ //
350
+ // Historical IDs count as taken too (Issue #1621, Phase 2): an alias still
351
+ // answers requests, so minting a live worktree with an ID some alias redirects
352
+ // elsewhere would shadow that redirect and silently send old bookmarks to the
353
+ // wrong worktree.
354
+ const takenIds = new Set([...(0, db_1.getAllWorktreeIds)(db), ...(0, db_1.getAliasedWorktreeIds)(db)]);
355
+ // Issue #1621: the ID a path already owns is the ID it keeps.
356
+ //
357
+ // Issue #1658: and that lookup is GLOBAL, because `path` is global — the
358
+ // column is `NOT NULL UNIQUE`, one row per directory for the whole table.
359
+ // `repository_path` is not an identity at all, it only records which scan root
360
+ // last upserted the row, and two scan roots can legitimately report the same
361
+ // directory: registering a repository *and* one of its own linked worktrees in
362
+ // `WORKTREE_REPOS` makes `git worktree list` return the identical path set
363
+ // from either one. Scoping this map per repository then found nothing on
364
+ // whichever pass did not write `repository_path` last, fell through to
365
+ // re-derivation, collided with the row's own ID and aliases, and appended
366
+ // another 8 hex digits — every sync, without limit (measured in production:
367
+ // 81 characters, at which point the tmux session name derived from the ID no
368
+ // longer matched the running session and the UI lost it).
369
+ const idByPath = new Map((0, db_1.getAllWorktreePathIds)(db).map(row => [path_1.default.resolve(row.path), row.id]));
370
+ // Every ID each path still answers to (its current one plus every alias
371
+ // pointing at it), so a re-derivation cannot be blocked by the path's own
372
+ // history — see deriveIdIgnoringOwnHistory.
373
+ const ownIdsByPath = new Map();
374
+ const pathById = new Map();
375
+ for (const [resolvedPath, id] of idByPath) {
376
+ ownIdsByPath.set(resolvedPath, new Set([id]));
377
+ pathById.set(id, resolvedPath);
378
+ }
379
+ for (const alias of (0, db_1.getAllWorktreeAliases)(db)) {
380
+ const aliasedPath = pathById.get(alias.worktreeId);
381
+ if (aliasedPath)
382
+ ownIdsByPath.get(aliasedPath)?.add(alias.oldId);
383
+ }
384
+ // Issue #1151: prune by on-disk PATH, not by ID — only a worktree whose PATH
385
+ // is gone from the scan was genuinely removed. The set is built from the whole
386
+ // scan rather than one repository's slice (#1658): a directory reported by
387
+ // *any* scan root is on disk, whatever `repository_path` currently says about
388
+ // it. Which ROWS a repository may prune is still scoped to that repository, so
389
+ // a scan root never reaches into another one's rows.
390
+ const scannedPaths = new Set(worktrees.map(wt => path_1.default.resolve(wt.path)));
269
391
  // Process each repository
270
392
  for (const [repoPath, repoWorktrees] of worktreesByRepo) {
271
393
  if (!repoPath)
272
394
  continue;
273
395
  // Get current worktree rows (id + path) in DB for this repository
274
396
  const existingRows = (0, db_1.getWorktreesByRepository)(db, repoPath);
275
- // Issue #1151: prune by on-disk PATH, not by branch-derived ID. A worktree's
276
- // ID changes when its branch changes (`generateWorktreeId`), so keying the
277
- // "removed" decision on ID mistakes a same-directory branch switch for a
278
- // deleted worktree and CASCADE-deletes its chat history and related data.
279
- // Only a worktree whose PATH is gone from the scan was genuinely removed.
280
- const newPaths = new Set(repoWorktrees.map(wt => path_1.default.resolve(wt.path)));
281
397
  // Find worktrees that no longer exist on disk (genuinely deleted)
282
398
  const deletedIds = existingRows
283
- .filter(row => !newPaths.has(path_1.default.resolve(row.path)))
399
+ .filter(row => !scannedPaths.has(path_1.default.resolve(row.path)))
284
400
  .map(row => row.id);
285
401
  // Delete removed worktrees from DB
286
402
  if (deletedIds.length > 0) {
287
403
  const result = (0, db_1.deleteWorktreesByIds)(db, deletedIds);
288
404
  allDeletedIds.push(...deletedIds);
405
+ // Their IDs are free again (and their alias rows went with them).
406
+ for (const deletedId of deletedIds) {
407
+ takenIds.delete(deletedId);
408
+ const deletedPath = pathById.get(deletedId);
409
+ if (deletedPath !== undefined) {
410
+ idByPath.delete(deletedPath);
411
+ ownIdsByPath.delete(deletedPath);
412
+ }
413
+ }
289
414
  logger.info('worktree:cleanup', { deletedCount: result.deletedCount });
290
415
  }
291
416
  // Upsert current worktrees
292
417
  for (const worktree of repoWorktrees) {
293
- (0, db_1.upsertWorktree)(db, worktree);
418
+ const resolvedPath = path_1.default.resolve(worktree.path);
419
+ const existingId = idByPath.get(resolvedPath);
420
+ const suggestedId = worktree.id;
421
+ const id = existingId ??
422
+ (suggestedId && !takenIds.has(suggestedId)
423
+ ? suggestedId
424
+ : deriveIdIgnoringOwnHistory(resolvedPath, takenIds, ownIdsByPath.get(resolvedPath)));
425
+ takenIds.add(id);
426
+ // Claim the ID for this path for the rest of the run, so the same
427
+ // directory seen again through a second scan root resolves to it instead
428
+ // of minting a second one (#1658 — a brand-new path hits this on its very
429
+ // first sync, before any row exists to look up).
430
+ idByPath.set(resolvedPath, id);
431
+ pathById.set(id, resolvedPath);
432
+ (0, db_1.upsertWorktree)(db, {
433
+ ...worktree,
434
+ id,
435
+ // Issue #1621: `name` is the display branch name. The branch no longer
436
+ // feeds the ID, so this is the only place it surfaces — refresh it from
437
+ // the scan every time (a checkout must move the label, not the key).
438
+ name: worktree.branch ?? worktree.name,
439
+ });
294
440
  upsertedCount++;
295
441
  }
296
442
  }
@@ -49,8 +49,20 @@ const SENSITIVE_PATTERNS = [
49
49
  ];
50
50
  /**
51
51
  * Sensitive key name patterns
52
+ *
53
+ * Issue #1640: `key` used to be listed on its own, which masked field names that
54
+ * carry no secret at all — `key`, `compositeKey`, `sortKey`, `idempotencyKey`,
55
+ * `publicKey`, ... — including the `read-mode:ready` log whose entire purpose is
56
+ * to report which key was bound (`{"key":"[REDACTED]"}` for the value `g`).
57
+ * Only credential-bearing `*key` compounds are matched now; a bare `key` is not.
58
+ * This brings the key-name side in line with the value side above, which has
59
+ * always used `api_key|apikey` rather than a bare `key`.
60
+ *
61
+ * Note: `auth` matches as a substring so that `authHeader` / `authorization` are
62
+ * covered. Do not narrow it with a `(?!or)` lookahead — that would stop matching
63
+ * `authorization`, which is the most important name in the group.
52
64
  */
53
- const SENSITIVE_KEY_PATTERN = /password|secret|token|key|auth/i;
65
+ const SENSITIVE_KEY_PATTERN = /password|secret|token|auth|(?:api|private|access|session|signing|encryption|ssh|gpg|deploy)[-_]?key/i;
54
66
  function sanitize(value) {
55
67
  if (typeof value === 'string') {
56
68
  let sanitized = value;
@@ -11,7 +11,7 @@
11
11
  * No `export *` - all exports are explicitly named (Issue #479 constraint).
12
12
  */
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.isAnyPollerActiveForWorktree = exports.stopAutoYesPollingByWorktree = exports.getAutoYesPollerCompositeKeys = exports.stopAllAutoYesPolling = exports.stopAutoYesPolling = exports.startAutoYesPolling = exports.detectAndRespondToPrompt = exports.processStopConditionDelta = exports.captureAndCleanOutput = exports.validatePollingContext = exports.isPollerActive = exports.getLastServerResponseTimestamp = exports.clearAllPollerStates = exports.getActivePollerCount = exports.THINKING_CHECK_LINE_COUNT = exports.MAX_CONCURRENT_POLLERS = exports.MAX_CONSECUTIVE_ERRORS = exports.MAX_BACKOFF_MS = exports.DUPLICATE_RETRY_EXPIRY_MS = exports.COOLDOWN_INTERVAL_MS = exports.POLLING_INTERVAL_MS = exports.calculateBackoffInterval = exports.deleteAutoYesStateByWorktree = exports.getCompositeKeysByWorktree = exports.filterCompositeKeysByWorktree = exports.getAutoYesStateCompositeKeys = exports.deleteAutoYesState = exports.checkStopCondition = exports.executeRegexWithTimeout = exports.clearAllAutoYesStates = exports.disableAutoYes = exports.setAutoYesEnabled = exports.getAutoYesState = exports.isAutoYesExpired = exports.extractInstanceId = exports.extractCliToolId = exports.extractWorktreeId = exports.buildCompositeKey = exports.COMPOSITE_KEY_SEPARATOR = void 0;
14
+ exports.isAnyPollerActiveForWorktree = exports.stopAutoYesPollingByWorktree = exports.getAutoYesPollerCompositeKeys = exports.stopAllAutoYesPolling = exports.stopAutoYesPolling = exports.startAutoYesPolling = exports.detectAndRespondToPrompt = exports.processStopConditionDelta = exports.captureAndCleanOutput = exports.validatePollingContext = exports.isPollerActive = exports.getLastServerResponseTimestamp = exports.clearAllPollerStates = exports.getActivePollerCount = exports.THINKING_CHECK_LINE_COUNT = exports.MAX_CONCURRENT_POLLERS = exports.MAX_CONSECUTIVE_ERRORS = exports.MAX_BACKOFF_MS = exports.DUPLICATE_RETRY_EXPIRY_MS = exports.COOLDOWN_INTERVAL_MS = exports.POLLING_INTERVAL_MS = exports.calculateBackoffInterval = exports.migrateAutoYesStateWorktreeIds = exports.deleteAutoYesStateByWorktree = exports.getCompositeKeysByWorktree = exports.filterCompositeKeysByWorktree = exports.getAutoYesStateCompositeKeys = exports.deleteAutoYesState = exports.checkStopCondition = exports.executeRegexWithTimeout = exports.clearAllAutoYesStates = exports.disableAutoYes = exports.setAutoYesEnabled = exports.getAutoYesState = exports.isAutoYesExpired = exports.extractInstanceId = exports.extractCliToolId = exports.extractWorktreeId = exports.buildCompositeKey = exports.COMPOSITE_KEY_SEPARATOR = void 0;
15
15
  var auto_yes_state_1 = require("../auto-yes-state");
16
16
  // Composite key helpers (Issue #525, #896)
17
17
  Object.defineProperty(exports, "COMPOSITE_KEY_SEPARATOR", { enumerable: true, get: function () { return auto_yes_state_1.COMPOSITE_KEY_SEPARATOR; } });
@@ -33,6 +33,8 @@ Object.defineProperty(exports, "getAutoYesStateCompositeKeys", { enumerable: tru
33
33
  Object.defineProperty(exports, "filterCompositeKeysByWorktree", { enumerable: true, get: function () { return auto_yes_state_1.filterCompositeKeysByWorktree; } });
34
34
  Object.defineProperty(exports, "getCompositeKeysByWorktree", { enumerable: true, get: function () { return auto_yes_state_1.getCompositeKeysByWorktree; } });
35
35
  Object.defineProperty(exports, "deleteAutoYesStateByWorktree", { enumerable: true, get: function () { return auto_yes_state_1.deleteAutoYesStateByWorktree; } });
36
+ // Worktree ID migration (Issue #1621 Phase 3)
37
+ Object.defineProperty(exports, "migrateAutoYesStateWorktreeIds", { enumerable: true, get: function () { return auto_yes_state_1.migrateAutoYesStateWorktreeIds; } });
36
38
  // Constants
37
39
  Object.defineProperty(exports, "calculateBackoffInterval", { enumerable: true, get: function () { return auto_yes_state_1.calculateBackoffInterval; } });
38
40
  Object.defineProperty(exports, "POLLING_INTERVAL_MS", { enumerable: true, get: function () { return auto_yes_state_1.POLLING_INTERVAL_MS; } });
@@ -10,6 +10,7 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.isDuplicatePrompt = isDuplicatePrompt;
12
12
  exports.clearPromptHashCache = clearPromptHashCache;
13
+ exports.renamePromptHashCacheKey = renamePromptHashCacheKey;
13
14
  exports.normalizePromptForDedup = normalizePromptForDedup;
14
15
  const crypto_1 = require("crypto");
15
16
  /**
@@ -41,6 +42,27 @@ function isDuplicatePrompt(pollerKey, content) {
41
42
  function clearPromptHashCache(pollerKey) {
42
43
  promptHashCache.delete(pollerKey);
43
44
  }
45
+ /**
46
+ * Move the cached hash from one pollerKey to another.
47
+ *
48
+ * Used when a worktree ID is renamed underneath a running poller
49
+ * (Issue #1621 Phase 3). Clearing instead of moving would let the poller
50
+ * re-save the prompt it is currently sitting on as a fresh message, which is
51
+ * the duplicate this module exists to prevent.
52
+ *
53
+ * No-op when nothing is cached under `oldKey`.
54
+ *
55
+ * @param oldKey - Poller key the cache entry lives under
56
+ * @param newKey - Poller key it should live under
57
+ */
58
+ function renamePromptHashCacheKey(oldKey, newKey) {
59
+ if (oldKey === newKey)
60
+ return;
61
+ const hash = promptHashCache.get(oldKey);
62
+ promptHashCache.delete(oldKey);
63
+ if (hash !== undefined)
64
+ promptHashCache.set(newKey, hash);
65
+ }
44
66
  /**
45
67
  * Normalize prompt content before deduplication check.
46
68
  * For Copilot, replaces cursor position markers at line beginnings