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,150 @@
1
+ "use strict";
2
+ /**
3
+ * Claude Code's {@link AgentEventSource} — the first implementation of the
4
+ * Issue #1759 abstraction, and the one that has to keep behaving exactly as it
5
+ * did before the abstraction existed.
6
+ *
7
+ * Everything here was already in the codebase; what changed is where it lives.
8
+ * The event-name table and the subtype extraction came out of
9
+ * `agent-event-types` (S1/S2), the verdict shape out of the permission receiver
10
+ * (S6), the payload parsers were already their own modules (S7), and the
11
+ * settings/launch generation stays in `hook-settings-generator` and is reached
12
+ * through {@link prepareLaunch} (S3/S4/S5). No spelling, no field name and no
13
+ * emitted byte is different from before — `buildAgentHookSettings` is untouched
14
+ * and the receiver's decision body is produced by the same code path.
15
+ *
16
+ * ## Why the values below are what they are
17
+ *
18
+ * - `noDecision: 'proceeds'` — measured, not assumed. #1721 D5 drove a live
19
+ * session with a hook that answered `{}` and watched the ordinary TUI
20
+ * approval dialog appear, indistinguishable from a machine with no hook at
21
+ * all. This is what makes "when in doubt, abstain" a safe rule *for Claude*;
22
+ * it is not a safe rule for antigravity or opencode (C3).
23
+ * - `configScope: 'per-instance'` — `--settings <file>` is per launch, so
24
+ * `claude` and `claude-2` in one worktree get different files with different
25
+ * correlation keys baked into the URLs. Most tools cannot do this;
26
+ * antigravity reads one global file and nothing else (#1757 P8).
27
+ * - `decisionTimeoutSeconds` — `PERMISSION_REQUEST_TIMEOUT_SECONDS`, the number
28
+ * the generator writes into the hook. copilot's equivalent is ≈10s and
29
+ * codex's 600s, which is why the number is a capability rather than a
30
+ * constant somebody reads once.
31
+ *
32
+ * @module lib/hooks/sources/claude/source
33
+ */
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.claudeAgentEventSource = void 0;
36
+ exports.encodeClaudeVerdict = encodeClaudeVerdict;
37
+ const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
38
+ const ask_user_question_payload_1 = require("../../../../lib/hooks/ask-user-question-payload");
39
+ const hook_settings_generator_1 = require("../../../../lib/hooks/hook-settings-generator");
40
+ const permission_request_payload_1 = require("../../../../lib/hooks/permission-request-payload");
41
+ const define_source_1 = require("../define-source");
42
+ const event_mapper_1 = require("../event-mapper");
43
+ const hook_event_vocabulary_1 = require("../hook-event-vocabulary");
44
+ const tool_id_1 = require("./tool-id");
45
+ /**
46
+ * The no-decision body, byte for byte what the #1721 spike returned for D5.
47
+ *
48
+ * Empty is not "an error we swallowed": it is the documented way to say
49
+ * "CommandMate has no opinion", and Claude responds to it by doing what it
50
+ * would have done with no hook installed.
51
+ */
52
+ const NO_DECISION_BODY = {};
53
+ /**
54
+ * Encode a verdict the way §5.4 of the verification report measured Claude
55
+ * obeying (S6).
56
+ *
57
+ * `hookEventName` is required alongside `decision`; without it the body is
58
+ * ignored in silence.
59
+ *
60
+ * Three of the five verdicts collapse to no-decision, and that is the design
61
+ * rather than a gap:
62
+ *
63
+ * - `allowAlways` has no Claude spelling. `permission_suggestions` offers
64
+ * `addRules` candidates, but writing a persistent rule from a hook is a
65
+ * different and much larger promise than approving one call, so this source
66
+ * declines instead of approximating.
67
+ * - `deny` is never emitted at all. `lib/hooks/permission-decision-service`
68
+ * explains why: a denial from Auto-Yes takes the choice away from the human
69
+ * in the direction that cannot be undone by waiting, and every case that
70
+ * wants one is better served by letting the dialog appear.
71
+ * - `answer` belongs to `AskUserQuestion`, whose picker is drawn regardless of
72
+ * what a `PermissionRequest` hook says (#1721 §5.6) — answering here would
73
+ * be answering a question the human is about to be shown anyway.
74
+ */
75
+ function encodeClaudeVerdict(verdict) {
76
+ if (verdict.kind !== 'allowOnce')
77
+ return NO_DECISION_BODY;
78
+ return {
79
+ hookSpecificOutput: {
80
+ hookEventName: permission_request_payload_1.PERMISSION_REQUEST_EVENT_NAME,
81
+ decision: { behavior: 'allow' },
82
+ },
83
+ };
84
+ }
85
+ /**
86
+ * Claude Code as an event source.
87
+ *
88
+ * Registered in `../registry`. Nothing outside this directory imports it by
89
+ * name; callers ask the registry for the tool they are holding.
90
+ */
91
+ exports.claudeAgentEventSource = (0, define_source_1.definePushHookSource)({
92
+ cliToolId: tool_id_1.CLAUDE_CLI_TOOL_ID,
93
+ // #1721 D5: an unanswered or empty `PermissionRequest` lands in the ordinary
94
+ // approval flow. Abstaining is free here — and only here plus codex/copilot.
95
+ noDecision: { kind: 'proceeds' },
96
+ capabilities: {
97
+ // Claude is the one tool that emits all seven (#1757 §8.1). It is still not
98
+ // a licence to treat `session_end` as "the process exited": `/clear` emits
99
+ // one too, with `reason: "clear"`, and the pane keeps running.
100
+ supportedEvents: agent_event_types_1.AGENT_EVENT_TYPES,
101
+ configScope: 'per-instance',
102
+ decisionTimeoutSeconds: hook_settings_generator_1.PERMISSION_REQUEST_TIMEOUT_SECONDS,
103
+ },
104
+ // S1. A plain name table is enough *for this tool* — one native name, one
105
+ // word, no predicates — so it is expressed as rules built from the table
106
+ // rather than as a table, and a source that needs conditions (opencode) adds
107
+ // them to the same list.
108
+ mappers: (0, event_mapper_1.fromNameTable)(hook_event_vocabulary_1.CAMEL_CASE_HOOK_EVENT_NAMES),
109
+ nativeEventNameFields: ['hook_event_name'],
110
+ conversationIdFields: hook_event_vocabulary_1.SESSION_ID_FIELDS,
111
+ toolCallIdFields: hook_event_vocabulary_1.TOOL_CALL_ID_FIELDS,
112
+ // Issue #1783. Claude sends it on `SessionStart` and nowhere else — checked
113
+ // against every fixture in `tests/fixtures/hooks/claude/`, where only
114
+ // `session-start.json` carries the key. So the value has to be *remembered*
115
+ // rather than read off the newest event; `getLastKnownAgentModel` is what
116
+ // does that. The value arrives with its own suffix (`claude-opus-5[1m]`) and
117
+ // is not parsed here: a display string the tool chose is the tool's to spell.
118
+ modelFields: ['model'],
119
+ // S2.
120
+ extractDetail: hook_event_vocabulary_1.extractSnakeCaseEventDetail,
121
+ // S7. Both parsers are strict and answer null for anything they cannot vouch
122
+ // for; the callers turn null into "no structured data", which degrades to the
123
+ // behaviour of a machine without hooks rather than into a guess.
124
+ parsePermissionRequest: (payload) => (0, permission_request_payload_1.parsePermissionRequestPayload)(payload),
125
+ parseQuestion: (payload) => (0, ask_user_question_payload_1.parseAskUserQuestionPayload)(payload),
126
+ // S6.
127
+ encodeVerdict: encodeClaudeVerdict,
128
+ // S3 / S4 / S5. Delegated rather than reimplemented: `buildClaudeLaunchCommand`
129
+ // writes the settings file, falls back to the bare path on any failure, and is
130
+ // covered byte-for-byte by `tests/unit/hooks/hook-settings-generator.test.ts`.
131
+ prepareLaunch: (target, executablePath) => {
132
+ const command = (0, hook_settings_generator_1.buildClaudeLaunchCommand)(executablePath, {
133
+ worktreeId: target.worktreeId,
134
+ instanceId: target.instanceId,
135
+ cliToolId: target.cliToolId,
136
+ });
137
+ // The path is reported only when the command actually names it. Injection
138
+ // can be switched off (`CM_AGENT_HOOKS_INJECT=0`) or fail to write, and both
139
+ // return the bare executable — claiming a settings file in that case would
140
+ // be telling the caller about a file that is not there.
141
+ const settingsPath = (0, hook_settings_generator_1.isHookInjectionEnabled)() && command !== executablePath
142
+ ? (0, hook_settings_generator_1.getHookSettingsPath)({
143
+ worktreeId: target.worktreeId,
144
+ instanceId: target.instanceId,
145
+ cliToolId: target.cliToolId,
146
+ })
147
+ : null;
148
+ return { command, settingsPath };
149
+ },
150
+ });
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * Claude Code's {@link CLIToolType} id, as a constant.
4
+ *
5
+ * A one-line module so that the literal `'claude'` appears in exactly one place
6
+ * under `src/lib/hooks/`. `hook-settings-generator` defaults its target to this
7
+ * tool, which is correct — it generates Claude's `--settings` file and nothing
8
+ * else — but a bare literal there reads as "this layer knows about Claude",
9
+ * which after Issue #1759 it must not.
10
+ *
11
+ * Separate from `./source` because that module imports the settings generator;
12
+ * importing the constant back out of it would close a cycle.
13
+ *
14
+ * @module lib/hooks/sources/claude/tool-id
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.CLAUDE_CLI_TOOL_ID = void 0;
18
+ exports.CLAUDE_CLI_TOOL_ID = 'claude';
@@ -0,0 +1,465 @@
1
+ "use strict";
2
+ /**
3
+ * codex's `hooks.json`, and the command line that gives one session its
4
+ * correlation keys (Issue #1760, seams S3/S4/S5 for codex).
5
+ *
6
+ * Claude's equivalent is `lib/hooks/hook-settings-generator`, and the two look
7
+ * nothing alike because codex's hook system differs from Claude's in four ways
8
+ * that were all measured on codex-cli **0.147.0** rather than read out of a
9
+ * document. Each one removes an option Claude has:
10
+ *
11
+ * 1. **There is no `--settings`.** codex reads `$CODEX_HOME/hooks.json` and
12
+ * `<cwd>/.codex/hooks.json` and nothing else — no per-launch file, no
13
+ * `--config` pointing at one (#1757 §5.1.2; `hooks.managed_dir` exists as a
14
+ * key and fired zero times). So the file cannot carry a worktree id or an
15
+ * instance id the way Claude's does: whatever is written is shared by every
16
+ * codex session on the machine.
17
+ * 2. **`type: "http"` destroys the file.** One `http` handler and codex
18
+ * discards the whole of `hooks.json` — every `command` hook with it — after
19
+ * printing one line to stderr that the TUI never shows (#1757 §5.1.4). The
20
+ * only delivery mechanism is `type: "command"`.
21
+ * 3. **A hook command runs through a shell.** Measured directly for this Issue
22
+ * against 0.147.0: `$VAR` expands, `"…"` and `'…'` group, `${VAR:+…}`
23
+ * works, `&` inside quotes is literal, and a `#` comment is ignored. The
24
+ * hook process also inherits the environment of the shell that started
25
+ * codex. **That is what makes point 1 survivable**: the file stays static
26
+ * and the per-session keys travel in environment variables set on the
27
+ * launch line, so `codex` and `codex-2` in one worktree report as
28
+ * themselves. Verified live — a session launched with
29
+ * `CM_AGENT_INSTANCE_ID=codex-2` posted `instanceId: "codex-2"`.
30
+ * 4. **Hooks do not run until a human trusts them.** Trust is recorded in the
31
+ * user's own `~/.codex/config.toml` as
32
+ * `[hooks.state."<file>:<event>:0:0"] trusted_hash`, and an untrusted hook
33
+ * is skipped in complete silence (#1757 P4). CommandMate does not write
34
+ * that file — see {@link isCodexHookTrustBypassEnabled} for the whole of
35
+ * the reasoning, and `docs/design/agent-event-source-interface.md`.
36
+ *
37
+ * ## Why `$CODEX_HOME/hooks.json` and not `<worktree>/.codex/hooks.json`
38
+ *
39
+ * Both fire. The worktree-local file was rejected for two reasons: it is inside
40
+ * a git checkout, so every worktree grows an untracked `.codex/` that shows up
41
+ * in the Changes view and that an agent running `git add -A` can commit; and
42
+ * trust is keyed by absolute path, so a per-worktree file means the human
43
+ * re-answers the review dialog once per worktree, forever. The single file is
44
+ * byte-identical for every worktree and every instance, which makes trust a
45
+ * one-time act and makes a rewrite a no-op — {@link writeCodexHookSettings}
46
+ * leaves the file untouched when the content already matches.
47
+ *
48
+ * The cost is that the file is shared with codex sessions CommandMate did not
49
+ * start. Those post too, with the environment variables unset; the relay omits
50
+ * the correlation keys it does not have and the receiver falls back to
51
+ * resolving the worktree from `cwd`, which is exactly the hand-configured
52
+ * behaviour of Issue #1549. `CM_AGENT_HOOKS_INJECT=0` turns the whole thing off.
53
+ *
54
+ * @module lib/hooks/sources/codex/hooks-config
55
+ */
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.CODEX_SUPPORTED_EVENTS = exports.CODEX_PERMISSION_REQUEST_EVENT = exports.CODEX_REGISTERED_EVENTS = exports.CODEX_SESSION_END_TIMEOUT_SECONDS = exports.CODEX_HOOK_TRUST_BYPASS_FLAG = exports.CODEX_HOOK_TRUST_ENV_VAR = exports.CODEX_PERMISSION_URL_ENV_VAR = exports.CODEX_EVENT_URL_ENV_VAR = exports.CODEX_INSTANCE_ID_ENV_VAR = exports.CODEX_WORKTREE_ID_ENV_VAR = exports.CODEX_TOOL_ENV_VAR = exports.CODEX_HOME_ENV_VAR = exports.CODEX_HOOK_MARKER = void 0;
58
+ exports.isCodexHookTrustBypassEnabled = isCodexHookTrustBypassEnabled;
59
+ exports.getCodexHome = getCodexHome;
60
+ exports.getCodexHooksPath = getCodexHooksPath;
61
+ exports.buildCodexEventHookCommand = buildCodexEventHookCommand;
62
+ exports.buildCodexPermissionHookCommand = buildCodexPermissionHookCommand;
63
+ exports.buildCodexHookSettings = buildCodexHookSettings;
64
+ exports.mergeCodexHookSettings = mergeCodexHookSettings;
65
+ exports.writeCodexHookSettings = writeCodexHookSettings;
66
+ exports.buildCodexLaunchCommand = buildCodexLaunchCommand;
67
+ const fs_1 = require("fs");
68
+ const os_1 = require("os");
69
+ const path_1 = require("path");
70
+ const safe_directory_1 = require("../../../../config/safe-directory");
71
+ const types_1 = require("../../../../lib/cli-tools/types");
72
+ const env_1 = require("../../../../lib/env");
73
+ const hook_settings_generator_1 = require("../../../../lib/hooks/hook-settings-generator");
74
+ const logger_1 = require("../../../../lib/logger");
75
+ const path_validator_1 = require("../../../../lib/security/path-validator");
76
+ const event_mapper_1 = require("../event-mapper");
77
+ const tool_id_1 = require("./tool-id");
78
+ const logger = (0, logger_1.createLogger)('lib/hooks/sources/codex/hooks-config');
79
+ /** Loopback: the agent runs on the machine the server runs on. */
80
+ const CODEX_HOOK_HOST = '127.0.0.1';
81
+ /**
82
+ * Marks a handler as this server's, so a rewrite replaces CommandMate's entries
83
+ * and leaves the operator's alone.
84
+ *
85
+ * Spelled as a trailing shell comment rather than as an extra JSON field
86
+ * because codex's config parser rejects what it does not know — an unknown
87
+ * `type` takes the entire file down (#1757 §5.1.4), and an unknown key is not
88
+ * worth finding out about the same way. Measured: a hook whose command ends
89
+ * `… # commandmate:agent-hooks` runs and receives its arguments unchanged.
90
+ */
91
+ exports.CODEX_HOOK_MARKER = 'commandmate:agent-hooks';
92
+ /** `$CODEX_HOME` — codex's own override, honoured so a sandboxed codex stays sandboxed. */
93
+ exports.CODEX_HOME_ENV_VAR = 'CODEX_HOME';
94
+ /** Relay defaults to this tool when the hook does not pass `--tool`. */
95
+ exports.CODEX_TOOL_ENV_VAR = 'CM_AGENT_TOOL';
96
+ /** Correlation key: which worktree this codex process belongs to. */
97
+ exports.CODEX_WORKTREE_ID_ENV_VAR = 'CM_AGENT_WORKTREE_ID';
98
+ /**
99
+ * Correlation key: which instance.
100
+ *
101
+ * The whole of the answer to "`codex` and `codex-2` run in the same directory".
102
+ * `cwd` cannot tell them apart and neither can `session_id`; the environment of
103
+ * the process can, because CommandMate is the one that starts it.
104
+ */
105
+ exports.CODEX_INSTANCE_ID_ENV_VAR = 'CM_AGENT_INSTANCE_ID';
106
+ /** Event receiver URL. Already the relay script's own environment override. */
107
+ exports.CODEX_EVENT_URL_ENV_VAR = 'CM_HOOK_URL';
108
+ /** Auto-Yes v2 receiver URL, with the correlation keys already in its query. */
109
+ exports.CODEX_PERMISSION_URL_ENV_VAR = 'CM_PERMISSION_HOOK_URL';
110
+ /** Opt-in switch for {@link CODEX_HOOK_TRUST_BYPASS_FLAG}; `bypass` is the only value that acts. */
111
+ exports.CODEX_HOOK_TRUST_ENV_VAR = 'CM_CODEX_HOOK_TRUST';
112
+ /** codex's own flag for running unreviewed hooks, for one invocation. */
113
+ exports.CODEX_HOOK_TRUST_BYPASS_FLAG = '--dangerously-bypass-hook-trust';
114
+ /**
115
+ * `SessionEnd`'s budget, in seconds.
116
+ *
117
+ * Not a preference: codex clamps this hook to 3 s and says so in the TUI
118
+ * (`⚠ clamping SessionEnd hook timeout to 3s in …/hooks.json`), measured on
119
+ * 0.147.0. Writing {@link HOOK_TIMEOUT_SECONDS} here would put a warning banner
120
+ * above every session for a value codex was going to ignore.
121
+ */
122
+ exports.CODEX_SESSION_END_TIMEOUT_SECONDS = 3;
123
+ /**
124
+ * The events CommandMate registers, and the word each maps to.
125
+ *
126
+ * Four of codex's eleven. What is deliberately absent matters more than what is
127
+ * here:
128
+ *
129
+ * - **`Notification` does not exist on codex** (#1757 §5.1.1: the review screen
130
+ * enumerates eleven events and it is not among them). Writing one is
131
+ * discarded in silence.
132
+ * - **`PreToolUse` / `PostToolUse` are not registered**, though they do fire.
133
+ * Claude registers them for the single matcher `AskUserQuestion` (#1726)
134
+ * because that tool's arguments *are* the question a human has to answer.
135
+ * codex has no such tool, so the only thing registering them would buy is
136
+ * two POSTs per tool call — on a session that greps in a loop, two requests
137
+ * per `Read`, each of which the agent waits for. `capabilities.supportedEvents`
138
+ * says so, so nothing above waits for a word that cannot arrive.
139
+ * - **`PermissionRequest` is not here** because it is not an observation: its
140
+ * response body is a decision codex obeys, so it goes to its own receiver
141
+ * through {@link buildCodexPermissionHookCommand}.
142
+ */
143
+ exports.CODEX_REGISTERED_EVENTS = {
144
+ SessionStart: 'session_start',
145
+ UserPromptSubmit: 'user_prompt_submit',
146
+ Stop: 'stop',
147
+ SessionEnd: 'session_end',
148
+ };
149
+ /** codex's spelling of the event whose reply is a verdict (#1757 §5.1.6). */
150
+ exports.CODEX_PERMISSION_REQUEST_EVENT = 'PermissionRequest';
151
+ /** The four words a codex session can actually produce, given the config above. */
152
+ exports.CODEX_SUPPORTED_EVENTS = Object.values(exports.CODEX_REGISTERED_EVENTS);
153
+ /**
154
+ * Whether to launch codex with {@link CODEX_HOOK_TRUST_BYPASS_FLAG}.
155
+ *
156
+ * **Off by default, and the default is the security decision.** The flag
157
+ * disables review for *every* hook the invocation can see, which includes
158
+ * `<cwd>/.codex/hooks.json` — a file that lives inside the repository being
159
+ * worked on. Turning it on by default would mean that cloning a hostile
160
+ * repository and opening it in CommandMate runs whatever that repository put in
161
+ * `.codex/hooks.json`, with no dialog, defeating the exact mechanism codex
162
+ * built to prevent it. A structured `Stop` event is not worth that.
163
+ *
164
+ * So the default posture is: CommandMate writes the config and never grants the
165
+ * trust. The human grants it once, through codex's own review screen, which is
166
+ * also the only thing that may write `~/.codex/config.toml` — a file this
167
+ * server never touches (it holds, among other things, the `notify` entry a
168
+ * user's Computer Use integration depends on). Until then the hooks are inert,
169
+ * the screen scraper keeps doing what it did before this Issue, and
170
+ * `cli-tools/codex` dismisses the review dialog so a session still starts.
171
+ *
172
+ * `CM_CODEX_HOOK_TRUST=bypass` exists for headless and CI operators who have
173
+ * weighed that trade for themselves.
174
+ */
175
+ function isCodexHookTrustBypassEnabled() {
176
+ return process.env[exports.CODEX_HOOK_TRUST_ENV_VAR] === 'bypass';
177
+ }
178
+ /**
179
+ * `$CODEX_HOME`, or `~/.codex`.
180
+ *
181
+ * Issue #1774: `writeCodexHookSettings` creates this directory with a recursive
182
+ * mkdir, which does not fail but *hangs* for a path inside `/proc`, `/sys` or
183
+ * `/dev`. Such a value is refused here and `~/.codex` is used instead.
184
+ */
185
+ function getCodexHome(options = {}) {
186
+ const fallback = (0, path_1.join)((0, os_1.homedir)(), '.codex');
187
+ if (options.codexHome) {
188
+ return (0, safe_directory_1.resolveSafeDirectory)(options.codexHome, fallback, 'CodexHookOptions.codexHome');
189
+ }
190
+ return (0, safe_directory_1.resolveSafeDirectory)(process.env[exports.CODEX_HOME_ENV_VAR], fallback, exports.CODEX_HOME_ENV_VAR);
191
+ }
192
+ /** Absolute path of the hooks file codex reads. */
193
+ function getCodexHooksPath(options = {}) {
194
+ return (0, path_1.join)(getCodexHome(options), 'hooks.json');
195
+ }
196
+ /**
197
+ * Receiver URL for a manually launched codex, as a shell expansion.
198
+ *
199
+ * Every session CommandMate starts has the variable set, so this default is
200
+ * only reached by a codex the operator ran themselves. It mirrors the relay
201
+ * script's own default (`CM_PORT`, else 3000) rather than baking in the port of
202
+ * whichever server happened to write the file — the file is machine-wide and
203
+ * this repository is routinely run as several servers at once.
204
+ */
205
+ function fallbackUrlExpression(path, query) {
206
+ return `http://${CODEX_HOOK_HOST}:\${CM_PORT:-3000}${path}${query}`;
207
+ }
208
+ /**
209
+ * The command for one lifecycle event.
210
+ *
211
+ * Prefers the shipped relay, which already reads codex's payload from stdin,
212
+ * omits correlation keys it was handed empty, and exits 0 when the POST fails.
213
+ * The inline fallback posts codex's payload verbatim to the same receiver —
214
+ * which reads it, because the source's mappers know `hook_event_name`.
215
+ */
216
+ function buildCodexEventHookCommand(event, options = {}) {
217
+ const marker = ` # ${exports.CODEX_HOOK_MARKER}`;
218
+ const relay = options.relayScriptPath === undefined ? (0, hook_settings_generator_1.resolveRelayScriptPath)() : options.relayScriptPath;
219
+ if (relay) {
220
+ return ([
221
+ (0, hook_settings_generator_1.shellQuote)(relay),
222
+ '--tool',
223
+ tool_id_1.CODEX_CLI_TOOL_ID,
224
+ '--event',
225
+ event,
226
+ // Quoted so an unset variable is one empty argument rather than none;
227
+ // the relay drops an empty correlation key and falls back to `cwd`.
228
+ '--worktree-id',
229
+ `"$${exports.CODEX_WORKTREE_ID_ENV_VAR}"`,
230
+ '--instance-id',
231
+ `"$${exports.CODEX_INSTANCE_ID_ENV_VAR}"`,
232
+ '--stdin-json',
233
+ ].join(' ') + marker);
234
+ }
235
+ const withAuthHeader = options.withAuthHeader ?? (0, hook_settings_generator_1.isAuthTokenExpected)();
236
+ const auth = withAuthHeader ? ` -H "Authorization: Bearer $${hook_settings_generator_1.AUTH_TOKEN_ENV_VAR}"` : '';
237
+ // `${VAR:+&k=$VAR}` so a manually launched codex posts no empty correlation
238
+ // key at all, rather than one the receiver has to reject.
239
+ const url = `"\${${exports.CODEX_EVENT_URL_ENV_VAR}:-${fallbackUrlExpression(hook_settings_generator_1.AGENT_EVENT_PATH, '')}}` +
240
+ `?tool=${tool_id_1.CODEX_CLI_TOOL_ID}` +
241
+ `\${${exports.CODEX_WORKTREE_ID_ENV_VAR}:+&worktreeId=$${exports.CODEX_WORKTREE_ID_ENV_VAR}}` +
242
+ `\${${exports.CODEX_INSTANCE_ID_ENV_VAR}:+&instanceId=$${exports.CODEX_INSTANCE_ID_ENV_VAR}}"`;
243
+ return (`curl -sS -f -m ${hook_settings_generator_1.HOOK_TIMEOUT_SECONDS} -X POST -H 'Content-Type: application/json'${auth} ` +
244
+ `--data-binary @- ${url} >/dev/null 2>&1 || true${marker}`);
245
+ }
246
+ /**
247
+ * The command for `PermissionRequest`, whose stdout **is** the verdict.
248
+ *
249
+ * Never the relay: that script discards the response body, and the body is the
250
+ * entire point here. `curl` writes what the receiver answers straight to
251
+ * stdout, which is where codex reads a command hook's decision from — measured
252
+ * live for this Issue: an `{"hookSpecificOutput":{…"behavior":"allow"}}` reply
253
+ * ran the command with no dialog, `{}` produced the ordinary approval dialog,
254
+ * and a receiver that was not running produced the same dialog a second later.
255
+ *
256
+ * `-f` so an HTTP error prints nothing, `2>/dev/null` so a connection failure
257
+ * prints nothing, `|| true` so the hook exits 0. All three land on the same
258
+ * behaviour: no output, and codex asks the human — which is what it does with
259
+ * no hook installed at all.
260
+ */
261
+ function buildCodexPermissionHookCommand(options = {}) {
262
+ const withAuthHeader = options.withAuthHeader ?? (0, hook_settings_generator_1.isAuthTokenExpected)();
263
+ const auth = withAuthHeader ? ` -H "Authorization: Bearer $${hook_settings_generator_1.AUTH_TOKEN_ENV_VAR}"` : '';
264
+ const url = `"\${${exports.CODEX_PERMISSION_URL_ENV_VAR}:-` +
265
+ `${fallbackUrlExpression(hook_settings_generator_1.PERMISSION_REQUEST_PATH, `?tool=${tool_id_1.CODEX_CLI_TOOL_ID}`)}}"`;
266
+ return (`curl -sS -f -m ${hook_settings_generator_1.PERMISSION_REQUEST_TIMEOUT_SECONDS} -X POST ` +
267
+ `-H 'Content-Type: application/json'${auth} --data-binary @- ${url} ` +
268
+ `2>/dev/null || true # ${exports.CODEX_HOOK_MARKER}`);
269
+ }
270
+ /**
271
+ * The hooks CommandMate contributes.
272
+ *
273
+ * Deterministic and free of per-session values: the same bytes on every
274
+ * worktree, every instance and every server on the machine. That is what makes
275
+ * the human's one-time trust survive a restart — codex keys trust by the hash
276
+ * of the handler, so a file that changed would have to be reviewed again.
277
+ */
278
+ function buildCodexHookSettings(options = {}) {
279
+ const handler = (event, timeout) => ({
280
+ hooks: [{ type: 'command', command: buildCodexEventHookCommand(event, options), timeout }],
281
+ });
282
+ const hooks = {};
283
+ for (const [nativeName, event] of Object.entries(exports.CODEX_REGISTERED_EVENTS)) {
284
+ const timeout = nativeName === 'SessionEnd' ? exports.CODEX_SESSION_END_TIMEOUT_SECONDS : hook_settings_generator_1.HOOK_TIMEOUT_SECONDS;
285
+ hooks[nativeName] = [handler(event, timeout)];
286
+ }
287
+ hooks[exports.CODEX_PERMISSION_REQUEST_EVENT] = [
288
+ {
289
+ hooks: [
290
+ {
291
+ type: 'command',
292
+ command: buildCodexPermissionHookCommand(options),
293
+ timeout: hook_settings_generator_1.PERMISSION_REQUEST_TIMEOUT_SECONDS,
294
+ },
295
+ ],
296
+ },
297
+ ];
298
+ return { hooks };
299
+ }
300
+ /** Whether a handler was written by this server. */
301
+ function isCommandMateHandler(handler) {
302
+ if (!(0, event_mapper_1.isPlainObject)(handler))
303
+ return false;
304
+ return typeof handler.command === 'string' && handler.command.includes(exports.CODEX_HOOK_MARKER);
305
+ }
306
+ /**
307
+ * Drop this server's previous handlers from one event's groups, keeping
308
+ * everything else — including groups that end up empty, which are the
309
+ * operator's to remove.
310
+ */
311
+ function withoutCommandMateHandlers(groups) {
312
+ return groups
313
+ .map((group) => {
314
+ if (!(0, event_mapper_1.isPlainObject)(group) || !Array.isArray(group.hooks))
315
+ return group;
316
+ const kept = group.hooks.filter((handler) => !isCommandMateHandler(handler));
317
+ if (kept.length === group.hooks.length)
318
+ return group;
319
+ return { ...group, hooks: kept };
320
+ })
321
+ .filter((group) => {
322
+ // A group that held nothing but our handler is ours to remove; one the
323
+ // operator wrote empty is left exactly as found.
324
+ if (!(0, event_mapper_1.isPlainObject)(group) || !Array.isArray(group.hooks))
325
+ return true;
326
+ return group.hooks.length > 0;
327
+ });
328
+ }
329
+ /**
330
+ * Fold the generated hooks into whatever is already in the file.
331
+ *
332
+ * The file is the operator's, and on most machines it is the *only* place their
333
+ * own codex hooks can live — there is no second file to put them in. So this
334
+ * appends rather than replaces: unrelated events keep their handlers, unrelated
335
+ * top-level keys are carried through untouched, and a handler this server wrote
336
+ * earlier is replaced rather than duplicated.
337
+ *
338
+ * An event whose existing value is not an array is left exactly as it is and
339
+ * gets no handler from us. Overwriting a shape this function does not
340
+ * understand would cost the operator a config it presumably tested.
341
+ *
342
+ * @param existing - The parsed file, or null when there was none
343
+ * @param generated - {@link buildCodexHookSettings}
344
+ * @returns The object to serialise
345
+ */
346
+ function mergeCodexHookSettings(existing, generated) {
347
+ const base = (0, event_mapper_1.isPlainObject)(existing) ? { ...existing } : {};
348
+ const existingHooks = (0, event_mapper_1.isPlainObject)(base.hooks) ? base.hooks : {};
349
+ const merged = {};
350
+ for (const [event, groups] of Object.entries(existingHooks)) {
351
+ merged[event] = Array.isArray(groups) ? withoutCommandMateHandlers(groups) : groups;
352
+ }
353
+ for (const [event, groups] of Object.entries(generated.hooks)) {
354
+ const current = merged[event];
355
+ if (current !== undefined && !Array.isArray(current))
356
+ continue;
357
+ merged[event] = [...(current ?? []), ...groups];
358
+ }
359
+ base.hooks = merged;
360
+ return base;
361
+ }
362
+ /**
363
+ * Write the hooks file, and answer where it is.
364
+ *
365
+ * Idempotent to the byte: when the merged content already matches, the file is
366
+ * not opened for writing at all, so a machine whose hooks are trusted keeps its
367
+ * mtime and its trust and sees no review dialog on the next launch.
368
+ *
369
+ * @returns The path, or null when the file could not be prepared — which the
370
+ * caller turns into "start codex without hooks", never into a failed launch
371
+ */
372
+ function writeCodexHookSettings(options = {}) {
373
+ const settingsPath = getCodexHooksPath(options);
374
+ let existing = null;
375
+ let previous = null;
376
+ if ((0, fs_1.existsSync)(settingsPath)) {
377
+ try {
378
+ previous = (0, fs_1.readFileSync)(settingsPath, 'utf8');
379
+ existing = JSON.parse(previous);
380
+ }
381
+ catch (error) {
382
+ // Someone's file that this server cannot read is someone's file this
383
+ // server must not overwrite. Injection is skipped; the session starts.
384
+ logger.warn('codex-hooks-config-unreadable', {
385
+ settingsPath,
386
+ error: error instanceof Error ? error.message : String(error),
387
+ });
388
+ return null;
389
+ }
390
+ }
391
+ const content = `${JSON.stringify(mergeCodexHookSettings(existing, buildCodexHookSettings(options)), null, 2)}\n`;
392
+ if (previous === content)
393
+ return settingsPath;
394
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(settingsPath), { recursive: true, mode: 0o700 });
395
+ (0, fs_1.writeFileSync)(settingsPath, content, { mode: 0o600 });
396
+ return settingsPath;
397
+ }
398
+ /**
399
+ * The command that starts codex for one instance.
400
+ *
401
+ * Never throws: hooks are an enhancement to a session that has to start anyway,
402
+ * so anything that goes wrong here returns the bare executable — which is
403
+ * byte-for-byte the pre-#1760 launch.
404
+ *
405
+ * The environment assignments are the per-session half of the design. The
406
+ * hooks file cannot hold them (there is one file for the machine), the payload
407
+ * cannot supply them (`cwd` is identical for `codex` and `codex-2`, and
408
+ * `session_id` changes under the instance), and codex injects nothing of its
409
+ * own (#1757 §5.1.7 found no `CLAUDE_PROJECT_DIR` equivalent). What is left is
410
+ * the environment of the process CommandMate starts, which a hook inherits.
411
+ *
412
+ * @param executablePath - Resolved codex CLI path or bare command name
413
+ * @param target - The instance being started
414
+ * @returns `<assignments> <codex>`, or `executablePath` unchanged when
415
+ * injection is off, the ids are unusable, or the file could not be written
416
+ */
417
+ function buildCodexLaunchCommand(executablePath, target, options = {}) {
418
+ if (!(0, hook_settings_generator_1.isHookInjectionEnabled)())
419
+ return executablePath;
420
+ const instanceId = target.instanceId ?? tool_id_1.CODEX_CLI_TOOL_ID;
421
+ if (!(0, path_validator_1.isValidWorktreeId)(target.worktreeId) || !(0, types_1.isValidInstanceId)(instanceId)) {
422
+ // Both become URL parameters the receiver re-validates; a value that would
423
+ // be rejected there is not worth injecting.
424
+ logger.warn('codex-hooks-invalid-correlation-key', { worktreeId: target.worktreeId });
425
+ return executablePath;
426
+ }
427
+ try {
428
+ const settingsPath = writeCodexHookSettings(options);
429
+ if (!settingsPath)
430
+ return executablePath;
431
+ const port = options.port ?? (0, env_1.getServerPort)();
432
+ const query = new URLSearchParams({
433
+ tool: tool_id_1.CODEX_CLI_TOOL_ID,
434
+ worktreeId: target.worktreeId,
435
+ instanceId,
436
+ });
437
+ const assignments = [
438
+ // Pin the home the file was just written to, rather than trusting the
439
+ // agent to resolve the same one. Measured on 2026-08-13: a tmux session
440
+ // inherits the environment of the *tmux server*, which was started long
441
+ // before CommandMate and knows nothing about its environment — so a
442
+ // server run with `CODEX_HOME=…` wrote its hooks into that directory
443
+ // while the codex it launched read `~/.codex` and found none. No error,
444
+ // no missing file, simply zero events. Naming it here makes "the file we
445
+ // wrote" and "the file codex reads" the same file by construction; in the
446
+ // ordinary case where nothing sets it, this is the default codex would
447
+ // have picked anyway.
448
+ `${exports.CODEX_HOME_ENV_VAR}=${(0, hook_settings_generator_1.shellQuote)(getCodexHome(options))}`,
449
+ `${exports.CODEX_TOOL_ENV_VAR}=${(0, hook_settings_generator_1.shellQuote)(tool_id_1.CODEX_CLI_TOOL_ID)}`,
450
+ `${exports.CODEX_WORKTREE_ID_ENV_VAR}=${(0, hook_settings_generator_1.shellQuote)(target.worktreeId)}`,
451
+ `${exports.CODEX_INSTANCE_ID_ENV_VAR}=${(0, hook_settings_generator_1.shellQuote)(instanceId)}`,
452
+ `${exports.CODEX_EVENT_URL_ENV_VAR}=${(0, hook_settings_generator_1.shellQuote)(`http://${CODEX_HOOK_HOST}:${port}${hook_settings_generator_1.AGENT_EVENT_PATH}`)}`,
453
+ `${exports.CODEX_PERMISSION_URL_ENV_VAR}=${(0, hook_settings_generator_1.shellQuote)(`http://${CODEX_HOOK_HOST}:${port}${hook_settings_generator_1.PERMISSION_REQUEST_PATH}?${query.toString()}`)}`,
454
+ ];
455
+ const trust = isCodexHookTrustBypassEnabled() ? ` ${exports.CODEX_HOOK_TRUST_BYPASS_FLAG}` : '';
456
+ return `${assignments.join(' ')} ${(0, hook_settings_generator_1.shellQuote)(executablePath)}${trust}`;
457
+ }
458
+ catch (error) {
459
+ logger.warn('codex-hooks-config-write-failed', {
460
+ worktreeId: target.worktreeId,
461
+ error: error instanceof Error ? error.message : String(error),
462
+ });
463
+ return executablePath;
464
+ }
465
+ }