commandmate 0.44.1 → 0.44.3

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 (604) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +169 -169
  3. package/.next/app-path-routes-manifest.json +35 -35
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +0 -6
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route.js +1 -1
  12. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update/route.js +2 -2
  15. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/login/route.js +1 -1
  18. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/capabilities/route.js +1 -1
  22. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/route.js +1 -1
  24. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  25. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  27. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  28. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/external-apps/route.js +1 -1
  33. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  37. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  40. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  41. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  43. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  44. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/push/escalation/route.js +1 -1
  48. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/push/subscriptions/route.js +2 -2
  50. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/push/vapid/route.js +1 -1
  52. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  54. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  55. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/relays/route.js +1 -1
  57. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  58. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/clone/route.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/restore/route.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  71. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/route.js +1 -1
  73. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/scan/route.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/sync/route.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  83. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  84. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/skills/[id]/route.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/route.js +1 -1
  94. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/templates/[id]/route.js +2 -2
  99. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/templates/route.js +2 -2
  101. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  106. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -2
  192. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -2
  195. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  208. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  211. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  214. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/route.js +1 -1
  264. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  267. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  273. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/sessions/page.js +1 -1
  275. package/.next/server/app/sessions/page.js.nft.json +1 -1
  276. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/worktrees/[id]/page.js +11 -11
  282. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  283. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  285. package/.next/server/app-paths-manifest.json +35 -35
  286. package/.next/server/chunks/1191.js +2 -2
  287. package/.next/server/chunks/1210.js +1 -1
  288. package/.next/server/chunks/1559.js +2 -0
  289. package/.next/server/chunks/1789.js +1 -0
  290. package/.next/server/chunks/2119.js +1 -1
  291. package/.next/server/chunks/2404.js +1 -1
  292. package/.next/server/chunks/2445.js +1 -1
  293. package/.next/server/chunks/2460.js +1 -0
  294. package/.next/server/chunks/2710.js +1 -1
  295. package/.next/server/chunks/2908.js +1 -0
  296. package/.next/server/chunks/2980.js +1 -1
  297. package/.next/server/chunks/3241.js +1 -1
  298. package/.next/server/chunks/3480.js +1 -1
  299. package/.next/server/chunks/3718.js +1 -1
  300. package/.next/server/chunks/4207.js +2 -2
  301. package/.next/server/chunks/450.js +1 -1
  302. package/.next/server/chunks/4672.js +5 -0
  303. package/.next/server/chunks/{9353.js → 4718.js} +2 -2
  304. package/.next/server/chunks/4837.js +14 -0
  305. package/.next/server/chunks/5048.js +1 -1
  306. package/.next/server/chunks/5209.js +1 -0
  307. package/.next/server/chunks/5595.js +1 -0
  308. package/.next/server/chunks/5625.js +25 -0
  309. package/.next/server/chunks/5845.js +1 -0
  310. package/.next/server/chunks/611.js +1 -1
  311. package/.next/server/chunks/6130.js +1 -1
  312. package/.next/server/chunks/6401.js +1 -1
  313. package/.next/server/chunks/6781.js +1 -1
  314. package/.next/server/chunks/6793.js +3 -3
  315. package/.next/server/chunks/7491.js +2 -2
  316. package/.next/server/chunks/7905.js +1 -1
  317. package/.next/server/chunks/850.js +1 -0
  318. package/.next/server/chunks/8543.js +1 -1
  319. package/.next/server/chunks/8728.js +3 -3
  320. package/.next/server/chunks/8791.js +1 -1
  321. package/.next/server/chunks/8800.js +1 -1
  322. package/.next/server/chunks/8918.js +7 -7
  323. package/.next/server/chunks/9130.js +1 -5
  324. package/.next/server/chunks/9390.js +2 -3
  325. package/.next/server/chunks/9584.js +1 -1
  326. package/.next/server/chunks/9627.js +6 -6
  327. package/.next/server/chunks/9731.js +3 -3
  328. package/.next/server/middleware-manifest.json +5 -5
  329. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  330. package/.next/server/pages/500.html +1 -1
  331. package/.next/server/server-reference-manifest.json +1 -1
  332. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  333. package/.next/static/chunks/{2407-f1f258d4a1d92620.js → 2407-06d35bb1aa02de80.js} +1 -1
  334. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  335. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  336. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  337. package/.next/static/chunks/app/{layout-da66300cc20244ed.js → layout-0d1750b833f5cc3e.js} +1 -1
  338. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  339. package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
  340. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  341. package/.next/static/css/057f64a65726c439.css +1 -0
  342. package/.next/trace +13 -13
  343. package/dist/cli/commands/ask.d.ts.map +1 -1
  344. package/dist/cli/commands/ask.js +120 -119
  345. package/dist/cli/commands/attach.d.ts +94 -0
  346. package/dist/cli/commands/attach.d.ts.map +1 -1
  347. package/dist/cli/commands/attach.js +145 -7
  348. package/dist/cli/commands/auto-yes.js +1 -1
  349. package/dist/cli/commands/capture.d.ts.map +1 -1
  350. package/dist/cli/commands/capture.js +10 -13
  351. package/dist/cli/commands/command-target.d.ts +23 -0
  352. package/dist/cli/commands/command-target.d.ts.map +1 -0
  353. package/dist/cli/commands/command-target.js +25 -0
  354. package/dist/cli/commands/instances.d.ts.map +1 -1
  355. package/dist/cli/commands/instances.js +41 -2
  356. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  357. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  358. package/dist/cli/commands/message-dispatch.js +63 -0
  359. package/dist/cli/commands/reply.d.ts.map +1 -1
  360. package/dist/cli/commands/reply.js +2 -5
  361. package/dist/cli/commands/respond.d.ts.map +1 -1
  362. package/dist/cli/commands/respond.js +3 -6
  363. package/dist/cli/commands/send.d.ts.map +1 -1
  364. package/dist/cli/commands/send.js +149 -146
  365. package/dist/cli/commands/wait.d.ts.map +1 -1
  366. package/dist/cli/commands/wait.js +608 -416
  367. package/dist/cli/types/api-responses.d.ts +174 -27
  368. package/dist/cli/types/api-responses.d.ts.map +1 -1
  369. package/dist/cli/types/api-responses.js +4 -2
  370. package/dist/cli/utils/api-client.d.ts +25 -5
  371. package/dist/cli/utils/api-client.d.ts.map +1 -1
  372. package/dist/cli/utils/api-client.js +87 -55
  373. package/dist/cli/utils/server-url.d.ts +1 -0
  374. package/dist/cli/utils/server-url.d.ts.map +1 -1
  375. package/dist/cli/utils/server-url.js +7 -0
  376. package/dist/config/uat-isolation.d.ts +140 -0
  377. package/dist/config/uat-isolation.d.ts.map +1 -0
  378. package/dist/config/uat-isolation.js +246 -0
  379. package/dist/lib/global-state.d.ts +12 -0
  380. package/dist/lib/global-state.d.ts.map +1 -0
  381. package/dist/lib/global-state.js +16 -0
  382. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  383. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  384. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  385. package/dist/lib/session/prompt-view.d.ts +228 -0
  386. package/dist/lib/session/prompt-view.d.ts.map +1 -0
  387. package/dist/lib/session/prompt-view.js +290 -0
  388. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  389. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  390. package/dist/lib/session/status-evidence-type.js +2 -0
  391. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  392. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  393. package/dist/server/locales/en/worktree.json +3 -1
  394. package/dist/server/locales/ja/worktree.json +3 -1
  395. package/dist/server/server.js +5 -3
  396. package/dist/server/src/cli/types/api-responses.js +4 -2
  397. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  398. package/dist/server/src/config/uat-isolation.js +246 -0
  399. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  400. package/dist/server/src/lib/auto-yes-lifecycle.js +139 -0
  401. package/dist/server/src/lib/auto-yes-poller.js +465 -160
  402. package/dist/server/src/lib/auto-yes-state.js +2 -2
  403. package/dist/server/src/lib/cli-tools/antigravity.js +39 -80
  404. package/dist/server/src/lib/cli-tools/base.js +151 -0
  405. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  406. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  407. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  408. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  409. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  410. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  411. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  412. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  413. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  414. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  415. package/dist/server/src/lib/detection/cli-patterns.js +374 -3047
  416. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  417. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  418. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  419. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  420. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  421. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  422. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  423. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  424. package/dist/server/src/lib/detection/status-detector.js +1 -1
  425. package/dist/server/src/lib/detection/tools/antigravity/detect.js +12 -60
  426. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  427. package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
  428. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  429. package/dist/server/src/lib/detection/tools/claude/detect.js +11 -17
  430. package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
  431. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  432. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  433. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +1 -1
  434. package/dist/server/src/lib/detection/tools/codex/detect.js +71 -130
  435. package/dist/server/src/lib/detection/tools/codex/live-region.js +104 -0
  436. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  437. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  438. package/dist/server/src/lib/detection/tools/command-code/detect.js +19 -50
  439. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  440. package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
  441. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  442. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  443. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  444. package/dist/server/src/lib/detection/tools/copilot/detect.js +13 -35
  445. package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
  446. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  447. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  448. package/dist/server/src/lib/detection/tools/frame.js +36 -2
  449. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  450. package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
  451. package/dist/server/src/lib/detection/tools/live-region.js +204 -0
  452. package/dist/server/src/lib/detection/tools/opencode/detect.js +11 -49
  453. package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
  454. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  455. package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
  456. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +10 -42
  457. package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
  458. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  459. package/dist/server/src/lib/detection/tools/run-detection.js +31 -50
  460. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  461. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  462. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  463. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  464. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  465. package/dist/server/src/lib/global-state.js +16 -0
  466. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  467. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  468. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  469. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  470. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  471. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  472. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  473. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  474. package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
  475. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  476. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  477. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  478. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  479. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  480. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  481. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  482. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  483. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  484. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  485. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  486. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  487. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  488. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  489. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  490. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  491. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  492. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  493. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  494. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  495. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  496. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  497. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  498. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  499. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  500. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  501. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  502. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  503. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +16 -4
  504. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  505. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  506. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  507. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  508. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  509. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  510. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  511. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  512. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  513. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  514. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  515. package/dist/server/src/lib/polling/response-checker.js +666 -1162
  516. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  517. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  518. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  519. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  520. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  521. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  522. package/dist/server/src/lib/prompt-answer-sender.js +6 -5
  523. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  524. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  525. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  526. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  527. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  528. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -2
  529. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  530. package/dist/server/src/lib/relay/relay-delivery.js +6 -2
  531. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  532. package/dist/server/src/lib/relay/relay-triggers.js +9 -0
  533. package/dist/server/src/lib/resource-cleanup.js +6 -4
  534. package/dist/server/src/lib/response-cleaner.js +24 -1
  535. package/dist/server/src/lib/response-extractor.js +16 -0
  536. package/dist/server/src/lib/schedule-manager.js +8 -10
  537. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  538. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  539. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  540. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  541. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  542. package/dist/server/src/lib/session/agent-event-state.js +106 -1854
  543. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  544. package/dist/server/src/lib/session/agent-event-turn.js +811 -0
  545. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  546. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  547. package/dist/server/src/lib/session/claude-executor.js +45 -5
  548. package/dist/server/src/lib/session/claude-session.js +21 -65
  549. package/dist/server/src/lib/session/cli-session.js +17 -0
  550. package/dist/server/src/lib/session/current-output-builder.js +454 -1103
  551. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  552. package/dist/server/src/lib/session/current-output-types.js +9 -0
  553. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  554. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  555. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  556. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  557. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  558. package/dist/server/src/lib/session/prompt-view.js +290 -0
  559. package/dist/server/src/lib/session/prompt-waiting-composition.js +35 -0
  560. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  561. package/dist/server/src/lib/session/send-user-message.js +1 -1
  562. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  563. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  564. package/dist/server/src/lib/session/status-evidence.js +2 -2
  565. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  566. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  567. package/dist/server/src/lib/session/waiting-kind.js +3 -0
  568. package/dist/server/src/lib/session-cleanup.js +6 -8
  569. package/dist/server/src/lib/skills/install-plan.js +2 -1
  570. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  571. package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
  572. package/dist/server/src/lib/timer-manager.js +6 -8
  573. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  574. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  575. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  576. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  577. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  578. package/dist/server/src/lib/tmux/tmux.js +33 -59
  579. package/dist/server/src/lib/tui-accumulator.js +2 -2
  580. package/dist/server/src/lib/version-checker.js +6 -6
  581. package/dist/server/src/lib/ws-server.js +47 -11
  582. package/docs/en/user-guide/webapp-guide.md +27 -3
  583. package/package.json +1 -1
  584. package/release-notes/0.44.2.json +33 -0
  585. package/release-notes/0.44.3.json +82 -0
  586. package/scripts/hooks/cmate-agent-event.sh +18 -0
  587. package/.next/server/chunks/1068.js +0 -1
  588. package/.next/server/chunks/434.js +0 -1
  589. package/.next/server/chunks/5775.js +0 -1
  590. package/.next/server/chunks/6474.js +0 -14
  591. package/.next/server/chunks/650.js +0 -1
  592. package/.next/server/chunks/6661.js +0 -1
  593. package/.next/server/chunks/8583.js +0 -1
  594. package/.next/server/chunks/964.js +0 -1
  595. package/.next/server/chunks/967.js +0 -1
  596. package/.next/server/chunks/9882.js +0 -25
  597. package/.next/static/chunks/591-308072f285c34787.js +0 -1
  598. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  599. package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +0 -1
  600. package/.next/static/css/38070d879efa1371.css +0 -1
  601. package/dist/server/src/lib/cli-tools/index.js +0 -41
  602. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  603. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
  604. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = void 0;
4
+ /**
5
+ * Pasted text pattern
6
+ *
7
+ * Claude CLI displays this when it detects multi-line text paste in the
8
+ * ink-based TextInput. The pattern matches the folded display format.
9
+ *
10
+ * @example "[Pasted text #1 +46 lines]"
11
+ * @see Issue #212, #163
12
+ * @designNote PASTE-001: Pattern matches the start of the indicator only.
13
+ * The line count (+XX lines) is variable, so we match the fixed prefix
14
+ * to minimize false negatives. False positive risk is low because
15
+ * "[Pasted text #" is a unique format generated by Claude CLI's ink renderer.
16
+ * @designNote PASTE-001-FP (SF-S4-002): When used in skipPatterns,
17
+ * line-level matching could filter legitimate response lines if Claude's
18
+ * answer text happens to contain "[Pasted text #". This is unlikely and
19
+ * acceptable -- only the affected line would be lost.
20
+ */
21
+ exports.PASTED_TEXT_PATTERN = /\[Pasted text #\d+/;
22
+ /**
23
+ * Pasted text detection delay (milliseconds)
24
+ *
25
+ * Wait time after sendKeys for tmux buffer to reflect [Pasted text] display.
26
+ *
27
+ * @see Issue #212
28
+ * @designNote PASTE-002: 500ms is the empirically measured time for
29
+ * Claude CLI's ink rendering to complete. capturePane({ startLine: -10 })
30
+ * reads only the last 10 lines since [Pasted text] appears in the most
31
+ * recent few lines.
32
+ */
33
+ exports.PASTED_TEXT_DETECT_DELAY = 500;
34
+ /**
35
+ * Pasted text detection max retries
36
+ *
37
+ * @see Issue #212
38
+ * @designNote PASTE-003: 3 retries x 500ms = max 1500ms additional delay.
39
+ * Typically resolves on the first attempt (+500ms).
40
+ */
41
+ exports.MAX_PASTED_TEXT_RETRIES = 3;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isShellPaneCommand = isShellPaneCommand;
4
+ /** `#{pane_current_command}` values of an interactive shell, with tmux's `-` login prefix removed. */
5
+ const SHELL_PANE_COMMANDS = new Set(['sh', 'bash', 'zsh', 'fish', 'dash', 'ksh', 'tcsh', 'csh']);
6
+ /**
7
+ * Whether a pane's foreground command is a shell rather than an agent
8
+ * (Issue #3089). Claude Code shows up as `claude`, `node` or its version
9
+ * string (`2.1.287`), never as one of these, so a shell here after the agent
10
+ * was seen running means the agent has exited.
11
+ *
12
+ * @param command - `#{pane_current_command}` of the pane
13
+ */
14
+ function isShellPaneCommand(command) {
15
+ return SHELL_PANE_COMMANDS.has(command.trim().replace(/^-/, ''));
16
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripBoxDrawing = stripBoxDrawing;
4
+ /**
5
+ * Strip box-drawing border characters from CLI output.
6
+ * Gemini CLI wraps Action Required prompts in ╭─╮│╰─╯ borders.
7
+ * Removes │ (U+2502) prefix/suffix and border-only lines (╭╮╰╯─).
8
+ *
9
+ * @param str - Input string (typically after stripAnsi())
10
+ * @returns String with box-drawing borders removed
11
+ */
12
+ function stripBoxDrawing(str) {
13
+ return str.split('\n').map(line => {
14
+ // Remove border-only lines (╭──╮, ╰──╯, │ only, ┃ only, ╹▀▀▀, █ scrollbar, etc.)
15
+ // U+2502 │ (light vertical), U+2503 ┃ (heavy vertical - OpenCode TUI)
16
+ // U+2579 ╹ (heavy up), U+2580 ▀ (upper half block - OpenCode separator)
17
+ // U+2588 █ (full block - OpenCode scrollbar)
18
+ if (/^[\u2502\u2503\u256D\u256E\u256F\u2570\u2500\u2579\u2580\u2588\s]+$/.test(line))
19
+ return '';
20
+ // Strip leading whitespace + │/┃ + optional space, trailing space + │/┃/█
21
+ // OpenCode TUI adds 2-space padding before ┃ borders (e.g., " ┃ content")
22
+ // OpenCode scrollbar █ appears at end of content lines
23
+ return line.replace(/^\s*[\u2502\u2503]\s?/, '').replace(/\s*[\u2502\u2503\u2588]$/, '');
24
+ }).join('\n');
25
+ }
@@ -139,7 +139,7 @@ Object.defineProperty(exports, "STATUS_CHECK_LINE_COUNT", { enumerable: true, ge
139
139
  * @returns Detection result with status, confidence, reason, hasActivePrompt, evidence and promptDetection
140
140
  */
141
141
  function detectSessionStatus(output, cliToolId, lastOutputTimestamp) {
142
- const frame = (0, frame_1.normalizeFrame)(output);
142
+ const frame = (0, frame_1.normalizeFrame)(output, cliToolId);
143
143
  const verdict = (0, registry_1.getToolStatusDetector)(cliToolId).detect(frame, {
144
144
  lastOutputTimestamp,
145
145
  // Issue #2991: the same presence reading Auto-Yes and History use, so an
@@ -17,9 +17,10 @@
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.antigravityStatusDetector = exports.VERIFIED_AGAINST = void 0;
20
- exports.isAntigravityQuotedNumberedList = isAntigravityQuotedNumberedList;
21
20
  const cli_patterns_1 = require("../../cli-patterns");
21
+ const verdicts_1 = require("../verdicts");
22
22
  const status_reason_1 = require("../../status-reason");
23
+ const live_region_1 = require("./live-region");
23
24
  const run_detection_1 = require("../run-detection");
24
25
  const verified_against_1 = require("../verified-against");
25
26
  const dialog_1 = require("./dialog");
@@ -33,13 +34,7 @@ exports.VERIFIED_AGAINST = verified_against_1.ANTIGRAVITY_VERIFIED_AGAINST;
33
34
  * puts NavigationButtons (and the chat surface's "drive it from the terminal"
34
35
  * card) on screen, and what makes `wait` stop with exit 10 instead of hanging.
35
36
  */
36
- const SELECTION_LIST_VERDICT = {
37
- status: 'waiting',
38
- confidence: 'high',
39
- reason: status_reason_1.STATUS_REASON.ANTIGRAVITY_SELECTION_LIST,
40
- hasActivePrompt: false,
41
- evidence: 'positive',
42
- };
37
+ const SELECTION_LIST_VERDICT = (0, verdicts_1.positiveVerdict)('waiting', status_reason_1.STATUS_REASON.ANTIGRAVITY_SELECTION_LIST);
43
38
  /**
44
39
  * How close to the bottom of the content the survey row must be to count as
45
40
  * open: itself, a blank row and the `? for shortcuts` status row.
@@ -89,39 +84,15 @@ function isAntigravitySelectionScreenOpen(lastLines) {
89
84
  const { promptPattern } = (0, cli_patterns_1.getCliToolPatterns)('antigravity');
90
85
  return !rows.slice(matchedAt + 1).some(row => promptPattern.test(row));
91
86
  }
92
- /**
93
- * Is the numbered list the shared parser read a quotation, not a dialog?
94
- * (Issue #2845)
95
- *
96
- * The shared pass takes any `> 1. …` run in the last rows for a menu, wherever
97
- * on the frame it sits. agy draws its numbered screens either IN PLACE OF the
98
- * composer (the approval dialogs) or BELOW it (`/feedback`'s category menu),
99
- * never above it — so a numbered list with the composer drawn under its last row
100
- * is the model's reply, or a dialog left in the scrollback. Branch 0.9 declines
101
- * such a frame (see {@link isAntigravitySelectionScreenOpen}); without this the
102
- * shared pass then read the quoted `Do you want to proceed?` menu itself and
103
- * published the composer-idle pane as `waiting` / `prompt_detected`.
104
- */
105
- function isAntigravityQuotedNumberedList(frame, prompt) {
106
- if (prompt.promptData?.type !== 'multiple_choice')
107
- return false;
108
- const rows = (0, cli_patterns_1.stripBoxDrawing)(frame.contentLines.join('\n')).split('\n');
109
- const { promptPattern } = (0, cli_patterns_1.getCliToolPatterns)('antigravity');
110
- let composerAt = -1;
111
- for (let i = rows.length - 1; i >= 0; i--) {
112
- if (promptPattern.test(rows[i])) {
113
- composerAt = i;
114
- break;
115
- }
116
- }
117
- if (composerAt < 0)
118
- return false;
119
- return !rows.slice(composerAt + 1).some(row => cli_patterns_1.ANTIGRAVITY_NUMBERED_OPTION_PATTERN.test(row));
120
- }
121
87
  exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector)({
122
88
  tool: 'antigravity',
123
89
  verifiedAgainst: exports.VERIFIED_AGAINST,
124
- isStalePrompt: isAntigravityQuotedNumberedList,
90
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
91
+ liveRegion: live_region_1.ANTIGRAVITY_LIVE_REGION,
92
+ // Issue #2845's quoted-list rule (a numbered list with the `>` composer drawn
93
+ // under its last row is the model's reply) is the live region's now: the
94
+ // composer marker in `./live-region.ts` and the shared veto in
95
+ // `run-detection.ts`, which the Auto-Yes path applies too (#2851).
125
96
  beforePrompt(frame) {
126
97
  // 0.85. Issue #2364: the survey agy draws in place of its composer after a
127
98
  // tool decision — `[1] Good [2] Fine [3] Bad [0] Skip` under `How's the
@@ -190,14 +161,7 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
190
161
  if ((0, cli_patterns_1.isAntigravityNumberedDialog)(text)) {
191
162
  const promptDetection = (0, dialog_1.detectAntigravityNumberedDialogPrompt)(text);
192
163
  if (promptDetection !== null) {
193
- return {
194
- status: 'waiting',
195
- confidence: 'high',
196
- reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
197
- hasActivePrompt: true,
198
- evidence: 'positive',
199
- promptDetection,
200
- };
164
+ return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, promptDetection);
201
165
  }
202
166
  return {
203
167
  status: 'running',
@@ -218,13 +182,7 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
218
182
  // truth: "esc to cancel" + braille spinner / "Generating..." while running,
219
183
  // "? for shortcuts" when idle. Resolve running explicitly here first, then idle.
220
184
  if ((0, cli_patterns_1.detectThinking)('antigravity', frame.lastLines)) {
221
- return {
222
- status: 'running',
223
- confidence: 'high',
224
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
225
- hasActivePrompt: false,
226
- evidence: 'positive',
227
- };
185
+ return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
228
186
  }
229
187
  // Idle: bare "> " input prompt visible and the response has completed.
230
188
  //
@@ -238,13 +196,7 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
238
196
  // first, so a generating pane in those modes is still `running`.
239
197
  const { promptPattern } = (0, cli_patterns_1.getCliToolPatterns)('antigravity');
240
198
  if (promptPattern.test(frame.lastLines)) {
241
- return {
242
- status: 'ready',
243
- confidence: 'high',
244
- reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
245
- hasActivePrompt: false,
246
- evidence: 'positive',
247
- };
199
+ return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
248
200
  }
249
201
  return null;
250
202
  },
@@ -69,6 +69,7 @@ const cli_patterns_1 = require("../../cli-patterns");
69
69
  const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-choice");
70
70
  const tui_detection_frame_1 = require("../../tui-detection-frame");
71
71
  const dialog_block_1 = require("../dialog-block");
72
+ const truncate_raw_content_1 = require("../../truncate-raw-content");
72
73
  /**
73
74
  * How many non-blank rows above option 1 may be searched for the question.
74
75
  *
@@ -100,20 +101,6 @@ const TOOL_CALL_ROW_PATTERN = /^\s*●\s/;
100
101
  const RULE_ROW_PATTERN = /^\s*─{3,}\s*$/;
101
102
  /** A row that asks something — the shape the question row takes on every measured dialog. */
102
103
  const QUESTION_ROW_PATTERN = /[??]\s*$/;
103
- /**
104
- * The same tail limits `prompt-detector.ts` applies to `rawContent`
105
- * (`RAW_CONTENT_MAX_LINES` / `RAW_CONTENT_MAX_CHARS`), restated because that
106
- * helper is private to it. A prompt row stores this text as its message body,
107
- * so an unbounded 1000-row pane must not go in.
108
- */
109
- const RAW_CONTENT_MAX_LINES = 200;
110
- const RAW_CONTENT_MAX_CHARS = 5000;
111
- function truncateRawContent(content) {
112
- const lines = content.split('\n');
113
- const tail = lines.length > RAW_CONTENT_MAX_LINES ? lines.slice(-RAW_CONTENT_MAX_LINES) : lines;
114
- const joined = tail.join('\n');
115
- return joined.length > RAW_CONTENT_MAX_CHARS ? joined.slice(-RAW_CONTENT_MAX_CHARS) : joined;
116
- }
117
104
  /**
118
105
  * Read agy's numbered dialog off ANSI-stripped rows.
119
106
  *
@@ -235,5 +222,5 @@ function detectAntigravityNumberedDialogPrompt(text) {
235
222
  // `Requesting permission for:` block and in the labels is judged and
236
223
  // nothing from an earlier, already-answered approval is.
237
224
  approvalTarget: (0, prompt_detect_multiple_choice_1.joinApprovalTarget)(lines, (0, prompt_detect_multiple_choice_1.findApprovalContextStart)(lines, dialog.questionRow), dialog.footerRow),
238
- }, normalized, truncateRawContent);
225
+ }, normalized, truncate_raw_content_1.truncateRawContent);
239
226
  }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * Antigravity's (agy) live region (Issue #3183; design doc §7 "antigravity").
4
+ *
5
+ * - **composer** — the bottom-most bare `>` row (or the mode banner that
6
+ * replaces it, `ANTIGRAVITY_PROMPT_PATTERN`). A user turn echoed into the
7
+ * transcript has text after its `>` and does not match. It is the bottom of
8
+ * the pane unless a numbered row is drawn under it: agy draws its approval
9
+ * dialogs IN PLACE of the composer, but `/feedback`'s category menu BELOW it
10
+ * (`antigravity-live-2364/dialog-feedback-category.txt`), so a numbered row
11
+ * under the composer is live and one above it is a quotation (#2845 / #2851).
12
+ * The Switch Model picker is drawn below it too (`picker-switch-model.txt`
13
+ * L43 rule, L44-L58 picker), so a `↑/↓ Navigate` row under the composer
14
+ * also means the composer is not the bottom.
15
+ * Measured: `antigravity-live-2364/idle-after-deny.txt` L41-L44.
16
+ * - **dialog top** — the row after the nearest boundary above the `↑/↓ Navigate`
17
+ * footer (`locateAntigravityDialogRegion`, #2364). Measured:
18
+ * `antigravity-live-2364/dialog-bash-oneline.txt` L27 / L38.
19
+ *
20
+ * Rows are read through `stripBoxDrawing`, the spelling the #2845 rule was
21
+ * measured on; it maps line for line, so indices are unchanged.
22
+ *
23
+ * @module lib/detection/tools/antigravity/live-region
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ANTIGRAVITY_LIVE_REGION = void 0;
27
+ const cli_patterns_1 = require("../../cli-patterns");
28
+ const live_region_1 = require("../live-region");
29
+ exports.ANTIGRAVITY_LIVE_REGION = {
30
+ composer: (0, live_region_1.bottomMostComposerRow)({
31
+ isComposerRow: row => cli_patterns_1.ANTIGRAVITY_PROMPT_PATTERN.test((0, cli_patterns_1.stripBoxDrawing)(row)),
32
+ atBottom: ({ contentLines }, composerRow) => !contentLines.slice(composerRow + 1).some(row => {
33
+ const text = (0, cli_patterns_1.stripBoxDrawing)(row);
34
+ return cli_patterns_1.ANTIGRAVITY_NUMBERED_OPTION_PATTERN.test(text) || cli_patterns_1.ANTIGRAVITY_SELECTION_LIST_PATTERN.test(text);
35
+ }),
36
+ }),
37
+ dialogTop: (0, live_region_1.dialogTopFrom)(lines => (0, cli_patterns_1.locateAntigravityDialogRegion)(lines)?.start ?? -1),
38
+ composerHidesDialogs: true,
39
+ };
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ /**
3
+ * Antigravity (agy) pattern constants and helpers moved out of `../../cli-patterns.ts`
4
+ * (Issue #3217). `cli-patterns.ts` re-exports every public name.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = void 0;
8
+ exports.locateAntigravityDialogRegion = locateAntigravityDialogRegion;
9
+ exports.isAntigravityNumberedDialog = isAntigravityNumberedDialog;
10
+ const pasted_text_1 = require("../../shared/pasted-text");
11
+ /**
12
+ * The banner agy paints INTO its empty input box while a non-default permission
13
+ * mode is on (Issue #2592).
14
+ *
15
+ * Measured on agy 1.2.4 in the #2592 UAT
16
+ * (`tests/fixtures/agent-mode-2592/antigravity-{accept-edits,plan}.txt`, row 18,
17
+ * between the box's two rules):
18
+ *
19
+ * `> Accept-edits mode: file edits auto-approved (shift+tab to cycle)`
20
+ * `> Plan mode: research & plan only (shift+tab to cycle)`
21
+ *
22
+ * It takes the place of the bare `>` an empty box shows in default — it is a
23
+ * placeholder, not typed text — so a reader that only accepts the bare glyph
24
+ * reads an idle accept-edits / plan pane as "no input box at all". Before this
25
+ * pattern existed that is exactly what happened: the status detector fell through
26
+ * to its `default` floor (`running` + `isUnclassifiedActive`), `commandmate ls`
27
+ * showed a resting agent as running, `wait` never completed, and
28
+ * `isAntigravityReady` refused every send. #2592 made those two modes one click
29
+ * away, so the hole had to close with it.
30
+ *
31
+ * The structure is matched rather than the two sentences: `<Name> mode: <text>
32
+ * (shift+tab to cycle)`, anchored on the key hint agy ends every banner with, so
33
+ * a third mode needs no edit here. What stays out is anything a user could have
34
+ * typed into the box — the trailing hint is the part nobody types.
35
+ *
36
+ * Whole-row, no `/g`, no nested quantifiers (`[^\n]*` is followed by a literal).
37
+ */
38
+ exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = '>[^\\S\\n]+[A-Z][A-Za-z-]*[^\\S\\n]mode:[^\\n]*\\(shift\\+tab to cycle\\)[^\\S\\n]*';
39
+ /** {@link ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE} as a single-row pattern. */
40
+ exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = new RegExp(`^${exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE}$`, 'm');
41
+ /**
42
+ * Antigravity (agy) interactive REPL prompt pattern (Issue #988)
43
+ * agy shows a bare ">" input box line when waiting for user input. The input box
44
+ * is always rendered (even while generating), so prompt presence alone does not
45
+ * mean "ready" — running vs idle is resolved together with the thinking pattern /
46
+ * footer status bar in status-detector.ts. (Confirmed on machine: line is "> ".)
47
+ *
48
+ * Issue #2592: or the mode banner that replaces the bare glyph in an EMPTY box
49
+ * while accept-edits / plan is on ({@link ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN}).
50
+ * Every consumer of this pattern is asking "is agy's input box drawn and empty?"
51
+ * — the idle rule in `detection/tools/antigravity/detect.ts`, the survey guard
52
+ * beside it, `isAntigravityReady` (the send gate) and the liveness probe — and
53
+ * the answer does not depend on the permission mode, so the banner is folded in
54
+ * here once rather than at each of them.
55
+ */
56
+ exports.ANTIGRAVITY_PROMPT_PATTERN = new RegExp(`^(?:>\\s*|${exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE})$`, 'm');
57
+ /**
58
+ * Antigravity (agy) thinking/processing pattern (Issue #988)
59
+ * While generating, agy shows a braille spinner with "Generating..." in the
60
+ * conversation area and an "esc to cancel" hint in the footer status bar. When
61
+ * idle the footer shows "? for shortcuts" instead, so "esc to cancel" is a
62
+ * reliable running signal. Braille spinner chars (U+2800-U+28FF) also matched.
63
+ */
64
+ exports.ANTIGRAVITY_THINKING_PATTERN = /[\u2800-\u28FF]|Generating|esc to cancel/;
65
+ /**
66
+ * Antigravity (agy) separator pattern (Issue #988)
67
+ * agy draws turn separators and the input-box border with runs of U+2500 (─).
68
+ */
69
+ exports.ANTIGRAVITY_SEPARATOR_PATTERN = /^─{3,}$/m;
70
+ /**
71
+ * Antigravity (agy) selection list pattern (Issue #995, broadened in #997)
72
+ * Detects agy's interactive arrow-key selection TUIs (e.g. the "Switch Model"
73
+ * model picker, the "Do you want to proceed?" permission-approval menu). Their
74
+ * footer status bar renders "esc to cancel", which ANTIGRAVITY_THINKING_PATTERN
75
+ * also matches, so this pattern must be checked BEFORE thinking detection in
76
+ * status-detector.ts to keep the selection screen from being misreported as
77
+ * "generating".
78
+ *
79
+ * Matches (either is sufficient):
80
+ * - The "Switch Model" header of the model picker.
81
+ * - The "↑/↓ Navigate" arrow-key navigation hint, common to every agy
82
+ * selection TUI footer. Issue #995 originally required an "enter Select"
83
+ * hint too, but the permission-approval menu footer is
84
+ * "↑/↓ Navigate · tab Amend · ctrl+g … · ctrl+r Review" (no "enter Select"),
85
+ * so #997 relaxes this to the "↑/↓ Navigate" footer alone. This covers the
86
+ * Switch Model picker, permission-approval menus, and future agy selection
87
+ * TUIs in one shot, while staying agy-specific (the cliToolId === 'antigravity'
88
+ * guard in status-detector.ts keeps other tools unaffected).
89
+ *
90
+ * No /g flag (S4-5: would make test() stateful).
91
+ * No `.*` at all (SEC4-001: ReDoS safe — strictly safer than the #995 form).
92
+ */
93
+ exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = /Switch Model|↑\/↓\s*Navigate/m;
94
+ /**
95
+ * The `↑/↓ Navigate` hint agy draws under every arrow-key screen it owns
96
+ * (Issue #2364; measured on agy 1.1.27, pane 200x1000, 2026-09-06).
97
+ *
98
+ * The same token {@link ANTIGRAVITY_SELECTION_LIST_PATTERN} matches, split out
99
+ * because the numbered-dialog reader anchors on THIS row and reads upward from
100
+ * it. It is the one thing all four measured agy dialogs share — the `Do you want
101
+ * to proceed?` command menu, the `Allow creation of this file?` file menu, the
102
+ * folder-trust screen and the `/model` picker all end on it — while the words
103
+ * after it differ on every one (`tab Amend · f full diff`, `tab Amend · ctrl+g
104
+ * edit/expand command`, `enter Confirm`, `←/→ Effort enter Select`).
105
+ */
106
+ exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = /↑\/↓\s*Navigate/;
107
+ /**
108
+ * One numbered option row of agy's dialogs: `> 1. Yes`, ` 4. No`,
109
+ * ` 2. No, deny creation`.
110
+ *
111
+ * The `>` gutter marks the highlighted row and is optional, because only one
112
+ * of the rows carries it.
113
+ */
114
+ exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = /^\s*>?\s*\d+\.\s+\S/m;
115
+ /**
116
+ * The header of agy's `/model` picker (Issue #995).
117
+ *
118
+ * Kept as its own exclusion even though the picker's rows already fail the
119
+ * numbered-row test: the Issue #2364 rule is written as "footer + numbered rows
120
+ * + NOT the Switch Model picker", and the picker is the one agy screen whose
121
+ * misreading has a measured cost (#995: NavigationButtons vanished).
122
+ */
123
+ exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = /^\s*Switch Model\s*$/;
124
+ /**
125
+ * A row that ends the dialog block when reading UPWARD from the footer
126
+ * (Issue #2364).
127
+ *
128
+ * Everything agy draws above its own dialog panel carries one of these:
129
+ *
130
+ * - a horizontal rule (the turn separator, the input-box border, or the rule
131
+ * under the `Command` / `Create file` panel header);
132
+ * - a `>`-prefixed row that is not a numbered option — the echoed user prompt,
133
+ * the bare composer, the highlighted row of an UNNUMBERED picker (`> Gemini
134
+ * 3.8 Flash`, `> Yes, I trust this folder`) or of the slash-command popup
135
+ * (`> /add-dir Add a directory …`);
136
+ * - a `●` tool-call row, a `⎿` tool-result row or a `▸ Thought for …` row.
137
+ *
138
+ * Bounding the block at the nearest one is what keeps a numbered list in the
139
+ * MODEL'S PROSE, sitting in the transcript above an open picker or popup, from
140
+ * being adopted as that screen's options. Wrapped option labels never start
141
+ * with any of these on the measured frames: agy prints the command text inside
142
+ * the quotes of `… commands that start with '<cmd>'`, indented under the row
143
+ * that opened it.
144
+ *
145
+ * `stripBoxDrawing` blanks the rule rows before the response poller's copy of
146
+ * the frame reaches this rule; the `●` / `>` rows survive it, so the block is
147
+ * bounded the same way on both paths.
148
+ */
149
+ exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = /^\s*(?:─{3,}\s*$|[●⎿▸]|>(?!\s*\d+\.\s+\S))/;
150
+ /**
151
+ * How many rows above the `↑/↓ Navigate` footer the dialog block may reach.
152
+ *
153
+ * The tallest measured frame (`dialog-bash-wrapped.txt`: header, rule,
154
+ * `Requesting permission for:`, a four-row command, the question and four
155
+ * options of which two wrap onto three rows each) spans 18 rows; the cap leaves
156
+ * room for a longer command without letting a boundary-free frame drag the
157
+ * whole transcript into the block.
158
+ */
159
+ exports.ANTIGRAVITY_DIALOG_MAX_ROWS = 60;
160
+ /**
161
+ * agy's post-answer survey row (Issue #2364).
162
+ *
163
+ * Drawn once, in place of the composer, after some tool decisions:
164
+ *
165
+ * ```
166
+ * How's the CLI experience so far? Help us improve:
167
+ * [1] Good [2] Fine [3] Bad [0] Skip
168
+ *
169
+ * ? for shortcuts …
170
+ * ```
171
+ *
172
+ * Every option sits on ONE row in `[N] label` form and the screen takes a
173
+ * typed digit, not the arrow keys; there is no `↑/↓ Navigate` footer and no bare
174
+ * `>` composer, so before this pattern existed the frame reached the `default`
175
+ * floor — `running`, with the chat surface showing "generating" over a screen
176
+ * that was waiting for a keypress. Anchored to the whole row.
177
+ */
178
+ exports.ANTIGRAVITY_SURVEY_PATTERN = /^\s*\[1\]\s*Good\s+\[2\]\s*Fine\s+\[3\]\s*Bad\s+\[0\]\s*Skip\s*$/m;
179
+ /**
180
+ * Find the rows between the last boundary and the last `↑/↓ Navigate` footer
181
+ * (Issue #2364).
182
+ *
183
+ * The footer is searched from the bottom, so an older dialog still in the
184
+ * scrollback above a newer one is never the one read. Returns null when the
185
+ * frame has no footer at all.
186
+ *
187
+ * Also null when agy's input box is drawn BELOW that footer (Issue #2845): agy
188
+ * paints no `>` composer while a dialog is open — the dialog takes its place —
189
+ * so a footer with a composer under it is the model's reply quoting a dialog,
190
+ * or a dialog left in the scrollback, not a screen waiting for a keypress. It is
191
+ * the same reading `isAntigravitySurveyOpen` gives the survey row (#2364), and
192
+ * the composer is recognised by the same {@link ANTIGRAVITY_PROMPT_PATTERN}.
193
+ *
194
+ * @param lines - ANSI-stripped rows, box drawing optional
195
+ */
196
+ function locateAntigravityDialogRegion(lines) {
197
+ let footer = -1;
198
+ for (let i = lines.length - 1; i >= 0; i--) {
199
+ if (exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN.test(lines[i])) {
200
+ footer = i;
201
+ break;
202
+ }
203
+ }
204
+ if (footer < 0)
205
+ return null;
206
+ for (let i = footer + 1; i < lines.length; i++) {
207
+ if (exports.ANTIGRAVITY_PROMPT_PATTERN.test(lines[i]))
208
+ return null;
209
+ }
210
+ const floor = Math.max(0, footer - exports.ANTIGRAVITY_DIALOG_MAX_ROWS);
211
+ let start = floor;
212
+ for (let i = footer - 1; i >= floor; i--) {
213
+ if (exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN.test(lines[i])) {
214
+ start = i + 1;
215
+ break;
216
+ }
217
+ }
218
+ return { start, footer };
219
+ }
220
+ /**
221
+ * Is this frame one of agy's NUMBERED dialogs rather than one of its
222
+ * arrow-key-only pickers? (Issue #2270, re-measured by Issue #2364)
223
+ *
224
+ * Both kinds of screen share the `↑/↓ Navigate` footer that
225
+ * {@link ANTIGRAVITY_SELECTION_LIST_PATTERN} matches, which is why #997 could
226
+ * widen that pattern to cover the permission menu — and why the menu then
227
+ * resolved as `antigravity_selection_list`, `hasActivePrompt: false`. On the
228
+ * chat surface that reads as "a selection list is open, drive it from the
229
+ * terminal": the arrow buttons can only Enter the highlighted option 1, so
230
+ * options 2-4 became unreachable, while the poller and the push notification
231
+ * described the very same frame as a `multiple_choice` prompt.
232
+ *
233
+ * #2270 told the two apart by the question line, `Do you want to proceed?`,
234
+ * because that was the one dialog it had measured. #2364 measured a second one
235
+ * — agy 1.1.27's file-creation menu asks `Allow creation of this file?` above
236
+ * `1. Yes, allow creation` / `2. No, deny creation` — and it fell straight back
237
+ * into the selection-list reading. So the rule is now about the STRUCTURE the
238
+ * dialogs share and the pickers lack:
239
+ *
240
+ * - the `↑/↓ Navigate` footer,
241
+ * - at least two `N. label` rows between the nearest boundary row and that
242
+ * footer ({@link ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN}), and
243
+ * - no `Switch Model` header in that region.
244
+ *
245
+ * The Switch Model picker, the folder-trust screen and the slash-command popup
246
+ * all draw unnumbered rows (`> Gemini 3.8 Flash`, `> Yes, I trust this folder`,
247
+ * `> /add-dir …`), so they keep the #995 reading — and because a `>` row that
248
+ * is not numbered is itself a boundary, a numbered list in the transcript above
249
+ * one of them cannot be counted.
250
+ *
251
+ * True here means "hand the frame to the agy dialog reader"
252
+ * (`tools/antigravity/dialog.ts`), never "this is a prompt": a frame that
253
+ * passes this test and still fails to read is published as an unclassified
254
+ * frame, not as a selection list and never as "generating".
255
+ *
256
+ * Callers pass the same text they hand {@link ANTIGRAVITY_SELECTION_LIST_PATTERN}.
257
+ */
258
+ function isAntigravityNumberedDialog(text) {
259
+ const lines = text.split('\n');
260
+ const region = locateAntigravityDialogRegion(lines);
261
+ if (region === null)
262
+ return false;
263
+ let numberedRows = 0;
264
+ for (let i = region.start; i < region.footer; i++) {
265
+ const line = lines[i];
266
+ if (exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN.test(line))
267
+ return false;
268
+ if (exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN.test(line))
269
+ numberedRows++;
270
+ }
271
+ return numberedRows >= 2;
272
+ }
273
+ /**
274
+ * Antigravity (agy) skip patterns for response cleaning (Issue #988)
275
+ * Filters turn/input-box separators, the bare ">" input prompt, the idle status
276
+ * bar ("? for shortcuts ... <model>"), the thinking footer/spinner, banner block
277
+ * art, and pasted-text markers from extracted responses.
278
+ */
279
+ exports.ANTIGRAVITY_SKIP_PATTERNS = [
280
+ exports.ANTIGRAVITY_SEPARATOR_PATTERN, // Turn + input-box separators (─ runs)
281
+ /^>\s*$/, // Bare input prompt line
282
+ /^\?\s+for\s+shortcuts/, // Idle status bar (model name follows on the same line)
283
+ exports.ANTIGRAVITY_THINKING_PATTERN, // Spinner / Generating / "esc to cancel" footer
284
+ /[▄▀█▌▐]/, // Banner block art (defensive; normally above the user-prompt anchor)
285
+ pasted_text_1.PASTED_TEXT_PATTERN, // [Pasted text #N +XX lines]
286
+ ];
@@ -14,9 +14,11 @@ exports.readIdleEvidence = readIdleEvidence;
14
14
  const cli_patterns_1 = require("../../cli-patterns");
15
15
  const composer_text_1 = require("../../composer-text");
16
16
  const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-choice");
17
+ const verdicts_1 = require("../verdicts");
17
18
  const status_reason_1 = require("../../status-reason");
18
19
  const prompt_1 = require("./prompt");
19
20
  const frame_1 = require("../frame");
21
+ const live_region_1 = require("./live-region");
20
22
  const run_detection_1 = require("../run-detection");
21
23
  const patterns_1 = require("./patterns");
22
24
  /**
@@ -112,15 +114,19 @@ function readIdleEvidence(frame) {
112
114
  * this rule cannot disagree with them about where the conversation ends.
113
115
  */
114
116
  function selectionFooterRows(frame) {
115
- const box = (0, composer_text_1.findClaudeInputBox)(frame.contentLines);
116
- if (!box)
117
+ // Issue #3183: the input box is the live region's composer marker
118
+ // (`./live-region.ts`, the same `findClaudeInputBox`), located once per frame.
119
+ const region = (0, frame_1.liveRegionOf)(frame, 'claude');
120
+ if (region.anchor !== 'composer')
117
121
  return frame.lastLines;
118
122
  const tailStart = frame.contentLines.length - frame_1.STATUS_CHECK_LINE_COUNT;
119
- return frame.contentLines.slice(Math.max(box.openingSeparator, tailStart)).join('\n');
123
+ return frame.contentLines.slice(Math.max(region.startRow, tailStart)).join('\n');
120
124
  }
121
125
  exports.claudeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
122
126
  tool: 'claude',
123
127
  verifiedAgainst: patterns_1.VERIFIED_AGAINST,
128
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
129
+ liveRegion: live_region_1.CLAUDE_LIVE_REGION,
124
130
  afterPrompt(frame) {
125
131
  // 1.5. Claude CLI selection list detection
126
132
  // Claude CLI's multi-select/checkbox prompts (e.g., AskUserQuestion with checkboxes)
@@ -130,13 +136,7 @@ exports.claudeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
130
136
  // Read only the rows at or below the input box (Issue #2847): a footer quoted in the reply
131
137
  // above it is conversation, not a picker.
132
138
  if (cli_patterns_1.CLAUDE_SELECTION_LIST_FOOTER.test(selectionFooterRows(frame))) {
133
- return {
134
- status: 'waiting',
135
- confidence: 'high',
136
- reason: status_reason_1.STATUS_REASON.CLAUDE_SELECTION_LIST,
137
- hasActivePrompt: false,
138
- evidence: 'positive',
139
- };
139
+ return (0, verdicts_1.positiveVerdict)('waiting', status_reason_1.STATUS_REASON.CLAUDE_SELECTION_LIST);
140
140
  }
141
141
  return null;
142
142
  },
@@ -154,13 +154,7 @@ exports.claudeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
154
154
  // signal and does not reintroduce the Issue #188 spinner-summary false positive (only the
155
155
  // spinner+ellipsis branch is restricted to the 5-line window).
156
156
  if (cli_patterns_1.CLAUDE_INTERRUPT_HINT_PATTERN.test(frame.lastLines)) {
157
- return {
158
- status: 'running',
159
- confidence: 'high',
160
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
161
- hasActivePrompt: false,
162
- evidence: 'positive',
163
- };
157
+ return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
164
158
  }
165
159
  return null;
166
160
  },