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
@@ -24,6 +24,7 @@ const cli_patterns_2 = require("./cli-patterns");
24
24
  const prompt_1 = require("./prompt");
25
25
  const frame_1 = require("../frame");
26
26
  const dialog_block_1 = require("../dialog-block");
27
+ const live_region_1 = require("./live-region");
27
28
  const run_detection_1 = require("../run-detection");
28
29
  const verified_against_1 = require("../verified-against");
29
30
  const thinking_constants_1 = require("../../../../config/thinking-constants");
@@ -43,38 +44,6 @@ exports.VERIFIED_AGAINST = verified_against_1.CODEX_VERIFIED_AGAINST;
43
44
  */
44
45
  const CODEX_CONFIRMATION_FOOTER_PATTERN = /press\s+(?:number|enter)\s+to\s+confirm/i;
45
46
  const CODEX_NUMBERED_OPTION_PATTERN = /^\s*[❯›●]?\s*\d{1,2}[.)]\s/;
46
- /**
47
- * Index of the Codex status bar within the last 10 content rows, or -1.
48
- *
49
- * Issue #2818: a bar carrying a thread title or the Plan-mode badge after the
50
- * path (codex 0.154.0+) is the same bar, so it is a boundary too. Without it
51
- * such frames fell to branch D, whose 15-row tail still holds a finished
52
- * turn's `• Ran …` record, and an idle session read `running`.
53
- */
54
- function findCodexFooterBoundary(contentLines) {
55
- for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
56
- const line = contentLines[ci];
57
- if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(line) || cli_patterns_1.CODEX_TRAILED_STATUS_BAR_PATTERN.test(line))
58
- return ci;
59
- }
60
- return -1;
61
- }
62
- /**
63
- * Exclusive end of the conversation area — the row below the status bar, with
64
- * the padding above it walked off (Issue #1928).
65
- *
66
- * The same boundary branches 0.8 and 2.7 compute inline, named once so
67
- * `detectDialog` reads the region THEY read. Falls back to the whole frame when
68
- * the bar cannot be located, which is Issue #1150's drift case: there the tail
69
- * is the conversation, so the dialog rule still has the right rows.
70
- */
71
- function findCodexContentEnd(contentLines) {
72
- const boundary = findCodexFooterBoundary(contentLines);
73
- let end = boundary >= 0 ? boundary - 1 : contentLines.length - 1;
74
- while (end >= 0 && contentLines[end].trim() === '')
75
- end--;
76
- return end + 1;
77
- }
78
47
  /**
79
48
  * Issue #1160: decide whether a Codex prompt that detectPrompt() matched is a stale,
80
49
  * already-answered prompt left in the 50-line scan window rather than an active one.
@@ -98,7 +67,7 @@ function findCodexContentEnd(contentLines) {
98
67
  * here — keeping the guard conservative against flipping a genuine prompt to running.
99
68
  */
100
69
  function isCodexStalePrompt(contentLines) {
101
- const footerBoundary = findCodexFooterBoundary(contentLines);
70
+ const footerBoundary = (0, live_region_1.findCodexFooterBoundary)(contentLines);
102
71
  const end = footerBoundary >= 0 ? footerBoundary : contentLines.length;
103
72
  let lastPromptIdx = -1;
104
73
  let lastThinkingIdx = -1;
@@ -166,6 +135,8 @@ function isCodexDialogGlyphTail(raw) {
166
135
  exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
167
136
  tool: 'codex',
168
137
  verifiedAgainst: exports.VERIFIED_AGAINST,
138
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
139
+ liveRegion: live_region_1.CODEX_LIVE_REGION,
169
140
  beforePrompt(frame) {
170
141
  const { contentLines } = frame;
171
142
  // 0.6. The composer is the pane's bottom → no dialog is open (Issue #2841).
@@ -175,7 +146,11 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
175
146
  // dialog is up, so a composer at the bottom vetoes all of them at once, and
176
147
  // the chain goes on to the prompt / thinking / idle readings it would have
177
148
  // reached had the transcript not quoted anything.
178
- if ((0, cli_patterns_2.isCodexComposerAtBottom)(frame.raw, contentLines, findCodexContentEnd(contentLines))) {
149
+ //
150
+ // Issue #3183: "the composer is the bottom" is the live region's
151
+ // `composerAtBottom`, located once by `normalizeFrame` from
152
+ // `CODEX_LIVE_REGION` (the #2841 reading, unchanged).
153
+ if ((0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom) {
179
154
  return null;
180
155
  }
181
156
  // 0.7. Codex: pager / edit-previous (transcript) mode detection (Issue #1017)
@@ -213,7 +188,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
213
188
  // interactive element and nothing but a keypress moves them: that is `waiting`.
214
189
  // Checked ahead of prompt detection because the transcript rows on screen 2 are
215
190
  // ordinary text that must not be read as options.
216
- const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)(frame.clean);
191
+ const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)((0, frame_1.withLiveRegion)(frame, 'codex'));
217
192
  if (codexLifecycleDialog === 'hooks-list' || codexLifecycleDialog === 'hooks-detail') {
218
193
  return {
219
194
  status: 'waiting',
@@ -238,7 +213,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
238
213
  // Issue #1150: the status bar is located via CODEX_STATUS_BAR_PATTERN (version-
239
214
  // independent; matches both legacy "N% left ·" and v0.141 "model · path" bars),
240
215
  // and since #2818 via CODEX_TRAILED_STATUS_BAR_PATTERN too (0.154+ "· <title>").
241
- const codexFooterBoundary = findCodexFooterBoundary(contentLines);
216
+ const codexFooterBoundary = (0, live_region_1.findCodexFooterBoundary)(contentLines);
242
217
  let codexContentEnd = codexFooterBoundary >= 0 ? codexFooterBoundary - 1 : contentLines.length - 1;
243
218
  while (codexContentEnd >= 0 && contentLines[codexContentEnd].trim() === '') {
244
219
  codexContentEnd--;
@@ -310,7 +285,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
310
285
  // block with codex working below it is scrollback, not a dialog — and the
311
286
  // glyph rule agrees independently, because the bottom-most `›` on such a
312
287
  // frame is the composer codex draws while it works.
313
- const codexDialogFrame = (0, cli_patterns_2.readCodexDialogFrame)(frame.raw, contentLines, findCodexContentEnd(contentLines));
288
+ const codexDialogFrame = (0, cli_patterns_2.readCodexDialogFrame)(frame.raw, contentLines, (0, live_region_1.findCodexContentEnd)(contentLines));
314
289
  if (codexDialogFrame && !isCodexStalePrompt(contentLines)) {
315
290
  // The footer is not consulted for the verdict; an unrecognised one means
316
291
  // codex reworded a screen, which is worth saying out loud exactly once.
@@ -343,7 +318,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
343
318
  // Issue #2841: a prompt above the composer is conversation text, not a
344
319
  // dialog — the same veto branch 0.6 applies to the status branches.
345
320
  return (isCodexStalePrompt(frame.contentLines) ||
346
- (0, cli_patterns_2.isCodexComposerAtBottom)(frame.raw, frame.contentLines, findCodexContentEnd(frame.contentLines)));
321
+ (0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom);
347
322
  },
348
323
  // §4 D1 決定 4 (Issue #1928). All three inputs are readings this module
349
324
  // already performs for its status branches, passed rather than recomputed:
@@ -353,13 +328,15 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
353
328
  // Issue #2841: Auto-Yes and `respond` act on this answer, so it takes the
354
329
  // same veto as the status branches — before the lifecycle screens too, whose
355
330
  // wording (`Do you trust …`) can be quoted like any other.
356
- const contentEnd = findCodexContentEnd(frame.contentLines);
357
- if ((0, cli_patterns_2.isCodexComposerAtBottom)(frame.raw, frame.contentLines, contentEnd))
331
+ // Issue #3183: the veto itself is applied by `createToolStatusDetector`'s
332
+ // wrapper from the live region, for every tool; this early return only
333
+ // saves the parse.
334
+ if ((0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom)
358
335
  return null;
359
336
  return (0, prompt_1.detectCodexDialog)(frame, {
360
- contentEnd,
337
+ contentEnd: (0, live_region_1.findCodexContentEnd)(frame.contentLines),
361
338
  stalePrompt: isCodexStalePrompt(frame.contentLines),
362
- lifecycleDialog: (0, cli_patterns_1.getCodexLifecycleDialog)(frame.clean),
339
+ lifecycleDialog: (0, cli_patterns_1.getCodexLifecycleDialog)((0, frame_1.withLiveRegion)(frame, 'codex')),
363
340
  });
364
341
  },
365
342
  afterThinking(frame) {
@@ -370,7 +347,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
370
347
  // A. Thinking indicators (• Ran, • Planning) in the conversation area → should show spinner
371
348
  // B. Idle prompt (›) at the end of the conversation area → should show ready
372
349
  // Strategy: find the Codex status bar, extract content above it, then check for thinking/idle.
373
- const codexFooterBoundary = findCodexFooterBoundary(contentLines);
350
+ const codexFooterBoundary = (0, live_region_1.findCodexFooterBoundary)(contentLines);
374
351
  if (codexFooterBoundary >= 0) {
375
352
  // Find last non-empty content line above footer (skip padding + input area)
376
353
  let lastContentIdx = codexFooterBoundary - 1;
@@ -477,13 +454,16 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
477
454
  * `detectDialog` vouches for, so the same words quoted in a reply do not count.
478
455
  * `/prompt-response` does not call this and keeps accepting an answer.
479
456
  *
480
- * @param cleanOutput - The capture Auto-Yes judged (ANSI and box drawing stripped)
457
+ * @param cleanOutput - The capture Auto-Yes judged (ANSI and box drawing
458
+ * stripped), or the frame the poller normalised once for the tick (Issue #3183)
481
459
  */
482
460
  function isCodexModelPickerFrame(cleanOutput) {
483
- const frame = (0, frame_1.normalizeFrame)(cleanOutput);
461
+ const frame = typeof cleanOutput === 'string'
462
+ ? (0, frame_1.normalizeFrame)(cleanOutput, 'codex')
463
+ : (0, frame_1.withLiveRegion)(cleanOutput, 'codex');
484
464
  if (!exports.codexStatusDetector.detectDialog(frame))
485
465
  return false;
486
- const contentEnd = findCodexContentEnd(frame.contentLines);
466
+ const contentEnd = (0, live_region_1.findCodexContentEnd)(frame.contentLines);
487
467
  const block = (0, dialog_block_1.findNumberedOptionBlock)((0, cli_patterns_1.stripBoxDrawing)(frame.clean).split('\n'), contentEnd);
488
468
  return (block !== null &&
489
469
  (cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(block.footer) ||
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Codex's live region (Issue #3183; design doc §7 "codex").
4
+ *
5
+ * - **composer** — the bottom-most genuine `›` row ({@link findCodexComposerRow},
6
+ * the #892 rule), with "is it the bottom of the pane?" answered by
7
+ * {@link isCodexComposerAtBottom} (the #2841 rule: the RAW glyph row's SGR
8
+ * first, the stripped last content row otherwise). Before #3183 those were two
9
+ * separate readings in two files; they are now the two halves of one marker.
10
+ * Measured: `codex-dialogs-0157/quoted-approval-idle.txt` L997 (composer) under
11
+ * the quotation at L40-L49.
12
+ * - **dialog top** — not declared. codex removes its composer while a dialog is
13
+ * open and the dialog takes the bottom of the pane (`codex-dialogs-0157/
14
+ * approval.txt` L987-L1000), so the whole frame is the right fallback.
15
+ *
16
+ * @module lib/detection/tools/codex/live-region
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.CODEX_LIVE_REGION = void 0;
20
+ exports.findCodexFooterBoundary = findCodexFooterBoundary;
21
+ exports.findCodexContentEnd = findCodexContentEnd;
22
+ const cli_patterns_1 = require("../../cli-patterns");
23
+ const cli_patterns_2 = require("./cli-patterns");
24
+ const live_region_1 = require("../live-region");
25
+ /**
26
+ * Index of the Codex status bar within the last 10 content rows, or -1.
27
+ *
28
+ * Issue #2818: a bar carrying a thread title or the Plan-mode badge after the
29
+ * path (codex 0.154.0+) is the same bar, so it is a boundary too. Without it
30
+ * such frames fell to branch D, whose 15-row tail still holds a finished
31
+ * turn's `• Ran …` record, and an idle session read `running`.
32
+ */
33
+ function findCodexFooterBoundary(contentLines) {
34
+ for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
35
+ const line = contentLines[ci];
36
+ if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(line) || cli_patterns_1.CODEX_TRAILED_STATUS_BAR_PATTERN.test(line))
37
+ return ci;
38
+ }
39
+ return -1;
40
+ }
41
+ /**
42
+ * Exclusive end of the conversation area — the row below the status bar, with
43
+ * the padding above it walked off (Issue #1928).
44
+ *
45
+ * Falls back to the whole frame when the bar cannot be located, which is
46
+ * Issue #1150's drift case: there the tail is the conversation, so the dialog
47
+ * rule still has the right rows.
48
+ */
49
+ function findCodexContentEnd(contentLines) {
50
+ const boundary = findCodexFooterBoundary(contentLines);
51
+ let end = boundary >= 0 ? boundary - 1 : contentLines.length - 1;
52
+ while (end >= 0 && contentLines[end].trim() === '')
53
+ end--;
54
+ return end + 1;
55
+ }
56
+ exports.CODEX_LIVE_REGION = {
57
+ composer: {
58
+ locate({ raw, contentLines }) {
59
+ const contentEnd = findCodexContentEnd(contentLines);
60
+ const atBottom = (0, cli_patterns_2.isCodexComposerAtBottom)(raw, contentLines, contentEnd);
61
+ const row = (0, cli_patterns_1.findCodexComposerRow)(contentLines);
62
+ if (row >= 0)
63
+ return { start: row, end: row, atBottom };
64
+ if (!atBottom)
65
+ return null;
66
+ // The raw glyph row said "composer" although its text reads as a numbered
67
+ // row (a hand-typed `1. buy milk`): the composer is the last content row.
68
+ const start = (0, live_region_1.lastContentRow)(contentLines.slice(0, contentEnd));
69
+ return start < 0 ? null : { start, end: start, atBottom: true };
70
+ },
71
+ },
72
+ composerHidesDialogs: true,
73
+ };
@@ -139,6 +139,8 @@ const selection_shape_1 = require("../../selection-shape");
139
139
  const dialog_1 = require("./dialog");
140
140
  const permission_1 = require("./permission");
141
141
  const status_reason_1 = require("../../status-reason");
142
+ const live_region_1 = require("./live-region");
143
+ const frame_1 = require("../frame");
142
144
  const run_detection_1 = require("../run-detection");
143
145
  const verified_against_1 = require("../verified-against");
144
146
  /** Command Code build these rules were read off (value in ../verified-against). */
@@ -146,7 +148,16 @@ exports.VERIFIED_AGAINST = verified_against_1.COMMAND_CODE_VERIFIED_AGAINST;
146
148
  exports.commandCodeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
147
149
  tool: 'command-code',
148
150
  verifiedAgainst: exports.VERIFIED_AGAINST,
151
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
152
+ liveRegion: live_region_1.COMMAND_CODE_LIVE_REGION,
149
153
  beforePrompt(frame) {
154
+ // Issue #3183: an input box at the bottom of the pane means none of the
155
+ // three overlays below is open — each replaces the input box — so a footer
156
+ // the conversation quotes cannot reach them, whatever window it sits in.
157
+ // The live region says so once for every rule; the `…AtBottom` readings
158
+ // below (#2846) still decide the frames that have no input box.
159
+ if ((0, frame_1.liveRegionOf)(frame, 'command-code').composerAtBottom)
160
+ return null;
150
161
  // Issue #2761. The plan review overlay, read off its two footer rows.
151
162
  //
152
163
  // `beforePrompt` and not `afterPrompt`, and that placement is the point: the
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Command Code's live region (Issue #3183; design doc §7 "command-code").
4
+ *
5
+ * - **composer** — the input box between two rules pinned to the bottom, with a
6
+ * `❯` row under the opening rule (`findCommandCodeChromeStart`, the same
7
+ * shape as claude's). A `❯ 1.` row there is a question dialog's cursor, not
8
+ * the composer, and is refused. Measured: `tui-frame-footer-2776/
9
+ * command-code-1.58.0-idle-quoted-footers.txt` L29-L32 under the quoted
10
+ * footers at L18-L21.
11
+ * - **dialog top** — the rule above the first option of a dialog closed by the
12
+ * `↑/↓ navigate · enter select` footer. Measured: `command-code-live-2250/
13
+ * dialog-shell-command.txt` L29 / L36 / L40.
14
+ *
15
+ * @module lib/detection/tools/command-code/live-region
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.COMMAND_CODE_LIVE_REGION = void 0;
19
+ const cli_patterns_1 = require("../../cli-patterns");
20
+ const live_region_1 = require("../live-region");
21
+ /** A numbered cursor row (`❯ 1. Yes`) — a dialog's, never the composer's. */
22
+ const NUMBERED_CURSOR_ROW = /^❯\s*\d{1,2}[.)]\s/;
23
+ exports.COMMAND_CODE_LIVE_REGION = {
24
+ composer: (0, live_region_1.fencedComposer)(lines => {
25
+ const start = (0, cli_patterns_1.findCommandCodeChromeStart)(lines);
26
+ if (start < 0)
27
+ return -1;
28
+ return NUMBERED_CURSOR_ROW.test((0, cli_patterns_1.stripAnsi)(lines[start + 1] ?? '')) ? -1 : start;
29
+ }),
30
+ dialogTop: (0, live_region_1.ruleAboveOptionRun)({
31
+ footer: row => /↑\/↓ navigate · enter select/.test(row),
32
+ rule: /^─{10,}$/,
33
+ maxRows: 120,
34
+ }),
35
+ composerHidesDialogs: true,
36
+ };
@@ -15,6 +15,7 @@ const cli_patterns_1 = require("../../cli-patterns");
15
15
  const prompt_detector_1 = require("../../prompt-detector");
16
16
  const status_reason_1 = require("../../status-reason");
17
17
  const prompt_1 = require("./prompt");
18
+ const live_region_1 = require("./live-region");
18
19
  const run_detection_1 = require("../run-detection");
19
20
  const verified_against_1 = require("../verified-against");
20
21
  /** copilot-cli build these rules were read off (#1885 / #1895; value in ../verified-against, #1929). */
@@ -39,6 +40,8 @@ function readIdleEvidence(frame) {
39
40
  exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
40
41
  tool: 'copilot',
41
42
  verifiedAgainst: exports.VERIFIED_AGAINST,
43
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
44
+ liveRegion: live_region_1.COPILOT_LIVE_REGION,
42
45
  beforePrompt(frame) {
43
46
  // 0. Copilot: picker detection BEFORE thinking detection
44
47
  // COPILOT_THINKING_PATTERN includes "Reasoning\s+[■▪▮]" which matches the
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * Copilot's live region (Issue #3183; design doc §7 "copilot").
4
+ *
5
+ * - **composer** — the bottom chrome `findCopilotChromeStart` locates: the cwd
6
+ * row, the fenced composer (`─` rules on 1.0.80, `╻▄` / `╹▀` frames on
7
+ * 1.0.82) and the status bar under it. Measured: `copilot-live-1885/
8
+ * turn-complete.txt` L997-L1001 (1.0.80) and `copilot-live-2269/
9
+ * turn-complete.txt` L996-L1000 (1.0.82).
10
+ * - **dialog top** — the `╭` corner the bottom `╰` row closes. copilot draws its
11
+ * dialogs in a box over the whole bottom of the pane, chrome gone. Measured:
12
+ * `copilot-live-1885/permission-dialog.txt` L987 / L1001 (1.0.80; 1.0.82's
13
+ * dialog has not been captured — design doc §6 item 3).
14
+ *
15
+ * `composerHidesDialogs: false`: the `/model` picker is drawn with the fenced
16
+ * composer still on screen (`copilot-live-1885/model-picker.txt`; the comment
17
+ * on `findCopilotChromeStart` records the blank header row it leaves), so only
18
+ * numbered readings are vetoed by it. The numbered permission dialog replaces
19
+ * the chrome (`permission-dialog.txt`).
20
+ *
21
+ * @module lib/detection/tools/copilot/live-region
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.COPILOT_LIVE_REGION = void 0;
25
+ const cli_patterns_1 = require("../../cli-patterns");
26
+ const live_region_1 = require("../live-region");
27
+ /** How far above the bottom row the box's closing corner may sit. */
28
+ const BOX_BOTTOM_MAX_ROWS = 2;
29
+ /** How tall a dialog box may be before it stops looking like one. */
30
+ const BOX_MAX_ROWS = 120;
31
+ function findCopilotDialogBoxTop(lines) {
32
+ const last = (0, live_region_1.lastContentRow)(lines);
33
+ let bottom = -1;
34
+ for (let i = last; i >= Math.max(0, last - BOX_BOTTOM_MAX_ROWS); i--) {
35
+ if (lines[i].trimStart().startsWith('╰')) {
36
+ bottom = i;
37
+ break;
38
+ }
39
+ }
40
+ if (bottom < 0)
41
+ return -1;
42
+ for (let i = bottom - 1; i >= Math.max(0, bottom - BOX_MAX_ROWS); i--) {
43
+ if (lines[i].trimStart().startsWith('╭'))
44
+ return i;
45
+ }
46
+ return -1;
47
+ }
48
+ exports.COPILOT_LIVE_REGION = {
49
+ composer: (0, live_region_1.fencedComposer)(lines => (0, cli_patterns_1.findCopilotChromeStart)(lines)),
50
+ dialogTop: (0, live_region_1.dialogTopFrom)(findCopilotDialogBoxTop),
51
+ composerHidesDialogs: false,
52
+ };
@@ -12,9 +12,13 @@
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.STATUS_CHECK_LINE_COUNT = void 0;
14
14
  exports.normalizeFrame = normalizeFrame;
15
+ exports.liveRegionOf = liveRegionOf;
16
+ exports.withLiveRegion = withLiveRegion;
15
17
  const cli_patterns_1 = require("../cli-patterns");
16
18
  const tui_detection_frame_1 = require("../tui-detection-frame");
17
19
  const thinking_constants_1 = require("../../../config/thinking-constants");
20
+ const live_region_specs_1 = require("./live-region-specs");
21
+ const live_region_1 = require("./live-region");
18
22
  /**
19
23
  * Number of lines from the end to check for prompt and input indicators.
20
24
  *
@@ -23,8 +27,17 @@ const thinking_constants_1 = require("../../../config/thinking-constants");
23
27
  * existing importers are unaffected.
24
28
  */
25
29
  exports.STATUS_CHECK_LINE_COUNT = 15;
26
- /** Build the shared {@link NormalizedFrame} for one capture. */
27
- function normalizeFrame(output) {
30
+ /**
31
+ * Build the shared {@link NormalizedFrame} for one capture.
32
+ *
33
+ * @param output - The capture. Pass it as captured (ANSI and box drawing
34
+ * intact): the input-box markers of claude / Command Code / copilot / opencode
35
+ * are rule rows that `stripBoxDrawing` blanks.
36
+ * @param tool - The CLI the capture came from. Names the live-region declaration
37
+ * to apply (Issue #3183); omitted, the region is the whole frame — the reading
38
+ * every rule had before.
39
+ */
40
+ function normalizeFrame(output, tool) {
28
41
  const clean = (0, tui_detection_frame_1.normalizeTuiFrameForDetection)((0, cli_patterns_1.stripAnsi)(output));
29
42
  const lines = clean.split('\n');
30
43
  // Strip trailing empty lines (tmux terminal padding) before windowing.
@@ -40,8 +53,29 @@ function normalizeFrame(output) {
40
53
  clean,
41
54
  lines,
42
55
  contentLines,
56
+ liveRegion: (0, live_region_1.locateLiveRegion)(tool === undefined ? undefined : live_region_specs_1.LIVE_REGION_SPECS[tool], tool ?? null, {
57
+ raw: output,
58
+ contentLines,
59
+ }),
43
60
  lastLines: contentLines.slice(-exports.STATUS_CHECK_LINE_COUNT).join('\n'),
44
61
  // DR-003: Separate thinking detection window (5 lines) from prompt detection window (15 lines)
45
62
  thinkingLines: contentLines.slice(-thinking_constants_1.THINKING_TAIL_LINE_COUNT).join('\n'),
46
63
  };
47
64
  }
65
+ /**
66
+ * The live region of `frame` as `tool` declares it (Issue #3183).
67
+ *
68
+ * `frame.liveRegion` when the frame was normalised for `tool`; recomputed
69
+ * otherwise — a caller that built the frame without naming the tool (older
70
+ * call sites, tests) still gets the tool's own reading, never a stale one.
71
+ */
72
+ function liveRegionOf(frame, tool) {
73
+ if (frame.liveRegion.tool === tool)
74
+ return frame.liveRegion;
75
+ return (0, live_region_1.locateLiveRegion)(live_region_specs_1.LIVE_REGION_SPECS[tool], tool, { raw: frame.raw, contentLines: frame.contentLines });
76
+ }
77
+ /** `frame` with its live region located for `tool` (the same object when it already is). */
78
+ function withLiveRegion(frame, tool) {
79
+ const liveRegion = liveRegionOf(frame, tool);
80
+ return liveRegion === frame.liveRegion ? frame : { ...frame, liveRegion };
81
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * Every tool's live-region declaration, by tool (Issue #3183).
4
+ *
5
+ * A table of its own rather than a lookup through the detector registry:
6
+ * `normalizeFrame` reads it, and the detector modules import `normalizeFrame`,
7
+ * so going through `registry.ts` would close an import cycle. Each detector
8
+ * declares the same object as its `ToolDetectorSpec.liveRegion`, and
9
+ * `detector-contract.test.ts` holds the two to identity.
10
+ *
11
+ * `gemini` and `vibe-local` have no measured frames and no declaration: their
12
+ * frames carry the whole-frame region, which is the pre-#3183 reading.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.LIVE_REGION_SPECS = void 0;
16
+ const live_region_1 = require("./antigravity/live-region");
17
+ const live_region_2 = require("./claude/live-region");
18
+ const live_region_3 = require("./codex/live-region");
19
+ const live_region_4 = require("./command-code/live-region");
20
+ const live_region_5 = require("./copilot/live-region");
21
+ const live_region_6 = require("./opencode/live-region");
22
+ const live_region_7 = require("./opencode-v2/live-region");
23
+ exports.LIVE_REGION_SPECS = {
24
+ claude: live_region_2.CLAUDE_LIVE_REGION,
25
+ codex: live_region_3.CODEX_LIVE_REGION,
26
+ antigravity: live_region_1.ANTIGRAVITY_LIVE_REGION,
27
+ 'command-code': live_region_4.COMMAND_CODE_LIVE_REGION,
28
+ copilot: live_region_5.COPILOT_LIVE_REGION,
29
+ opencode: live_region_6.OPENCODE_LIVE_REGION,
30
+ 'opencode-v2': live_region_7.OPENCODE_V2_LIVE_REGION,
31
+ };