commandmate 0.29.0 → 0.29.2

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 (907) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +444 -400
  3. package/.next/app-path-routes-manifest.json +31 -25
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +17 -0
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/update/route.js +2 -0
  12. package/.next/server/app/api/agents/update/route.js.nft.json +1 -0
  13. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -0
  14. package/.next/server/app/api/agents/versions/route.js +1 -0
  15. package/.next/server/app/api/agents/versions/route.js.nft.json +1 -0
  16. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -0
  17. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/app/update-check/route.js +1 -1
  19. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  21. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  22. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  24. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  25. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/assistant/messages/route.js +1 -1
  27. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  28. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/assistant/session/route.js +1 -1
  30. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  31. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/assistant/start/route.js +2 -2
  33. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  34. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/assistant/terminal/route.js +1 -1
  36. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  37. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/assistant/tools/route.js +1 -1
  39. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  40. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/capabilities/route.js +1 -1
  45. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/daily-summary/route.js +1 -1
  47. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  48. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  50. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  51. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  53. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  54. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  56. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/external-apps/route.js +1 -1
  59. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  60. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/fs/browse/route.js +1 -7
  62. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  63. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/fs/recent-paths/route.js +1 -7
  65. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  66. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  68. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  69. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  71. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  72. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  74. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  75. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/metrics/vibe/route.js +2 -2
  77. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  78. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/push/escalation/route.js +7 -1
  81. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  82. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  84. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  85. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/push/vapid/route.js +7 -1
  87. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  88. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  91. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  92. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  94. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  95. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  97. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  98. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  100. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  101. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/repositories/clone/route.js +1 -1
  103. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  104. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  106. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  107. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/repositories/restore/route.js +1 -1
  109. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  110. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/repositories/route.js +1 -1
  112. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  113. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/repositories/scan/route.js +1 -1
  115. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  116. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/repositories/sync/route.js +1 -1
  118. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  119. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  121. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  122. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/settings/default-agents/route.js +1 -0
  124. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -0
  125. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -0
  126. package/.next/server/app/api/sidebar/group-order/route.js +1 -7
  127. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  128. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/skills/[id]/route.js +1 -1
  130. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  131. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/skills/installations/route.js +2 -2
  133. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  134. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/skills/operations/route.js +2 -2
  136. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  137. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/skills/reindex/route.js +1 -1
  139. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  140. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/skills/route.js +1 -1
  142. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  143. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/slash-commands/route.js +1 -1
  145. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  146. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
  148. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  149. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  151. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  152. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/templates/[id]/route.js +2 -2
  154. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  155. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/templates/route.js +2 -2
  157. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  158. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/todos/route.js +1 -1
  160. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  161. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  163. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  164. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/verification/runs/route.js +1 -1
  166. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  167. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  181. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  182. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -2
  184. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  185. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  191. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  193. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  275. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  278. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  280. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
  283. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  284. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  287. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  290. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  293. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  296. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  299. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  302. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  304. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  305. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  308. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  311. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  314. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  316. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  317. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  319. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  320. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  322. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  323. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  326. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -7
  328. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  329. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  330. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  331. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  332. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  333. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  334. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  335. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  336. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  337. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  338. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  339. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  340. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  341. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  342. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  343. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  344. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  345. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  346. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  347. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  348. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  349. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  350. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  351. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  352. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  353. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  354. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  355. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  356. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  357. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  358. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  359. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  360. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  361. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  362. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  363. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  364. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  365. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  366. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  367. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  368. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  369. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  370. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  371. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  372. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  373. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  374. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  375. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  376. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  377. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  378. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  379. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  380. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  381. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  382. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  383. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  384. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  385. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  386. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  387. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  388. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  389. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  390. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +2 -0
  391. package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -0
  392. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -0
  393. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  394. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  395. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  396. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -0
  397. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -0
  398. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -0
  399. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  400. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  401. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  402. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  403. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  404. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  405. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  406. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  407. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  408. package/.next/server/app/api/worktrees/apply-default-agents/route.js +1 -0
  409. package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -0
  410. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -0
  411. package/.next/server/app/api/worktrees/route.js +1 -1
  412. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  413. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  414. package/.next/server/app/chat/page.js +2 -2
  415. package/.next/server/app/chat/page.js.nft.json +1 -1
  416. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  417. package/.next/server/app/login/page.js +2 -2
  418. package/.next/server/app/login/page.js.nft.json +1 -1
  419. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  420. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  421. package/.next/server/app/more/page.js +2 -2
  422. package/.next/server/app/more/page.js.nft.json +1 -1
  423. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  424. package/.next/server/app/offline/page.js.nft.json +1 -1
  425. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  426. package/.next/server/app/page.js +1 -1
  427. package/.next/server/app/page.js.nft.json +1 -1
  428. package/.next/server/app/page_client-reference-manifest.js +1 -1
  429. package/.next/server/app/proxy/[...path]/route.js +1 -1
  430. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  431. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  432. package/.next/server/app/repositories/page.js +2 -2
  433. package/.next/server/app/repositories/page.js.nft.json +1 -1
  434. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  435. package/.next/server/app/review/page.js +1 -1
  436. package/.next/server/app/review/page.js.nft.json +1 -1
  437. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  438. package/.next/server/app/sessions/page.js +1 -1
  439. package/.next/server/app/sessions/page.js.nft.json +1 -1
  440. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  441. package/.next/server/app/skills/[skillId]/page.js +2 -2
  442. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  443. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  444. package/.next/server/app/skills/installed/page.js +2 -2
  445. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  446. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  447. package/.next/server/app/skills/page.js +2 -2
  448. package/.next/server/app/skills/page.js.nft.json +1 -1
  449. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  450. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  451. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  452. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  453. package/.next/server/app/worktrees/[id]/page.js +12 -12
  454. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  455. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  456. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  457. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  458. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  459. package/.next/server/app-paths-manifest.json +31 -25
  460. package/.next/server/chunks/1058.js +1 -1
  461. package/.next/server/chunks/1068.js +1 -1
  462. package/.next/server/chunks/1341.js +1 -0
  463. package/.next/server/chunks/1501.js +5 -0
  464. package/.next/server/chunks/1886.js +3 -4
  465. package/.next/server/chunks/2119.js +1 -1
  466. package/.next/server/chunks/2198.js +1 -0
  467. package/.next/server/chunks/221.js +7 -1
  468. package/.next/server/chunks/2404.js +1 -1
  469. package/.next/server/chunks/2445.js +1 -1
  470. package/.next/server/chunks/2759.js +1 -1
  471. package/.next/server/chunks/3543.js +1 -1
  472. package/.next/server/chunks/3558.js +1 -1
  473. package/.next/server/chunks/3707.js +15 -0
  474. package/.next/server/chunks/3722.js +25 -1
  475. package/.next/server/chunks/3869.js +1 -0
  476. package/.next/server/chunks/3945.js +1 -1
  477. package/.next/server/chunks/4299.js +1 -1
  478. package/.next/server/chunks/4390.js +1 -0
  479. package/.next/server/chunks/4393.js +1 -1
  480. package/.next/server/chunks/5017.js +1 -1
  481. package/.next/server/chunks/5164.js +1 -1
  482. package/.next/server/chunks/5571.js +1 -1
  483. package/.next/server/chunks/6130.js +1 -1
  484. package/.next/server/chunks/6285.js +1 -1
  485. package/.next/server/chunks/6781.js +1 -1
  486. package/.next/server/chunks/7366.js +5 -0
  487. package/.next/server/chunks/7824.js +1 -1
  488. package/.next/server/chunks/7905.js +1 -1
  489. package/.next/server/chunks/8118.js +1 -0
  490. package/.next/server/chunks/848.js +1 -1
  491. package/.next/server/chunks/880.js +3 -3
  492. package/.next/server/chunks/8800.js +3 -0
  493. package/.next/server/chunks/9123.js +2 -2
  494. package/.next/server/chunks/9508.js +1 -1
  495. package/.next/server/chunks/9627.js +30 -24
  496. package/.next/server/middleware-build-manifest.js +1 -1
  497. package/.next/server/middleware-manifest.json +5 -5
  498. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  499. package/.next/server/pages/500.html +1 -1
  500. package/.next/server/server-reference-manifest.json +1 -1
  501. package/.next/static/0YoRrahue4Vchxg1z83IQ/_buildManifest.js +1 -0
  502. package/.next/static/chunks/1379-af7af9e08f47c979.js +1 -0
  503. package/.next/static/chunks/{2053-c0e931eb4391baa1.js → 2053-3f299a7a2c7d6767.js} +1 -1
  504. package/.next/static/chunks/3922.9c1ec01fff819c88.js +1 -0
  505. package/.next/static/chunks/{3968-8d8ca15657748bfb.js → 4882-388e94fe0a03c2ba.js} +1 -1
  506. package/.next/static/chunks/5229-b2a81bb8fb5c19e9.js +1 -0
  507. package/.next/static/chunks/6381-9ba5198c0a6ff197.js +1 -0
  508. package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +1 -0
  509. package/.next/static/chunks/{1188-8567ee5ecfef02ee.js → 8593-fa0eb2802e0ce68a.js} +1 -1
  510. package/.next/static/chunks/app/api/agents/update/route-1c30fb8d4d6fa6ef.js +1 -0
  511. package/.next/static/chunks/app/api/agents/versions/route-1c30fb8d4d6fa6ef.js +1 -0
  512. package/.next/static/chunks/app/api/app/update/route-1c30fb8d4d6fa6ef.js +1 -0
  513. package/.next/static/chunks/app/api/app/update-check/route-1c30fb8d4d6fa6ef.js +1 -0
  514. package/.next/static/chunks/app/api/assistant/conversation/route-1c30fb8d4d6fa6ef.js +1 -0
  515. package/.next/static/chunks/app/api/assistant/current-output/route-1c30fb8d4d6fa6ef.js +1 -0
  516. package/.next/static/chunks/app/api/assistant/messages/route-1c30fb8d4d6fa6ef.js +1 -0
  517. package/.next/static/chunks/app/api/assistant/session/route-1c30fb8d4d6fa6ef.js +1 -0
  518. package/.next/static/chunks/app/api/assistant/start/route-1c30fb8d4d6fa6ef.js +1 -0
  519. package/.next/static/chunks/app/api/assistant/terminal/route-1c30fb8d4d6fa6ef.js +1 -0
  520. package/.next/static/chunks/app/api/assistant/tools/route-1c30fb8d4d6fa6ef.js +1 -0
  521. package/.next/static/chunks/app/api/auth/login/route-1c30fb8d4d6fa6ef.js +1 -0
  522. package/.next/static/chunks/app/api/auth/logout/route-1c30fb8d4d6fa6ef.js +1 -0
  523. package/.next/static/chunks/app/api/auth/status/route-1c30fb8d4d6fa6ef.js +1 -0
  524. package/.next/static/chunks/app/api/capabilities/route-1c30fb8d4d6fa6ef.js +1 -0
  525. package/.next/static/chunks/app/api/daily-summary/route-1c30fb8d4d6fa6ef.js +1 -0
  526. package/.next/static/chunks/app/api/daily-summary/status/route-1c30fb8d4d6fa6ef.js +1 -0
  527. package/.next/static/chunks/app/api/external-apps/[id]/health/route-1c30fb8d4d6fa6ef.js +1 -0
  528. package/.next/static/chunks/app/api/external-apps/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  529. package/.next/static/chunks/app/api/external-apps/route-1c30fb8d4d6fa6ef.js +1 -0
  530. package/.next/static/chunks/app/api/fs/browse/route-1c30fb8d4d6fa6ef.js +1 -0
  531. package/.next/static/chunks/app/api/fs/recent-paths/route-1c30fb8d4d6fa6ef.js +1 -0
  532. package/.next/static/chunks/app/api/hooks/agent-event/route-1c30fb8d4d6fa6ef.js +1 -0
  533. package/.next/static/chunks/app/api/hooks/claude-done/route-1c30fb8d4d6fa6ef.js +1 -0
  534. package/.next/static/chunks/app/api/hooks/permission-request/route-1c30fb8d4d6fa6ef.js +1 -0
  535. package/.next/static/chunks/app/api/metrics/vibe/route-1c30fb8d4d6fa6ef.js +1 -0
  536. package/.next/static/chunks/app/api/ollama/models/route-1c30fb8d4d6fa6ef.js +1 -0
  537. package/.next/static/chunks/app/api/push/escalation/route-1c30fb8d4d6fa6ef.js +1 -0
  538. package/.next/static/chunks/app/api/push/subscriptions/route-1c30fb8d4d6fa6ef.js +1 -0
  539. package/.next/static/chunks/app/api/push/vapid/route-1c30fb8d4d6fa6ef.js +1 -0
  540. package/.next/static/chunks/app/api/remote/pair/route-1c30fb8d4d6fa6ef.js +1 -0
  541. package/.next/static/chunks/app/api/repositories/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  542. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-1c30fb8d4d6fa6ef.js +1 -0
  543. package/.next/static/chunks/app/api/repositories/[id]/todos/route-1c30fb8d4d6fa6ef.js +1 -0
  544. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-1c30fb8d4d6fa6ef.js +1 -0
  545. package/.next/static/chunks/app/api/repositories/clone/route-1c30fb8d4d6fa6ef.js +1 -0
  546. package/.next/static/chunks/app/api/repositories/excluded/route-1c30fb8d4d6fa6ef.js +1 -0
  547. package/.next/static/chunks/app/api/repositories/restore/route-1c30fb8d4d6fa6ef.js +1 -0
  548. package/.next/static/chunks/app/api/repositories/route-1c30fb8d4d6fa6ef.js +1 -0
  549. package/.next/static/chunks/app/api/repositories/scan/route-1c30fb8d4d6fa6ef.js +1 -0
  550. package/.next/static/chunks/app/api/repositories/sync/route-1c30fb8d4d6fa6ef.js +1 -0
  551. package/.next/static/chunks/app/api/repositories/validate-path/route-1c30fb8d4d6fa6ef.js +1 -0
  552. package/.next/static/chunks/app/api/settings/default-agents/route-1c30fb8d4d6fa6ef.js +1 -0
  553. package/.next/static/chunks/app/api/sidebar/group-order/route-1c30fb8d4d6fa6ef.js +1 -0
  554. package/.next/static/chunks/app/api/skills/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  555. package/.next/static/chunks/app/api/skills/installations/route-1c30fb8d4d6fa6ef.js +1 -0
  556. package/.next/static/chunks/app/api/skills/operations/route-1c30fb8d4d6fa6ef.js +1 -0
  557. package/.next/static/chunks/app/api/skills/reindex/route-1c30fb8d4d6fa6ef.js +1 -0
  558. package/.next/static/chunks/app/api/skills/route-1c30fb8d4d6fa6ef.js +1 -0
  559. package/.next/static/chunks/app/api/slash-commands/route-1c30fb8d4d6fa6ef.js +1 -0
  560. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-1c30fb8d4d6fa6ef.js +1 -0
  561. package/.next/static/chunks/app/api/tasks/[taskId]/route-1c30fb8d4d6fa6ef.js +1 -0
  562. package/.next/static/chunks/app/api/templates/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  563. package/.next/static/chunks/app/api/templates/route-1c30fb8d4d6fa6ef.js +1 -0
  564. package/.next/static/chunks/app/api/todos/route-1c30fb8d4d6fa6ef.js +1 -0
  565. package/.next/static/chunks/app/api/verification/runs/[runId]/route-1c30fb8d4d6fa6ef.js +1 -0
  566. package/.next/static/chunks/app/api/verification/runs/route-1c30fb8d4d6fa6ef.js +1 -0
  567. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-1c30fb8d4d6fa6ef.js +1 -0
  568. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-1c30fb8d4d6fa6ef.js +1 -0
  569. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-1c30fb8d4d6fa6ef.js +1 -0
  570. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-1c30fb8d4d6fa6ef.js +1 -0
  571. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-1c30fb8d4d6fa6ef.js +1 -0
  572. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-1c30fb8d4d6fa6ef.js +1 -0
  573. package/.next/static/chunks/app/api/worktrees/[id]/env/route-1c30fb8d4d6fa6ef.js +1 -0
  574. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-1c30fb8d4d6fa6ef.js +1 -0
  575. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-1c30fb8d4d6fa6ef.js +1 -0
  576. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-1c30fb8d4d6fa6ef.js +1 -0
  577. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-1c30fb8d4d6fa6ef.js +1 -0
  578. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-1c30fb8d4d6fa6ef.js +1 -0
  579. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-1c30fb8d4d6fa6ef.js +1 -0
  580. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-1c30fb8d4d6fa6ef.js +1 -0
  581. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-1c30fb8d4d6fa6ef.js +1 -0
  582. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-1c30fb8d4d6fa6ef.js +1 -0
  583. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-1c30fb8d4d6fa6ef.js +1 -0
  584. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-1c30fb8d4d6fa6ef.js +1 -0
  585. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-1c30fb8d4d6fa6ef.js +1 -0
  586. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-1c30fb8d4d6fa6ef.js +1 -0
  587. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-1c30fb8d4d6fa6ef.js +1 -0
  588. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-1c30fb8d4d6fa6ef.js +1 -0
  589. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-1c30fb8d4d6fa6ef.js +1 -0
  590. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-1c30fb8d4d6fa6ef.js +1 -0
  591. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-1c30fb8d4d6fa6ef.js +1 -0
  592. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-1c30fb8d4d6fa6ef.js +1 -0
  593. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-1c30fb8d4d6fa6ef.js +1 -0
  594. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-1c30fb8d4d6fa6ef.js +1 -0
  595. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-1c30fb8d4d6fa6ef.js +1 -0
  596. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-1c30fb8d4d6fa6ef.js +1 -0
  597. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-1c30fb8d4d6fa6ef.js +1 -0
  598. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-1c30fb8d4d6fa6ef.js +1 -0
  599. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-1c30fb8d4d6fa6ef.js +1 -0
  600. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-1c30fb8d4d6fa6ef.js +1 -0
  601. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-1c30fb8d4d6fa6ef.js +1 -0
  602. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-1c30fb8d4d6fa6ef.js +1 -0
  603. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-1c30fb8d4d6fa6ef.js +1 -0
  604. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-1c30fb8d4d6fa6ef.js +1 -0
  605. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-1c30fb8d4d6fa6ef.js +1 -0
  606. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-1c30fb8d4d6fa6ef.js +1 -0
  607. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-1c30fb8d4d6fa6ef.js +1 -0
  608. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-1c30fb8d4d6fa6ef.js +1 -0
  609. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-1c30fb8d4d6fa6ef.js +1 -0
  610. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-1c30fb8d4d6fa6ef.js +1 -0
  611. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-1c30fb8d4d6fa6ef.js +1 -0
  612. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-1c30fb8d4d6fa6ef.js +1 -0
  613. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-1c30fb8d4d6fa6ef.js +1 -0
  614. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-1c30fb8d4d6fa6ef.js +1 -0
  615. package/.next/static/chunks/app/api/worktrees/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  616. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-1c30fb8d4d6fa6ef.js +1 -0
  617. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-1c30fb8d4d6fa6ef.js +1 -0
  618. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-1c30fb8d4d6fa6ef.js +1 -0
  619. package/.next/static/chunks/app/api/worktrees/[id]/search/route-1c30fb8d4d6fa6ef.js +1 -0
  620. package/.next/static/chunks/app/api/worktrees/[id]/send/route-1c30fb8d4d6fa6ef.js +1 -0
  621. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-1c30fb8d4d6fa6ef.js +1 -0
  622. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-1c30fb8d4d6fa6ef.js +1 -0
  623. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-1c30fb8d4d6fa6ef.js +1 -0
  624. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-1c30fb8d4d6fa6ef.js +1 -0
  625. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-1c30fb8d4d6fa6ef.js +1 -0
  626. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-1c30fb8d4d6fa6ef.js +1 -0
  627. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-1c30fb8d4d6fa6ef.js +1 -0
  628. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-1c30fb8d4d6fa6ef.js +1 -0
  629. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-1c30fb8d4d6fa6ef.js +1 -0
  630. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-1c30fb8d4d6fa6ef.js +1 -0
  631. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-1c30fb8d4d6fa6ef.js +1 -0
  632. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-1c30fb8d4d6fa6ef.js +1 -0
  633. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-1c30fb8d4d6fa6ef.js +1 -0
  634. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-1c30fb8d4d6fa6ef.js +1 -0
  635. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-1c30fb8d4d6fa6ef.js +1 -0
  636. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-1c30fb8d4d6fa6ef.js +1 -0
  637. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-1c30fb8d4d6fa6ef.js +1 -0
  638. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-1c30fb8d4d6fa6ef.js +1 -0
  639. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-1c30fb8d4d6fa6ef.js +1 -0
  640. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-1c30fb8d4d6fa6ef.js +1 -0
  641. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-1c30fb8d4d6fa6ef.js +1 -0
  642. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-1c30fb8d4d6fa6ef.js +1 -0
  643. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-1c30fb8d4d6fa6ef.js +1 -0
  644. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-1c30fb8d4d6fa6ef.js +1 -0
  645. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-1c30fb8d4d6fa6ef.js +1 -0
  646. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-1c30fb8d4d6fa6ef.js +1 -0
  647. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-1c30fb8d4d6fa6ef.js +1 -0
  648. package/.next/static/chunks/app/api/worktrees/route-1c30fb8d4d6fa6ef.js +1 -0
  649. package/.next/static/chunks/app/chat/{page-231df45127e876c2.js → page-9aa2011410895b0d.js} +1 -1
  650. package/.next/static/chunks/app/login/{page-03659dded846ef1d.js → page-af7241bb4c4a8e59.js} +1 -1
  651. package/.next/static/chunks/app/manifest.webmanifest/route-1c30fb8d4d6fa6ef.js +1 -0
  652. package/.next/static/chunks/app/more/page-75d3783da0d49a25.js +1 -0
  653. package/.next/static/chunks/app/{page-0305431f43195431.js → page-214f7ffa13a0cf10.js} +1 -1
  654. package/.next/static/chunks/app/proxy/[...path]/route-1c30fb8d4d6fa6ef.js +1 -0
  655. package/.next/static/chunks/app/repositories/{page-ae8fa55749976f79.js → page-4951cac905e50224.js} +1 -1
  656. package/.next/static/chunks/app/review/page-a0899b2d285318c3.js +1 -0
  657. package/.next/static/chunks/app/sessions/page-fb36145ec732092a.js +1 -0
  658. package/.next/static/chunks/app/skills/[skillId]/{page-aaf0bcb1dfb558b9.js → page-9099e26b60442873.js} +1 -1
  659. package/.next/static/chunks/app/skills/installed/{page-dafc486410e839b7.js → page-182e32368696d824.js} +1 -1
  660. package/.next/static/chunks/app/skills/{page-9e3c91da31514893.js → page-d3fdc88239ebe0ab.js} +1 -1
  661. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-90f96977c741bbf8.js → page-f3361237420719b4.js} +1 -1
  662. package/.next/static/chunks/app/worktrees/[id]/layout-1c30fb8d4d6fa6ef.js +1 -0
  663. package/.next/static/chunks/app/worktrees/[id]/page-ce6279d581d1df95.js +1 -0
  664. package/.next/static/chunks/{webpack-7e79064bfce988d7.js → webpack-9f75198882fdaf08.js} +1 -1
  665. package/.next/static/css/b326c8a734e1928e.css +1 -0
  666. package/.next/trace +13 -13
  667. package/.next/types/app/api/agents/update/route.ts +347 -0
  668. package/.next/types/app/api/agents/versions/route.ts +347 -0
  669. package/.next/types/app/api/settings/default-agents/route.ts +347 -0
  670. package/.next/types/app/api/worktrees/[id]/verify/config/route.ts +347 -0
  671. package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.ts +347 -0
  672. package/.next/types/app/api/worktrees/apply-default-agents/route.ts +347 -0
  673. package/.next/types/routes.d.ts +7 -1
  674. package/.next/types/validator.ts +54 -0
  675. package/dist/cli/commands/agents.d.ts +35 -0
  676. package/dist/cli/commands/agents.d.ts.map +1 -0
  677. package/dist/cli/commands/agents.js +212 -0
  678. package/dist/cli/commands/ls.d.ts.map +1 -1
  679. package/dist/cli/commands/ls.js +18 -0
  680. package/dist/cli/commands/verify.d.ts.map +1 -1
  681. package/dist/cli/commands/verify.js +111 -0
  682. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  683. package/dist/cli/config/cli-dependencies.js +11 -0
  684. package/dist/cli/docs/agent-operations.d.ts +1 -1
  685. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  686. package/dist/cli/docs/agent-operations.js +30 -0
  687. package/dist/cli/program.d.ts.map +1 -1
  688. package/dist/cli/program.js +6 -0
  689. package/dist/cli/types/api-responses.d.ts +58 -0
  690. package/dist/cli/types/api-responses.d.ts.map +1 -1
  691. package/dist/cli/types/index.d.ts +8 -0
  692. package/dist/cli/types/index.d.ts.map +1 -1
  693. package/dist/cli/utils/preflight.d.ts.map +1 -1
  694. package/dist/cli/utils/preflight.js +6 -0
  695. package/dist/config/system-directories.d.ts +101 -0
  696. package/dist/config/system-directories.d.ts.map +1 -0
  697. package/dist/config/system-directories.js +211 -0
  698. package/dist/lib/cli-tools/types.d.ts +15 -1
  699. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  700. package/dist/lib/detection/status-reason.d.ts +92 -0
  701. package/dist/lib/detection/status-reason.d.ts.map +1 -0
  702. package/dist/lib/detection/status-reason.js +94 -0
  703. package/dist/lib/updates/agent-updater.d.ts +247 -0
  704. package/dist/lib/updates/agent-updater.d.ts.map +1 -0
  705. package/dist/lib/updates/agent-updater.js +373 -0
  706. package/dist/lib/updates/agent-versions.d.ts +77 -0
  707. package/dist/lib/updates/agent-versions.d.ts.map +1 -0
  708. package/dist/lib/updates/agent-versions.js +138 -0
  709. package/dist/lib/updates/codex-version.d.ts +184 -0
  710. package/dist/lib/updates/codex-version.d.ts.map +1 -0
  711. package/dist/lib/updates/codex-version.js +215 -0
  712. package/dist/lib/verification/verify-config.d.ts +202 -0
  713. package/dist/lib/verification/verify-config.d.ts.map +1 -0
  714. package/dist/lib/verification/verify-config.js +429 -0
  715. package/dist/lib/verification/verify-draft.d.ts +182 -0
  716. package/dist/lib/verification/verify-draft.d.ts.map +1 -0
  717. package/dist/lib/verification/verify-draft.js +570 -0
  718. package/dist/server/src/cli/types/api-responses.js +9 -0
  719. package/dist/server/src/config/cli-tool-timing-config.js +15 -1
  720. package/dist/server/src/config/codex-update-dialog-config.js +154 -0
  721. package/dist/server/src/config/default-agents.js +138 -0
  722. package/dist/server/src/lib/cli-tools/antigravity.js +36 -12
  723. package/dist/server/src/lib/cli-tools/base.js +131 -0
  724. package/dist/server/src/lib/cli-tools/codex.js +350 -100
  725. package/dist/server/src/lib/cli-tools/copilot.js +34 -10
  726. package/dist/server/src/lib/cli-tools/gemini.js +34 -10
  727. package/dist/server/src/lib/cli-tools/liveness-spec.js +214 -0
  728. package/dist/server/src/lib/cli-tools/opencode.js +72 -19
  729. package/dist/server/src/lib/cli-tools/session-liveness.js +64 -0
  730. package/dist/server/src/lib/cli-tools/vibe-local.js +30 -10
  731. package/dist/server/src/lib/db/app-settings-db.js +142 -0
  732. package/dist/server/src/lib/db/worktree-db.js +178 -3
  733. package/dist/server/src/lib/detection/status-reason.js +17 -0
  734. package/dist/server/src/lib/detection/tool-liveness.js +233 -0
  735. package/dist/server/src/lib/detection/version-probes.js +290 -0
  736. package/dist/server/src/lib/git/worktrees.js +10 -0
  737. package/dist/server/src/lib/repo-config/agents-config.js +298 -0
  738. package/dist/server/src/lib/selected-agents-validator.js +93 -23
  739. package/dist/server/src/lib/session/claude-session.js +39 -108
  740. package/dist/server/src/lib/tmux/tmux.js +29 -0
  741. package/dist/server/src/lib/updates/agent-updater.js +373 -0
  742. package/dist/server/src/lib/updates/agent-versions.js +138 -0
  743. package/dist/server/src/lib/updates/codex-version.js +215 -0
  744. package/dist/server/src/lib/updates/index.js +42 -0
  745. package/dist/server/src/lib/verification/gate-runner.js +298 -37
  746. package/dist/server/src/lib/verification/machine-lock.js +11 -0
  747. package/dist/server/src/lib/verification/run-verdict-vocabulary.js +151 -0
  748. package/dist/server/src/lib/verification/verify-config.js +33 -0
  749. package/dist/server/src/types/sidebar.js +40 -9
  750. package/dist/types/cli-tool-contracts.d.ts +119 -0
  751. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  752. package/package.json +1 -1
  753. package/.next/server/chunks/1601.js +0 -7
  754. package/.next/server/chunks/222.js +0 -1
  755. package/.next/server/chunks/2366.js +0 -1
  756. package/.next/server/chunks/4689.js +0 -25
  757. package/.next/server/chunks/5089.js +0 -1
  758. package/.next/server/chunks/6274.js +0 -14
  759. package/.next/server/chunks/9067.js +0 -1
  760. package/.next/server/chunks/9373.js +0 -9
  761. package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +0 -1
  762. package/.next/static/chunks/3922.0d2e64daf9f187da.js +0 -1
  763. package/.next/static/chunks/5229-580b581fce5aeb52.js +0 -1
  764. package/.next/static/chunks/6381-c8d93ec301dbc380.js +0 -1
  765. package/.next/static/chunks/app/api/app/update/route-e3626364434d521b.js +0 -1
  766. package/.next/static/chunks/app/api/app/update-check/route-e3626364434d521b.js +0 -1
  767. package/.next/static/chunks/app/api/assistant/conversation/route-e3626364434d521b.js +0 -1
  768. package/.next/static/chunks/app/api/assistant/current-output/route-e3626364434d521b.js +0 -1
  769. package/.next/static/chunks/app/api/assistant/messages/route-e3626364434d521b.js +0 -1
  770. package/.next/static/chunks/app/api/assistant/session/route-e3626364434d521b.js +0 -1
  771. package/.next/static/chunks/app/api/assistant/start/route-e3626364434d521b.js +0 -1
  772. package/.next/static/chunks/app/api/assistant/terminal/route-e3626364434d521b.js +0 -1
  773. package/.next/static/chunks/app/api/assistant/tools/route-e3626364434d521b.js +0 -1
  774. package/.next/static/chunks/app/api/auth/login/route-e3626364434d521b.js +0 -1
  775. package/.next/static/chunks/app/api/auth/logout/route-e3626364434d521b.js +0 -1
  776. package/.next/static/chunks/app/api/auth/status/route-e3626364434d521b.js +0 -1
  777. package/.next/static/chunks/app/api/capabilities/route-e3626364434d521b.js +0 -1
  778. package/.next/static/chunks/app/api/daily-summary/route-e3626364434d521b.js +0 -1
  779. package/.next/static/chunks/app/api/daily-summary/status/route-e3626364434d521b.js +0 -1
  780. package/.next/static/chunks/app/api/external-apps/[id]/health/route-e3626364434d521b.js +0 -1
  781. package/.next/static/chunks/app/api/external-apps/[id]/route-e3626364434d521b.js +0 -1
  782. package/.next/static/chunks/app/api/external-apps/route-e3626364434d521b.js +0 -1
  783. package/.next/static/chunks/app/api/fs/browse/route-e3626364434d521b.js +0 -1
  784. package/.next/static/chunks/app/api/fs/recent-paths/route-e3626364434d521b.js +0 -1
  785. package/.next/static/chunks/app/api/hooks/agent-event/route-e3626364434d521b.js +0 -1
  786. package/.next/static/chunks/app/api/hooks/claude-done/route-e3626364434d521b.js +0 -1
  787. package/.next/static/chunks/app/api/hooks/permission-request/route-e3626364434d521b.js +0 -1
  788. package/.next/static/chunks/app/api/metrics/vibe/route-e3626364434d521b.js +0 -1
  789. package/.next/static/chunks/app/api/ollama/models/route-e3626364434d521b.js +0 -1
  790. package/.next/static/chunks/app/api/push/escalation/route-e3626364434d521b.js +0 -1
  791. package/.next/static/chunks/app/api/push/subscriptions/route-e3626364434d521b.js +0 -1
  792. package/.next/static/chunks/app/api/push/vapid/route-e3626364434d521b.js +0 -1
  793. package/.next/static/chunks/app/api/remote/pair/route-e3626364434d521b.js +0 -1
  794. package/.next/static/chunks/app/api/repositories/[id]/route-e3626364434d521b.js +0 -1
  795. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
  796. package/.next/static/chunks/app/api/repositories/[id]/todos/route-e3626364434d521b.js +0 -1
  797. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-e3626364434d521b.js +0 -1
  798. package/.next/static/chunks/app/api/repositories/clone/route-e3626364434d521b.js +0 -1
  799. package/.next/static/chunks/app/api/repositories/excluded/route-e3626364434d521b.js +0 -1
  800. package/.next/static/chunks/app/api/repositories/restore/route-e3626364434d521b.js +0 -1
  801. package/.next/static/chunks/app/api/repositories/route-e3626364434d521b.js +0 -1
  802. package/.next/static/chunks/app/api/repositories/scan/route-e3626364434d521b.js +0 -1
  803. package/.next/static/chunks/app/api/repositories/sync/route-e3626364434d521b.js +0 -1
  804. package/.next/static/chunks/app/api/repositories/validate-path/route-e3626364434d521b.js +0 -1
  805. package/.next/static/chunks/app/api/sidebar/group-order/route-e3626364434d521b.js +0 -1
  806. package/.next/static/chunks/app/api/skills/[id]/route-e3626364434d521b.js +0 -1
  807. package/.next/static/chunks/app/api/skills/installations/route-e3626364434d521b.js +0 -1
  808. package/.next/static/chunks/app/api/skills/operations/route-e3626364434d521b.js +0 -1
  809. package/.next/static/chunks/app/api/skills/reindex/route-e3626364434d521b.js +0 -1
  810. package/.next/static/chunks/app/api/skills/route-e3626364434d521b.js +0 -1
  811. package/.next/static/chunks/app/api/slash-commands/route-e3626364434d521b.js +0 -1
  812. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-e3626364434d521b.js +0 -1
  813. package/.next/static/chunks/app/api/tasks/[taskId]/route-e3626364434d521b.js +0 -1
  814. package/.next/static/chunks/app/api/templates/[id]/route-e3626364434d521b.js +0 -1
  815. package/.next/static/chunks/app/api/templates/route-e3626364434d521b.js +0 -1
  816. package/.next/static/chunks/app/api/todos/route-e3626364434d521b.js +0 -1
  817. package/.next/static/chunks/app/api/verification/runs/[runId]/route-e3626364434d521b.js +0 -1
  818. package/.next/static/chunks/app/api/verification/runs/route-e3626364434d521b.js +0 -1
  819. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-e3626364434d521b.js +0 -1
  820. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-e3626364434d521b.js +0 -1
  821. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-e3626364434d521b.js +0 -1
  822. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-e3626364434d521b.js +0 -1
  823. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-e3626364434d521b.js +0 -1
  824. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-e3626364434d521b.js +0 -1
  825. package/.next/static/chunks/app/api/worktrees/[id]/env/route-e3626364434d521b.js +0 -1
  826. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-e3626364434d521b.js +0 -1
  827. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-e3626364434d521b.js +0 -1
  828. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-e3626364434d521b.js +0 -1
  829. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-e3626364434d521b.js +0 -1
  830. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-e3626364434d521b.js +0 -1
  831. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-e3626364434d521b.js +0 -1
  832. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-e3626364434d521b.js +0 -1
  833. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-e3626364434d521b.js +0 -1
  834. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-e3626364434d521b.js +0 -1
  835. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-e3626364434d521b.js +0 -1
  836. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-e3626364434d521b.js +0 -1
  837. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-e3626364434d521b.js +0 -1
  838. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-e3626364434d521b.js +0 -1
  839. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-e3626364434d521b.js +0 -1
  840. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-e3626364434d521b.js +0 -1
  841. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-e3626364434d521b.js +0 -1
  842. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-e3626364434d521b.js +0 -1
  843. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-e3626364434d521b.js +0 -1
  844. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-e3626364434d521b.js +0 -1
  845. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-e3626364434d521b.js +0 -1
  846. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-e3626364434d521b.js +0 -1
  847. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-e3626364434d521b.js +0 -1
  848. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-e3626364434d521b.js +0 -1
  849. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-e3626364434d521b.js +0 -1
  850. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-e3626364434d521b.js +0 -1
  851. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-e3626364434d521b.js +0 -1
  852. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-e3626364434d521b.js +0 -1
  853. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-e3626364434d521b.js +0 -1
  854. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-e3626364434d521b.js +0 -1
  855. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-e3626364434d521b.js +0 -1
  856. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-e3626364434d521b.js +0 -1
  857. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-e3626364434d521b.js +0 -1
  858. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-e3626364434d521b.js +0 -1
  859. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-e3626364434d521b.js +0 -1
  860. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-e3626364434d521b.js +0 -1
  861. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-e3626364434d521b.js +0 -1
  862. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-e3626364434d521b.js +0 -1
  863. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-e3626364434d521b.js +0 -1
  864. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-e3626364434d521b.js +0 -1
  865. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-e3626364434d521b.js +0 -1
  866. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-e3626364434d521b.js +0 -1
  867. package/.next/static/chunks/app/api/worktrees/[id]/route-e3626364434d521b.js +0 -1
  868. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-e3626364434d521b.js +0 -1
  869. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-e3626364434d521b.js +0 -1
  870. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-e3626364434d521b.js +0 -1
  871. package/.next/static/chunks/app/api/worktrees/[id]/search/route-e3626364434d521b.js +0 -1
  872. package/.next/static/chunks/app/api/worktrees/[id]/send/route-e3626364434d521b.js +0 -1
  873. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-e3626364434d521b.js +0 -1
  874. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-e3626364434d521b.js +0 -1
  875. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-e3626364434d521b.js +0 -1
  876. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-e3626364434d521b.js +0 -1
  877. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-e3626364434d521b.js +0 -1
  878. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-e3626364434d521b.js +0 -1
  879. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-e3626364434d521b.js +0 -1
  880. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-e3626364434d521b.js +0 -1
  881. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-e3626364434d521b.js +0 -1
  882. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-e3626364434d521b.js +0 -1
  883. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-e3626364434d521b.js +0 -1
  884. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-e3626364434d521b.js +0 -1
  885. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-e3626364434d521b.js +0 -1
  886. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-e3626364434d521b.js +0 -1
  887. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-e3626364434d521b.js +0 -1
  888. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
  889. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-e3626364434d521b.js +0 -1
  890. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-e3626364434d521b.js +0 -1
  891. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-e3626364434d521b.js +0 -1
  892. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-e3626364434d521b.js +0 -1
  893. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-e3626364434d521b.js +0 -1
  894. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-e3626364434d521b.js +0 -1
  895. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-e3626364434d521b.js +0 -1
  896. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-e3626364434d521b.js +0 -1
  897. package/.next/static/chunks/app/api/worktrees/route-e3626364434d521b.js +0 -1
  898. package/.next/static/chunks/app/manifest.webmanifest/route-e3626364434d521b.js +0 -1
  899. package/.next/static/chunks/app/more/page-03867ab635d197c7.js +0 -1
  900. package/.next/static/chunks/app/proxy/[...path]/route-e3626364434d521b.js +0 -1
  901. package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +0 -1
  902. package/.next/static/chunks/app/sessions/page-4d5382b257077c14.js +0 -1
  903. package/.next/static/chunks/app/worktrees/[id]/layout-e3626364434d521b.js +0 -1
  904. package/.next/static/chunks/app/worktrees/[id]/page-c07b23b6ca58091c.js +0 -1
  905. package/.next/static/css/b6990f889f4f9515.css +0 -1
  906. package/.next/static/uulKcSOgyxChTo4SipUSF/_buildManifest.js +0 -1
  907. /package/.next/static/{uulKcSOgyxChTo4SipUSF → 0YoRrahue4Vchxg1z83IQ}/_ssgManifest.js +0 -0
@@ -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
+ }
@@ -24,6 +24,7 @@ const path_1 = __importDefault(require("path"));
24
24
  const worktree_id_1 = require("./worktree-id");
25
25
  const db_1 = require("../../lib/db");
26
26
  const logger_1 = require("../../lib/logger");
27
+ const agents_config_1 = require("../../lib/repo-config/agents-config");
27
28
  const logger = (0, logger_1.createLogger)('worktrees');
28
29
  /**
29
30
  * ID minting lives in `worktree-id.ts` — a module that imports nothing but
@@ -186,6 +187,15 @@ async function scanWorktrees(rootDir) {
186
187
  // Get repository name from path
187
188
  const repositoryPath = path_1.default.resolve(rootDir);
188
189
  const repositoryName = path_1.default.basename(repositoryPath);
190
+ // Issue #2066: this is the "read it at sync" the repository-level agent
191
+ // declaration is specified against. Doing it here rather than lazily in
192
+ // `getWorktrees()` is what keeps the file off the sidebar's polled path
193
+ // (#1913's no-filesystem-probe-on-a-hot-path rule), and it is also what
194
+ // makes a broken `.commandmate/agents.yaml` warn once per sync instead of
195
+ // once per poll — the refusal is cached alongside an accepted value.
196
+ // Deliberately after the `git worktree list` above succeeded: a directory
197
+ // that is not a repository has no declaration worth reading.
198
+ (0, agents_config_1.refreshRepoAgentsConfig)(repositoryPath);
189
199
  // Filter and validate worktree paths
190
200
  return parsed
191
201
  .map((wt) => {
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ /**
3
+ * Loader for `.commandmate/agents.yaml` — a repository's own declaration of
4
+ * which agents its worktrees start with (Issue #2066).
5
+ *
6
+ * ## Why a file, and why not a key in `CMATE.md`
7
+ *
8
+ * `CMATE.md` already carries per-worktree schedule rows, so it was the obvious
9
+ * alternative. It is the wrong home for this one:
10
+ *
11
+ * - **Scope.** `CMATE.md` is read from a *worktree* root (`cmate-parser.ts`
12
+ * resolves it under the worktree directory and refuses paths outside it).
13
+ * This declaration is a property of the **repository**, and it has to be
14
+ * readable *before* a worktree's roster exists — that is the whole point.
15
+ * - **Grammar.** `CMATE.md` is a Markdown *table* parser: every value is a
16
+ * cell, and an ordered list with an optional primary would have to be
17
+ * encoded into one. `.commandmate/verify.yaml` and `.commandmate/tasks/*.yaml`
18
+ * already establish YAML as the shape for machine-read declarations, and
19
+ * `validateAgentsPair()` wants a real list.
20
+ * - **Blast radius.** `parseCmateConfig()` is on the schedule execution path.
21
+ * Adding a key there means every schedule read re-validates agent ids, and a
22
+ * malformed agents key becomes a way to disturb scheduling.
23
+ *
24
+ * So: a new file, next to the two declarations that already live in
25
+ * `.commandmate/`, following `verify.yaml`'s closed-key-set conventions.
26
+ *
27
+ * ## Shape
28
+ *
29
+ * ```yaml
30
+ * version: 1 # optional; must be 1 when present
31
+ * agents: [codex, claude]
32
+ * primary: claude # optional; must be one of `agents`
33
+ * ```
34
+ *
35
+ * ## Fail-open
36
+ *
37
+ * Nothing here throws. A file that does not parse, declares an unknown key, or
38
+ * carries a list `validateAgentsPair()` rejects produces a WARNING and `null`,
39
+ * and `resolveSelectedAgents()` then falls through to `app_settings` and finally
40
+ * to the compiled-in constant. A repository must not be able to blank every
41
+ * sidebar tab strip by committing a typo.
42
+ *
43
+ * ## Why the read is cached, and why the cache is not optional
44
+ *
45
+ * `getWorktrees()` runs on every sidebar poll. Issue #1913 made "no filesystem
46
+ * probe on a hot path" a rule, restated by #2065 in
47
+ * `src/config/installed-agents-cache.ts` as "getWorktrees() must not grow a
48
+ * filesystem probe". This layer is inherently file-backed, so the rule is
49
+ * honoured the way the Issue asks for — **read at sync** — plus a TTL so the
50
+ * answer is still self-healing:
51
+ *
52
+ * - {@link refreshRepoAgentsConfig} is called from `scanWorktrees()`, i.e. once
53
+ * per repository per sync. That is the read the Issue specifies.
54
+ * - {@link getRepoDefaultSelectedAgents} serves memory. It touches the disk
55
+ * only on a cold miss (a server restarted since the last sync — the rows in
56
+ * SQLite outlive the process, so "scanned at least once in this process" is
57
+ * not a fact one may assume) or after {@link REPO_AGENTS_CACHE_TTL_MS}.
58
+ *
59
+ * The resulting worst case is one small `readFileSync` per repository per
60
+ * minute, bounded by the number of configured repositories — not per worktree,
61
+ * and not per poll.
62
+ *
63
+ * Server-only: reads from disk, so import this from API routes / CLI / DB
64
+ * helpers, never from a client component.
65
+ */
66
+ Object.defineProperty(exports, "__esModule", { value: true });
67
+ exports.MAX_REPO_AGENTS_CONFIG_BYTES = exports.REPO_AGENTS_CACHE_TTL_MS = exports.REPO_AGENTS_CONFIG_KEYS = exports.REPO_AGENTS_CONFIG_RELATIVE_PATH = void 0;
68
+ exports.parseRepoAgentsConfig = parseRepoAgentsConfig;
69
+ exports.loadRepoAgentsConfig = loadRepoAgentsConfig;
70
+ exports.refreshRepoAgentsConfig = refreshRepoAgentsConfig;
71
+ exports.getRepoDefaultSelectedAgents = getRepoDefaultSelectedAgents;
72
+ exports.clearRepoAgentsConfigCache = clearRepoAgentsConfigCache;
73
+ const fs_1 = require("fs");
74
+ const path_1 = require("path");
75
+ const yaml_1 = require("yaml");
76
+ const logger_1 = require("../../lib/logger");
77
+ const selected_agents_validator_1 = require("../../lib/selected-agents-validator");
78
+ const logger = (0, logger_1.createLogger)('repo-agents-config');
79
+ /** Path of the declaration, relative to the repository root. */
80
+ exports.REPO_AGENTS_CONFIG_RELATIVE_PATH = '.commandmate/agents.yaml';
81
+ /**
82
+ * Top-level keys v1 accepts. Closed, like `verify.yaml`'s: a key nobody reads is
83
+ * indistinguishable from a misspelled key that was meant to be read, and the
84
+ * misspelling is the case worth catching.
85
+ */
86
+ exports.REPO_AGENTS_CONFIG_KEYS = ['version', 'agents', 'primary'];
87
+ /**
88
+ * How long one parsed declaration is reused before the disk is consulted again.
89
+ *
90
+ * 60s is chosen against the user's loop: edit `agents.yaml`, switch back to the
91
+ * browser, look at a worktree that has no roster yet. Pressing the sync button
92
+ * (which calls {@link refreshRepoAgentsConfig}) makes it immediate; this is the
93
+ * floor for someone who does not.
94
+ */
95
+ exports.REPO_AGENTS_CACHE_TTL_MS = 60_000;
96
+ /** Largest declaration read into memory. A declaration is a few hundred bytes. */
97
+ exports.MAX_REPO_AGENTS_CONFIG_BYTES = 64 * 1024;
98
+ const cache = new Map();
99
+ /**
100
+ * Render an untrusted value for a log line (R4-005, the same concern
101
+ * `parseSelectedAgents()` documents).
102
+ *
103
+ * A repository file is attacker-adjacent input on a shared machine: ANSI escapes
104
+ * and newlines in it would otherwise reach a terminal that is tailing the server
105
+ * log and forge log lines there.
106
+ */
107
+ function forLog(value, limit = 120) {
108
+ const text = typeof value === 'string'
109
+ ? value
110
+ : Array.isArray(value)
111
+ ? 'a list'
112
+ : value === null
113
+ ? 'null'
114
+ : typeof value === 'object'
115
+ ? 'a mapping'
116
+ : String(value);
117
+ const stripped = text.replace(/[\u0000-\u001F\u007F-\u009F]/g, ' ');
118
+ return stripped.length > limit ? `${stripped.slice(0, limit)}...` : stripped;
119
+ }
120
+ function isMapping(value) {
121
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
122
+ }
123
+ /**
124
+ * Parse a declaration's text into an ordered agent list.
125
+ *
126
+ * Exported so the rules can be tested without a filesystem, and so a future
127
+ * surface that already holds the text (a repository settings screen previewing
128
+ * an upload) can validate it the same way.
129
+ *
130
+ * @param raw - File contents
131
+ * @param source - Path used in warning messages
132
+ * @returns Ordered agents (`[0]` is the primary), or null when unusable
133
+ */
134
+ function parseRepoAgentsConfig(raw, source) {
135
+ let document;
136
+ try {
137
+ document = (0, yaml_1.parse)(raw);
138
+ }
139
+ catch (error) {
140
+ logger.warn('repo-agents:yaml-parse-failed', {
141
+ source,
142
+ error: forLog(error.message),
143
+ });
144
+ return null;
145
+ }
146
+ // An empty file parses to null. Treat it as "this repository declares
147
+ // nothing", which is the same answer as having no file at all — and say so at
148
+ // debug level rather than warn, because it is not a mistake worth shouting at.
149
+ if (document === null || document === undefined) {
150
+ logger.debug('repo-agents:empty', { source });
151
+ return null;
152
+ }
153
+ if (!isMapping(document)) {
154
+ logger.warn('repo-agents:not-a-mapping', { source, got: forLog(document) });
155
+ return null;
156
+ }
157
+ const unknownKeys = Object.keys(document).filter((key) => !exports.REPO_AGENTS_CONFIG_KEYS.includes(key));
158
+ if (unknownKeys.length > 0) {
159
+ logger.warn('repo-agents:unknown-keys', {
160
+ source,
161
+ keys: unknownKeys.map((key) => forLog(key, 40)),
162
+ });
163
+ return null;
164
+ }
165
+ if (document.version !== undefined && document.version !== null) {
166
+ const version = typeof document.version === 'number'
167
+ ? document.version
168
+ : typeof document.version === 'string' && /^\d+$/.test(document.version)
169
+ ? Number(document.version)
170
+ : null;
171
+ if (version !== 1) {
172
+ logger.warn('repo-agents:unsupported-version', {
173
+ source,
174
+ got: forLog(document.version),
175
+ });
176
+ return null;
177
+ }
178
+ }
179
+ if (!Array.isArray(document.agents)) {
180
+ logger.warn('repo-agents:agents-not-a-list', {
181
+ source,
182
+ got: forLog(document.agents),
183
+ });
184
+ return null;
185
+ }
186
+ // The shared validator (Issue #2066 requirement 3): 2-6 unique ids drawn from
187
+ // CLI_TOOL_IDS, exactly what `app_settings` and the API input are held to.
188
+ const validated = (0, selected_agents_validator_1.validateAgentsPair)(document.agents);
189
+ if (!validated.valid) {
190
+ logger.warn('repo-agents:invalid-agents', {
191
+ source,
192
+ error: validated.error,
193
+ got: document.agents.map((entry) => forLog(entry, 40)),
194
+ });
195
+ return null;
196
+ }
197
+ const agents = validated.value;
198
+ if (document.primary === undefined || document.primary === null) {
199
+ return agents;
200
+ }
201
+ if (typeof document.primary !== 'string' || !agents.includes(document.primary)) {
202
+ // Deliberately falls through rather than ignoring the key: `primary` exists
203
+ // to say which tab opens first, and quietly opening a different one is worse
204
+ // than falling back to a default the user can see is a default.
205
+ logger.warn('repo-agents:primary-not-in-agents', {
206
+ source,
207
+ got: forLog(document.primary, 40),
208
+ agents,
209
+ });
210
+ return null;
211
+ }
212
+ const primary = document.primary;
213
+ return [primary, ...agents.filter((id) => id !== primary)];
214
+ }
215
+ /**
216
+ * Read and parse `<repoPath>/.commandmate/agents.yaml`, bypassing the cache.
217
+ *
218
+ * @param repoPath - Repository root
219
+ * @returns Ordered agents, or null when the file is absent, unreadable or unusable
220
+ */
221
+ function loadRepoAgentsConfig(repoPath) {
222
+ const configPath = (0, path_1.join)(repoPath, exports.REPO_AGENTS_CONFIG_RELATIVE_PATH);
223
+ let raw;
224
+ try {
225
+ raw = (0, fs_1.readFileSync)(configPath, 'utf8');
226
+ }
227
+ catch (error) {
228
+ const code = error.code;
229
+ // The overwhelmingly common case: the repository has no declaration.
230
+ if (code === 'ENOENT' || code === 'ENOTDIR')
231
+ return null;
232
+ logger.warn('repo-agents:read-failed', {
233
+ source: configPath,
234
+ code,
235
+ error: forLog(error.message),
236
+ });
237
+ return null;
238
+ }
239
+ const bytes = Buffer.byteLength(raw, 'utf8');
240
+ if (bytes > exports.MAX_REPO_AGENTS_CONFIG_BYTES) {
241
+ logger.warn('repo-agents:too-large', {
242
+ source: configPath,
243
+ bytes,
244
+ limit: exports.MAX_REPO_AGENTS_CONFIG_BYTES,
245
+ });
246
+ return null;
247
+ }
248
+ return parseRepoAgentsConfig(raw, configPath);
249
+ }
250
+ /**
251
+ * Read the declaration from disk and store the answer, replacing whatever the
252
+ * cache held.
253
+ *
254
+ * This is the "read it at sync" the Issue asks for: `scanWorktrees()` calls it
255
+ * once per repository, so a broken file warns once per sync rather than once per
256
+ * sidebar poll (the negative answer is cached too, which is what keeps the
257
+ * warning from repeating).
258
+ *
259
+ * @param repoPath - Repository root
260
+ * @param now - Injectable clock (tests)
261
+ * @returns Ordered agents, or null when there is no usable declaration
262
+ */
263
+ function refreshRepoAgentsConfig(repoPath, now = Date.now()) {
264
+ const value = loadRepoAgentsConfig(repoPath);
265
+ cache.set(repoPath, { value, expiresAt: now + exports.REPO_AGENTS_CACHE_TTL_MS });
266
+ return value;
267
+ }
268
+ /**
269
+ * The `repo` layer of `resolveSelectedAgents()` for one repository.
270
+ *
271
+ * Serves memory; see the module header for why, and for the two cases that do
272
+ * reach the disk. Never throws.
273
+ *
274
+ * @param repoPath - Repository root; a falsy path (a worktree row with no
275
+ * `repository_path`) has no repository to ask and answers null
276
+ * @param now - Injectable clock (tests)
277
+ * @returns Ordered agents (`[0]` is the primary), or null when unset/invalid
278
+ */
279
+ function getRepoDefaultSelectedAgents(repoPath, now = Date.now()) {
280
+ if (!repoPath)
281
+ return null;
282
+ const entry = cache.get(repoPath);
283
+ if (entry && entry.expiresAt > now)
284
+ return entry.value;
285
+ return refreshRepoAgentsConfig(repoPath, now);
286
+ }
287
+ /**
288
+ * Drop cached declarations. Tests, and any surface that just rewrote one.
289
+ *
290
+ * @param repoPath - Only this repository when given; the whole cache otherwise
291
+ */
292
+ function clearRepoAgentsConfigCache(repoPath) {
293
+ if (repoPath === undefined) {
294
+ cache.clear();
295
+ return;
296
+ }
297
+ cache.delete(repoPath);
298
+ }