commandmate 0.37.0 → 0.38.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 (331) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +176 -176
  3. package/.next/app-path-routes-manifest.json +33 -33
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/versions/route_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.nft.json +1 -1
  14. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  16. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/messages/route.js +1 -1
  18. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  19. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/session/route.js +1 -1
  21. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  22. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/assistant/start/route.js +1 -1
  24. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  25. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/assistant/terminal/route.js +1 -1
  27. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  28. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/capabilities/route.js +1 -1
  35. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/daily-summary/route.js +1 -1
  37. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  38. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  40. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  41. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/external-apps/[id]/health/route_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_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  48. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  49. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  51. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  52. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  54. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  55. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/push/escalation/route.js +1 -1
  59. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  60. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/push/vapid/route.js +1 -1
  63. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  64. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  66. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  68. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/remote/pair/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_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  74. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/repositories/clone/route.js +1 -1
  77. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  78. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/restore/route.js +1 -1
  81. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/route.js +1 -1
  84. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  85. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/repositories/scan/route.js +1 -1
  87. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  88. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/repositories/sync/route.js +1 -1
  90. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  91. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  94. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  114. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  117. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  122. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  125. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +4 -3
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  130. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  157. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  159. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  161. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -6
  182. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -7
  188. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  195. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  213. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  225. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/route.js +1 -1
  231. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  234. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  235. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  237. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/page_client-reference-manifest.js +1 -1
  239. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  241. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/sessions/page.js +1 -1
  243. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  244. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  245. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  246. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  247. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/worktrees/[id]/page.js +11 -9
  249. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  250. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  251. package/.next/server/app-paths-manifest.json +33 -33
  252. package/.next/server/chunks/1467.js +1 -1
  253. package/.next/server/chunks/1707.js +1 -1
  254. package/.next/server/chunks/1886.js +2 -2
  255. package/.next/server/chunks/2119.js +1 -1
  256. package/.next/server/chunks/2445.js +1 -1
  257. package/.next/server/chunks/3480.js +1 -18
  258. package/.next/server/chunks/3730.js +1 -1
  259. package/.next/server/chunks/4207.js +5 -0
  260. package/.next/server/chunks/4443.js +1 -1
  261. package/.next/server/chunks/5164.js +1 -1
  262. package/.next/server/chunks/6130.js +1 -1
  263. package/.next/server/chunks/650.js +1 -1
  264. package/.next/server/chunks/6661.js +1 -1
  265. package/.next/server/chunks/6677.js +2 -2
  266. package/.next/server/chunks/6793.js +13 -0
  267. package/.next/server/chunks/7075.js +1 -1
  268. package/.next/server/chunks/8052.js +74 -0
  269. package/.next/server/chunks/8728.js +2 -2
  270. package/.next/server/chunks/9080.js +1 -1
  271. package/.next/server/middleware-manifest.json +5 -5
  272. package/.next/server/pages/500.html +1 -1
  273. package/.next/server/server-reference-manifest.json +1 -1
  274. package/.next/static/chunks/{2407-c4b1d2aae7e3f59b.js → 2407-be448eda70bc19b6.js} +1 -1
  275. package/.next/static/chunks/4388-a778968d9c4e9327.js +1 -0
  276. package/.next/static/chunks/4949-fa93029d6e05db0d.js +1 -0
  277. package/.next/static/chunks/998-292ebcd30f329eb1.js +1 -0
  278. package/.next/static/chunks/app/sessions/page-fe42c8f6fd59b9e7.js +1 -0
  279. package/.next/static/chunks/app/worktrees/[id]/page-1eb4297af22afac8.js +1 -0
  280. package/.next/static/css/ed092b853e52b5eb.css +1 -0
  281. package/.next/trace +14 -14
  282. package/dist/cli/commands/ls.d.ts +64 -0
  283. package/dist/cli/commands/ls.d.ts.map +1 -1
  284. package/dist/cli/commands/ls.js +238 -30
  285. package/dist/cli/commands/respond.d.ts.map +1 -1
  286. package/dist/cli/commands/respond.js +14 -0
  287. package/dist/cli/commands/status.d.ts.map +1 -1
  288. package/dist/cli/commands/status.js +154 -15
  289. package/dist/cli/docs/agent-operations.d.ts +1 -1
  290. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  291. package/dist/cli/docs/agent-operations.js +37 -1
  292. package/dist/cli/types/api-responses.d.ts.map +1 -1
  293. package/dist/cli/utils/server-url.d.ts +27 -0
  294. package/dist/cli/utils/server-url.d.ts.map +1 -1
  295. package/dist/cli/utils/server-url.js +48 -6
  296. package/dist/lib/cli-tools/types.d.ts +22 -1
  297. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  298. package/dist/lib/detection/tools/verified-against.d.ts +8 -0
  299. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  300. package/dist/lib/detection/tools/verified-against.js +8 -0
  301. package/dist/server/locales/en/worktree.json +23 -1
  302. package/dist/server/locales/ja/worktree.json +23 -1
  303. package/dist/server/src/lib/cli-tools/agent-mode-spec.js +327 -0
  304. package/dist/server/src/lib/cli-tools/base.js +22 -0
  305. package/dist/server/src/lib/cmate-parser.js +26 -6
  306. package/dist/server/src/lib/cmate-validator.js +354 -0
  307. package/dist/server/src/lib/detection/cli-patterns.js +40 -2
  308. package/dist/server/src/lib/detection/model-info-extractor.js +40 -3
  309. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +44 -0
  310. package/dist/server/src/lib/detection/tools/antigravity/detect.js +9 -0
  311. package/dist/server/src/lib/detection/tools/command-code/detect.js +14 -3
  312. package/dist/server/src/lib/detection/tools/command-code/permission.js +104 -0
  313. package/dist/server/src/lib/detection/tools/verified-against.js +8 -0
  314. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +20 -2
  315. package/dist/server/src/lib/prompt-answer-sender.js +339 -16
  316. package/dist/server/src/lib/session/claude-executor.js +190 -17
  317. package/dist/server/src/types/cli-tool-contracts.js +75 -1
  318. package/dist/types/cli-tool-contracts.d.ts +162 -0
  319. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  320. package/dist/types/cli-tool-contracts.js +75 -1
  321. package/package.json +1 -1
  322. package/.next/server/chunks/6337.js +0 -1
  323. package/.next/server/chunks/663.js +0 -79
  324. package/.next/static/chunks/4388-410b1d8ed0d8d98b.js +0 -1
  325. package/.next/static/chunks/4949-5b97d1eb769482d2.js +0 -1
  326. package/.next/static/chunks/998-ac0ded6d5eeb4dc0.js +0 -1
  327. package/.next/static/chunks/app/sessions/page-b8651c3f17c36800.js +0 -1
  328. package/.next/static/chunks/app/worktrees/[id]/page-f993ca88fe758599.js +0 -1
  329. package/.next/static/css/c511ecdf1e7f18a0.css +0 -1
  330. /package/.next/static/{0WNCXbrakAsDUEgDarN8N → DryXJ1-iHfWxfrHkkWVy8}/_buildManifest.js +0 -0
  331. /package/.next/static/{0WNCXbrakAsDUEgDarN8N → DryXJ1-iHfWxfrHkkWVy8}/_ssgManifest.js +0 -0
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ /**
3
+ * CMATE.md Client-Side Validator
4
+ * Issue #294: Schedule execution feature
5
+ *
6
+ * Provides pure-function validation and template generation for CMATE.md files.
7
+ * Unlike cmate-parser.ts, this module has no fs dependency and can be used
8
+ * in client-side (browser) code.
9
+ *
10
+ * Validation rules mirror cmate-parser.ts but return errors instead of
11
+ * silently skipping invalid entries.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.CMATE_TEMPLATE_CONTENT = exports.COMMAND_CODE_DIRECT_WRITE_TOOLS_DENIED = exports.COMMAND_CODE_PRINT_GATED_TOOLS = void 0;
15
+ exports.parseCmateContent = parseCmateContent;
16
+ exports.validateScheduleHeaders = validateScheduleHeaders;
17
+ exports.validateSchedulesSection = validateSchedulesSection;
18
+ exports.isCommandCodeDirectWriteToolsDenied = isCommandCodeDirectWriteToolsDenied;
19
+ exports.collectScheduleWarnings = collectScheduleWarnings;
20
+ exports.isScheduleEnabled = isScheduleEnabled;
21
+ const cmate_constants_1 = require("../config/cmate-constants");
22
+ const schedule_config_1 = require("../config/schedule-config");
23
+ const cmate_cli_tool_parser_1 = require("../lib/cmate-cli-tool-parser");
24
+ const types_1 = require("../lib/cli-tools/types");
25
+ /**
26
+ * The tools `commandcode -p` rejects when the agent calls them directly and
27
+ * `--yolo` was not passed (Issue #2576; measured on the 1.53.1 bundle, where
28
+ * `resolvePrintHarnessMods` injects `print-permission-gate` unless
29
+ * `dangerouslySkipPermissions` is set).
30
+ */
31
+ exports.COMMAND_CODE_PRINT_GATED_TOOLS = [
32
+ 'edit_file',
33
+ 'write_file',
34
+ 'shell_command',
35
+ 'monitor_command',
36
+ 'kill_shell',
37
+ ];
38
+ /** Reason code of the command-code print-gate warning (Issue #2576) */
39
+ exports.COMMAND_CODE_DIRECT_WRITE_TOOLS_DENIED = 'command-code-direct-write-tools-denied';
40
+ /** Required header columns for the Schedules table */
41
+ const REQUIRED_SCHEDULE_HEADERS = ['Name', 'Cron', 'Message', 'CLI Tool', 'Enabled'];
42
+ /** Optional header columns (validated only when present) */
43
+ const OPTIONAL_SCHEDULE_HEADERS = ['Permission'];
44
+ // =============================================================================
45
+ // Template
46
+ // =============================================================================
47
+ /** Default CMATE.md template content */
48
+ exports.CMATE_TEMPLATE_CONTENT = `## Schedules
49
+
50
+ | Name | Cron | Message | CLI Tool | Enabled | Permission |
51
+ |------|------|---------|----------|---------|------------|
52
+ | example-task | 0 * * * * | README.mdを要約してください | claude | true | acceptEdits |
53
+ | copilot-example | 0 9 * * * | コードをレビューしてください | copilot --model gpt-4.1 | true | allow-all-tools |
54
+ `;
55
+ // =============================================================================
56
+ // Parser (client-side, no fs dependency)
57
+ // =============================================================================
58
+ /**
59
+ * Parse CMATE.md content into a generic structure.
60
+ * Client-side equivalent of parseCmateFile() from cmate-parser.ts.
61
+ *
62
+ * @param content - Raw CMATE.md file content
63
+ * @returns Map of section name to table rows
64
+ */
65
+ function parseCmateContent(content) {
66
+ const result = new Map();
67
+ const lines = content.split('\n');
68
+ let currentSection = null;
69
+ let headerParsed = false;
70
+ let separatorParsed = false;
71
+ for (const line of lines) {
72
+ const trimmed = line.trim();
73
+ const headerMatch = trimmed.match(/^##\s+(.+)$/);
74
+ if (headerMatch) {
75
+ currentSection = headerMatch[1].trim();
76
+ headerParsed = false;
77
+ separatorParsed = false;
78
+ if (!result.has(currentSection)) {
79
+ result.set(currentSection, []);
80
+ }
81
+ continue;
82
+ }
83
+ if (!trimmed || !trimmed.startsWith('|') || !currentSection) {
84
+ continue;
85
+ }
86
+ if (!headerParsed) {
87
+ headerParsed = true;
88
+ continue;
89
+ }
90
+ if (!separatorParsed) {
91
+ if (trimmed.match(/^\|[\s-:|]+\|$/)) {
92
+ separatorParsed = true;
93
+ continue;
94
+ }
95
+ separatorParsed = true;
96
+ }
97
+ const cells = trimmed
98
+ .split('|')
99
+ .slice(1, -1)
100
+ .map((cell) => cell.trim());
101
+ if (cells.length > 0) {
102
+ result.get(currentSection).push(cells);
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ // =============================================================================
108
+ // Validation
109
+ // =============================================================================
110
+ /**
111
+ * Validate that the Schedules section header row contains the expected columns.
112
+ *
113
+ * @param content - Raw CMATE.md file content
114
+ * @returns Array of validation errors (empty = headers valid)
115
+ */
116
+ function validateScheduleHeaders(content) {
117
+ const errors = [];
118
+ const lines = content.split('\n');
119
+ let inSchedules = false;
120
+ for (const line of lines) {
121
+ const trimmed = line.trim();
122
+ const sectionMatch = trimmed.match(/^##\s+(.+)$/);
123
+ if (sectionMatch) {
124
+ inSchedules = sectionMatch[1].trim() === 'Schedules';
125
+ continue;
126
+ }
127
+ if (!inSchedules || !trimmed.startsWith('|')) {
128
+ continue;
129
+ }
130
+ // First table row in Schedules section = header row
131
+ const cells = trimmed
132
+ .split('|')
133
+ .slice(1, -1)
134
+ .map((cell) => cell.trim());
135
+ // Validate required headers
136
+ for (let i = 0; i < REQUIRED_SCHEDULE_HEADERS.length; i++) {
137
+ const expected = REQUIRED_SCHEDULE_HEADERS[i];
138
+ const actual = cells[i];
139
+ if (!actual || actual !== expected) {
140
+ errors.push({
141
+ row: -1,
142
+ message: `Header column ${i + 1}: expected "${expected}", got "${actual || '(missing)'}"`,
143
+ field: 'header',
144
+ });
145
+ }
146
+ }
147
+ // Validate optional headers (only when present)
148
+ for (let j = 0; j < OPTIONAL_SCHEDULE_HEADERS.length; j++) {
149
+ const colIndex = REQUIRED_SCHEDULE_HEADERS.length + j;
150
+ const expected = OPTIONAL_SCHEDULE_HEADERS[j];
151
+ const actual = cells[colIndex];
152
+ if (actual !== undefined && actual !== expected) {
153
+ errors.push({
154
+ row: -1,
155
+ message: `Header column ${colIndex + 1}: expected "${expected}", got "${actual}"`,
156
+ field: 'header',
157
+ });
158
+ }
159
+ }
160
+ break; // Only check the first table row (header)
161
+ }
162
+ return errors;
163
+ }
164
+ /**
165
+ * Validate rows from the Schedules section.
166
+ * Returns an array of validation errors (empty array = all valid).
167
+ *
168
+ * @param rows - Raw table rows from parseCmateContent() for the Schedules section
169
+ * @returns Array of validation errors
170
+ */
171
+ function validateSchedulesSection(rows) {
172
+ const errors = [];
173
+ for (let i = 0; i < rows.length; i++) {
174
+ const row = rows[i];
175
+ // Minimum required columns: Name, Cron, Message
176
+ if (row.length < 3) {
177
+ errors.push({
178
+ row: i,
179
+ message: `Row ${i + 1}: insufficient columns (need at least 3, got ${row.length})`,
180
+ field: 'columns',
181
+ });
182
+ continue;
183
+ }
184
+ const [name, cronExpression, message] = row;
185
+ // Validate name
186
+ const sanitizedName = (0, cmate_constants_1.sanitizeContent)(name);
187
+ if (!cmate_constants_1.NAME_PATTERN.test(sanitizedName)) {
188
+ errors.push({
189
+ row: i,
190
+ message: `Row ${i + 1}: invalid name "${sanitizedName}"`,
191
+ field: 'name',
192
+ });
193
+ }
194
+ // Validate cron expression
195
+ if (!(0, cmate_constants_1.isValidCronExpression)(cronExpression)) {
196
+ errors.push({
197
+ row: i,
198
+ message: `Row ${i + 1}: invalid cron "${cronExpression}"`,
199
+ field: 'cron',
200
+ });
201
+ }
202
+ // Validate message
203
+ const sanitizedMessage = (0, cmate_constants_1.sanitizeContent)(message);
204
+ if (!sanitizedMessage.trim()) {
205
+ errors.push({
206
+ row: i,
207
+ message: `Row ${i + 1}: empty message`,
208
+ field: 'message',
209
+ });
210
+ }
211
+ // Validate CLI Tool column via shared pipeline (DR1-007)
212
+ const { result: parsed, errors: cliToolErrors } = (0, cmate_cli_tool_parser_1.parseAndValidateCliToolColumn)(row[3] || '');
213
+ for (const errMsg of cliToolErrors) {
214
+ errors.push({
215
+ row: i,
216
+ message: `Row ${i + 1}: ${errMsg}`,
217
+ field: errMsg.includes('Model') ? 'model' : 'cliTool',
218
+ });
219
+ }
220
+ // Validate cliToolId is a known tool (DR2-009)
221
+ if (parsed && !(0, types_1.isCliToolType)(parsed.cliToolId)) {
222
+ errors.push({
223
+ row: i,
224
+ message: `Row ${i + 1}: unknown CLI Tool "${parsed.cliToolId}"`,
225
+ field: 'cliTool',
226
+ });
227
+ }
228
+ // Validate permission (6th column)
229
+ // Empty/missing permission is allowed -- parser applies default per CLI tool
230
+ const permissionStr = row[5];
231
+ if (permissionStr !== undefined && permissionStr.trim() !== '') {
232
+ const trimmedPermission = permissionStr.trim();
233
+ const cliToolId = parsed.cliToolId;
234
+ // DR3-002: copilot separated from gemini/vibe-local to accept COPILOT_PERMISSIONS
235
+ // Issue #1914: the fallback is `[]`, not CLAUDE_PERMISSIONS. Every tool
236
+ // whose CLI has a permission flag is named explicitly; anything else --
237
+ // `opencode`, `gemini`, `vibe-local`, and any tool added to CLI_TOOL_IDS
238
+ // without a branch here -- has no flag, so a non-empty Permission cell is
239
+ // an error rather than something silently checked against Claude's list.
240
+ // Issue #2454: command-code's list is the six-value column vocabulary
241
+ // (`yolo` + the five `--permission-mode` choices), the same set the
242
+ // parser accepts and the dialog offers.
243
+ const allowedValues = cliToolId === 'claude' ? schedule_config_1.CLAUDE_PERMISSIONS
244
+ : cliToolId === 'codex' ? schedule_config_1.CODEX_SANDBOXES
245
+ : cliToolId === 'copilot' ? schedule_config_1.COPILOT_PERMISSIONS
246
+ : cliToolId === 'antigravity' ? schedule_config_1.ANTIGRAVITY_PERMISSIONS
247
+ : cliToolId === 'command-code' ? schedule_config_1.COMMAND_CODE_SCHEDULE_PERMISSIONS
248
+ : [];
249
+ if (!allowedValues.includes(trimmedPermission)) {
250
+ errors.push({
251
+ row: i,
252
+ message: `Row ${i + 1}: invalid permission "${trimmedPermission}" for ${cliToolId}`,
253
+ field: 'permission',
254
+ });
255
+ }
256
+ }
257
+ }
258
+ return errors;
259
+ }
260
+ // =============================================================================
261
+ // Warnings (Issue #2576)
262
+ // =============================================================================
263
+ /**
264
+ * Whether a schedule runs `commandcode -p` with its print gate still on.
265
+ *
266
+ * Shared by the parser's log line, {@link collectScheduleWarnings} and the
267
+ * ScheduleEditDialog note, so the three cannot disagree.
268
+ *
269
+ * The test is "one of the five `--permission-mode` values", not "anything but
270
+ * `yolo`", because that is what `buildCliArgs` does: `yolo` gets `--yolo`, the
271
+ * five modes get `--permission-mode <value>` and leave the gate on, and
272
+ * anything else (an empty cell, an out-of-vocabulary value) gets `--yolo` --
273
+ * which is also what the parser resolves those cells to. "Not `yolo`" flagged
274
+ * an empty cell that in fact runs with `--yolo`.
275
+ *
276
+ * What the gate rejects is the write tools the agent calls *directly*
277
+ * ({@link COMMAND_CODE_PRINT_GATED_TOOLS}); a write routed through a sub-agent
278
+ * can still land, so this does not mean the run is read-only.
279
+ *
280
+ * @param cliToolId - CLI tool id of the schedule
281
+ * @param permission - Permission cell or resolved permission
282
+ * @returns true when the directly-called write tools will be rejected
283
+ */
284
+ function isCommandCodeDirectWriteToolsDenied(cliToolId, permission) {
285
+ return (cliToolId === 'command-code' &&
286
+ schedule_config_1.COMMAND_CODE_PERMISSIONS.includes(permission.trim()));
287
+ }
288
+ /**
289
+ * Collect non-blocking warnings from the Schedules section rows (Issue #2576).
290
+ *
291
+ * CMATE.md is edited by hand, and that path never shows the dialog note, so the
292
+ * judgment has to run on the file itself. Only rows that will actually run with
293
+ * the gate on are reported, mirroring `parseSchedulesSection`:
294
+ *
295
+ * - rows the parser skips (any validation error other than the permission) are
296
+ * left out and do not count toward the limit;
297
+ * - rows past `MAX_SCHEDULE_ENTRIES` registered rows are left out -- the parser
298
+ * stops there, and a row with an out-of-vocabulary permission *is* registered
299
+ * (as `yolo`), so it counts;
300
+ * - rows with an out-of-vocabulary permission are left out -- they run as `yolo`;
301
+ * - disabled rows are left out -- they are registered but never run, and the
302
+ * warning is about a schedule running unnoticed. Enabling one rewrites
303
+ * CMATE.md, and the next read reports it.
304
+ *
305
+ * This never adds to {@link validateSchedulesSection}'s errors -- a warned row
306
+ * is still registered and still runs.
307
+ *
308
+ * @param rows - Raw table rows from parseCmateContent() for the Schedules section
309
+ * @returns Array of warnings (empty = nothing to flag)
310
+ */
311
+ function collectScheduleWarnings(rows) {
312
+ const warnings = [];
313
+ let registered = 0;
314
+ for (let i = 0; i < rows.length; i++) {
315
+ const row = rows[i];
316
+ const errors = validateSchedulesSection([row]);
317
+ if (errors.some((error) => error.field !== 'permission'))
318
+ continue;
319
+ if (registered >= cmate_constants_1.MAX_SCHEDULE_ENTRIES)
320
+ break;
321
+ registered++;
322
+ if (errors.length > 0)
323
+ continue;
324
+ const [rawName, , , rawCliTool, enabledStr, permissionStr] = row;
325
+ if (!isScheduleEnabled(enabledStr))
326
+ continue;
327
+ const { result: parsed } = (0, cmate_cli_tool_parser_1.parseAndValidateCliToolColumn)(rawCliTool || '');
328
+ const permission = (permissionStr ?? '').trim();
329
+ if (!isCommandCodeDirectWriteToolsDenied(parsed.cliToolId, permission))
330
+ continue;
331
+ const name = (0, cmate_constants_1.sanitizeContent)(rawName);
332
+ warnings.push({
333
+ row: i,
334
+ name,
335
+ field: 'permission',
336
+ code: exports.COMMAND_CODE_DIRECT_WRITE_TOOLS_DENIED,
337
+ cliToolId: parsed.cliToolId,
338
+ permission,
339
+ message: `Row ${i + 1}: schedule "${name}" runs command-code with the --permission-mode value "${permission}", ` +
340
+ `so commandcode -p rejects the write tools the agent calls directly ` +
341
+ `(${exports.COMMAND_CODE_PRINT_GATED_TOOLS.join(', ')}). ` +
342
+ 'This is a warning, not an error: the schedule still runs. Use "yolo" if it needs to write.',
343
+ });
344
+ }
345
+ return warnings;
346
+ }
347
+ /**
348
+ * Read the Enabled cell of a Schedules row: missing, empty or `true` (any case)
349
+ * means enabled. Shared with `parseSchedulesSection` so the parser and
350
+ * {@link collectScheduleWarnings} cannot disagree about which rows run.
351
+ */
352
+ function isScheduleEnabled(enabledStr) {
353
+ return enabledStr === undefined || enabledStr === '' || enabledStr.toLowerCase() === 'true';
354
+ }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_USER_ECHO_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.CODEX_DIALOG_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
8
- exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = void 0;
8
+ exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = void 0;
9
9
  exports.isCodexTurnActive = isCodexTurnActive;
10
10
  exports.findClaudeChromeStart = findClaudeChromeStart;
11
11
  exports.isCodexPromptReady = isCodexPromptReady;
@@ -2020,14 +2020,52 @@ exports.VIBE_LOCAL_PROMPT_PATTERN = /ctx:\d+%\s*[>❯]/m;
2020
2020
  * Matches braille spinners, "Thinking", and tool execution indicators.
2021
2021
  */
2022
2022
  exports.VIBE_LOCAL_THINKING_PATTERN = /[\u2800-\u28FF]|Thinking|⠋|⠙|⠹|⠸|⠼|⠴|⠦|⠧|⠇|⠏|Running|Executing/;
2023
+ /**
2024
+ * The banner agy paints INTO its empty input box while a non-default permission
2025
+ * mode is on (Issue #2592).
2026
+ *
2027
+ * Measured on agy 1.2.4 in the #2592 UAT
2028
+ * (`tests/fixtures/agent-mode-2592/antigravity-{accept-edits,plan}.txt`, row 18,
2029
+ * between the box's two rules):
2030
+ *
2031
+ * `> Accept-edits mode: file edits auto-approved (shift+tab to cycle)`
2032
+ * `> Plan mode: research & plan only (shift+tab to cycle)`
2033
+ *
2034
+ * It takes the place of the bare `>` an empty box shows in default — it is a
2035
+ * placeholder, not typed text — so a reader that only accepts the bare glyph
2036
+ * reads an idle accept-edits / plan pane as "no input box at all". Before this
2037
+ * pattern existed that is exactly what happened: the status detector fell through
2038
+ * to its `default` floor (`running` + `isUnclassifiedActive`), `commandmate ls`
2039
+ * showed a resting agent as running, `wait` never completed, and
2040
+ * `isAntigravityReady` refused every send. #2592 made those two modes one click
2041
+ * away, so the hole had to close with it.
2042
+ *
2043
+ * The structure is matched rather than the two sentences: `<Name> mode: <text>
2044
+ * (shift+tab to cycle)`, anchored on the key hint agy ends every banner with, so
2045
+ * a third mode needs no edit here. What stays out is anything a user could have
2046
+ * typed into the box — the trailing hint is the part nobody types.
2047
+ *
2048
+ * Whole-row, no `/g`, no nested quantifiers (`[^\n]*` is followed by a literal).
2049
+ */
2050
+ exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = '>[^\\S\\n]+[A-Z][A-Za-z-]*[^\\S\\n]mode:[^\\n]*\\(shift\\+tab to cycle\\)[^\\S\\n]*';
2051
+ /** {@link ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE} as a single-row pattern. */
2052
+ exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = new RegExp(`^${exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE}$`, 'm');
2023
2053
  /**
2024
2054
  * Antigravity (agy) interactive REPL prompt pattern (Issue #988)
2025
2055
  * agy shows a bare ">" input box line when waiting for user input. The input box
2026
2056
  * is always rendered (even while generating), so prompt presence alone does not
2027
2057
  * mean "ready" — running vs idle is resolved together with the thinking pattern /
2028
2058
  * footer status bar in status-detector.ts. (Confirmed on machine: line is "> ".)
2059
+ *
2060
+ * Issue #2592: or the mode banner that replaces the bare glyph in an EMPTY box
2061
+ * while accept-edits / plan is on ({@link ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN}).
2062
+ * Every consumer of this pattern is asking "is agy's input box drawn and empty?"
2063
+ * — the idle rule in `detection/tools/antigravity/detect.ts`, the survey guard
2064
+ * beside it, `isAntigravityReady` (the send gate) and the liveness probe — and
2065
+ * the answer does not depend on the permission mode, so the banner is folded in
2066
+ * here once rather than at each of them.
2029
2067
  */
2030
- exports.ANTIGRAVITY_PROMPT_PATTERN = /^>\s*$/m;
2068
+ exports.ANTIGRAVITY_PROMPT_PATTERN = new RegExp(`^(?:>\\s*|${exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE})$`, 'm');
2031
2069
  /**
2032
2070
  * Antigravity (agy) thinking/processing pattern (Issue #988)
2033
2071
  * While generating, agy shows a braille spinner with "Generating..." in the
@@ -34,6 +34,7 @@
34
34
  * | tool | line |
35
35
  * |-------------|------------------------------------------------------------------|
36
36
  * | codex | footer: `gpt-5.6-sol xhigh · ~/share/work/…` |
37
+ * | codex | footer: `gpt-6-astra medium · ~/… · <thread title> Plan mode (…)` (0.154, #2592) |
37
38
  * | claude | banner: `▝▜█████▛▘ Opus 5 (1M context) with xhigh effort · Claude Max` |
38
39
  * | claude | switch: ` ⎿ Set model to Sonnet 5 for this session only` (#2361) |
39
40
  * | antigravity | footer: `? for shortcuts … Gemini 3.7 Flash · hig` |
@@ -61,7 +62,7 @@
61
62
  * @see Issue #1784, Phase 2 of the model/effort visibility series
62
63
  */
63
64
  Object.defineProperty(exports, "__esModule", { value: true });
64
- exports.ANTIGRAVITY_MODEL_ID_EFFORT_PATTERN = exports.COMMAND_CODE_BANNER_MODELS_PATTERN = exports.OPENCODE_STEP_MODEL_PATTERN = exports.COPILOT_MODEL_CHANGE_PATTERN = exports.ANTIGRAVITY_BANNER_MODEL_PATTERN = exports.ANTIGRAVITY_STATUS_BAR_HINT_PATTERN = exports.CLAUDE_MODEL_SWITCH_PATTERN = exports.CLAUDE_STARTUP_BANNER_PATTERN = exports.CODEX_FOOTER_MODEL_PATTERN = exports.REASONING_EFFORT_LEVELS = void 0;
65
+ exports.ANTIGRAVITY_MODEL_ID_EFFORT_PATTERN = exports.COMMAND_CODE_BANNER_MODELS_PATTERN = exports.OPENCODE_STEP_MODEL_PATTERN = exports.COPILOT_MODEL_CHANGE_PATTERN = exports.ANTIGRAVITY_BANNER_MODEL_PATTERN = exports.ANTIGRAVITY_STATUS_BAR_HINT_PATTERN = exports.CLAUDE_MODEL_SWITCH_PATTERN = exports.CLAUDE_STARTUP_BANNER_PATTERN = exports.CODEX_STATUS_BAR_WITH_TRAILER_PATTERN = exports.CODEX_FOOTER_MODEL_PATTERN = exports.REASONING_EFFORT_LEVELS = void 0;
65
66
  exports.resolveEffortToken = resolveEffortToken;
66
67
  exports.extractModelInfo = extractModelInfo;
67
68
  exports.deriveEffortFromModelId = deriveEffortFromModelId;
@@ -156,12 +157,48 @@ function resolveEffortToken(token, options = {}) {
156
157
  * `cli-patterns.ts` documents).
157
158
  */
158
159
  exports.CODEX_FOOTER_MODEL_PATTERN = /^\s*([^\s·]+)(?:\s+(minimal|low|medium|high|xhigh)\b)?/i;
160
+ /**
161
+ * A codex status bar with something AFTER the path (Issue #2592).
162
+ *
163
+ * codex 0.154.0 appends two things to the bar the pattern above was written for,
164
+ * measured in the #2592 UAT (`tests/fixtures/agent-mode-2592/codex-*.txt`, row 40):
165
+ *
166
+ * ` gpt-6-astra medium · ~/uat3-…/sandbox-repo · Reply with one word Plan mode (shift+tab to cycle)`
167
+ * ` gpt-6-astra xhigh · ~/uat3-…/sandbox-repo · Reply with one word`
168
+ * ` gpt-6-astra medium · ~/uat3-…/sandbox-repo Plan mode (shift+tab to cycle)`
169
+ *
170
+ * — a `·` segment carrying the thread's title once the first turn has named it,
171
+ * and the right-aligned Plan-mode badge. `CODEX_STATUS_BAR_PATTERN` requires the
172
+ * row to END in the path, so every one of these read as "no status bar", and the
173
+ * model / effort latched from the one bar codex draws before the first turn
174
+ * (`xhigh`) stayed on screen for the rest of the session. That is how #2592's
175
+ * UAT found it: Plan mode moves codex to `medium`, the pane said so, and the UI
176
+ * kept saying `xhigh`.
177
+ *
178
+ * Deliberately a SECOND pattern here rather than a widened
179
+ * `CODEX_STATUS_BAR_PATTERN`. That one is the footer boundary the codex
180
+ * running/idle rules are windowed on (#1150), and the module docblock's rule —
181
+ * this module must never be the reason that boundary moves — stands. Widening a
182
+ * value reader cannot change a status verdict; widening the boundary can.
183
+ *
184
+ * The shape: head segment (`<model>[ <effort>]`), `·`, a path, then EITHER a
185
+ * further `·` segment OR a column gap (two spaces) before right-aligned text.
186
+ * The trailer must start at one of those two places, so a path followed by a
187
+ * single space and prose is still not a bar. {@link readCodexFooter}'s
188
+ * digit-or-effort check applies to rows matched either way.
189
+ *
190
+ * No /g. No nested quantifiers: `[^·]*` stops at the first `·`, and the two
191
+ * trailer alternatives each start with a literal or a fixed-width gap.
192
+ */
193
+ exports.CODEX_STATUS_BAR_WITH_TRAILER_PATTERN = /^\s*\S[^·]*·\s*~?\/\S*(?:\s*·[^\n]*|[^\S\n]{2,}\S[^\n]*)$/;
159
194
  function readCodexFooter(line) {
160
195
  // Same "is this the status bar" question the detector asks, answered by the
161
196
  // same pattern (#1150). Imported read-only: this module must never be the
162
- // reason that boundary moves.
163
- if (!cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(line))
197
+ // reason that boundary moves. Issue #2592 adds the trailer-bearing shape as a
198
+ // second, extractor-local reading — see CODEX_STATUS_BAR_WITH_TRAILER_PATTERN.
199
+ if (!cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(line) && !exports.CODEX_STATUS_BAR_WITH_TRAILER_PATTERN.test(line)) {
164
200
  return null;
201
+ }
165
202
  const separator = line.indexOf('·');
166
203
  if (separator < 0)
167
204
  return null;
@@ -5,6 +5,7 @@ exports.APPROVAL_TARGET_MAX_LOOKBACK = void 0;
5
5
  exports.findClaudeTaskPanelLines = findClaudeTaskPanelLines;
6
6
  exports.findClaudeChrome = findClaudeChrome;
7
7
  exports.maskClaudeChrome = maskClaudeChrome;
8
+ exports.isTypedTextFieldOption = isTypedTextFieldOption;
8
9
  exports.findApprovalContextStart = findApprovalContextStart;
9
10
  exports.joinApprovalTarget = joinApprovalTarget;
10
11
  exports.buildMultipleChoiceResult = buildMultipleChoiceResult;
@@ -410,6 +411,49 @@ const TEXT_INPUT_PATTERNS = [
410
411
  /custom/i,
411
412
  /differently/i,
412
413
  ];
414
+ /**
415
+ * Labels of the rows measured to BE a text field on screen (Issue #2573).
416
+ *
417
+ * `requiresTextInput` (from {@link TEXT_INPUT_PATTERNS}) reads the WORDS of a
418
+ * label — "tell … what to do differently", "custom", "enter …" — and says the
419
+ * option is about the user's own text. It does not say where typed characters
420
+ * land, and for two rows it flags alike the measured answer is opposite:
421
+ *
422
+ * | row | on screen | free text + Enter |
423
+ * |-----|-----------|-------------------|
424
+ * | Command Code `AskUserQuestion` `Type something...` (#2522) | a `TextInput` | lands in the field — the answer |
425
+ * | Command Code permission `No, tell Command Code what to do differently` | a menu row | ignored; the Enter confirms the highlighted `1. Yes` |
426
+ *
427
+ * The second is how a "No + reason" was delivered as an approval. The same
428
+ * words sit on codex's and copilot's approval rows (codex's also name letter
429
+ * hotkeys, `(y)` / `(p)`), and the generic patterns match inside the command an
430
+ * approval row quotes (`… commands that start with 'npm run custom'`).
431
+ *
432
+ * So this is an allowlist of what was measured, not a denylist of what went
433
+ * wrong: a flagged row is a field only when its label is one of these. Anchored
434
+ * at the start so Command Code's folded description (`Type something... Give me
435
+ * a branch name …`) still matches. Command Code's reader
436
+ * (`tools/command-code/dialog.ts`) marks the same rows with the same expression.
437
+ */
438
+ const TYPED_TEXT_FIELD_LABEL_PATTERNS = [
439
+ /^[^\S\n]*type\s+something\b/i,
440
+ ];
441
+ /**
442
+ * Whether typed text reaches this option as its answer (Issue #2573).
443
+ *
444
+ * `true` only for a `requiresTextInput` row whose label is a measured text field
445
+ * ({@link TYPED_TEXT_FIELD_LABEL_PATTERNS}). Every other flagged row is a menu
446
+ * row: it is answered by its NUMBER, and free text sent at it is swallowed while
447
+ * the Enter after it confirms whatever is highlighted.
448
+ *
449
+ * Pure, and restated in `components/worktree/PromptPanel.tsx` for the answer
450
+ * panels, which cannot import this module (its graph reaches `lib/env`'s `fs`);
451
+ * `tests/unit/components/PromptPanel.test.tsx` asserts the two agree.
452
+ */
453
+ function isTypedTextFieldOption(option) {
454
+ return option.requiresTextInput === true
455
+ && TYPED_TEXT_FIELD_LABEL_PATTERNS.some((pattern) => pattern.test(option.label));
456
+ }
413
457
  // ============================================================================
414
458
  // Helper functions
415
459
  // ============================================================================
@@ -163,6 +163,15 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
163
163
  };
164
164
  }
165
165
  // Idle: bare "> " input prompt visible and the response has completed.
166
+ //
167
+ // Issue #2592: "bare" includes the permission-mode banner agy paints into
168
+ // an EMPTY box while accept-edits / plan is on (`> Plan mode: research &
169
+ // plan only (shift+tab to cycle)`) — `promptPattern` accepts it, see
170
+ // ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN. Without that, a resting pane in
171
+ // either mode reached the `default` floor as `running` + unclassified, and
172
+ // the mode button (which refuses unclassified frames) could switch INTO
173
+ // accept-edits once and never back out. The thinking check above still runs
174
+ // first, so a generating pane in those modes is still `running`.
166
175
  const { promptPattern } = (0, cli_patterns_1.getCliToolPatterns)('antigravity');
167
176
  if (promptPattern.test(frame.lastLines)) {
168
177
  return {
@@ -51,9 +51,14 @@
51
51
  * branch below publishes `'positive'` outright rather than through
52
52
  * `resolveIdleEvidence`, so a rule added without changing that would never run.
53
53
  *
54
- * No `detectDialog` either: Epic #2249 決定 3 keeps Auto-Yes on the legacy
55
- * numbered-response path, because Command Code fires `PreToolUse` AFTER the
56
- * dialog is answered, so a hook-driven permission decision cannot dismiss it.
54
+ * Epic #2249 決定 3 keeps Auto-Yes on the legacy numbered-response path,
55
+ * because Command Code fires `PreToolUse` AFTER the dialog is answered, so a
56
+ * hook-driven permission decision cannot dismiss it. That is why this module
57
+ * had no `detectDialog` until Issue #2574 — and why the one it has now does not
58
+ * touch that decision. `./permission.ts` declares how the permission dialog
59
+ * takes an answer (`numbered`, and a digit that commits without an Enter), which
60
+ * is what `sendPromptAnswer` reads; the Auto-Yes gate still does not judge this
61
+ * tool, because its rollout row stays `legacy`.
57
62
  *
58
63
  * Issue #2369 added a second `afterPrompt` branch for the other screen the
59
64
  * shared chain could not read: the `/usage` panel, whose last row is
@@ -123,6 +128,7 @@ exports.commandCodeStatusDetector = exports.VERIFIED_AGAINST = void 0;
123
128
  const cli_patterns_1 = require("../../cli-patterns");
124
129
  const selection_shape_1 = require("../../selection-shape");
125
130
  const dialog_1 = require("./dialog");
131
+ const permission_1 = require("./permission");
126
132
  const status_reason_1 = require("../../status-reason");
127
133
  const run_detection_1 = require("../run-detection");
128
134
  const verified_against_1 = require("../verified-against");
@@ -257,6 +263,11 @@ exports.commandCodeStatusDetector = (0, run_detection_1.createToolStatusDetector
257
263
  }
258
264
  return null;
259
265
  },
266
+ // Issue #2574: the permission dialog's answer mode, for the sender. Not an
267
+ // Auto-Yes gate — see the module docblock and `./permission.ts`.
268
+ detectDialog(frame) {
269
+ return (0, permission_1.detectCommandCodePermissionDialog)(frame);
270
+ },
260
271
  afterThinking(frame) {
261
272
  // The composer is drawn throughout a turn, so "running" has to be resolved
262
273
  // before the generic composer check can say "ready". Widened window; see the