commandmate 0.46.1 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (711) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +223 -216
  3. package/.next/app-path-routes-manifest.json +19 -18
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +8 -0
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route.js +4 -2
  13. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/capabilities/route.js +1 -1
  19. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/daily-summary/route.js +1 -1
  21. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  22. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  24. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  25. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  32. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  33. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  35. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  36. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  38. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  39. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/push/escalation/route.js +1 -7
  43. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  44. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/push/vapid/route.js +1 -7
  47. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  48. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  50. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  51. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/relays/route.js +1 -1
  53. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  54. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  58. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  59. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/repositories/clone/route.js +1 -1
  61. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  62. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/repositories/restore/route.js +1 -1
  65. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  66. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/repositories/route.js +1 -1
  68. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  69. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/scan/route.js +1 -1
  71. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  72. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/sync/route.js +1 -1
  74. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  75. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  78. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  79. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  96. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  99. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  102. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  107. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  110. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  113. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  146. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  149. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  152. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  162. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  165. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -0
  170. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -0
  171. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -0
  172. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  175. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  178. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  181. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  191. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
  193. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  205. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  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/login/page_client-reference-manifest.js +1 -1
  234. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  236. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  237. package/.next/server/app/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  240. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  241. package/.next/server/app/sessions/page.js +1 -1
  242. package/.next/server/app/sessions/page.js.nft.json +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 -11
  249. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  250. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  251. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  252. package/.next/server/app-paths-manifest.json +19 -18
  253. package/.next/server/chunks/1210.js +1 -1
  254. package/.next/server/chunks/1559.js +1 -1
  255. package/.next/server/chunks/1601.js +7 -0
  256. package/.next/server/chunks/1836.js +1 -0
  257. package/.next/server/chunks/1945.js +14 -0
  258. package/.next/server/chunks/2119.js +1 -1
  259. package/.next/server/chunks/2404.js +1 -1
  260. package/.next/server/chunks/2422.js +1 -0
  261. package/.next/server/chunks/2445.js +1 -1
  262. package/.next/server/chunks/2460.js +1 -1
  263. package/.next/server/chunks/2534.js +1 -1
  264. package/.next/server/chunks/3241.js +1 -1
  265. package/.next/server/chunks/{3077.js → 4194.js} +12 -12
  266. package/.next/server/chunks/4207.js +1 -1
  267. package/.next/server/chunks/4248.js +1 -1
  268. package/.next/server/chunks/5209.js +1 -1
  269. package/.next/server/chunks/5292.js +1 -1
  270. package/.next/server/chunks/5595.js +1 -1
  271. package/.next/server/chunks/5845.js +1 -1
  272. package/.next/server/chunks/6130.js +1 -1
  273. package/.next/server/chunks/6401.js +1 -1
  274. package/.next/server/chunks/{2283.js → 6486.js} +7 -7
  275. package/.next/server/chunks/6722.js +1 -1
  276. package/.next/server/chunks/6781.js +1 -1
  277. package/.next/server/chunks/6793.js +2 -2
  278. package/.next/server/chunks/7166.js +19 -0
  279. package/.next/server/chunks/7905.js +1 -1
  280. package/.next/server/chunks/8581.js +10 -10
  281. package/.next/server/chunks/8728.js +2 -2
  282. package/.next/server/chunks/8791.js +1 -1
  283. package/.next/server/chunks/8918.js +4 -4
  284. package/.next/server/chunks/9199.js +1 -0
  285. package/.next/server/chunks/936.js +1 -0
  286. package/.next/server/chunks/9390.js +1 -1
  287. package/.next/server/chunks/9540.js +1 -0
  288. package/.next/server/chunks/9627.js +1 -1
  289. package/.next/server/chunks/9731.js +3 -3
  290. package/.next/server/middleware-manifest.json +5 -5
  291. package/.next/server/pages/500.html +1 -1
  292. package/.next/server/server-reference-manifest.json +1 -1
  293. package/.next/static/chunks/{2407-9703c569370b8a9d.js → 2407-b2f524f99f7fc353.js} +1 -1
  294. package/.next/static/chunks/5371-a549a0d2c2044d41.js +1 -0
  295. package/.next/static/chunks/{5794-4eee51ff1e878aa6.js → 5794-80ac3f06f098ea29.js} +1 -1
  296. package/.next/static/chunks/602-1c1488959215e140.js +1 -0
  297. package/.next/static/chunks/9079-24f9fa549ed298f1.js +1 -0
  298. package/.next/static/chunks/app/api/agents/update/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
  299. package/.next/static/chunks/app/api/agents/versions/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
  300. package/.next/static/chunks/app/api/app/release-notes/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
  301. package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +1 -0
  302. package/.next/static/chunks/app/api/app/update-check/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
  303. package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +1 -0
  304. package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +1 -0
  305. package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +1 -0
  306. package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +1 -0
  307. package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +1 -0
  308. package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +1 -0
  309. package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +1 -0
  310. package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +1 -0
  311. package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +1 -0
  312. package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +1 -0
  313. package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +1 -0
  314. package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +1 -0
  315. package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +1 -0
  316. package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +1 -0
  317. package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +1 -0
  318. package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +1 -0
  319. package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +1 -0
  320. package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +1 -0
  321. package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +1 -0
  322. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +1 -0
  323. package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +1 -0
  324. package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +1 -0
  325. package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +1 -0
  326. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +1 -0
  327. package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +1 -0
  328. package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +1 -0
  329. package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +1 -0
  330. package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +1 -0
  331. package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +1 -0
  332. package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +1 -0
  333. package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +1 -0
  334. package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +1 -0
  335. package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +1 -0
  336. package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +1 -0
  337. package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +1 -0
  338. package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +1 -0
  339. package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +1 -0
  340. package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +1 -0
  341. package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +1 -0
  342. package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +1 -0
  343. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +1 -0
  344. package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +1 -0
  345. package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +1 -0
  346. package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +1 -0
  347. package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +1 -0
  348. package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +1 -0
  349. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +1 -0
  350. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +1 -0
  351. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +1 -0
  352. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +1 -0
  353. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +1 -0
  354. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +1 -0
  355. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +1 -0
  356. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +1 -0
  357. package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +1 -0
  358. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +1 -0
  359. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +1 -0
  360. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +1 -0
  361. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +1 -0
  362. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +1 -0
  363. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +1 -0
  364. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +1 -0
  365. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +1 -0
  366. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +1 -0
  367. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +1 -0
  368. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +1 -0
  369. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +1 -0
  370. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +1 -0
  371. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +1 -0
  372. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +1 -0
  373. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +1 -0
  374. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +1 -0
  375. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +1 -0
  376. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +1 -0
  377. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +1 -0
  378. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +1 -0
  379. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +1 -0
  380. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +1 -0
  381. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +1 -0
  382. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +1 -0
  383. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +1 -0
  384. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +1 -0
  385. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +1 -0
  386. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +1 -0
  387. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +1 -0
  388. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +1 -0
  389. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +1 -0
  390. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +1 -0
  391. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +1 -0
  392. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +1 -0
  393. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +1 -0
  394. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +1 -0
  396. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +1 -0
  397. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +1 -0
  398. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +1 -0
  399. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +1 -0
  400. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +1 -0
  401. package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +1 -0
  402. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +1 -0
  403. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +1 -0
  404. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +1 -0
  405. package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +1 -0
  434. package/.next/static/chunks/app/layout-419eaf7de340f4ab.js +1 -0
  435. package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +1 -0
  436. package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +1 -0
  437. package/.next/static/chunks/app/sessions/page-e02f1adb1d1c1ccc.js +1 -0
  438. package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +1 -0
  439. package/.next/static/chunks/app/worktrees/[id]/page-45294052ee3032f1.js +1 -0
  440. package/.next/trace +13 -13
  441. package/.next/types/app/api/worktrees/[id]/prompt-response/strict/route.ts +347 -0
  442. package/.next/types/routes.d.ts +2 -1
  443. package/.next/types/validator.ts +9 -0
  444. package/dist/cli/commands/auto-yes.d.ts +19 -0
  445. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  446. package/dist/cli/commands/auto-yes.js +45 -0
  447. package/dist/cli/commands/instances.d.ts.map +1 -1
  448. package/dist/cli/commands/instances.js +23 -18
  449. package/dist/cli/commands/ls.d.ts +15 -1
  450. package/dist/cli/commands/ls.d.ts.map +1 -1
  451. package/dist/cli/commands/ls.js +39 -3
  452. package/dist/cli/commands/prompt.d.ts +42 -0
  453. package/dist/cli/commands/prompt.d.ts.map +1 -0
  454. package/dist/cli/commands/prompt.js +211 -0
  455. package/dist/cli/commands/relays.d.ts.map +1 -1
  456. package/dist/cli/commands/relays.js +13 -1
  457. package/dist/cli/commands/respond-strict.d.ts +31 -0
  458. package/dist/cli/commands/respond-strict.d.ts.map +1 -0
  459. package/dist/cli/commands/respond-strict.js +214 -0
  460. package/dist/cli/commands/respond.d.ts.map +1 -1
  461. package/dist/cli/commands/respond.js +38 -0
  462. package/dist/cli/commands/send.d.ts.map +1 -1
  463. package/dist/cli/commands/send.js +41 -5
  464. package/dist/cli/commands/start.d.ts.map +1 -1
  465. package/dist/cli/commands/start.js +2 -1
  466. package/dist/cli/commands/status.d.ts.map +1 -1
  467. package/dist/cli/commands/status.js +18 -0
  468. package/dist/cli/commands/wait.d.ts +21 -1
  469. package/dist/cli/commands/wait.d.ts.map +1 -1
  470. package/dist/cli/commands/wait.js +108 -12
  471. package/dist/cli/docs/agent-operations.d.ts +1 -1
  472. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  473. package/dist/cli/docs/agent-operations.js +63 -1
  474. package/dist/cli/program.d.ts.map +1 -1
  475. package/dist/cli/program.js +6 -2
  476. package/dist/cli/types/api-responses.d.ts +54 -0
  477. package/dist/cli/types/api-responses.d.ts.map +1 -1
  478. package/dist/cli/types/index.d.ts +30 -0
  479. package/dist/cli/types/index.d.ts.map +1 -1
  480. package/dist/cli/types/index.js +12 -1
  481. package/dist/cli/utils/api-client.d.ts +13 -1
  482. package/dist/cli/utils/api-client.d.ts.map +1 -1
  483. package/dist/cli/utils/api-client.js +10 -2
  484. package/dist/cli/utils/daemon-factory.d.ts.map +1 -1
  485. package/dist/cli/utils/daemon-factory.js +3 -1
  486. package/dist/cli/utils/daemon.d.ts +38 -1
  487. package/dist/cli/utils/daemon.d.ts.map +1 -1
  488. package/dist/cli/utils/daemon.js +161 -8
  489. package/dist/cli/utils/paths.d.ts +12 -0
  490. package/dist/cli/utils/paths.d.ts.map +1 -1
  491. package/dist/cli/utils/paths.js +17 -0
  492. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +43 -1
  493. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
  494. package/dist/lib/polling/auto-yes-suppression-reason.js +18 -1
  495. package/dist/lib/prompt-observation/kinds.d.ts +101 -0
  496. package/dist/lib/prompt-observation/kinds.d.ts.map +1 -0
  497. package/dist/lib/prompt-observation/kinds.js +123 -0
  498. package/dist/lib/prompt-observation/types.d.ts +271 -0
  499. package/dist/lib/prompt-observation/types.d.ts.map +1 -0
  500. package/dist/lib/prompt-observation/types.js +14 -0
  501. package/dist/lib/session/send-attempt-types.d.ts +66 -0
  502. package/dist/lib/session/send-attempt-types.d.ts.map +1 -0
  503. package/dist/lib/session/send-attempt-types.js +17 -0
  504. package/dist/server/locales/en/worktree.json +4 -0
  505. package/dist/server/locales/ja/worktree.json +4 -0
  506. package/dist/server/server.js +20 -1
  507. package/dist/server/src/config/auto-yes-config.js +11 -0
  508. package/dist/server/src/lib/auto-yes-lifecycle.js +28 -2
  509. package/dist/server/src/lib/auto-yes-poller.js +345 -28
  510. package/dist/server/src/lib/auto-yes-shutdown-record.js +257 -0
  511. package/dist/server/src/lib/auto-yes-state.js +197 -4
  512. package/dist/server/src/lib/cli-tools/antigravity-startup-trust.js +135 -0
  513. package/dist/server/src/lib/cli-tools/antigravity.js +162 -29
  514. package/dist/server/src/lib/cli-tools/command-code.js +10 -2
  515. package/dist/server/src/lib/cli-tools/copilot.js +21 -10
  516. package/dist/server/src/lib/cli-tools/gemini.js +60 -13
  517. package/dist/server/src/lib/cli-tools/launch-dialog.js +203 -0
  518. package/dist/server/src/lib/cli-tools/launch-window.js +96 -0
  519. package/dist/server/src/lib/detection/selection-shape.js +35 -1
  520. package/dist/server/src/lib/detection/tools/antigravity/detect.js +38 -9
  521. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +88 -1
  522. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +41 -1
  523. package/dist/server/src/lib/detection/tools/claude/detect.js +60 -0
  524. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +63 -13
  525. package/dist/server/src/lib/detection/tools/copilot/patterns.js +7 -1
  526. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +11 -2
  527. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +5 -3
  528. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +15 -0
  529. package/dist/server/src/lib/polling/antigravity-receipt-episodes.js +281 -0
  530. package/dist/server/src/lib/polling/auto-yes-confirm-page.js +56 -0
  531. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +8 -1
  532. package/dist/server/src/lib/polling/auto-yes-policy.js +61 -7
  533. package/dist/server/src/lib/polling/auto-yes-poller-stop-reason.js +50 -0
  534. package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +220 -5
  535. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +18 -1
  536. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +10 -0
  537. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +2 -2
  538. package/dist/server/src/lib/polling/response-checker.js +9 -0
  539. package/dist/server/src/lib/polling/response-poller-core.js +136 -104
  540. package/dist/server/src/lib/prompt-observation/kinds.js +123 -0
  541. package/dist/server/src/lib/prompt-observation/types.js +14 -0
  542. package/dist/server/src/lib/push/prompt-push-gate.js +195 -3
  543. package/dist/server/src/lib/push/waiting-push-notifier.js +74 -7
  544. package/dist/server/src/lib/relay/relay-delivery-claims.js +46 -0
  545. package/dist/server/src/lib/relay/relay-delivery.js +76 -30
  546. package/dist/server/src/lib/schedule-manager.js +28 -0
  547. package/dist/server/src/lib/session/cli-session.js +38 -3
  548. package/dist/server/src/lib/session/send-attempt-state.js +155 -0
  549. package/dist/server/src/lib/session/send-attempt-types.js +17 -0
  550. package/dist/server/src/lib/session/send-user-message.js +46 -0
  551. package/dist/server/src/lib/session/worktree-session-reconcile.js +2 -1
  552. package/dist/server/src/lib/tmux/session-created-signal.js +76 -0
  553. package/dist/server/src/lib/tmux/tmux-capture-cache.js +58 -6
  554. package/dist/server/src/lib/tmux/tmux.js +4 -0
  555. package/dist/server/src/lib/verification/scope-gate-format.js +100 -0
  556. package/dist/server/src/lib/verification/scope-gate-glob.js +185 -0
  557. package/dist/server/src/lib/verification/scope-gate.js +19 -271
  558. package/dist/server/src/lib/ws-server.js +48 -6
  559. package/docs/en/user-guide/cli-setup-guide.md +12 -1
  560. package/docs/en/user-guide/webapp-guide.md +2 -0
  561. package/package.json +1 -1
  562. package/release-notes/0.47.0.json +118 -0
  563. package/.next/server/chunks/1789.js +0 -1
  564. package/.next/server/chunks/2908.js +0 -1
  565. package/.next/server/chunks/2984.js +0 -25
  566. package/.next/server/chunks/3718.js +0 -1
  567. package/.next/server/chunks/4837.js +0 -14
  568. package/.next/server/chunks/611.js +0 -1
  569. package/.next/server/chunks/850.js +0 -1
  570. package/.next/static/chunks/3201-c01f1feed69020e6.js +0 -1
  571. package/.next/static/chunks/5371-0dc947683e46e78c.js +0 -1
  572. package/.next/static/chunks/602-25e45a2422d2a3ea.js +0 -1
  573. package/.next/static/chunks/app/api/app/update/route-0468c3c4baa46028.js +0 -1
  574. package/.next/static/chunks/app/api/auth/login/route-0468c3c4baa46028.js +0 -1
  575. package/.next/static/chunks/app/api/auth/logout/route-0468c3c4baa46028.js +0 -1
  576. package/.next/static/chunks/app/api/auth/status/route-0468c3c4baa46028.js +0 -1
  577. package/.next/static/chunks/app/api/capabilities/route-0468c3c4baa46028.js +0 -1
  578. package/.next/static/chunks/app/api/daily-summary/route-0468c3c4baa46028.js +0 -1
  579. package/.next/static/chunks/app/api/daily-summary/status/route-0468c3c4baa46028.js +0 -1
  580. package/.next/static/chunks/app/api/external-apps/[id]/health/route-0468c3c4baa46028.js +0 -1
  581. package/.next/static/chunks/app/api/external-apps/[id]/route-0468c3c4baa46028.js +0 -1
  582. package/.next/static/chunks/app/api/external-apps/route-0468c3c4baa46028.js +0 -1
  583. package/.next/static/chunks/app/api/fs/browse/route-0468c3c4baa46028.js +0 -1
  584. package/.next/static/chunks/app/api/fs/recent-paths/route-0468c3c4baa46028.js +0 -1
  585. package/.next/static/chunks/app/api/hooks/agent-event/route-0468c3c4baa46028.js +0 -1
  586. package/.next/static/chunks/app/api/hooks/claude-done/route-0468c3c4baa46028.js +0 -1
  587. package/.next/static/chunks/app/api/hooks/permission-request/route-0468c3c4baa46028.js +0 -1
  588. package/.next/static/chunks/app/api/metrics/vibe/route-0468c3c4baa46028.js +0 -1
  589. package/.next/static/chunks/app/api/ollama/models/route-0468c3c4baa46028.js +0 -1
  590. package/.next/static/chunks/app/api/push/escalation/route-0468c3c4baa46028.js +0 -1
  591. package/.next/static/chunks/app/api/push/subscriptions/route-0468c3c4baa46028.js +0 -1
  592. package/.next/static/chunks/app/api/push/vapid/route-0468c3c4baa46028.js +0 -1
  593. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-0468c3c4baa46028.js +0 -1
  594. package/.next/static/chunks/app/api/relays/route-0468c3c4baa46028.js +0 -1
  595. package/.next/static/chunks/app/api/remote/pair/route-0468c3c4baa46028.js +0 -1
  596. package/.next/static/chunks/app/api/repositories/[id]/route-0468c3c4baa46028.js +0 -1
  597. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-0468c3c4baa46028.js +0 -1
  598. package/.next/static/chunks/app/api/repositories/clone/route-0468c3c4baa46028.js +0 -1
  599. package/.next/static/chunks/app/api/repositories/excluded/route-0468c3c4baa46028.js +0 -1
  600. package/.next/static/chunks/app/api/repositories/restore/route-0468c3c4baa46028.js +0 -1
  601. package/.next/static/chunks/app/api/repositories/route-0468c3c4baa46028.js +0 -1
  602. package/.next/static/chunks/app/api/repositories/scan/route-0468c3c4baa46028.js +0 -1
  603. package/.next/static/chunks/app/api/repositories/sync/route-0468c3c4baa46028.js +0 -1
  604. package/.next/static/chunks/app/api/repositories/validate-path/route-0468c3c4baa46028.js +0 -1
  605. package/.next/static/chunks/app/api/settings/default-agents/route-0468c3c4baa46028.js +0 -1
  606. package/.next/static/chunks/app/api/settings/default-surface-mode/route-0468c3c4baa46028.js +0 -1
  607. package/.next/static/chunks/app/api/sidebar/group-order/route-0468c3c4baa46028.js +0 -1
  608. package/.next/static/chunks/app/api/skills/[id]/route-0468c3c4baa46028.js +0 -1
  609. package/.next/static/chunks/app/api/skills/installations/route-0468c3c4baa46028.js +0 -1
  610. package/.next/static/chunks/app/api/skills/operations/route-0468c3c4baa46028.js +0 -1
  611. package/.next/static/chunks/app/api/skills/reindex/route-0468c3c4baa46028.js +0 -1
  612. package/.next/static/chunks/app/api/skills/route-0468c3c4baa46028.js +0 -1
  613. package/.next/static/chunks/app/api/slash-commands/route-0468c3c4baa46028.js +0 -1
  614. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-0468c3c4baa46028.js +0 -1
  615. package/.next/static/chunks/app/api/tasks/[taskId]/route-0468c3c4baa46028.js +0 -1
  616. package/.next/static/chunks/app/api/templates/[id]/route-0468c3c4baa46028.js +0 -1
  617. package/.next/static/chunks/app/api/templates/route-0468c3c4baa46028.js +0 -1
  618. package/.next/static/chunks/app/api/verification/runs/[runId]/route-0468c3c4baa46028.js +0 -1
  619. package/.next/static/chunks/app/api/verification/runs/route-0468c3c4baa46028.js +0 -1
  620. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-0468c3c4baa46028.js +0 -1
  621. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-0468c3c4baa46028.js +0 -1
  622. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-0468c3c4baa46028.js +0 -1
  623. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-0468c3c4baa46028.js +0 -1
  624. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-0468c3c4baa46028.js +0 -1
  625. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-0468c3c4baa46028.js +0 -1
  626. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-0468c3c4baa46028.js +0 -1
  627. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-0468c3c4baa46028.js +0 -1
  628. package/.next/static/chunks/app/api/worktrees/[id]/env/route-0468c3c4baa46028.js +0 -1
  629. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-0468c3c4baa46028.js +0 -1
  630. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-0468c3c4baa46028.js +0 -1
  631. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-0468c3c4baa46028.js +0 -1
  632. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-0468c3c4baa46028.js +0 -1
  633. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-0468c3c4baa46028.js +0 -1
  634. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-0468c3c4baa46028.js +0 -1
  635. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-0468c3c4baa46028.js +0 -1
  636. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-0468c3c4baa46028.js +0 -1
  637. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-0468c3c4baa46028.js +0 -1
  638. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-0468c3c4baa46028.js +0 -1
  639. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-0468c3c4baa46028.js +0 -1
  640. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-0468c3c4baa46028.js +0 -1
  641. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-0468c3c4baa46028.js +0 -1
  642. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-0468c3c4baa46028.js +0 -1
  643. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-0468c3c4baa46028.js +0 -1
  644. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-0468c3c4baa46028.js +0 -1
  645. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-0468c3c4baa46028.js +0 -1
  646. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-0468c3c4baa46028.js +0 -1
  647. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-0468c3c4baa46028.js +0 -1
  648. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-0468c3c4baa46028.js +0 -1
  649. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-0468c3c4baa46028.js +0 -1
  650. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-0468c3c4baa46028.js +0 -1
  651. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-0468c3c4baa46028.js +0 -1
  652. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-0468c3c4baa46028.js +0 -1
  653. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-0468c3c4baa46028.js +0 -1
  654. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-0468c3c4baa46028.js +0 -1
  655. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-0468c3c4baa46028.js +0 -1
  656. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-0468c3c4baa46028.js +0 -1
  657. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-0468c3c4baa46028.js +0 -1
  658. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-0468c3c4baa46028.js +0 -1
  659. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-0468c3c4baa46028.js +0 -1
  660. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-0468c3c4baa46028.js +0 -1
  661. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-0468c3c4baa46028.js +0 -1
  662. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-0468c3c4baa46028.js +0 -1
  663. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-0468c3c4baa46028.js +0 -1
  664. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-0468c3c4baa46028.js +0 -1
  665. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-0468c3c4baa46028.js +0 -1
  666. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-0468c3c4baa46028.js +0 -1
  667. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-0468c3c4baa46028.js +0 -1
  668. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-0468c3c4baa46028.js +0 -1
  669. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-0468c3c4baa46028.js +0 -1
  670. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-0468c3c4baa46028.js +0 -1
  671. package/.next/static/chunks/app/api/worktrees/[id]/route-0468c3c4baa46028.js +0 -1
  672. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-0468c3c4baa46028.js +0 -1
  673. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-0468c3c4baa46028.js +0 -1
  674. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-0468c3c4baa46028.js +0 -1
  675. package/.next/static/chunks/app/api/worktrees/[id]/search/route-0468c3c4baa46028.js +0 -1
  676. package/.next/static/chunks/app/api/worktrees/[id]/send/route-0468c3c4baa46028.js +0 -1
  677. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-0468c3c4baa46028.js +0 -1
  678. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-0468c3c4baa46028.js +0 -1
  679. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-0468c3c4baa46028.js +0 -1
  680. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-0468c3c4baa46028.js +0 -1
  681. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-0468c3c4baa46028.js +0 -1
  682. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-0468c3c4baa46028.js +0 -1
  683. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-0468c3c4baa46028.js +0 -1
  684. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-0468c3c4baa46028.js +0 -1
  685. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-0468c3c4baa46028.js +0 -1
  686. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-0468c3c4baa46028.js +0 -1
  687. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-0468c3c4baa46028.js +0 -1
  688. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-0468c3c4baa46028.js +0 -1
  689. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-0468c3c4baa46028.js +0 -1
  690. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-0468c3c4baa46028.js +0 -1
  691. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-0468c3c4baa46028.js +0 -1
  692. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-0468c3c4baa46028.js +0 -1
  693. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-0468c3c4baa46028.js +0 -1
  694. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-0468c3c4baa46028.js +0 -1
  695. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-0468c3c4baa46028.js +0 -1
  696. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-0468c3c4baa46028.js +0 -1
  697. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-0468c3c4baa46028.js +0 -1
  698. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-0468c3c4baa46028.js +0 -1
  699. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-0468c3c4baa46028.js +0 -1
  700. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-0468c3c4baa46028.js +0 -1
  701. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-0468c3c4baa46028.js +0 -1
  702. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-0468c3c4baa46028.js +0 -1
  703. package/.next/static/chunks/app/api/worktrees/route-0468c3c4baa46028.js +0 -1
  704. package/.next/static/chunks/app/layout-3e357690446cd2da.js +0 -1
  705. package/.next/static/chunks/app/manifest.webmanifest/route-0468c3c4baa46028.js +0 -1
  706. package/.next/static/chunks/app/proxy/[...path]/route-0468c3c4baa46028.js +0 -1
  707. package/.next/static/chunks/app/sessions/page-9859ed61e93e6890.js +0 -1
  708. package/.next/static/chunks/app/worktrees/[id]/layout-0468c3c4baa46028.js +0 -1
  709. package/.next/static/chunks/app/worktrees/[id]/page-effbf0796881dd5a.js +0 -1
  710. /package/.next/static/{QxDf7lm-JJkWoj-TyWiSB → b5BiQC9F6r_XFPdA9cuSj}/_buildManifest.js +0 -0
  711. /package/.next/static/{QxDf7lm-JJkWoj-TyWiSB → b5BiQC9F6r_XFPdA9cuSj}/_ssgManifest.js +0 -0
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ /**
3
+ * Startup confirmations a launch answers by itself (Issue #3776).
4
+ *
5
+ * gemini and agy each ask a folder-trust question before their prompt comes
6
+ * up, and their launch used to answer it with a blind Enter as soon as the
7
+ * question's wording was anywhere on the screen. An Enter confirms whichever
8
+ * row the cursor is on, so a cursor on `Don't trust` / `No, exit` wrote that
9
+ * answer for good (gemini's `trustedFolders.json`), and a question whose
10
+ * wording had changed (gemini v0.62.0) was never answered at all, silently.
11
+ *
12
+ * Each confirmation is declared once here — its question, the row that is safe
13
+ * to confirm, how its cursor row looks and the key that confirms it — and
14
+ * {@link decideLaunchDialog} reads one screen against that declaration: press,
15
+ * leave it (the cursor is somewhere else), or "this looks like the dialog but
16
+ * does not read as it" (the wording or the drawing changed). Pure: the caller
17
+ * sends the key and writes the log.
18
+ *
19
+ * A screen counts as the dialog only when the question is followed, a few rows
20
+ * down, by a block of the declared option rows (review of #3776): a reply that
21
+ * quotes the question, a diff of this file, or another tool's permission
22
+ * screen under a quoted question is not the dialog.
23
+ *
24
+ * Must not import `../tmux/tmux`: the Auto-Yes poller's suppression step reads
25
+ * {@link isLaunchDialogOpen} / {@link decideLaunchDialog} to leave these
26
+ * screens to the launch.
27
+ *
28
+ * @module lib/cli-tools/launch-dialog
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.ANTIGRAVITY_TRUST_LAUNCH_DIALOG = exports.GEMINI_TRUST_LAUNCH_DIALOG = void 0;
32
+ exports.decideLaunchDialog = decideLaunchDialog;
33
+ exports.isLaunchDialogOpen = isLaunchDialogOpen;
34
+ exports.isLaunchDialogDrawn = isLaunchDialogDrawn;
35
+ exports.launchDialogWarning = launchDialogWarning;
36
+ const cli_patterns_1 = require("../detection/cli-patterns");
37
+ const patterns_1 = require("../detection/tools/antigravity/patterns");
38
+ /** Longest cursor label a decision carries (it goes into logs). */
39
+ const MAX_CURSOR_LABEL_LENGTH = 80;
40
+ /**
41
+ * gemini's folder-trust question (measured on v0.62.0, 2026-10-17, private
42
+ * HOME, empty folder; `tests/fixtures/gemini-live-3776/`):
43
+ *
44
+ * │ Do you trust the files in this folder?
45
+ * │ ● 1. Trust folder (<folder>) <- cursor here by default
46
+ * │ 2. Trust parent folder (<parent>)
47
+ * │ 3. Don't trust
48
+ *
49
+ * Earlier builds asked `Do you trust this folder?` over the same three rows.
50
+ * Only `1. Trust folder` is safe: `2.` trusts every sibling of the worktree.
51
+ * One Enter on it makes gemini restart itself ("Gemini CLI is restarting to
52
+ * apply the trust changes...") and, on a HOME that never signed in, draw the
53
+ * authentication picker — whose default an extra Enter would confirm.
54
+ */
55
+ exports.GEMINI_TRUST_LAUNCH_DIALOG = {
56
+ id: 'gemini-folder-trust',
57
+ question: /Do you trust (?:the files in )?this folder\?/,
58
+ signature: /\bTrust folder\b|\bDon't trust\b/,
59
+ cursorRow: /^[\s│]*●\s*(\S.*?)[\s│]*$/,
60
+ optionRow: /^[\s│]*(?:\S\s+)?\d\.\s+(?:Trust folder|Trust parent folder|Don't trust)\b/,
61
+ minOptionRows: 2,
62
+ optionsWithin: 8,
63
+ dismissedRow: /restarting to apply the trust changes/,
64
+ safeRow: /^1\.\s+Trust folder\b/,
65
+ key: 'Enter',
66
+ // The dialog is 11 rows from its question to its lower border; the rest is
67
+ // room for a notice or footer drawn under it.
68
+ liveRows: 30,
69
+ declaredIn: 'src/lib/cli-tools/launch-dialog.ts (GEMINI_TRUST_LAUNCH_DIALOG)',
70
+ };
71
+ /**
72
+ * agy's folder-trust question (Issue #988;
73
+ * `tests/fixtures/antigravity-live-2364/trust-dialog.txt`):
74
+ *
75
+ * Do you trust the contents of this project?
76
+ * > Yes, I trust this folder <- cursor here by default
77
+ * No, exit
78
+ * ↑/↓ Navigate · enter Confirm
79
+ */
80
+ exports.ANTIGRAVITY_TRUST_LAUNCH_DIALOG = {
81
+ id: 'antigravity-folder-trust',
82
+ question: patterns_1.ANTIGRAVITY_TRUST_DIALOG_PATTERN,
83
+ signature: /\bYes, I trust this folder\b/,
84
+ optionRow: /^\s*(?:\S\s+)?(?:Yes, I trust this folder|No, exit)\s*$/,
85
+ minOptionRows: 2,
86
+ optionsWithin: 4,
87
+ cursorRow: /^\s*>\s+(\S.*?)\s*$/,
88
+ safeRow: /^Yes, I trust this folder$/,
89
+ key: 'Enter',
90
+ liveRows: 12,
91
+ declaredIn: 'src/lib/cli-tools/launch-dialog.ts (ANTIGRAVITY_TRUST_LAUNCH_DIALOG)',
92
+ };
93
+ /** The last `count` non-blank rows of a screen, ANSI stripped and right-trimmed. */
94
+ function liveRowsOf(screen, count) {
95
+ const rows = (0, cli_patterns_1.stripAnsi)(screen)
96
+ .split('\n')
97
+ .map((row) => row.trimEnd())
98
+ .filter((row) => row.trim() !== '');
99
+ return rows.slice(-count);
100
+ }
101
+ /** The rows below the last dismissal row (all of them when there is none). */
102
+ function rowsAfterDismissal(spec, rows) {
103
+ if (!spec.dismissedRow)
104
+ return rows;
105
+ for (let i = rows.length - 1; i >= 0; i--) {
106
+ if (spec.dismissedRow.test(rows[i]))
107
+ return rows.slice(i + 1);
108
+ }
109
+ return rows;
110
+ }
111
+ /** The option rows of the dialog asked at `questionAt`, or null if it has none. */
112
+ function optionBlockAfter(spec, rows, questionAt) {
113
+ const last = Math.min(rows.length - 1, questionAt + spec.optionsWithin);
114
+ for (let start = questionAt + 1; start <= last; start++) {
115
+ if (!spec.optionRow.test(rows[start]))
116
+ continue;
117
+ const block = [];
118
+ for (let i = start; i < rows.length && spec.optionRow.test(rows[i]); i++)
119
+ block.push(rows[i]);
120
+ return block.length >= spec.minOptionRows ? block : null;
121
+ }
122
+ return null;
123
+ }
124
+ /** The option rows under the last live question that has them, or null. */
125
+ function findDialog(spec, rows) {
126
+ for (let i = rows.length - 1; i >= 0; i--) {
127
+ if (!spec.question.test(rows[i]))
128
+ continue;
129
+ const block = optionBlockAfter(spec, rows, i);
130
+ if (block)
131
+ return block;
132
+ }
133
+ return null;
134
+ }
135
+ /**
136
+ * Read one screen against a launch dialog's declaration (Issue #3776).
137
+ *
138
+ * The question must be among the last {@link LaunchDialogSpec.liveRows}
139
+ * non-blank rows, below any dismissal row, with its option block under it; the
140
+ * key is pressed only when exactly one option row carries the cursor and its
141
+ * label is the safe one.
142
+ *
143
+ * @param spec - The confirmation being looked for
144
+ * @param screen - One capture of the pane (ANSI allowed)
145
+ */
146
+ function decideLaunchDialog(spec, screen) {
147
+ const rows = rowsAfterDismissal(spec, liveRowsOf(screen, spec.liveRows));
148
+ const options = findDialog(spec, rows);
149
+ if (!options) {
150
+ return rows.some((row) => spec.signature.test(row))
151
+ ? { action: 'unrecognized', reason: 'question-not-found' }
152
+ : { action: 'absent' };
153
+ }
154
+ const cursorLabels = [];
155
+ for (const row of options) {
156
+ const match = spec.cursorRow.exec(row);
157
+ if (match)
158
+ cursorLabels.push(match[1]);
159
+ }
160
+ if (cursorLabels.length === 0)
161
+ return { action: 'unrecognized', reason: 'cursor-not-found' };
162
+ if (cursorLabels.length > 1)
163
+ return { action: 'unrecognized', reason: 'multiple-cursors' };
164
+ const label = cursorLabels[0];
165
+ return spec.safeRow.test(label)
166
+ ? { action: 'press', key: spec.key }
167
+ : { action: 'hold', reason: 'cursor-off-safe-row', cursorLabel: label.slice(0, MAX_CURSOR_LABEL_LENGTH) };
168
+ }
169
+ /**
170
+ * Whether the dialog — its question over its option block, not dismissed — is
171
+ * live on the screen, wherever its cursor is (Issue #3776).
172
+ */
173
+ function isLaunchDialogOpen(spec, screen) {
174
+ return findDialog(spec, rowsAfterDismissal(spec, liveRowsOf(screen, spec.liveRows))) !== null;
175
+ }
176
+ /**
177
+ * Whether the dialog is drawn in the live rows, dismissed or not: a dialog
178
+ * gemini answered stays on the screen, cursor and all, above its restart line
179
+ * while the restart runs.
180
+ */
181
+ function isLaunchDialogDrawn(spec, screen) {
182
+ return findDialog(spec, liveRowsOf(screen, spec.liveRows)) !== null;
183
+ }
184
+ /**
185
+ * The warn a launch writes when it leaves the dialog alone, or null when the
186
+ * decision sends or there is nothing to say. Never carries the screen.
187
+ */
188
+ function launchDialogWarning(spec, decision) {
189
+ if (decision.action === 'absent' || decision.action === 'press')
190
+ return null;
191
+ if (decision.action === 'hold') {
192
+ return { event: 'launch-dialog-held', fields: { dialog: spec.id, ...decision } };
193
+ }
194
+ return {
195
+ event: 'launch-dialog-unrecognized',
196
+ fields: {
197
+ dialog: spec.id,
198
+ ...decision,
199
+ // Fail-closed by design; this warn is written once, so say what to look at.
200
+ hint: `the dialog's wording or cursor drawing may have changed; compare the screen with ${spec.declaredIn}`,
201
+ },
202
+ };
203
+ }
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * Whether a launch is still answering its own startup confirmation
4
+ * (review of Issue #3776).
5
+ *
6
+ * gemini's launch confirms its folder-trust dialog itself, once, inside its
7
+ * ~30 s readiness wait (`GeminiTool.waitForReady`); while that wait runs the
8
+ * Auto-Yes poller must leave the dialog to it, or the two answer it twice. A
9
+ * dialog still on the screen after the wait — the Enter did not land, or
10
+ * gemini drew the dialog late (an auto-update, a slow start) — has nobody else
11
+ * to answer it, so the poller may again, when the cursor is on the safe row.
12
+ *
13
+ * The window closing is not the end of the launch's answer (Issue #3790): an
14
+ * answered dialog stays drawn, cursor on the safe row, until the agent redraws
15
+ * (gemini's restart line takes about 2 s), and a window that closed in between —
16
+ * the wait ran out on its last attempts — would hand it to the poller as an
17
+ * unanswered one. So the launch also records the key it pressed
18
+ * ({@link recordLaunchDialogPress}), and the poller leaves the dialog alone for
19
+ * {@link LAUNCH_DIALOG_PRESS_SETTLE_MS} after it, window or not. Past that, a
20
+ * dialog still on screen is one the key did not reach, and the poller may answer
21
+ * it as before.
22
+ *
23
+ * Copilot's folder-trust dialog has the same window since Issue #3790: its launch
24
+ * confirms with a `1` and the poller answered `1` + Enter beside it (measured on
25
+ * 1.0.91: the second `1` + Enter is submitted as a user message).
26
+ *
27
+ * Counted, as agy's window is (`antigravity-startup-trust`, Issue #3770): a
28
+ * relaunch racing another must not have the earlier one's end close the later
29
+ * one's window. Keyed by tmux session name; reached through `globalThis`
30
+ * because the launch and the poller may be bundled separately under
31
+ * `next dev` (Issue #1736).
32
+ *
33
+ * @module lib/cli-tools/launch-window
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LAUNCH_DIALOG_PRESS_SETTLE_MS = void 0;
37
+ exports.beginLaunchWindow = beginLaunchWindow;
38
+ exports.endLaunchWindow = endLaunchWindow;
39
+ exports.isLaunchWindowOpen = isLaunchWindowOpen;
40
+ exports.recordLaunchDialogPress = recordLaunchDialogPress;
41
+ exports.isLaunchDialogPressSettling = isLaunchDialogPressSettling;
42
+ exports.clearLaunchWindows = clearLaunchWindows;
43
+ const global_state_1 = require("../global-state");
44
+ /**
45
+ * How long after the launch pressed its key the dialog stays the launch's
46
+ * (Issue #3790). Measured on gemini 0.64.0: the restart line is drawn within
47
+ * 100 ms of the key and the dialog is gone within about 2 s; a dialog still
48
+ * drawn 30 s later is one the key did not reach.
49
+ */
50
+ exports.LAUNCH_DIALOG_PRESS_SETTLE_MS = 30_000;
51
+ /** sessionName -> how many launch windows are open. */
52
+ const openLaunchWindows = (0, global_state_1.getOrInitGlobal)('__launchWindows', () => new Map());
53
+ /** sessionName -> when the launch last pressed the key of its startup confirmation. */
54
+ const launchDialogPresses = (0, global_state_1.getOrInitGlobal)('__launchDialogPresses', () => new Map());
55
+ /**
56
+ * The launch window opened: the launch answers its startup confirmation in it.
57
+ * A key an earlier launch of the session pressed is forgotten: the dialog this
58
+ * launch draws is a new one.
59
+ */
60
+ function beginLaunchWindow(sessionName) {
61
+ openLaunchWindows.set(sessionName, (openLaunchWindows.get(sessionName) ?? 0) + 1);
62
+ launchDialogPresses.delete(sessionName);
63
+ }
64
+ /** The launch window closed, however it ended. */
65
+ function endLaunchWindow(sessionName) {
66
+ const open = openLaunchWindows.get(sessionName) ?? 0;
67
+ if (open <= 1)
68
+ openLaunchWindows.delete(sessionName);
69
+ else
70
+ openLaunchWindows.set(sessionName, open - 1);
71
+ }
72
+ /**
73
+ * @returns True while a launch window is open. A session this process never
74
+ * launched (a server restart, another launcher) has none open.
75
+ */
76
+ function isLaunchWindowOpen(sessionName) {
77
+ return openLaunchWindows.has(sessionName);
78
+ }
79
+ /** The launch pressed the key that confirms its startup confirmation (Issue #3790). */
80
+ function recordLaunchDialogPress(sessionName, at = Date.now()) {
81
+ launchDialogPresses.set(sessionName, at);
82
+ }
83
+ /**
84
+ * @returns True within {@link LAUNCH_DIALOG_PRESS_SETTLE_MS} of the launch's
85
+ * key (Issue #3790): the dialog on screen may be the one it answered, not yet
86
+ * redrawn, whether or not the window is still open.
87
+ */
88
+ function isLaunchDialogPressSettling(sessionName, now = Date.now()) {
89
+ const at = launchDialogPresses.get(sessionName);
90
+ return at !== undefined && now - at < exports.LAUNCH_DIALOG_PRESS_SETTLE_MS;
91
+ }
92
+ /** Close every window and forget every press. Test seam. */
93
+ function clearLaunchWindows() {
94
+ openLaunchWindows.clear();
95
+ launchDialogPresses.clear();
96
+ }
@@ -64,15 +64,17 @@
64
64
  * written once.
65
65
  */
66
66
  Object.defineProperty(exports, "__esModule", { value: true });
67
- exports.readCommandCodeReviewPage = exports.isCommandCodePlanApproveChoice = exports.hasDismissablePanelFooter = exports.hasCommandCodeSelectionListFooterAtBottom = exports.hasCommandCodePlanReviewFooterAtBottom = exports.hasCommandCodeDismissablePanelFooterAtBottom = exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = exports.COMMAND_CODE_PLAN_REVIEW_FOOTER = void 0;
67
+ exports.TRUST_CONFIRMATION_TAIL_LINE_COUNT = exports.readCommandCodeReviewPage = exports.isCommandCodePlanApproveChoice = exports.hasDismissablePanelFooter = exports.hasCommandCodeSelectionListFooterAtBottom = exports.hasCommandCodePlanReviewFooterAtBottom = exports.hasCommandCodeDismissablePanelFooterAtBottom = exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = exports.COMMAND_CODE_PLAN_REVIEW_FOOTER = void 0;
68
68
  exports.readCommandCodeQuestionRegion = readCommandCodeQuestionRegion;
69
69
  exports.hasCommandCodeQuestionChrome = hasCommandCodeQuestionChrome;
70
70
  exports.extractCommandCodeSelectionListFrame = extractCommandCodeSelectionListFrame;
71
71
  exports.readSelectionListShape = readSelectionListShape;
72
72
  exports.shouldOfferOptionNumbers = shouldOfferOptionNumbers;
73
+ exports.isTrustConfirmationFrame = isTrustConfirmationFrame;
73
74
  const ansi_1 = require("./ansi");
74
75
  const selection_shape_patterns_1 = require("./selection-shape-patterns");
75
76
  Object.defineProperty(exports, "COMMAND_CODE_PLAN_REVIEW_FOOTER", { enumerable: true, get: function () { return selection_shape_patterns_1.COMMAND_CODE_PLAN_REVIEW_FOOTER; } });
77
+ const patterns_1 = require("./tools/antigravity/patterns");
76
78
  /**
77
79
  * How many rows up from the last content row the shape is read.
78
80
  *
@@ -611,3 +613,35 @@ function shouldOfferOptionNumbers(shape) {
611
613
  !shape.hasFilterInput &&
612
614
  !shape.offersPlanApprove);
613
615
  }
616
+ /**
617
+ * How many content rows from the bottom {@link isTrustConfirmationFrame} hands
618
+ * the detector's predicate: the detector's own `STATUS_CHECK_LINE_COUNT`
619
+ * (`tools/frame.ts`, the `lastLines` window), restated because that module
620
+ * pulls `cli-patterns` and its logger into the browser bundle. Pinned equal by
621
+ * `tests/unit/lib/detection/trust-confirmation-frame-3758.test.ts`.
622
+ */
623
+ exports.TRUST_CONFIRMATION_TAIL_LINE_COUNT = 15;
624
+ /**
625
+ * Is this selection list a folder-trust confirmation (Issue #3758)?
626
+ *
627
+ * agy's `Do you trust the contents of this project?` screen is unnumbered, so it
628
+ * is published as an `antigravity_selection_list` (`isSelectionListActive`) and
629
+ * never as a prompt — no prompt panel, no sheet — and Auto-Yes does not answer
630
+ * it (#3757). The surfaces drew the bare arrow pad and the generic "a selection
631
+ * list is open" sentence, which did not say the agent is stopped until somebody
632
+ * answers on the terminal. This tells them which screen it is, so they can say
633
+ * so.
634
+ *
635
+ * The test is the detector's own (`isAntigravityTrustScreen`) over the same
636
+ * window of rows, not a copy of it. Callers ask only while the server says a
637
+ * selection list is up; this does not decide THAT.
638
+ *
639
+ * @param frame - the raw pane (`PaneTerminalState.output` / the poll's `fullOutput`)
640
+ * @param cliToolId - the tool the pane belongs to; only agy draws this screen
641
+ */
642
+ function isTrustConfirmationFrame(frame, cliToolId) {
643
+ if (!frame || cliToolId !== 'antigravity')
644
+ return false;
645
+ const lines = tailLines(frame);
646
+ return (0, patterns_1.isAntigravityTrustScreen)(lines.slice(-exports.TRUST_CONFIRMATION_TAIL_LINE_COUNT).join('\n'));
647
+ }
@@ -35,6 +35,24 @@ exports.VERIFIED_AGAINST = verified_against_1.ANTIGRAVITY_VERIFIED_AGAINST;
35
35
  * card) on screen, and what makes `wait` stop with exit 10 instead of hanging.
36
36
  */
37
37
  const SELECTION_LIST_VERDICT = (0, verdicts_1.positiveVerdict)('waiting', status_reason_1.STATUS_REASON.ANTIGRAVITY_SELECTION_LIST);
38
+ /**
39
+ * agy generating: the braille spinner or the `Generating...` word — the parts of
40
+ * `ANTIGRAVITY_THINKING_PATTERN` a permission dialog does not draw (its
41
+ * `esc to cancel` row it does).
42
+ */
43
+ const ANTIGRAVITY_GENERATING_PATTERN = /[\u2800-\u28FF]|Generating/;
44
+ /**
45
+ * An agy numbered screen no reader vouches for (Issue #2364, #3808): published
46
+ * as unclassified — the hatch opens and `wait` stops — never as a picker (the
47
+ * arrow pad would Enter the highlighted row) and never as "generating".
48
+ */
49
+ const UNKNOWN_FRAME_VERDICT = {
50
+ status: 'running',
51
+ confidence: 'low',
52
+ reason: status_reason_1.STATUS_REASON.UNKNOWN_FRAME,
53
+ hasActivePrompt: false,
54
+ evidence: 'none',
55
+ };
38
56
  /**
39
57
  * How close to the bottom of the content the survey row must be to count as
40
58
  * open: itself, a blank row and the `? for shortcuts` status row.
@@ -121,8 +139,20 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
121
139
  // Issue #2845: only while the screen is the live one. The words alone are
122
140
  // not enough — a reply that quotes the `↑/↓ Navigate` footer leaves them in
123
141
  // the last rows of a pane whose composer is drawn below them.
124
- if (!cli_patterns_1.ANTIGRAVITY_SELECTION_LIST_PATTERN.test(frame.lastLines))
125
- return null;
142
+ if (!cli_patterns_1.ANTIGRAVITY_SELECTION_LIST_PATTERN.test(frame.lastLines)) {
143
+ // Issue #3808: numbered options with no `↑/↓ Navigate` footer on screen
144
+ // (cut at `↑/↓ Nav`, or below the pane) are not handed to the generic
145
+ // parser's `prompt_detected` either — the same frames the Auto-Yes
146
+ // poller and `/prompt-response` decline. `/feedback` keeps its reading.
147
+ //
148
+ // Not ahead of generation: a spinner or `Generating…` in the last rows
149
+ // leaves the frame to the thinking check (a sent message numbered
150
+ // `1. / 2.` echoes above the spinner). The bare `esc to cancel` row does
151
+ // not count — agy draws it under its permission dialogs too.
152
+ if (ANTIGRAVITY_GENERATING_PATTERN.test(frame.thinkingLines))
153
+ return null;
154
+ return (0, dialog_1.isAntigravityUnvouchedNumberedScreen)((0, cli_patterns_1.stripBoxDrawing)(frame.clean)) ? UNKNOWN_FRAME_VERDICT : null;
155
+ }
126
156
  if (!isAntigravitySelectionScreenOpen(frame.lastLines))
127
157
  return null;
128
158
  // Issue #2270 / #2364: except when the frame is a NUMBERED dialog.
@@ -155,6 +185,11 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
155
185
  // which reads the same helper over the same spelling) carry one question,
156
186
  // one option list and one `instructionText` for one screen.
157
187
  //
188
+ // Issue #3808: the reader also declines a numbered screen whose footer is
189
+ // not a permission dialog's (`… · tab Amend`) — agy 1.4's login-method
190
+ // screen, a footer a narrow pane cut — so those land on the unclassified
191
+ // verdict below: a human answers them, Auto-Yes never does.
192
+ //
158
193
  // #995's own case is untouched: the Switch Model picker carries no numbered
159
194
  // rows, so it still resolves below and still keeps NavigationButtons.
160
195
  const text = (0, cli_patterns_1.stripBoxDrawing)(frame.clean);
@@ -163,13 +198,7 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
163
198
  if (promptDetection !== null) {
164
199
  return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, promptDetection);
165
200
  }
166
- return {
167
- status: 'running',
168
- confidence: 'low',
169
- reason: status_reason_1.STATUS_REASON.UNKNOWN_FRAME,
170
- hasActivePrompt: false,
171
- evidence: 'none',
172
- };
201
+ return UNKNOWN_FRAME_VERDICT;
173
202
  }
174
203
  return SELECTION_LIST_VERDICT;
175
204
  },
@@ -65,10 +65,12 @@
65
65
  Object.defineProperty(exports, "__esModule", { value: true });
66
66
  exports.readAntigravityNumberedDialog = readAntigravityNumberedDialog;
67
67
  exports.detectAntigravityNumberedDialogPrompt = detectAntigravityNumberedDialogPrompt;
68
+ exports.isAntigravityUnvouchedNumberedScreen = isAntigravityUnvouchedNumberedScreen;
68
69
  const cli_patterns_1 = require("../../cli-patterns");
69
70
  const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-choice");
70
71
  const tui_detection_frame_1 = require("../../tui-detection-frame");
71
72
  const dialog_block_1 = require("../dialog-block");
73
+ const patterns_1 = require("./patterns");
72
74
  const truncate_raw_content_1 = require("../../truncate-raw-content");
73
75
  /**
74
76
  * How many non-blank rows above option 1 may be searched for the question.
@@ -104,7 +106,9 @@ const QUESTION_ROW_PATTERN = /[??]\s*$/;
104
106
  /**
105
107
  * Read agy's numbered dialog off ANSI-stripped rows.
106
108
  *
107
- * Null when the frame has no `↑/↓ Navigate` footer, when the rows above it do
109
+ * Null when the frame has no `↑/↓ Navigate` footer, when that footer is not a
110
+ * permission dialog's `… · tab Amend` one (the login-method screen, a footer a
111
+ * narrow pane cut — Issue #3808), when the rows above it do
108
112
  * not form a numbered run reaching `1.` (the Switch Model picker, the trust
109
113
  * screen, the slash popup), or when the block sits under a `Switch Model`
110
114
  * header. A caller that has already passed `isAntigravityNumberedDialog` and
@@ -115,6 +119,10 @@ function readAntigravityNumberedDialog(lines) {
115
119
  const region = (0, cli_patterns_1.locateAntigravityDialogRegion)(lines);
116
120
  if (region === null)
117
121
  return null;
122
+ // Issue #3808: only a permission dialog's footer vouches for the block —
123
+ // see ANTIGRAVITY_PERMISSION_FOOTER_PATTERN.
124
+ if (!patterns_1.ANTIGRAVITY_PERMISSION_FOOTER_PATTERN.test(lines[region.footer]))
125
+ return null;
118
126
  const regionRows = lines.slice(region.start, region.footer);
119
127
  if (regionRows.some(row => cli_patterns_1.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN.test(row)))
120
128
  return null;
@@ -224,3 +232,82 @@ function detectAntigravityNumberedDialogPrompt(text) {
224
232
  approvalTarget: (0, prompt_detect_multiple_choice_1.joinApprovalTarget)(lines, (0, prompt_detect_multiple_choice_1.findApprovalContextStart)(lines, dialog.questionRow), dialog.footerRow),
225
233
  }, normalized, truncate_raw_content_1.truncateRawContent);
226
234
  }
235
+ /**
236
+ * agy's `/feedback` category menu footer (`esc Cancel · 1-6 Select & Continue ·
237
+ * enter Continue`, `antigravity-live-2364/dialog-feedback-category.txt`): the
238
+ * one numbered agy screen the generic parser is left to read (#2364).
239
+ */
240
+ /** A numbered option row (`> 1. Yes`, ` 2. No`): the `>` cursor, then the number. */
241
+ const OPTION_ROW_PATTERN = /^\s*(>)?\s*(\d+)\.\s+\S/;
242
+ /**
243
+ * agy's `/feedback` category menu footer (`esc Cancel · 1-6 Select & Continue ·
244
+ * enter Continue`, `antigravity-live-2364/dialog-feedback-category.txt`): the
245
+ * one numbered agy screen the generic parser is left to read (#2364). Anchored
246
+ * at the row start and matched only on the first row under the last option,
247
+ * so the same words inside an option label or a quoted command never match.
248
+ */
249
+ const FEEDBACK_MENU_FOOTER_PATTERN = /^\s*esc Cancel\s*·\s*\d+-\d+\s+Select\b/;
250
+ /** How far above the bottom option row the run down from `1.` may reach. */
251
+ const OPTION_RUN_MAX_ROWS = 40;
252
+ /**
253
+ * Is this an agy screen with numbered options that the permission reader does
254
+ * NOT vouch for? (Issue #3808)
255
+ *
256
+ * True when the frame ends on a run of options numbered `1.` … `N.` (N ≥ 2,
257
+ * consecutive, wrapped label rows allowed between them, no boundary row
258
+ * inside) with one row wearing agy's `>` cursor, no `>` composer drawn under
259
+ * the run — agy paints none while a screen replaces it, so the options are the
260
+ * live screen's, not a reply's (a reply's list wears no cursor either) — and
261
+ * {@link readAntigravityNumberedDialog} does not read the frame (no complete
262
+ * `↑/↓ Navigate · tab Amend` footer: the login-method screen, a footer a narrow
263
+ * pane cut at `↑/↓ Nav`, or one below the pane altogether). Deliberately
264
+ * independent of the footer, so a footer that is not on screen cannot hand the
265
+ * frame back to the generic parser. A single `> 1. …` row — a sent message
266
+ * echoed above the spinner — is not a run.
267
+ *
268
+ * False for the `/feedback` menu (its `esc Cancel · 1-6 Select` footer directly
269
+ * under the last option), which keeps the generic reading #2364 left it.
270
+ *
271
+ * Callers treat true as "no prompt to answer": a human drives the screen.
272
+ *
273
+ * @param text - ANSI-stripped capture, box drawing optional
274
+ */
275
+ function isAntigravityUnvouchedNumberedScreen(text) {
276
+ const lines = (0, tui_detection_frame_1.normalizeTuiFrameForDetection)(text).split('\n');
277
+ let last = -1;
278
+ for (let i = lines.length - 1; i >= 0; i--) {
279
+ if (patterns_1.ANTIGRAVITY_PROMPT_PATTERN.test(lines[i]))
280
+ return false;
281
+ if (OPTION_ROW_PATTERN.test(lines[i])) {
282
+ last = i;
283
+ break;
284
+ }
285
+ }
286
+ if (last < 0)
287
+ return false;
288
+ // The run, read upward from the bottom option: N., N-1., … 1.
289
+ let expected = Number(OPTION_ROW_PATTERN.exec(lines[last])[2]);
290
+ if (expected < 2)
291
+ return false;
292
+ let highlighted = OPTION_ROW_PATTERN.exec(lines[last])[1] !== undefined;
293
+ const floor = Math.max(0, last - OPTION_RUN_MAX_ROWS);
294
+ for (let i = last - 1; i >= floor && expected > 1; i--) {
295
+ const match = OPTION_ROW_PATTERN.exec(lines[i]);
296
+ if (match === null) {
297
+ if (cli_patterns_1.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN.test(lines[i]))
298
+ return false;
299
+ continue;
300
+ }
301
+ if (Number(match[2]) !== expected - 1)
302
+ return false;
303
+ expected--;
304
+ if (match[1] !== undefined)
305
+ highlighted = true;
306
+ }
307
+ if (expected !== 1 || !highlighted)
308
+ return false;
309
+ const footer = lines.slice(last + 1).find(row => row.trim() !== '');
310
+ if (footer !== undefined && FEEDBACK_MENU_FOOTER_PATTERN.test(footer))
311
+ return false;
312
+ return readAntigravityNumberedDialog(lines) === null;
313
+ }
@@ -4,7 +4,8 @@
4
4
  * (Issue #3217). `cli-patterns.ts` re-exports every public name.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- 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 = void 0;
7
+ exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_TRUST_DIALOG_PATTERN = 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_PERMISSION_FOOTER_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 = void 0;
8
+ exports.isAntigravityTrustScreen = isAntigravityTrustScreen;
8
9
  exports.locateAntigravityDialogRegion = locateAntigravityDialogRegion;
9
10
  exports.isAntigravityNumberedDialog = isAntigravityNumberedDialog;
10
11
  const pasted_text_1 = require("../../shared/pasted-text");
@@ -104,6 +105,20 @@ exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = /Switch Model|↑\/↓\s*Navigate/m
104
105
  * edit/expand command`, `enter Confirm`, `←/→ Effort enter Select`).
105
106
  */
106
107
  exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = /↑\/↓\s*Navigate/;
108
+ /**
109
+ * The footer every measured agy PERMISSION dialog ends on: `↑/↓ Navigate · tab
110
+ * Amend · f full diff` (file creation), `… · tab Amend · ctrl+g edit/expand
111
+ * command[ · ctrl+r Review]` (command execution)
112
+ * (`tests/fixtures/antigravity-live-2364/dialog-*.txt`).
113
+ *
114
+ * The numbered-dialog reader requires it on the footer row (Issue #3797 for the
115
+ * prompt observation, #3808 for every producer): agy 1.4's login-method screen
116
+ * (`↑/↓ Navigate · enter Select`) draws numbered rows too and is not a
117
+ * permission request. A footer cut short by a narrow pane, wrapped onto the
118
+ * next row, or spelled differently by another version fails it on purpose —
119
+ * the frame is then not answered.
120
+ */
121
+ exports.ANTIGRAVITY_PERMISSION_FOOTER_PATTERN = /↑\/↓\s*Navigate\s*·\s*tab Amend\b/;
107
122
  /**
108
123
  * One numbered option row of agy's dialogs: `> 1. Yes`, ` 4. No`,
109
124
  * ` 2. No, deny creation`.
@@ -176,6 +191,31 @@ exports.ANTIGRAVITY_DIALOG_MAX_ROWS = 60;
176
191
  * that was waiting for a keypress. Anchored to the whole row.
177
192
  */
178
193
  exports.ANTIGRAVITY_SURVEY_PATTERN = /^\s*\[1\]\s*Good\s+\[2\]\s*Fine\s+\[3\]\s*Bad\s+\[0\]\s*Skip\s*$/m;
194
+ /**
195
+ * The question of agy's startup folder-trust screen (Issue #988):
196
+ *
197
+ * Do you trust the contents of this project?
198
+ * > Yes, I trust this folder <- default-selected option
199
+ * No, exit
200
+ * ↑/↓ Navigate · enter Confirm
201
+ *
202
+ * Unnumbered, so {@link isAntigravityNumberedDialog} is false on it and neither
203
+ * the agy dialog reader nor the generic numbered parser reads it as a prompt
204
+ * (Issue #3757).
205
+ */
206
+ exports.ANTIGRAVITY_TRUST_DIALOG_PATTERN = /Do you trust the contents of this project\?/;
207
+ /**
208
+ * Is agy's folder-trust screen live at the bottom of the frame (Issue #3757)?
209
+ *
210
+ * The question AND the `↑/↓ Navigate` footer, both in the status tail: the
211
+ * question alone also matches the dismissed screen left in the scrollback, or a
212
+ * reply quoting it, and neither of those is waiting for an answer.
213
+ *
214
+ * @param lastLines - The status detector's tail (`normalizeFrame(…).lastLines`)
215
+ */
216
+ function isAntigravityTrustScreen(lastLines) {
217
+ return exports.ANTIGRAVITY_TRUST_DIALOG_PATTERN.test(lastLines) && exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN.test(lastLines);
218
+ }
179
219
  /**
180
220
  * Find the rows between the last boundary and the last `↑/↓ Navigate` footer
181
221
  * (Issue #2364).