commandmate 0.44.0 → 0.44.2

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 (372) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +331 -335
  3. package/.next/app-path-routes-manifest.json +35 -35
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +15 -15
  6. package/.next/react-loadable-manifest.json +3 -3
  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_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_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/capabilities/route.js +1 -1
  18. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  27. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  28. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  30. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  31. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  33. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  34. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  41. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  42. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/relays/route.js +1 -1
  44. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  45. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/remote/pair/route.js +2 -2
  47. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  50. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  51. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/repositories/clone/route.js +1 -1
  53. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  54. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/repositories/restore/route.js +1 -1
  57. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  58. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/repositories/route.js +1 -1
  60. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  61. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/scan/route.js +1 -1
  63. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/sync/route.js +1 -1
  66. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  70. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  71. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  88. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  91. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  94. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  100. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  103. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  134. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  137. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  140. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -2
  149. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  150. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -2
  152. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  153. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  156. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  160. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  163. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  172. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  188. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/route.js +1 -1
  210. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  213. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  215. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  216. package/.next/server/app/page_client-reference-manifest.js +1 -1
  217. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  219. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  220. package/.next/server/app/sessions/page.js +1 -1
  221. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  222. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  223. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  224. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  225. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/worktrees/[id]/page.js +7 -7
  227. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  228. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  229. package/.next/server/app-paths-manifest.json +35 -35
  230. package/.next/server/chunks/1068.js +1 -1
  231. package/.next/server/chunks/1210.js +1 -1
  232. package/.next/server/chunks/2119.js +1 -1
  233. package/.next/server/chunks/2404.js +1 -1
  234. package/.next/server/chunks/2445.js +1 -1
  235. package/.next/server/chunks/2460.js +1 -0
  236. package/.next/server/chunks/2816.js +1 -1
  237. package/.next/server/chunks/2908.js +1 -0
  238. package/.next/server/chunks/4372.js +5 -0
  239. package/.next/server/chunks/5595.js +1 -0
  240. package/.next/server/chunks/5845.js +1 -0
  241. package/.next/server/chunks/6130.js +1 -1
  242. package/.next/server/chunks/6401.js +1 -1
  243. package/.next/server/chunks/6474.js +3 -3
  244. package/.next/server/chunks/7685.js +1 -1
  245. package/.next/server/chunks/7905.js +1 -1
  246. package/.next/server/chunks/850.js +1 -0
  247. package/.next/server/chunks/8543.js +1 -1
  248. package/.next/server/chunks/8581.js +2 -2
  249. package/.next/server/chunks/8728.js +2 -2
  250. package/.next/server/chunks/9130.js +1 -5
  251. package/.next/server/chunks/9390.js +1 -2
  252. package/.next/server/chunks/9627.js +1 -1
  253. package/.next/server/chunks/967.js +1 -1
  254. package/.next/server/chunks/9731.js +3 -3
  255. package/.next/server/chunks/9798.js +2 -0
  256. package/.next/server/chunks/9882.js +3 -3
  257. package/.next/server/middleware-build-manifest.js +1 -1
  258. package/.next/server/middleware-manifest.json +5 -5
  259. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  260. package/.next/server/pages/500.html +1 -1
  261. package/.next/server/pages-manifest.json +1 -1
  262. package/.next/server/server-reference-manifest.json +1 -1
  263. package/.next/static/chunks/{2407-340774f1a24f2b45.js → 2407-051f6f84226a9f2c.js} +1 -1
  264. package/.next/static/chunks/344-e1cefd00787060e4.js +1 -0
  265. package/.next/static/chunks/3922.f45dcfc1e7da552a.js +1 -0
  266. package/.next/static/chunks/591-539fec878c9dec5e.js +1 -0
  267. package/.next/static/chunks/6654-ac431270fac1a283.js +1 -0
  268. package/.next/static/chunks/{9619-84aced0846cbe3ac.js → 9619-6c17a271f7f98fbb.js} +1 -1
  269. package/.next/static/chunks/998-2eb5883186abd0bd.js +1 -0
  270. package/.next/static/chunks/app/layout-9da1ab602bcb3051.js +1 -0
  271. package/.next/static/chunks/app/more/{page-30057cf1e0762ad2.js → page-87c84987b2765213.js} +1 -1
  272. package/.next/static/chunks/app/{page-8483ba400af011f5.js → page-1b820c421db48c2c.js} +1 -1
  273. package/.next/static/chunks/app/review/page-95f749caae382f46.js +1 -0
  274. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +1 -0
  275. package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +1 -0
  276. package/.next/static/chunks/{webpack-49ade0526854dd4e.js → webpack-021f0741f22dd16a.js} +1 -1
  277. package/.next/trace +13 -13
  278. package/README.md +72 -25
  279. package/dist/cli/commands/capture.d.ts.map +1 -1
  280. package/dist/cli/commands/capture.js +7 -8
  281. package/dist/cli/commands/remote.d.ts +10 -0
  282. package/dist/cli/commands/remote.d.ts.map +1 -1
  283. package/dist/cli/commands/remote.js +17 -1
  284. package/dist/cli/commands/wait.d.ts.map +1 -1
  285. package/dist/cli/commands/wait.js +47 -2
  286. package/dist/cli/docs/setup-guide.d.ts +1 -1
  287. package/dist/cli/docs/setup-guide.d.ts.map +1 -1
  288. package/dist/cli/docs/setup-guide.js +2 -0
  289. package/dist/cli/types/api-responses.d.ts +25 -0
  290. package/dist/cli/types/api-responses.d.ts.map +1 -1
  291. package/dist/lib/detection/status-reason.d.ts +17 -0
  292. package/dist/lib/detection/status-reason.d.ts.map +1 -1
  293. package/dist/lib/detection/status-reason.js +17 -0
  294. package/dist/lib/session/prompt-view.d.ts +205 -0
  295. package/dist/lib/session/prompt-view.d.ts.map +1 -0
  296. package/dist/lib/session/prompt-view.js +267 -0
  297. package/dist/server/locales/en/worktree.json +13 -1
  298. package/dist/server/locales/ja/worktree.json +13 -1
  299. package/dist/server/server.js +5 -3
  300. package/dist/server/src/config/session-starting-config.js +75 -0
  301. package/dist/server/src/lib/auto-yes-lifecycle.js +133 -0
  302. package/dist/server/src/lib/auto-yes-poller.js +19 -4
  303. package/dist/server/src/lib/cli-tools/antigravity.js +3 -2
  304. package/dist/server/src/lib/cli-tools/base.js +15 -1
  305. package/dist/server/src/lib/cli-tools/codex.js +3 -2
  306. package/dist/server/src/lib/cli-tools/command-code.js +3 -2
  307. package/dist/server/src/lib/cli-tools/copilot.js +2 -1
  308. package/dist/server/src/lib/cli-tools/gemini.js +2 -1
  309. package/dist/server/src/lib/cli-tools/liveness-spec.js +27 -9
  310. package/dist/server/src/lib/cli-tools/opencode-v2.js +2 -1
  311. package/dist/server/src/lib/cli-tools/opencode.js +2 -1
  312. package/dist/server/src/lib/cli-tools/vibe-local.js +2 -1
  313. package/dist/server/src/lib/detection/cli-patterns.js +38 -20
  314. package/dist/server/src/lib/detection/status-detector.js +1 -1
  315. package/dist/server/src/lib/detection/status-reason.js +17 -0
  316. package/dist/server/src/lib/detection/tool-liveness.js +3 -1
  317. package/dist/server/src/lib/detection/tools/antigravity/detect.js +7 -31
  318. package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
  319. package/dist/server/src/lib/detection/tools/claude/detect.js +8 -3
  320. package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
  321. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +1 -1
  322. package/dist/server/src/lib/detection/tools/codex/detect.js +26 -46
  323. package/dist/server/src/lib/detection/tools/codex/live-region.js +73 -0
  324. package/dist/server/src/lib/detection/tools/command-code/detect.js +11 -0
  325. package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
  326. package/dist/server/src/lib/detection/tools/copilot/detect.js +3 -0
  327. package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
  328. package/dist/server/src/lib/detection/tools/frame.js +36 -2
  329. package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
  330. package/dist/server/src/lib/detection/tools/live-region.js +204 -0
  331. package/dist/server/src/lib/detection/tools/opencode/detect.js +3 -0
  332. package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
  333. package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
  334. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +3 -0
  335. package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
  336. package/dist/server/src/lib/detection/tools/run-detection.js +25 -3
  337. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +16 -4
  338. package/dist/server/src/lib/polling/response-checker.js +25 -20
  339. package/dist/server/src/lib/prompt-answer-sender.js +1 -1
  340. package/dist/server/src/lib/realtime/terminal-broadcast.js +8 -0
  341. package/dist/server/src/lib/relay/relay-delivery.js +3 -0
  342. package/dist/server/src/lib/relay/relay-triggers.js +9 -0
  343. package/dist/server/src/lib/resource-cleanup.js +6 -4
  344. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -0
  345. package/dist/server/src/lib/session/claude-session.js +7 -1
  346. package/dist/server/src/lib/session/current-output-builder.js +53 -21
  347. package/dist/server/src/lib/session/launch-screen.js +57 -0
  348. package/dist/server/src/lib/session/prompt-view.js +267 -0
  349. package/dist/server/src/lib/session/prompt-waiting-composition.js +34 -0
  350. package/dist/server/src/lib/session/session-starting-state.js +236 -0
  351. package/dist/server/src/lib/session/waiting-kind.js +3 -0
  352. package/dist/server/src/lib/session-cleanup.js +5 -3
  353. package/package.json +1 -1
  354. package/release-notes/0.44.1.json +54 -0
  355. package/release-notes/0.44.2.json +33 -0
  356. package/.next/server/chunks/434.js +0 -1
  357. package/.next/server/chunks/5775.js +0 -1
  358. package/.next/server/chunks/650.js +0 -1
  359. package/.next/server/chunks/6661.js +0 -1
  360. package/.next/server/chunks/8583.js +0 -1
  361. package/.next/server/chunks/964.js +0 -1
  362. package/.next/static/chunks/344-6f9fc1f38f01a839.js +0 -1
  363. package/.next/static/chunks/3922.8e79fc89f593280b.js +0 -1
  364. package/.next/static/chunks/5449-6cb80bab2bd06b79.js +0 -1
  365. package/.next/static/chunks/591-0a45801e83f26f24.js +0 -1
  366. package/.next/static/chunks/6966-bb854d1145783a64.js +0 -1
  367. package/.next/static/chunks/app/layout-0fc249fb7de75a27.js +0 -1
  368. package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +0 -1
  369. package/.next/static/chunks/app/sessions/page-55297155e7bf01b9.js +0 -1
  370. package/.next/static/chunks/app/worktrees/[id]/page-d2103e0c25be83c8.js +0 -1
  371. /package/.next/static/{wu7SUiHTirFcrpo5teyZ3 → QlCqLjorauDDBXPa-C7TK}/_buildManifest.js +0 -0
  372. /package/.next/static/{wu7SUiHTirFcrpo5teyZ3 → QlCqLjorauDDBXPa-C7TK}/_ssgManifest.js +0 -0
@@ -28,6 +28,7 @@ const logger_1 = require("../logger");
28
28
  const terminal_keys_1 = require("../../types/terminal-keys");
29
29
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
30
30
  const tmux_pane_config_1 = require("../../config/tmux-pane-config");
31
+ const session_starting_state_1 = require("../session/session-starting-state");
31
32
  const execAsync = (0, util_1.promisify)(child_process_1.exec);
32
33
  const logger = (0, logger_1.createLogger)('cli-tools/base');
33
34
  /**
@@ -213,8 +214,12 @@ class BaseCLITool {
213
214
  * @throws Whatever {@link launchSession} threw — unchanged, after reporting
214
215
  */
215
216
  async startSession(worktreeId, worktreePath, instanceId, model) {
217
+ // Issue #3195: this launch's "starting" record is written under this token
218
+ // (see `session-starting-state`), so the `finally` below clears this
219
+ // launch's record and never a later launch's of the same instance.
220
+ const startingToken = (0, session_starting_state_1.issueSessionStartingToken)();
216
221
  try {
217
- await this.launchSession(worktreeId, worktreePath, instanceId, model);
222
+ await (0, session_starting_state_1.runWithSessionStartingToken)(startingToken, () => this.launchSession(worktreeId, worktreePath, instanceId, model));
218
223
  }
219
224
  catch (error) {
220
225
  // Issue #2429: a launch that threw is reported as a failed start and as
@@ -229,6 +234,15 @@ class BaseCLITool {
229
234
  }, error);
230
235
  throw error;
231
236
  }
237
+ finally {
238
+ // Issue #3179: the launch is over, returned or thrown, so the screen
239
+ // stops showing it as starting. `beginAgentSession` wrote the record on
240
+ // the creation path; a reused pane never had one, and this is a no-op for
241
+ // it. `relaunchIfToolExited` comes through here too. Issue #3195: only
242
+ // under this launch's token — a launch killed and started again has a
243
+ // newer record under this key, and it is not this launch's to end.
244
+ (0, session_starting_state_1.clearSessionStarting)(worktreeId, this.id, instanceId, startingToken);
245
+ }
232
246
  const adopted = this.takeAdoptionMark(worktreeId, instanceId);
233
247
  if (adopted !== null)
234
248
  await this.warnIfHookUrlIsStale(worktreeId, adopted, instanceId);
@@ -20,6 +20,7 @@ const hooks_config_1 = require("../../lib/hooks/sources/codex/hooks-config");
20
20
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
21
21
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
22
22
  const install_hints_1 = require("./install-hints");
23
+ const launch_screen_1 = require("../../lib/session/launch-screen");
23
24
  const logger = (0, logger_1.createLogger)('cli-tools/codex');
24
25
  /**
25
26
  * Extract error message from unknown error type (DRY)
@@ -268,11 +269,11 @@ class CodexTool extends base_1.BaseCLITool {
268
269
  // as the new one's.
269
270
  const relaunchIntoSamePane = async () => {
270
271
  (0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: sources_1.CODEX_CLI_TOOL_ID, instanceId });
271
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
272
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
272
273
  await new Promise((resolve) => setTimeout(resolve, CODEX_INIT_WAIT_MS));
273
274
  };
274
275
  // Start Codex CLI in interactive mode
275
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
276
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
276
277
  // Wait for Codex to initialize
277
278
  await new Promise((resolve) => setTimeout(resolve, CODEX_INIT_WAIT_MS));
278
279
  // Poll until Codex interactive prompt is ready
@@ -53,6 +53,7 @@ const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
53
53
  const install_hints_1 = require("./install-hints");
54
54
  const plan_review_state_1 = require("../detection/tools/command-code/plan-review-state");
55
55
  const session_start_error_1 = require("../../lib/session/session-start-error");
56
+ const launch_screen_1 = require("../../lib/session/launch-screen");
56
57
  const logger = (0, logger_1.createLogger)('cli-tools/command-code');
57
58
  /** The executable CommandMate launches. See the module docblock for why not `cmd`. */
58
59
  exports.COMMAND_CODE_COMMAND = 'commandcode';
@@ -258,11 +259,11 @@ class CommandCodeTool extends base_1.BaseCLITool {
258
259
  });
259
260
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
260
261
  }
261
- await (0, tmux_1.sendKeys)(sessionName, buildCommandCodeLaunchCommand({
262
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(buildCommandCodeLaunchCommand({
262
263
  target: { worktreeId, cliToolId: tool_id_1.COMMAND_CODE_CLI_TOOL_ID, instanceId },
263
264
  executablePath: this.command,
264
265
  worktreePath,
265
- }), true);
266
+ })), true);
266
267
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.COMMAND_CODE_INIT_WAIT_MS));
267
268
  await this.waitForReady(sessionName);
268
269
  logger.info('started-command-code-session');
@@ -35,6 +35,7 @@ const tool_id_1 = require("../../lib/hooks/sources/copilot/tool-id");
35
35
  const errors_1 = require("../../lib/errors");
36
36
  const logger_1 = require("../../lib/logger");
37
37
  const install_hints_1 = require("./install-hints");
38
+ const launch_screen_1 = require("../../lib/session/launch-screen");
38
39
  const logger = (0, logger_1.createLogger)('cli-tools/copilot');
39
40
  /** Interval for polling prompt detection */
40
41
  const COPILOT_POLL_INTERVAL_MS = 1000;
@@ -369,7 +370,7 @@ class CopilotTool extends base_1.BaseCLITool {
369
370
  worktreePath,
370
371
  });
371
372
  // Start Copilot CLI in interactive mode
372
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
373
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
373
374
  // Issue #1907: no blind sleep before this. The 4-second one that used to
374
375
  // sit here was a guess at how long copilot takes to paint (measured on
375
376
  // 1.0.80: banner at ~1.3 s, folder-trust dialog at ~2.5 s), and it was
@@ -22,6 +22,7 @@ const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifec
22
22
  const logger_1 = require("../../lib/logger");
23
23
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
24
24
  const install_hints_1 = require("./install-hints");
25
+ const launch_screen_1 = require("../../lib/session/launch-screen");
25
26
  const logger = (0, logger_1.createLogger)('cli-tools/gemini');
26
27
  /**
27
28
  * Extract error message from unknown error type (DRY)
@@ -128,7 +129,7 @@ class GeminiTool extends base_1.BaseCLITool {
128
129
  executablePath: this.command,
129
130
  worktreePath,
130
131
  });
131
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
132
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
132
133
  // Wait for Gemini to initialize (minimum wait for banner/auth)
133
134
  await new Promise((resolve) => setTimeout(resolve, GEMINI_INIT_WAIT_MS));
134
135
  // Poll until Gemini interactive prompt is ready
@@ -90,22 +90,40 @@ const ADDED_TOOL_DEFAULTS = {
90
90
  */
91
91
  const LIVENESS_SPECS = {
92
92
  /**
93
- * claude's is `isSessionHealthy`, unchanged, expressed as a declaration.
93
+ * claude's is `isSessionHealthy`, expressed as a declaration.
94
94
  *
95
- * Three fields carry that history and are claude's alone: `aliveTailLines:
96
- * null` (the check has always tested the whole frame), `shellPromptPatterns:
97
- * []` (the length gate and the endings are the whole rule), and
95
+ * Two fields carry that history and are claude's alone: `aliveTailLines:
96
+ * null` (the check has always tested the whole frame) and
98
97
  * `unreadableIsExited: true` (an empty pane and a capture that threw have
99
- * both meant "unhealthy" since it was written). Issue #2070's acceptance
100
- * condition is that claude's verdicts do not move, so none of the three may be
101
- * "improved" here — a change would have to be its own Issue, with its own
102
- * measurements.
98
+ * both meant "unhealthy" since it was written). Neither is "improved" here.
99
+ *
100
+ * `shellPromptPatterns` is NOT claude's alone any more (Issue #3191). #2070
101
+ * left it `[]` so claude's verdicts would not move, which kept claude on the
102
+ * length-gated endings rule — and that rule cannot see a prompt of 40
103
+ * characters or more. Measured 2026-10-04: after `/exit` the pane fell back
104
+ * to `maenokota@MAENOnoMac-Studio uat-repo-wt2 %` (42 characters) and the
105
+ * session stayed `running`, so the next send sat in `waitForPrompt` until
106
+ * `Prompt detection timeout (10000ms)`; the author's everyday prompt
107
+ * (`… MyCodeBranchDesk %`, 46) is past the gate too.
108
+ *
109
+ * The positive `user@host …` forms are therefore claude's as well. What made
110
+ * that safe to adopt unnarrowed: every row of every claude screen fixture in
111
+ * the repository (`tests/fixtures/claude-*`, `tests/unit/detection/tools/
112
+ * claude/fixtures/`, the #2070 frames — composer, transcript, dialogs,
113
+ * pickers, banners) was swept against both patterns and NONE matched, not
114
+ * just none on the bottom row; `tool-liveness-3191.test.ts` keeps that
115
+ * sweep. The whole-frame `CLAUDE_PROMPT_PATTERN` check still runs first, so
116
+ * a pane with claude's composer anywhere on it stays alive regardless. Below
117
+ * the 40-character gate the verdicts are unchanged — a pattern match there
118
+ * already ended in `$` / `%` / `#` — only the reason reads `shell prompt
119
+ * detected` instead of `shell prompt ending detected` for a `user@host:…`
120
+ * row.
103
121
  */
104
122
  claude: {
105
123
  ...SHARED,
106
124
  alivePatterns: [cli_patterns_1.CLAUDE_PROMPT_PATTERN],
107
125
  aliveTailLines: null,
108
- shellPromptPatterns: [],
126
+ shellPromptPatterns: tool_liveness_1.SHELL_PROMPT_LINE_PATTERNS,
109
127
  unreadableIsExited: true,
110
128
  fatalPatterns: cli_patterns_1.CLAUDE_SESSION_ERROR_PATTERNS,
111
129
  fatalRegexPatterns: cli_patterns_1.CLAUDE_SESSION_ERROR_REGEX_PATTERNS,
@@ -57,6 +57,7 @@ const graceful_exit_1 = require("./graceful-exit");
57
57
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
58
58
  const install_hints_1 = require("./install-hints");
59
59
  const opencode_executable_1 = require("./opencode-executable");
60
+ const launch_screen_1 = require("../../lib/session/launch-screen");
60
61
  const logger = (0, logger_1.createLogger)('cli-tools/opencode-v2');
61
62
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
62
63
  /** Interval between composer polls (launch and send). */
@@ -232,7 +233,7 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
232
233
  if (port === null) {
233
234
  logger.warn('opencode-v2-launch-without-server', { worktreeId, instanceId });
234
235
  }
235
- await (0, tmux_1.sendKeys)(sessionName, (0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({ target, executablePath: executable.path, worktreePath }), true);
236
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)((0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({ target, executablePath: executable.path, worktreePath })), true);
236
237
  await this.waitForReady(sessionName);
237
238
  await (0, runtime_1.attachOpencodeV2EventStream)(target);
238
239
  logger.info('started-opencode-v2-session');
@@ -75,6 +75,7 @@ const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
75
75
  const install_hints_1 = require("./install-hints");
76
76
  const opencode_executable_1 = require("./opencode-executable");
77
77
  const log_diagnosis_1 = require("../../lib/hooks/sources/opencode/log-diagnosis");
78
+ const launch_screen_1 = require("../../lib/session/launch-screen");
78
79
  const logger = (0, logger_1.createLogger)('cli-tools/opencode');
79
80
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
80
81
  /**
@@ -393,7 +394,7 @@ class OpenCodeTool extends base_1.BaseCLITool {
393
394
  });
394
395
  }
395
396
  const launchedAt = Date.now();
396
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
397
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
397
398
  // Issue #1908: poll for opencode's own composer instead of sleeping 15 s.
398
399
  await this.waitForReady(sessionName);
399
400
  // Issue #1763: subscribe once the server is up. Health-checked first, so
@@ -21,6 +21,7 @@ const logger_1 = require("../../lib/logger");
21
21
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
22
22
  const install_hints_1 = require("./install-hints");
23
23
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
24
+ const launch_screen_1 = require("../../lib/session/launch-screen");
24
25
  const logger = (0, logger_1.createLogger)('cli-tools/vibe-local');
25
26
  /**
26
27
  * Extract error message from unknown error type (DRY)
@@ -123,7 +124,7 @@ class VibeLocalTool extends base_1.BaseCLITool {
123
124
  }
124
125
  // Start vibe-local in interactive mode with auto-approve (-y)
125
126
  // -y flag skips the permission confirmation prompt
126
- await (0, tmux_1.sendKeys)(sessionName, vibeLocalCommand, true);
127
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(vibeLocalCommand), true);
127
128
  // Wait for vibe-local to initialize (banner + model loading)
128
129
  await new Promise((resolve) => setTimeout(resolve, VIBE_LOCAL_INIT_WAIT_MS));
129
130
  logger.info('started-vibe-local-session:sessionname');
@@ -4,14 +4,15 @@
4
4
  * Shared between response-poller.ts and API routes
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.findOpencodeV2DialogTitle = exports.OPENCODE_V2_DIALOG_TITLE_PATTERN = exports.OPENCODE_V2_THINKING_PATTERN = exports.OPENCODE_V2_FOOTER_PATTERN = exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_USER_ECHO_PATTERN = exports.CODEX_TRAILED_STATUS_BAR_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_EFFORT_PICKER_FOOTER_PATTERN = exports.CODEX_PICKER_FOOTER_PATTERN = exports.CODEX_FORM_SUBMIT_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.CODEX_DIALOG_PATTERN = exports.CODEX_TRUST_QUESTION_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
8
- exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_V2_SKIP_PATTERNS = void 0;
7
+ exports.OPENCODE_V2_DIALOG_TITLE_PATTERN = exports.OPENCODE_V2_THINKING_PATTERN = exports.OPENCODE_V2_FOOTER_PATTERN = exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_USER_ECHO_PATTERN = exports.CODEX_TRAILED_STATUS_BAR_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_EFFORT_PICKER_FOOTER_PATTERN = exports.CODEX_PICKER_FOOTER_PATTERN = exports.CODEX_FORM_SUBMIT_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.CODEX_GENUINE_PROMPT_LINE = exports.CODEX_DIALOG_PATTERN = exports.CODEX_TRUST_QUESTION_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
8
+ exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_V2_SKIP_PATTERNS = exports.findOpencodeV2DialogTitle = void 0;
9
9
  exports.isCodexTurnActive = isCodexTurnActive;
10
10
  exports.findClaudeChromeStart = findClaudeChromeStart;
11
11
  exports.resolveClaudeTrustDialogKeys = resolveClaudeTrustDialogKeys;
12
12
  exports.isClaudeTrustDialogOpen = isClaudeTrustDialogOpen;
13
13
  exports.isShellPaneCommand = isShellPaneCommand;
14
14
  exports.isCodexPromptReady = isCodexPromptReady;
15
+ exports.findCodexComposerRow = findCodexComposerRow;
15
16
  exports.getCodexActiveDialog = getCodexActiveDialog;
16
17
  exports.getCodexLifecycleDialog = getCodexLifecycleDialog;
17
18
  exports.findCodexChromeStart = findCodexChromeStart;
@@ -364,7 +365,7 @@ exports.CODEX_DIALOG_PATTERN = new RegExp(`Skip until next version|${exports.COD
364
365
  * distinguishes the genuine input line from a dialog option line. Single-line
365
366
  * (no /m, no /g) -- callers test it per line to locate the prompt's position.
366
367
  */
367
- const CODEX_GENUINE_PROMPT_LINE = /^\s*›(?!\s*\d+\.)/;
368
+ exports.CODEX_GENUINE_PROMPT_LINE = /^\s*›(?!\s*\d+\.)/;
368
369
  /**
369
370
  * Decide whether Codex output shows a genuine interactive input prompt rather than
370
371
  * a startup dialog (Issue #890, reworked in Issue #892).
@@ -395,7 +396,7 @@ function isCodexPromptReady(output) {
395
396
  lastDialogMarkerIdx = i;
396
397
  continue;
397
398
  }
398
- if (CODEX_GENUINE_PROMPT_LINE.test(line)) {
399
+ if (exports.CODEX_GENUINE_PROMPT_LINE.test(line)) {
399
400
  lastPromptIdx = i;
400
401
  }
401
402
  }
@@ -415,32 +416,49 @@ function isCodexPromptReady(output) {
415
416
  * on the update dialog could confirm the default "1. Update now" (npm install).
416
417
  */
417
418
  /**
418
- * The lines of Codex's ACTIVE region: everything strictly below the bottom-most
419
- * genuine input-prompt line, or the whole frame when there is no prompt line
420
- * (Issue #892).
419
+ * Index of codex's bottom-most genuine input-prompt row, or -1 (Issue #892).
420
+ *
421
+ * This is codex's live-region composer marker (Issue #3183): the declaration in
422
+ * `tools/codex/live-region.ts` is built on it, so `NormalizedFrame.liveRegion`
423
+ * starts at this row, and the string entries below — which keep a caller that
424
+ * has no `NormalizedFrame` (codex's own launch loop) — read the same row.
421
425
  *
422
- * This is the one rule that keeps every Codex dialog classifier honest.
423
426
  * capturePane returns scrollback, so a dialog that was answered minutes ago is
424
427
  * still in the frame; only what sits BELOW the live prompt is still awaiting a
425
428
  * key. Shared by getCodexActiveDialog and getCodexLifecycleDialog so the two
426
429
  * cannot drift into disagreeing about what "active" means.
427
430
  */
428
- function codexActiveRegionLines(output) {
429
- const lines = output.split('\n');
430
- // Index of the bottom-most genuine input-prompt line (-1 if none).
431
- let promptIdx = -1;
431
+ function findCodexComposerRow(lines) {
432
432
  for (let i = lines.length - 1; i >= 0; i--) {
433
- if (CODEX_GENUINE_PROMPT_LINE.test(lines[i])) {
434
- promptIdx = i;
435
- break;
433
+ if (exports.CODEX_GENUINE_PROMPT_LINE.test(lines[i]))
434
+ return i;
435
+ }
436
+ return -1;
437
+ }
438
+ /**
439
+ * The rows of codex's ACTIVE region: everything strictly below the composer
440
+ * row, or the whole frame when there is none (Issue #892).
441
+ *
442
+ * A {@link NormalizedFrame} carries that answer already (Issue #3183); a string
443
+ * is read with the same marker, {@link findCodexComposerRow}.
444
+ */
445
+ function codexActiveRows(input) {
446
+ if (typeof input !== 'string') {
447
+ const region = input.liveRegion;
448
+ if (region.tool === 'codex') {
449
+ return region.anchor === 'composer'
450
+ ? input.contentLines.slice((region.composerEndRow ?? region.startRow) + 1)
451
+ : input.contentLines;
436
452
  }
453
+ return codexActiveRows(input.clean);
437
454
  }
438
- return lines.slice(promptIdx + 1);
455
+ const lines = input.split('\n');
456
+ return lines.slice(findCodexComposerRow(lines) + 1);
439
457
  }
440
458
  function getCodexActiveDialog(output) {
441
459
  // Residual dialog text above a live prompt is excluded, so a dialog lingering
442
460
  // in scrollback is never treated as active.
443
- const active = codexActiveRegionLines(output).join('\n');
461
+ const active = codexActiveRows(output).join('\n');
444
462
  if (active === '') {
445
463
  return null;
446
464
  }
@@ -525,7 +543,7 @@ const CODEX_UPDATE_DIALOG_ANCHORS = [
525
543
  /**
526
544
  * Classify the bottom-most ACTIVE codex lifecycle screen (Issue #1829).
527
545
  *
528
- * Position-based, via {@link codexActiveRegionLines}: a dialog left in
546
+ * Position-based, via {@link codexActiveRows}: a dialog left in
529
547
  * scrollback above a live prompt is not active and returns `null`. That is not
530
548
  * a detail — the auto-answer guard in the Auto-Yes poller is built on this
531
549
  * function, and a whole-frame version of it would switch Auto-Yes off for the
@@ -540,11 +558,11 @@ const CODEX_UPDATE_DIALOG_ANCHORS = [
540
558
  * reports these screens, so a human still sees them; what this function gates is
541
559
  * only whether a machine may answer on their behalf.
542
560
  *
543
- * @param output - ANSI-stripped pane capture
561
+ * @param output - ANSI-stripped pane capture, or a frame `normalizeFrame(…, 'codex')` built
544
562
  * @returns The active lifecycle screen, or null when none is
545
563
  */
546
564
  function getCodexLifecycleDialog(output) {
547
- const activeLines = codexActiveRegionLines(output);
565
+ const activeLines = codexActiveRows(output);
548
566
  const window = [];
549
567
  for (let i = activeLines.length - 1; i >= 0 && window.length < CODEX_LIFECYCLE_TAIL_LINES; i--) {
550
568
  if (activeLines[i].trim() === '')
@@ -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
@@ -115,6 +115,23 @@ exports.STATUS_REASON = {
115
115
  OPENCODE_RESPONSE_COMPLETE: 'opencode_response_complete',
116
116
  INPUT_PROMPT: 'input_prompt',
117
117
  NO_RECENT_OUTPUT: 'no_recent_output',
118
+ /**
119
+ * Issue #3179: the agent's launch is still in progress.
120
+ *
121
+ * Published by `current-output-builder` and `worktree-status-helper` while
122
+ * `lib/session/session-starting-state` holds a record for the instance — from
123
+ * `beginAgentSession` until `startSession` returns or throws, bounded by the
124
+ * tool's readiness wait and released early by a dialog the launch does not
125
+ * answer. The frame underneath (a shell prompt and the launch line, or a trust
126
+ * dialog the launch is about to answer) is not read while it is up: the status
127
+ * is `running`, and `isUnclassifiedActive` / `isSelectionListActive` /
128
+ * `isPromptWaiting` are all false, so no pad, no answer sheet and no `wait`
129
+ * exit 10 is raised for a screen nobody has to drive.
130
+ *
131
+ * ADDITIVE in the sense {@link STATUS_REASON.EXITED} is: a reader that does not
132
+ * know the token sees a `running` session.
133
+ */
134
+ STARTING: 'starting',
118
135
  /**
119
136
  * Issue #2070: the tmux session is there, and the TOOL is not.
120
137
  *
@@ -49,7 +49,9 @@ exports.SHELL_PROMPT_ENDINGS = ['$', '%', '#'];
49
49
  * reproduced on renders as `maenokota@MAENOnoMac-Studio work-codex %` — forty
50
50
  * characters exactly, i.e. one past this gate — so a codex session that had
51
51
  * genuinely fallen back to the shell read as alive. See
52
- * {@link SHELL_PROMPT_LINE_PATTERNS}.
52
+ * {@link SHELL_PROMPT_LINE_PATTERNS}. Issue #3191 found the same gap for claude
53
+ * (`… uat-repo-wt2 %`, 42 characters, after `/exit`), and claude now takes the
54
+ * line patterns too.
53
55
  */
54
56
  exports.MAX_SHELL_PROMPT_LENGTH = 40;
55
57
  /**
@@ -17,9 +17,9 @@
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");
22
21
  const status_reason_1 = require("../../status-reason");
22
+ const live_region_1 = require("./live-region");
23
23
  const run_detection_1 = require("../run-detection");
24
24
  const verified_against_1 = require("../verified-against");
25
25
  const dialog_1 = require("./dialog");
@@ -89,39 +89,15 @@ function isAntigravitySelectionScreenOpen(lastLines) {
89
89
  const { promptPattern } = (0, cli_patterns_1.getCliToolPatterns)('antigravity');
90
90
  return !rows.slice(matchedAt + 1).some(row => promptPattern.test(row));
91
91
  }
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
92
  exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector)({
122
93
  tool: 'antigravity',
123
94
  verifiedAgainst: exports.VERIFIED_AGAINST,
124
- isStalePrompt: isAntigravityQuotedNumberedList,
95
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
96
+ liveRegion: live_region_1.ANTIGRAVITY_LIVE_REGION,
97
+ // Issue #2845's quoted-list rule (a numbered list with the `>` composer drawn
98
+ // under its last row is the model's reply) is the live region's now: the
99
+ // composer marker in `./live-region.ts` and the shared veto in
100
+ // `run-detection.ts`, which the Auto-Yes path applies too (#2851).
125
101
  beforePrompt(frame) {
126
102
  // 0.85. Issue #2364: the survey agy draws in place of its composer after a
127
103
  // tool decision — `[1] Good [2] Fine [3] Bad [0] Skip` under `How's the
@@ -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
+ };
@@ -17,6 +17,7 @@ const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-ch
17
17
  const status_reason_1 = require("../../status-reason");
18
18
  const prompt_1 = require("./prompt");
19
19
  const frame_1 = require("../frame");
20
+ const live_region_1 = require("./live-region");
20
21
  const run_detection_1 = require("../run-detection");
21
22
  const patterns_1 = require("./patterns");
22
23
  /**
@@ -112,15 +113,19 @@ function readIdleEvidence(frame) {
112
113
  * this rule cannot disagree with them about where the conversation ends.
113
114
  */
114
115
  function selectionFooterRows(frame) {
115
- const box = (0, composer_text_1.findClaudeInputBox)(frame.contentLines);
116
- if (!box)
116
+ // Issue #3183: the input box is the live region's composer marker
117
+ // (`./live-region.ts`, the same `findClaudeInputBox`), located once per frame.
118
+ const region = (0, frame_1.liveRegionOf)(frame, 'claude');
119
+ if (region.anchor !== 'composer')
117
120
  return frame.lastLines;
118
121
  const tailStart = frame.contentLines.length - frame_1.STATUS_CHECK_LINE_COUNT;
119
- return frame.contentLines.slice(Math.max(box.openingSeparator, tailStart)).join('\n');
122
+ return frame.contentLines.slice(Math.max(region.startRow, tailStart)).join('\n');
120
123
  }
121
124
  exports.claudeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
122
125
  tool: 'claude',
123
126
  verifiedAgainst: patterns_1.VERIFIED_AGAINST,
127
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
128
+ liveRegion: live_region_1.CLAUDE_LIVE_REGION,
124
129
  afterPrompt(frame) {
125
130
  // 1.5. Claude CLI selection list detection
126
131
  // Claude CLI's multi-select/checkbox prompts (e.g., AskUserQuestion with checkboxes)
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Claude's live region (Issue #3183; design doc §7 "claude").
4
+ *
5
+ * - **composer** — the input box: closing rule within 4 rows of the bottom, an
6
+ * opening rule within 40 rows above it, and a `>`/`❯` row right under the
7
+ * opening rule (`findClaudeInputBox`, the finder #2847 / the idle rule / the
8
+ * dialog rule already share). Measured: `tui-frame-footer-2776/
9
+ * claude-2.1.278-idle-quoted-footers.txt` L997-L1000.
10
+ * - **dialog top** — the rule above the first option of the dialog that closes
11
+ * with Claude's footer (`claude-2.1.278-bash-approval.txt` L12 / L20 / L25,
12
+ * `claude-2.1.278-askuserquestion-picker.txt` L17 / L22 / L30, whose inner
13
+ * rule L27 is why the search starts at the option).
14
+ *
15
+ * @module lib/detection/tools/claude/live-region
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.CLAUDE_LIVE_REGION = void 0;
19
+ const composer_text_1 = require("../../composer-text");
20
+ const tui_detection_frame_1 = require("../../tui-detection-frame");
21
+ const live_region_1 = require("../live-region");
22
+ exports.CLAUDE_LIVE_REGION = {
23
+ composer: (0, live_region_1.fencedComposer)(lines => (0, composer_text_1.findClaudeInputBox)(lines)?.openingSeparator ?? -1),
24
+ dialogTop: (0, live_region_1.ruleAboveOptionRun)({ footer: tui_detection_frame_1.isClaudeFooter, rule: /^─{10,}$/, maxRows: 120 }),
25
+ composerHidesDialogs: true,
26
+ };
@@ -316,7 +316,7 @@ function readCodexGlyphRowKind(rawRow) {
316
316
  * Find and classify the bottom-most `›` row of a raw capture.
317
317
  *
318
318
  * "Bottom-most" is the whole point, and it is the same rule `isCodexPromptReady`
319
- * and `codexActiveRegionLines` already apply for their own questions: codex
319
+ * and `findCodexComposerRow` already apply for their own questions: codex
320
320
  * draws on the normal screen, so a dialog the operator answered minutes ago is
321
321
  * still in the frame with its options intact (Issue #1160). Only the LAST `›`
322
322
  * row says what the pane is doing now — and when a turn is generating, that row