commandmate 0.26.1 → 0.27.1

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 (840) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +430 -402
  3. package/.next/app-path-routes-manifest.json +32 -28
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/react-loadable-manifest.json +6 -6
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +24 -0
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update-check/route.js +1 -1
  12. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  14. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  15. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js +1 -1
  26. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/terminal/route.js +2 -2
  29. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js +1 -1
  32. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/capabilities/route.js +1 -0
  38. package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
  39. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
  40. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/fs/browse/route.js +2 -2
  46. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  47. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/fs/recent-paths/route.js +2 -2
  49. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  50. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  52. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  53. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/hooks/claude-done/route.js +19 -1
  55. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  56. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  58. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  59. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/push/escalation/route.js +1 -1
  63. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  64. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  66. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/push/vapid/route.js +1 -1
  68. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  69. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  72. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  74. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  76. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/clone/route.js +1 -1
  79. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/repositories/restore/route.js +1 -1
  83. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  84. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/repositories/route.js +1 -1
  86. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  87. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/repositories/scan/route.js +1 -1
  89. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  90. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/repositories/sync/route.js +1 -1
  92. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  93. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  95. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  96. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  104. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  107. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/todos/route.js +1 -1
  111. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  113. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/verification/runs/route.js +1 -1
  115. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -0
  123. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
  124. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
  125. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -1
  131. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  132. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/env/route.js +2 -0
  134. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
  135. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
  136. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  142. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -0
  195. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
  196. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
  197. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -5
  204. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  205. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -6
  210. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  214. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/send/route.js +3 -1
  216. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  237. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route.js +3 -1
  246. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  247. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/route.js +1 -1
  271. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/chat/page.js +2 -2
  274. package/.next/server/app/chat/page.js.nft.json +1 -1
  275. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  276. package/.next/server/app/login/page.js +2 -2
  277. package/.next/server/app/login/page.js.nft.json +1 -1
  278. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/more/page.js +2 -2
  281. package/.next/server/app/more/page.js.nft.json +1 -1
  282. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/page.js +1 -1
  285. package/.next/server/app/page.js.nft.json +1 -1
  286. package/.next/server/app/page_client-reference-manifest.js +1 -1
  287. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/repositories/page.js +2 -2
  289. package/.next/server/app/repositories/page.js.nft.json +1 -1
  290. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  291. package/.next/server/app/review/page.js +1 -1
  292. package/.next/server/app/review/page.js.nft.json +1 -1
  293. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  294. package/.next/server/app/sessions/page.js +1 -1
  295. package/.next/server/app/sessions/page.js.nft.json +1 -1
  296. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/skills/[skillId]/page.js +2 -2
  298. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  299. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/skills/installed/page.js +2 -2
  301. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  302. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  303. package/.next/server/app/skills/page.js +2 -2
  304. package/.next/server/app/skills/page.js.nft.json +1 -1
  305. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  306. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  307. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  308. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  309. package/.next/server/app/worktrees/[id]/page.js +9 -7
  310. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  311. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  312. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  313. package/.next/server/app-paths-manifest.json +32 -28
  314. package/.next/server/chunks/1029.js +1 -1
  315. package/.next/server/chunks/1068.js +3 -1
  316. package/.next/server/chunks/1296.js +1 -1
  317. package/.next/server/chunks/1538.js +7 -0
  318. package/.next/server/chunks/1601.js +2 -2
  319. package/.next/server/chunks/2119.js +1 -1
  320. package/.next/server/chunks/2404.js +3 -2
  321. package/.next/server/chunks/2445.js +1 -1
  322. package/.next/server/chunks/2546.js +1 -1
  323. package/.next/server/chunks/2689.js +13 -0
  324. package/.next/server/chunks/2759.js +8 -0
  325. package/.next/server/chunks/2839.js +1 -0
  326. package/.next/server/chunks/3241.js +1 -1
  327. package/.next/server/chunks/3292.js +1 -0
  328. package/.next/server/chunks/3417.js +1 -1
  329. package/.next/server/chunks/3480.js +1 -17
  330. package/.next/server/chunks/4393.js +1 -1
  331. package/.next/server/chunks/4423.js +1 -0
  332. package/.next/server/chunks/4444.js +22 -8
  333. package/.next/server/chunks/4565.js +3 -0
  334. package/.next/server/chunks/467.js +1 -0
  335. package/.next/server/chunks/4905.js +5 -0
  336. package/.next/server/chunks/5017.js +1 -0
  337. package/.next/server/chunks/5089.js +1 -0
  338. package/.next/server/chunks/5164.js +1 -1
  339. package/.next/server/chunks/5220.js +1 -0
  340. package/.next/server/chunks/5354.js +1 -0
  341. package/.next/server/chunks/552.js +19 -0
  342. package/.next/server/chunks/5571.js +1 -1
  343. package/.next/server/chunks/5998.js +3 -3
  344. package/.next/server/chunks/6130.js +1 -1
  345. package/.next/server/chunks/6274.js +11 -11
  346. package/.next/server/chunks/6285.js +1 -1
  347. package/.next/server/chunks/6401.js +1 -1
  348. package/.next/server/chunks/6781.js +1 -1
  349. package/.next/server/chunks/7472.js +1 -0
  350. package/.next/server/chunks/7506.js +1 -0
  351. package/.next/server/chunks/848.js +1 -1
  352. package/.next/server/chunks/8536.js +1 -1
  353. package/.next/server/chunks/880.js +1 -1
  354. package/.next/server/chunks/8807.js +5 -5
  355. package/.next/server/chunks/9067.js +1 -1
  356. package/.next/server/chunks/9284.js +1 -0
  357. package/.next/server/chunks/9358.js +1 -1
  358. package/.next/server/chunks/9508.js +1 -0
  359. package/.next/server/chunks/9938.js +1 -0
  360. package/.next/server/middleware-build-manifest.js +1 -1
  361. package/.next/server/middleware-manifest.json +5 -5
  362. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  363. package/.next/server/pages/500.html +1 -1
  364. package/.next/server/server-reference-manifest.json +1 -1
  365. package/.next/static/9IXgWfBUtnEnRqnbmErTp/_buildManifest.js +1 -0
  366. package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
  367. package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
  368. package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
  369. package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
  370. package/.next/static/chunks/{6381-0e097c0286155883.js → 6381-8cfe50a5ca5425b1.js} +1 -1
  371. package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
  372. package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
  373. package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
  374. package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
  375. package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
  376. package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
  377. package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
  378. package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
  379. package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
  380. package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
  381. package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
  382. package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
  383. package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
  384. package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
  385. package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
  386. package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
  387. package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
  388. package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
  389. package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
  390. package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
  391. package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
  392. package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
  393. package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
  394. package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
  395. package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
  396. package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
  397. package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
  398. package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
  399. package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
  400. package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
  401. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
  402. package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
  403. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
  404. package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
  405. package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
  406. package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
  407. package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
  408. package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
  409. package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
  410. package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
  411. package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
  412. package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
  413. package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
  414. package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
  415. package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
  416. package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
  417. package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
  418. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
  419. package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
  420. package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
  421. package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
  422. package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
  423. package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
  424. package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
  497. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
  498. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
  499. package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
  500. package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
  501. package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
  502. package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
  503. package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
  504. package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
  505. package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
  506. package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
  507. package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
  508. package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
  509. package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
  510. package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
  511. package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
  512. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
  513. package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
  514. package/.next/static/chunks/app/worktrees/[id]/page-f7b3dfbe757dc6b8.js +1 -0
  515. package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
  516. package/.next/static/css/928e5a8830fbf997.css +1 -0
  517. package/.next/trace +13 -12
  518. package/.next/types/app/api/capabilities/route.ts +347 -0
  519. package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
  520. package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
  521. package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
  522. package/.next/types/routes.d.ts +5 -1
  523. package/.next/types/validator.ts +36 -0
  524. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  525. package/dist/cli/commands/auto-yes.js +40 -2
  526. package/dist/cli/commands/capture.d.ts.map +1 -1
  527. package/dist/cli/commands/capture.js +28 -13
  528. package/dist/cli/commands/instances.d.ts +30 -18
  529. package/dist/cli/commands/instances.d.ts.map +1 -1
  530. package/dist/cli/commands/instances.js +32 -36
  531. package/dist/cli/commands/ls.d.ts.map +1 -1
  532. package/dist/cli/commands/ls.js +73 -1
  533. package/dist/cli/commands/respond.d.ts.map +1 -1
  534. package/dist/cli/commands/respond.js +18 -1
  535. package/dist/cli/commands/send.d.ts.map +1 -1
  536. package/dist/cli/commands/send.js +21 -15
  537. package/dist/cli/commands/status.d.ts.map +1 -1
  538. package/dist/cli/commands/status.js +38 -0
  539. package/dist/cli/commands/wait.d.ts +26 -0
  540. package/dist/cli/commands/wait.d.ts.map +1 -1
  541. package/dist/cli/commands/wait.js +390 -43
  542. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  543. package/dist/cli/config/cli-dependencies.js +16 -0
  544. package/dist/cli/config/cli-tool-ids.d.ts +11 -0
  545. package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
  546. package/dist/cli/config/cli-tool-ids.js +12 -1
  547. package/dist/cli/types/api-responses.d.ts +443 -2
  548. package/dist/cli/types/api-responses.d.ts.map +1 -1
  549. package/dist/cli/utils/api-client.d.ts +18 -0
  550. package/dist/cli/utils/api-client.d.ts.map +1 -1
  551. package/dist/cli/utils/api-client.js +22 -0
  552. package/dist/cli/utils/server-capabilities.d.ts +56 -0
  553. package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
  554. package/dist/cli/utils/server-capabilities.js +166 -0
  555. package/dist/cli/utils/session-target.d.ts +70 -0
  556. package/dist/cli/utils/session-target.d.ts.map +1 -0
  557. package/dist/cli/utils/session-target.js +118 -0
  558. package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
  559. package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
  560. package/dist/lib/cli-tools/copilot-executable.js +155 -0
  561. package/dist/lib/cli-tools/types.d.ts +61 -0
  562. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  563. package/dist/lib/cli-tools/types.js +41 -0
  564. package/dist/lib/detection/ansi.d.ts +2 -1
  565. package/dist/lib/detection/ansi.d.ts.map +1 -1
  566. package/dist/lib/detection/ansi.js +3 -2
  567. package/dist/lib/detection/tools/verified-against.d.ts +84 -0
  568. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
  569. package/dist/lib/detection/tools/verified-against.js +88 -0
  570. package/dist/lib/detection/version-probes.d.ts +207 -0
  571. package/dist/lib/detection/version-probes.d.ts.map +1 -0
  572. package/dist/lib/detection/version-probes.js +290 -0
  573. package/dist/lib/security/env-sanitizer.d.ts +198 -0
  574. package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
  575. package/dist/lib/security/env-sanitizer.js +232 -0
  576. package/dist/server/locales/en/notifications.json +17 -6
  577. package/dist/server/locales/ja/notifications.json +17 -6
  578. package/dist/server/src/config/activity-bar-config.js +4 -0
  579. package/dist/server/src/config/cli-tool-timing-config.js +59 -2
  580. package/dist/server/src/config/copilot-constants.js +11 -1
  581. package/dist/server/src/config/detection-evidence-config.js +129 -0
  582. package/dist/server/src/config/schedule-config.js +56 -7
  583. package/dist/server/src/config/tmux-pane-config.js +18 -1
  584. package/dist/server/src/lib/auto-yes-poller.js +36 -0
  585. package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
  586. package/dist/server/src/lib/cli-tools/base.js +131 -10
  587. package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
  588. package/dist/server/src/lib/cli-tools/claude.js +1 -1
  589. package/dist/server/src/lib/cli-tools/codex.js +6 -2
  590. package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
  591. package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
  592. package/dist/server/src/lib/cli-tools/copilot.js +307 -81
  593. package/dist/server/src/lib/cli-tools/gemini.js +8 -6
  594. package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
  595. package/dist/server/src/lib/cli-tools/index.js +11 -1
  596. package/dist/server/src/lib/cli-tools/manager.js +56 -4
  597. package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
  598. package/dist/server/src/lib/cli-tools/opencode.js +233 -30
  599. package/dist/server/src/lib/cli-tools/session-name.js +57 -0
  600. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
  601. package/dist/server/src/lib/cli-tools/types.js +41 -0
  602. package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
  603. package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
  604. package/dist/server/src/lib/cmate-parser.js +12 -4
  605. package/dist/server/src/lib/db/db.js +5 -1
  606. package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
  607. package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
  608. package/dist/server/src/lib/detection/ansi.js +3 -2
  609. package/dist/server/src/lib/detection/cli-patterns.js +901 -67
  610. package/dist/server/src/lib/detection/composer-text.js +455 -0
  611. package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
  612. package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
  613. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
  614. package/dist/server/src/lib/detection/status-detector.js +76 -675
  615. package/dist/server/src/lib/detection/status-reason.js +57 -0
  616. package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
  617. package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
  618. package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
  619. package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
  620. package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
  621. package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
  622. package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
  623. package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
  624. package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
  625. package/dist/server/src/lib/detection/tools/frame.js +47 -0
  626. package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
  627. package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
  628. package/dist/server/src/lib/detection/tools/registry.js +58 -0
  629. package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
  630. package/dist/server/src/lib/detection/tools/types.js +34 -0
  631. package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
  632. package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
  633. package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
  634. package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
  635. package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
  636. package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
  637. package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
  638. package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
  639. package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
  640. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
  641. package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
  642. package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
  643. package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
  644. package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
  645. package/dist/server/src/lib/hooks/sources/index.js +3 -1
  646. package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
  647. package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
  648. package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
  649. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
  650. package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
  651. package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
  652. package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
  653. package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
  654. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
  655. package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
  656. package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
  657. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
  658. package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
  659. package/dist/server/src/lib/job-executor.js +16 -4
  660. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
  661. package/dist/server/src/lib/polling/response-checker.js +243 -26
  662. package/dist/server/src/lib/push/failure-episode-state.js +127 -0
  663. package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
  664. package/dist/server/src/lib/push/index.js +35 -1
  665. package/dist/server/src/lib/push/prompt-card-state.js +93 -0
  666. package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
  667. package/dist/server/src/lib/push/push-sender.js +82 -7
  668. package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
  669. package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
  670. package/dist/server/src/lib/response-cleaner.js +93 -20
  671. package/dist/server/src/lib/response-extractor.js +98 -5
  672. package/dist/server/src/lib/security/env-sanitizer.js +179 -5
  673. package/dist/server/src/lib/session/agent-event-state.js +1038 -189
  674. package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
  675. package/dist/server/src/lib/session/claude-executor.js +23 -3
  676. package/dist/server/src/lib/session/claude-session.js +11 -1
  677. package/dist/server/src/lib/session/composer-clear.js +95 -0
  678. package/dist/server/src/lib/session/current-output-builder.js +267 -25
  679. package/dist/server/src/lib/session/provisional-turn.js +310 -0
  680. package/dist/server/src/lib/session/resolve-session-target.js +156 -0
  681. package/dist/server/src/lib/session/send-user-message.js +14 -18
  682. package/dist/server/src/lib/session/session-start-error.js +53 -1
  683. package/dist/server/src/lib/session/status-evidence.js +217 -0
  684. package/dist/server/src/lib/session/structured-prompt.js +46 -4
  685. package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
  686. package/dist/server/src/lib/tmux/key-sequence.js +120 -0
  687. package/dist/server/src/lib/tmux/tmux.js +91 -19
  688. package/dist/server/src/lib/tui-accumulator.js +68 -1
  689. package/dist/server/src/lib/verification/gate-runner.js +84 -1
  690. package/dist/server/src/lib/ws-server.js +8 -5
  691. package/dist/server/src/types/cli-tool-contracts.js +75 -0
  692. package/dist/server/src/types/terminal-keys.js +37 -0
  693. package/dist/types/cli-tool-contracts.d.ts +235 -0
  694. package/dist/types/cli-tool-contracts.d.ts.map +1 -0
  695. package/dist/types/cli-tool-contracts.js +75 -0
  696. package/package.json +3 -2
  697. package/public/sw.js +65 -2
  698. package/.next/server/chunks/1841.js +0 -1
  699. package/.next/server/chunks/233.js +0 -1
  700. package/.next/server/chunks/3022.js +0 -1
  701. package/.next/server/chunks/3270.js +0 -1
  702. package/.next/server/chunks/4455.js +0 -1
  703. package/.next/server/chunks/5959.js +0 -27
  704. package/.next/server/chunks/7458.js +0 -6
  705. package/.next/server/chunks/8730.js +0 -1
  706. package/.next/server/chunks/9058.js +0 -1
  707. package/.next/server/chunks/9687.js +0 -3
  708. package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
  709. package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
  710. package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
  711. package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
  712. package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
  713. package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
  714. package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
  715. package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
  716. package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
  717. package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
  718. package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
  719. package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
  720. package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
  721. package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
  722. package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
  723. package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
  724. package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
  725. package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
  726. package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
  727. package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
  728. package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
  729. package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
  730. package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
  731. package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
  732. package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
  733. package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
  734. package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
  735. package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
  736. package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
  737. package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
  738. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
  739. package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
  740. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
  741. package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
  742. package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
  743. package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
  744. package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
  745. package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
  746. package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
  747. package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
  748. package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
  749. package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
  750. package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
  751. package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
  752. package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
  753. package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
  754. package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
  755. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
  756. package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
  757. package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
  758. package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
  759. package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
  760. package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
  761. package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
  796. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
  797. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
  798. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
  799. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
  800. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
  801. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
  802. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
  803. package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
  804. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
  805. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
  806. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
  807. package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
  808. package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
  809. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
  810. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
  811. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
  812. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
  813. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
  814. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
  815. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
  816. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
  817. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
  818. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
  819. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
  820. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
  821. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
  822. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
  823. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
  824. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
  825. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
  826. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  827. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
  828. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  829. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
  830. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
  831. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
  832. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
  833. package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
  834. package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
  835. package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  836. package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
  837. package/.next/static/chunks/app/worktrees/[id]/page-fdfca039b7f5837e.js +0 -1
  838. package/.next/static/css/e865c4979a41aa03.css +0 -1
  839. package/.next/static/wyFLOpmKpr45BHZ4svYpE/_buildManifest.js +0 -1
  840. /package/.next/static/{wyFLOpmKpr45BHZ4svYpE → 9IXgWfBUtnEnRqnbmErTp}/_ssgManifest.js +0 -0
@@ -54,13 +54,21 @@ const logger = (0, logger_1.createLogger)('lib/session/agent-session-lifecycle')
54
54
  * @param at - Epoch ms; defaults to now
55
55
  */
56
56
  function beginAgentSession(target, at = Date.now()) {
57
+ const before = (0, agent_event_state_1.getAgentEventDropCounts)(target.worktreeId, target.cliToolId, target.instanceId).decisionEvicted;
57
58
  (0, agent_event_state_1.beginAgentEventGeneration)(target.worktreeId, target.cliToolId, target.instanceId, at);
59
+ const after = (0, agent_event_state_1.getAgentEventDropCounts)(target.worktreeId, target.cliToolId, target.instanceId).decisionEvicted;
58
60
  const source = (0, sources_1.getAgentEventSource)(target.cliToolId);
59
61
  logger.info('agent-session-generation-begun', {
60
62
  worktreeId: target.worktreeId,
61
63
  cliToolId: target.cliToolId,
62
64
  instanceId: target.instanceId ?? target.cliToolId,
63
65
  transport: source.transport,
66
+ // Issue #1930: approvals the replaced process was holding, discarded with
67
+ // it. Usually zero. A non-zero count on a *routine* restart is the
68
+ // interesting case — it says a session was recreated while somebody was
69
+ // blocked on a dialog, which is a thing an operator would otherwise only
70
+ // learn by noticing their `respond` no longer has anything to answer.
71
+ decisionsEvicted: after - before,
64
72
  });
65
73
  }
66
74
  /**
@@ -91,7 +91,7 @@ function truncateOutput(output) {
91
91
  * - codex: exec <message> --sandbox <permission>
92
92
  * - gemini: -p <message>
93
93
  * - vibe-local: [-p <message> -y] or [--model <model> -p <message> -y]
94
- * - opencode: [run <message>] or [run -m ollama/<model> <message>]
94
+ * - opencode: [run <message>] or [run -m <provider/model> <message>]
95
95
  * - antigravity: -p <message> --dangerously-skip-permissions
96
96
  * - others: -p <message> (fallback)
97
97
  *
@@ -113,9 +113,29 @@ function buildCliArgs(message, cliToolId, permission, options) {
113
113
  }
114
114
  return ['-p', message, '-y'];
115
115
  case 'opencode':
116
- // [D2-007] When model is not specified, OpenCode uses opencode.json default model
116
+ // [D2-007] When model is not specified, OpenCode uses opencode.json default model.
117
+ //
118
+ // Issue #1914: the model is passed through **verbatim**. It used to be
119
+ // written as `ollama/${model}`, which had two problems and one excuse:
120
+ //
121
+ // - `opencode run --help` documents `-m, --model` as taking a value "in
122
+ // the format of provider/model" (measured on 1.18.21), so the prefix
123
+ // made every non-Ollama provider unreachable and mangled any value that
124
+ // already named one into `ollama/anthropic/…`.
125
+ // - The prefix was a silent transform: nothing downstream could tell the
126
+ // difference between "the user asked for Ollama" and "the code assumed
127
+ // it".
128
+ //
129
+ // The excuse is that it never ran. `resolveModelOption()` answered
130
+ // `undefined` for opencode, and the only other caller
131
+ // (`daily-summary-generator`) is gated by `SUMMARY_ALLOWED_TOOLS`, which
132
+ // does not list opencode either — so there is no stored CMATE.md value
133
+ // that the removed prefix was keeping correct. The branch is kept rather
134
+ // than deleted because this Issue makes it reachable; deleting it would
135
+ // mean `opencode --model x` in CMATE.md parses, validates, and is then
136
+ // silently ignored, which is the same class of bug one layer down.
117
137
  if (options?.model) {
118
- return ['run', '-m', `ollama/${options.model}`, message];
138
+ return ['run', '-m', options.model, message];
119
139
  }
120
140
  return ['run', message];
121
141
  case 'antigravity':
@@ -538,7 +538,7 @@ async function startClaudeSession(options) {
538
538
  // Check if Claude is installed
539
539
  const claudeAvailable = await isClaudeInstalled();
540
540
  if (!claudeAvailable) {
541
- throw new Error('Claude CLI is not installed or not in PATH');
541
+ throw new session_start_error_1.SessionStartUnavailableError('Claude Code', 'Claude CLI is not installed or not in PATH');
542
542
  }
543
543
  const sessionName = getSessionName(worktreeId, instanceId);
544
544
  // Check if session already exists
@@ -658,6 +658,16 @@ async function startClaudeSession(options) {
658
658
  // dialog so a dialog still on screen is answered first.
659
659
  const errorPattern = findSessionErrorPattern(cleanOutput);
660
660
  if (errorPattern !== null) {
661
+ // Issue #2000 raised the push notification on this line. Issue #2009
662
+ // moved it up to `BaseCLITool.startSession`, which is the one method
663
+ // every tool inherits: six of the seven had no such line at all, and a
664
+ // seventh copy is how "only claude rings" happened in the first place.
665
+ // Nothing about what the reader receives changed — the error carries the
666
+ // tool name and the detected pattern, which is everything the
667
+ // notification was ever built from — and the sibling
668
+ // `SessionStartTimeoutError` below still deliberately does NOT notify
669
+ // (#1637: the session and its process are alive and the documented
670
+ // advice is to retry in a few seconds).
661
671
  throw new session_start_error_1.SessionStartFailedError('Claude Code', sessionName, errorPattern);
662
672
  }
663
673
  }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * Clear the CLI composer, and prove it (Issue #1879).
4
+ *
5
+ * The UI's [Clear] button promises one thing — "the input box is now empty" — so
6
+ * this is a verified operation, not a fire-and-forget key send. #1878 §5-1
7
+ * measured the two ways a single `C-u` silently fails:
8
+ *
9
+ * 1. **Cursor at column 0.** `C-u` kills the text *before* the cursor, so a
10
+ * composer whose owner pressed Home before walking away survives it intact.
11
+ * {@link clearComposerLine} fixes that by sending `C-e` first.
12
+ * 2. **Multi-row composer.** `C-u` clears the current row only. A two-row
13
+ * residual needed three `C-e`+`C-u` passes before the box was actually
14
+ * empty (`2N-1` for N rows).
15
+ *
16
+ * So the loop here is: read the frame → decide whether real text is still there
17
+ * → send one pass → read again. It stops the moment
18
+ * {@link extractComposerText} stops reporting `content`, which is also what
19
+ * makes it correct in the presence of a CLI's dim placeholder text: `C-u` cannot
20
+ * remove a suggestion that was never in the buffer, and a loop that compared
21
+ * ANSI-stripped strings instead would spin until its cap on every idle session
22
+ * with a hint on screen — claude's rotating suggestion, or codex's
23
+ * `Ask Codex to do anything` (Issue #1890).
24
+ *
25
+ * The capture is taken with {@link capturePane} directly rather than through
26
+ * `captureSessionOutput`, because that path is served by a 5-second TTL cache
27
+ * (`tmux-capture-cache`): read-back verification against a cached frame would be
28
+ * reading the composer as it looked before the key was sent. The cache is
29
+ * invalidated on the way out so the next poll/push does not serve the pre-clear
30
+ * frame back to the browser.
31
+ */
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.COMPOSER_CLEAR_REDRAW_DELAY_MS = exports.MAX_COMPOSER_CLEAR_PASSES = void 0;
34
+ exports.clearComposer = clearComposer;
35
+ const tmux_1 = require("../../lib/tmux/tmux");
36
+ const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
37
+ const composer_text_1 = require("../../lib/detection/composer-text");
38
+ const logger_1 = require("../../lib/logger");
39
+ const logger = (0, logger_1.createLogger)('composer-clear');
40
+ /**
41
+ * Upper bound on `C-e`+`C-u` passes.
42
+ *
43
+ * #1878 measured `2N-1` passes for an N-row composer, so this covers a composer
44
+ * of ~6 rows. The cap exists because the loop's exit condition depends on the
45
+ * TUI redrawing: a CLI that ignores the keys entirely must fail fast and report
46
+ * `cleared: false` rather than hold the request open.
47
+ */
48
+ exports.MAX_COMPOSER_CLEAR_PASSES = 12;
49
+ /** Rows of pane to capture for read-back. The composer is pinned to the bottom. */
50
+ const CLEAR_READBACK_CAPTURE_LINES = 200;
51
+ /** Grace given to the TUI to repaint after a pass, before reading the frame back. */
52
+ exports.COMPOSER_CLEAR_REDRAW_DELAY_MS = 120;
53
+ const defaultDelay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
54
+ /**
55
+ * Empty the composer of a running session and verify the result.
56
+ *
57
+ * @param sessionName - tmux session to act on (must already exist; the caller checks)
58
+ * @param cliToolId - CLI whose composer layout to read. `claude` and `codex` can
59
+ * be verified today (see {@link extractComposerText}); for anything else the
60
+ * extractor reports `unsupported_tool`, no pass is sent, and `cleared` is
61
+ * false — a truthful "this endpoint cannot do that yet" rather than blind keys
62
+ * into an input line nobody has measured.
63
+ */
64
+ async function clearComposer(sessionName, cliToolId, options = {}) {
65
+ const capture = options.capture ?? ((name) => (0, tmux_1.capturePane)(name, CLEAR_READBACK_CAPTURE_LINES));
66
+ const sendClear = options.sendClear ?? tmux_1.clearComposerLine;
67
+ const delay = options.delay ?? defaultDelay;
68
+ const maxPasses = options.maxPasses ?? exports.MAX_COMPOSER_CLEAR_PASSES;
69
+ let passes = 0;
70
+ let result = (0, composer_text_1.extractComposerText)(await capture(sessionName), cliToolId);
71
+ // Snapshot before the first pass: every later read shows less of it (a pass
72
+ // eats one row), so this is the only moment the full text exists.
73
+ const discardedText = result.state === 'content' ? result.text : '';
74
+ while (result.state === 'content' && passes < maxPasses) {
75
+ await sendClear(sessionName);
76
+ passes++;
77
+ await delay(exports.COMPOSER_CLEAR_REDRAW_DELAY_MS);
78
+ result = (0, composer_text_1.extractComposerText)(await capture(sessionName), cliToolId);
79
+ }
80
+ // Whatever happened above, the cached frame is now stale: the poller and the
81
+ // WebSocket push both read through `captureSessionOutput`, and serving the
82
+ // pre-clear frame would leave the bar on screen after the text is gone.
83
+ if (passes > 0)
84
+ (0, tmux_capture_cache_1.invalidateCache)(sessionName);
85
+ // Positive confirmation only. `unsupported_tool` (nothing here can read that
86
+ // CLI's box) and `no_composer` (the box is not on screen, so the buffer behind
87
+ // whatever overlay is up was never inspected) are both "not verified", and
88
+ // reporting them as success would let the UI claim it emptied something it
89
+ // never looked at. Callers get `state` to tell the two apart.
90
+ const cleared = result.state === 'empty' || result.state === 'ghost';
91
+ if (!cleared) {
92
+ logger.warn('composer-clear:not-cleared', { sessionName, cliToolId, passes, state: result.state });
93
+ }
94
+ return { cleared, passes, state: result.state, remainingText: result.text, discardedText };
95
+ }
@@ -12,10 +12,15 @@ exports.mergeStructuredStatus = mergeStructuredStatus;
12
12
  exports.buildCurrentOutput = buildCurrentOutput;
13
13
  const db_1 = require("../../lib/db");
14
14
  const unclassified_frame_tracker_1 = require("../../lib/detection/unclassified-frame-tracker");
15
+ const composer_text_1 = require("../../lib/detection/composer-text");
15
16
  const upstream_faults_1 = require("../../lib/detection/upstream-faults");
16
17
  const models_1 = require("../../types/models");
17
18
  const logger_1 = require("../../lib/logger");
18
19
  const manager_1 = require("../../lib/cli-tools/manager");
20
+ const types_1 = require("../../lib/cli-tools/types");
21
+ const registry_1 = require("../../lib/hooks/sources/registry");
22
+ const permission_decision_state_1 = require("../../lib/hooks/permission-decision-state");
23
+ const tool_input_normalization_state_1 = require("../../lib/hooks/tool-input-normalization-state");
19
24
  const cli_session_1 = require("../../lib/session/cli-session");
20
25
  const status_detector_1 = require("../../lib/detection/status-detector");
21
26
  const auto_yes_manager_1 = require("../../lib/polling/auto-yes-manager");
@@ -25,6 +30,8 @@ const status_capture_config_1 = require("../../config/status-capture-config");
25
30
  const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
26
31
  const agent_event_state_1 = require("../../lib/session/agent-event-state");
27
32
  const prompt_waiting_composition_1 = require("../../lib/session/prompt-waiting-composition");
33
+ const provisional_turn_1 = require("../../lib/session/provisional-turn");
34
+ const status_evidence_1 = require("../../lib/session/status-evidence");
28
35
  const ask_user_question_prompt_1 = require("../../lib/session/ask-user-question-prompt");
29
36
  const structured_prompt_1 = require("../../lib/session/structured-prompt");
30
37
  const logger = (0, logger_1.createLogger)('current-output-builder');
@@ -208,28 +215,34 @@ function summarizeAskUserQuestion(episode) {
208
215
  * those, passed in explicitly; the raw `structured.status === 'waiting'` still
209
216
  * decides nothing on its own.
210
217
  *
211
- * ## The one flag this touches beyond `sessionStatus`
218
+ * ## `isUnclassifiedActive` is not this function's to move (Issue #2011)
212
219
  *
213
- * `isUnclassifiedActive` is cleared only for the `Stop`-arrived-but-the-pane-
214
- * still-looks-busy case (structured `ready` over scraper `running`). That case
215
- * is the entire point of the Issue for `commandmate wait`, whose completion
216
- * check is `sessionStatus === 'ready' && isUnclassifiedActive !== true` — leave
217
- * the flag up and the structured `ready` buys nothing.
218
- *
219
- * Everywhere else the flag is left exactly as the scraper set it, which is not
220
- * timidity but two specific behaviours that must survive:
220
+ * The flag is carried through from the scraper on every path. It answers "could
221
+ * the detection layer read this frame?", and no amount of knowledge about the
222
+ * TURN changes the answer for the FRAME:
221
223
  *
222
224
  * - a static overlay left on screen after a turn (`/help`, #1497) reads as
223
- * `ready`/`no_recent_output` while the structured layer also says `ready` —
224
- * the two agree, the structured layer adds nothing, and clearing the flag
225
- * would take away the navigation hatch the user needs to escape;
225
+ * `running`/`no_recent_output` while the structured layer says `ready` — the
226
+ * structured layer adds nothing about the screen, and clearing the flag would
227
+ * take away the navigation hatch the user needs to escape;
226
228
  * - a frame nobody can classify while the structured layer says `running` is
227
229
  * still a frame nobody can classify. `wait`'s unclassified dwell (exit 10)
228
230
  * is the last hatch for a screen that produces no events at all, and #1708
229
231
  * exists because it was missing. A structured `running` does not prove a
230
232
  * human is not needed — see the AskUserQuestion case above.
233
+ *
234
+ * `#1723`'s reported case — `Stop` arrives while the spinner is still painted —
235
+ * needs no help from here: that frame reads `running`/`thinking_indicator`, which
236
+ * is classified, so the flag was already down and `wait` completes on the
237
+ * structured `ready` alone.
238
+ *
239
+ * What this function DOES move is `evidence`, and only upwards: see
240
+ * {@link hookClosedTurn}.
241
+ *
242
+ * @param turn - The published turn record for this instance, or null. Read only
243
+ * for {@link hookClosedTurn}; `structured` remains the status authority.
231
244
  */
232
- function mergeStructuredStatus(scraper, structured, promptWaiting = null) {
245
+ function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn = null) {
233
246
  if (scraper.status === 'waiting') {
234
247
  return { ...scraper, structuredApplied: false };
235
248
  }
@@ -244,6 +257,9 @@ function mergeStructuredStatus(scraper, structured, promptWaiting = null) {
244
257
  status: 'waiting',
245
258
  reason: (0, prompt_waiting_composition_1.structuredWaitingReason)(promptWaiting),
246
259
  thinking: false,
260
+ // Untouched: what the scraper could read about this frame does not change
261
+ // because the agent told us a dialog is open (Issue #1924).
262
+ evidence: scraper.evidence,
247
263
  isUnclassifiedActive: scraper.isUnclassifiedActive,
248
264
  structuredApplied: true,
249
265
  };
@@ -252,39 +268,149 @@ function mergeStructuredStatus(scraper, structured, promptWaiting = null) {
252
268
  return { ...scraper, structuredApplied: false };
253
269
  }
254
270
  const thinking = structured.status === 'running';
271
+ // Issue #2011 (対応 2): the agent's own turn close IS positive evidence.
272
+ //
273
+ // #1927 (DR2-003) guarded this override with `scraper.evidence === 'positive'`
274
+ // to stop a structured `ready` clearing `isUnclassifiedActive` on a frame
275
+ // nobody could read. It over-corrected twice over. First, the conjunct made
276
+ // the whole expression a no-op: `evidence = cond ? 'positive' : scraper.evidence`
277
+ // where `cond` requires `scraper.evidence === 'positive'` returns
278
+ // `scraper.evidence` on both arms, so the branch could not change a value in
279
+ // any direction. Second, the fix it was reaching for belonged one field over —
280
+ // the hatch is held open by {@link ScraperVerdict.isUnclassifiedActive}, which
281
+ // is carried through below rather than re-derived, so the evidence no longer
282
+ // has to be understated to protect it.
283
+ //
284
+ // What that leaves is a payload that stopped contradicting itself. A pane
285
+ // whose `reason` reads `hook_stop` while `statusEvidence` reads `'none'` is
286
+ // denying, in one field, the strongest positive signal this server can get: a
287
+ // `Stop` from the agent, for a turn this server watched open. `closedAt >
288
+ // openedAt` is what narrows it to that case — a `Stop` that arrived with no
289
+ // turn open publishes `openedAt: null` (see `recordAgentEvent`), and a close
290
+ // the SCREEN inferred carries one of the other {@link TurnCloseReason} values.
291
+ // Freshness needs no bound of its own: `getStructuredSessionState` answered
292
+ // null above once the display event passed STRUCTURED_STATE_MAX_AGE_MS.
293
+ //
294
+ // `scraper.status === 'running'` is deliberately NOT required. The session this
295
+ // Issue was reported from sat at `ready`/`input_prompt` with `closedBy: 'stop'`
296
+ // — the agent had said it was done and the frame agreed — and the old conjunct
297
+ // is what kept publishing `'none'` for it.
298
+ const evidence = structured.status === 'ready' && hookClosedTurn(turn) ? 'positive' : scraper.evidence;
255
299
  return {
256
300
  status: structured.status,
257
301
  reason: structured.reason,
258
302
  thinking,
259
- isUnclassifiedActive: structured.status === 'ready' && scraper.status === 'running'
260
- ? false
261
- : scraper.isUnclassifiedActive,
303
+ evidence,
304
+ // Issue #2011: what the structured layer knows about the TURN says nothing
305
+ // about whether this FRAME could be read. #1708's dwell and the nav hatch
306
+ // are the last way out of a pane nothing can drive, and a `Stop` does not
307
+ // make an unreadable pane readable — see the `/help` overlay fixture in
308
+ // `tests/unit/lib/detection/fixtures/claude-live-2011/`.
309
+ isUnclassifiedActive: scraper.isUnclassifiedActive,
262
310
  structuredApplied: true,
263
311
  };
264
312
  }
313
+ /**
314
+ * Whether the agent's own `Stop` closed a turn this server watched open
315
+ * (Issue #2011, 対応 2).
316
+ *
317
+ * Both halves are required. `closedBy: 'stop'` rules out the five close reasons
318
+ * that are the server's inference rather than the agent's word (`stale`,
319
+ * `generation`, `session_end`, `scraper_evidence`, `resync_idle`), and
320
+ * `closedAt > openedAt` rules out a `Stop` whose turn was never observed
321
+ * opening — `recordAgentEvent` publishes `openedAt: null` for that, and a close
322
+ * with nothing behind it is not a completion anybody watched.
323
+ */
324
+ function hookClosedTurn(turn) {
325
+ if (turn === null)
326
+ return false;
327
+ const { closedBy, closedAt, openedAt } = turn;
328
+ return closedBy === 'stop' && closedAt !== null && openedAt !== null && closedAt > openedAt;
329
+ }
265
330
  /**
266
331
  * Build the current-output payload for a worktree session.
267
332
  *
268
333
  * @param db - Database instance
269
334
  * @param worktreeId - Worktree ID (assumed already validated by the caller)
270
- * @param cliToolId - CLI tool ID
335
+ * @param cliToolId - CLI tool ID, ALREADY resolved by the caller
271
336
  * @param instanceId - Optional agent instance ID (defaults to the primary instance)
337
+ * @param resolution - How the caller resolved that pair, when it resolved one
338
+ * (Issue #1884). Appended to the payload; nothing here reads it.
272
339
  */
273
- async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
340
+ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId, resolution) {
341
+ const payload = await buildPayload(db, worktreeId, cliToolId, instanceId);
342
+ if (!resolution)
343
+ return payload;
344
+ return {
345
+ ...payload,
346
+ resolvedBy: resolution.resolvedBy,
347
+ // Explicit null rather than an absent key: `capture --json | jq '.conflict'`
348
+ // must answer "no contradiction" rather than nothing at all, exactly as
349
+ // `model` does.
350
+ conflict: resolution.conflict ?? null,
351
+ };
352
+ }
353
+ /**
354
+ * The payload itself, with no knowledge of how its (tool, instance) pair was
355
+ * chosen. Split from {@link buildCurrentOutput} so the resolution fields are
356
+ * appended in one place instead of at both of the two return sites below.
357
+ */
358
+ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
274
359
  const resolvedInstanceId = instanceId ?? cliToolId;
275
360
  const manager = manager_1.CLIToolManager.getInstance();
276
361
  const cliTool = manager.getTool(cliToolId);
277
362
  const stopEventAt = (0, agent_event_state_1.getLastStopEventAt)(worktreeId, cliToolId, instanceId);
278
363
  const lastEvent = (0, agent_event_state_1.getLastAgentEvent)(worktreeId, cliToolId, instanceId);
364
+ // Issue #1924: the registry answers for every tool — a real implementation
365
+ // when there is one, the compatibility source otherwise — so this needs no
366
+ // null branch and never names a tool.
367
+ const eventSource = (0, registry_1.getAgentEventSource)(cliToolId);
368
+ const now = Date.now();
369
+ const pendingDecisions = (0, agent_event_state_1.getPendingDecisions)(worktreeId, cliToolId, instanceId, now);
279
370
  const structuredEvents = {
280
371
  lastEventType: lastEvent?.event ?? null,
281
372
  lastEventAt: lastEvent?.at ?? null,
282
373
  lastEventDetail: lastEvent?.detail ?? null,
374
+ // Issue #1926 published these; Issue #1930 made them a real record. Read
375
+ // before the `isRunning` branch so both return paths carry the turn fields.
376
+ ...(0, agent_event_state_1.getPublishedAgentTurn)(worktreeId, cliToolId, instanceId, now),
377
+ // Issue #1930. `deliveryExpired` is computed HERE and only here, because
378
+ // this is the layer that holds both halves: the record's age, and the
379
+ // source's declared `decisionTimeoutSeconds`. `agent-event-state` cannot
380
+ // reach the registry — its module graph pulls in `better-sqlite3` — which
381
+ // is why every capability arrives there as a value a caller hands over.
382
+ pendingDecisions: pendingDecisions.map((decision) => ({
383
+ id: decision.decisionId,
384
+ at: decision.at,
385
+ source: decision.source,
386
+ toolName: decision.toolName,
387
+ confirmedAt: decision.confirmedAt,
388
+ scraperCorroborated: decision.scraperCorroborated,
389
+ deliveryExpired: (0, provisional_turn_1.isDeliveryExpired)(decision, eventSource.capabilities.decisionTimeoutSeconds, now),
390
+ })),
391
+ dedupDropped: (0, agent_event_state_1.getAgentEventDropCounts)(worktreeId, cliToolId, instanceId),
392
+ dialogPendingMaxMs: { ...provisional_turn_1.DIALOG_PENDING_MAX_MS },
283
393
  promptWaitingSince: null,
284
394
  promptWaitingSource: null,
395
+ // Issue #1902. Read here, before the `isRunning` branch, so both return
396
+ // paths carry it.
397
+ toolInputNormalization: (0, tool_input_normalization_state_1.getLastToolInputNormalization)(worktreeId, cliToolId, instanceId),
398
+ // Issue #1898, the same shape and for the same reason: an automatic verdict
399
+ // this server delivered on the agent's behalf is invisible to the operator
400
+ // otherwise. Exposure only — the dialog state is `promptWaitingSince` /
401
+ // `isPromptWaiting`, and nothing reads this back to decide anything.
402
+ permissionDecision: (0, permission_decision_state_1.getLastPermissionDecision)(worktreeId, cliToolId, instanceId),
403
+ source: {
404
+ cliToolId: eventSource.cliToolId,
405
+ capabilities: eventSource.capabilities,
406
+ },
285
407
  };
286
408
  const running = await cliTool.isRunning(worktreeId, instanceId);
287
409
  if (!running) {
410
+ // Issue #1926: the latch describes a process, and this one is gone. Dropped
411
+ // rather than aged out so the next session on this key starts with no
412
+ // history instead of inheriting the last one's verdict.
413
+ (0, status_evidence_1.forgetLastKnownStatus)((0, auto_yes_manager_1.buildCompositeKey)(worktreeId, cliToolId, instanceId));
288
414
  return {
289
415
  isRunning: false,
290
416
  content: '',
@@ -292,6 +418,13 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
292
418
  cliToolId,
293
419
  sessionStatus: 'idle',
294
420
  sessionStatusReason: 'session_not_running',
421
+ // Issue #1926: `'positive'` is not a formality here. tmux was asked and
422
+ // answered — the absence of the session is a fact this layer observed,
423
+ // not a pattern that failed to match, which is the whole distinction §4 D1
424
+ // is drawing.
425
+ statusEvidence: 'positive',
426
+ lastKnownStatus: null,
427
+ lastKnownStatusAt: null,
295
428
  lastStopEventAt: stopEventAt,
296
429
  structuredEvents,
297
430
  // Issue #1785: null on a dead session, not the last model it ran. The
@@ -314,6 +447,11 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
314
447
  // is a claim about what is on screen right now, and a dead session has no
315
448
  // screen.
316
449
  upstreamFault: null,
450
+ // Issue #1879: same reasoning as `upstreamFault` — there is no input box
451
+ // on a session that is not running, so there is nothing to report and
452
+ // nothing the UI could act on.
453
+ composerText: null,
454
+ composerState: 'no_composer',
317
455
  };
318
456
  }
319
457
  const sessionState = (0, db_1.getSessionState)(db, worktreeId, resolvedInstanceId);
@@ -333,30 +471,75 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
333
471
  // capture layer will ever fetch — captureSessionOutput() reads at most
334
472
  // CACHE_MAX_CAPTURE_LINES regardless of the request.
335
473
  const captureWindowSaturated = (0, tmux_capture_cache_1.isCaptureWindowSaturated)(totalLines, Math.min(status_capture_config_1.STATUS_CAPTURE_LINES, tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES));
336
- const newLines = captureWindowSaturated ? lines : lines.slice(Math.max(0, lastCapturedLine));
474
+ // Issue #1910: saturation of the capture WINDOW is only one of the two ways
475
+ // the cursor dies, and it is the one that never fires for the alternate-screen
476
+ // tools — their pane is 1000 rows (claude / copilot) or 200 (opencode), so a
477
+ // 10000-line window is never reached and the branch above stayed false
478
+ // forever. Meanwhile the poller stores `lastCapturedLine` for them too
479
+ // (`updateSessionState` is called unconditionally; only the DEDUP comparison
480
+ // is gated on the tool, response-checker.ts), so after one turn the stored
481
+ // value is the pane height, `slice()` starts past the last row, and `content`
482
+ // — the field `commandmate capture <id>` prints — was an empty string.
483
+ // `capturedLineCountIsCursor` states both conditions in one place.
484
+ const lineCountIsCursor = (0, types_1.capturedLineCountIsCursor)(cliToolId, captureWindowSaturated);
485
+ const newLines = lineCountIsCursor ? lines.slice(Math.max(0, lastCapturedLine)) : lines;
337
486
  const newContent = newLines.join('\n');
338
487
  const compositeKey = (0, auto_yes_manager_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
339
488
  const lastServerResponseTimestamp = (0, auto_yes_manager_1.getLastServerResponseTimestamp)(compositeKey);
340
489
  const lastOutputTimestamp = lastServerResponseTimestamp ? new Date(lastServerResponseTimestamp) : undefined;
341
490
  const statusResult = (0, status_detector_1.detectSessionStatus)(output, cliToolId, lastOutputTimestamp);
342
- const thinking = statusResult.status === 'running' && statusResult.reason === status_detector_1.STATUS_REASON.THINKING_INDICATOR;
491
+ // Issue #1912: every `running` reason that means "the agent is producing
492
+ // output", not just `thinking_indicator`. opencode answers
493
+ // `opencode_processing_indicator` for its `esc interrupt` footer, which is
494
+ // the only signal it gives between the submitted prompt and the first
495
+ // transcript row — on a scraper-only session that stretch showed no
496
+ // thinking indicator at all.
497
+ const thinking = (0, status_detector_1.isGeneratingStatus)(statusResult);
343
498
  const scraperPromptWaiting = statusResult.hasActivePrompt;
344
499
  const isSelectionListActive = statusResult.status === 'waiting' && status_detector_1.SELECTION_LIST_REASONS.has(statusResult.reason);
345
500
  const isPagerActive = statusResult.reason === status_detector_1.STATUS_REASON.CODEX_PAGER;
346
501
  // Issue #1497: the detection-independent nav hatch (#1017/#1494) is gated on
347
502
  // isUnclassifiedActive. A static, unrecognized TUI overlay (e.g. Claude `/help`)
348
- // whose frame stops changing degrades from `running`/`default` to `ready`/
503
+ // whose frame stops changing degrades from `running`/`default` to
349
504
  // `no_recent_output` once the Auto-Yes poller has stamped lastOutputTimestamp
350
505
  // (its sole writer, auto-yes-poller.ts). That is still an interactive-but-
351
506
  // unclassified frame — a real idle prompt (`❯`) is classified earlier as
352
507
  // `input_prompt`, never as `no_recent_output` — so treat the timed-out fallback
353
508
  // as unclassified too and keep the hatch open instead of stranding the user.
354
- const isUnclassifiedActive = (statusResult.status === 'running' && statusResult.reason === status_detector_1.STATUS_REASON.DEFAULT) ||
355
- (statusResult.status === 'ready' && statusResult.reason === status_detector_1.STATUS_REASON.NO_RECENT_OUTPUT);
509
+ // Issue #1924, §4 D1 decision 2: stated as evidence. Issue #1927 moved that
510
+ // PRODUCER into the detector, because only the detector knows which rule
511
+ // answered — `input_prompt` is positive for a tool whose idle rule vouched for
512
+ // the frame and `'none'` for one whose rule declined, with the same status and
513
+ // the same reason on the wire.
514
+ const evidence = statusResult.evidence;
515
+ // Issue #2011: the flag is NOT that fact, and deriving it from `evidence` is
516
+ // the regression this Issue fixes. `'none'` is "I could not prove this pane is
517
+ // idle" — an ordinary Claude composer with no completion marker above it
518
+ // qualifies, and 7 of 8 live idle panes did on 2026-08-24. The flag's three
519
+ // consumers all ask the older, narrower question instead: `TerminalEscapeHatch`
520
+ // opens on a frame a human has to drive by hand, `wait` suppresses its
521
+ // completion check and eventually exits 10 on one, and `unclassified_frames`
522
+ // records it as a detection failure worth capturing as a fixture. That is
523
+ // `isUnclassifiedFrame` — the reason vocabulary, not the strength of the
524
+ // evidence behind a readable verdict.
525
+ const isUnclassifiedActive = (0, status_evidence_1.isUnclassifiedFrame)(statusResult.status, statusResult.reason);
356
526
  // Issue #1723: the two-layer merge. Everything above this line is the string
357
527
  // analysis, unchanged and still the only source on a machine where no hook
358
528
  // ever fires — `getStructuredSessionState` answers null there, and
359
529
  // `mergeStructuredStatus` then returns the scraper's verdict untouched.
530
+ // Issue #1930: the screen's own half of "is this turn over". Fed BEFORE the
531
+ // structured state is read so a poll that closes the turn is the poll that
532
+ // reports it, and fed with the SCRAPER's verdict rather than the merged one —
533
+ // reading the merge back would be circular, since the merge is where this
534
+ // layer's `running` overrides the frame.
535
+ //
536
+ // What this buys is a bound on a lost `Stop` far shorter than the 30-minute
537
+ // staleness rule: three consecutive frames that positively read as a finished
538
+ // composer retire the structured `running`, and the pane goes back to being
539
+ // the scraper's to describe. What it deliberately does NOT do is complete a
540
+ // `commandmate wait` — see SCRAPER_COMPLETION_POLLS, and #1839's measurement
541
+ // of a 529 storm returning Claude to exactly this frame having run nothing.
542
+ (0, agent_event_state_1.observeScraperCompletionEvidence)(worktreeId, cliToolId, instanceId, statusResult.status === 'ready' && evidence === 'positive');
360
543
  const structured = (0, agent_event_state_1.getStructuredSessionState)(worktreeId, cliToolId, instanceId);
361
544
  // Issue #1725: the open-dialog half of the same merge, resolved before the
362
545
  // status merge because it decides one of its inputs. The rule itself — the
@@ -378,7 +561,19 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
378
561
  structuredEvents.promptWaitingSince = promptWaiting.at;
379
562
  structuredEvents.promptWaitingSource = promptWaiting.source;
380
563
  }
381
- const merged = mergeStructuredStatus({ status: statusResult.status, reason: statusResult.reason, thinking, isUnclassifiedActive }, structured, promptWaiting);
564
+ const merged = mergeStructuredStatus({
565
+ status: statusResult.status,
566
+ reason: statusResult.reason,
567
+ thinking,
568
+ evidence,
569
+ isUnclassifiedActive,
570
+ }, structured, promptWaiting,
571
+ // Issue #2011: the same record `structuredEvents` publishes, read once. The
572
+ // merge needs `closedBy` / `closedAt` / `openedAt`, which
573
+ // `StructuredSessionState` folds away into `hook_stop` — and the folded form
574
+ // cannot tell a `Stop` that closed a watched turn from one that arrived with
575
+ // no turn open.
576
+ structuredEvents);
382
577
  // The OR rule, computed once for the whole server (Issue #1737): this is the
383
578
  // same `resolvePromptWaiting` call the `send` guard makes, so the payload and
384
579
  // the guard cannot disagree about whether a prompt is open. What they are
@@ -399,9 +594,27 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
399
594
  // The degraded form, for a dialog only the structured layer can see. Enriched
400
595
  // with the question text when one is in flight — that turns "a dialog is open
401
596
  // and nobody could read it" into "a dialog is open and here is what it asks".
597
+ //
598
+ // Issue #1898 adds the replies the dialog accepts, for the sources that can be
599
+ // answered without touching the pane. The gate is `eventIdentity`: a source
600
+ // that publishes a per-decision id is a source whose approval can be answered
601
+ // by that id, which is what makes an option NUMBER here mean something other
602
+ // than a line on a screen nobody parsed. `source === 'notification'` narrows
603
+ // it to a dialog the agent actually reported — a `permission-request` record
604
+ // is a prediction, and a question is answered with a choice rather than with
605
+ // one of these three verdicts.
606
+ const decisionOptions = promptWaiting !== null &&
607
+ promptWaiting.source === 'notification' &&
608
+ eventSource.capabilities.eventIdentity === 'permission-id'
609
+ ? structured_prompt_1.STRUCTURED_DECISION_OPTIONS
610
+ : null;
402
611
  const structuredFacts = promptWaiting === null
403
612
  ? null
404
- : { ...promptWaiting, askUserQuestion: summarizeAskUserQuestion(askUserQuestion) };
613
+ : {
614
+ ...promptWaiting,
615
+ askUserQuestion: summarizeAskUserQuestion(askUserQuestion),
616
+ decisionOptions,
617
+ };
405
618
  const promptData = scraperPromptWaiting
406
619
  ? correctedPromptData ??
407
620
  scraperPromptData ??
@@ -468,6 +681,10 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
468
681
  facts: structuredFacts,
469
682
  });
470
683
  }
684
+ // Issue #1879: structural, and computed here next to the other frame readers
685
+ // rather than inside a status branch — the bar it feeds must appear on the
686
+ // strength of what is in the box, never on the strength of a status verdict.
687
+ const composer = (0, composer_text_1.extractComposerText)(output, cliToolId);
471
688
  const realtimeSnippet = lines.slice(-100).join('\n');
472
689
  // Issue #1839: judged on exactly what is published as `realtimeSnippet`, not
473
690
  // on `output`. The wider capture keeps a banner from an hour ago in scope, and
@@ -486,6 +703,18 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
486
703
  // in antigravity's rule that the effort comes from the model id, which a bare
487
704
  // read of the scraped half would drop.
488
705
  const { model, effort } = (0, agent_event_state_1.getResolvedAgentModelInfo)(worktreeId, cliToolId, instanceId);
706
+ // Issue #1926, §7: fed the MERGED verdict, for the reason the unclassified
707
+ // tracker above is — this is the verdict that gets published, so latching the
708
+ // scraper's raw reading would make `lastKnownStatus` disagree with the
709
+ // `sessionStatus` it sat next to one poll earlier. Observed before it is read
710
+ // so a positive poll reports itself, which is what keeps the field from
711
+ // looking stale on a healthy session.
712
+ (0, status_evidence_1.observeStatusEvidence)(compositeKey, {
713
+ status: merged.status,
714
+ reason: merged.reason,
715
+ evidence: merged.evidence,
716
+ });
717
+ const lastKnown = (0, status_evidence_1.getLastKnownStatus)(compositeKey);
489
718
  return {
490
719
  isRunning: true,
491
720
  cliToolId,
@@ -514,6 +743,12 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
514
743
  isSelectionListActive,
515
744
  isPagerActive,
516
745
  isUnclassifiedActive: merged.isUnclassifiedActive,
746
+ // Issue #1926: the same fact `isUnclassifiedActive` carries, named the way
747
+ // §4 D1 names it. Published from the merged verdict so the two cannot
748
+ // disagree on the wire.
749
+ statusEvidence: merged.evidence,
750
+ lastKnownStatus: lastKnown?.status ?? null,
751
+ lastKnownStatusAt: lastKnown?.at ?? null,
517
752
  lastServerResponseTimestamp,
518
753
  serverPollerActive: (0, auto_yes_manager_1.isPollerActive)(compositeKey),
519
754
  lastStopEventAt: stopEventAt,
@@ -535,5 +770,12 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
535
770
  at: Date.now(),
536
771
  }
537
772
  : null,
773
+ // Issue #1879: read from `output` — the RAW capture, still carrying the SGR
774
+ // attributes `capture-pane -e` fetched. Everything else in this function
775
+ // works on stripped text; this one deliberately does not, because dim is the
776
+ // only thing that separates Claude's ghost suggestion from text a human
777
+ // typed. Do not "tidy" this to read a stripped variable.
778
+ composerText: composer.state === 'content' ? composer.text : null,
779
+ composerState: composer.state,
538
780
  };
539
781
  }