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
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * GitHub Copilot CLI's positive dialog detection (Issue #1928, 方針書 §4 D1 決定 4).
4
+ *
5
+ * ## The one thing that makes copilot safe to read: the bottom row
6
+ *
7
+ * copilot 1.0.80 paints a status bar on the bottom row of the pane and nothing
8
+ * else there — key hints when idle, `● Working … esc interrupt` while it
9
+ * generates. A dialog or a picker takes that row AWAY (its box, or the picker's
10
+ * own footer, occupies the bottom of the pane), which is why
11
+ * `readCopilotStatusBar` answering `null` is the positional guard everything
12
+ * below rests on.
13
+ *
14
+ * It has to be positional, because copilot's own answer text can forge every
15
+ * textual anchor on this frame. Two live captures in the repository prove it:
16
+ * `status-vocabulary-in-response.txt` (copilot printed ` ● Working esc
17
+ * interrupt` as body text) and `picker-vocabulary-in-response.txt` (it printed a
18
+ * picker's footer as body text). On both, the status bar is still drawn, so this
19
+ * module declines them before it looks at a single word — the same argument
20
+ * Issue #1885 made for the status branches and Issue #1895 for the picker one.
21
+ *
22
+ * ## What was measured (copilot-cli 1.0.80, 200x1000 pane)
23
+ *
24
+ * | frame | bottom row | block | footer |
25
+ * |---------------------------------------------|-----------------|----------------|---------------------------------------------------------------|
26
+ * | `copilot-live-1885/permission-dialog.txt` | box border | `❯ 1. Yes` ×3 | `↑/↓ to navigate · enter to select · esc to cancel` |
27
+ * | `copilot-picker-1895/picker-permissions.txt`| picker footer | `❯ 1. Manual` ×2 | `1-2 to select · ↑/↓ to navigate · enter to confirm · esc to cancel` |
28
+ * | `copilot-picker-1895/picker-theme.txt` | picker footer | 5 options | `↑/↓ to navigate · …` |
29
+ * | `copilot-live-1885/turn-complete.txt` | **idle bar** | the agent's own `1. … 4.` essay | prose |
30
+ *
31
+ * The last row is the reason the guard is not optional: copilot's finished reply
32
+ * is a four-item numbered list whose first item carries a `●` bullet, so the
33
+ * block reader finds a "selected option 1" on it. The status bar is what tells
34
+ * the two apart, and it costs one comparison.
35
+ *
36
+ * `1-2 to select` in the picker footer is also a measurement worth keeping: it
37
+ * is copilot stating, in its own UI, that these menus take a typed number.
38
+ */
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.detectCopilotDialog = detectCopilotDialog;
41
+ const cli_patterns_1 = require("../../cli-patterns");
42
+ const dialog_block_1 = require("../dialog-block");
43
+ /** copilot's permission question, in the spelling 1.0.80 draws. */
44
+ const COPILOT_PERMISSION_QUESTION_PATTERN = /do you want to\b/i;
45
+ /** How many non-blank rows above the options may hold the question. */
46
+ const QUESTION_SCAN_ROWS = 4;
47
+ function readContextAbove(lines, firstRow) {
48
+ const rows = [];
49
+ for (let i = firstRow - 1; i >= 0 && rows.length < QUESTION_SCAN_ROWS; i--) {
50
+ const row = lines[i].trim();
51
+ if (row === '')
52
+ continue;
53
+ rows.push(row);
54
+ }
55
+ return rows.join('\n');
56
+ }
57
+ /**
58
+ * Does this frame carry a copilot dialog?
59
+ *
60
+ * @param frame - The normalised capture
61
+ * @param context - What `detect.ts` measured; see {@link CopilotDialogContext}
62
+ */
63
+ function detectCopilotDialog(frame, context) {
64
+ // The positional guard. While copilot draws its status bar, whatever else is
65
+ // on the pane is transcript.
66
+ if (context.statusBar !== null)
67
+ return null;
68
+ const lines = (0, cli_patterns_1.stripBoxDrawing)(frame.clean).split('\n');
69
+ const block = (0, dialog_block_1.findNumberedOptionBlock)(lines, context.contentEnd);
70
+ if (block && cli_patterns_1.COPILOT_SELECTION_FOOTER_PATTERN.test(block.footer)) {
71
+ const question = readContextAbove(lines, block.firstRow);
72
+ const isTrust = cli_patterns_1.COPILOT_FOLDER_TRUST_ANCHORS.some(anchor => question.includes(anchor));
73
+ const kind = isTrust
74
+ ? 'trust'
75
+ : COPILOT_PERMISSION_QUESTION_PATTERN.test(question)
76
+ ? 'permission'
77
+ : 'picker';
78
+ return { kind, options: block.options, answerMode: 'numbered' };
79
+ }
80
+ // A picker copilot draws WITHOUT numbers (`/model`, `/agent`, `/skills` …).
81
+ // Reported so the frame is not mistaken for one nobody could read, but with
82
+ // no options and `keys`: nothing here can be answered by sending text, and
83
+ // Issue #1895's probe measured that a string typed at an open picker is not
84
+ // swallowed — it starts a session with that string as the prompt.
85
+ if (context.selectionFrame) {
86
+ return { kind: 'picker', options: [], answerMode: 'keys' };
87
+ }
88
+ return null;
89
+ }
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ /**
3
+ * The one reader of a numbered option block, shared by every tool's
4
+ * `prompt.ts` (Issue #1928, 方針書 §4 D1 決定 4).
5
+ *
6
+ * Every CLI in the registry draws its dialogs the same shape — a question, a run
7
+ * of `1. / 2. / 3.` rows with the highlighted one carrying a selection glyph,
8
+ * and (usually) a footer naming the keys it takes. What differs per tool is
9
+ * WHERE that block is allowed to sit and WHICH footer vouches for it, and those
10
+ * are the two things a tool module states for itself. The parsing in between is
11
+ * identical, and writing it seven times would be seven chances to disagree about
12
+ * what an option row is.
13
+ *
14
+ * ## Why this is not `detectPrompt`
15
+ *
16
+ * `detectPrompt` answers "could a human answer something on this frame?" from
17
+ * the text alone, which is exactly the generic inference §4 D1 決定 4 says
18
+ * Auto-Yes may not fire on: an agent that *quotes* a numbered list in its reply
19
+ * satisfies it (#1896). This module is deliberately dumber — it finds a block
20
+ * and reports what it found, including the selection glyph and the rows
21
+ * underneath it — and leaves the judgement to the tool module, which is the only
22
+ * place that knows whether that position and that footer are its own dialog.
23
+ *
24
+ * ## Input contract
25
+ *
26
+ * Rows must be ANSI-stripped. They MAY still carry box drawing, and they may
27
+ * equally have had it removed already: the Auto-Yes poller hands the detector a
28
+ * frame that has been through `stripBoxDrawing(stripAnsi(...))`, while
29
+ * `detectSessionStatus` hands it one that has not. Nothing here reads a gutter
30
+ * glyph or an SGR attribute, so both spellings parse to the same block.
31
+ */
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.findNumberedOptionBlock = findNumberedOptionBlock;
34
+ /**
35
+ * One numbered option row.
36
+ *
37
+ * `[❯›●>]` is the union of the selection glyphs measured across the registry:
38
+ * claude and copilot draw `❯`, codex draws `›`, antigravity draws the ASCII `>`
39
+ * (Issue #999), and `●` appears as the filled-radio spelling. The glyph is
40
+ * OPTIONAL here because only the highlighted row wears it; whether its presence
41
+ * is required at all is the tool module's call.
42
+ *
43
+ * A leading `│`/`┃` is accepted so a frame whose box drawing is still attached
44
+ * parses to the same block as one whose gutter has been removed.
45
+ *
46
+ * No `/g` (keeps `.test()` stateless) and no nested quantifiers (ReDoS-safe).
47
+ */
48
+ const OPTION_ROW_PATTERN = /^[^\S\n]*[│┃]?[^\S\n]*([❯›●>])?[^\S\n]*(\d{1,2})[.)][^\S\n]+(\S.*?)[^\S\n]*[│┃]?$/;
49
+ /**
50
+ * How far above `endExclusive` the bottom-most option row may sit.
51
+ *
52
+ * Generous because the footer between the block and the region end is a couple
53
+ * of rows at most on every measured frame, and because a frame captured
54
+ * mid-repaint can put a blank row or two in there. Bounded at all so a numbered
55
+ * list hundreds of rows up in a transcript cannot be adopted as "the dialog on
56
+ * this frame".
57
+ */
58
+ const DEFAULT_FOOTER_SCAN_ROWS = 8;
59
+ /** How many rows one option block may span, wrapped continuations included. */
60
+ const MAX_BLOCK_ROWS = 60;
61
+ function parseOptionRow(row) {
62
+ const match = OPTION_ROW_PATTERN.exec(row);
63
+ if (!match)
64
+ return null;
65
+ const number = Number(match[2]);
66
+ if (!Number.isInteger(number) || number < 1)
67
+ return null;
68
+ return { glyph: match[1], number, label: match[3].trim() };
69
+ }
70
+ /**
71
+ * Find the bottom-most run of numbered options ending at or above
72
+ * `endExclusive`.
73
+ *
74
+ * The run must descend to `1.` without a gap — `3. / 2. / 1.` reading upwards —
75
+ * and must hold at least two options. Both are guards against the same false
76
+ * positive: an ordinary sentence beginning `2020. ` is a single row with no `1.`
77
+ * above it, and a one-option "dialog" is not a choice.
78
+ *
79
+ * Blank rows inside the run are skipped (claude puts one between its question
80
+ * and its options and copilot puts one before its footer). A non-blank row that
81
+ * is not an option row is taken as the WRAPPED TAIL of the option above it —
82
+ * codex and copilot both wrap a long command onto a second row, and dropping it
83
+ * would truncate the label `respond` shows the operator. Nothing bad comes of
84
+ * being permissive there: the run still has to reach `1.` within
85
+ * {@link MAX_BLOCK_ROWS}, so prose that merely sits above a `2. / 1.` pair is
86
+ * bounded, and every caller additionally requires its own footer or selection
87
+ * glyph before treating the result as a dialog.
88
+ *
89
+ * @param lines - ANSI-stripped rows, box drawing optional
90
+ * @param endExclusive - Exclusive upper bound; the tool module's region end
91
+ * @param footerScanRows - How many non-blank rows below the block to accept as
92
+ * its footer before giving up on finding one
93
+ * @returns The block, or null when the region holds no numbered choice
94
+ */
95
+ function findNumberedOptionBlock(lines, endExclusive, footerScanRows = DEFAULT_FOOTER_SCAN_ROWS) {
96
+ const end = Math.min(endExclusive, lines.length);
97
+ // 1. Walk up through the footer zone to the bottom-most option row.
98
+ let cursor = end - 1;
99
+ let scanned = 0;
100
+ const footerRows = [];
101
+ let bottom = null;
102
+ while (cursor >= 0 && scanned <= footerScanRows) {
103
+ const row = lines[cursor];
104
+ if (row.trim() === '') {
105
+ cursor--;
106
+ continue;
107
+ }
108
+ scanned++;
109
+ bottom = parseOptionRow(row);
110
+ if (bottom)
111
+ break;
112
+ footerRows.unshift(row.trim());
113
+ cursor--;
114
+ }
115
+ if (!bottom)
116
+ return null;
117
+ const lastRow = cursor;
118
+ // 2. Walk up the run, collecting each option and any wrapped rows above it.
119
+ const collected = [bottom];
120
+ let expected = bottom.number - 1;
121
+ let row = cursor - 1;
122
+ let spanned = 1;
123
+ // Rows seen since the last option row. They are the wrapped tail of the option
124
+ // ABOVE them, which the walk has not reached yet — attaching them to the one
125
+ // below (the last entry of `collected`) would move a long command onto the
126
+ // wrong choice, which is the label `respond` shows the operator.
127
+ let pending = [];
128
+ while (expected >= 1 && row >= 0 && spanned <= MAX_BLOCK_ROWS) {
129
+ const text = lines[row];
130
+ spanned++;
131
+ if (text.trim() === '') {
132
+ row--;
133
+ continue;
134
+ }
135
+ const parsed = parseOptionRow(text);
136
+ if (parsed && parsed.number === expected) {
137
+ collected.unshift({ ...parsed, label: [parsed.label, ...pending].join(' ').trim() });
138
+ pending = [];
139
+ expected--;
140
+ row--;
141
+ continue;
142
+ }
143
+ if (parsed)
144
+ break; // a numbered row out of sequence — not this block
145
+ pending.unshift(text.trim());
146
+ row--;
147
+ }
148
+ if (expected !== 0 || collected.length < 2)
149
+ return null;
150
+ const selectedIndex = collected.findIndex(option => option.glyph !== undefined);
151
+ return {
152
+ options: collected.map(option => option.label),
153
+ selectedIndex,
154
+ selectedGlyph: selectedIndex < 0 ? null : (collected[selectedIndex].glyph ?? null),
155
+ firstRow: row + 1,
156
+ lastRow,
157
+ footer: footerRows.join('\n'),
158
+ };
159
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * Normalise a capture once, for every branch of the detection chain
4
+ * (Issue #1927).
5
+ *
6
+ * Lifted verbatim out of the head of `detectSessionStatus`, where the same six
7
+ * projections were computed inline and then threaded through a thousand lines of
8
+ * per-tool branches. Nothing about the arithmetic changed; what changed is that
9
+ * a tool module can now be handed the frame instead of recomputing its own idea
10
+ * of where the content ends.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.STATUS_CHECK_LINE_COUNT = void 0;
14
+ exports.normalizeFrame = normalizeFrame;
15
+ const cli_patterns_1 = require("../cli-patterns");
16
+ const tui_detection_frame_1 = require("../tui-detection-frame");
17
+ const thinking_constants_1 = require("../../../config/thinking-constants");
18
+ /**
19
+ * Number of lines from the end to check for prompt and input indicators.
20
+ *
21
+ * Moved here from `status-detector.ts` (Issue #1927) because it is the window
22
+ * every tool module measures against; re-exported from the facade so the many
23
+ * existing importers are unaffected.
24
+ */
25
+ exports.STATUS_CHECK_LINE_COUNT = 15;
26
+ /** Build the shared {@link NormalizedFrame} for one capture. */
27
+ function normalizeFrame(output) {
28
+ const clean = (0, tui_detection_frame_1.normalizeTuiFrameForDetection)((0, cli_patterns_1.stripAnsi)(output));
29
+ const lines = clean.split('\n');
30
+ // Strip trailing empty lines (tmux terminal padding) before windowing.
31
+ // tmux buffers often end with many empty padding lines that would otherwise
32
+ // fill the entire detection window, hiding the actual prompt/status content.
33
+ let lastNonEmptyIndex = lines.length - 1;
34
+ while (lastNonEmptyIndex >= 0 && lines[lastNonEmptyIndex].trim() === '') {
35
+ lastNonEmptyIndex--;
36
+ }
37
+ const contentLines = lines.slice(0, lastNonEmptyIndex + 1);
38
+ return {
39
+ raw: output,
40
+ clean,
41
+ lines,
42
+ contentLines,
43
+ lastLines: contentLines.slice(-exports.STATUS_CHECK_LINE_COUNT).join('\n'),
44
+ // DR-003: Separate thinking detection window (5 lines) from prompt detection window (15 lines)
45
+ thinkingLines: contentLines.slice(-thinking_constants_1.THINKING_TAIL_LINE_COUNT).join('\n'),
46
+ };
47
+ }
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ /**
3
+ * opencode's status detector (Issue #1927, 方針書 §4 D2).
4
+ *
5
+ * A verbatim lift of the `cliToolId === 'opencode'` block (branches A0–E) out of
6
+ * `detectSessionStatus`. opencode is the only tool with a completion marker of
7
+ * its own (§4 D1 決定 1 item 1) and, since #1883, a gutter-anchored idle
8
+ * composer rule (item 2) — which is why it ships with `enforce`.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.opencodeStatusDetector = exports.VERIFIED_AGAINST = void 0;
12
+ exports.readIdleEvidence = readIdleEvidence;
13
+ const cli_patterns_1 = require("../../cli-patterns");
14
+ const status_reason_1 = require("../../status-reason");
15
+ const prompt_1 = require("./prompt");
16
+ const frame_1 = require("../frame");
17
+ const run_detection_1 = require("../run-detection");
18
+ const verified_against_1 = require("../verified-against");
19
+ const thinking_constants_1 = require("../../../../config/thinking-constants");
20
+ /** opencode build these rules were read off (#1883 / #1893 / #1896; value in ../verified-against, #1929). */
21
+ exports.VERIFIED_AGAINST = verified_against_1.OPENCODE_VERIFIED_AGAINST;
22
+ /**
23
+ * Where opencode's content area ends in this frame.
24
+ *
25
+ * Extract content area by finding TUI footer boundary dynamically.
26
+ * Footer structure (bottom-up): keybinding hints ("ctrl+t variants..."),
27
+ * ╹▀▀ separator, model info bar ("Build GPT-5-mini GitHub Copilot"), ┃ padding.
28
+ * The keybinding line is the anchor; model bar is 2 lines above it.
29
+ * ┃ padding above the model bar becomes empty after stripBoxDrawing and is
30
+ * skipped by the lastNonEmpty search.
31
+ *
32
+ * `stripBoxDrawing` maps line-for-line — it blanks border-only rows rather than
33
+ * dropping them — so an index taken here is valid in `frame.lines` too, which is
34
+ * what branch E relies on to read the input box's own gutter.
35
+ */
36
+ function findContentEnd(frame) {
37
+ const strippedForOpenCode = (0, cli_patterns_1.stripBoxDrawing)(frame.clean);
38
+ const ocLines = strippedForOpenCode.split('\n');
39
+ let footerBoundary = Math.max(0, ocLines.length - 7); // fallback: skip 7 lines
40
+ for (let i = ocLines.length - 1; i >= Math.max(0, ocLines.length - 10); i--) {
41
+ if (/ctrl\+[tp]/.test(ocLines[i])) {
42
+ // Exclude keybinding line (i), separator (i-1), and model info bar (i-2)
43
+ footerBoundary = Math.max(0, i - 2);
44
+ break;
45
+ }
46
+ }
47
+ const candidates = ocLines.slice(0, footerBoundary);
48
+ let lastIndex = candidates.length - 1;
49
+ while (lastIndex >= 0 && candidates[lastIndex].trim() === '') {
50
+ lastIndex--;
51
+ }
52
+ return { candidates, lastIndex };
53
+ }
54
+ /**
55
+ * §4 D1 決定 1: opencode's idle evidence.
56
+ *
57
+ * Two positives, both already implemented as branches below and both restated
58
+ * here so the tool table can point at a rule rather than at an ordering
59
+ * accident: the finished-turn marker with a duration (item 1) and the
60
+ * gutter-anchored `Ask anything...` composer (item 2, #1883).
61
+ *
62
+ * Like copilot's, this is belt-and-braces — opencode opts out of the generic
63
+ * composer check, so no `ready` reaches the evidence gate without branch D or E
64
+ * having already vouched for it.
65
+ */
66
+ function readIdleEvidence(frame) {
67
+ const { candidates, lastIndex } = findContentEnd(frame);
68
+ if (lastIndex < 0)
69
+ return 'none';
70
+ const window = candidates
71
+ .slice(Math.max(0, lastIndex - frame_1.STATUS_CHECK_LINE_COUNT + 1), lastIndex + 1)
72
+ .join('\n');
73
+ if (cli_patterns_1.OPENCODE_TURN_COMPLETE_PATTERN.test(window))
74
+ return 'positive';
75
+ const composerWindow = frame.lines
76
+ .slice(Math.max(0, lastIndex - frame_1.STATUS_CHECK_LINE_COUNT + 1), lastIndex + 1)
77
+ .join('\n');
78
+ return cli_patterns_1.OPENCODE_IDLE_COMPOSER_PATTERN.test(composerWindow) ? 'positive' : 'none';
79
+ }
80
+ exports.opencodeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
81
+ tool: 'opencode',
82
+ verifiedAgainst: exports.VERIFIED_AGAINST,
83
+ afterThinking(frame) {
84
+ // 2.5. OpenCode status detection (Issue #379)
85
+ // OpenCode TUI layout: content area (top) | empty padding (~150 lines) | footer status bar (~6 lines at bottom).
86
+ // Standard windowed checks (last N lines) only see footer/padding, never the content area.
87
+ //
88
+ // Detection strategy:
89
+ // A0. Permission dialog button strip → waiting (Issue #1893; first, see below)
90
+ // A. "esc interrupt" in footer → actively processing (running)
91
+ // B. Find footer boundary via "ctrl+t" keybinding line, extract content above it, check for thinking → running
92
+ // C. Same content window, check for a selection list → waiting
93
+ // D. Same content window, check for ▣ Build completion WITH a duration → ready
94
+ // E. Idle composer placeholder inside the input box gutter → ready (Issue #1883)
95
+ // A0. Permission dialog (Issue #1893) — ahead of every other opencode branch.
96
+ //
97
+ // opencode asks for tool permission with a bottom-anchored box whose button
98
+ // strip reads "Allow once Allow always Reject". It has no number, no
99
+ // (y/n) and no "press enter to confirm" footer, so `detectPrompt` answered
100
+ // `isPrompt: false` and this block fell through to branch D — which matched
101
+ // the `▣ Build · <model>` row opencode draws for the step that is WAITING on
102
+ // this very dialog and published the blocked session as
103
+ // `ready`/`opencode_response_complete`. `wait` then reported a false
104
+ // completion, the sidebar went idle and the send guard opened.
105
+ //
106
+ // It is checked before branch A (`esc interrupt`) and before branch D on
107
+ // purpose: a dialog is the agent blocked on a human whatever else is on the
108
+ // pane, and `permission-after-complete.txt` is a live frame where the box is
109
+ // open with a genuinely finished `· 2.3s` marker still in the transcript
110
+ // above it — branch D would win that frame on ordering alone.
111
+ //
112
+ // `hasActivePrompt` stays FALSE and the reason joins SELECTION_LIST_REASONS,
113
+ // which is the `menu` half of the #1786 taxonomy ("only the terminal can
114
+ // drive it") rather than the `prompt` half ("the app can answer this for
115
+ // you"). That is a measurement, not a preference: on opencode 1.18.21 the
116
+ // strip is driven by ←/→ + Enter and typing a number does nothing at all
117
+ // (the button row is byte-identical before and after `3` is sent). Synthesising
118
+ // `1. Allow once / 2. Allow always / 3. Reject` here would have made
119
+ // `respond <id> 3` send the text "3" — swallowed — followed by Enter, which
120
+ // confirms whatever is highlighted: asking to REJECT would have APPROVED.
121
+ // `wait` still stops for it (`isSelectionListActive` → exit 10) and the UI
122
+ // renders NavigationButtons, which send exactly the keys the strip takes.
123
+ if (cli_patterns_1.OPENCODE_PERMISSION_PATTERN.test(frame.lastLines)) {
124
+ return {
125
+ status: 'waiting',
126
+ confidence: 'high',
127
+ reason: status_reason_1.STATUS_REASON.OPENCODE_PERMISSION_PROMPT,
128
+ hasActivePrompt: false,
129
+ evidence: 'positive',
130
+ };
131
+ }
132
+ // A. Check footer for processing indicator ("esc interrupt" replaces "ctrl+t variants..." during processing)
133
+ if (cli_patterns_1.OPENCODE_PROCESSING_INDICATOR.test(frame.lastLines)) {
134
+ return {
135
+ status: 'running',
136
+ confidence: 'high',
137
+ reason: status_reason_1.STATUS_REASON.OPENCODE_PROCESSING_INDICATOR,
138
+ hasActivePrompt: false,
139
+ evidence: 'positive',
140
+ };
141
+ }
142
+ const { candidates, lastIndex } = findContentEnd(frame);
143
+ if (lastIndex < 0)
144
+ return null;
145
+ // B. Check last few content lines for thinking indicators
146
+ const contentThinkingWindow = candidates
147
+ .slice(Math.max(0, lastIndex - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastIndex + 1)
148
+ .join('\n');
149
+ if ((0, cli_patterns_1.detectThinking)('opencode', contentThinkingWindow)) {
150
+ return {
151
+ status: 'running',
152
+ confidence: 'high',
153
+ reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
154
+ hasActivePrompt: false,
155
+ evidence: 'positive',
156
+ };
157
+ }
158
+ // C. Check content area for selection list (Issue #473: fuzzy-search list detection)
159
+ // Selection list header ("Select model"/"Select provider") may be far above the
160
+ // last content line when many items are listed, so check all content candidates.
161
+ const contentCheckWindow = candidates
162
+ .slice(Math.max(0, lastIndex - frame_1.STATUS_CHECK_LINE_COUNT + 1), lastIndex + 1)
163
+ .join('\n');
164
+ if (cli_patterns_1.OPENCODE_SELECTION_LIST_PATTERN.test(candidates.join('\n'))) {
165
+ return {
166
+ status: 'waiting',
167
+ confidence: 'high',
168
+ reason: status_reason_1.STATUS_REASON.OPENCODE_SELECTION_LIST,
169
+ hasActivePrompt: false,
170
+ evidence: 'positive',
171
+ };
172
+ }
173
+ // D. Check last few content lines for the finished-turn marker.
174
+ //
175
+ // Issue #1893 made the duration mandatory here (OPENCODE_TURN_COMPLETE_PATTERN
176
+ // rather than the line-filter OPENCODE_RESPONSE_COMPLETE). opencode draws
177
+ // `▣ <Action> · <model>` with no duration for a step that is still open —
178
+ // notably the one blocked on a permission dialog — and matching that row
179
+ // was the reported false `ready`. A duration-less row now carries no
180
+ // verdict at all: an aborted turn (`turn-aborted-no-duration.txt`) falls
181
+ // through to the heuristics rather than claiming a completion that never
182
+ // happened, which is what design rule D1 asks for.
183
+ if (cli_patterns_1.OPENCODE_TURN_COMPLETE_PATTERN.test(contentCheckWindow)) {
184
+ return {
185
+ status: 'ready',
186
+ confidence: 'high',
187
+ reason: status_reason_1.STATUS_REASON.OPENCODE_RESPONSE_COMPLETE,
188
+ hasActivePrompt: false,
189
+ evidence: 'positive',
190
+ };
191
+ }
192
+ // E. Idle composer (Issue #473 found the row; Issue #1883 made it positive).
193
+ //
194
+ // `Ask anything...` is a *placeholder*, not a question: opencode paints it
195
+ // only while the input buffer is empty and replaces it with the first
196
+ // typed character. Finding it inside the input box is therefore positive
197
+ // evidence that the composer is empty — the same class of evidence as
198
+ // claude's completion marker or codex's idle row — and this branch is
199
+ // opencode's implementation of design rule D1 ("declare a turn finished
200
+ // only on positive evidence"), not a fallback for "nothing looked busy".
201
+ //
202
+ // The row is matched on `frame.lines` (ANSI stripped, box drawing intact)
203
+ // via OPENCODE_IDLE_COMPOSER_PATTERN, so it must carry the input box's own
204
+ // gutter. The bare phrase reaching the pane inside a response body is not
205
+ // read as an idle composer.
206
+ //
207
+ // D1's other half — "and the footer shows no processing marker" — is
208
+ // branch A above, which has already returned `running` for any frame whose
209
+ // footer carries `esc interrupt`.
210
+ const composerWindow = frame.lines
211
+ .slice(Math.max(0, lastIndex - frame_1.STATUS_CHECK_LINE_COUNT + 1), lastIndex + 1)
212
+ .join('\n');
213
+ if (cli_patterns_1.OPENCODE_IDLE_COMPOSER_PATTERN.test(composerWindow)) {
214
+ return {
215
+ status: 'ready',
216
+ confidence: 'high',
217
+ reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
218
+ hasActivePrompt: false,
219
+ evidence: 'positive',
220
+ };
221
+ }
222
+ return null;
223
+ },
224
+ // Issue #1883: opencode opts out of the generic composer check. Its
225
+ // promptPattern is the bare phrase `Ask anything...`, so that check is a
226
+ // second, looser copy of branch E which answers `ready` for the phrase
227
+ // appearing anywhere in the last 15 rows — including in a response body, where
228
+ // it is not a composer at all. Leaving it in would also make E's gutter anchor
229
+ // unobservable.
230
+ skipGenericInputPrompt: true,
231
+ readIdleEvidence,
232
+ // §4 D1 決定 4 (Issue #1928). The content window is branch C's, passed rather
233
+ // than recomputed, so the picker the dialog rule reports is the picker the
234
+ // status branch reports.
235
+ detectDialog(frame) {
236
+ const { candidates } = findContentEnd(frame);
237
+ return (0, prompt_1.detectOpenCodeDialog)(frame, { contentWindow: candidates.join('\n') });
238
+ },
239
+ // As with copilot: branches A0–E are the only rules that run for opencode, so
240
+ // a frame reaching the floor is one they could not read.
241
+ unreadableReason: status_reason_1.STATUS_REASON.UNKNOWN_FRAME,
242
+ });
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /**
3
+ * opencode's positive dialog detection (Issue #1928, 方針書 §4 D1 決定 4).
4
+ *
5
+ * This is the module Issue #1896 is about, and the shortest one in the tree,
6
+ * because opencode 1.18.21's whole interactive surface was measured and **none
7
+ * of it takes a typed number**:
8
+ *
9
+ * | surface | rendering | driven by | source |
10
+ * |--------------------|---------------------------------------------|-----------|--------|
11
+ * | permission dialog | `Allow once Allow always Reject` strip | ←/→ + Enter | #1893 |
12
+ * | `/models`, `/providers`, `/connect`, ctrl+p | fuzzy-search list, no numbers drawn | ↑/↓ + Enter | #1896 |
13
+ *
14
+ * So every dialog this module can report carries `answerMode: 'keys'`, and the
15
+ * Auto-Yes gate therefore never fires for opencode. That is the correct reading,
16
+ * not a degradation: `sendPromptAnswer` types the digit as text for this tool,
17
+ * and Issue #1893 measured what happens next — the `1` is swallowed by the
18
+ * button row and the Enter after it confirms whatever is HIGHLIGHTED, so asking
19
+ * to Reject would have Approved. `wait` still stops for both surfaces
20
+ * (`isSelectionListActive` → exit 10) and the UI still renders NavigationButtons,
21
+ * which send the keys the strip actually takes.
22
+ *
23
+ * ## Why the numbered path is not re-litigated here
24
+ *
25
+ * `buildDetectPromptOptions('opencode')` already declares
26
+ * `hasNumberedDialogs: false`, which stops `detectPrompt` reporting a numbered
27
+ * transcript block as a prompt at all. This module is the second half of the
28
+ * same decision rather than a duplicate of it: the declaration says "there is
29
+ * nothing numbered to find", and this says "and here is what there IS", so the
30
+ * gate can tell an unreadable frame from a dialog it must not answer.
31
+ *
32
+ * ## The gutter, and the one frame where it is missing
33
+ *
34
+ * `OPENCODE_PERMISSION_PATTERN` is anchored on the input box's own `│`/`┃`
35
+ * gutter — that anchor is Issue #1893's, and weakening it here would let the
36
+ * strip's words reach the pane inside a response body and be read as a dialog.
37
+ * The Auto-Yes poller hands this detector a frame whose box drawing has already
38
+ * been removed (`captureAndCleanOutput`), so on THAT path the permission branch
39
+ * cannot match and this module answers `null` instead of `permission`. The gate
40
+ * outcome is identical either way — `null` and `keys` both mean "do not send" —
41
+ * so the anchor is kept at its measured strength rather than being widened for a
42
+ * verdict that would not change.
43
+ */
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.detectOpenCodeDialog = detectOpenCodeDialog;
46
+ const cli_patterns_1 = require("../../cli-patterns");
47
+ /** Splits the button strip into its buttons: two or more spaces separate them. */
48
+ const BUTTON_SEPARATOR = /\s{2,}/;
49
+ /**
50
+ * Read the buttons out of the row {@link OPENCODE_PERMISSION_PATTERN} matched.
51
+ *
52
+ * The MATCH is sliced, not the row: opencode draws its own key hints
53
+ * (`ctrl+f fullscreen ⇆ select enter confirm`) to the right of the strip on
54
+ * the same line, and they are not choices. Using the pattern's own extent keeps
55
+ * this from becoming a second, looser statement of where the strip ends.
56
+ */
57
+ function readPermissionButtons(frame) {
58
+ for (const line of frame.lines) {
59
+ const match = cli_patterns_1.OPENCODE_PERMISSION_PATTERN.exec(line);
60
+ if (!match)
61
+ continue;
62
+ return match[0]
63
+ .replace(/^[^\S\n]*[│┃][^\S\n]*/, '')
64
+ .trim()
65
+ .split(BUTTON_SEPARATOR)
66
+ .map(button => button.trim())
67
+ .filter(button => button !== '');
68
+ }
69
+ return [];
70
+ }
71
+ /**
72
+ * Does this frame carry an opencode dialog?
73
+ *
74
+ * @param frame - The normalised capture
75
+ * @param context - What `detect.ts` measured; see {@link OpenCodeDialogContext}
76
+ */
77
+ function detectOpenCodeDialog(frame, context) {
78
+ if (cli_patterns_1.OPENCODE_PERMISSION_PATTERN.test(frame.lastLines)) {
79
+ return { kind: 'permission', options: readPermissionButtons(frame), answerMode: 'keys' };
80
+ }
81
+ if (cli_patterns_1.OPENCODE_SELECTION_LIST_PATTERN.test(context.contentWindow)) {
82
+ return { kind: 'picker', options: [], answerMode: 'keys' };
83
+ }
84
+ return null;
85
+ }