commandmate 0.26.0 → 0.27.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 (838) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +431 -403
  3. package/.next/app-path-routes-manifest.json +26 -22
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/react-loadable-manifest.json +6 -6
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +24 -0
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update-check/route.js +1 -1
  12. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  14. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  15. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js +1 -1
  26. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/terminal/route.js +2 -2
  29. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js +1 -1
  32. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/capabilities/route.js +1 -0
  38. package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
  39. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
  40. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/fs/browse/route.js +2 -2
  46. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  47. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/fs/recent-paths/route.js +2 -2
  49. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  50. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  52. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  53. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/hooks/claude-done/route.js +19 -1
  55. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  56. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  58. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  59. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/push/escalation/route.js +1 -1
  63. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  64. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  66. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/push/vapid/route.js +1 -1
  68. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  69. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  72. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  74. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  76. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/clone/route.js +1 -1
  79. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/repositories/restore/route.js +1 -1
  83. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  84. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/repositories/route.js +1 -1
  86. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  87. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/repositories/scan/route.js +1 -1
  89. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  90. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/repositories/sync/route.js +1 -1
  92. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  93. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  95. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  96. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  106. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/todos/route.js +1 -1
  110. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  112. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/verification/runs/route.js +1 -1
  114. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  117. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  120. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -0
  122. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
  123. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
  124. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  128. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -1
  130. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  131. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/env/route.js +2 -0
  133. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
  134. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
  135. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  141. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -0
  194. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
  195. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
  196. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  198. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  201. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -5
  203. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  204. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -6
  209. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  210. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  213. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/send/route.js +3 -1
  215. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  216. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  235. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  240. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/route.js +3 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  252. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  258. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  261. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/route.js +1 -1
  269. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  270. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/chat/page.js +2 -2
  272. package/.next/server/app/chat/page.js.nft.json +1 -1
  273. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/login/page.js +2 -2
  275. package/.next/server/app/login/page.js.nft.json +1 -1
  276. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  278. package/.next/server/app/more/page.js +2 -2
  279. package/.next/server/app/more/page.js.nft.json +1 -1
  280. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/page.js +1 -1
  283. package/.next/server/app/page.js.nft.json +1 -1
  284. package/.next/server/app/page_client-reference-manifest.js +1 -1
  285. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  286. package/.next/server/app/repositories/page.js +2 -2
  287. package/.next/server/app/repositories/page.js.nft.json +1 -1
  288. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  289. package/.next/server/app/review/page.js +1 -1
  290. package/.next/server/app/review/page.js.nft.json +1 -1
  291. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  292. package/.next/server/app/sessions/page.js +1 -1
  293. package/.next/server/app/sessions/page.js.nft.json +1 -1
  294. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  295. package/.next/server/app/skills/[skillId]/page.js +2 -2
  296. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  297. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  298. package/.next/server/app/skills/installed/page.js +2 -2
  299. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  300. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  301. package/.next/server/app/skills/page.js +2 -2
  302. package/.next/server/app/skills/page.js.nft.json +1 -1
  303. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  304. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  305. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  306. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  307. package/.next/server/app/worktrees/[id]/page.js +9 -7
  308. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  309. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  310. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  311. package/.next/server/app-paths-manifest.json +26 -22
  312. package/.next/server/chunks/1029.js +1 -1
  313. package/.next/server/chunks/1068.js +3 -1
  314. package/.next/server/chunks/1296.js +1 -1
  315. package/.next/server/chunks/1538.js +7 -0
  316. package/.next/server/chunks/1601.js +2 -2
  317. package/.next/server/chunks/2119.js +1 -1
  318. package/.next/server/chunks/2404.js +3 -2
  319. package/.next/server/chunks/2445.js +1 -1
  320. package/.next/server/chunks/2546.js +1 -1
  321. package/.next/server/chunks/2689.js +13 -0
  322. package/.next/server/chunks/2759.js +8 -0
  323. package/.next/server/chunks/2839.js +1 -0
  324. package/.next/server/chunks/3241.js +1 -1
  325. package/.next/server/chunks/3292.js +1 -0
  326. package/.next/server/chunks/3417.js +1 -1
  327. package/.next/server/chunks/3480.js +1 -17
  328. package/.next/server/chunks/4393.js +1 -1
  329. package/.next/server/chunks/4423.js +1 -0
  330. package/.next/server/chunks/4444.js +22 -8
  331. package/.next/server/chunks/4565.js +3 -0
  332. package/.next/server/chunks/467.js +1 -0
  333. package/.next/server/chunks/4905.js +5 -0
  334. package/.next/server/chunks/5017.js +1 -0
  335. package/.next/server/chunks/5089.js +1 -0
  336. package/.next/server/chunks/5164.js +1 -1
  337. package/.next/server/chunks/5220.js +1 -0
  338. package/.next/server/chunks/5354.js +1 -0
  339. package/.next/server/chunks/552.js +19 -0
  340. package/.next/server/chunks/5571.js +1 -1
  341. package/.next/server/chunks/5998.js +3 -3
  342. package/.next/server/chunks/6130.js +1 -1
  343. package/.next/server/chunks/6274.js +11 -11
  344. package/.next/server/chunks/6285.js +1 -1
  345. package/.next/server/chunks/6401.js +1 -1
  346. package/.next/server/chunks/6781.js +1 -1
  347. package/.next/server/chunks/7472.js +1 -0
  348. package/.next/server/chunks/7506.js +1 -0
  349. package/.next/server/chunks/848.js +1 -1
  350. package/.next/server/chunks/8536.js +1 -1
  351. package/.next/server/chunks/880.js +1 -1
  352. package/.next/server/chunks/8807.js +5 -5
  353. package/.next/server/chunks/9067.js +1 -1
  354. package/.next/server/chunks/9284.js +1 -0
  355. package/.next/server/chunks/9358.js +1 -1
  356. package/.next/server/chunks/9508.js +1 -0
  357. package/.next/server/chunks/9938.js +1 -0
  358. package/.next/server/middleware-build-manifest.js +1 -1
  359. package/.next/server/middleware-manifest.json +5 -5
  360. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  361. package/.next/server/pages/500.html +1 -1
  362. package/.next/server/server-reference-manifest.json +1 -1
  363. package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
  364. package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
  365. package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
  366. package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
  367. package/.next/static/chunks/{6381-9303430933084b56.js → 6381-b7250e8ca7a44c6c.js} +1 -1
  368. package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
  369. package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
  370. package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
  371. package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
  372. package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
  373. package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
  374. package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
  375. package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
  376. package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
  377. package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
  378. package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
  379. package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
  380. package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
  381. package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
  382. package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
  383. package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
  384. package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
  385. package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
  386. package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
  387. package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
  388. package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
  389. package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
  390. package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
  391. package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
  392. package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
  393. package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
  394. package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
  395. package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
  396. package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
  397. package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
  398. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
  399. package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
  400. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
  401. package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
  402. package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
  403. package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
  404. package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
  405. package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
  406. package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
  407. package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
  408. package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
  409. package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
  410. package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
  411. package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
  412. package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
  413. package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
  414. package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
  415. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
  416. package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
  417. package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
  418. package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
  419. package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
  420. package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
  421. package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
  497. package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
  498. package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
  499. package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
  500. package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
  501. package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
  502. package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
  503. package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
  504. package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
  505. package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
  506. package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
  507. package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
  508. package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
  509. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
  510. package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
  511. package/.next/static/chunks/app/worktrees/[id]/page-e4f28966b4fc0ce1.js +1 -0
  512. package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
  513. package/.next/static/css/928e5a8830fbf997.css +1 -0
  514. package/.next/static/t0BoV4H46ZgKmTjSi7GIz/_buildManifest.js +1 -0
  515. package/.next/trace +13 -12
  516. package/.next/types/app/api/capabilities/route.ts +347 -0
  517. package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
  518. package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
  519. package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
  520. package/.next/types/routes.d.ts +5 -1
  521. package/.next/types/validator.ts +36 -0
  522. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  523. package/dist/cli/commands/auto-yes.js +40 -2
  524. package/dist/cli/commands/capture.d.ts.map +1 -1
  525. package/dist/cli/commands/capture.js +28 -13
  526. package/dist/cli/commands/instances.d.ts +30 -18
  527. package/dist/cli/commands/instances.d.ts.map +1 -1
  528. package/dist/cli/commands/instances.js +32 -36
  529. package/dist/cli/commands/ls.d.ts.map +1 -1
  530. package/dist/cli/commands/ls.js +73 -1
  531. package/dist/cli/commands/respond.d.ts.map +1 -1
  532. package/dist/cli/commands/respond.js +18 -1
  533. package/dist/cli/commands/send.d.ts.map +1 -1
  534. package/dist/cli/commands/send.js +21 -15
  535. package/dist/cli/commands/status.d.ts.map +1 -1
  536. package/dist/cli/commands/status.js +38 -0
  537. package/dist/cli/commands/wait.d.ts +26 -0
  538. package/dist/cli/commands/wait.d.ts.map +1 -1
  539. package/dist/cli/commands/wait.js +390 -43
  540. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  541. package/dist/cli/config/cli-dependencies.js +16 -0
  542. package/dist/cli/config/cli-tool-ids.d.ts +11 -0
  543. package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
  544. package/dist/cli/config/cli-tool-ids.js +12 -1
  545. package/dist/cli/types/api-responses.d.ts +443 -2
  546. package/dist/cli/types/api-responses.d.ts.map +1 -1
  547. package/dist/cli/utils/api-client.d.ts +18 -0
  548. package/dist/cli/utils/api-client.d.ts.map +1 -1
  549. package/dist/cli/utils/api-client.js +22 -0
  550. package/dist/cli/utils/server-capabilities.d.ts +56 -0
  551. package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
  552. package/dist/cli/utils/server-capabilities.js +166 -0
  553. package/dist/cli/utils/session-target.d.ts +70 -0
  554. package/dist/cli/utils/session-target.d.ts.map +1 -0
  555. package/dist/cli/utils/session-target.js +118 -0
  556. package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
  557. package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
  558. package/dist/lib/cli-tools/copilot-executable.js +155 -0
  559. package/dist/lib/cli-tools/types.d.ts +61 -0
  560. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  561. package/dist/lib/cli-tools/types.js +41 -0
  562. package/dist/lib/detection/ansi.d.ts +2 -1
  563. package/dist/lib/detection/ansi.d.ts.map +1 -1
  564. package/dist/lib/detection/ansi.js +3 -2
  565. package/dist/lib/detection/tools/verified-against.d.ts +84 -0
  566. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
  567. package/dist/lib/detection/tools/verified-against.js +88 -0
  568. package/dist/lib/detection/version-probes.d.ts +207 -0
  569. package/dist/lib/detection/version-probes.d.ts.map +1 -0
  570. package/dist/lib/detection/version-probes.js +290 -0
  571. package/dist/lib/security/env-sanitizer.d.ts +198 -0
  572. package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
  573. package/dist/lib/security/env-sanitizer.js +232 -0
  574. package/dist/server/locales/en/notifications.json +17 -6
  575. package/dist/server/locales/ja/notifications.json +17 -6
  576. package/dist/server/src/config/activity-bar-config.js +4 -0
  577. package/dist/server/src/config/cli-tool-timing-config.js +59 -2
  578. package/dist/server/src/config/copilot-constants.js +11 -1
  579. package/dist/server/src/config/detection-evidence-config.js +129 -0
  580. package/dist/server/src/config/schedule-config.js +56 -7
  581. package/dist/server/src/config/tmux-pane-config.js +18 -1
  582. package/dist/server/src/lib/auto-yes-poller.js +36 -0
  583. package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
  584. package/dist/server/src/lib/cli-tools/base.js +131 -10
  585. package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
  586. package/dist/server/src/lib/cli-tools/claude.js +1 -1
  587. package/dist/server/src/lib/cli-tools/codex.js +6 -2
  588. package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
  589. package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
  590. package/dist/server/src/lib/cli-tools/copilot.js +307 -81
  591. package/dist/server/src/lib/cli-tools/gemini.js +8 -6
  592. package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
  593. package/dist/server/src/lib/cli-tools/index.js +11 -1
  594. package/dist/server/src/lib/cli-tools/manager.js +56 -4
  595. package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
  596. package/dist/server/src/lib/cli-tools/opencode.js +233 -30
  597. package/dist/server/src/lib/cli-tools/session-name.js +57 -0
  598. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
  599. package/dist/server/src/lib/cli-tools/types.js +41 -0
  600. package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
  601. package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
  602. package/dist/server/src/lib/cmate-parser.js +12 -4
  603. package/dist/server/src/lib/db/db.js +5 -1
  604. package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
  605. package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
  606. package/dist/server/src/lib/detection/ansi.js +3 -2
  607. package/dist/server/src/lib/detection/cli-patterns.js +901 -67
  608. package/dist/server/src/lib/detection/composer-text.js +455 -0
  609. package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
  610. package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
  611. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
  612. package/dist/server/src/lib/detection/status-detector.js +76 -675
  613. package/dist/server/src/lib/detection/status-reason.js +57 -0
  614. package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
  615. package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
  616. package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
  617. package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
  618. package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
  619. package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
  620. package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
  621. package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
  622. package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
  623. package/dist/server/src/lib/detection/tools/frame.js +47 -0
  624. package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
  625. package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
  626. package/dist/server/src/lib/detection/tools/registry.js +58 -0
  627. package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
  628. package/dist/server/src/lib/detection/tools/types.js +34 -0
  629. package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
  630. package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
  631. package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
  632. package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
  633. package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
  634. package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
  635. package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
  636. package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
  637. package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
  638. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
  639. package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
  640. package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
  641. package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
  642. package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
  643. package/dist/server/src/lib/hooks/sources/index.js +3 -1
  644. package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
  645. package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
  646. package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
  647. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
  648. package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
  649. package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
  650. package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
  651. package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
  652. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
  653. package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
  654. package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
  655. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
  656. package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
  657. package/dist/server/src/lib/job-executor.js +16 -4
  658. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
  659. package/dist/server/src/lib/polling/response-checker.js +243 -26
  660. package/dist/server/src/lib/push/failure-episode-state.js +127 -0
  661. package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
  662. package/dist/server/src/lib/push/index.js +35 -1
  663. package/dist/server/src/lib/push/prompt-card-state.js +93 -0
  664. package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
  665. package/dist/server/src/lib/push/push-sender.js +82 -7
  666. package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
  667. package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
  668. package/dist/server/src/lib/response-cleaner.js +93 -20
  669. package/dist/server/src/lib/response-extractor.js +98 -5
  670. package/dist/server/src/lib/security/env-sanitizer.js +179 -5
  671. package/dist/server/src/lib/session/agent-event-state.js +1038 -189
  672. package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
  673. package/dist/server/src/lib/session/claude-executor.js +23 -3
  674. package/dist/server/src/lib/session/claude-session.js +11 -1
  675. package/dist/server/src/lib/session/composer-clear.js +95 -0
  676. package/dist/server/src/lib/session/current-output-builder.js +267 -25
  677. package/dist/server/src/lib/session/provisional-turn.js +310 -0
  678. package/dist/server/src/lib/session/resolve-session-target.js +156 -0
  679. package/dist/server/src/lib/session/send-user-message.js +14 -18
  680. package/dist/server/src/lib/session/session-start-error.js +53 -1
  681. package/dist/server/src/lib/session/status-evidence.js +217 -0
  682. package/dist/server/src/lib/session/structured-prompt.js +46 -4
  683. package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
  684. package/dist/server/src/lib/tmux/key-sequence.js +120 -0
  685. package/dist/server/src/lib/tmux/tmux.js +91 -19
  686. package/dist/server/src/lib/tui-accumulator.js +68 -1
  687. package/dist/server/src/lib/verification/gate-runner.js +84 -1
  688. package/dist/server/src/lib/ws-server.js +8 -5
  689. package/dist/server/src/types/cli-tool-contracts.js +75 -0
  690. package/dist/server/src/types/terminal-keys.js +37 -0
  691. package/dist/types/cli-tool-contracts.d.ts +235 -0
  692. package/dist/types/cli-tool-contracts.d.ts.map +1 -0
  693. package/dist/types/cli-tool-contracts.js +75 -0
  694. package/package.json +3 -2
  695. package/public/sw.js +65 -2
  696. package/.next/server/chunks/1841.js +0 -1
  697. package/.next/server/chunks/233.js +0 -1
  698. package/.next/server/chunks/3022.js +0 -1
  699. package/.next/server/chunks/3270.js +0 -1
  700. package/.next/server/chunks/4455.js +0 -1
  701. package/.next/server/chunks/5959.js +0 -27
  702. package/.next/server/chunks/7458.js +0 -6
  703. package/.next/server/chunks/8730.js +0 -1
  704. package/.next/server/chunks/9058.js +0 -1
  705. package/.next/server/chunks/9687.js +0 -3
  706. package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
  707. package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
  708. package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
  709. package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
  710. package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
  711. package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
  712. package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
  713. package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
  714. package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
  715. package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
  716. package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
  717. package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
  718. package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
  719. package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
  720. package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
  721. package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
  722. package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
  723. package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
  724. package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
  725. package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
  726. package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
  727. package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
  728. package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
  729. package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
  730. package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
  731. package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
  732. package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
  733. package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
  734. package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
  735. package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
  736. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
  737. package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
  738. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
  739. package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
  740. package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
  741. package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
  742. package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
  743. package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
  744. package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
  745. package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
  746. package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
  747. package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
  748. package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
  749. package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
  750. package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
  751. package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
  752. package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
  753. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
  754. package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
  755. package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
  756. package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
  757. package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
  758. package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
  759. package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
  760. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
  761. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
  796. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
  797. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
  798. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
  799. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
  800. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
  801. package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
  802. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
  803. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
  804. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
  805. package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
  806. package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
  807. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
  808. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
  809. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
  810. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
  811. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
  812. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
  813. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
  814. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
  815. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
  816. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
  817. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
  818. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
  819. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
  820. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
  821. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
  822. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
  823. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
  824. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  825. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
  826. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  827. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
  828. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
  829. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
  830. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
  831. package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
  832. package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
  833. package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  834. package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
  835. package/.next/static/chunks/app/worktrees/[id]/page-fbdf4621a2911ac1.js +0 -1
  836. package/.next/static/css/e865c4979a41aa03.css +0 -1
  837. package/.next/static/hNdNiFes2xLls68SWhAU9/_buildManifest.js +0 -1
  838. /package/.next/static/{hNdNiFes2xLls68SWhAU9 → t0BoV4H46ZgKmTjSi7GIz}/_ssgManifest.js +0 -0
@@ -0,0 +1,207 @@
1
+ /**
2
+ * `DETECTOR_VERSION_PROBES` — are the detector's rules still describing the CLI
3
+ * that is installed? (Issue #1929, 方針書 §4 D2 / §7 / §10.11 / §13.2 S17)
4
+ *
5
+ * Every rule in `src/lib/detection/tools/` was read off a capture of one build
6
+ * of one CLI. `tools/verified-against.ts` records which build. This module reads
7
+ * the other half of the comparison — the version that is installed right now —
8
+ * so `capture --json` and `commandmate status` can say "these rules were
9
+ * measured against copilot 1.0.80 and you are running 1.2.0" instead of leaving
10
+ * a reader to guess whether a misdetection is a bug or a version skew.
11
+ *
12
+ * ## The cost rules, and why they are not optional
13
+ *
14
+ * `capture --json` and `GET /current-output` are the **5-second polling path** —
15
+ * the monitor skills run them with no iteration cap. A probe table that spawns
16
+ * six children cannot sit on that path, so (DR3-013):
17
+ *
18
+ * - probes run **once per process**, concurrent first callers share the same
19
+ * in-flight promise, and the result is cached;
20
+ * - {@link getDetectorStalenessSnapshot} **never awaits a child process**. It
21
+ * answers from the cache or answers `undefined` and starts the probe in the
22
+ * background. `undefined` means "not known yet", never "nothing is stale":
23
+ * the hint is additive, so a poll that lands cold simply shows nothing and
24
+ * the next one shows the banner;
25
+ * - {@link getDetectorFreshness} is the awaiting form, for the two callers that
26
+ * genuinely want the answer (`commandmate status`, `check:detector-freshness`)
27
+ * and are operator-initiated one-offs.
28
+ *
29
+ * ## The execution rules (DR4-010 / §10.11)
30
+ *
31
+ * `PATH` is untrusted input: the server's `PATH` comes from the shell that
32
+ * started it, and a repo-local `node_modules/.bin` on it would let opening a
33
+ * worktree decide which binary a cold probe runs. So every `execFile` probe
34
+ * resolves its command to an **absolute path** through
35
+ * {@link findExecutableOnPath} first and **skips entirely** — spawning nothing —
36
+ * when that resolves to nothing; children run with `sanitizeEnvForChildProcess()`
37
+ * so no probe ever sees CommandMate's auth token or DB path; and both `timeout`
38
+ * and `maxBuffer` are explicit.
39
+ *
40
+ * ## copilot is delegated, and must stay delegated (S17)
41
+ *
42
+ * The design policy's first draft probed `gh copilot -- --version`. It cannot be
43
+ * used: `copilot` is not a gh extension but a preview command built into gh
44
+ * 2.86.0, and gh's own help says that when `PATH` has no copilot it
45
+ * **downloads** the CLI into `~/.local/share/gh/copilot`. A version hint that
46
+ * installs software is not a version hint. #1907 measured this and built
47
+ * {@link resolveCopilotExecutable}; #1913 wired it into the catalog's
48
+ * `VERSION_PROBES` as `kind: 'delegated'`; this table reuses the same shape.
49
+ *
50
+ * Delegating is not an exception to DR4-010 (1) — it satisfies it more strongly
51
+ * than an `execFile` row could, because `CopilotTool.isInstalled()` and
52
+ * `startSession()` decide what to launch from **the same function's same return
53
+ * value**, so probe and launch cannot disagree.
54
+ *
55
+ * ## What "probes must not modify the environment" can actually mean (measured)
56
+ *
57
+ * DR4-010 (5) says a probe must not change the environment ("installation,
58
+ * download, or config-file generation"). Measured on 2026-08-23 (macOS
59
+ * darwin 25.6.0) by running each `--version` under a **disposable** `HOME` /
60
+ * `XDG_DATA_HOME` / `XDG_CONFIG_HOME` and listing what appeared:
61
+ *
62
+ * | probe | version | warm ms | wrote into a pristine HOME |
63
+ * |----------------------|-----------|---------|------------------------------------------|
64
+ * | `claude --version` | 2.1.240 | 199 | nothing |
65
+ * | `agy --version` | 1.1.18 | 176 | nothing |
66
+ * | `codex --version` | 0.148.0 | 172 | `~/.codex/tmp/arg0` |
67
+ * | `opencode --version` | 1.18.21 | 404 | `~/.config/opencode`, `~/.cache/opencode`, `~/.local/{state,share}/opencode` |
68
+ * | `copilot --version` | 1.0.80 | 436 | `~/Library/Caches/copilot` |
69
+ * | `gemini --version` | 0.55.1 | 929 | `~/.gemini/projects.json.<uuid>.tmp` ×2 (leaked, not cleaned up) |
70
+ *
71
+ * So the literal reading of (5) is satisfied by **two** of the six probes, and
72
+ * four of the rows the policy already approved fail it. The rule that the D2
73
+ * premise actually rests on is the narrower one #1979 was defending: a probe
74
+ * must not **install or download software, or change which binary would be
75
+ * launched**. Every row above satisfies that; none of them fetches anything.
76
+ * The gemini row is the weakest — it leaks two temp files into a `~/.gemini`
77
+ * that does not exist yet — and it is kept because it is the same class of
78
+ * side effect as codex/opencode/copilot, which are already in the table, and
79
+ * because dropping gemini would leave the one tool with **no** measured
80
+ * detector rules also with no way to notice that.
81
+ *
82
+ * `~/.config/gh` and `~/.local/share/gh` were checksummed before and after the
83
+ * whole measurement and neither changed (`~/.local/share/gh` still does not
84
+ * exist), which is the receipt #1979 asked for.
85
+ *
86
+ * ## Why this module imports nothing through `@/`
87
+ *
88
+ * `commandmate status` is one of the two exposure surfaces §4 D2 names, and
89
+ * `tsconfig.cli.json` compiles the CLI with `"paths": {}`. See the same
90
+ * constraint spelled out in `src/cli/types/api-responses.ts`.
91
+ *
92
+ * @module lib/detection/version-probes
93
+ */
94
+ /** Budget for one `<cli> --version`. Matches the catalog probe and copilot-executable. */
95
+ export declare const DETECTOR_VERSION_PROBE_TIMEOUT_MS = 5000;
96
+ /** Extract a normalized `major.minor.patch` version from `--version` output. */
97
+ export declare function parseCliVersion(output: string): string | null;
98
+ /**
99
+ * The comparable form of a `verifiedAgainst` stamp, or null when there is none.
100
+ *
101
+ * `'unmeasured'` is null — a tool nobody has captured frames for cannot be
102
+ * fresh or stale. `'0.4.x'` becomes `0.4.0`: antigravity's stamp is a minor
103
+ * series rather than a build (Issue #995 measured a range), and reading it as
104
+ * "no version" would silently exempt the one tool whose rules are furthest
105
+ * behind. Widening to `.0` is the safe direction — it can only ever call a
106
+ * newer install stale, never call a stale one current.
107
+ */
108
+ export declare function parseVerifiedAgainstVersion(stamp: string): string | null;
109
+ /**
110
+ * Compare two `major.minor.patch` versions numerically.
111
+ * @returns 1 if a > b, -1 if a < b, 0 if equal.
112
+ */
113
+ export declare function compareCliVersions(a: string, b: string): number;
114
+ /**
115
+ * One staleness probe.
116
+ *
117
+ * `execFile` is the default: resolve `command` on `PATH`, run it with `args`,
118
+ * read a version out of the output. `delegated` exists for a tool that owns its
119
+ * own resolution, because *finding* the executable is part of the question for
120
+ * it — see the copilot note in the module doc.
121
+ */
122
+ export type DetectorVersionProbe = {
123
+ readonly kind: 'execFile';
124
+ readonly command: string;
125
+ readonly args: readonly string[];
126
+ } | {
127
+ readonly kind: 'delegated';
128
+ readonly probe: () => Promise<string | null>;
129
+ };
130
+ /**
131
+ * Detector staleness probes: tool id → how to read its installed version.
132
+ *
133
+ * Deliberately the same shape as `VERSION_PROBES` in `slash-command-catalog.ts`
134
+ * (§4 D2: 「`VERSION_PROBES` と同型」), and deliberately a separate table: the
135
+ * catalog's question is "is the bundled slash-command list behind?" and this
136
+ * one's is "were these detection rules read off the build that is installed?".
137
+ * They happen to agree today; nothing requires them to.
138
+ *
139
+ * The binary for antigravity is `agy` — tool id and executable name differ
140
+ * (DR2-023). `gemini`'s row is `gemini --version`, measured for this Issue (the
141
+ * policy left it unconfirmed); its `verifiedAgainst` is `unmeasured`, so it is
142
+ * reported as "installed, rules never measured" rather than compared.
143
+ * `vibe-local` has no row: it is not an external CLI.
144
+ */
145
+ export declare const DETECTOR_VERSION_PROBES: Readonly<Record<string, DetectorVersionProbe>>;
146
+ /** One row of the full freshness report. */
147
+ export interface DetectorFreshnessRow {
148
+ /** Catalog / `CLIToolType` id. */
149
+ readonly tool: string;
150
+ /** Version the probe read, or null when the tool is absent / unreadable. */
151
+ readonly installed: string | null;
152
+ /** Build the tool module's rules were read off (may be `'unmeasured'`). */
153
+ readonly verifiedAgainst: string;
154
+ /**
155
+ * True only when both sides are comparable versions AND installed is newer.
156
+ *
157
+ * A tool that is not installed, whose `--version` could not be parsed, or
158
+ * whose rules were never measured is **not** stale — those are three kinds of
159
+ * "no answer", and reporting them as staleness would nag about something the
160
+ * operator cannot act on.
161
+ */
162
+ readonly stale: boolean;
163
+ }
164
+ /** What the wire carries: only the tools whose installed build is newer. */
165
+ export interface DetectorStalenessEntry {
166
+ readonly installed: string;
167
+ readonly verifiedAgainst: string;
168
+ }
169
+ /**
170
+ * `detector.staleness` as `capture --json` publishes it: tool id → the skew.
171
+ *
172
+ * A tool is **absent** from this map unless it was probed successfully AND is
173
+ * newer than the rules — so `staleness.copilot === undefined` is the answer on a
174
+ * machine with no copilot, which is the S17 receipt (probe skipped, nothing
175
+ * spawned, nothing reported).
176
+ */
177
+ export type DetectorStaleness = Readonly<Record<string, DetectorStalenessEntry>>;
178
+ /**
179
+ * Run one probe. Resolves null on any failure, and **without spawning anything**
180
+ * when the command does not resolve to an absolute path (DR4-010 (2)).
181
+ */
182
+ export declare function runDetectorVersionProbe(probe: DetectorVersionProbe): Promise<string | null>;
183
+ /**
184
+ * The full freshness report, computed once per process and cached. Concurrent
185
+ * first callers share one probe.
186
+ *
187
+ * **This awaits child processes — never call it from a request path.** Use
188
+ * {@link getDetectorStalenessSnapshot} there. Kept for `commandmate status`,
189
+ * `npm run check:detector-freshness` and tests, and as the single implementation
190
+ * both entry points share.
191
+ */
192
+ export declare function getDetectorFreshness(): Promise<readonly DetectorFreshnessRow[]>;
193
+ /** Reduce a report to the wire shape: stale tools only. */
194
+ export declare function toDetectorStaleness(rows: readonly DetectorFreshnessRow[]): DetectorStaleness;
195
+ /**
196
+ * The staleness this process already knows, or `undefined` plus a background
197
+ * probe when it knows nothing yet. **Never awaits a child process** (§4 D2,
198
+ * DR3-013 (a)(b)(c)).
199
+ *
200
+ * `undefined` is "not known yet", not "nothing is stale" — see the module doc.
201
+ * The returned object is `{}` once the cache is warm and nothing is stale, which
202
+ * is how a caller tells the two apart.
203
+ */
204
+ export declare function getDetectorStalenessSnapshot(): DetectorStaleness | undefined;
205
+ /** Clear the process-level probe cache (tests, and any future cache-control wiring). */
206
+ export declare function clearDetectorVersionProbeCache(): void;
207
+ //# sourceMappingURL=version-probes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-probes.d.ts","sourceRoot":"","sources":["../../../src/lib/detection/version-probes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AAOH,0FAA0F;AAC1F,eAAO,MAAM,iCAAiC,OAAO,CAAC;AActD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAWD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAE,CAAC;AAEjF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAUlF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAKjF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4B3F;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAWrF;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,oBAAoB,EAAE,GAAG,iBAAiB,CAO5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,IAAI,iBAAiB,GAAG,SAAS,CAS5E;AAED,wFAAwF;AACxF,wBAAgB,8BAA8B,IAAI,IAAI,CAGrD"}
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ /**
3
+ * `DETECTOR_VERSION_PROBES` — are the detector's rules still describing the CLI
4
+ * that is installed? (Issue #1929, 方針書 §4 D2 / §7 / §10.11 / §13.2 S17)
5
+ *
6
+ * Every rule in `src/lib/detection/tools/` was read off a capture of one build
7
+ * of one CLI. `tools/verified-against.ts` records which build. This module reads
8
+ * the other half of the comparison — the version that is installed right now —
9
+ * so `capture --json` and `commandmate status` can say "these rules were
10
+ * measured against copilot 1.0.80 and you are running 1.2.0" instead of leaving
11
+ * a reader to guess whether a misdetection is a bug or a version skew.
12
+ *
13
+ * ## The cost rules, and why they are not optional
14
+ *
15
+ * `capture --json` and `GET /current-output` are the **5-second polling path** —
16
+ * the monitor skills run them with no iteration cap. A probe table that spawns
17
+ * six children cannot sit on that path, so (DR3-013):
18
+ *
19
+ * - probes run **once per process**, concurrent first callers share the same
20
+ * in-flight promise, and the result is cached;
21
+ * - {@link getDetectorStalenessSnapshot} **never awaits a child process**. It
22
+ * answers from the cache or answers `undefined` and starts the probe in the
23
+ * background. `undefined` means "not known yet", never "nothing is stale":
24
+ * the hint is additive, so a poll that lands cold simply shows nothing and
25
+ * the next one shows the banner;
26
+ * - {@link getDetectorFreshness} is the awaiting form, for the two callers that
27
+ * genuinely want the answer (`commandmate status`, `check:detector-freshness`)
28
+ * and are operator-initiated one-offs.
29
+ *
30
+ * ## The execution rules (DR4-010 / §10.11)
31
+ *
32
+ * `PATH` is untrusted input: the server's `PATH` comes from the shell that
33
+ * started it, and a repo-local `node_modules/.bin` on it would let opening a
34
+ * worktree decide which binary a cold probe runs. So every `execFile` probe
35
+ * resolves its command to an **absolute path** through
36
+ * {@link findExecutableOnPath} first and **skips entirely** — spawning nothing —
37
+ * when that resolves to nothing; children run with `sanitizeEnvForChildProcess()`
38
+ * so no probe ever sees CommandMate's auth token or DB path; and both `timeout`
39
+ * and `maxBuffer` are explicit.
40
+ *
41
+ * ## copilot is delegated, and must stay delegated (S17)
42
+ *
43
+ * The design policy's first draft probed `gh copilot -- --version`. It cannot be
44
+ * used: `copilot` is not a gh extension but a preview command built into gh
45
+ * 2.86.0, and gh's own help says that when `PATH` has no copilot it
46
+ * **downloads** the CLI into `~/.local/share/gh/copilot`. A version hint that
47
+ * installs software is not a version hint. #1907 measured this and built
48
+ * {@link resolveCopilotExecutable}; #1913 wired it into the catalog's
49
+ * `VERSION_PROBES` as `kind: 'delegated'`; this table reuses the same shape.
50
+ *
51
+ * Delegating is not an exception to DR4-010 (1) — it satisfies it more strongly
52
+ * than an `execFile` row could, because `CopilotTool.isInstalled()` and
53
+ * `startSession()` decide what to launch from **the same function's same return
54
+ * value**, so probe and launch cannot disagree.
55
+ *
56
+ * ## What "probes must not modify the environment" can actually mean (measured)
57
+ *
58
+ * DR4-010 (5) says a probe must not change the environment ("installation,
59
+ * download, or config-file generation"). Measured on 2026-08-23 (macOS
60
+ * darwin 25.6.0) by running each `--version` under a **disposable** `HOME` /
61
+ * `XDG_DATA_HOME` / `XDG_CONFIG_HOME` and listing what appeared:
62
+ *
63
+ * | probe | version | warm ms | wrote into a pristine HOME |
64
+ * |----------------------|-----------|---------|------------------------------------------|
65
+ * | `claude --version` | 2.1.240 | 199 | nothing |
66
+ * | `agy --version` | 1.1.18 | 176 | nothing |
67
+ * | `codex --version` | 0.148.0 | 172 | `~/.codex/tmp/arg0` |
68
+ * | `opencode --version` | 1.18.21 | 404 | `~/.config/opencode`, `~/.cache/opencode`, `~/.local/{state,share}/opencode` |
69
+ * | `copilot --version` | 1.0.80 | 436 | `~/Library/Caches/copilot` |
70
+ * | `gemini --version` | 0.55.1 | 929 | `~/.gemini/projects.json.<uuid>.tmp` ×2 (leaked, not cleaned up) |
71
+ *
72
+ * So the literal reading of (5) is satisfied by **two** of the six probes, and
73
+ * four of the rows the policy already approved fail it. The rule that the D2
74
+ * premise actually rests on is the narrower one #1979 was defending: a probe
75
+ * must not **install or download software, or change which binary would be
76
+ * launched**. Every row above satisfies that; none of them fetches anything.
77
+ * The gemini row is the weakest — it leaks two temp files into a `~/.gemini`
78
+ * that does not exist yet — and it is kept because it is the same class of
79
+ * side effect as codex/opencode/copilot, which are already in the table, and
80
+ * because dropping gemini would leave the one tool with **no** measured
81
+ * detector rules also with no way to notice that.
82
+ *
83
+ * `~/.config/gh` and `~/.local/share/gh` were checksummed before and after the
84
+ * whole measurement and neither changed (`~/.local/share/gh` still does not
85
+ * exist), which is the receipt #1979 asked for.
86
+ *
87
+ * ## Why this module imports nothing through `@/`
88
+ *
89
+ * `commandmate status` is one of the two exposure surfaces §4 D2 names, and
90
+ * `tsconfig.cli.json` compiles the CLI with `"paths": {}`. See the same
91
+ * constraint spelled out in `src/cli/types/api-responses.ts`.
92
+ *
93
+ * @module lib/detection/version-probes
94
+ */
95
+ Object.defineProperty(exports, "__esModule", { value: true });
96
+ exports.DETECTOR_VERSION_PROBES = exports.DETECTOR_VERSION_PROBE_TIMEOUT_MS = void 0;
97
+ exports.parseCliVersion = parseCliVersion;
98
+ exports.parseVerifiedAgainstVersion = parseVerifiedAgainstVersion;
99
+ exports.compareCliVersions = compareCliVersions;
100
+ exports.runDetectorVersionProbe = runDetectorVersionProbe;
101
+ exports.getDetectorFreshness = getDetectorFreshness;
102
+ exports.toDetectorStaleness = toDetectorStaleness;
103
+ exports.getDetectorStalenessSnapshot = getDetectorStalenessSnapshot;
104
+ exports.clearDetectorVersionProbeCache = clearDetectorVersionProbeCache;
105
+ const child_process_1 = require("child_process");
106
+ const copilot_executable_1 = require("../cli-tools/copilot-executable");
107
+ const env_sanitizer_1 = require("../security/env-sanitizer");
108
+ const verified_against_1 = require("./tools/verified-against");
109
+ /** Budget for one `<cli> --version`. Matches the catalog probe and copilot-executable. */
110
+ exports.DETECTOR_VERSION_PROBE_TIMEOUT_MS = 5000;
111
+ /**
112
+ * Cap on `--version` output kept in memory (DR4-010 (4)).
113
+ *
114
+ * `execFile` defaults to 1MB. A `--version` that answers with a megabyte is
115
+ * already misbehaving, so the buffer is sized to a version banner and the child
116
+ * is killed past it; the over-long answer is discarded rather than parsed.
117
+ */
118
+ const DETECTOR_VERSION_PROBE_MAX_BUFFER_BYTES = 64 * 1024;
119
+ /** Extracts a `major.minor.patch` triple from arbitrary `--version` output. */
120
+ const VERSION_REGEX = /(\d+)\.(\d+)\.(\d+)/;
121
+ /** Extract a normalized `major.minor.patch` version from `--version` output. */
122
+ function parseCliVersion(output) {
123
+ const match = VERSION_REGEX.exec(output);
124
+ return match ? `${match[1]}.${match[2]}.${match[3]}` : null;
125
+ }
126
+ /**
127
+ * A `verifiedAgainst` stamp written as a minor-series wildcard: `0.4.x`.
128
+ *
129
+ * Only ever applied to the stamp, never to a probe's own output — one side of
130
+ * this comparison is a string a human typed into a tool module, the other is
131
+ * what a binary printed about itself, and only the first is allowed to be vague.
132
+ */
133
+ const VERIFIED_AGAINST_WILDCARD_REGEX = /^(\d+)\.(\d+)\.(?:x|\*)$/i;
134
+ /**
135
+ * The comparable form of a `verifiedAgainst` stamp, or null when there is none.
136
+ *
137
+ * `'unmeasured'` is null — a tool nobody has captured frames for cannot be
138
+ * fresh or stale. `'0.4.x'` becomes `0.4.0`: antigravity's stamp is a minor
139
+ * series rather than a build (Issue #995 measured a range), and reading it as
140
+ * "no version" would silently exempt the one tool whose rules are furthest
141
+ * behind. Widening to `.0` is the safe direction — it can only ever call a
142
+ * newer install stale, never call a stale one current.
143
+ */
144
+ function parseVerifiedAgainstVersion(stamp) {
145
+ const wildcard = VERIFIED_AGAINST_WILDCARD_REGEX.exec(stamp);
146
+ if (wildcard)
147
+ return `${wildcard[1]}.${wildcard[2]}.0`;
148
+ return parseCliVersion(stamp);
149
+ }
150
+ /**
151
+ * Compare two `major.minor.patch` versions numerically.
152
+ * @returns 1 if a > b, -1 if a < b, 0 if equal.
153
+ */
154
+ function compareCliVersions(a, b) {
155
+ const pa = a.split('.').map((n) => Number(n) || 0);
156
+ const pb = b.split('.').map((n) => Number(n) || 0);
157
+ for (let i = 0; i < 3; i++) {
158
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
159
+ if (diff !== 0)
160
+ return diff > 0 ? 1 : -1;
161
+ }
162
+ return 0;
163
+ }
164
+ /**
165
+ * Detector staleness probes: tool id → how to read its installed version.
166
+ *
167
+ * Deliberately the same shape as `VERSION_PROBES` in `slash-command-catalog.ts`
168
+ * (§4 D2: 「`VERSION_PROBES` と同型」), and deliberately a separate table: the
169
+ * catalog's question is "is the bundled slash-command list behind?" and this
170
+ * one's is "were these detection rules read off the build that is installed?".
171
+ * They happen to agree today; nothing requires them to.
172
+ *
173
+ * The binary for antigravity is `agy` — tool id and executable name differ
174
+ * (DR2-023). `gemini`'s row is `gemini --version`, measured for this Issue (the
175
+ * policy left it unconfirmed); its `verifiedAgainst` is `unmeasured`, so it is
176
+ * reported as "installed, rules never measured" rather than compared.
177
+ * `vibe-local` has no row: it is not an external CLI.
178
+ */
179
+ exports.DETECTOR_VERSION_PROBES = {
180
+ claude: { kind: 'execFile', command: 'claude', args: ['--version'] },
181
+ codex: { kind: 'execFile', command: 'codex', args: ['--version'] },
182
+ antigravity: { kind: 'execFile', command: 'agy', args: ['--version'] },
183
+ opencode: { kind: 'execFile', command: 'opencode', args: ['--version'] },
184
+ gemini: { kind: 'execFile', command: 'gemini', args: ['--version'] },
185
+ copilot: {
186
+ kind: 'delegated',
187
+ probe: async () => (await (0, copilot_executable_1.resolveCopilotExecutable)())?.version ?? null,
188
+ },
189
+ };
190
+ let freshnessCache = null;
191
+ let freshnessInFlight = null;
192
+ /**
193
+ * Run one probe. Resolves null on any failure, and **without spawning anything**
194
+ * when the command does not resolve to an absolute path (DR4-010 (2)).
195
+ */
196
+ function runDetectorVersionProbe(probe) {
197
+ if (probe.kind === 'delegated') {
198
+ return probe.probe().catch(() => null);
199
+ }
200
+ const executable = (0, copilot_executable_1.findExecutableOnPath)(probe.command);
201
+ // Skip, do not fall back to the bare name: handing an unresolved command to
202
+ // execFile is exactly the PATH-decides-the-binary case DR4-010 removes.
203
+ if (!executable)
204
+ return Promise.resolve(null);
205
+ return new Promise((resolve) => {
206
+ (0, child_process_1.execFile)(executable, [...probe.args], {
207
+ timeout: exports.DETECTOR_VERSION_PROBE_TIMEOUT_MS,
208
+ maxBuffer: DETECTOR_VERSION_PROBE_MAX_BUFFER_BYTES,
209
+ env: (0, env_sanitizer_1.sanitizeEnvForChildProcess)(),
210
+ }, (error, stdout, stderr) => {
211
+ if (error) {
212
+ resolve(null);
213
+ return;
214
+ }
215
+ resolve(parseCliVersion(`${stdout ?? ''}\n${stderr ?? ''}`));
216
+ });
217
+ });
218
+ }
219
+ async function computeDetectorFreshness() {
220
+ const tools = Object.keys(exports.DETECTOR_VERSION_PROBES).sort();
221
+ return Promise.all(tools.map(async (tool) => {
222
+ const verifiedAgainst = verified_against_1.DETECTOR_VERIFIED_AGAINST[tool]?.version ?? 'unmeasured';
223
+ const installed = await runDetectorVersionProbe(exports.DETECTOR_VERSION_PROBES[tool]);
224
+ const baseline = parseVerifiedAgainstVersion(verifiedAgainst);
225
+ return {
226
+ tool,
227
+ installed,
228
+ verifiedAgainst,
229
+ stale: installed !== null && baseline !== null && compareCliVersions(installed, baseline) > 0,
230
+ };
231
+ }));
232
+ }
233
+ /**
234
+ * The full freshness report, computed once per process and cached. Concurrent
235
+ * first callers share one probe.
236
+ *
237
+ * **This awaits child processes — never call it from a request path.** Use
238
+ * {@link getDetectorStalenessSnapshot} there. Kept for `commandmate status`,
239
+ * `npm run check:detector-freshness` and tests, and as the single implementation
240
+ * both entry points share.
241
+ */
242
+ async function getDetectorFreshness() {
243
+ if (freshnessCache !== null)
244
+ return freshnessCache;
245
+ if (freshnessInFlight)
246
+ return freshnessInFlight;
247
+ freshnessInFlight = computeDetectorFreshness();
248
+ try {
249
+ freshnessCache = await freshnessInFlight;
250
+ return freshnessCache;
251
+ }
252
+ finally {
253
+ freshnessInFlight = null;
254
+ }
255
+ }
256
+ /** Reduce a report to the wire shape: stale tools only. */
257
+ function toDetectorStaleness(rows) {
258
+ const staleness = {};
259
+ for (const row of rows) {
260
+ if (!row.stale || row.installed === null)
261
+ continue;
262
+ staleness[row.tool] = { installed: row.installed, verifiedAgainst: row.verifiedAgainst };
263
+ }
264
+ return staleness;
265
+ }
266
+ /**
267
+ * The staleness this process already knows, or `undefined` plus a background
268
+ * probe when it knows nothing yet. **Never awaits a child process** (§4 D2,
269
+ * DR3-013 (a)(b)(c)).
270
+ *
271
+ * `undefined` is "not known yet", not "nothing is stale" — see the module doc.
272
+ * The returned object is `{}` once the cache is warm and nothing is stale, which
273
+ * is how a caller tells the two apart.
274
+ */
275
+ function getDetectorStalenessSnapshot() {
276
+ if (freshnessCache !== null)
277
+ return toDetectorStaleness(freshnessCache);
278
+ // Fire and forget. No in-flight check here on purpose: getDetectorFreshness
279
+ // owns that slot and hands a concurrent caller the promise that is already
280
+ // running, so a second guard would be a copy of an invariant that lives one
281
+ // function down — and a copy is what goes stale. It swallows its own failures,
282
+ // so nothing here needs the result.
283
+ void getDetectorFreshness().catch(() => []);
284
+ return undefined;
285
+ }
286
+ /** Clear the process-level probe cache (tests, and any future cache-control wiring). */
287
+ function clearDetectorVersionProbeCache() {
288
+ freshnessCache = null;
289
+ freshnessInFlight = null;
290
+ }