commandmate 0.22.2 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (841) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +383 -374
  3. package/.next/app-path-routes-manifest.json +16 -15
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/react-loadable-manifest.json +1 -1
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update-check/route.js +1 -1
  11. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  13. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  14. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  16. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  17. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/messages/route.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  20. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/assistant/session/route.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  23. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/assistant/start/route.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  26. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/assistant/terminal/route.js +3 -3
  28. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  29. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/assistant/tools/route.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  32. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/daily-summary/route.js +1 -1
  37. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  38. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  40. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  41. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  43. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  44. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  46. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  47. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/external-apps/route.js +1 -1
  49. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  50. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/fs/browse/route.js +1 -1
  52. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  53. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/fs/recent-paths/route.js +1 -1
  55. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  56. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  58. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  59. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  61. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  62. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  64. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  65. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/metrics/vibe/route.js +1 -1
  67. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  68. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/push/escalation/route.js +1 -0
  71. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -0
  72. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -0
  73. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  74. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  75. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/push/vapid/route.js +1 -1
  77. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  78. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  80. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  81. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  83. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  84. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  86. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  87. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  89. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  90. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/repositories/clone/route.js +1 -1
  92. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  93. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  95. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  96. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/repositories/restore/route.js +1 -1
  98. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  99. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/repositories/route.js +1 -1
  101. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  102. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/repositories/scan/route.js +1 -1
  104. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  105. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/repositories/sync/route.js +1 -1
  107. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  108. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  110. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  111. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  113. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  114. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/skills/installations/route.js +1 -1
  117. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  118. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/skills/operations/route.js +1 -1
  120. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  121. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/skills/reindex/route.js +1 -1
  123. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  124. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -4
  128. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  129. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/tasks/[taskId]/route.js +1 -4
  131. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  132. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/templates/[id]/route.js +1 -1
  134. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  135. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/templates/route.js +1 -1
  137. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  138. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/todos/route.js +1 -1
  140. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  141. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  143. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  144. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/verification/runs/route.js +1 -1
  146. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  147. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  150. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  153. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  156. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  158. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  159. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  162. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  165. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  167. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  171. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  243. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  246. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  249. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  252. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +6 -6
  254. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  258. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  261. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  264. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  267. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  270. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  273. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  275. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  276. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  279. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  281. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  282. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  285. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  288. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  291. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  294. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  296. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  297. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  299. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  300. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  303. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  304. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  305. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  306. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  308. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  309. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  311. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  312. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  314. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  315. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  316. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  317. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  318. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  319. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  320. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  321. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  322. package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
  323. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  324. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  326. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  327. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  328. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  329. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  330. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  331. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  332. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  333. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  334. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  335. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  336. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  337. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  338. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  339. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  340. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  341. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  342. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  343. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  344. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  345. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  346. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  347. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  348. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  349. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -4
  350. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  351. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  352. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  353. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  354. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  355. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  356. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  357. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  358. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  359. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  360. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  361. package/.next/server/app/api/worktrees/route.js +1 -1
  362. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  363. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  364. package/.next/server/app/chat/page.js +2 -2
  365. package/.next/server/app/chat/page.js.nft.json +1 -1
  366. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  367. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  368. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  369. package/.next/server/app/more/page.js +2 -2
  370. package/.next/server/app/more/page.js.nft.json +1 -1
  371. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  372. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  373. package/.next/server/app/page.js +1 -1
  374. package/.next/server/app/page.js.nft.json +1 -1
  375. package/.next/server/app/page_client-reference-manifest.js +1 -1
  376. package/.next/server/app/proxy/[...path]/route.js +1 -1
  377. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  378. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  379. package/.next/server/app/repositories/page.js +2 -2
  380. package/.next/server/app/repositories/page.js.nft.json +1 -1
  381. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  382. package/.next/server/app/review/page.js +1 -1
  383. package/.next/server/app/review/page.js.nft.json +1 -1
  384. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  385. package/.next/server/app/sessions/page.js +1 -1
  386. package/.next/server/app/sessions/page.js.nft.json +1 -1
  387. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  388. package/.next/server/app/skills/[skillId]/page.js +2 -2
  389. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  390. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  391. package/.next/server/app/skills/installed/page.js +2 -2
  392. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  393. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  394. package/.next/server/app/skills/page.js +1 -1
  395. package/.next/server/app/skills/page.js.nft.json +1 -1
  396. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  397. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
  398. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  399. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  400. package/.next/server/app/worktrees/[id]/page.js +6 -6
  401. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  402. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  403. package/.next/server/app/worktrees/[id]/terminal/page.js +1 -1
  404. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  405. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  406. package/.next/server/app-paths-manifest.json +16 -15
  407. package/.next/server/chunks/1029.js +1 -1
  408. package/.next/server/chunks/1068.js +1 -1
  409. package/.next/server/chunks/1296.js +1 -1
  410. package/.next/server/chunks/1366.js +1 -1
  411. package/.next/server/chunks/1601.js +7 -0
  412. package/.next/server/chunks/1825.js +1 -1
  413. package/.next/server/chunks/2119.js +1 -1
  414. package/.next/server/chunks/2404.js +1 -1
  415. package/.next/server/chunks/2445.js +1 -1
  416. package/.next/server/chunks/2546.js +1 -1
  417. package/.next/server/chunks/3241.js +1 -0
  418. package/.next/server/chunks/3417.js +1 -1
  419. package/.next/server/chunks/3451.js +1 -1
  420. package/.next/server/chunks/3480.js +1 -1
  421. package/.next/server/chunks/3543.js +1 -1
  422. package/.next/server/chunks/3945.js +1 -1
  423. package/.next/server/chunks/406.js +10 -6
  424. package/.next/server/chunks/4393.js +1 -0
  425. package/.next/server/chunks/4444.js +1 -1
  426. package/.next/server/chunks/4455.js +1 -0
  427. package/.next/server/chunks/5164.js +1 -0
  428. package/.next/server/chunks/5959.js +5 -6
  429. package/.next/server/chunks/5998.js +2 -13
  430. package/.next/server/chunks/6130.js +1 -1
  431. package/.next/server/chunks/6159.js +1 -1
  432. package/.next/server/chunks/6274.js +3 -3
  433. package/.next/server/chunks/6401.js +1 -1
  434. package/.next/server/chunks/6781.js +1 -0
  435. package/.next/server/chunks/7458.js +6 -0
  436. package/.next/server/chunks/{3753.js → 7970.js} +57 -32
  437. package/.next/server/chunks/8536.js +1 -1
  438. package/.next/server/chunks/880.js +21 -0
  439. package/.next/server/chunks/8807.js +250 -192
  440. package/.next/server/chunks/9058.js +1 -1
  441. package/.next/server/chunks/9067.js +1 -1
  442. package/.next/server/chunks/9123.js +8 -8
  443. package/.next/server/chunks/9358.js +1 -1
  444. package/.next/server/chunks/9360.js +1 -1
  445. package/.next/server/chunks/9373.js +3 -3
  446. package/.next/server/chunks/9687.js +2 -2
  447. package/.next/server/middleware-build-manifest.js +1 -1
  448. package/.next/server/middleware-manifest.json +5 -5
  449. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  450. package/.next/server/pages/500.html +1 -1
  451. package/.next/server/server-reference-manifest.json +1 -1
  452. package/.next/server/src/middleware.js.map +1 -1
  453. package/.next/static/chunks/4322-dfd5a7119b5ba4fc.js +1 -0
  454. package/.next/static/chunks/{4974-eaf66770bfa9dea0.js → 4974-35592ec312322124.js} +1 -1
  455. package/.next/static/chunks/5229-0610b4e3288e777d.js +1 -0
  456. package/.next/static/chunks/6381-18a6a02a94d00d76.js +1 -0
  457. package/.next/static/chunks/7229.7f0f5a7032b612b4.js +1 -0
  458. package/.next/static/chunks/{744-fa8c0ae444c8338c.js → 744-3ad06d8c8ca482fc.js} +1 -1
  459. package/.next/static/chunks/app/api/app/update/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
  460. package/.next/static/chunks/app/api/app/update-check/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
  461. package/.next/static/chunks/app/api/assistant/conversation/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
  462. package/.next/static/chunks/app/api/assistant/current-output/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
  463. package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +1 -0
  464. package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +1 -0
  465. package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +1 -0
  466. package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +1 -0
  467. package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +1 -0
  468. package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +1 -0
  469. package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +1 -0
  470. package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +1 -0
  471. package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +1 -0
  472. package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +1 -0
  473. package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +1 -0
  474. package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +1 -0
  475. package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +1 -0
  476. package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +1 -0
  477. package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +1 -0
  478. package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +1 -0
  479. package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +1 -0
  480. package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +1 -0
  481. package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +1 -0
  482. package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +1 -0
  483. package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +1 -0
  484. package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +1 -0
  485. package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +1 -0
  486. package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +1 -0
  487. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +1 -0
  488. package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +1 -0
  489. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +1 -0
  490. package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +1 -0
  491. package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +1 -0
  492. package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +1 -0
  493. package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +1 -0
  494. package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +1 -0
  495. package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +1 -0
  496. package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +1 -0
  497. package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +1 -0
  498. package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +1 -0
  499. package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +1 -0
  500. package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +1 -0
  501. package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +1 -0
  502. package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +1 -0
  503. package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +1 -0
  504. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +1 -0
  505. package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +1 -0
  506. package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +1 -0
  507. package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +1 -0
  508. package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +1 -0
  509. package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +1 -0
  510. package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +1 -0
  511. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +1 -0
  512. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +1 -0
  513. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +1 -0
  514. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +1 -0
  515. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +1 -0
  516. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +1 -0
  517. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +1 -0
  518. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +1 -0
  519. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +1 -0
  520. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +1 -0
  521. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +1 -0
  522. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +1 -0
  523. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +1 -0
  524. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +1 -0
  525. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +1 -0
  526. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +1 -0
  527. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +1 -0
  528. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +1 -0
  529. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +1 -0
  530. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +1 -0
  531. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +1 -0
  532. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +1 -0
  533. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +1 -0
  534. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +1 -0
  535. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +1 -0
  536. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +1 -0
  537. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +1 -0
  538. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +1 -0
  539. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +1 -0
  540. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +1 -0
  541. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +1 -0
  542. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +1 -0
  543. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +1 -0
  544. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +1 -0
  545. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +1 -0
  546. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +1 -0
  547. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +1 -0
  548. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +1 -0
  549. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +1 -0
  550. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +1 -0
  551. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +1 -0
  552. package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +1 -0
  553. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +1 -0
  554. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +1 -0
  555. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +1 -0
  556. package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +1 -0
  557. package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +1 -0
  558. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +1 -0
  559. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +1 -0
  560. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +1 -0
  561. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +1 -0
  562. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +1 -0
  563. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +1 -0
  564. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +1 -0
  565. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +1 -0
  566. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +1 -0
  567. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +1 -0
  568. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +1 -0
  569. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +1 -0
  570. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +1 -0
  571. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +1 -0
  572. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +1 -0
  573. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +1 -0
  574. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +1 -0
  575. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +1 -0
  576. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +1 -0
  577. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +1 -0
  578. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +1 -0
  579. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +1 -0
  580. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +1 -0
  581. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +1 -0
  582. package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +1 -0
  583. package/.next/static/chunks/app/chat/page-15d13fc024d78f5d.js +1 -0
  584. package/.next/static/chunks/app/layout-6a26ea22d5cf03dc.js +1 -0
  585. package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +1 -0
  586. package/.next/static/chunks/app/more/page-b8ba537baeac8d5b.js +1 -0
  587. package/.next/static/chunks/app/page-afc64708362f31e5.js +1 -0
  588. package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +1 -0
  589. package/.next/static/chunks/app/repositories/page-3469dacb6be7842f.js +1 -0
  590. package/.next/static/chunks/app/review/page-2d9cb7e068f8f35a.js +1 -0
  591. package/.next/static/chunks/app/sessions/page-7470c2bfd89e0df9.js +1 -0
  592. package/.next/static/chunks/app/skills/[skillId]/page-5e24481162f7ea78.js +1 -0
  593. package/.next/static/chunks/app/skills/installed/page-efd2d710a27f9735.js +1 -0
  594. package/.next/static/chunks/app/skills/page-0498adfc6e48684b.js +1 -0
  595. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9ddcb224594f620f.js +1 -0
  596. package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +1 -0
  597. package/.next/static/chunks/app/worktrees/[id]/page-e611d30e47989e5d.js +1 -0
  598. package/.next/static/chunks/{webpack-180bebdee221b6f4.js → webpack-3534d858912a6c92.js} +1 -1
  599. package/.next/static/css/3ac44cfc082d02ad.css +1 -0
  600. package/.next/static/smu4mnL7qMf8w38n9dQJE/_buildManifest.js +1 -0
  601. package/.next/trace +12 -12
  602. package/.next/types/app/api/push/escalation/route.ts +347 -0
  603. package/.next/types/routes.d.ts +2 -1
  604. package/.next/types/validator.ts +9 -0
  605. package/dist/cli/commands/capture.d.ts.map +1 -1
  606. package/dist/cli/commands/capture.js +6 -0
  607. package/dist/cli/commands/instances.d.ts.map +1 -1
  608. package/dist/cli/commands/instances.js +19 -1
  609. package/dist/cli/commands/task.d.ts.map +1 -1
  610. package/dist/cli/commands/task.js +6 -0
  611. package/dist/cli/commands/verify.js +6 -1
  612. package/dist/cli/types/api-responses.d.ts +46 -0
  613. package/dist/cli/types/api-responses.d.ts.map +1 -1
  614. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  615. package/dist/cli/utils/verify-runner.js +17 -1
  616. package/dist/server/locales/en/notifications.json +20 -1
  617. package/dist/server/locales/ja/notifications.json +20 -1
  618. package/dist/server/server.js +23 -0
  619. package/dist/server/src/config/log-config.js +10 -1
  620. package/dist/server/src/config/safe-directory.js +103 -0
  621. package/dist/server/src/config/system-directories.js +74 -9
  622. package/dist/server/src/lib/cli-tools/antigravity.js +19 -2
  623. package/dist/server/src/lib/cli-tools/codex.js +95 -1
  624. package/dist/server/src/lib/cli-tools/copilot.js +30 -1
  625. package/dist/server/src/lib/cli-tools/gemini.js +28 -2
  626. package/dist/server/src/lib/cli-tools/opencode.js +51 -2
  627. package/dist/server/src/lib/db/db.js +2 -1
  628. package/dist/server/src/lib/db/migrations/index.js +2 -0
  629. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  630. package/dist/server/src/lib/db/migrations/v56-gate-result-source.js +58 -0
  631. package/dist/server/src/lib/db/verification-db.js +26 -6
  632. package/dist/server/src/lib/detection/model-info-extractor.js +384 -0
  633. package/dist/server/src/lib/git/git-default-branch.js +59 -0
  634. package/dist/server/src/lib/hooks/agent-event-service.js +205 -0
  635. package/dist/server/src/lib/hooks/agent-event-types.js +7 -86
  636. package/dist/server/src/lib/hooks/hook-settings-generator.js +26 -11
  637. package/dist/server/src/lib/hooks/permission-decision-service.js +269 -0
  638. package/dist/server/src/lib/hooks/sources/abstain.js +78 -0
  639. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +372 -0
  640. package/dist/server/src/lib/hooks/sources/antigravity/source.js +229 -0
  641. package/dist/server/src/lib/hooks/sources/antigravity/tool-id.js +16 -0
  642. package/dist/server/src/lib/hooks/sources/claude/source.js +150 -0
  643. package/dist/server/src/lib/hooks/sources/claude/tool-id.js +18 -0
  644. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +465 -0
  645. package/dist/server/src/lib/hooks/sources/codex/source.js +143 -0
  646. package/dist/server/src/lib/hooks/sources/codex/tool-id.js +15 -0
  647. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +473 -0
  648. package/dist/server/src/lib/hooks/sources/copilot/source.js +210 -0
  649. package/dist/server/src/lib/hooks/sources/copilot/tool-id.js +15 -0
  650. package/dist/server/src/lib/hooks/sources/define-source.js +177 -0
  651. package/dist/server/src/lib/hooks/sources/event-mapper.js +177 -0
  652. package/dist/server/src/lib/hooks/sources/gemini/event-vocabulary.js +102 -0
  653. package/dist/server/src/lib/hooks/sources/gemini/settings-generator.js +315 -0
  654. package/dist/server/src/lib/hooks/sources/gemini/shared-config-tree.js +103 -0
  655. package/dist/server/src/lib/hooks/sources/gemini/source.js +151 -0
  656. package/dist/server/src/lib/hooks/sources/gemini/tool-id.js +17 -0
  657. package/dist/server/src/lib/hooks/sources/hook-event-vocabulary.js +111 -0
  658. package/dist/server/src/lib/hooks/sources/index.js +62 -0
  659. package/dist/server/src/lib/hooks/sources/legacy-relay.js +84 -0
  660. package/dist/server/src/lib/hooks/sources/opencode/client.js +299 -0
  661. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +267 -0
  662. package/dist/server/src/lib/hooks/sources/opencode/mappers.js +176 -0
  663. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +189 -0
  664. package/dist/server/src/lib/hooks/sources/opencode/ports.js +295 -0
  665. package/dist/server/src/lib/hooks/sources/opencode/runtime.js +159 -0
  666. package/dist/server/src/lib/hooks/sources/opencode/source.js +253 -0
  667. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +422 -0
  668. package/dist/server/src/lib/hooks/sources/opencode/tool-id.js +14 -0
  669. package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +193 -0
  670. package/dist/server/src/lib/hooks/sources/pending-decisions.js +127 -0
  671. package/dist/server/src/lib/hooks/sources/registry.js +111 -0
  672. package/dist/server/src/lib/hooks/sources/types.js +46 -0
  673. package/dist/server/src/lib/polling/response-checker.js +47 -0
  674. package/dist/server/src/lib/push/escalation-settings.js +114 -0
  675. package/dist/server/src/lib/push/index.js +21 -1
  676. package/dist/server/src/lib/push/notification-dedup.js +35 -0
  677. package/dist/server/src/lib/push/push-sender.js +66 -7
  678. package/dist/server/src/lib/push/waiting-push-notifier.js +231 -0
  679. package/dist/server/src/lib/realtime/waiting-broadcast.js +93 -0
  680. package/dist/server/src/lib/session/agent-event-state.js +260 -0
  681. package/dist/server/src/lib/session/agent-session-lifecycle.js +82 -0
  682. package/dist/server/src/lib/session/claude-session.js +10 -3
  683. package/dist/server/src/lib/session/current-output-builder.js +24 -0
  684. package/dist/server/src/lib/session/next-action-helper.js +93 -0
  685. package/dist/server/src/lib/session/prompt-waiting-composition.js +38 -0
  686. package/dist/server/src/lib/session/waiting-episode-state.js +136 -0
  687. package/dist/server/src/lib/session/waiting-kind.js +59 -0
  688. package/dist/server/src/lib/tasks/contract-message.js +218 -0
  689. package/dist/server/src/lib/tasks/contract-parser.js +58 -12
  690. package/dist/server/src/lib/verification/env-clean-gate.js +320 -0
  691. package/dist/server/src/lib/verification/env-snapshot.js +474 -0
  692. package/dist/server/src/lib/verification/gate-runner.js +844 -0
  693. package/dist/server/src/lib/verification/scope-gate.js +402 -0
  694. package/dist/server/src/lib/verification/verify-config.js +314 -0
  695. package/dist/server/src/lib/ws-server.js +9 -0
  696. package/dist/server/src/types/sidebar.js +68 -0
  697. package/package.json +1 -1
  698. package/scripts/hooks/cmate-agent-event.sh +73 -3
  699. package/.next/server/chunks/6283.js +0 -1
  700. package/.next/server/chunks/646.js +0 -21
  701. package/.next/server/chunks/8856.js +0 -4
  702. package/.next/static/XpKfn5x6H-mtTaXI9yNmb/_buildManifest.js +0 -1
  703. package/.next/static/chunks/4560-0917ae2e6a0e5400.js +0 -1
  704. package/.next/static/chunks/6488-53a3e1d78e4fe8f7.js +0 -1
  705. package/.next/static/chunks/7229.edb331fb9fbafa27.js +0 -1
  706. package/.next/static/chunks/app/api/assistant/messages/route-973ec48531555712.js +0 -1
  707. package/.next/static/chunks/app/api/assistant/session/route-973ec48531555712.js +0 -1
  708. package/.next/static/chunks/app/api/assistant/start/route-973ec48531555712.js +0 -1
  709. package/.next/static/chunks/app/api/assistant/terminal/route-973ec48531555712.js +0 -1
  710. package/.next/static/chunks/app/api/assistant/tools/route-973ec48531555712.js +0 -1
  711. package/.next/static/chunks/app/api/auth/login/route-973ec48531555712.js +0 -1
  712. package/.next/static/chunks/app/api/auth/logout/route-973ec48531555712.js +0 -1
  713. package/.next/static/chunks/app/api/auth/status/route-973ec48531555712.js +0 -1
  714. package/.next/static/chunks/app/api/daily-summary/route-973ec48531555712.js +0 -1
  715. package/.next/static/chunks/app/api/daily-summary/status/route-973ec48531555712.js +0 -1
  716. package/.next/static/chunks/app/api/external-apps/[id]/health/route-973ec48531555712.js +0 -1
  717. package/.next/static/chunks/app/api/external-apps/[id]/route-973ec48531555712.js +0 -1
  718. package/.next/static/chunks/app/api/external-apps/route-973ec48531555712.js +0 -1
  719. package/.next/static/chunks/app/api/fs/browse/route-973ec48531555712.js +0 -1
  720. package/.next/static/chunks/app/api/fs/recent-paths/route-973ec48531555712.js +0 -1
  721. package/.next/static/chunks/app/api/hooks/agent-event/route-973ec48531555712.js +0 -1
  722. package/.next/static/chunks/app/api/hooks/claude-done/route-973ec48531555712.js +0 -1
  723. package/.next/static/chunks/app/api/hooks/permission-request/route-973ec48531555712.js +0 -1
  724. package/.next/static/chunks/app/api/metrics/vibe/route-973ec48531555712.js +0 -1
  725. package/.next/static/chunks/app/api/ollama/models/route-973ec48531555712.js +0 -1
  726. package/.next/static/chunks/app/api/push/subscriptions/route-973ec48531555712.js +0 -1
  727. package/.next/static/chunks/app/api/push/vapid/route-973ec48531555712.js +0 -1
  728. package/.next/static/chunks/app/api/repositories/[id]/route-973ec48531555712.js +0 -1
  729. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-973ec48531555712.js +0 -1
  730. package/.next/static/chunks/app/api/repositories/[id]/todos/route-973ec48531555712.js +0 -1
  731. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-973ec48531555712.js +0 -1
  732. package/.next/static/chunks/app/api/repositories/clone/route-973ec48531555712.js +0 -1
  733. package/.next/static/chunks/app/api/repositories/excluded/route-973ec48531555712.js +0 -1
  734. package/.next/static/chunks/app/api/repositories/restore/route-973ec48531555712.js +0 -1
  735. package/.next/static/chunks/app/api/repositories/route-973ec48531555712.js +0 -1
  736. package/.next/static/chunks/app/api/repositories/scan/route-973ec48531555712.js +0 -1
  737. package/.next/static/chunks/app/api/repositories/sync/route-973ec48531555712.js +0 -1
  738. package/.next/static/chunks/app/api/repositories/validate-path/route-973ec48531555712.js +0 -1
  739. package/.next/static/chunks/app/api/sidebar/group-order/route-973ec48531555712.js +0 -1
  740. package/.next/static/chunks/app/api/skills/[id]/route-973ec48531555712.js +0 -1
  741. package/.next/static/chunks/app/api/skills/installations/route-973ec48531555712.js +0 -1
  742. package/.next/static/chunks/app/api/skills/operations/route-973ec48531555712.js +0 -1
  743. package/.next/static/chunks/app/api/skills/reindex/route-973ec48531555712.js +0 -1
  744. package/.next/static/chunks/app/api/skills/route-973ec48531555712.js +0 -1
  745. package/.next/static/chunks/app/api/slash-commands/route-973ec48531555712.js +0 -1
  746. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-973ec48531555712.js +0 -1
  747. package/.next/static/chunks/app/api/tasks/[taskId]/route-973ec48531555712.js +0 -1
  748. package/.next/static/chunks/app/api/templates/[id]/route-973ec48531555712.js +0 -1
  749. package/.next/static/chunks/app/api/templates/route-973ec48531555712.js +0 -1
  750. package/.next/static/chunks/app/api/todos/route-973ec48531555712.js +0 -1
  751. package/.next/static/chunks/app/api/verification/runs/[runId]/route-973ec48531555712.js +0 -1
  752. package/.next/static/chunks/app/api/verification/runs/route-973ec48531555712.js +0 -1
  753. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-973ec48531555712.js +0 -1
  754. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-973ec48531555712.js +0 -1
  755. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-973ec48531555712.js +0 -1
  756. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-973ec48531555712.js +0 -1
  757. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-973ec48531555712.js +0 -1
  758. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-973ec48531555712.js +0 -1
  759. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-973ec48531555712.js +0 -1
  760. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-973ec48531555712.js +0 -1
  761. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-973ec48531555712.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-973ec48531555712.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-973ec48531555712.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-973ec48531555712.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-973ec48531555712.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-973ec48531555712.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-973ec48531555712.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-973ec48531555712.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-973ec48531555712.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-973ec48531555712.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-973ec48531555712.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-973ec48531555712.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-973ec48531555712.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-973ec48531555712.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-973ec48531555712.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-973ec48531555712.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-973ec48531555712.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-973ec48531555712.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-973ec48531555712.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-973ec48531555712.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-973ec48531555712.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-973ec48531555712.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-973ec48531555712.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-973ec48531555712.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-973ec48531555712.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-973ec48531555712.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-973ec48531555712.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-973ec48531555712.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-973ec48531555712.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-973ec48531555712.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-973ec48531555712.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-973ec48531555712.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-973ec48531555712.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/[id]/route-973ec48531555712.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-973ec48531555712.js +0 -1
  796. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-973ec48531555712.js +0 -1
  797. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-973ec48531555712.js +0 -1
  798. package/.next/static/chunks/app/api/worktrees/[id]/search/route-973ec48531555712.js +0 -1
  799. package/.next/static/chunks/app/api/worktrees/[id]/send/route-973ec48531555712.js +0 -1
  800. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-973ec48531555712.js +0 -1
  801. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-973ec48531555712.js +0 -1
  802. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-973ec48531555712.js +0 -1
  803. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-973ec48531555712.js +0 -1
  804. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-973ec48531555712.js +0 -1
  805. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-973ec48531555712.js +0 -1
  806. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-973ec48531555712.js +0 -1
  807. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-973ec48531555712.js +0 -1
  808. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-973ec48531555712.js +0 -1
  809. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-973ec48531555712.js +0 -1
  810. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-973ec48531555712.js +0 -1
  811. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-973ec48531555712.js +0 -1
  812. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-973ec48531555712.js +0 -1
  813. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-973ec48531555712.js +0 -1
  814. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-973ec48531555712.js +0 -1
  815. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-973ec48531555712.js +0 -1
  816. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-973ec48531555712.js +0 -1
  817. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-973ec48531555712.js +0 -1
  818. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-973ec48531555712.js +0 -1
  819. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-973ec48531555712.js +0 -1
  820. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-973ec48531555712.js +0 -1
  821. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-973ec48531555712.js +0 -1
  822. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-973ec48531555712.js +0 -1
  823. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-973ec48531555712.js +0 -1
  824. package/.next/static/chunks/app/api/worktrees/route-973ec48531555712.js +0 -1
  825. package/.next/static/chunks/app/chat/page-83a2238ab453afaa.js +0 -1
  826. package/.next/static/chunks/app/layout-86574192bd3c0e6b.js +0 -1
  827. package/.next/static/chunks/app/manifest.webmanifest/route-973ec48531555712.js +0 -1
  828. package/.next/static/chunks/app/more/page-1619018cac999bbc.js +0 -1
  829. package/.next/static/chunks/app/page-a34d26812f085b6c.js +0 -1
  830. package/.next/static/chunks/app/proxy/[...path]/route-973ec48531555712.js +0 -1
  831. package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +0 -1
  832. package/.next/static/chunks/app/review/page-b559bfb11c46931b.js +0 -1
  833. package/.next/static/chunks/app/sessions/page-3fa7e767d0ab3889.js +0 -1
  834. package/.next/static/chunks/app/skills/[skillId]/page-10d6f983e5f06ffb.js +0 -1
  835. package/.next/static/chunks/app/skills/installed/page-6641f95e6a6e5f9d.js +0 -1
  836. package/.next/static/chunks/app/skills/page-184f8e23e31a3667.js +0 -1
  837. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-6041d3c3db326317.js +0 -1
  838. package/.next/static/chunks/app/worktrees/[id]/layout-973ec48531555712.js +0 -1
  839. package/.next/static/chunks/app/worktrees/[id]/page-6dc0b8c4e808ea3e.js +0 -1
  840. package/.next/static/css/d3453a6876553d32.css +0 -1
  841. /package/.next/static/{XpKfn5x6H-mtTaXI9yNmb → smu4mnL7qMf8w38n9dQJE}/_ssgManifest.js +0 -0
@@ -0,0 +1,474 @@
1
+ "use strict";
2
+ /**
3
+ * Environment snapshots for the built-in `env-clean` gate (Issue #1740).
4
+ *
5
+ * `scope` judges what a delegation changed *inside* the repository. Nothing
6
+ * judged what it changed *outside* one, so the failures of 2026-08-06 all passed
7
+ * every gate: a worker's `pkill -f "node dist/server/server.js"` stopped the
8
+ * user's production server (#1739), another left `~/.commandmate-uat-1726` in
9
+ * `$HOME`, another left an isolated server listening on 3779, and a fourth wrote
10
+ * into `~/.commandmate/hooks` (#1722). This module records the four observable
11
+ * facts those failures moved, so the pair (task start, task end) can be diffed.
12
+ *
13
+ * The one rule the whole design hangs on: **a probe that could not answer is
14
+ * never an empty answer.** Reporting "no listeners found" when `lsof` is missing
15
+ * would hand out a green verdict computed from nothing — the #1614 failure mode
16
+ * of shipping a 0 that was never measured. Every probe therefore carries its own
17
+ * {@link EnvProbeStatus}, and {@link EnvProbeResult.entries} is only meaningful
18
+ * when that status is `ok`.
19
+ *
20
+ * Server-only: spawns processes and reads the filesystem.
21
+ *
22
+ * @module lib/verification/env-snapshot
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.ENV_SNAPSHOT_RETENTION_MS = exports.ENV_SNAPSHOT_DIR_NAME = exports.VOLATILE_ENTRY_PATTERNS = exports.MCBD_SESSION_PREFIX = exports.COMMANDMATE_PROCESS_PATTERN = exports.DEFAULT_ENV_PROBE_DEPS = exports.ENV_PROBE_LABELS = exports.ENV_PROBE_IDS = exports.ENV_SNAPSHOT_VERSION = void 0;
26
+ exports.probeListeners = probeListeners;
27
+ exports.probeTmuxSessions = probeTmuxSessions;
28
+ exports.probeHomeEntries = probeHomeEntries;
29
+ exports.probeCommandmateEntries = probeCommandmateEntries;
30
+ exports.captureEnvSnapshot = captureEnvSnapshot;
31
+ exports.resolveEnvSnapshotDir = resolveEnvSnapshotDir;
32
+ exports.saveEnvSnapshot = saveEnvSnapshot;
33
+ exports.loadEnvSnapshot = loadEnvSnapshot;
34
+ exports.isEnvSnapshot = isEnvSnapshot;
35
+ const child_process_1 = require("child_process");
36
+ const fs_1 = require("fs");
37
+ const os_1 = require("os");
38
+ const path_1 = require("path");
39
+ const env_1 = require("../../lib/env");
40
+ const logger_1 = require("../../lib/logger");
41
+ const logger = (0, logger_1.createLogger)('lib/verification/env-snapshot');
42
+ /** Bumped only when a stored snapshot stops being readable by this module. */
43
+ exports.ENV_SNAPSHOT_VERSION = 1;
44
+ /**
45
+ * The four facts the gate watches, one per row of the Issue's table.
46
+ *
47
+ * Ordered as the report prints them: the two that cost a running system first,
48
+ * then the two that only cost disk.
49
+ */
50
+ exports.ENV_PROBE_IDS = [
51
+ 'listeners',
52
+ 'tmux-sessions',
53
+ 'home-entries',
54
+ 'commandmate-entries',
55
+ ];
56
+ /** Human label used in the gate report. */
57
+ exports.ENV_PROBE_LABELS = {
58
+ listeners: 'CommandMate TCP listeners',
59
+ 'tmux-sessions': 'mcbd-* tmux sessions',
60
+ 'home-entries': '$HOME entries',
61
+ 'commandmate-entries': '~/.commandmate entries',
62
+ };
63
+ /** Probes are bounded: a hung `lsof` must not hold a verification run open. */
64
+ const PROBE_TIMEOUT_MS = 5000;
65
+ /** Output kept per probe command; far above any real listing. */
66
+ const PROBE_MAX_BUFFER = 4 * 1024 * 1024;
67
+ function runCommand(command, args) {
68
+ return new Promise((resolve) => {
69
+ (0, child_process_1.execFile)(command, args, { timeout: PROBE_TIMEOUT_MS, maxBuffer: PROBE_MAX_BUFFER, encoding: 'utf8' }, (error, stdout, stderr) => {
70
+ if (!error) {
71
+ resolve({ code: 0, stdout, stderr, failure: null });
72
+ return;
73
+ }
74
+ const withCode = error;
75
+ // execFile reports a non-zero exit as `code: <number>` and a spawn
76
+ // failure or timeout as `code: 'ENOENT'` / `killed: true`. Only the
77
+ // first is an answer; the rest are the absence of one.
78
+ if (typeof withCode.code === 'number' && !withCode.killed) {
79
+ resolve({ code: withCode.code, stdout, stderr, failure: null });
80
+ return;
81
+ }
82
+ resolve({
83
+ code: null,
84
+ stdout,
85
+ stderr,
86
+ failure: withCode.killed
87
+ ? `${command} exceeded ${PROBE_TIMEOUT_MS}ms and was terminated`
88
+ : `${command} could not be run: ${error.message}`,
89
+ });
90
+ });
91
+ });
92
+ }
93
+ exports.DEFAULT_ENV_PROBE_DEPS = {
94
+ run: runCommand,
95
+ readDir: (path) => (0, fs_1.readdirSync)(path),
96
+ homeDir: () => (0, os_1.homedir)(),
97
+ };
98
+ // =============================================================================
99
+ // Probe: TCP listeners
100
+ // =============================================================================
101
+ /**
102
+ * Command lines that make a listening socket "CommandMate's".
103
+ *
104
+ * Recording *every* listener would make the gate useless within a minute: a
105
+ * browser, a language server or a container runtime opens and closes ports
106
+ * constantly, and each one would read as a violation. The Issue scopes the item
107
+ * to "CommandMate 関連" for exactly that reason, so relevance is decided from
108
+ * the owning process's command line rather than from the port number — a
109
+ * developer's `commandmate start --port 3179` is as relevant as port 3000.
110
+ */
111
+ exports.COMMANDMATE_PROCESS_PATTERN = /commandmate|dist\/server\/server\.js|next-server|next (dev|start)|server\.ts/i;
112
+ /** `ps` line: leading pid, then the full command line. */
113
+ function parseProcessTable(stdout) {
114
+ const table = new Map();
115
+ for (const line of stdout.split('\n')) {
116
+ const match = /^\s*(\d+)\s+(.*)$/.exec(line);
117
+ if (!match)
118
+ continue;
119
+ table.set(Number(match[1]), match[2].trim());
120
+ }
121
+ return table;
122
+ }
123
+ /**
124
+ * `lsof -F` output: one field per line, the field's letter first.
125
+ *
126
+ * A `p` line opens a process block and every following field belongs to it
127
+ * until the next `p`.
128
+ */
129
+ function parseLsofFields(stdout) {
130
+ const blocks = [];
131
+ let current = null;
132
+ for (const line of stdout.split('\n')) {
133
+ if (line === '')
134
+ continue;
135
+ const letter = line[0];
136
+ const value = line.slice(1);
137
+ if (letter === 'p') {
138
+ const pid = Number(value);
139
+ if (!Number.isInteger(pid)) {
140
+ current = null;
141
+ continue;
142
+ }
143
+ current = { pid, fields: new Map() };
144
+ blocks.push(current);
145
+ continue;
146
+ }
147
+ if (!current)
148
+ continue;
149
+ const bucket = current.fields.get(letter);
150
+ if (bucket)
151
+ bucket.push(value);
152
+ else
153
+ current.fields.set(letter, [value]);
154
+ }
155
+ return blocks;
156
+ }
157
+ /** `*:3000`, `127.0.0.1:3000`, `[::1]:3000` → `3000`. */
158
+ function portOf(name) {
159
+ const colon = name.lastIndexOf(':');
160
+ if (colon < 0)
161
+ return null;
162
+ const port = name.slice(colon + 1);
163
+ return /^\d+$/.test(port) ? port : null;
164
+ }
165
+ function unavailable(reason) {
166
+ return { status: 'unavailable', entries: [], reason };
167
+ }
168
+ function ok(entries) {
169
+ // Deduplicated by key: one server answers on both IPv4 and IPv6, and lsof
170
+ // reports that as two rows for one listener.
171
+ const byKey = new Map();
172
+ for (const entry of entries) {
173
+ if (!byKey.has(entry.key))
174
+ byKey.set(entry.key, entry);
175
+ }
176
+ return {
177
+ status: 'ok',
178
+ entries: [...byKey.values()].sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0)),
179
+ reason: null,
180
+ };
181
+ }
182
+ /**
183
+ * CommandMate processes listening on a TCP port, keyed by port.
184
+ *
185
+ * Keyed by port rather than by pid so a plain restart is invisible: what the
186
+ * gate is asked to notice is a port that stopped answering (the production
187
+ * server was killed) or one that started and stayed (an isolated server was
188
+ * left behind), not that a supervisor replaced a process.
189
+ *
190
+ * `lsof` failing makes the probe `unavailable` rather than empty, and so does
191
+ * `ps`: without the process table there is no way to tell a CommandMate server
192
+ * from any other listener, and guessing would be the fail-open this gate exists
193
+ * to prevent.
194
+ */
195
+ async function probeListeners(deps) {
196
+ const listeners = await deps.run('lsof', ['-nP', '-iTCP', '-sTCP:LISTEN', '-F', 'pcn']);
197
+ // lsof exits 1 when it simply matched nothing, and that is a real "none".
198
+ if (listeners.failure !== null)
199
+ return unavailable(listeners.failure);
200
+ if (listeners.code !== 0 && listeners.code !== 1) {
201
+ return unavailable(`lsof exited ${listeners.code}: ${listeners.stderr.trim() || 'no diagnostic output'}`);
202
+ }
203
+ const blocks = parseLsofFields(listeners.stdout);
204
+ if (blocks.length === 0)
205
+ return ok([]);
206
+ const processes = await deps.run('ps', ['-A', '-o', 'pid=,command=']);
207
+ if (processes.failure !== null || processes.code !== 0) {
208
+ return unavailable(processes.failure ??
209
+ `ps exited ${processes.code}: ${processes.stderr.trim() || 'no diagnostic output'}`);
210
+ }
211
+ const table = parseProcessTable(processes.stdout);
212
+ const relevant = blocks.filter((block) => {
213
+ const commandLine = table.get(block.pid);
214
+ return commandLine !== undefined && exports.COMMANDMATE_PROCESS_PATTERN.test(commandLine);
215
+ });
216
+ if (relevant.length === 0)
217
+ return ok([]);
218
+ // cwd is what attributes an added listener to a worker. Its absence weakens
219
+ // attribution (the entry becomes unattributed, which is the strict verdict)
220
+ // but does not invalidate the listing, so a failure here is not `unavailable`.
221
+ const cwdByPid = new Map();
222
+ const pids = relevant.map((block) => String(block.pid));
223
+ const cwds = await deps.run('lsof', ['-a', '-d', 'cwd', '-p', pids.join(','), '-F', 'pn']);
224
+ if (cwds.failure === null && (cwds.code === 0 || cwds.code === 1)) {
225
+ for (const block of parseLsofFields(cwds.stdout)) {
226
+ const [path] = block.fields.get('n') ?? [];
227
+ if (path)
228
+ cwdByPid.set(block.pid, path);
229
+ }
230
+ }
231
+ const entries = [];
232
+ for (const block of relevant) {
233
+ const command = block.fields.get('c')?.[0] ?? 'unknown';
234
+ for (const name of block.fields.get('n') ?? []) {
235
+ const port = portOf(name);
236
+ if (!port)
237
+ continue;
238
+ entries.push({
239
+ key: `tcp/${port}`,
240
+ detail: `${command} pid=${block.pid}`,
241
+ anchor: cwdByPid.get(block.pid) ?? null,
242
+ });
243
+ }
244
+ }
245
+ return ok(entries);
246
+ }
247
+ // =============================================================================
248
+ // Probe: tmux sessions
249
+ // =============================================================================
250
+ /**
251
+ * Prefix every CommandMate session name carries (`mcbd-<cli>-<worktreeId>`).
252
+ *
253
+ * Duplicated from `lib/tmux/read-mode` rather than imported: that module is the
254
+ * read-mode key bindings, and pulling it in would make a verification gate
255
+ * depend on the terminal UI. The value is fixed by the session-name format in
256
+ * `lib/cli-tools/base.ts` and asserted against it in the unit tests.
257
+ */
258
+ exports.MCBD_SESSION_PREFIX = 'mcbd-';
259
+ /**
260
+ * `mcbd-*` sessions on the default tmux server.
261
+ *
262
+ * Only `mcbd-*` names are recorded: every other session belongs to the user and
263
+ * is none of a delegation's business, so watching them would only manufacture
264
+ * violations. Sessions of *other* worktrees stay in the set on purpose — killing
265
+ * a sibling worker's session is the #1624 failure this probe is here to catch.
266
+ *
267
+ * "No server running" is an answer (zero sessions), which is why it is not
268
+ * treated as a probe failure. `tmux` being absent, or hanging, is not.
269
+ */
270
+ async function probeTmuxSessions(deps) {
271
+ const result = await deps.run('tmux', ['list-sessions', '-F', '#{session_name}']);
272
+ if (result.failure !== null)
273
+ return unavailable(result.failure);
274
+ if (result.code !== 0) {
275
+ if (/no server running|error connecting to|no sessions/i.test(result.stderr))
276
+ return ok([]);
277
+ return unavailable(`tmux list-sessions exited ${result.code}: ${result.stderr.trim() || 'no diagnostic output'}`);
278
+ }
279
+ const entries = result.stdout
280
+ .split('\n')
281
+ .map((line) => line.trim())
282
+ .filter((name) => name.startsWith(exports.MCBD_SESSION_PREFIX))
283
+ .map((name) => ({ key: name, detail: null, anchor: null }));
284
+ return ok(entries);
285
+ }
286
+ // =============================================================================
287
+ // Probe: directory listings
288
+ // =============================================================================
289
+ /**
290
+ * Names that appear and disappear on their own, excluded from both directory
291
+ * probes.
292
+ *
293
+ * SQLite creates and removes `-wal` / `-shm` beside an open database, so a
294
+ * server that started or stopped between the two snapshots would otherwise
295
+ * report two violations for something nobody did. `.DS_Store` is written by the
296
+ * Finder. Excluding them is not a hole: none of them is a thing a delegation can
297
+ * leave behind that matters.
298
+ */
299
+ exports.VOLATILE_ENTRY_PATTERNS = [/-wal$/, /-shm$/, /-journal$/, /^\.DS_Store$/];
300
+ /** This module's own storage, which must not read as something a task created. */
301
+ exports.ENV_SNAPSHOT_DIR_NAME = 'env-snapshots';
302
+ function isIgnoredEntry(name) {
303
+ if (name === exports.ENV_SNAPSHOT_DIR_NAME)
304
+ return true;
305
+ return exports.VOLATILE_ENTRY_PATTERNS.some((pattern) => pattern.test(name));
306
+ }
307
+ function probeDirectory(deps, path, { missingIsEmpty }) {
308
+ let names;
309
+ try {
310
+ names = deps.readDir(path);
311
+ }
312
+ catch (error) {
313
+ const code = error.code;
314
+ // A directory that does not exist yet has zero entries — and if a task
315
+ // creates it, that shows up as an addition, which is the point.
316
+ if (missingIsEmpty && code === 'ENOENT')
317
+ return ok([]);
318
+ return unavailable(`could not list ${path}: ${error.message}`);
319
+ }
320
+ return ok(names
321
+ .filter((name) => !isIgnoredEntry(name))
322
+ .map((name) => ({ key: name, detail: null, anchor: null })));
323
+ }
324
+ /** Entries directly under `$HOME`. A worker leaving `~/.commandmate-uat-1726` shows up here. */
325
+ function probeHomeEntries(deps) {
326
+ return probeDirectory(deps, deps.homeDir(), { missingIsEmpty: false });
327
+ }
328
+ /** Entries directly under `~/.commandmate` — the state directory #1722 polluted. */
329
+ function probeCommandmateEntries(deps) {
330
+ return probeDirectory(deps, (0, path_1.join)(deps.homeDir(), '.commandmate'), { missingIsEmpty: true });
331
+ }
332
+ /**
333
+ * Take one snapshot of all four probes.
334
+ *
335
+ * Never throws: a probe that could not answer is recorded as `unavailable` with
336
+ * its reason, because the pair of snapshots has to be diffable even when half
337
+ * the machine refused to answer. What that means for the verdict is
338
+ * `diffEnvSnapshots`' decision, and it is `unknown`, never `clean`.
339
+ */
340
+ async function captureEnvSnapshot(input) {
341
+ const deps = input.deps ?? exports.DEFAULT_ENV_PROBE_DEPS;
342
+ const [listeners, tmuxSessions] = await Promise.all([
343
+ probeListeners(deps).catch((error) => unavailable(`listeners probe threw: ${error.message}`)),
344
+ probeTmuxSessions(deps).catch((error) => unavailable(`tmux probe threw: ${error.message}`)),
345
+ ]);
346
+ return {
347
+ version: exports.ENV_SNAPSHOT_VERSION,
348
+ capturedAt: input.now ?? Date.now(),
349
+ worktreeId: input.worktreeId,
350
+ probes: {
351
+ listeners,
352
+ 'tmux-sessions': tmuxSessions,
353
+ 'home-entries': probeHomeEntries(deps),
354
+ 'commandmate-entries': probeCommandmateEntries(deps),
355
+ },
356
+ };
357
+ }
358
+ // =============================================================================
359
+ // Persistence
360
+ // =============================================================================
361
+ /**
362
+ * Where baselines live: beside the database, never inside a repository.
363
+ *
364
+ * A snapshot describes the machine, not the worktree, and writing it into the
365
+ * worktree would put it in front of the `scope` and `work-evidence` gates — a
366
+ * file the orchestrator created reading as the agent's work is exactly the #1580
367
+ * defect.
368
+ */
369
+ function resolveEnvSnapshotDir() {
370
+ return (0, path_1.join)((0, path_1.dirname)((0, env_1.getEnv)().CM_DB_PATH), exports.ENV_SNAPSHOT_DIR_NAME);
371
+ }
372
+ /** Baselines older than this are removed when a new one is written. */
373
+ exports.ENV_SNAPSHOT_RETENTION_MS = 30 * 24 * 60 * 60 * 1000;
374
+ /** Task ids are UUIDs; anything else must never become a path segment. */
375
+ const TASK_ID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
376
+ function snapshotPath(dir, taskId) {
377
+ if (!TASK_ID_PATTERN.test(taskId))
378
+ return null;
379
+ return (0, path_1.join)(dir, `${taskId}.json`);
380
+ }
381
+ function pruneOldSnapshots(dir, now) {
382
+ let names;
383
+ try {
384
+ names = (0, fs_1.readdirSync)(dir);
385
+ }
386
+ catch {
387
+ return;
388
+ }
389
+ for (const name of names) {
390
+ if (!name.endsWith('.json'))
391
+ continue;
392
+ const path = (0, path_1.join)(dir, name);
393
+ try {
394
+ if (now - (0, fs_1.statSync)(path).mtimeMs > exports.ENV_SNAPSHOT_RETENTION_MS)
395
+ (0, fs_1.rmSync)(path, { force: true });
396
+ }
397
+ catch {
398
+ // A snapshot that cannot be stat'd or removed is not worth failing a send.
399
+ }
400
+ }
401
+ }
402
+ /**
403
+ * Store the baseline for `taskId`.
404
+ *
405
+ * @returns true when the snapshot was written
406
+ */
407
+ function saveEnvSnapshot(taskId, snapshot, dir = resolveEnvSnapshotDir()) {
408
+ const path = snapshotPath(dir, taskId);
409
+ if (!path) {
410
+ logger.warn('env-snapshot-rejected-task-id', { taskId });
411
+ return false;
412
+ }
413
+ try {
414
+ (0, fs_1.mkdirSync)(dir, { recursive: true, mode: 0o700 });
415
+ (0, fs_1.writeFileSync)(path, JSON.stringify(snapshot), { encoding: 'utf8', mode: 0o600 });
416
+ pruneOldSnapshots(dir, snapshot.capturedAt);
417
+ return true;
418
+ }
419
+ catch (error) {
420
+ logger.warn('env-snapshot-write-failed', {
421
+ taskId,
422
+ error: error instanceof Error ? error.message : String(error),
423
+ });
424
+ return false;
425
+ }
426
+ }
427
+ /**
428
+ * Read the baseline for `taskId`.
429
+ *
430
+ * @returns the snapshot, or null when there is none — which the gate reports as
431
+ * UNKNOWN, never as "nothing changed"
432
+ */
433
+ function loadEnvSnapshot(taskId, dir = resolveEnvSnapshotDir()) {
434
+ const path = snapshotPath(dir, taskId);
435
+ if (!path)
436
+ return null;
437
+ try {
438
+ const parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
439
+ if (!isEnvSnapshot(parsed))
440
+ return null;
441
+ return parsed;
442
+ }
443
+ catch {
444
+ return null;
445
+ }
446
+ }
447
+ function isEnvProbeResult(value) {
448
+ if (typeof value !== 'object' || value === null)
449
+ return false;
450
+ const probe = value;
451
+ if (probe.status !== 'ok' && probe.status !== 'unavailable')
452
+ return false;
453
+ return Array.isArray(probe.entries);
454
+ }
455
+ /**
456
+ * Whether a parsed file is a snapshot this module can compare against.
457
+ *
458
+ * A truncated or older-format file is rejected rather than coerced: half a
459
+ * snapshot would diff into violations nobody caused, and the alternative to
460
+ * accepting it is UNKNOWN, which is the safe answer.
461
+ */
462
+ function isEnvSnapshot(value) {
463
+ if (typeof value !== 'object' || value === null)
464
+ return false;
465
+ const snapshot = value;
466
+ if (snapshot.version !== exports.ENV_SNAPSHOT_VERSION)
467
+ return false;
468
+ if (typeof snapshot.capturedAt !== 'number')
469
+ return false;
470
+ const probes = snapshot.probes;
471
+ if (typeof probes !== 'object' || probes === null)
472
+ return false;
473
+ return exports.ENV_PROBE_IDS.every((id) => isEnvProbeResult(probes[id]));
474
+ }