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
@@ -10,6 +10,7 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.claudeStatusDetector = void 0;
12
12
  exports.findClaudeTranscriptTail = findClaudeTranscriptTail;
13
+ exports.isClaudeAskUserQuestionConfirmPage = isClaudeAskUserQuestionConfirmPage;
13
14
  exports.readIdleEvidence = readIdleEvidence;
14
15
  const cli_patterns_1 = require("../../cli-patterns");
15
16
  const composer_text_1 = require("../../composer-text");
@@ -17,6 +18,7 @@ const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-ch
17
18
  const verdicts_1 = require("../verdicts");
18
19
  const status_reason_1 = require("../../status-reason");
19
20
  const prompt_1 = require("./prompt");
21
+ const picker_chrome_1 = require("./picker-chrome");
20
22
  const frame_1 = require("../frame");
21
23
  const live_region_1 = require("./live-region");
22
24
  const run_detection_1 = require("../run-detection");
@@ -59,6 +61,64 @@ function findClaudeTranscriptTail(contentLines) {
59
61
  }
60
62
  return index;
61
63
  }
64
+ /** The confirmation page's question, as the whole row (Issue #3748). */
65
+ const CLAUDE_SUBMIT_CONFIRM_QUESTION_ROW = /^\s*Ready to submit your answers\?\s*$/;
66
+ /** Its option 1, as the whole row, cursor or not. */
67
+ const CLAUDE_SUBMIT_ANSWERS_OPTION_ROW = /^\s*(?:❯\s*)?1\.\s+Submit answers\s*$/;
68
+ /** Its option 2, as the whole row, cursor or not. */
69
+ const CLAUDE_SUBMIT_CANCEL_OPTION_ROW = /^\s*(?:❯\s*)?2\.\s+Cancel\s*$/;
70
+ /** The multi-question tab bar's `✔ Submit` tab — only that bar leads to this page. */
71
+ const CLAUDE_SUBMIT_TAB_PATTERN = /✔\s*Submit/;
72
+ /**
73
+ * How far above the question the tab bar may sit: the page lists every
74
+ * question and answer (`● …` / `→ …`) between them, wrapped at the pane width.
75
+ */
76
+ const CLAUDE_SUBMIT_CONFIRM_TAB_LOOKBACK = 200;
77
+ /** The nearest non-blank row above `row`, or -1. */
78
+ function previousNonBlankRow(lines, row) {
79
+ for (let i = row - 1; i >= 0; i--) {
80
+ if (lines[i].trim() !== '')
81
+ return i;
82
+ }
83
+ return -1;
84
+ }
85
+ /**
86
+ * Is this frame Claude's `AskUserQuestion` confirmation page? (Issue #3748)
87
+ *
88
+ * Read strictly, row by row, from the end of the transcript up — all of:
89
+ *
90
+ * 1. the transcript's last row ({@link findClaudeTranscriptTail}, which steps
91
+ * over Claude's chrome) is `2. Cancel`, the row above it `1. Submit
92
+ * answers`, and the cursor `❯` is on one of the two;
93
+ * 2. the nearest non-blank row above the options IS `Ready to submit your
94
+ * answers?` — the whole row, not a row that contains it;
95
+ * 3. the multi-question tab bar (`← ☒ … ✔ Submit →`) sits above that.
96
+ *
97
+ * Deliberately NOT `detectClaudeDialog`'s `ask_user` kind: that classifies by a
98
+ * substring of the four rows above the options, so a Bash approval whose command
99
+ * is `grep -rn "review your answers" src`, an Edit approval whose diff holds
100
+ * the phrase, or a question that asks it read as this page — and Auto-Yes then
101
+ * left an ordinary `1. Yes` to a human. The dialog gate's reading is unchanged.
102
+ *
103
+ * `Submit answers` picks nothing — it commits whatever stands as the answers —
104
+ * so Auto-Yes leaves this page to a human, as it does Command Code's (#3497).
105
+ */
106
+ function isClaudeAskUserQuestionConfirmPage(frame) {
107
+ const lines = frame.contentLines;
108
+ const cancelRow = findClaudeTranscriptTail(lines);
109
+ if (cancelRow < 0 || !CLAUDE_SUBMIT_CANCEL_OPTION_ROW.test(lines[cancelRow]))
110
+ return false;
111
+ const submitRow = cancelRow - 1;
112
+ if (submitRow < 0 || !CLAUDE_SUBMIT_ANSWERS_OPTION_ROW.test(lines[submitRow]))
113
+ return false;
114
+ if (!lines[submitRow].includes('❯') && !lines[cancelRow].includes('❯'))
115
+ return false;
116
+ const questionRow = previousNonBlankRow(lines, submitRow);
117
+ if (questionRow < 0 || !CLAUDE_SUBMIT_CONFIRM_QUESTION_ROW.test(lines[questionRow]))
118
+ return false;
119
+ const tabRow = (0, picker_chrome_1.findAskUserQuestionTabRow)(lines, questionRow, CLAUDE_SUBMIT_CONFIRM_TAB_LOOKBACK);
120
+ return tabRow >= 0 && CLAUDE_SUBMIT_TAB_PATTERN.test(lines[tabRow]);
121
+ }
62
122
  /**
63
123
  * §4 D1 決定 1: does this frame positively show that Claude's turn is over?
64
124
  *
@@ -17,6 +17,7 @@ exports.hasCommandCodePlanReviewFooterAtBottom = hasCommandCodePlanReviewFooterA
17
17
  exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
18
18
  exports.isCommandCodeQuestionTabRow = isCommandCodeQuestionTabRow;
19
19
  exports.readCommandCodeReviewPage = readCommandCodeReviewPage;
20
+ exports.isCommandCodeQuestionConfirmPage = isCommandCodeQuestionConfirmPage;
20
21
  const ansi_1 = require("../../ansi");
21
22
  const selection_shape_patterns_1 = require("../../selection-shape-patterns");
22
23
  /**
@@ -404,22 +405,13 @@ const COMMAND_CODE_REVIEW_BACK_HINT_PATTERN = /^[^\S\n]*\u2190[^\S\n]+to[^\S\n]+
404
405
  */
405
406
  const COMMAND_CODE_REVIEW_UNANSWERED_PATTERN = /have\s+not\s+answered\s+all\s+questions/i;
406
407
  /**
407
- * Read Command Code's `AskUserQuestion` Review page, if this frame is one
408
- * (Issue #2755 §7).
409
- *
410
- * The same region {@link readCommandCodeQuestionRegion} works on — last rule
411
- * row, tab strip as the first row under it — plus the three rows above. The
412
- * question-shaped conditions are deliberately NOT applied: this page has no
413
- * question body of its own on the `Submit`/`Cancel` spelling (the answers sit
414
- * where the question would), and it draws `1.` twice, so the strict reading
415
- * declines it for a numbering reason that says nothing about what it is.
416
- *
417
- * `null` for everything else, so no existing verdict moves except the two
418
- * captures this is about.
408
+ * The rows under the frame's LAST rule row, when the first of them that carries
409
+ * content is a question-screen tab strip (Issue #2755 §7, split out by Issue
410
+ * #3497 so the Review page reading and the confirm-page guard share one anchor).
419
411
  *
420
412
  * @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
421
413
  */
422
- function readCommandCodeReviewPage(frame) {
414
+ function readQuestionTabRegion(frame) {
423
415
  if (!frame)
424
416
  return null;
425
417
  const lines = frame.replace(/\r\n/g, '\n').split('\n').map(ansi_1.stripAnsi);
@@ -446,6 +438,28 @@ function readCommandCodeReviewPage(frame) {
446
438
  return null;
447
439
  if (!isCommandCodeQuestionTabRow(region[tabOffset]))
448
440
  return null;
441
+ return region;
442
+ }
443
+ /**
444
+ * Read Command Code's `AskUserQuestion` Review page, if this frame is one
445
+ * (Issue #2755 §7).
446
+ *
447
+ * The same region {@link readCommandCodeQuestionRegion} works on — last rule
448
+ * row, tab strip as the first row under it — plus the three rows above. The
449
+ * question-shaped conditions are deliberately NOT applied: this page has no
450
+ * question body of its own on the `Submit`/`Cancel` spelling (the answers sit
451
+ * where the question would), and it draws `1.` twice, so the strict reading
452
+ * declines it for a numbering reason that says nothing about what it is.
453
+ *
454
+ * `null` for everything else, so no existing verdict moves except the two
455
+ * captures this is about.
456
+ *
457
+ * @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
458
+ */
459
+ function readCommandCodeReviewPage(frame) {
460
+ const region = readQuestionTabRegion(frame);
461
+ if (region === null)
462
+ return null;
449
463
  const body = region.join('\n');
450
464
  if (!COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body))
451
465
  return null;
@@ -459,3 +473,39 @@ function readCommandCodeReviewPage(frame) {
459
473
  cursorOnSubmit: submitRow !== undefined && submitRow.includes(exports.COMMAND_CODE_CURSOR_GLYPH),
460
474
  };
461
475
  }
476
+ /**
477
+ * Is this frame an `AskUserQuestion` CONFIRM page — `❯ 1. Submit` / `2. Cancel`
478
+ * under the question screen's tab strip — whatever else it draws? (Issue #3497)
479
+ *
480
+ * {@link readCommandCodeReviewPage} needs all three of its rows, the back hint
481
+ * included, and on a frame without `← to go back and edit` it answers `null`.
482
+ * The question region declines that page too (it draws `1.` twice), so the
483
+ * GENERIC parser reads it; and a free-text question drawn with the pair as its
484
+ * only options is read by the question reader itself. Either way the payload is
485
+ * a two-option `multiple_choice` whose default is `Submit`, which Auto-Yes
486
+ * answered `1` — committing the worker's own proposal as the human's answer
487
+ * (Kewton/Musunest#283).
488
+ *
489
+ * This is the wider reading Auto-Yes declines on, and deliberately NOT a change
490
+ * to the Review page reading: the status path and the answer panels keep what
491
+ * they publish for these frames, so a human is still shown the question. True
492
+ * when the tab strip sits directly under the last rule row and the region
493
+ * carries the confirm pair — `1. Submit` and `2. Cancel`, the `❯` on either —
494
+ * with or without the back hint, and whichever tab is current (the incident's
495
+ * page was a free-text question drawn with the same pair).
496
+ *
497
+ * The question screens themselves (#2521 / #2522 / #2753 / #2754) never carry
498
+ * the pair: their `Submit` / `Next` confirm row has no number, and the Review
499
+ * TAB showing a diff (`◯ Dispatch | ● Review` over `1 +` gutter rows) has no
500
+ * `Submit` row at all.
501
+ *
502
+ * @param frame - a raw capture with its box drawing intact (ANSI optional)
503
+ */
504
+ function isCommandCodeQuestionConfirmPage(frame) {
505
+ const region = readQuestionTabRegion(frame);
506
+ if (region === null)
507
+ return false;
508
+ const body = region.join('\n');
509
+ return (COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body) &&
510
+ COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN.test(body));
511
+ }
@@ -4,7 +4,7 @@
4
4
  * (Issue #3217). `cli-patterns.ts` re-exports every public name.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = void 0;
7
+ exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_OPTION_LABEL_PATTERN = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = void 0;
8
8
  exports.readCopilotStatusBar = readCopilotStatusBar;
9
9
  exports.findCopilotChromeStart = findCopilotChromeStart;
10
10
  exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
@@ -559,6 +559,12 @@ exports.COPILOT_FOLDER_TRUST_ANCHORS = [
559
559
  * line and accept `1. Yes, and remember ...`.
560
560
  */
561
561
  exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = /^[ \t]*(?:[>❯][ \t]*)?1\.[ \t]+Yes[ \t]*$/m;
562
+ /**
563
+ * The folder-trust dialog's option labels as the prompt parser reads them
564
+ * (`1. Yes` -> `Yes`), for the Auto-Yes poller to tell the dialog itself from
565
+ * another prompt under a reply that quotes its question (Issue #3790).
566
+ */
567
+ exports.COPILOT_FOLDER_TRUST_OPTION_LABEL_PATTERN = /^(?:Yes|Yes, and remember this folder for future sessions|No \(Esc\))$/;
562
568
  /**
563
569
  * Key that selects {@link COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN}.
564
570
  * Measured on 1.0.80: the digit confirms on its own — sending a trailing Enter
@@ -367,9 +367,13 @@ async function writeOpencodeV2Turn(target, rendered, timestampMs) {
367
367
  * @param target - The instance the stream belongs to
368
368
  * @param port - Its server
369
369
  * @param sessionId - `ses_…` from the end-of-turn frame
370
+ * @param isCurrent - Whether the subscription that asked is still the
371
+ * instance's (Issue #3733); checked after the read, right before the model
372
+ * is latched. False skips only the latch: the rows are still written (the
373
+ * turn did happen, and `requestId` keeps a later sync from doubling them)
370
374
  * @returns How many rows were written
371
375
  */
372
- function syncOpencodeV2History(target, port, sessionId) {
376
+ function syncOpencodeV2History(target, port, sessionId, isCurrent = () => true) {
373
377
  return serialize((0, secrets_1.opencodeV2KeyOf)(target), async () => {
374
378
  const instanceId = target.instanceId ?? target.cliToolId;
375
379
  try {
@@ -395,7 +399,12 @@ function syncOpencodeV2History(target, port, sessionId) {
395
399
  }
396
400
  // Issue #2964: the model that answered, onto the hook latch the UI and
397
401
  // `capture --json` read. Before the rows, so a failed write cannot cost it.
398
- (0, agent_event_state_1.recordAgentReportedModel)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, target.instanceId ?? tool_id_1.OPENCODE_V2_CLI_TOOL_ID, readLatestOpencodeV2AssistantModel(entries));
402
+ // Issue #3733: not for a subscription closed or replaced during the read —
403
+ // a restarted or stopped session would show the old model, and its change
404
+ // broadcast and Push (#2357) would fire for a session that is not there.
405
+ if (isCurrent()) {
406
+ (0, agent_event_state_1.recordAgentReportedModel)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, target.instanceId ?? tool_id_1.OPENCODE_V2_CLI_TOOL_ID, readLatestOpencodeV2AssistantModel(entries));
407
+ }
399
408
  const closed = buildOpencodeV2TurnsFromMessages(entries, sessionId).filter((turn) => turn.closed);
400
409
  const kept = closed.slice(-exports.MAX_OPENCODE_V2_SYNCED_TURNS);
401
410
  let written = 0;
@@ -386,7 +386,7 @@ function deliver(state, frame) {
386
386
  error: error instanceof Error ? error.message : String(error),
387
387
  });
388
388
  }
389
- void recordOpencodeV2TurnEnd(state.target, state.port, frame);
389
+ void recordOpencodeV2TurnEnd(state.target, state.port, frame, () => isCurrentSubscription(state));
390
390
  void refreshOpencodeV2UsageOnFrame(state.target, state.port, frame, () => isCurrentSubscription(state));
391
391
  }
392
392
  function isCurrentSubscription(state) {
@@ -429,16 +429,18 @@ function refreshOpencodeV2UsageOnFrame(target, port, frame, isCurrent = () => tr
429
429
  *
430
430
  * Exported for the tests, which drive frames through the path the stream does.
431
431
  *
432
+ * @param isCurrent - Handed to `syncOpencodeV2History`, which skips the model
433
+ * latch when it is false after the read (Issue #3733)
432
434
  * @returns The sync, or null when the frame ends no turn
433
435
  */
434
- function recordOpencodeV2TurnEnd(target, port, frame) {
436
+ function recordOpencodeV2TurnEnd(target, port, frame, isCurrent = () => true) {
435
437
  try {
436
438
  if (!(0, history_1.isOpencodeV2TurnEndEventType)((0, mappers_1.frameType)(frame)))
437
439
  return null;
438
440
  const sessionId = (0, mappers_1.frameSessionId)(frame);
439
441
  if (sessionId === null)
440
442
  return null;
441
- return (0, history_1.syncOpencodeV2History)(target, port, sessionId);
443
+ return (0, history_1.syncOpencodeV2History)(target, port, sessionId, isCurrent);
442
444
  }
443
445
  catch (error) {
444
446
  logger.warn('opencode-v2-history-trigger-failed', {
@@ -41,6 +41,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
41
41
  exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS = void 0;
42
42
  exports.recordAntigravityPermissionReceipt = recordAntigravityPermissionReceipt;
43
43
  exports.hasRecentAntigravityPermissionReceipt = hasRecentAntigravityPermissionReceipt;
44
+ exports.getAntigravityPermissionReceiptAt = getAntigravityPermissionReceiptAt;
44
45
  exports.resetAntigravityPermissionReceiptsForTests = resetAntigravityPermissionReceiptsForTests;
45
46
  const auto_yes_state_1 = require("../../lib/auto-yes-state");
46
47
  const global_state_1 = require("../global-state");
@@ -69,6 +70,12 @@ function pruneExpiredReceipts(now) {
69
70
  receipts.delete(key);
70
71
  }
71
72
  }
73
+ /**
74
+ * Per-instance episode state of the poller's reads (Issue #3767); the logic is in
75
+ * `antigravity-receipt-episodes.ts`. The Map lives here only so that
76
+ * {@link resetAntigravityPermissionReceiptsForTests} empties both records.
77
+ */
78
+ const observations = (0, global_state_1.getOrInitGlobal)('__antigravityReceiptObservations', () => new Map());
72
79
  /**
73
80
  * Record that agy asked CommandMate about a tool call.
74
81
  *
@@ -107,7 +114,15 @@ function hasRecentAntigravityPermissionReceipt(worktreeId, cliToolId, instanceId
107
114
  return false;
108
115
  return now - receipt.at <= exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS;
109
116
  }
117
+ /**
118
+ * The latest question's arrival time for this instance, kept past the window
119
+ * (Issue #3767), or null when none was ever received.
120
+ */
121
+ function getAntigravityPermissionReceiptAt(worktreeId, cliToolId, instanceId) {
122
+ return receipts.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId))?.at ?? null;
123
+ }
110
124
  /** Empty the record. Tests only: production entries age out on their own. */
111
125
  function resetAntigravityPermissionReceiptsForTests() {
112
126
  receipts.clear();
127
+ observations.clear();
113
128
  }
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ /**
3
+ * When did an agy approval dialog first appear, and was it asked about in time?
4
+ * (Issue #3767)
5
+ *
6
+ * `hasRecentAntigravityPermissionReceipt` measures the window to the CLOCK OF THE
7
+ * TICK. agy draws a dialog some seconds after the hook reply, and the poller ticks
8
+ * every 5s after a response, so a dialog drawn 5.9s after the receipt was first
9
+ * read 8.7s after it, outside the 8s window, and no later receipt came to open
10
+ * it. The gate here judges the window to the dialog's first appearance instead
11
+ * (bounded by the last read that saw no dialog), which the poller makes possible
12
+ * by bracketing its reads with {@link beginAntigravityFrameRead} /
13
+ * {@link endAntigravityFrameRead}. See `antigravity-permission-receipts` for the
14
+ * receipt record itself.
15
+ *
16
+ * @module lib/polling/antigravity-receipt-episodes
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS = exports.ANTIGRAVITY_PERMISSION_RECEIPT_OBSERVATION_SLACK_MS = void 0;
20
+ exports.beginAntigravityFrameRead = beginAntigravityFrameRead;
21
+ exports.endAntigravityFrameRead = endAntigravityFrameRead;
22
+ exports.markAntigravityAnswerSent = markAntigravityAnswerSent;
23
+ exports.getAntigravityAcceptedReceiptAt = getAntigravityAcceptedReceiptAt;
24
+ exports.getAntigravityReceiptVerdict = getAntigravityReceiptVerdict;
25
+ exports.judgeAntigravityPermissionReceipt = judgeAntigravityPermissionReceipt;
26
+ const auto_yes_state_1 = require("../../lib/auto-yes-state");
27
+ const global_state_1 = require("../global-state");
28
+ const antigravity_permission_receipts_1 = require("./antigravity-permission-receipts");
29
+ /**
30
+ * Extra time past the window that the FIRST tick to see a dialog may be after
31
+ * the receipt (Issue #3767). The dialog's real appearance is only known to lie
32
+ * between the last tick that saw none and the first that saw it; that gap is a
33
+ * poll interval (5s after a response), so the window is judged on the lower
34
+ * bound and the first sighting is capped at window + this slack.
35
+ */
36
+ exports.ANTIGRAVITY_PERMISSION_RECEIPT_OBSERVATION_SLACK_MS = 5_000;
37
+ /**
38
+ * Longest gap between two poller reads over which an episode is carried
39
+ * (Issue #3767): the slowest tick (5s after a response) plus room for the
40
+ * capture. A longer gap (capture backoff, no session, Auto-Yes off and on) means
41
+ * nothing is known of the screen in between, so the episode is dropped and the
42
+ * next candidate is judged from its own first sighting.
43
+ */
44
+ const MAX_READ_GAP_MS = exports.ANTIGRAVITY_PERMISSION_RECEIPT_OBSERVATION_SLACK_MS + 2_000;
45
+ /**
46
+ * How long after the poller SENT its answer to an accepted dialog (Issue #3789,
47
+ * {@link markAntigravityAnswerSent}) a dialog may still be on screen before it
48
+ * is reported: the window, the slack, and the cooldown the poller waits after
49
+ * an answer. Until then it is agy taking its time to take the dialog down, and
50
+ * stays `answered` (silent). Past it the keys did not clear the dialog, or a
51
+ * dialog with no question of its own replaced it between two reads (the screen
52
+ * cannot tell which), and it is `outlived` — withheld, and recorded.
53
+ *
54
+ * Written as the sum's value (8s + 5s + 5s, `COOLDOWN_INTERVAL_MS`), not the
55
+ * sum: tests that mock the receipts module without the window constant would
56
+ * fail at load. A unit test pins it to the sum.
57
+ */
58
+ exports.ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS = 18_000;
59
+ /** Beyond this, a late dialog is read as "the hook stopped arriving" (#3767). */
60
+ const RECEIPT_LAPSED_AFTER_MS = 60_000;
61
+ const observations = (0, global_state_1.getOrInitGlobal)('__antigravityReceiptObservations', () => new Map());
62
+ const isTimeOrNull = (x) => x === null || (typeof x === 'number' && Number.isFinite(x));
63
+ /**
64
+ * The Map lives on globalThis and outlives a module reload, so an entry may have
65
+ * another shape. Such an entry is dropped (no episode: the plain tick test),
66
+ * never read as times — `undefined` would turn every comparison into NaN.
67
+ */
68
+ function isObservation(v) {
69
+ if (typeof v !== 'object' || v === null)
70
+ return false;
71
+ const o = v;
72
+ return (typeof o.tracking === 'boolean' &&
73
+ typeof o.candidateSeen === 'boolean' &&
74
+ ['firstSeenAt', 'clearAt', 'prevReadAt', 'lastReadAt', 'acceptedReceiptAt', 'answerSentAt', 'usedReceiptAt'].every(k => isTimeOrNull(o[k])) &&
75
+ (o.verdict === null || typeof o.verdict === 'object') &&
76
+ (o.answerInterrupted === undefined || typeof o.answerInterrupted === 'boolean'));
77
+ }
78
+ function existingObservation(key) {
79
+ const o = observations.get(key);
80
+ if (o === undefined)
81
+ return undefined;
82
+ if (isObservation(o))
83
+ return o;
84
+ observations.delete(key);
85
+ return undefined;
86
+ }
87
+ function observationOf(key) {
88
+ let o = existingObservation(key);
89
+ if (!o) {
90
+ o = {
91
+ tracking: false,
92
+ candidateSeen: false,
93
+ firstSeenAt: null,
94
+ clearAt: null,
95
+ prevReadAt: null,
96
+ lastReadAt: null,
97
+ acceptedReceiptAt: null,
98
+ answerSentAt: null,
99
+ answerInterrupted: false,
100
+ usedReceiptAt: null,
101
+ verdict: null,
102
+ };
103
+ observations.set(key, o);
104
+ }
105
+ return o;
106
+ }
107
+ /**
108
+ * Start one poller read of an agy frame (Issue #3767). Pair with
109
+ * {@link endAntigravityFrameRead}; the pair is what lets the gate judge the
110
+ * window by when the dialog first appeared rather than by the tick's clock.
111
+ */
112
+ function beginAntigravityFrameRead(worktreeId, instanceId, now = Date.now()) {
113
+ const o = observationOf((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId));
114
+ if (o.lastReadAt !== null && !(now - o.lastReadAt <= MAX_READ_GAP_MS)) {
115
+ // Reads stopped for a while: the dialog now on screen may not be the one
116
+ // the episode saw, nor did it appear right after the last clear read.
117
+ o.firstSeenAt = null;
118
+ o.clearAt = null;
119
+ o.acceptedReceiptAt = null;
120
+ o.answerSentAt = null;
121
+ o.answerInterrupted = false;
122
+ o.verdict = null;
123
+ }
124
+ o.tracking = true;
125
+ o.candidateSeen = false;
126
+ o.prevReadAt = o.lastReadAt;
127
+ o.lastReadAt = now;
128
+ }
129
+ /**
130
+ * End the read. A read in which the gate never saw a prompt candidate closes the
131
+ * episode: the next candidate is a new dialog with its own first sighting.
132
+ */
133
+ function endAntigravityFrameRead(worktreeId, instanceId, now = Date.now()) {
134
+ const o = existingObservation((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId));
135
+ if (!o || !o.tracking || o.candidateSeen)
136
+ return;
137
+ o.firstSeenAt = null;
138
+ o.acceptedReceiptAt = null;
139
+ o.answerSentAt = null;
140
+ o.answerInterrupted = false;
141
+ o.verdict = null;
142
+ o.clearAt = now;
143
+ }
144
+ /**
145
+ * The poller sent keys to the dialog the current episode accepted (Issue #3789):
146
+ * starts {@link ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS}. Called only after the send
147
+ * reached tmux; a tick that accepted but sent nothing never calls it, so its
148
+ * dialog is never reported as one that outlived an answer. No-op without an
149
+ * accepted episode.
150
+ *
151
+ * Issue #3796: also called, with `interrupted`, when the send was cut short
152
+ * after it began (stopped part-way, or failed) — some of its keys may be on the
153
+ * pane, and the receipt is spent either way. Without it such a dialog stayed
154
+ * `answered` (silent) for as long as it stayed up. Starting the grace only
155
+ * leads to `outlived`, which withholds: nothing is answered because of it.
156
+ *
157
+ * @param options.forReceiptAt - The episode the send was for
158
+ * ({@link getAntigravityAcceptedReceiptAt} read when it began). Given, only
159
+ * that episode is marked: a send that comes back — whole or cut short —
160
+ * after a stop → enable, when the successor already accepted a dialog on a
161
+ * newer receipt, must not start that dialog's grace or give it its own
162
+ * "cut short" (Issue #3796 review, review E for the whole send).
163
+ */
164
+ function markAntigravityAnswerSent(worktreeId, instanceId, now = Date.now(), options = {}) {
165
+ const o = existingObservation((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId));
166
+ if (!o || o.acceptedReceiptAt === null)
167
+ return;
168
+ if (options.forReceiptAt !== undefined && options.forReceiptAt !== o.acceptedReceiptAt)
169
+ return;
170
+ o.answerSentAt = now;
171
+ o.answerInterrupted = options.interrupted === true;
172
+ }
173
+ /**
174
+ * The receipt (`at`) the current episode was accepted on, or null when none
175
+ * (Issue #3796): what identifies the episode a send is for.
176
+ */
177
+ function getAntigravityAcceptedReceiptAt(worktreeId, instanceId) {
178
+ return existingObservation((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId))?.acceptedReceiptAt ?? null;
179
+ }
180
+ /**
181
+ * The verdict of the current episode's latest consultation, or null when no
182
+ * candidate dialog was read in the last tick (Issue #3767).
183
+ */
184
+ function getAntigravityReceiptVerdict(worktreeId, instanceId) {
185
+ return existingObservation((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId))?.verdict ?? null;
186
+ }
187
+ function causeFor(ageMs) {
188
+ if (ageMs === null)
189
+ return 'never';
190
+ return ageMs > RECEIPT_LAPSED_AFTER_MS ? 'lapsed' : 'late';
191
+ }
192
+ /**
193
+ * May the prompt candidate on this instance's frame be answered, judged by when
194
+ * the dialog first appeared (Issue #3767)?
195
+ *
196
+ * Replaces the tick-clock test of {@link hasRecentAntigravityPermissionReceipt}
197
+ * for the caller that answers: agy draws the dialog some seconds after the hook
198
+ * reply, and a 5s poll can first read it past the 8s window. The dialog is taken
199
+ * as appearing at the later of the last tick that saw none and the question's
200
+ * arrival. Still refused: a question that arrived after the dialog was already
201
+ * up, one older than the window by then, one already spent on another dialog,
202
+ * and none at all (a quotation follows no question).
203
+ *
204
+ * Without {@link beginAntigravityFrameRead} brackets there is no episode to
205
+ * remember, and this is exactly the old tick test.
206
+ */
207
+ function judgeAntigravityPermissionReceipt(worktreeId, instanceId, nowOverride) {
208
+ const now = nowOverride ?? Date.now();
209
+ const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId);
210
+ const o = observationOf(key);
211
+ if (!o.tracking) {
212
+ // No bracketed reads: no episode to remember, the plain tick test.
213
+ const ok = nowOverride === undefined
214
+ ? (0, antigravity_permission_receipts_1.hasRecentAntigravityPermissionReceipt)(worktreeId, 'antigravity', instanceId)
215
+ : (0, antigravity_permission_receipts_1.hasRecentAntigravityPermissionReceipt)(worktreeId, 'antigravity', instanceId, undefined, nowOverride);
216
+ return { ok, cause: ok ? null : 'never', lastReceiptAt: null, firstSeenAt: now, ageMs: null };
217
+ }
218
+ const lastReceiptAt = (0, antigravity_permission_receipts_1.getAntigravityPermissionReceiptAt)(worktreeId, 'antigravity', instanceId);
219
+ const sameRead = o.candidateSeen;
220
+ o.candidateSeen = true;
221
+ if (o.firstSeenAt === null)
222
+ o.firstSeenAt = now;
223
+ const firstSeenAt = o.firstSeenAt;
224
+ const ageMs = lastReceiptAt === null ? null : firstSeenAt - lastReceiptAt;
225
+ const verdict = (cause, age = ageMs) => {
226
+ const v = { ok: cause === null, cause, lastReceiptAt, firstSeenAt, ageMs: age };
227
+ o.verdict = v;
228
+ return v;
229
+ };
230
+ if (lastReceiptAt === null)
231
+ return verdict('never');
232
+ if (o.acceptedReceiptAt !== null && lastReceiptAt > o.acceptedReceiptAt) {
233
+ // A newer question while the answered dialog stayed up on every tick: the
234
+ // dialog it asked about replaced the old one between two reads. A new
235
+ // episode, which cannot have appeared before the previous read.
236
+ o.firstSeenAt = now;
237
+ o.clearAt = o.prevReadAt;
238
+ o.acceptedReceiptAt = null;
239
+ o.answerSentAt = null;
240
+ o.answerInterrupted = false;
241
+ return judgeAntigravityPermissionReceipt(worktreeId, instanceId, now);
242
+ }
243
+ if (o.acceptedReceiptAt === lastReceiptAt) {
244
+ // The read that accepted may consult the gate twice (the tool's reader, then
245
+ // the generic pass). A LATER tick over the same dialog is the old tick test:
246
+ // a dialog that outlives the answer is not answered again past the window.
247
+ // Withheld, but as `answered`: the caller records no no-hook-receipt for it.
248
+ if (sameRead || now - lastReceiptAt <= antigravity_permission_receipts_1.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS)
249
+ return verdict(null);
250
+ // Issue #3789: not forever, though, once keys were sent. Past the grace they
251
+ // did not clear the dialog (or one with no question of its own replaced it),
252
+ // and staying silent would leave the session stopped with no record of why.
253
+ // Accepted but never sent stays `answered`: the poller's own reason for not
254
+ // sending (partial-answer, …) is the one to keep, not overwrite. Written as
255
+ // `!(… <= …)` so that a NaN time reports.
256
+ if (o.answerSentAt !== null && !(now - o.answerSentAt <= exports.ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS)) {
257
+ const v = verdict('outlived');
258
+ if (o.answerInterrupted === true)
259
+ v.answerInterrupted = true;
260
+ return v;
261
+ }
262
+ return verdict('answered');
263
+ }
264
+ if (o.usedReceiptAt === lastReceiptAt)
265
+ return verdict('used');
266
+ if (lastReceiptAt > firstSeenAt)
267
+ return verdict('predates');
268
+ // The clear read bounds the appearance only when it is the read right before
269
+ // the first sighting; otherwise the dialog may have been up since long before.
270
+ const clearBound = o.clearAt !== null && firstSeenAt - o.clearAt <= MAX_READ_GAP_MS ? o.clearAt : firstSeenAt;
271
+ const appearedAfter = Math.max(clearBound, lastReceiptAt);
272
+ // Written as `!(… <= …)` so that a NaN withholds.
273
+ if (!(appearedAfter - lastReceiptAt <= antigravity_permission_receipts_1.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS) ||
274
+ !(firstSeenAt - lastReceiptAt <=
275
+ antigravity_permission_receipts_1.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS + exports.ANTIGRAVITY_PERMISSION_RECEIPT_OBSERVATION_SLACK_MS)) {
276
+ return verdict(causeFor(ageMs));
277
+ }
278
+ o.acceptedReceiptAt = lastReceiptAt;
279
+ o.usedReceiptAt = lastReceiptAt;
280
+ return verdict(null);
281
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * The `AskUserQuestion` confirm pages Auto-Yes leaves to a human (Issue #3497,
4
+ * Issue #3748).
5
+ *
6
+ * `Submit` on these pages picks nothing: it commits whatever stands as the
7
+ * answers. On Kewton/Musunest#283 that was the worker's own proposal, which the
8
+ * worker then implemented as though a human had approved it. So neither the
9
+ * server's poller (`suppressIfNotOursToAnswer`, step 3.3) nor the browser's
10
+ * fallback (`useAutoYes`, which answers only while no server poller runs) sends
11
+ * a key to them.
12
+ *
13
+ * Server-only: `normalizeFrame` and the tools' detectors reach `logger` → `env`
14
+ * → `fs`. The browser judges by the prompt's options instead
15
+ * (`polling/auto-yes-confirm-shape`).
16
+ *
17
+ * @module lib/polling/auto-yes-confirm-page
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.isAutoYesDeclinedConfirmPage = isAutoYesDeclinedConfirmPage;
21
+ exports.isAutoYesDeclinedConfirmFrame = isAutoYesDeclinedConfirmFrame;
22
+ const frame_1 = require("../detection/tools/frame");
23
+ const selection_shape_1 = require("../detection/tools/command-code/selection-shape");
24
+ const detect_1 = require("../detection/tools/claude/detect");
25
+ /**
26
+ * Is this frame one of the confirm pages Auto-Yes does not answer?
27
+ *
28
+ * - `command-code`: `❯ 1. Submit` / `2. Cancel` under the question's tab strip,
29
+ * with or without the back hint (#3497, `isCommandCodeQuestionConfirmPage`).
30
+ * - `claude`: `Ready to submit your answers?` / `❯ 1. Submit answers` /
31
+ * `2. Cancel` (#3748, `isClaudeAskUserQuestionConfirmPage`).
32
+ *
33
+ * Every other tool: false — none has a measured confirm page.
34
+ *
35
+ * @param frame - The tick's one normalised frame (Issue #3183)
36
+ */
37
+ function isAutoYesDeclinedConfirmPage(cliToolId, frame) {
38
+ // An empty capture draws no page (and Claude's reading walks the rows).
39
+ if (!frame.raw)
40
+ return false;
41
+ if (cliToolId === 'command-code')
42
+ return (0, selection_shape_1.isCommandCodeQuestionConfirmPage)(frame.raw);
43
+ if (cliToolId === 'claude')
44
+ return (0, detect_1.isClaudeAskUserQuestionConfirmPage)(frame);
45
+ return false;
46
+ }
47
+ /**
48
+ * {@link isAutoYesDeclinedConfirmPage} on a capture as text. False for no frame.
49
+ */
50
+ function isAutoYesDeclinedConfirmFrame(cliToolId, output) {
51
+ if (!output)
52
+ return false;
53
+ if (cliToolId !== 'command-code' && cliToolId !== 'claude')
54
+ return false;
55
+ return isAutoYesDeclinedConfirmPage(cliToolId, (0, frame_1.normalizeFrame)(output, cliToolId));
56
+ }
@@ -392,10 +392,17 @@ function assessPromptAnswerability(cliToolId, frame) {
392
392
  },
393
393
  };
394
394
  }
395
+ // Issue #3808: a numbered agy screen agy's reader declines (the login-method
396
+ // screen, a permission dialog whose `tab Amend` footer is cut or off the
397
+ // pane) is no prompt — not the generic parser's reading of its `1. / 2.` rows.
398
+ const declinedAgyScreen = cliToolId === 'antigravity' && toolDialog === null
399
+ && (0, dialog_1.isAntigravityUnvouchedNumberedScreen)(cleanOutput);
395
400
  const isCommandCodeQuestion = commandCodeQuestion.kind === 'prompt';
396
401
  const candidate = (commandCodeQuestion.kind === 'prompt' ? commandCodeQuestion.prompt : null)
397
402
  ?? toolDialog
398
- ?? (0, prompt_detector_1.detectPrompt)(cleanOutput, (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId));
403
+ ?? (declinedAgyScreen
404
+ ? { isPrompt: false, cleanContent: cleanOutput }
405
+ : (0, prompt_detector_1.detectPrompt)(cleanOutput, (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId)));
399
406
  // Issue #3183: one frame, normalised once from the capture, for the
400
407
  // quotation veto and the presence gate alike — the reading the status chain
401
408
  // and the Auto-Yes poller apply, so Send is offered exactly when they agree.