commandmate 0.30.2 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +160 -160
  3. package/.next/app-path-routes-manifest.json +27 -27
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update-check/route.js +1 -1
  12. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  14. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  15. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js +3 -3
  26. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/terminal/route.js +4 -4
  29. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js +1 -1
  32. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/capabilities/route.js +1 -1
  38. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  47. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  48. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  50. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  51. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  53. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  54. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  65. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  66. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/repositories/clone/route.js +1 -1
  68. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  69. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/restore/route.js +1 -1
  72. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  73. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/route.js +1 -1
  75. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/scan/route.js +1 -1
  78. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  79. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/sync/route.js +1 -1
  81. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  85. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  86. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route.js +1 -1
  90. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/skills/route.js +1 -1
  95. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/slash-commands/route.js +1 -1
  97. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  107. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  110. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  113. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  150. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  153. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  156. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  175. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +4 -3
  177. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/schedules/route.js +4 -3
  180. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
  186. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/route.js +1 -1
  221. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/chat/page.js +2 -2
  224. package/.next/server/app/chat/page.js.nft.json +1 -1
  225. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  227. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/more/page.js +2 -2
  229. package/.next/server/app/more/page.js.nft.json +1 -1
  230. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  231. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  232. package/.next/server/app/page.js +1 -1
  233. package/.next/server/app/page.js.nft.json +1 -1
  234. package/.next/server/app/page_client-reference-manifest.js +1 -1
  235. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/repositories/page.js +2 -2
  237. package/.next/server/app/repositories/page.js.nft.json +1 -1
  238. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  239. package/.next/server/app/review/page.js +1 -1
  240. package/.next/server/app/review/page.js.nft.json +1 -1
  241. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/sessions/page.js +1 -1
  243. package/.next/server/app/sessions/page.js.nft.json +1 -1
  244. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  245. package/.next/server/app/skills/[skillId]/page.js +2 -2
  246. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  247. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/skills/installed/page.js +2 -2
  249. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  250. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  251. package/.next/server/app/skills/page.js +1 -1
  252. package/.next/server/app/skills/page.js.nft.json +1 -1
  253. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  254. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  255. package/.next/server/app/worktrees/[id]/page.js +10 -10
  256. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  257. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  258. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  259. package/.next/server/app-paths-manifest.json +27 -27
  260. package/.next/server/chunks/1058.js +1 -1
  261. package/.next/server/chunks/1068.js +1 -1
  262. package/.next/server/chunks/1262.js +1 -1
  263. package/.next/server/chunks/1886.js +3 -3
  264. package/.next/server/chunks/1990.js +103 -0
  265. package/.next/server/chunks/2119.js +1 -1
  266. package/.next/server/chunks/2328.js +1 -1
  267. package/.next/server/chunks/2404.js +1 -1
  268. package/.next/server/chunks/2445.js +1 -1
  269. package/.next/server/chunks/261.js +1 -1
  270. package/.next/server/chunks/3123.js +1 -1
  271. package/.next/server/chunks/3241.js +1 -1
  272. package/.next/server/chunks/3480.js +5 -4
  273. package/.next/server/chunks/4299.js +1 -1
  274. package/.next/server/chunks/4393.js +1 -1
  275. package/.next/server/chunks/4443.js +1 -5
  276. package/.next/server/chunks/5017.js +1 -1
  277. package/.next/server/chunks/5043.js +1 -1
  278. package/.next/server/chunks/5164.js +1 -1
  279. package/.next/server/chunks/552.js +2 -2
  280. package/.next/server/chunks/6072.js +1 -1
  281. package/.next/server/chunks/6130.js +1 -1
  282. package/.next/server/chunks/663.js +4 -3
  283. package/.next/server/chunks/6894.js +2 -2
  284. package/.next/server/chunks/7187.js +1 -0
  285. package/.next/server/chunks/7472.js +1 -1
  286. package/.next/server/chunks/{880.js → 7859.js} +6 -6
  287. package/.next/server/chunks/7905.js +1 -1
  288. package/.next/server/chunks/8800.js +2 -2
  289. package/.next/server/chunks/8918.js +7 -0
  290. package/.next/server/chunks/9123.js +2 -2
  291. package/.next/server/chunks/9130.js +4 -4
  292. package/.next/server/chunks/9627.js +1 -1
  293. package/.next/server/chunks/9696.js +1 -1
  294. package/.next/server/chunks/9798.js +1 -1
  295. package/.next/server/middleware-manifest.json +5 -5
  296. package/.next/server/pages/500.html +1 -1
  297. package/.next/server/pages-manifest.json +1 -1
  298. package/.next/server/server-reference-manifest.json +1 -1
  299. package/.next/static/chunks/1783-11c9b4d8a52ebd91.js +1 -0
  300. package/.next/static/chunks/4718-de1224c9e8a6e7fc.js +1 -0
  301. package/.next/static/chunks/6022-2fa0b5a82d4ce7b6.js +1 -0
  302. package/.next/static/chunks/{5229-6c89475b61bd2c8b.js → 6170-951b9f5fe6b4b3b5.js} +1 -1
  303. package/.next/static/chunks/app/chat/{page-9aa2011410895b0d.js → page-37d7615d17d7e2a0.js} +1 -1
  304. package/.next/static/chunks/app/layout-4c2f21e3f653ee4c.js +1 -0
  305. package/.next/static/chunks/app/more/{page-333bba1c8bbc9c11.js → page-353a3924e6d7968e.js} +1 -1
  306. package/.next/static/chunks/app/{page-214f7ffa13a0cf10.js → page-c2bf871d953a1d6f.js} +1 -1
  307. package/.next/static/chunks/app/repositories/{page-4951cac905e50224.js → page-7d0f26df0537254c.js} +1 -1
  308. package/.next/static/chunks/app/review/{page-a0899b2d285318c3.js → page-e3f141b2829973e9.js} +1 -1
  309. package/.next/static/chunks/app/sessions/{page-fb36145ec732092a.js → page-53f188ed9ca49e5f.js} +1 -1
  310. package/.next/static/chunks/app/skills/[skillId]/{page-9099e26b60442873.js → page-80569b720aea59cc.js} +1 -1
  311. package/.next/static/chunks/app/skills/installed/{page-182e32368696d824.js → page-dbd2690ad72da95b.js} +1 -1
  312. package/.next/static/chunks/app/skills/{page-d3fdc88239ebe0ab.js → page-dacd36f9c11aa7da.js} +1 -1
  313. package/.next/static/chunks/app/worktrees/[id]/page-97205088520255a5.js +1 -0
  314. package/.next/static/css/5c13ea243dfdcb66.css +1 -0
  315. package/.next/trace +13 -13
  316. package/README.md +37 -11
  317. package/dist/cli/commands/attach.d.ts +50 -0
  318. package/dist/cli/commands/attach.d.ts.map +1 -0
  319. package/dist/cli/commands/attach.js +204 -0
  320. package/dist/cli/commands/capture.d.ts.map +1 -1
  321. package/dist/cli/commands/capture.js +114 -0
  322. package/dist/cli/commands/instances.d.ts.map +1 -1
  323. package/dist/cli/commands/instances.js +23 -2
  324. package/dist/cli/commands/ls.d.ts.map +1 -1
  325. package/dist/cli/commands/ls.js +41 -1
  326. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  327. package/dist/cli/config/cli-dependencies.js +34 -0
  328. package/dist/cli/program.d.ts.map +1 -1
  329. package/dist/cli/program.js +5 -0
  330. package/dist/cli/types/index.d.ts +36 -0
  331. package/dist/cli/types/index.d.ts.map +1 -1
  332. package/dist/config/tmux-pane-config.d.ts +153 -0
  333. package/dist/config/tmux-pane-config.d.ts.map +1 -0
  334. package/dist/config/tmux-pane-config.js +172 -0
  335. package/dist/lib/cli-tools/session-name.d.ts +44 -0
  336. package/dist/lib/cli-tools/session-name.d.ts.map +1 -0
  337. package/dist/lib/cli-tools/session-name.js +57 -0
  338. package/dist/lib/cli-tools/types.d.ts +1 -1
  339. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  340. package/dist/lib/cli-tools/types.js +6 -1
  341. package/dist/lib/cli-tools/validation.d.ts +34 -0
  342. package/dist/lib/cli-tools/validation.d.ts.map +1 -0
  343. package/dist/lib/cli-tools/validation.js +41 -0
  344. package/dist/lib/detection/status-reason.d.ts +18 -0
  345. package/dist/lib/detection/status-reason.d.ts.map +1 -1
  346. package/dist/lib/detection/status-reason.js +18 -0
  347. package/dist/lib/detection/tools/verified-against.d.ts +57 -7
  348. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  349. package/dist/lib/detection/tools/verified-against.js +59 -8
  350. package/dist/lib/detection/version-probes.d.ts +26 -5
  351. package/dist/lib/detection/version-probes.d.ts.map +1 -1
  352. package/dist/lib/detection/version-probes.js +28 -6
  353. package/dist/lib/session/tmux-session-surface.d.ts +369 -0
  354. package/dist/lib/session/tmux-session-surface.d.ts.map +1 -0
  355. package/dist/lib/session/tmux-session-surface.js +525 -0
  356. package/dist/server/src/config/cli-tool-timing-config.js +12 -1
  357. package/dist/server/src/config/detection-evidence-config.js +5 -0
  358. package/dist/server/src/config/schedule-config.js +28 -1
  359. package/dist/server/src/lib/cli-tools/antigravity.js +2 -2
  360. package/dist/server/src/lib/cli-tools/base.js +13 -8
  361. package/dist/server/src/lib/cli-tools/claude.js +20 -0
  362. package/dist/server/src/lib/cli-tools/codex.js +205 -61
  363. package/dist/server/src/lib/cli-tools/command-code.js +349 -0
  364. package/dist/server/src/lib/cli-tools/composer-spec.js +6 -0
  365. package/dist/server/src/lib/cli-tools/copilot.js +2 -2
  366. package/dist/server/src/lib/cli-tools/gemini.js +2 -2
  367. package/dist/server/src/lib/cli-tools/graceful-exit.js +16 -1
  368. package/dist/server/src/lib/cli-tools/index.js +4 -1
  369. package/dist/server/src/lib/cli-tools/install-hints.js +131 -0
  370. package/dist/server/src/lib/cli-tools/liveness-spec.js +18 -0
  371. package/dist/server/src/lib/cli-tools/manager.js +2 -0
  372. package/dist/server/src/lib/cli-tools/opencode.js +2 -2
  373. package/dist/server/src/lib/cli-tools/start-availability.js +18 -11
  374. package/dist/server/src/lib/cli-tools/types.js +6 -1
  375. package/dist/server/src/lib/cli-tools/vibe-local.js +2 -2
  376. package/dist/server/src/lib/cmate-parser.js +6 -0
  377. package/dist/server/src/lib/detection/cli-patterns.js +441 -8
  378. package/dist/server/src/lib/detection/opencode-modal-overlay.js +66 -100
  379. package/dist/server/src/lib/detection/selection-shape.js +341 -0
  380. package/dist/server/src/lib/detection/sgr-background.js +210 -0
  381. package/dist/server/src/lib/detection/status-detector.js +6 -0
  382. package/dist/server/src/lib/detection/status-reason.js +18 -0
  383. package/dist/server/src/lib/detection/tools/antigravity/detect.js +38 -15
  384. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +392 -0
  385. package/dist/server/src/lib/detection/tools/codex/detect.js +83 -2
  386. package/dist/server/src/lib/detection/tools/command-code/detect.js +159 -0
  387. package/dist/server/src/lib/detection/tools/registry.js +6 -4
  388. package/dist/server/src/lib/detection/tools/verified-against.js +59 -8
  389. package/dist/server/src/lib/detection/version-probes.js +28 -6
  390. package/dist/server/src/lib/hooks/sources/antigravity/history.js +77 -16
  391. package/dist/server/src/lib/hooks/sources/claude/history.js +94 -18
  392. package/dist/server/src/lib/hooks/sources/codex/history.js +84 -15
  393. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +130 -17
  394. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +145 -0
  395. package/dist/server/src/lib/hooks/sources/command-code/history.js +865 -0
  396. package/dist/server/src/lib/hooks/sources/command-code/hooks-config.js +390 -0
  397. package/dist/server/src/lib/hooks/sources/command-code/source.js +290 -0
  398. package/dist/server/src/lib/hooks/sources/command-code/tool-id.js +18 -0
  399. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +604 -0
  400. package/dist/server/src/lib/hooks/sources/index.js +3 -1
  401. package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -3
  402. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +24 -28
  403. package/dist/server/src/lib/hooks/sources/registry.js +4 -0
  404. package/dist/server/src/lib/hooks/sources/turn-body.js +77 -19
  405. package/dist/server/src/lib/job-executor.js +12 -0
  406. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +6 -0
  407. package/dist/server/src/lib/polling/response-checker.js +112 -7
  408. package/dist/server/src/lib/polling/structured-history-gate.js +15 -8
  409. package/dist/server/src/lib/realtime/types.js +15 -5
  410. package/dist/server/src/lib/response-cleaner.js +24 -1
  411. package/dist/server/src/lib/response-extractor.js +11 -0
  412. package/dist/server/src/lib/session/claude-executor.js +223 -4
  413. package/dist/server/src/lib/session/cli-session.js +52 -0
  414. package/dist/server/src/lib/session/tmux-session-surface.js +525 -0
  415. package/dist/server/src/lib/skills/compatibility-matrix.js +117 -1
  416. package/dist/server/src/lib/tmux/geometry-delegation.js +143 -0
  417. package/dist/server/src/lib/tmux/read-mode-pager.js +76 -10
  418. package/dist/server/src/lib/tmux/read-mode.js +44 -2
  419. package/dist/server/src/lib/tmux/session-hook-scripts.js +249 -0
  420. package/dist/server/src/lib/tmux/session-hooks.js +122 -0
  421. package/dist/server/src/lib/tmux/session-status-options.js +213 -0
  422. package/dist/server/src/lib/tmux/tmux.js +79 -2
  423. package/dist/server/src/lib/version-checker.js +110 -0
  424. package/dist/server/src/lib/ws-server.js +16 -10
  425. package/dist/server/src/types/agent-transcript.js +73 -1
  426. package/dist/server/src/types/terminal-keys.js +131 -3
  427. package/dist/types/terminal-keys.d.ts +100 -3
  428. package/dist/types/terminal-keys.d.ts.map +1 -1
  429. package/dist/types/terminal-keys.js +131 -3
  430. package/package.json +1 -1
  431. package/.next/server/chunks/3099.js +0 -5
  432. package/.next/server/chunks/7824.js +0 -1
  433. package/.next/static/chunks/3916-0e929d089282dc5d.js +0 -1
  434. package/.next/static/chunks/6022-7a7d1760fc9814c7.js +0 -1
  435. package/.next/static/chunks/6381-147dde2a967e9458.js +0 -1
  436. package/.next/static/chunks/app/layout-6a26ea22d5cf03dc.js +0 -1
  437. package/.next/static/chunks/app/worktrees/[id]/page-2f73d69187936627.js +0 -1
  438. package/.next/static/css/23f9c40ecc458c77.css +0 -1
  439. /package/.next/static/{QXxQbXWoo7ldUyOcv7PCZ → nXW4dPkpE_9xUf_9ySRff}/_buildManifest.js +0 -0
  440. /package/.next/static/{QXxQbXWoo7ldUyOcv7PCZ → nXW4dPkpE_9xUf_9ySRff}/_ssgManifest.js +0 -0
@@ -4,8 +4,8 @@
4
4
  * Shared between response-poller.ts and API routes
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_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_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_STATUS_BAR_PATTERN = exports.CODEX_PAGER_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_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.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = 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 = void 0;
7
+ 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_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_STATUS_BAR_PATTERN = exports.CODEX_PAGER_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_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_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NUMBERED_DIALOG_QUESTION_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = 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 = void 0;
9
9
  exports.isCodexTurnActive = isCodexTurnActive;
10
10
  exports.findClaudeChromeStart = findClaudeChromeStart;
11
11
  exports.isCodexPromptReady = isCodexPromptReady;
@@ -19,6 +19,8 @@ exports.readCopilotStatusBar = readCopilotStatusBar;
19
19
  exports.findCopilotChromeStart = findCopilotChromeStart;
20
20
  exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
21
21
  exports.isCopilotFolderTrustDialog = isCopilotFolderTrustDialog;
22
+ exports.isAntigravityNumberedDialog = isAntigravityNumberedDialog;
23
+ exports.findCommandCodeChromeStart = findCommandCodeChromeStart;
22
24
  exports.detectThinking = detectThinking;
23
25
  exports.getCliToolPatterns = getCliToolPatterns;
24
26
  exports.stripBoxDrawing = stripBoxDrawing;
@@ -1302,10 +1304,38 @@ exports.COPILOT_SEPARATOR_PATTERN = /^─{10,}$/m;
1302
1304
  const COPILOT_STATUS_BAR_MAX_ROWS = 2;
1303
1305
  /** How many rows copilot's composer may span before the block stops looking like chrome. */
1304
1306
  const COPILOT_COMPOSER_MAX_ROWS = 40;
1305
- /** A full-width horizontal rule, with or without the pane's leading padding. */
1306
- const COPILOT_RULE_ROW = /^─{10,}$/;
1307
- /** copilot's composer glyph: legacy `>` and current `❯`, at the pane's own indent. */
1308
- const COPILOT_COMPOSER_GLYPH = /^ {0,2}[>❯]/;
1307
+ /**
1308
+ * One of the two rows that fence copilot's composer.
1309
+ *
1310
+ * Two renderings of one thing, because copilot redrew its composer between the
1311
+ * builds this file is measured against (Issue #2269):
1312
+ *
1313
+ * - **1.0.80** fences it with a full-width horizontal rule, `─` to the pane's
1314
+ * width, above and below.
1315
+ * - **1.0.82** fences it with a half-block frame instead: `╻` (U+257B) followed
1316
+ * by `▄` to the pane's width above, `╹` (U+2579) followed by `▀` below.
1317
+ *
1318
+ * The corner glyph is REQUIRED on the 1.0.82 forms and that is load-bearing, not
1319
+ * decoration. 1.0.82 also boxes the echoed user prompt in the transcript between
1320
+ * two dividers of the same half blocks — `tests/unit/lib/detection/fixtures/
1321
+ * copilot-live-2269/turn-complete.txt` rows 10 and 12 — and those carry no
1322
+ * corner. Accepting a bare `▄`/`▀` run here would let the newest echo's box be
1323
+ * read as the composer, which would put `findCopilotChromeStart` ~985 rows too
1324
+ * high and delete the reply along with the chrome.
1325
+ */
1326
+ const COPILOT_RULE_ROW = /^(?:─{10,}|╻▄{10,}|╹▀{10,})$/;
1327
+ /**
1328
+ * copilot's composer glyph, at the pane's own indent.
1329
+ *
1330
+ * `>` is the legacy spelling, `❯` is 1.0.80's. 1.0.82 draws no prompt glyph in
1331
+ * the composer at all: the row is the frame's left edge, `┃` (U+2503), and the
1332
+ * operator's text follows it (`copilot-live-2269/boot-idle.txt` row 998 is the
1333
+ * bare glyph on an empty composer). `┃` is safe to accept here even though the
1334
+ * reasoning block's rows also start with a vertical — that one is `│` (U+2502,
1335
+ * {@link COPILOT_BOX_ROW_PATTERN}) — and in any case this test is only ever
1336
+ * applied to the single row between two fence rows, never to a window.
1337
+ */
1338
+ const COPILOT_COMPOSER_GLYPH = /^ {0,2}[>❯┃]/;
1309
1339
  /**
1310
1340
  * Locate the start of copilot CLI's bottom-pinned chrome within a captured pane
1311
1341
  * (Issue #1897).
@@ -1321,6 +1351,21 @@ const COPILOT_COMPOSER_GLYPH = /^ {0,2}[>❯]/;
1321
1351
  * ──────────────────── ← closing rule
1322
1352
  * ◉ Working · 1.5 KiB esc interrupt GPT-5.6 Terra ← status bar
1323
1353
  *
1354
+ * Issue #2269 re-measured the same five rows on 1.0.82, where the fence and the
1355
+ * composer are drawn differently but the layout is unchanged:
1356
+ *
1357
+ * <cwd> Session: N AIC used
1358
+ * ╻▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ← opening frame
1359
+ * ┃<composer>
1360
+ * ╹▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ← closing frame
1361
+ * ← open sidebar · / commands · ? help · tab next tab GPT-5.6 Terra
1362
+ *
1363
+ * Both spellings live in {@link COPILOT_RULE_ROW} and
1364
+ * {@link COPILOT_COMPOSER_GLYPH}; the search below is unchanged. Until they were
1365
+ * added this function returned -1 on every 1.0.82 frame, `contentEnd` fell back
1366
+ * to the whole pane, and the saved reply opened with 199 `▀` and ended with the
1367
+ * `← open sidebar …` footer -- #2269's headline symptom.
1368
+ *
1324
1369
  * The boundary is found structurally -- closing rule, opening rule, composer
1325
1370
  * glyph -- and never by matching the status bar's wording. That is the same
1326
1371
  * reasoning {@link findClaudeChromeStart} records (#1289) plus the measurement
@@ -1416,6 +1461,79 @@ exports.COPILOT_REASONING_HEADER_PATTERN = /^\s*⌄\s/;
1416
1461
  * reply cannot be mistaken for a new turn boundary.
1417
1462
  */
1418
1463
  exports.COPILOT_USER_ECHO_PATTERN = /^ {0,2}[>❯]\s+\S/;
1464
+ /**
1465
+ * One of the half-block dividers copilot 1.0.82 boxes a transcript row with
1466
+ * (Issue #2269).
1467
+ *
1468
+ * 1.0.80 drew the echoed prompt as a single bare ` ❯ <text>` row. 1.0.82 draws
1469
+ * a full-width `▄` run above it and a full-width `▀` run below it
1470
+ * (`copilot-live-2269/turn-complete.txt` rows 10 and 12):
1471
+ *
1472
+ * ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
1473
+ * ❯ Reply with exactly the word: uat-run1 00:27
1474
+ * ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
1475
+ * ● uat-run1
1476
+ *
1477
+ * {@link COPILOT_SKIP_PATTERNS}' `/[█▘▝▖▗▔▄▌▐]/` rule already dropped the `▄`
1478
+ * row. `▀` (U+2580) was not in that class, so the row BELOW the echo survived --
1479
+ * and extraction starts one row past the echo, which made a wall of 199 `▀` the
1480
+ * first line of every saved 1.0.82 reply.
1481
+ *
1482
+ * Deliberately not "add `▀` to that character class": this requires a run of ten
1483
+ * or more and nothing else on the row, so a reply that happens to use a single
1484
+ * half block as a glyph is untouched. The optional leading corner accepts the
1485
+ * composer's own fence rows (`╻▄…` / `╹▀…`) as well, which is defence in depth
1486
+ * only -- {@link findCopilotChromeStart} cuts those structurally, and this rule
1487
+ * is what stops them reaching History if a future build moves the fence again.
1488
+ */
1489
+ exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = /^\s*[╻╹]?[▀▄]{10,}\s*$/;
1490
+ /**
1491
+ * The verbs copilot prints on a tool row, as a regex alternation source.
1492
+ *
1493
+ * One list, shared by {@link COPILOT_TOOL_ROW_PATTERN} here and by
1494
+ * `COPILOT_TOOL_ACTION_PATTERN` in `response-cleaner.ts`: the two match the same
1495
+ * vocabulary behind different markers, and a verb added to one and not the other
1496
+ * is a leak nothing fails on.
1497
+ *
1498
+ * `Asked user` / `Asking user` are Issue #2269's addition. copilot answers a
1499
+ * prompt it cannot act on by calling its ask-user tool, and the row it leaves in
1500
+ * the transcript (`● Asked user What would you like me to help with?`, measured
1501
+ * in `copilot-live-2269/turn-oneword-echo-askuser.txt`) was being saved as the
1502
+ * agent's reply -- the "launch screen as the answer" the Issue reports.
1503
+ */
1504
+ exports.COPILOT_TOOL_VERBS = 'Get|Read|Run|Search|Write|Edit|Delete|List|Create|Fetch|Explore|Execute|Install|Asked user|Asking user|Model changed to:';
1505
+ /**
1506
+ * copilot 1.0.82's tool row, whose marker is a file-type badge (Issue #2269).
1507
+ *
1508
+ * 1.0.80 drew every tool row as `● <Verb> …` and `COPILOT_TOOL_ACTION_PATTERN`
1509
+ * reads exactly that. 1.0.82 puts a short badge for the file the tool touched in
1510
+ * front of the verb instead, and only falls back to `●` for a type it has no
1511
+ * badge for. Measured verbatim over
1512
+ * `copilot-live-2269/turn-tool-badges.txt` and `turn-tool-rows.txt`:
1513
+ *
1514
+ * / Search "a.ts" 1 file found
1515
+ * MD Read note.md L1:1 (1 line read)
1516
+ * TS Read a.ts 1 line read
1517
+ * PY Read c.py 1 line read
1518
+ * {} Read b.json 1 line read
1519
+ * ● Read d.txt 1 line read ← plain text keeps the 1.0.80 marker
1520
+ *
1521
+ * So the badge is `/`, `{}`, or two to four upper-case characters. Two is the
1522
+ * floor on purpose: a one-character class would also match the pronoun in an
1523
+ * English sentence ("I Read the file"), and no measured badge is one character.
1524
+ * `●` is left to `COPILOT_TOOL_ACTION_PATTERN`, which is the rule that already
1525
+ * owns it -- copilot's own prose is `● <text>` too (`● done`, `● 対象ファイルを
1526
+ * 確認して内容を読み込みます。`), and only the verb list separates the two.
1527
+ *
1528
+ * The `$` badge is absent for the same reason: `$ Shell Print requested text 2
1529
+ * lines…` opens a BLOCK whose command rows follow, which is
1530
+ * `COPILOT_TOOL_INVOCATION_PATTERN`'s job, and `Shell` is not in the verb list
1531
+ * anyway.
1532
+ *
1533
+ * No /g flag (S4-5: would make test() stateful). No quantifier nested inside
1534
+ * another (SEC4-001: ReDoS safe).
1535
+ */
1536
+ exports.COPILOT_TOOL_ROW_PATTERN = new RegExp(`^\\s*(?:\\/|\\{\\}|[A-Z][A-Z0-9+#]{1,3})\\s+(?:${exports.COPILOT_TOOL_VERBS})[\\s:]`);
1419
1537
  /**
1420
1538
  * A wrapped continuation of the copilot transcript row above it (Issue #1897).
1421
1539
  *
@@ -1446,6 +1564,12 @@ exports.COPILOT_BOOT_BANNER_ANCHORS = [
1446
1564
  /^\s*(?:●\s+)?Tip:\s*\//m,
1447
1565
  /Describe a task to get started/,
1448
1566
  /Prefer a visual workspace\?/,
1567
+ // Issue #2269: copilot's greeting for a prompt it cannot act on. It arrives
1568
+ // through the ask-user tool, so the row that reaches the transcript is
1569
+ // `● Asked user Hi — what would you like to work on?` and the dialog's own
1570
+ // body repeats the question. Both are chrome for a turn that produced no
1571
+ // answer, and the operator saw the greeting saved as the agent's reply.
1572
+ /what would you like to work on\?/i,
1449
1573
  ];
1450
1574
  /**
1451
1575
  * The key-hint footer copilot draws under a picker, matched one ROW at a time
@@ -1632,6 +1756,20 @@ exports.COPILOT_SKIP_PATTERNS = [
1632
1756
  exports.COPILOT_SELECTION_FOOTER_PATTERN,
1633
1757
  // Collapsed reasoning header (Issue #1897): "⌄ Thinking…" / "⌄ Thought for 41s"
1634
1758
  exports.COPILOT_REASONING_HEADER_PATTERN,
1759
+ // 1.0.82's transcript dividers and badge-marked tool rows (Issue #2269)
1760
+ exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN,
1761
+ exports.COPILOT_TOOL_ROW_PATTERN,
1762
+ // Issue #2269: the anchored box-row rule, so the raw-row consumer agrees with
1763
+ // the accumulator. `[╭╮╰╯│]` below is unanchored and omits `└`, which is the
1764
+ // glyph copilot opens a detail row with (` └ Enable all permissions (tools,
1765
+ // paths, and URLs)` under the launch screen's tip). `normalizeCopilotLine`
1766
+ // deletes every U+2500..U+257F glyph, so by the time the skip patterns run in
1767
+ // `cleanCopilotResponse` that row reads as prose -- which is how the ONE row
1768
+ // of the 1.0.82 launch screen that no other rule caught became the agent's
1769
+ // first reply. `extractCopilotContentLines` already tests this pattern before
1770
+ // normalising (#1897); adding it here is what gives `extractResponse`, which
1771
+ // never normalises, the same answer.
1772
+ exports.COPILOT_BOX_ROW_PATTERN,
1635
1773
  // Logo/banner lines
1636
1774
  /^GitHub Copilot\s+v/,
1637
1775
  /[█▘▝▖▗▔▄▌▐]/,
@@ -1644,8 +1782,19 @@ exports.COPILOT_SKIP_PATTERNS = [
1644
1782
  /^ctrl\+[a-z]\s+\w/,
1645
1783
  // Prompt lines
1646
1784
  /^[❯>]\s*(Type\s+@|$)/,
1647
- // Tip/hint lines
1648
- /^Tip:\s+\//,
1785
+ // Tip/hint lines. Issue #2269 added the `●` marker: 1.0.82 draws the launch
1786
+ // screen's tip as `● Tip: /allow-all`, and `cleanCopilotResponse` strips the
1787
+ // bullet only AFTER the skip patterns have run, so the bare form never
1788
+ // matched and the tip was the one banner row that reached History.
1789
+ /^\s*(?:●\s+)?Tip:\s*\//,
1790
+ // Issue #2269: copilot's own tab bar, the top row of every 1.0.82 frame. It is
1791
+ // the second banner row the launch screen leaked (the logo, the disclaimer and
1792
+ // the tip's `└ …` detail row are all caught by the glyph rules above), and
1793
+ // between them they are the whole difference between "the launch screen cleans
1794
+ // to nothing and cannot be saved" and "History opens with the banner". Spelled
1795
+ // out in full rather than as a keyword so a reply that mentions one of these
1796
+ // words is untouched.
1797
+ /^\s*Current\s+Sessions\s+Issues\s+Pull requests\s+Gists\s*$/,
1649
1798
  // Initial display text
1650
1799
  /^Describe a task to get started/,
1651
1800
  // Issue #571: Disclaimer, initialization message, environment info
@@ -1711,6 +1860,50 @@ exports.ANTIGRAVITY_SEPARATOR_PATTERN = /^─{3,}$/m;
1711
1860
  * No `.*` at all (SEC4-001: ReDoS safe — strictly safer than the #995 form).
1712
1861
  */
1713
1862
  exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = /Switch Model|↑\/↓\s*Navigate/m;
1863
+ /**
1864
+ * The question line agy draws above its numbered permission dialog
1865
+ * (Issue #2270; measured on agy 1.1.25, pane 200x1000, 2026-09-04).
1866
+ *
1867
+ * Anchored to the whole line so a model's prose that merely quotes the phrase
1868
+ * inside a sentence cannot match it.
1869
+ */
1870
+ exports.ANTIGRAVITY_NUMBERED_DIALOG_QUESTION_PATTERN = /^\s*Do you want to proceed\?\s*$/m;
1871
+ /**
1872
+ * One numbered option row of that dialog: `> 1. Yes`, ` 4. No`.
1873
+ *
1874
+ * The `>` gutter marks the highlighted row and is optional, because only one of
1875
+ * the four rows carries it.
1876
+ */
1877
+ exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = /^\s*>?\s*\d+\.\s+\S/m;
1878
+ /**
1879
+ * Is this frame agy's NUMBERED permission dialog rather than one of its
1880
+ * arrow-key-only pickers? (Issue #2270)
1881
+ *
1882
+ * Both agy screens share the `↑/↓ Navigate` footer that
1883
+ * {@link ANTIGRAVITY_SELECTION_LIST_PATTERN} matches, which is why #997 could
1884
+ * widen that pattern to cover the permission menu — and why the menu then
1885
+ * resolved as `antigravity_selection_list`, `hasActivePrompt: false`. On the
1886
+ * chat surface that reads as "a selection list is open, drive it from the
1887
+ * terminal": the arrow buttons can only Enter the highlighted option 1, so
1888
+ * options 2-4 became unreachable, while the poller and the push notification
1889
+ * described the very same frame as a `multiple_choice` prompt.
1890
+ *
1891
+ * The discriminator is the pair below, not the footer:
1892
+ *
1893
+ * - `Do you want to proceed?` on its own line, and
1894
+ * - at least one `N. label` row.
1895
+ *
1896
+ * The Switch Model picker has neither (its rows are unnumbered model names and
1897
+ * its header is `Switch Model`), so it keeps the #995 reading. Every other agy
1898
+ * arrow-key TUI keeps it too — this is deliberately a rule about the ONE dialog
1899
+ * whose frames were measured, not a general "numbers mean prompt" inference.
1900
+ *
1901
+ * Callers pass the same text they hand {@link ANTIGRAVITY_SELECTION_LIST_PATTERN}.
1902
+ */
1903
+ function isAntigravityNumberedDialog(text) {
1904
+ return (exports.ANTIGRAVITY_NUMBERED_DIALOG_QUESTION_PATTERN.test(text) &&
1905
+ exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN.test(text));
1906
+ }
1714
1907
  /**
1715
1908
  * Antigravity (agy) skip patterns for response cleaning (Issue #988)
1716
1909
  * Filters turn/input-box separators, the bare ">" input prompt, the idle status
@@ -1725,6 +1918,230 @@ exports.ANTIGRAVITY_SKIP_PATTERNS = [
1725
1918
  /[▄▀█▌▐]/, // Banner block art (defensive; normally above the user-prompt anchor)
1726
1919
  exports.PASTED_TEXT_PATTERN, // [Pasted text #N +XX lines]
1727
1920
  ];
1921
+ /**
1922
+ * Command Code status-line spinner glyphs (Issue #2250).
1923
+ *
1924
+ * The complete `getWaveSymbol` frame set, read off the shipped bundle
1925
+ * (`command-code@1.40.1`, `dist/cli.mjs`):
1926
+ * `["·","○","◇","☆","✧","☆","◇","○","⌘"]` — six distinct glyphs, cycled.
1927
+ *
1928
+ * Deliberately NOT folded into {@link CLAUDE_SPINNER_CHARS}. Command Code marks
1929
+ * every assistant message with `⠶` (U+2836, see
1930
+ * {@link COMMAND_CODE_RESPONSE_MARKER_PATTERN}); adding that braille glyph to a
1931
+ * shared spinner class would make each reply's own first row read as "still
1932
+ * generating", and adding these glyphs to claude's class would do the same to
1933
+ * any claude reply that opens with `·`.
1934
+ */
1935
+ exports.COMMAND_CODE_SPINNER_CHARS = ['·', '○', '◇', '☆', '✧', '⌘'];
1936
+ /**
1937
+ * Command Code composer / dialog-cursor prompt pattern (Issue #2250).
1938
+ *
1939
+ * `❯` (U+276F) only — the ASCII `>` claude also accepts is not a glyph Command
1940
+ * Code 1.40.1 draws, and accepting it here would make every shell prompt and
1941
+ * every quoted diff line in a reply look like a composer.
1942
+ *
1943
+ * The row is drawn in two places, which is why prompt presence alone is not
1944
+ * "ready": the bottom-pinned composer (`❯ Ask your question...` between two
1945
+ * full-width rules) and the highlighted option of a permission dialog
1946
+ * (`❯ 1. Yes`). Completion is resolved structurally instead — see
1947
+ * {@link findCommandCodeChromeStart}.
1948
+ */
1949
+ exports.COMMAND_CODE_PROMPT_PATTERN = /^❯(\s*$|\s+\S)/m;
1950
+ /**
1951
+ * Command Code separator pattern (Issue #2250).
1952
+ *
1953
+ * Full-pane runs of U+2500 fence the composer above and below, and one more is
1954
+ * drawn above a permission dialog. Measured at 200 columns on every fixture in
1955
+ * `tests/fixtures/command-code-live-2250/`.
1956
+ */
1957
+ exports.COMMAND_CODE_SEPARATOR_PATTERN = /^─{10,}$/m;
1958
+ /**
1959
+ * Command Code status-line "esc to interrupt" hint (Issue #2250).
1960
+ *
1961
+ * The `Status` component renders `esc to interrupt • <elapsed> • ↓ <tokens>`
1962
+ * only in its `"all"` layout, i.e. at a terminal width of 72 columns or more
1963
+ * (read off the bundle's `layoutMode` ladder; CommandMate panes are 200 wide, so
1964
+ * production always takes that branch). Below 42 columns the whole tail is
1965
+ * dropped and only the spinner + verb remain — which is why
1966
+ * {@link COMMAND_CODE_THINKING_PATTERN} keeps the spinner branch as well.
1967
+ */
1968
+ exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = /esc to interrupt/;
1969
+ /**
1970
+ * Command Code thinking/processing pattern (Issue #2250).
1971
+ *
1972
+ * Three measured alternatives:
1973
+ *
1974
+ * 1. the status row — a spinner glyph, then a single word ending in `…`
1975
+ * (`⌘ Planning…`, `· Synthesizing…`; the bundle's verb table is 74
1976
+ * single-word entries, all capitalised, but the class is left case-agnostic
1977
+ * because the `status` prop is not restricted to that table). Anchored at
1978
+ * the start of the line with only leading spaces allowed, so the `·` in the
1979
+ * banner's
1980
+ * `# models: … · taste-1` row and in the idle footer's
1981
+ * `? for shortcuts · taste on` cannot reach it;
1982
+ * 2. `✻ Thinking…` — the reasoning block's header WHILE it streams. It becomes
1983
+ * `✻ Thought for 1 second [ctrl+o to expand]` once the block is closed, and
1984
+ * that past-tense form must NOT match: it sits in the transcript of every
1985
+ * finished turn (`turn-version.txt`);
1986
+ * 3. {@link COMMAND_CODE_INTERRUPT_HINT_PATTERN}, unanchored, for the same
1987
+ * reason claude's pattern carries it.
1988
+ */
1989
+ exports.COMMAND_CODE_THINKING_PATTERN = new RegExp(`^[^\\S\\n]*[${exports.COMMAND_CODE_SPINNER_CHARS.join('')}][^\\S\\n]+[A-Za-z]+…` +
1990
+ `|^[^\\S\\n]*✻ Thinking…` +
1991
+ `|${exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN.source}`, 'm');
1992
+ /**
1993
+ * Command Code assistant-message marker (Issue #2250).
1994
+ *
1995
+ * `⠶` (U+2836) at column 0, one space, then the reply. Fixed, not a spinner
1996
+ * frame: the bundle declares it as `Ct() ? "⠶" : "#"`, i.e. one constant with an
1997
+ * ASCII fallback for terminals without unicode support. That answers 親 Issue
1998
+ * #2249's 未確定事項 1 — the glyph does not rotate — and it is also why the `#`
1999
+ * fallback is deliberately NOT matched here: on such a terminal it is
2000
+ * indistinguishable from the `# Command Code v1.40.1` banner rows.
2001
+ *
2002
+ * Continuation rows of a multi-line reply are indented by two spaces (the marker
2003
+ * is one column wide and the body box carries `marginLeft: 1`).
2004
+ */
2005
+ exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = /^⠶(?:\s|$)/;
2006
+ /**
2007
+ * Command Code turn-completion marker (Issue #2250).
2008
+ *
2009
+ * **Advisory only — never require it to declare a turn finished.** Two measured
2010
+ * reasons: `WorkedDurationNote` renders nothing for a turn under 1000 ms, and
2011
+ * the row belongs to the live turn's UI rather than to the transcript — it is
2012
+ * present in `turn-version.txt` and GONE from `dialog-create-file.txt`, which is
2013
+ * the same pane one prompt later.
2014
+ */
2015
+ exports.COMMAND_CODE_COMPLETION_PATTERN = /^[^\S\n]*✻ Worked for /m;
2016
+ /**
2017
+ * Command Code footer mode indicator (Issue #2250).
2018
+ *
2019
+ * The row under the composer's closing rule. `? for shortcuts` is only the
2020
+ * DEFAULT-mode spelling: the bundle's `ModeIndicator` swaps it for a mode banner
2021
+ * in the other four permission modes, so a rule that keys on `? for shortcuts`
2022
+ * alone would stop recognising an idle pane the moment the operator pressed
2023
+ * shift+tab. All five spellings are listed.
2024
+ */
2025
+ exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = /\?\s+for\s+shortcuts|»\s+accept edits on|»\s+permission bypass on|»\s+don't-ask on|^[^\S\n]*plan mode\s/m;
2026
+ /**
2027
+ * Command Code startup banner rows (Issue #2250).
2028
+ *
2029
+ * The three-row header under the block-art logo — `# Command Code v1.40.1`,
2030
+ * `# models: …`, `# <cwd>` — plus the logo itself.
2031
+ *
2032
+ * The version row matches the tool's own NAME and version together, which is the
2033
+ * shape #2247 had to retreat to on claude: a bare `v\d+\.\d+` matched any reply
2034
+ * that mentioned a release, and the turn was silently dropped. Nothing here
2035
+ * matches a bare version string, a `│` table glyph, or a `Tip:` line.
2036
+ */
2037
+ exports.COMMAND_CODE_BANNER_PATTERNS = [
2038
+ /^#\s+Command Code v\d/, // Name + version, together
2039
+ /^#\s+models:\s/, // Model line
2040
+ /^#\s+[~/]/, // Working-directory line
2041
+ /^[^\S\n]*[█▀▄▌▐]{3,}/, // Block-art logo rows
2042
+ ];
2043
+ /**
2044
+ * Command Code hook notice row (Issue #2250).
2045
+ *
2046
+ * `◼ Ran 1 session start hook` — emitted into the transcript when SessionStart
2047
+ * hooks fire, so it lands ABOVE the first user echo and is chrome, not a reply.
2048
+ * Measured on a hooks-enabled 1.40.1 pane while capturing #2249's evidence.
2049
+ * Command Code's hook wiring itself is Phase B (#2251); this row only has to be
2050
+ * kept out of History.
2051
+ */
2052
+ exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = /^[^\S\n]*◼\s+Ran\s+\d+\s+.*hooks?\b/;
2053
+ /** How far above the last row Command Code's footer row may sit. */
2054
+ const COMMAND_CODE_FOOTER_MAX_ROWS = 4;
2055
+ /** How many rows the composer may span before the block stops looking like chrome. */
2056
+ const COMMAND_CODE_INPUT_BOX_MAX_ROWS = 40;
2057
+ /**
2058
+ * Locate the start of Command Code's bottom-pinned chrome within a captured pane.
2059
+ *
2060
+ * Command Code is inline-rendered, so its transcript grows downwards and the
2061
+ * last four rows of a settled pane are always the same four (measured on
2062
+ * `boot-idle.txt`, `turn-version.txt` and `turn-tool-write.txt`):
2063
+ *
2064
+ * ```text
2065
+ * ──────────────────── ← opening rule
2066
+ * ❯ Ask your question… ← composer (one row per wrapped line)
2067
+ * ──────────────────── ← closing rule
2068
+ * ? for shortcuts · taste on
2069
+ * ```
2070
+ *
2071
+ * Everything from the opening rule down is terminal furniture. Two things go
2072
+ * wrong if it reaches the extractor, and both are regressions this repository
2073
+ * has already paid for once: the composer's placeholder is drawn with the same
2074
+ * `❯ <text>` shape as a transcript echo, so the turn anchor lands on the FOOTER
2075
+ * and the reply extracts as empty (#1289); and the footer row is repainted while
2076
+ * the pane sits idle, so keeping it re-hashes the saved response on every poll
2077
+ * tick (#1268 / #1289).
2078
+ *
2079
+ * Structural, like the three readers next to it, and for the reason spelled out
2080
+ * on `findClaudeChromeStart`: the hint strings belong to Command Code and a rule
2081
+ * that matches them stops working the moment they are reworded. `-1` is the
2082
+ * honest answer for a frame with no composer at all — while a permission dialog
2083
+ * is up the whole block is replaced by the dialog, which the caller resolves on
2084
+ * the prompt path instead.
2085
+ *
2086
+ * @param lines - Captured pane lines, ANSI-bearing or not; trailing blanks tolerated
2087
+ * @returns Index of the opening rule, or -1 when no composer block is present
2088
+ */
2089
+ function findCommandCodeChromeStart(lines) {
2090
+ const isSeparator = (line) => /^─{10,}$/.test((0, ansi_1.stripAnsi)(line ?? '').trimEnd());
2091
+ let lastRow = lines.length - 1;
2092
+ while (lastRow >= 0 && lines[lastRow].trim() === '')
2093
+ lastRow--;
2094
+ if (lastRow < 0)
2095
+ return -1;
2096
+ // The closing rule sits just above the mode-indicator row.
2097
+ let closingSeparator = -1;
2098
+ for (let i = lastRow; i >= Math.max(0, lastRow - COMMAND_CODE_FOOTER_MAX_ROWS); i--) {
2099
+ if (isSeparator(lines[i])) {
2100
+ closingSeparator = i;
2101
+ break;
2102
+ }
2103
+ }
2104
+ if (closingSeparator < 0)
2105
+ return -1;
2106
+ // Walk up over the composer rows to the opening rule.
2107
+ let openingSeparator = -1;
2108
+ for (let i = closingSeparator - 1; i >= Math.max(0, closingSeparator - COMMAND_CODE_INPUT_BOX_MAX_ROWS); i--) {
2109
+ if (isSeparator(lines[i])) {
2110
+ openingSeparator = i;
2111
+ break;
2112
+ }
2113
+ }
2114
+ if (openingSeparator < 0)
2115
+ return -1;
2116
+ // Confirm the fenced rows are the composer and not a reply that happens to
2117
+ // contain two horizontal rules.
2118
+ if (!/^❯/.test((0, ansi_1.stripAnsi)(lines[openingSeparator + 1] ?? '')))
2119
+ return -1;
2120
+ return openingSeparator;
2121
+ }
2122
+ /**
2123
+ * Command Code skip patterns for response cleaning (Issue #2250).
2124
+ *
2125
+ * The dedicated cleaner Issue #2250 item 8 asks for: the startup banner, the
2126
+ * hook notice, the reasoning and turn summaries (`✻ Thought for` / `✻ Worked
2127
+ * for`), the composer, the rules and the footer.
2128
+ *
2129
+ * Nothing here touches the reply body or a tool block: `⠶ <text>`, ` WRITE
2130
+ * [probe.txt]`, ` └ Created probe.txt (1 line)` and ` 1 │ hello` all
2131
+ * survive (`turn-tool-write.txt`). In particular there is no `^\s*│` rule — the
2132
+ * one codex carries — because Command Code renders file previews with it.
2133
+ */
2134
+ exports.COMMAND_CODE_SKIP_PATTERNS = [
2135
+ /^─{10,}$/, // Composer rules and the dialog's rule
2136
+ /^❯\s*$/, // Bare composer row
2137
+ /^❯\s+Ask your question\.\.\./, // Composer placeholder
2138
+ exports.COMMAND_CODE_MODE_INDICATOR_PATTERN, // Footer mode indicator
2139
+ exports.COMMAND_CODE_THINKING_PATTERN, // Status row
2140
+ /^[^\S\n]*✻\s+(?:Worked|Thought)\s+for\b/, // Turn / reasoning summaries
2141
+ exports.COMMAND_CODE_HOOK_NOTICE_PATTERN, // "◼ Ran N session start hook"
2142
+ ...exports.COMMAND_CODE_BANNER_PATTERNS, // Startup banner
2143
+ exports.PASTED_TEXT_PATTERN, // [Pasted text #N +XX lines]
2144
+ ];
1728
2145
  /**
1729
2146
  * Detect if CLI tool is showing "thinking" indicator
1730
2147
  */
@@ -1754,6 +2171,9 @@ function detectThinking(cliToolId, content) {
1754
2171
  case 'antigravity':
1755
2172
  result = exports.ANTIGRAVITY_THINKING_PATTERN.test(content);
1756
2173
  break;
2174
+ case 'command-code':
2175
+ result = exports.COMMAND_CODE_THINKING_PATTERN.test(content);
2176
+ break;
1757
2177
  default:
1758
2178
  result = exports.CLAUDE_THINKING_PATTERN.test(content);
1759
2179
  }
@@ -1859,6 +2279,19 @@ function getCliToolPatterns(cliToolId) {
1859
2279
  thinkingPattern: exports.ANTIGRAVITY_THINKING_PATTERN,
1860
2280
  skipPatterns: [...exports.ANTIGRAVITY_SKIP_PATTERNS],
1861
2281
  };
2282
+ // Issue #2250: Command Code's layout is claude-shaped (inline transcript,
2283
+ // `❯` composer fenced by two full-width rules) but the constants are its
2284
+ // own. Sharing claude's would import the exact defect #2247 had to undo --
2285
+ // claude's rules carry a startup-banner reading that keys on `v\d+\.\d+`
2286
+ // and `|`, and Command Code prints its version into a `# Command Code
2287
+ // v1.40.1` row on every launch.
2288
+ case 'command-code':
2289
+ return {
2290
+ promptPattern: exports.COMMAND_CODE_PROMPT_PATTERN,
2291
+ separatorPattern: exports.COMMAND_CODE_SEPARATOR_PATTERN,
2292
+ thinkingPattern: exports.COMMAND_CODE_THINKING_PATTERN,
2293
+ skipPatterns: [...exports.COMMAND_CODE_SKIP_PATTERNS],
2294
+ };
1862
2295
  default:
1863
2296
  // Default to Claude patterns
1864
2297
  return getCliToolPatterns('claude');