commandmate 0.16.0 → 0.18.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 (616) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +298 -228
  3. package/.next/app-path-routes-manifest.json +39 -29
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +57 -0
  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_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/fs/recent-paths/route.js +1 -1
  43. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/hooks/agent-event/route.js +1 -0
  45. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -0
  46. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -0
  47. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  48. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  49. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/metrics/vibe/route.js +37 -0
  51. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -0
  52. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -0
  53. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  55. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  59. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/clone/route.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/restore/route.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  71. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/route.js +1 -1
  73. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/scan/route.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/sync/route.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +4 -0
  90. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -0
  91. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -0
  92. package/.next/server/app/api/tasks/[taskId]/route.js +4 -0
  93. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -0
  94. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -0
  95. package/.next/server/app/api/templates/[id]/route.js +1 -1
  96. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/templates/route.js +1 -1
  98. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/todos/route.js +1 -1
  100. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -0
  102. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -0
  103. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -0
  104. package/.next/server/app/api/verification/runs/route.js +1 -0
  105. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -0
  106. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -0
  107. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  123. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  195. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  198. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  204. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/skills/route.js +2 -2
  218. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/tasks/route.js +6 -0
  228. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -0
  229. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -0
  230. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  237. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/verify/route.js +4 -0
  249. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -0
  250. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -0
  251. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -0
  252. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -0
  253. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -0
  254. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -0
  255. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -0
  256. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -0
  257. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/route.js +1 -1
  260. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  261. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  263. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  264. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  266. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  267. package/.next/server/app/page_client-reference-manifest.js +1 -1
  268. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/repositories/page.js +1 -1
  270. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/review/page.js +1 -1
  272. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  273. package/.next/server/app/sessions/page.js +1 -1
  274. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  275. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  276. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/worktrees/[id]/page.js +2 -2
  280. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app-paths-manifest.json +39 -29
  283. package/.next/server/chunks/1068.js +1 -1
  284. package/.next/server/chunks/1117.js +1 -1
  285. package/.next/server/chunks/1503.js +2 -0
  286. package/.next/server/chunks/2366.js +1 -0
  287. package/.next/server/chunks/3042.js +1 -1
  288. package/.next/server/chunks/3736.js +1 -1
  289. package/.next/server/chunks/4444.js +1 -1
  290. package/.next/server/chunks/4689.js +25 -0
  291. package/.next/server/chunks/5381.js +50 -10
  292. package/.next/server/chunks/5959.js +3 -3
  293. package/.next/server/chunks/6130.js +1 -1
  294. package/.next/server/chunks/6274.js +13 -0
  295. package/.next/server/chunks/646.js +1 -1
  296. package/.next/server/chunks/8681.js +1 -1
  297. package/.next/server/chunks/8807.js +194 -51
  298. package/.next/server/chunks/8856.js +4 -0
  299. package/.next/server/chunks/9687.js +2 -2
  300. package/.next/server/middleware-manifest.json +5 -5
  301. package/.next/server/pages/500.html +1 -1
  302. package/.next/server/server-reference-manifest.json +1 -1
  303. package/.next/static/-BSmW0Ae2YsxyCl_ue7_d/_buildManifest.js +1 -0
  304. package/.next/static/chunks/{4560-8ffb0bb19f2ba998.js → 4560-0917ae2e6a0e5400.js} +1 -1
  305. package/.next/static/chunks/{6488-c2a968ec806975c2.js → 6488-109e3825c7249e47.js} +1 -1
  306. package/.next/static/chunks/app/api/app/update/route-8440b6c72bed83a1.js +1 -0
  307. package/.next/static/chunks/app/api/app/update-check/route-8440b6c72bed83a1.js +1 -0
  308. package/.next/static/chunks/app/api/assistant/conversation/route-8440b6c72bed83a1.js +1 -0
  309. package/.next/static/chunks/app/api/assistant/current-output/route-8440b6c72bed83a1.js +1 -0
  310. package/.next/static/chunks/app/api/assistant/messages/route-8440b6c72bed83a1.js +1 -0
  311. package/.next/static/chunks/app/api/assistant/session/route-8440b6c72bed83a1.js +1 -0
  312. package/.next/static/chunks/app/api/assistant/start/route-8440b6c72bed83a1.js +1 -0
  313. package/.next/static/chunks/app/api/assistant/terminal/route-8440b6c72bed83a1.js +1 -0
  314. package/.next/static/chunks/app/api/assistant/tools/route-8440b6c72bed83a1.js +1 -0
  315. package/.next/static/chunks/app/api/auth/login/route-8440b6c72bed83a1.js +1 -0
  316. package/.next/static/chunks/app/api/auth/logout/route-8440b6c72bed83a1.js +1 -0
  317. package/.next/static/chunks/app/api/auth/status/route-8440b6c72bed83a1.js +1 -0
  318. package/.next/static/chunks/app/api/daily-summary/route-8440b6c72bed83a1.js +1 -0
  319. package/.next/static/chunks/app/api/daily-summary/status/route-8440b6c72bed83a1.js +1 -0
  320. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8440b6c72bed83a1.js +1 -0
  321. package/.next/static/chunks/app/api/external-apps/[id]/route-8440b6c72bed83a1.js +1 -0
  322. package/.next/static/chunks/app/api/external-apps/route-8440b6c72bed83a1.js +1 -0
  323. package/.next/static/chunks/app/api/fs/browse/route-8440b6c72bed83a1.js +1 -0
  324. package/.next/static/chunks/app/api/fs/recent-paths/route-8440b6c72bed83a1.js +1 -0
  325. package/.next/static/chunks/app/api/hooks/agent-event/route-8440b6c72bed83a1.js +1 -0
  326. package/.next/static/chunks/app/api/hooks/claude-done/route-8440b6c72bed83a1.js +1 -0
  327. package/.next/static/chunks/app/api/metrics/vibe/route-8440b6c72bed83a1.js +1 -0
  328. package/.next/static/chunks/app/api/ollama/models/route-8440b6c72bed83a1.js +1 -0
  329. package/.next/static/chunks/app/api/push/subscriptions/route-8440b6c72bed83a1.js +1 -0
  330. package/.next/static/chunks/app/api/push/vapid/route-8440b6c72bed83a1.js +1 -0
  331. package/.next/static/chunks/app/api/repositories/[id]/route-8440b6c72bed83a1.js +1 -0
  332. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +1 -0
  333. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8440b6c72bed83a1.js +1 -0
  334. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8440b6c72bed83a1.js +1 -0
  335. package/.next/static/chunks/app/api/repositories/clone/route-8440b6c72bed83a1.js +1 -0
  336. package/.next/static/chunks/app/api/repositories/excluded/route-8440b6c72bed83a1.js +1 -0
  337. package/.next/static/chunks/app/api/repositories/restore/route-8440b6c72bed83a1.js +1 -0
  338. package/.next/static/chunks/app/api/repositories/route-8440b6c72bed83a1.js +1 -0
  339. package/.next/static/chunks/app/api/repositories/scan/route-8440b6c72bed83a1.js +1 -0
  340. package/.next/static/chunks/app/api/repositories/sync/route-8440b6c72bed83a1.js +1 -0
  341. package/.next/static/chunks/app/api/repositories/validate-path/route-8440b6c72bed83a1.js +1 -0
  342. package/.next/static/chunks/app/api/sidebar/group-order/route-8440b6c72bed83a1.js +1 -0
  343. package/.next/static/chunks/app/api/skills/[id]/route-8440b6c72bed83a1.js +1 -0
  344. package/.next/static/chunks/app/api/skills/installations/route-8440b6c72bed83a1.js +1 -0
  345. package/.next/static/chunks/app/api/skills/operations/route-8440b6c72bed83a1.js +1 -0
  346. package/.next/static/chunks/app/api/skills/reindex/route-8440b6c72bed83a1.js +1 -0
  347. package/.next/static/chunks/app/api/skills/route-8440b6c72bed83a1.js +1 -0
  348. package/.next/static/chunks/app/api/slash-commands/route-8440b6c72bed83a1.js +1 -0
  349. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8440b6c72bed83a1.js +1 -0
  350. package/.next/static/chunks/app/api/tasks/[taskId]/route-8440b6c72bed83a1.js +1 -0
  351. package/.next/static/chunks/app/api/templates/[id]/route-8440b6c72bed83a1.js +1 -0
  352. package/.next/static/chunks/app/api/templates/route-8440b6c72bed83a1.js +1 -0
  353. package/.next/static/chunks/app/api/todos/route-8440b6c72bed83a1.js +1 -0
  354. package/.next/static/chunks/app/api/verification/runs/[runId]/route-8440b6c72bed83a1.js +1 -0
  355. package/.next/static/chunks/app/api/verification/runs/route-8440b6c72bed83a1.js +1 -0
  356. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8440b6c72bed83a1.js +1 -0
  357. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8440b6c72bed83a1.js +1 -0
  358. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8440b6c72bed83a1.js +1 -0
  359. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8440b6c72bed83a1.js +1 -0
  360. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8440b6c72bed83a1.js +1 -0
  361. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8440b6c72bed83a1.js +1 -0
  362. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8440b6c72bed83a1.js +1 -0
  363. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8440b6c72bed83a1.js +1 -0
  364. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8440b6c72bed83a1.js +1 -0
  365. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8440b6c72bed83a1.js +1 -0
  366. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8440b6c72bed83a1.js +1 -0
  367. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8440b6c72bed83a1.js +1 -0
  368. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8440b6c72bed83a1.js +1 -0
  369. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8440b6c72bed83a1.js +1 -0
  370. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8440b6c72bed83a1.js +1 -0
  371. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8440b6c72bed83a1.js +1 -0
  372. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8440b6c72bed83a1.js +1 -0
  373. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8440b6c72bed83a1.js +1 -0
  374. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8440b6c72bed83a1.js +1 -0
  375. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8440b6c72bed83a1.js +1 -0
  376. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8440b6c72bed83a1.js +1 -0
  377. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8440b6c72bed83a1.js +1 -0
  378. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8440b6c72bed83a1.js +1 -0
  379. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8440b6c72bed83a1.js +1 -0
  380. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8440b6c72bed83a1.js +1 -0
  381. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8440b6c72bed83a1.js +1 -0
  382. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8440b6c72bed83a1.js +1 -0
  383. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8440b6c72bed83a1.js +1 -0
  384. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8440b6c72bed83a1.js +1 -0
  385. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8440b6c72bed83a1.js +1 -0
  386. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8440b6c72bed83a1.js +1 -0
  387. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8440b6c72bed83a1.js +1 -0
  388. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8440b6c72bed83a1.js +1 -0
  389. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8440b6c72bed83a1.js +1 -0
  390. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8440b6c72bed83a1.js +1 -0
  391. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8440b6c72bed83a1.js +1 -0
  392. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8440b6c72bed83a1.js +1 -0
  393. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8440b6c72bed83a1.js +1 -0
  394. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8440b6c72bed83a1.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8440b6c72bed83a1.js +1 -0
  396. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8440b6c72bed83a1.js +1 -0
  397. package/.next/static/chunks/app/api/worktrees/[id]/route-8440b6c72bed83a1.js +1 -0
  398. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8440b6c72bed83a1.js +1 -0
  399. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8440b6c72bed83a1.js +1 -0
  400. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8440b6c72bed83a1.js +1 -0
  401. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8440b6c72bed83a1.js +1 -0
  402. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8440b6c72bed83a1.js +1 -0
  403. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8440b6c72bed83a1.js +1 -0
  404. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8440b6c72bed83a1.js +1 -0
  405. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8440b6c72bed83a1.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8440b6c72bed83a1.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8440b6c72bed83a1.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8440b6c72bed83a1.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8440b6c72bed83a1.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8440b6c72bed83a1.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8440b6c72bed83a1.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8440b6c72bed83a1.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8440b6c72bed83a1.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8440b6c72bed83a1.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8440b6c72bed83a1.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8440b6c72bed83a1.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8440b6c72bed83a1.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8440b6c72bed83a1.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8440b6c72bed83a1.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8440b6c72bed83a1.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8440b6c72bed83a1.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8440b6c72bed83a1.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8440b6c72bed83a1.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/route-8440b6c72bed83a1.js +1 -0
  426. package/.next/static/chunks/app/manifest.webmanifest/route-8440b6c72bed83a1.js +1 -0
  427. package/.next/static/chunks/app/proxy/[...path]/route-8440b6c72bed83a1.js +1 -0
  428. package/.next/static/chunks/app/repositories/page-1ed1e5a542ecc168.js +1 -0
  429. package/.next/static/chunks/app/review/{page-f431d630097c2e85.js → page-b559bfb11c46931b.js} +1 -1
  430. package/.next/static/chunks/app/sessions/{page-20f07a99db64d2ca.js → page-3fa7e767d0ab3889.js} +1 -1
  431. package/.next/static/chunks/app/worktrees/[id]/page-12b3c5f32fc6094e.js +1 -0
  432. package/.next/trace +12 -11
  433. package/.next/types/app/api/hooks/agent-event/route.ts +347 -0
  434. package/.next/types/app/api/metrics/vibe/route.ts +347 -0
  435. package/.next/types/app/api/tasks/[taskId]/cancel/route.ts +347 -0
  436. package/.next/types/app/api/tasks/[taskId]/route.ts +347 -0
  437. package/.next/types/app/api/verification/runs/[runId]/route.ts +347 -0
  438. package/.next/types/app/api/verification/runs/route.ts +347 -0
  439. package/.next/types/app/api/worktrees/[id]/tasks/route.ts +347 -0
  440. package/.next/types/app/api/worktrees/[id]/verify/route.ts +347 -0
  441. package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/route.ts +347 -0
  442. package/.next/types/app/api/worktrees/[id]/verify/runs/route.ts +347 -0
  443. package/.next/types/routes.d.ts +11 -1
  444. package/.next/types/validator.ts +90 -0
  445. package/dist/cli/commands/report.d.ts +1 -0
  446. package/dist/cli/commands/report.d.ts.map +1 -1
  447. package/dist/cli/commands/report.js +54 -0
  448. package/dist/cli/commands/send.d.ts.map +1 -1
  449. package/dist/cli/commands/send.js +116 -14
  450. package/dist/cli/commands/task.d.ts +11 -0
  451. package/dist/cli/commands/task.d.ts.map +1 -0
  452. package/dist/cli/commands/task.js +126 -0
  453. package/dist/cli/commands/verify.d.ts +19 -0
  454. package/dist/cli/commands/verify.d.ts.map +1 -0
  455. package/dist/cli/commands/verify.js +229 -0
  456. package/dist/cli/commands/wait.d.ts +2 -0
  457. package/dist/cli/commands/wait.d.ts.map +1 -1
  458. package/dist/cli/commands/wait.js +128 -13
  459. package/dist/cli/docs/agent-operations.d.ts +2 -2
  460. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  461. package/dist/cli/docs/agent-operations.js +92 -3
  462. package/dist/cli/program.d.ts.map +1 -1
  463. package/dist/cli/program.js +6 -0
  464. package/dist/cli/types/api-responses.d.ts +180 -0
  465. package/dist/cli/types/api-responses.d.ts.map +1 -1
  466. package/dist/cli/types/index.d.ts +82 -0
  467. package/dist/cli/types/index.d.ts.map +1 -1
  468. package/dist/cli/types/index.js +30 -1
  469. package/dist/cli/utils/api-client.d.ts +8 -0
  470. package/dist/cli/utils/api-client.d.ts.map +1 -1
  471. package/dist/cli/utils/verify-runner.d.ts +63 -0
  472. package/dist/cli/utils/verify-runner.d.ts.map +1 -0
  473. package/dist/cli/utils/verify-runner.js +175 -0
  474. package/dist/server/server.js +15 -0
  475. package/dist/server/src/config/auto-yes-config.js +22 -0
  476. package/dist/server/src/lib/auto-yes-poller.js +34 -2
  477. package/dist/server/src/lib/auto-yes-state.js +6 -19
  478. package/dist/server/src/lib/db/db.js +34 -1
  479. package/dist/server/src/lib/db/migrations/index.js +6 -0
  480. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  481. package/dist/server/src/lib/db/migrations/v49-verification-runs.js +86 -0
  482. package/dist/server/src/lib/db/migrations/v50-tasks.js +68 -0
  483. package/dist/server/src/lib/db/migrations/v51-task-events.js +58 -0
  484. package/dist/server/src/lib/db/task-events-db.js +59 -0
  485. package/dist/server/src/lib/db/tasks-db.js +263 -0
  486. package/dist/server/src/lib/db/verification-db.js +290 -0
  487. package/dist/server/src/lib/polling/auto-yes-policy.js +117 -0
  488. package/dist/server/src/lib/polling/auto-yes-resolver.js +144 -4
  489. package/dist/server/src/lib/polling/response-checker.js +8 -0
  490. package/dist/server/src/lib/session/agent-event-state.js +46 -0
  491. package/dist/server/src/lib/session/current-output-builder.js +4 -0
  492. package/dist/server/src/lib/session/status-mapping.js +146 -0
  493. package/dist/server/src/lib/tasks/contract-parser.js +385 -0
  494. package/dist/server/src/lib/tasks/task-state-machine.js +183 -0
  495. package/dist/server/src/lib/tasks/task-transition-service.js +106 -0
  496. package/dist/server/src/lib/verification/verification-reconciler.js +49 -0
  497. package/dist/server/src/types/sidebar.js +7 -20
  498. package/package.json +5 -2
  499. package/scripts/hooks/cmate-agent-event.sh +175 -0
  500. package/.next/server/chunks/2064.js +0 -2
  501. package/.next/static/AKqbAyuzbFfg05qpbCI_K/_buildManifest.js +0 -1
  502. package/.next/static/chunks/app/api/app/update/route-55e398bd20e2d7a9.js +0 -1
  503. package/.next/static/chunks/app/api/app/update-check/route-55e398bd20e2d7a9.js +0 -1
  504. package/.next/static/chunks/app/api/assistant/conversation/route-55e398bd20e2d7a9.js +0 -1
  505. package/.next/static/chunks/app/api/assistant/current-output/route-55e398bd20e2d7a9.js +0 -1
  506. package/.next/static/chunks/app/api/assistant/messages/route-55e398bd20e2d7a9.js +0 -1
  507. package/.next/static/chunks/app/api/assistant/session/route-55e398bd20e2d7a9.js +0 -1
  508. package/.next/static/chunks/app/api/assistant/start/route-55e398bd20e2d7a9.js +0 -1
  509. package/.next/static/chunks/app/api/assistant/terminal/route-55e398bd20e2d7a9.js +0 -1
  510. package/.next/static/chunks/app/api/assistant/tools/route-55e398bd20e2d7a9.js +0 -1
  511. package/.next/static/chunks/app/api/auth/login/route-55e398bd20e2d7a9.js +0 -1
  512. package/.next/static/chunks/app/api/auth/logout/route-55e398bd20e2d7a9.js +0 -1
  513. package/.next/static/chunks/app/api/auth/status/route-55e398bd20e2d7a9.js +0 -1
  514. package/.next/static/chunks/app/api/daily-summary/route-55e398bd20e2d7a9.js +0 -1
  515. package/.next/static/chunks/app/api/daily-summary/status/route-55e398bd20e2d7a9.js +0 -1
  516. package/.next/static/chunks/app/api/external-apps/[id]/health/route-55e398bd20e2d7a9.js +0 -1
  517. package/.next/static/chunks/app/api/external-apps/[id]/route-55e398bd20e2d7a9.js +0 -1
  518. package/.next/static/chunks/app/api/external-apps/route-55e398bd20e2d7a9.js +0 -1
  519. package/.next/static/chunks/app/api/fs/browse/route-55e398bd20e2d7a9.js +0 -1
  520. package/.next/static/chunks/app/api/fs/recent-paths/route-55e398bd20e2d7a9.js +0 -1
  521. package/.next/static/chunks/app/api/hooks/claude-done/route-55e398bd20e2d7a9.js +0 -1
  522. package/.next/static/chunks/app/api/ollama/models/route-55e398bd20e2d7a9.js +0 -1
  523. package/.next/static/chunks/app/api/push/subscriptions/route-55e398bd20e2d7a9.js +0 -1
  524. package/.next/static/chunks/app/api/push/vapid/route-55e398bd20e2d7a9.js +0 -1
  525. package/.next/static/chunks/app/api/repositories/[id]/route-55e398bd20e2d7a9.js +0 -1
  526. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-55e398bd20e2d7a9.js +0 -1
  527. package/.next/static/chunks/app/api/repositories/[id]/todos/route-55e398bd20e2d7a9.js +0 -1
  528. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-55e398bd20e2d7a9.js +0 -1
  529. package/.next/static/chunks/app/api/repositories/clone/route-55e398bd20e2d7a9.js +0 -1
  530. package/.next/static/chunks/app/api/repositories/excluded/route-55e398bd20e2d7a9.js +0 -1
  531. package/.next/static/chunks/app/api/repositories/restore/route-55e398bd20e2d7a9.js +0 -1
  532. package/.next/static/chunks/app/api/repositories/route-55e398bd20e2d7a9.js +0 -1
  533. package/.next/static/chunks/app/api/repositories/scan/route-55e398bd20e2d7a9.js +0 -1
  534. package/.next/static/chunks/app/api/repositories/sync/route-55e398bd20e2d7a9.js +0 -1
  535. package/.next/static/chunks/app/api/repositories/validate-path/route-55e398bd20e2d7a9.js +0 -1
  536. package/.next/static/chunks/app/api/sidebar/group-order/route-55e398bd20e2d7a9.js +0 -1
  537. package/.next/static/chunks/app/api/skills/[id]/route-55e398bd20e2d7a9.js +0 -1
  538. package/.next/static/chunks/app/api/skills/installations/route-55e398bd20e2d7a9.js +0 -1
  539. package/.next/static/chunks/app/api/skills/operations/route-55e398bd20e2d7a9.js +0 -1
  540. package/.next/static/chunks/app/api/skills/reindex/route-55e398bd20e2d7a9.js +0 -1
  541. package/.next/static/chunks/app/api/skills/route-55e398bd20e2d7a9.js +0 -1
  542. package/.next/static/chunks/app/api/slash-commands/route-55e398bd20e2d7a9.js +0 -1
  543. package/.next/static/chunks/app/api/templates/[id]/route-55e398bd20e2d7a9.js +0 -1
  544. package/.next/static/chunks/app/api/templates/route-55e398bd20e2d7a9.js +0 -1
  545. package/.next/static/chunks/app/api/todos/route-55e398bd20e2d7a9.js +0 -1
  546. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-55e398bd20e2d7a9.js +0 -1
  547. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-55e398bd20e2d7a9.js +0 -1
  548. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-55e398bd20e2d7a9.js +0 -1
  549. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-55e398bd20e2d7a9.js +0 -1
  550. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-55e398bd20e2d7a9.js +0 -1
  551. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-55e398bd20e2d7a9.js +0 -1
  552. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-55e398bd20e2d7a9.js +0 -1
  553. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-55e398bd20e2d7a9.js +0 -1
  554. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-55e398bd20e2d7a9.js +0 -1
  555. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-55e398bd20e2d7a9.js +0 -1
  556. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-55e398bd20e2d7a9.js +0 -1
  557. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-55e398bd20e2d7a9.js +0 -1
  558. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-55e398bd20e2d7a9.js +0 -1
  559. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-55e398bd20e2d7a9.js +0 -1
  560. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-55e398bd20e2d7a9.js +0 -1
  561. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-55e398bd20e2d7a9.js +0 -1
  562. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-55e398bd20e2d7a9.js +0 -1
  563. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-55e398bd20e2d7a9.js +0 -1
  564. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-55e398bd20e2d7a9.js +0 -1
  565. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-55e398bd20e2d7a9.js +0 -1
  566. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-55e398bd20e2d7a9.js +0 -1
  567. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-55e398bd20e2d7a9.js +0 -1
  568. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-55e398bd20e2d7a9.js +0 -1
  569. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-55e398bd20e2d7a9.js +0 -1
  570. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-55e398bd20e2d7a9.js +0 -1
  571. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-55e398bd20e2d7a9.js +0 -1
  572. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-55e398bd20e2d7a9.js +0 -1
  573. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-55e398bd20e2d7a9.js +0 -1
  574. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-55e398bd20e2d7a9.js +0 -1
  575. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-55e398bd20e2d7a9.js +0 -1
  576. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-55e398bd20e2d7a9.js +0 -1
  577. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-55e398bd20e2d7a9.js +0 -1
  578. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-55e398bd20e2d7a9.js +0 -1
  579. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-55e398bd20e2d7a9.js +0 -1
  580. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-55e398bd20e2d7a9.js +0 -1
  581. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-55e398bd20e2d7a9.js +0 -1
  582. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-55e398bd20e2d7a9.js +0 -1
  583. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-55e398bd20e2d7a9.js +0 -1
  584. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-55e398bd20e2d7a9.js +0 -1
  585. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-55e398bd20e2d7a9.js +0 -1
  586. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-55e398bd20e2d7a9.js +0 -1
  587. package/.next/static/chunks/app/api/worktrees/[id]/route-55e398bd20e2d7a9.js +0 -1
  588. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-55e398bd20e2d7a9.js +0 -1
  589. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-55e398bd20e2d7a9.js +0 -1
  590. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-55e398bd20e2d7a9.js +0 -1
  591. package/.next/static/chunks/app/api/worktrees/[id]/search/route-55e398bd20e2d7a9.js +0 -1
  592. package/.next/static/chunks/app/api/worktrees/[id]/send/route-55e398bd20e2d7a9.js +0 -1
  593. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-55e398bd20e2d7a9.js +0 -1
  594. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-55e398bd20e2d7a9.js +0 -1
  595. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-55e398bd20e2d7a9.js +0 -1
  596. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-55e398bd20e2d7a9.js +0 -1
  597. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-55e398bd20e2d7a9.js +0 -1
  598. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-55e398bd20e2d7a9.js +0 -1
  599. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-55e398bd20e2d7a9.js +0 -1
  600. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-55e398bd20e2d7a9.js +0 -1
  601. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-55e398bd20e2d7a9.js +0 -1
  602. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-55e398bd20e2d7a9.js +0 -1
  603. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-55e398bd20e2d7a9.js +0 -1
  604. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-55e398bd20e2d7a9.js +0 -1
  605. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-55e398bd20e2d7a9.js +0 -1
  606. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-55e398bd20e2d7a9.js +0 -1
  607. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-55e398bd20e2d7a9.js +0 -1
  608. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-55e398bd20e2d7a9.js +0 -1
  609. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-55e398bd20e2d7a9.js +0 -1
  610. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-55e398bd20e2d7a9.js +0 -1
  611. package/.next/static/chunks/app/api/worktrees/route-55e398bd20e2d7a9.js +0 -1
  612. package/.next/static/chunks/app/manifest.webmanifest/route-55e398bd20e2d7a9.js +0 -1
  613. package/.next/static/chunks/app/proxy/[...path]/route-55e398bd20e2d7a9.js +0 -1
  614. package/.next/static/chunks/app/repositories/page-3c4fb889da48ce24.js +0 -1
  615. package/.next/static/chunks/app/worktrees/[id]/page-59a63a2c013ec1eb.js +0 -1
  616. /package/.next/static/{AKqbAyuzbFfg05qpbCI_K → -BSmW0Ae2YsxyCl_ue7_d}/_ssgManifest.js +0 -0
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ /**
3
+ * TaskStatus state machine (Issue #1548, Phase 3-1).
4
+ *
5
+ * Pure and side-effect free: given a status and an event, it answers what the
6
+ * status becomes, or `null` when the event does not apply. Phase 2-1 let each
7
+ * firing point decide the next status for itself, which meant the rules lived in
8
+ * six places and agreed with each other only by coincidence. They live here now,
9
+ * and `applyTaskEvent` is the only thing allowed to act on the answer.
10
+ *
11
+ * This is a different layer from `SessionStatus`. SessionStatus is derived from
12
+ * screen-scraped terminal output — low level, volatile, recomputed every poll.
13
+ * TaskStatus is durable and only moves because something *happened*. A
14
+ * SessionStatus reading is at most one of the events that can cause a move; it
15
+ * never writes TaskStatus itself.
16
+ *
17
+ * Rejection is not an error. A prompt detected while a verification run is in
18
+ * flight is an ordinary race, not a bug, so `transitionTask` returns `null` and
19
+ * the caller records the attempt and moves on. Throwing would turn a race into
20
+ * a crashed poller.
21
+ *
22
+ * @module lib/tasks/task-state-machine
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.TASK_EVENTS = void 0;
26
+ exports.transitionTask = transitionTask;
27
+ exports.TASK_EVENTS = [
28
+ 'message_sent',
29
+ 'send_failed',
30
+ 'prompt_detected',
31
+ 'prompt_answered_auto',
32
+ 'prompt_answered_human',
33
+ 'agent_idle',
34
+ 'verify_started',
35
+ 'verify_passed',
36
+ 'verify_failed',
37
+ 'verify_not_started',
38
+ 'cancel',
39
+ ];
40
+ /**
41
+ * The status `current` becomes when `event` happens, or `null` if it does not
42
+ * apply.
43
+ *
44
+ * Both switches are exhaustive by `satisfies never`, so adding a TaskStatus or a
45
+ * TaskEvent fails the build here instead of silently defaulting to "rejected" —
46
+ * a new event that quietly transitions nothing is indistinguishable from one
47
+ * that is wired up wrong.
48
+ */
49
+ function transitionTask(current, event) {
50
+ switch (current) {
51
+ case 'pending':
52
+ // Nothing has been sent yet, so nothing about the agent's behaviour can
53
+ // be true of this task.
54
+ switch (event) {
55
+ case 'message_sent':
56
+ return 'running';
57
+ case 'send_failed':
58
+ return 'failed';
59
+ case 'cancel':
60
+ return 'cancelled';
61
+ case 'prompt_detected':
62
+ case 'prompt_answered_auto':
63
+ case 'prompt_answered_human':
64
+ case 'agent_idle':
65
+ case 'verify_started':
66
+ case 'verify_passed':
67
+ case 'verify_failed':
68
+ case 'verify_not_started':
69
+ return null;
70
+ default:
71
+ return assertNever(event);
72
+ }
73
+ case 'running':
74
+ switch (event) {
75
+ case 'prompt_detected':
76
+ return 'waiting_input';
77
+ // The agent going quiet without a verification run is not a verdict.
78
+ // The status is held and only the event is recorded, so "it stopped
79
+ // producing output" stays visible without being mistaken for "done".
80
+ case 'agent_idle':
81
+ return 'running';
82
+ case 'verify_started':
83
+ return 'verifying';
84
+ case 'send_failed':
85
+ return 'failed';
86
+ case 'cancel':
87
+ return 'cancelled';
88
+ case 'message_sent':
89
+ case 'prompt_answered_auto':
90
+ case 'prompt_answered_human':
91
+ case 'verify_passed':
92
+ case 'verify_failed':
93
+ case 'verify_not_started':
94
+ return null;
95
+ default:
96
+ return assertNever(event);
97
+ }
98
+ case 'waiting_input':
99
+ switch (event) {
100
+ case 'prompt_answered_auto':
101
+ case 'prompt_answered_human':
102
+ return 'running';
103
+ case 'agent_idle':
104
+ return 'running';
105
+ case 'verify_started':
106
+ return 'verifying';
107
+ case 'cancel':
108
+ return 'cancelled';
109
+ case 'message_sent':
110
+ case 'send_failed':
111
+ case 'prompt_detected':
112
+ case 'verify_passed':
113
+ case 'verify_failed':
114
+ case 'verify_not_started':
115
+ return null;
116
+ default:
117
+ return assertNever(event);
118
+ }
119
+ case 'verifying':
120
+ // A run is in flight. Only that run's verdict — or an explicit cancel —
121
+ // moves the task, so a prompt or a send racing the gates cannot overwrite
122
+ // the outcome the gates are about to produce.
123
+ switch (event) {
124
+ case 'verify_passed':
125
+ return 'succeeded';
126
+ case 'verify_failed':
127
+ return 'failed';
128
+ case 'verify_not_started':
129
+ return 'not_started';
130
+ case 'cancel':
131
+ return 'cancelled';
132
+ case 'message_sent':
133
+ case 'send_failed':
134
+ case 'prompt_detected':
135
+ case 'prompt_answered_auto':
136
+ case 'prompt_answered_human':
137
+ case 'agent_idle':
138
+ case 'verify_started':
139
+ return null;
140
+ default:
141
+ return assertNever(event);
142
+ }
143
+ case 'failed':
144
+ case 'not_started':
145
+ // Not the end of the story. Re-instructing an agent whose work did not
146
+ // pass reopens the same task, and the number of times that happens is the
147
+ // fix-loop count Phase 4 Eval reports. Re-running the gates alone reopens
148
+ // it too — a task can fail on a flaky gate and pass on the retry.
149
+ switch (event) {
150
+ case 'message_sent':
151
+ return 'running';
152
+ case 'verify_started':
153
+ return 'verifying';
154
+ case 'cancel':
155
+ return 'cancelled';
156
+ case 'send_failed':
157
+ case 'prompt_detected':
158
+ case 'prompt_answered_auto':
159
+ case 'prompt_answered_human':
160
+ case 'agent_idle':
161
+ case 'verify_passed':
162
+ case 'verify_failed':
163
+ case 'verify_not_started':
164
+ return null;
165
+ default:
166
+ return assertNever(event);
167
+ }
168
+ case 'succeeded':
169
+ case 'cancelled':
170
+ // Closed for good. `succeeded` in particular is a verdict a verification
171
+ // run produced; letting any later event walk it back would make "this
172
+ // task passed" a claim with no fixed meaning.
173
+ return null;
174
+ default:
175
+ return assertNever(current);
176
+ }
177
+ }
178
+ /** Compile-time exhaustiveness guard; unreachable at runtime. */
179
+ function assertNever(value) {
180
+ const _exhaustive = value;
181
+ void _exhaustive;
182
+ return null;
183
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * The only writer of `tasks.status` (Issue #1548, Phase 3-1).
4
+ *
5
+ * `applyTaskEvent` reads the current status, asks the state machine what the
6
+ * event means, and — in one transaction — writes the new status and appends the
7
+ * event. Phase 2-1 had each firing point call `updateTaskStatus` with a status
8
+ * it chose itself; `updateTaskStatus` is no longer reachable from the
9
+ * `@/lib/db` barrel so that this is the only door.
10
+ *
11
+ * A rejected transition still writes a `task_events` row (`to_status = NULL`).
12
+ * The event happened; the machine declined to act on it. That distinction is
13
+ * what tells a wiring bug apart from a race, and it is invisible if rejected
14
+ * events are dropped.
15
+ *
16
+ * The UPDATE and the INSERT are one transaction because a status with no event
17
+ * behind it, or an event whose status never landed, would each make the log
18
+ * lie about the table it exists to explain. better-sqlite3 is synchronous, so a
19
+ * transaction here also serialises concurrent callers with no further work.
20
+ *
21
+ * @module lib/tasks/task-transition-service
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.applyTaskEvent = applyTaskEvent;
25
+ exports.applyEventToActiveTask = applyEventToActiveTask;
26
+ const tasks_db_1 = require("../../lib/db/tasks-db");
27
+ const task_events_db_1 = require("../../lib/db/task-events-db");
28
+ const logger_1 = require("../../lib/logger");
29
+ const task_state_machine_1 = require("./task-state-machine");
30
+ const logger = (0, logger_1.createLogger)('lib/tasks/task-transition-service');
31
+ /**
32
+ * Apply `event` to a task.
33
+ *
34
+ * @param payload - Structured detail for the log. `runId` is also written to
35
+ * `tasks.last_verification_run_id` on an accepted transition, so the task's
36
+ * pointer to the run that last judged it and the event naming that run cannot
37
+ * disagree.
38
+ * @returns null when the task does not exist — a deleted worktree takes its
39
+ * tasks with it, and a poller still holding the id must not crash for it
40
+ */
41
+ function applyTaskEvent(db, taskId, event, payload) {
42
+ const apply = db.transaction(() => {
43
+ const task = (0, tasks_db_1.getTask)(db, taskId);
44
+ if (!task) {
45
+ return null;
46
+ }
47
+ const fromStatus = task.status;
48
+ const toStatus = (0, task_state_machine_1.transitionTask)(fromStatus, event);
49
+ const now = Date.now();
50
+ const eventId = (0, task_events_db_1.insertTaskEvent)(db, {
51
+ taskId,
52
+ event,
53
+ fromStatus,
54
+ toStatus,
55
+ payload,
56
+ createdAt: now,
57
+ });
58
+ if (toStatus === null) {
59
+ return { task, fromStatus, toStatus: null, eventId };
60
+ }
61
+ const updated = (0, tasks_db_1.updateTaskStatus)(db, taskId, toStatus, payload?.runId === undefined ? {} : { lastVerificationRunId: payload.runId });
62
+ return { task: updated, fromStatus, toStatus, eventId };
63
+ });
64
+ const result = apply();
65
+ if (result === null) {
66
+ logger.warn('task-event-unknown-task', { taskId, event });
67
+ }
68
+ else if (result.toStatus === null) {
69
+ logger.warn('task-event-rejected', { taskId, event, fromStatus: result.fromStatus });
70
+ }
71
+ return result;
72
+ }
73
+ /**
74
+ * Raise `event` on whichever task is currently governing one agent instance.
75
+ *
76
+ * The no-op is the important case. Prompts, auto-answers and human replies
77
+ * happen constantly in sessions that were never sent a contract, and every
78
+ * firing point calls this unconditionally — so "no active task" has to mean
79
+ * "nothing happens", not "nothing to do, but raise something anyway". Anything
80
+ * else would make Phase 3-1 a behaviour change for contract-less use.
81
+ *
82
+ * Never throws: these callers are pollers and API routes whose real job is the
83
+ * message itself, and a task-log failure must not take that down with it.
84
+ *
85
+ * @param instanceId - Agent instance id; the tool id itself for the primary
86
+ * @returns The result, or null when no active task governs this instance
87
+ */
88
+ function applyEventToActiveTask(db, worktreeId, cliToolId, instanceId, event, payload) {
89
+ try {
90
+ const task = (0, tasks_db_1.getActiveTaskForInstance)(db, worktreeId, cliToolId, instanceId);
91
+ if (!task) {
92
+ return null;
93
+ }
94
+ return applyTaskEvent(db, task.id, event, payload);
95
+ }
96
+ catch (error) {
97
+ logger.warn('task-event-failed', {
98
+ worktreeId,
99
+ cliToolId,
100
+ instanceId,
101
+ event,
102
+ error: error instanceof Error ? error.message : String(error),
103
+ });
104
+ return null;
105
+ }
106
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * Startup recovery for verification runs orphaned by a restart (Issue #1543).
4
+ *
5
+ * `verification_runs` is opened in `running` state and closed when the gates
6
+ * finish, so a run in flight when the process dies leaves a `running` row that
7
+ * nothing will ever close. Those rows are not merely stale: the per-worktree
8
+ * conflict check treats an open run as "verification in progress", so a single
9
+ * crash would lock that worktree out of verification permanently.
10
+ *
11
+ * Every run this finds is an orphan by construction — gate execution lives in
12
+ * process memory, so after a restart none of them is actually running. They are
13
+ * closed as `error` rather than `failed`: no gate reached a verdict about the
14
+ * work, which is exactly the distinction `error` encodes.
15
+ *
16
+ * Follows the shape of {@link reconcileAllAssistantExecutions}
17
+ * (`src/lib/assistant/non-interactive-execution-reconciler.ts`).
18
+ *
19
+ * @module lib/verification/verification-reconciler
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.reconcileOrphanVerificationRuns = reconcileOrphanVerificationRuns;
23
+ const db_1 = require("../../lib/db");
24
+ const RECONCILE_NOTE = '[reconciled after server restart: the runner process is gone]';
25
+ /**
26
+ * Close every `running` verification run and its open gate results.
27
+ *
28
+ * @returns counts of what was closed, so startup can log a non-zero recovery
29
+ */
30
+ function reconcileOrphanVerificationRuns(db) {
31
+ const report = { runs: 0, gates: 0 };
32
+ for (const run of (0, db_1.listRunningVerificationRuns)(db)) {
33
+ const detail = (0, db_1.getVerificationRun)(db, run.id);
34
+ for (const gate of detail?.gates ?? []) {
35
+ if (gate.status !== 'running')
36
+ continue;
37
+ (0, db_1.finishGateResult)(db, gate.id, {
38
+ status: 'error',
39
+ exitCode: null,
40
+ durationMs: null,
41
+ logTail: [gate.logTail, RECONCILE_NOTE].filter(Boolean).join('\n'),
42
+ });
43
+ report.gates += 1;
44
+ }
45
+ (0, db_1.finishVerificationRun)(db, run.id, 'error');
46
+ report.runs += 1;
47
+ }
48
+ return report;
49
+ }
@@ -5,28 +5,15 @@
5
5
  * Types for sidebar components and branch status display
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.deriveCliStatus = deriveCliStatus;
8
+ exports.deriveCliStatus = void 0;
9
9
  exports.aggregateCliStatus = aggregateCliStatus;
10
10
  exports.formatCliStatusBreakdown = formatCliStatusBreakdown;
11
11
  exports.calculateHasUnread = calculateHasUnread;
12
12
  exports.toBranchItem = toBranchItem;
13
13
  const types_1 = require("../lib/cli-tools/types");
14
14
  const selected_agents_validator_1 = require("../lib/selected-agents-validator");
15
- /**
16
- * Derive BranchStatus from per-CLI tool session status flags.
17
- * Shared by sidebar (toBranchItem) and WorktreeDetailRefactored tab dots.
18
- */
19
- function deriveCliStatus(toolStatus) {
20
- if (!toolStatus)
21
- return 'idle';
22
- if (toolStatus.isWaitingForResponse)
23
- return 'waiting';
24
- if (toolStatus.isProcessing)
25
- return 'running';
26
- if (toolStatus.isRunning)
27
- return 'ready';
28
- return 'idle';
29
- }
15
+ const status_mapping_1 = require("../lib/session/status-mapping");
16
+ Object.defineProperty(exports, "deriveCliStatus", { enumerable: true, get: function () { return status_mapping_1.deriveCliStatus; } });
30
17
  /**
31
18
  * Aggregate per-agent CLI statuses into a single representative BranchStatus
32
19
  * for the sidebar's single status indicator (Issue #867).
@@ -140,7 +127,7 @@ function deriveSidebarCliStatus(worktree) {
140
127
  if (!byInstance) {
141
128
  const agents = worktree.selectedAgents ?? selected_agents_validator_1.DEFAULT_SELECTED_AGENTS;
142
129
  for (const agent of agents) {
143
- cliStatus[agent] = deriveCliStatus(worktree.sessionStatusByCli?.[agent]);
130
+ cliStatus[agent] = (0, status_mapping_1.deriveCliStatus)(worktree.sessionStatusByCli?.[agent]);
144
131
  cliStatusLabels[agent] = (0, types_1.getCliToolDisplayName)(agent);
145
132
  }
146
133
  return { cliStatus, cliStatusLabels };
@@ -152,7 +139,7 @@ function deriveSidebarCliStatus(worktree) {
152
139
  const rosterIds = new Set();
153
140
  for (const instance of roster) {
154
141
  rosterIds.add(instance.id);
155
- cliStatus[instance.id] = deriveCliStatus(byInstance[instance.id]);
142
+ cliStatus[instance.id] = (0, status_mapping_1.deriveCliStatus)(byInstance[instance.id]);
156
143
  cliStatusLabels[instance.id] = (0, types_1.getInstanceLabel)(instance);
157
144
  }
158
145
  // Surface any RUNNING instance missing from the roster (e.g. a `claude`
@@ -161,7 +148,7 @@ function deriveSidebarCliStatus(worktree) {
161
148
  for (const [instanceId, status] of Object.entries(byInstance)) {
162
149
  if (rosterIds.has(instanceId))
163
150
  continue;
164
- const derived = deriveCliStatus(status);
151
+ const derived = (0, status_mapping_1.deriveCliStatus)(status);
165
152
  if (derived === 'idle')
166
153
  continue;
167
154
  cliStatus[instanceId] = derived;
@@ -177,7 +164,7 @@ function deriveSidebarCliStatus(worktree) {
177
164
  */
178
165
  function toBranchItem(worktree) {
179
166
  // Issue #608: Derive top-level status from worktree session flags
180
- const status = deriveCliStatus(worktree.isSessionRunning !== undefined
167
+ const status = (0, status_mapping_1.deriveCliStatus)(worktree.isSessionRunning !== undefined
181
168
  ? {
182
169
  isRunning: worktree.isSessionRunning ?? false,
183
170
  isWaitingForResponse: worktree.isWaitingForResponse ?? false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -32,6 +32,7 @@
32
32
  ".next/",
33
33
  "!.next/cache",
34
34
  "public/",
35
+ "scripts/hooks/",
35
36
  ".env.example"
36
37
  ],
37
38
  "scripts": {
@@ -43,6 +44,7 @@
43
44
  "prepublishOnly": "npm run build:all",
44
45
  "start": "NODE_ENV=production node dist/server/server.js",
45
46
  "lint": "eslint src --ext .js,.jsx,.ts,.tsx",
47
+ "check:tracking": "./scripts/check-commandmate-tracking.sh",
46
48
  "test": "NODE_ENV=test vitest",
47
49
  "test:ui": "NODE_ENV=test vitest --ui",
48
50
  "test:coverage": "NODE_ENV=test vitest --coverage",
@@ -104,7 +106,8 @@
104
106
  "ws": "^8.18.3",
105
107
  "xterm": "^5.3.0",
106
108
  "xterm-addon-fit": "^0.8.0",
107
- "xterm-addon-web-links": "^0.9.0"
109
+ "xterm-addon-web-links": "^0.9.0",
110
+ "yaml": "^2.9.0"
108
111
  },
109
112
  "devDependencies": {
110
113
  "@playwright/test": "^1.56.1",
@@ -0,0 +1,175 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # cmate-agent-event.sh — post a structured agent lifecycle event to CommandMate.
4
+ #
5
+ # Wired into an agent CLI's own completion hook (Claude Code `Stop`, Codex
6
+ # `notify`) so the server learns that a turn ended from the agent itself rather
7
+ # than by reading the terminal. See docs/user-guide/agent-event-hooks.md.
8
+ #
9
+ # Written for bash 3.2 — the version macOS still ships — so no associative
10
+ # arrays, `mapfile`, or `${var^^}`.
11
+ #
12
+ # Exits 0 even when the POST fails: a hook that breaks the agent's session
13
+ # because the CommandMate server happens to be down is worse than a missed
14
+ # event. Pass --strict to propagate the failure instead.
15
+
16
+ set -u
17
+
18
+ PROGRAM_NAME="cmate-agent-event.sh"
19
+
20
+ usage() {
21
+ cat <<'USAGE'
22
+ Usage: cmate-agent-event.sh [options] [JSON]
23
+
24
+ Options:
25
+ --tool ID Agent CLI id (default: $CM_AGENT_TOOL, else "claude")
26
+ --event EVENT stop | notification | session_start (default: "stop")
27
+ --cwd PATH Agent working directory (default: $CLAUDE_PROJECT_DIR, else $PWD)
28
+ --session-id ID Opaque agent session id
29
+ --json JSON Hook payload to read cwd/session/event from
30
+ --stdin-json Read that payload from stdin instead
31
+ --url URL Endpoint (default: http://$CM_HOST:$CM_PORT/api/hooks/agent-event)
32
+ --strict Exit non-zero when the POST fails
33
+ -h, --help Show this help
34
+
35
+ Environment:
36
+ CM_HOST Server host (default: 127.0.0.1)
37
+ CM_PORT Server port (default: 3000)
38
+ CM_HOOK_URL Full endpoint URL; overrides CM_HOST/CM_PORT
39
+ CM_AUTH_TOKEN Sent as "Authorization: Bearer <token>" when set
40
+ USAGE
41
+ }
42
+
43
+ die() {
44
+ printf '%s: %s\n' "$PROGRAM_NAME" "$1" >&2
45
+ exit 2
46
+ }
47
+
48
+ # Extract a flat JSON string field. Good enough for the small, machine-generated
49
+ # payloads agent CLIs pass; anything richer belongs in the --cwd flag.
50
+ json_string_field() {
51
+ printf '%s' "$1" | tr -d '\n' |
52
+ sed -n 's/.*"'"$2"'"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p'
53
+ }
54
+
55
+ # Escape a value for embedding in a JSON string literal.
56
+ json_escape() {
57
+ printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'
58
+ }
59
+
60
+ # Map an agent's own event name onto the API vocabulary.
61
+ map_event_name() {
62
+ case "$1" in
63
+ Stop|SubagentStop|agent-turn-complete) printf 'stop' ;;
64
+ Notification) printf 'notification' ;;
65
+ SessionStart) printf 'session_start' ;;
66
+ *) printf '' ;;
67
+ esac
68
+ }
69
+
70
+ TOOL="${CM_AGENT_TOOL:-claude}"
71
+ EVENT=""
72
+ CWD=""
73
+ SESSION_ID=""
74
+ HOOK_JSON=""
75
+ READ_STDIN=0
76
+ URL="${CM_HOOK_URL:-}"
77
+ STRICT=0
78
+
79
+ while [ $# -gt 0 ]; do
80
+ case "$1" in
81
+ --tool) [ $# -ge 2 ] || die "--tool requires a value"; TOOL="$2"; shift 2 ;;
82
+ --event) [ $# -ge 2 ] || die "--event requires a value"; EVENT="$2"; shift 2 ;;
83
+ --cwd) [ $# -ge 2 ] || die "--cwd requires a value"; CWD="$2"; shift 2 ;;
84
+ --session-id) [ $# -ge 2 ] || die "--session-id requires a value"; SESSION_ID="$2"; shift 2 ;;
85
+ --json) [ $# -ge 2 ] || die "--json requires a value"; HOOK_JSON="$2"; shift 2 ;;
86
+ --url) [ $# -ge 2 ] || die "--url requires a value"; URL="$2"; shift 2 ;;
87
+ --stdin-json) READ_STDIN=1; shift ;;
88
+ --strict) STRICT=1; shift ;;
89
+ -h|--help) usage; exit 0 ;;
90
+ --) shift; break ;;
91
+ -*) die "unknown option: $1" ;;
92
+ # Codex passes its notify payload as a bare positional argument.
93
+ *) HOOK_JSON="$1"; shift ;;
94
+ esac
95
+ done
96
+
97
+ if [ "$READ_STDIN" -eq 1 ]; then
98
+ HOOK_JSON="$(cat)"
99
+ fi
100
+
101
+ if [ -n "$HOOK_JSON" ]; then
102
+ if [ -z "$EVENT" ]; then
103
+ JSON_EVENT="$(json_string_field "$HOOK_JSON" 'hook_event_name')"
104
+ if [ -z "$JSON_EVENT" ]; then
105
+ JSON_EVENT="$(json_string_field "$HOOK_JSON" 'type')"
106
+ fi
107
+ if [ -n "$JSON_EVENT" ]; then
108
+ EVENT="$(map_event_name "$JSON_EVENT")"
109
+ [ -n "$EVENT" ] || die "unrecognized hook event name: $JSON_EVENT"
110
+ fi
111
+ fi
112
+ if [ -z "$SESSION_ID" ]; then
113
+ SESSION_ID="$(json_string_field "$HOOK_JSON" 'session_id')"
114
+ fi
115
+ if [ -z "$SESSION_ID" ]; then
116
+ SESSION_ID="$(json_string_field "$HOOK_JSON" 'turn-id')"
117
+ fi
118
+ fi
119
+
120
+ [ -n "$EVENT" ] || EVENT="stop"
121
+
122
+ case "$EVENT" in
123
+ stop|notification|session_start) ;;
124
+ *) die "--event must be one of: stop, notification, session_start (got \"$EVENT\")" ;;
125
+ esac
126
+
127
+ [ -n "$TOOL" ] || die "--tool must not be empty"
128
+
129
+ if [ -z "$CWD" ]; then
130
+ CWD="${CM_AGENT_CWD:-}"
131
+ fi
132
+ if [ -z "$CWD" ]; then
133
+ CWD="${CLAUDE_PROJECT_DIR:-}"
134
+ fi
135
+ if [ -z "$CWD" ] && [ -n "$HOOK_JSON" ]; then
136
+ CWD="$(json_string_field "$HOOK_JSON" 'cwd')"
137
+ fi
138
+ if [ -z "$CWD" ]; then
139
+ CWD="$PWD"
140
+ fi
141
+
142
+ case "$CWD" in
143
+ /*) ;;
144
+ *) die "--cwd must be an absolute path (got \"$CWD\")" ;;
145
+ esac
146
+
147
+ if [ -z "$URL" ]; then
148
+ URL="http://${CM_HOST:-127.0.0.1}:${CM_PORT:-3000}/api/hooks/agent-event"
149
+ fi
150
+
151
+ BODY="{\"tool\":\"$(json_escape "$TOOL")\""
152
+ BODY="$BODY,\"event\":\"$(json_escape "$EVENT")\""
153
+ BODY="$BODY,\"cwd\":\"$(json_escape "$CWD")\""
154
+ if [ -n "$SESSION_ID" ]; then
155
+ BODY="$BODY,\"sessionId\":\"$(json_escape "$SESSION_ID")\""
156
+ fi
157
+ BODY="$BODY}"
158
+
159
+ # Token via --header rather than the command line of a subprocess: argv is world
160
+ # readable in `ps` on most systems.
161
+ set -- -fsS -X POST -H 'Content-Type: application/json' --max-time "${CM_HOOK_TIMEOUT:-5}"
162
+ if [ -n "${CM_AUTH_TOKEN:-}" ]; then
163
+ set -- "$@" -H "Authorization: Bearer ${CM_AUTH_TOKEN}"
164
+ fi
165
+ set -- "$@" --data-binary "$BODY" "$URL"
166
+
167
+ if curl "$@" >/dev/null; then
168
+ exit 0
169
+ fi
170
+
171
+ printf '%s: failed to POST %s to %s\n' "$PROGRAM_NAME" "$EVENT" "$URL" >&2
172
+ if [ "$STRICT" -eq 1 ]; then
173
+ exit 1
174
+ fi
175
+ exit 0