commandmate 0.44.1 → 0.44.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +169 -169
  3. package/.next/app-path-routes-manifest.json +35 -35
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +0 -6
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route.js +1 -1
  12. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update/route.js +2 -2
  15. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/login/route.js +1 -1
  18. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/capabilities/route.js +1 -1
  22. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/route.js +1 -1
  24. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  25. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  27. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  28. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/external-apps/route.js +1 -1
  33. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  37. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  40. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  41. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  43. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  44. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/push/escalation/route.js +1 -1
  48. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/push/subscriptions/route.js +2 -2
  50. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/push/vapid/route.js +1 -1
  52. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  54. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  55. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/relays/route.js +1 -1
  57. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  58. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/clone/route.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/restore/route.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  71. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/route.js +1 -1
  73. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/scan/route.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/sync/route.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  83. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  84. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/skills/[id]/route.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/route.js +1 -1
  94. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/templates/[id]/route.js +2 -2
  99. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/templates/route.js +2 -2
  101. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  106. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -2
  192. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -2
  195. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  208. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  211. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  214. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/route.js +1 -1
  264. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  267. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  273. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/sessions/page.js +1 -1
  275. package/.next/server/app/sessions/page.js.nft.json +1 -1
  276. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/worktrees/[id]/page.js +11 -11
  282. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  283. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  285. package/.next/server/app-paths-manifest.json +35 -35
  286. package/.next/server/chunks/1191.js +2 -2
  287. package/.next/server/chunks/1210.js +1 -1
  288. package/.next/server/chunks/1559.js +2 -0
  289. package/.next/server/chunks/1789.js +1 -0
  290. package/.next/server/chunks/2119.js +1 -1
  291. package/.next/server/chunks/2404.js +1 -1
  292. package/.next/server/chunks/2445.js +1 -1
  293. package/.next/server/chunks/2460.js +1 -0
  294. package/.next/server/chunks/2710.js +1 -1
  295. package/.next/server/chunks/2908.js +1 -0
  296. package/.next/server/chunks/2980.js +1 -1
  297. package/.next/server/chunks/3241.js +1 -1
  298. package/.next/server/chunks/3480.js +1 -1
  299. package/.next/server/chunks/3718.js +1 -1
  300. package/.next/server/chunks/4207.js +2 -2
  301. package/.next/server/chunks/450.js +1 -1
  302. package/.next/server/chunks/4672.js +5 -0
  303. package/.next/server/chunks/{9353.js → 4718.js} +2 -2
  304. package/.next/server/chunks/4837.js +14 -0
  305. package/.next/server/chunks/5048.js +1 -1
  306. package/.next/server/chunks/5209.js +1 -0
  307. package/.next/server/chunks/5595.js +1 -0
  308. package/.next/server/chunks/5625.js +25 -0
  309. package/.next/server/chunks/5845.js +1 -0
  310. package/.next/server/chunks/611.js +1 -1
  311. package/.next/server/chunks/6130.js +1 -1
  312. package/.next/server/chunks/6401.js +1 -1
  313. package/.next/server/chunks/6781.js +1 -1
  314. package/.next/server/chunks/6793.js +3 -3
  315. package/.next/server/chunks/7491.js +2 -2
  316. package/.next/server/chunks/7905.js +1 -1
  317. package/.next/server/chunks/850.js +1 -0
  318. package/.next/server/chunks/8543.js +1 -1
  319. package/.next/server/chunks/8728.js +3 -3
  320. package/.next/server/chunks/8791.js +1 -1
  321. package/.next/server/chunks/8800.js +1 -1
  322. package/.next/server/chunks/8918.js +7 -7
  323. package/.next/server/chunks/9130.js +1 -5
  324. package/.next/server/chunks/9390.js +2 -3
  325. package/.next/server/chunks/9584.js +1 -1
  326. package/.next/server/chunks/9627.js +6 -6
  327. package/.next/server/chunks/9731.js +3 -3
  328. package/.next/server/middleware-manifest.json +5 -5
  329. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  330. package/.next/server/pages/500.html +1 -1
  331. package/.next/server/server-reference-manifest.json +1 -1
  332. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  333. package/.next/static/chunks/{2407-f1f258d4a1d92620.js → 2407-06d35bb1aa02de80.js} +1 -1
  334. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  335. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  336. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  337. package/.next/static/chunks/app/{layout-da66300cc20244ed.js → layout-0d1750b833f5cc3e.js} +1 -1
  338. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  339. package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
  340. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  341. package/.next/static/css/057f64a65726c439.css +1 -0
  342. package/.next/trace +13 -13
  343. package/dist/cli/commands/ask.d.ts.map +1 -1
  344. package/dist/cli/commands/ask.js +120 -119
  345. package/dist/cli/commands/attach.d.ts +94 -0
  346. package/dist/cli/commands/attach.d.ts.map +1 -1
  347. package/dist/cli/commands/attach.js +145 -7
  348. package/dist/cli/commands/auto-yes.js +1 -1
  349. package/dist/cli/commands/capture.d.ts.map +1 -1
  350. package/dist/cli/commands/capture.js +10 -13
  351. package/dist/cli/commands/command-target.d.ts +23 -0
  352. package/dist/cli/commands/command-target.d.ts.map +1 -0
  353. package/dist/cli/commands/command-target.js +25 -0
  354. package/dist/cli/commands/instances.d.ts.map +1 -1
  355. package/dist/cli/commands/instances.js +41 -2
  356. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  357. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  358. package/dist/cli/commands/message-dispatch.js +63 -0
  359. package/dist/cli/commands/reply.d.ts.map +1 -1
  360. package/dist/cli/commands/reply.js +2 -5
  361. package/dist/cli/commands/respond.d.ts.map +1 -1
  362. package/dist/cli/commands/respond.js +3 -6
  363. package/dist/cli/commands/send.d.ts.map +1 -1
  364. package/dist/cli/commands/send.js +149 -146
  365. package/dist/cli/commands/wait.d.ts.map +1 -1
  366. package/dist/cli/commands/wait.js +608 -416
  367. package/dist/cli/types/api-responses.d.ts +174 -27
  368. package/dist/cli/types/api-responses.d.ts.map +1 -1
  369. package/dist/cli/types/api-responses.js +4 -2
  370. package/dist/cli/utils/api-client.d.ts +25 -5
  371. package/dist/cli/utils/api-client.d.ts.map +1 -1
  372. package/dist/cli/utils/api-client.js +87 -55
  373. package/dist/cli/utils/server-url.d.ts +1 -0
  374. package/dist/cli/utils/server-url.d.ts.map +1 -1
  375. package/dist/cli/utils/server-url.js +7 -0
  376. package/dist/config/uat-isolation.d.ts +140 -0
  377. package/dist/config/uat-isolation.d.ts.map +1 -0
  378. package/dist/config/uat-isolation.js +246 -0
  379. package/dist/lib/global-state.d.ts +12 -0
  380. package/dist/lib/global-state.d.ts.map +1 -0
  381. package/dist/lib/global-state.js +16 -0
  382. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  383. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  384. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  385. package/dist/lib/session/prompt-view.d.ts +228 -0
  386. package/dist/lib/session/prompt-view.d.ts.map +1 -0
  387. package/dist/lib/session/prompt-view.js +290 -0
  388. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  389. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  390. package/dist/lib/session/status-evidence-type.js +2 -0
  391. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  392. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  393. package/dist/server/locales/en/worktree.json +3 -1
  394. package/dist/server/locales/ja/worktree.json +3 -1
  395. package/dist/server/server.js +5 -3
  396. package/dist/server/src/cli/types/api-responses.js +4 -2
  397. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  398. package/dist/server/src/config/uat-isolation.js +246 -0
  399. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  400. package/dist/server/src/lib/auto-yes-lifecycle.js +139 -0
  401. package/dist/server/src/lib/auto-yes-poller.js +465 -160
  402. package/dist/server/src/lib/auto-yes-state.js +2 -2
  403. package/dist/server/src/lib/cli-tools/antigravity.js +39 -80
  404. package/dist/server/src/lib/cli-tools/base.js +151 -0
  405. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  406. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  407. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  408. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  409. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  410. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  411. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  412. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  413. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  414. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  415. package/dist/server/src/lib/detection/cli-patterns.js +374 -3047
  416. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  417. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  418. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  419. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  420. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  421. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  422. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  423. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  424. package/dist/server/src/lib/detection/status-detector.js +1 -1
  425. package/dist/server/src/lib/detection/tools/antigravity/detect.js +12 -60
  426. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  427. package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
  428. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  429. package/dist/server/src/lib/detection/tools/claude/detect.js +11 -17
  430. package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
  431. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  432. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  433. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +1 -1
  434. package/dist/server/src/lib/detection/tools/codex/detect.js +71 -130
  435. package/dist/server/src/lib/detection/tools/codex/live-region.js +104 -0
  436. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  437. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  438. package/dist/server/src/lib/detection/tools/command-code/detect.js +19 -50
  439. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  440. package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
  441. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  442. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  443. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  444. package/dist/server/src/lib/detection/tools/copilot/detect.js +13 -35
  445. package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
  446. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  447. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  448. package/dist/server/src/lib/detection/tools/frame.js +36 -2
  449. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  450. package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
  451. package/dist/server/src/lib/detection/tools/live-region.js +204 -0
  452. package/dist/server/src/lib/detection/tools/opencode/detect.js +11 -49
  453. package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
  454. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  455. package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
  456. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +10 -42
  457. package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
  458. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  459. package/dist/server/src/lib/detection/tools/run-detection.js +31 -50
  460. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  461. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  462. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  463. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  464. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  465. package/dist/server/src/lib/global-state.js +16 -0
  466. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  467. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  468. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  469. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  470. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  471. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  472. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  473. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  474. package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
  475. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  476. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  477. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  478. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  479. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  480. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  481. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  482. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  483. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  484. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  485. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  486. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  487. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  488. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  489. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  490. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  491. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  492. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  493. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  494. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  495. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  496. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  497. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  498. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  499. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  500. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  501. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  502. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  503. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +16 -4
  504. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  505. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  506. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  507. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  508. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  509. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  510. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  511. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  512. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  513. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  514. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  515. package/dist/server/src/lib/polling/response-checker.js +666 -1162
  516. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  517. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  518. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  519. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  520. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  521. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  522. package/dist/server/src/lib/prompt-answer-sender.js +6 -5
  523. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  524. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  525. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  526. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  527. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  528. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -2
  529. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  530. package/dist/server/src/lib/relay/relay-delivery.js +6 -2
  531. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  532. package/dist/server/src/lib/relay/relay-triggers.js +9 -0
  533. package/dist/server/src/lib/resource-cleanup.js +6 -4
  534. package/dist/server/src/lib/response-cleaner.js +24 -1
  535. package/dist/server/src/lib/response-extractor.js +16 -0
  536. package/dist/server/src/lib/schedule-manager.js +8 -10
  537. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  538. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  539. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  540. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  541. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  542. package/dist/server/src/lib/session/agent-event-state.js +106 -1854
  543. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  544. package/dist/server/src/lib/session/agent-event-turn.js +811 -0
  545. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  546. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  547. package/dist/server/src/lib/session/claude-executor.js +45 -5
  548. package/dist/server/src/lib/session/claude-session.js +21 -65
  549. package/dist/server/src/lib/session/cli-session.js +17 -0
  550. package/dist/server/src/lib/session/current-output-builder.js +454 -1103
  551. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  552. package/dist/server/src/lib/session/current-output-types.js +9 -0
  553. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  554. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  555. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  556. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  557. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  558. package/dist/server/src/lib/session/prompt-view.js +290 -0
  559. package/dist/server/src/lib/session/prompt-waiting-composition.js +35 -0
  560. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  561. package/dist/server/src/lib/session/send-user-message.js +1 -1
  562. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  563. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  564. package/dist/server/src/lib/session/status-evidence.js +2 -2
  565. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  566. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  567. package/dist/server/src/lib/session/waiting-kind.js +3 -0
  568. package/dist/server/src/lib/session-cleanup.js +6 -8
  569. package/dist/server/src/lib/skills/install-plan.js +2 -1
  570. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  571. package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
  572. package/dist/server/src/lib/timer-manager.js +6 -8
  573. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  574. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  575. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  576. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  577. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  578. package/dist/server/src/lib/tmux/tmux.js +33 -59
  579. package/dist/server/src/lib/tui-accumulator.js +2 -2
  580. package/dist/server/src/lib/version-checker.js +6 -6
  581. package/dist/server/src/lib/ws-server.js +47 -11
  582. package/docs/en/user-guide/webapp-guide.md +27 -3
  583. package/package.json +1 -1
  584. package/release-notes/0.44.2.json +33 -0
  585. package/release-notes/0.44.3.json +82 -0
  586. package/scripts/hooks/cmate-agent-event.sh +18 -0
  587. package/.next/server/chunks/1068.js +0 -1
  588. package/.next/server/chunks/434.js +0 -1
  589. package/.next/server/chunks/5775.js +0 -1
  590. package/.next/server/chunks/6474.js +0 -14
  591. package/.next/server/chunks/650.js +0 -1
  592. package/.next/server/chunks/6661.js +0 -1
  593. package/.next/server/chunks/8583.js +0 -1
  594. package/.next/server/chunks/964.js +0 -1
  595. package/.next/server/chunks/967.js +0 -1
  596. package/.next/server/chunks/9882.js +0 -25
  597. package/.next/static/chunks/591-308072f285c34787.js +0 -1
  598. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  599. package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +0 -1
  600. package/.next/static/css/38070d879efa1371.css +0 -1
  601. package/dist/server/src/lib/cli-tools/index.js +0 -41
  602. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  603. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
  604. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
@@ -0,0 +1,461 @@
1
+ "use strict";
2
+ /**
3
+ * Command Code's selection-list / plan-review / question-page patterns and
4
+ * readers, moved out of `selection-shape.ts` (Issue #3218). `selection-shape.ts`
5
+ * re-exports every name it used to export from here.
6
+ *
7
+ * Imports only `ansi` and `selection-shape-patterns`: the screen-side modules
8
+ * reach this through `selection-shape.ts`, so nothing server-only may come in,
9
+ * and importing `selection-shape.ts` back would be a cycle.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.COMMAND_CODE_QUESTION_REGION_REJECT_PATTERN = exports.COMMAND_CODE_CURSOR_GLYPH = exports.COMMAND_CODE_RULE_MIN_COLUMNS = exports.COMMAND_CODE_RULE_ROW_PATTERN = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = void 0;
13
+ exports.isCommandCodePlanApproveChoice = isCommandCodePlanApproveChoice;
14
+ exports.hasCommandCodeSelectionListFooterAtBottom = hasCommandCodeSelectionListFooterAtBottom;
15
+ exports.hasCommandCodeDismissablePanelFooterAtBottom = hasCommandCodeDismissablePanelFooterAtBottom;
16
+ exports.hasCommandCodePlanReviewFooterAtBottom = hasCommandCodePlanReviewFooterAtBottom;
17
+ exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
18
+ exports.isCommandCodeQuestionTabRow = isCommandCodeQuestionTabRow;
19
+ exports.readCommandCodeReviewPage = readCommandCodeReviewPage;
20
+ const ansi_1 = require("../../ansi");
21
+ const selection_shape_patterns_1 = require("../../selection-shape-patterns");
22
+ /**
23
+ * Command Code's picker footer (v1.40.1, measured at 200x1000 for Issue #2297).
24
+ *
25
+ * type to search · ↑/↓ navigate · shift+↑/↓ jump provider · enter to select · esc to cancel
26
+ *
27
+ * Before this Issue no detector branch matched it, so the overlay fell through
28
+ * to the `default` floor and the chat surface raised its `unclassified` card —
29
+ * whose controls are the `1`–`9` / `y` / `n` answer keys, every one of which
30
+ * would have been typed into that `Type to search models...` box. The
31
+ * command-code detector imports this and answers
32
+ * `STATUS_REASON.COMMAND_CODE_SELECTION_LIST` instead, which puts the arrow pad
33
+ * on the card.
34
+ *
35
+ * Lower case is what Command Code draws, and the `·` separator keeps the pattern
36
+ * off ordinary prose — the same two narrowings `COPILOT_SELECTION_FOOTER_PATTERN`
37
+ * settled on for the same reason.
38
+ */
39
+ exports.COMMAND_CODE_SELECTION_LIST_FOOTER = /\benter\s+to\s+select\b\s*[·•]\s*esc\s+to\s+cancel\b/i;
40
+ /**
41
+ * The footer of an overlay whose ONLY exit is the dismiss (Issue #2369).
42
+ *
43
+ * Measured on Command Code 1.49's `/usage`, whose last row is verbatim
44
+ * `Press Esc to close`. The panel above it is read-only — a plan header, two
45
+ * meters, a breakdown URL — so there is no highlight to move and no key to
46
+ * confirm with. Before this pattern existed nothing matched the screen, it
47
+ * reached the `default` floor, and the chat surface answered an
48
+ * eighteen-button `unclassified` card to a panel with one working key.
49
+ *
50
+ * ## Why it is this narrow
51
+ *
52
+ * Three narrowings, and each one is there because this predicate SUPPRESSES
53
+ * controls — a false positive takes the arrow pad and the answer keys away from
54
+ * a screen that needed them:
55
+ *
56
+ * - **a verb before the key.** `Press`/`Hit`/`Type`, or nothing at all, but not
57
+ * an arbitrary run of prose. `esc to cancel` on its own is the tail of every
58
+ * picker footer in this file, including
59
+ * {@link COMMAND_CODE_SELECTION_LIST_FOOTER}, and those screens have a
60
+ * highlight;
61
+ * - **`close`/`dismiss`/`exit`, never `cancel` or `go back`.** The distinction
62
+ * is measured rather than stylistic: `cancel` is what a screen with a
63
+ * COMMITTABLE choice calls its escape (claude's `/model`, codex's picker,
64
+ * Command Code's own), while `close` is what a panel that decided nothing
65
+ * calls it;
66
+ * - **the whole row.** Anchored at both ends (leading/trailing space aside), so
67
+ * a hint bar that offers a dismiss ALONGSIDE something else — `↑/↓ navigate ·
68
+ * enter to select · esc to close` — does not match, and keeps the arrows the
69
+ * other half of its sentence promises.
70
+ *
71
+ * Case-insensitive because the measured row is `Press Esc to close` and Command
72
+ * Code writes its picker hints in lower case; nothing rests on which it uses.
73
+ */
74
+ exports.DISMISSABLE_PANEL_FOOTER_PATTERN = /^\s*(?:press|hit|type)?\s*(?:<)?esc(?:ape)?(?:>)?\s+to\s+(?:close|dismiss|exit)\b[\s.·•]*$/im;
75
+ /**
76
+ * The radio row `ctrl+a` puts in place of the action list when comments are
77
+ * pending (Issue #2793).
78
+ *
79
+ * Measured on 1.58.0 (`tests/fixtures/command-code-plan-review-2763/`): with
80
+ * zero comments `ctrl+a` approves at once, and with one or more it first asks
81
+ * what to do with them. The three action rows are replaced by ONE row, and the
82
+ * selected side is `(•)`, the other `( )` — readable without the ANSI:
83
+ *
84
+ * Approve (•) with 4 comments as notes ( ) original plan · discard comments
85
+ *
86
+ * `comments?` because the badge above it is measured in both numbers
87
+ * (`1 pending comment` / `4 pending comments`); the radio itself was captured
88
+ * with four.
89
+ */
90
+ exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = /^\s*Approve\s+\([• ]\)\s+with\s+\d+\s+comments?\s+as\s+notes\s+\([• ]\)\s+original\s+plan\b/im;
91
+ /**
92
+ * The hint bar under {@link COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW}, verbatim
93
+ * `←/→ choose · enter confirm · esc back`.
94
+ *
95
+ * Anchored to the LAST row of the text it is tested against (no `m` flag: `$` is
96
+ * the end of the input), because that is where the overlay draws every one of
97
+ * its five measured hint bars, and because it is what keeps a transcript that
98
+ * QUOTES this screen from matching — the composer is always drawn below a
99
+ * transcript, so there the quote is never the last row.
100
+ */
101
+ exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = /(?:^|\n)[ \t]*←\/→\s+choose\s*·\s*enter\s+confirm\s*·\s*esc\s+back\s*$/i;
102
+ /**
103
+ * Whether this tail is the approve-with-comments confirmation (Issue #2793).
104
+ *
105
+ * BOTH rows, for the reason {@link COMMAND_CODE_PLAN_REVIEW_FOOTER} gives for
106
+ * its two: either half alone is a sentence something else could print. Not
107
+ * adjacent — `Editor exited with code 127` and a blank row sit between them on
108
+ * both captures — so each is tested on its own.
109
+ *
110
+ * Deliberately NOT folded into {@link COMMAND_CODE_PLAN_REVIEW_FOOTER}, and
111
+ * therefore not {@link SelectionListShape.offersPlanApprove}: on this screen
112
+ * `enter` is the documented CONFIRM of an approval the human already started
113
+ * with `ctrl+a`, so the chat surface must keep its `Enter`, and what `ctrl+a`
114
+ * does here was not measured.
115
+ *
116
+ * @param tail - the frame's last rows, ANSI stripped, last content row last
117
+ */
118
+ function isCommandCodePlanApproveChoice(tail) {
119
+ return (exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW.test(tail) &&
120
+ exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER.test(tail));
121
+ }
122
+ /**
123
+ * How many content rows the plan review footer's LAST row (`Cancel esc`) may
124
+ * have under it and still be the overlay's own footer (Issue #2846): the footer's
125
+ * two rows plus three.
126
+ *
127
+ * Measured over the sixteen plan review captures that carry the footer
128
+ * (`tests/fixtures/command-code-plan-review-2761/`, `-2763/`): fourteen draw ONE
129
+ * row below it, the hint bar (`type + enter to comment · …`); one draws two, an
130
+ * `Editor exited with code 127` row and then the hint bar; and the garbled
131
+ * `editor-killed-staircase.txt` draws three, because the pane wrapped the hint
132
+ * bar. So the plan review footer is NOT the last row the way the picker's is,
133
+ * and a "last two rows" rule misses every one of them.
134
+ *
135
+ * What bounds it from above is the composer. A transcript is always drawn above
136
+ * one, and its shortest measured form is four rows — rule, `❯ Ask your
137
+ * question...`, rule, status row — so a footer QUOTED in a reply has at least
138
+ * four content rows under it and its `Approve` row falls outside this window.
139
+ * The margin between the widest overlay (3) and the narrowest composer (4) is
140
+ * one row; a capture that narrows it is the reason to re-measure, not to widen
141
+ * this.
142
+ */
143
+ const COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT = 5;
144
+ /**
145
+ * The last `count` rows of `text` that carry content, joined with `\n`.
146
+ *
147
+ * Blank rows are dropped rather than counted: the pane is padded with them, and
148
+ * a real footer is set off from its hint bar by one.
149
+ */
150
+ function lastContentRows(text, count) {
151
+ return text
152
+ .split('\n')
153
+ .filter((row) => row.trim() !== '')
154
+ .slice(-count)
155
+ .join('\n');
156
+ }
157
+ /**
158
+ * Whether the LAST content row of this tail is Command Code's picker footer
159
+ * (Issue #2846).
160
+ *
161
+ * {@link COMMAND_CODE_SELECTION_LIST_FOOTER} matches the sentence anywhere, and
162
+ * a reply that quotes the `/model` footer is that sentence in the middle of the
163
+ * transcript. The picker draws the footer as the last row of the pane (all four
164
+ * captures that carry it do, `tests/fixtures/chat-dialog-card-2254/`), and a
165
+ * transcript always has the composer under it — the same reasoning
166
+ * {@link COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER} anchors with `$`.
167
+ *
168
+ * @param tail - the frame's last rows, ANSI stripped, last content row last
169
+ */
170
+ function hasCommandCodeSelectionListFooterAtBottom(tail) {
171
+ return exports.COMMAND_CODE_SELECTION_LIST_FOOTER.test(lastContentRows(tail, 1));
172
+ }
173
+ /**
174
+ * Whether the LAST content row of this tail is the dismiss-only panel's footer
175
+ * (Issue #2846). `Press Esc to close` is the panel's last row
176
+ * ({@link DISMISSABLE_PANEL_FOOTER_PATTERN}); the same row inside a reply has
177
+ * the composer under it.
178
+ *
179
+ * @param tail - the frame's last rows, ANSI stripped, last content row last
180
+ */
181
+ function hasCommandCodeDismissablePanelFooterAtBottom(tail) {
182
+ return exports.DISMISSABLE_PANEL_FOOTER_PATTERN.test(lastContentRows(tail, 1));
183
+ }
184
+ /**
185
+ * Whether the plan review footer ({@link COMMAND_CODE_PLAN_REVIEW_FOOTER}) sits
186
+ * at the bottom of this tail (Issue #2846): both of its rows are within the last
187
+ * {@link COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT} content rows, which is the
188
+ * overlay's own hint bar and nothing as tall as a composer.
189
+ *
190
+ * @param tail - the frame's last rows, ANSI stripped, last content row last
191
+ */
192
+ function hasCommandCodePlanReviewFooterAtBottom(tail) {
193
+ return selection_shape_patterns_1.COMMAND_CODE_PLAN_REVIEW_FOOTER.test(lastContentRows(tail, COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT));
194
+ }
195
+ /**
196
+ * How many rows from the end of the content the dismiss footer is looked for.
197
+ *
198
+ * The same 15-row tail the detection chain hands a tool module as
199
+ * `NormalizedFrame.lastLines` (`STATUS_CHECK_LINE_COUNT`), restated as a number
200
+ * here because this module is a browser-safe leaf and `tools/frame.ts` pulls in
201
+ * `cli-patterns`. `detect.ts` reads `frame.lastLines` and never this constant,
202
+ * so the two cannot disagree about the detector's own window; this one bounds
203
+ * the CLIENT-side reading in {@link hasDismissablePanelFooter}.
204
+ */
205
+ const DISMISSABLE_PANEL_TAIL_LINE_COUNT = 15;
206
+ /**
207
+ * Whether the tail of this frame is a dismiss-only panel (Issue #2369).
208
+ *
209
+ * The same question `commandCodeStatusDetector.afterPrompt` asks of
210
+ * `frame.lastLines`, asked of a raw capture, so the chat surface can answer for
211
+ * a frame whose server verdict has not reached it. The pattern is shared rather
212
+ * than restated — one expression, two call sites, exactly as
213
+ * {@link COMMAND_CODE_SELECTION_LIST_FOOTER} is shared between the detector and
214
+ * the dialog card.
215
+ *
216
+ * @param frame - a raw `capture-pane -p -e` frame, ANSI intact
217
+ */
218
+ function hasDismissablePanelFooter(frame) {
219
+ if (!frame)
220
+ return false;
221
+ const lines = (0, ansi_1.stripAnsi)(frame.replace(/\r\n/g, '\n')).split('\n');
222
+ let last = lines.length - 1;
223
+ while (last >= 0 && lines[last].trim() === '')
224
+ last -= 1;
225
+ if (last < 0)
226
+ return false;
227
+ const tail = lines.slice(Math.max(0, last + 1 - DISMISSABLE_PANEL_TAIL_LINE_COUNT), last + 1);
228
+ return tail.some((line) => exports.DISMISSABLE_PANEL_FOOTER_PATTERN.test(line));
229
+ }
230
+ /**
231
+ * The horizontal rule Command Code draws directly above a full-screen dialog.
232
+ *
233
+ * Command Code is an INLINE tool (`alternate_on=0`): opening `/model` does not
234
+ * clear the pane, it paints the picker under whatever the session has already
235
+ * printed. On the capture taken for Issue #2326 that is 256 rows of banner and
236
+ * transcript followed by a 77-row picker, and this rule row is the seam between
237
+ * them — 200 columns of U+2500 at the production `TUI_PANE_WIDTH`, the only
238
+ * such row anywhere on the frame while the picker is open (the composer's own
239
+ * two rules are not drawn while a dialog has the screen).
240
+ *
241
+ * Matched as "nothing but the rule glyph", not as "contains one", because a box
242
+ * border (`╭──…──╮`, which is how copilot draws ITS pickers) carries corners and
243
+ * must NOT be read as this seam — see
244
+ * {@link extractCommandCodeSelectionListFrame} for why that non-match is the
245
+ * safe answer rather than a missed case.
246
+ */
247
+ exports.COMMAND_CODE_RULE_ROW_PATTERN = /^\u2500+$/;
248
+ /**
249
+ * How wide a rule row must be before it counts as the dialog seam.
250
+ *
251
+ * The measured row is the full pane width (200 columns), and a pure function
252
+ * cannot know that width, so this is a floor rather than an equality: it only
253
+ * has to reject a short dash run inside a reply. Forty columns is a quarter of
254
+ * the production pane and wider than any decorative rule measured in
255
+ * `tests/fixtures/`.
256
+ */
257
+ exports.COMMAND_CODE_RULE_MIN_COLUMNS = 40;
258
+ /**
259
+ * The cursor glyph Command Code draws against the highlighted option.
260
+ *
261
+ * U+276F, measured on the capture Issue #2521 was raised from. Only this one,
262
+ * and not codex's `›` or gemini's `●`: {@link readCommandCodeQuestionRegion}
263
+ * counts cursors to decide whether the region holds ONE live dialog, and a
264
+ * wider alphabet would start counting glyphs that are not cursors at all.
265
+ */
266
+ exports.COMMAND_CODE_CURSOR_GLYPH = '❯';
267
+ /**
268
+ * The markers Command Code paints on a question screen's tab strip.
269
+ *
270
+ * Measured row: `● Dispatch | ◯ Review` — a filled disc on the tab that has the
271
+ * screen and a hollow ring on the one that does not. The names are NOT part of
272
+ * the reading (a different question draws different tabs); what is read is the
273
+ * strip's structure, which is what {@link isCommandCodeQuestionTabRow} states.
274
+ *
275
+ * Two families rather than one alphabet, because "one of these is filled and one
276
+ * of these is not" is the whole signal. A list of bullets (`● item one`) carries
277
+ * the first family and nothing else, and a bullet list is the thing this
278
+ * reading must never mistake for a dialog.
279
+ */
280
+ const COMMAND_CODE_TAB_SELECTED_MARKERS = '●◉⦿';
281
+ /** The hollow half of {@link COMMAND_CODE_TAB_SELECTED_MARKERS}'s pair. */
282
+ const COMMAND_CODE_TAB_UNSELECTED_MARKERS = '◯○◌⚪';
283
+ /**
284
+ * The ANSWERED half, measured on 1.54.1 (Issue #2753).
285
+ *
286
+ * A multi-question `AskUserQuestion` keeps one tab per question and marks the
287
+ * ones already answered: `✔ Party size | ✔ Rental car | ● Update scope | ◯ Review`.
288
+ * Before this family existed the whole strip failed the cell test, the reader answered
289
+ * `none`, and the generic parser read the checkbox list under it as a single
290
+ * select — see the Issue for the capture.
291
+ *
292
+ * U+2714 and nothing else. `✓` (U+2713) and `☑` (U+2611) are the shapes a check
293
+ * mark could take; neither has been seen on a pane, and this reading is shared
294
+ * with `ChatSurface` and `extractCommandCodeSelectionListFrame`, which run for
295
+ * EVERY tool — so an unmeasured glyph here widens what other tools' frames can
296
+ * be claimed as this screen.
297
+ */
298
+ const COMMAND_CODE_TAB_ANSWERED_MARKERS = '✔';
299
+ /** One `<marker> <label>` cell of the tab strip. */
300
+ const COMMAND_CODE_TAB_SEGMENT_PATTERN = new RegExp(`^\\s*([${COMMAND_CODE_TAB_SELECTED_MARKERS}${COMMAND_CODE_TAB_UNSELECTED_MARKERS}${COMMAND_CODE_TAB_ANSWERED_MARKERS}])\\s+\\S`);
301
+ /**
302
+ * Is this row Command Code's question-screen tab strip?
303
+ *
304
+ * Three conditions, and each one is a bullet list this predicate has to refuse:
305
+ *
306
+ * - **two or more `|`-separated cells.** `● Dispatch` on its own is a bullet;
307
+ * `● Dispatch | ◯ Review` is a strip. The separator is the cheapest part of
308
+ * the structure and the one prose never has in this position;
309
+ * - **every cell is `<marker> <label>`.** A row that is a strip for its first
310
+ * cell and prose for its second is prose;
311
+ * - **at least one filled marker, and at least one other cell.** A tab strip
312
+ * says which tab has the screen. A row of identical bullets does not, and
313
+ * `● one | ● two` is exactly the list-with-a-pipe this rules out. The other
314
+ * cell may be hollow (not answered yet) or the `✔` of an answered tab
315
+ * (measured on 1.54.1 — Issue #2753); what may not be missing is the filled
316
+ * one, so `✔ one | ✔ two` is still refused.
317
+ */
318
+ function isCommandCodeQuestionTabRow(line) {
319
+ const segments = line.split('|');
320
+ if (segments.length < 2)
321
+ return false;
322
+ let selected = 0;
323
+ let others = 0;
324
+ for (const segment of segments) {
325
+ const match = COMMAND_CODE_TAB_SEGMENT_PATTERN.exec(segment);
326
+ if (match === null)
327
+ return false;
328
+ if (COMMAND_CODE_TAB_SELECTED_MARKERS.includes(match[1]))
329
+ selected += 1;
330
+ else
331
+ others += 1;
332
+ }
333
+ return selected > 0 && others > 0;
334
+ }
335
+ /**
336
+ * Rows that mean the region spans more than the one dialog on screen now.
337
+ *
338
+ * Issue #2521's condition 4: the tab strip and its options have to be the
339
+ * SAME screen, with no other turn's generating or completion UI between them.
340
+ * Structurally that is mostly settled by taking the LAST rule row as the top
341
+ * edge — a new turn repaints the composer, and the composer's own lower rule
342
+ * then becomes that edge — so this pattern is the belt to that braces, for a
343
+ * frame captured mid-repaint.
344
+ *
345
+ * Two rows, both restated here rather than imported: `cli-patterns` owns
346
+ * Command Code's busy and marker vocabularies and pulls the logger and the tool
347
+ * registry in with them, and this module is the browser-safe leaf the chat
348
+ * surface imports (see the module docblock).
349
+ *
350
+ * - `esc to interrupt`, the tail Command Code appends to every status row
351
+ * (`COMMAND_CODE_INTERRUPT_HINT_PATTERN`). A turn is in flight;
352
+ * - a row that OPENS with U+273B and a word — `✻ Thought for 1 second`,
353
+ * `✻ Worked for 4s`. Matched by shape rather than by the two English verbs,
354
+ * so a reworded or localised marker still ends the region.
355
+ */
356
+ exports.COMMAND_CODE_QUESTION_REGION_REJECT_PATTERN = /\besc\s+to\s+interrupt\b|^[^\S\n]*✻[^\S\n]+\S/im;
357
+ /**
358
+ * The Review page's own three rows, measured on 1.54.1 (Issue #2755 §7).
359
+ *
360
+ * `Enter` on the `Submit` row does not send the answers — it opens a SECOND
361
+ * screen:
362
+ *
363
+ * ✔ Update scope | ● Review
364
+ *
365
+ * 1. Which files should I update?
366
+ * calc.js
367
+ *
368
+ * ❯ 1. Submit
369
+ * 2. Cancel
370
+ *
371
+ * ← to go back and edit
372
+ *
373
+ * ## Why this needs a reading of its own
374
+ *
375
+ * Because it is a real numbered list under a real tab strip, and the GENERIC
376
+ * parser answers it: a two-option `multiple_choice` whose default is `Submit`.
377
+ * The default answer on that payload does not pick anything — it COMMITS
378
+ * whatever the human has ticked so far, from a payload nobody meant to expose,
379
+ * which is #1928's shape one screen later. Auto-Yes fires on defaults.
380
+ *
381
+ * Words rather than structure, and deliberately: the two numbered rows are
382
+ * `Submit` and `Cancel`, which is the same shape as any other two-option
383
+ * question. What separates this page from a question is only what it SAYS, so
384
+ * all three rows are required together — the confirm pair AND the back hint —
385
+ * and the whole thing is anchored inside a recognised question region. A screen
386
+ * that carries two of the three keeps every verdict it had.
387
+ *
388
+ * The cursor glyph is optional on both numbered rows: it rests on `1. Submit`
389
+ * when the page is reached by `Enter`, and the Issue is explicit that a pattern
390
+ * decided on the bare word would miss it.
391
+ */
392
+ const COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN = /^[^\S\n]*(?:\u276F[^\S\n]*)?1[.)][^\S\n]+Submit[^\S\n]*$/im;
393
+ /** The `Cancel` half of {@link COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN}'s pair. */
394
+ const COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN = /^[^\S\n]*(?:\u276F[^\S\n]*)?2[.)][^\S\n]+Cancel[^\S\n]*$/im;
395
+ /** The footer only the Review page draws. */
396
+ const COMMAND_CODE_REVIEW_BACK_HINT_PATTERN = /^[^\S\n]*\u2190[^\S\n]+to[^\S\n]+go[^\S\n]+back[^\S\n]+and[^\S\n]+edit[^\S\n]*$/im;
397
+ /**
398
+ * The warning the Review page carries when it was reached with answers missing.
399
+ *
400
+ * Measured from the undocumented `d`, which ends a multi-select from any row:
401
+ * `⚠ You have not answered all questions` over a `No answer`. Issue #2755 §7
402
+ * requires that such a page is never read as "answered", which is why the
403
+ * predicate below reports it rather than hiding it.
404
+ */
405
+ const COMMAND_CODE_REVIEW_UNANSWERED_PATTERN = /have\s+not\s+answered\s+all\s+questions/i;
406
+ /**
407
+ * Read Command Code's `AskUserQuestion` Review page, if this frame is one
408
+ * (Issue #2755 §7).
409
+ *
410
+ * The same region {@link readCommandCodeQuestionRegion} works on — last rule
411
+ * row, tab strip as the first row under it — plus the three rows above. The
412
+ * question-shaped conditions are deliberately NOT applied: this page has no
413
+ * question body of its own on the `Submit`/`Cancel` spelling (the answers sit
414
+ * where the question would), and it draws `1.` twice, so the strict reading
415
+ * declines it for a numbering reason that says nothing about what it is.
416
+ *
417
+ * `null` for everything else, so no existing verdict moves except the two
418
+ * captures this is about.
419
+ *
420
+ * @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
421
+ */
422
+ function readCommandCodeReviewPage(frame) {
423
+ if (!frame)
424
+ return null;
425
+ const lines = frame.replace(/\r\n/g, '\n').split('\n').map(ansi_1.stripAnsi);
426
+ let last = lines.length - 1;
427
+ while (last >= 0 && lines[last].trim() === '')
428
+ last -= 1;
429
+ if (last < 1)
430
+ return null;
431
+ let ruleLineIndex = -1;
432
+ for (let i = last - 1; i >= 0; i -= 1) {
433
+ const row = lines[i].trim();
434
+ if (row.length < exports.COMMAND_CODE_RULE_MIN_COLUMNS)
435
+ continue;
436
+ if (!exports.COMMAND_CODE_RULE_ROW_PATTERN.test(row))
437
+ continue;
438
+ ruleLineIndex = i;
439
+ break;
440
+ }
441
+ if (ruleLineIndex < 0)
442
+ return null;
443
+ const region = lines.slice(ruleLineIndex + 1, last + 1);
444
+ const tabOffset = region.findIndex((line) => line.trim() !== '');
445
+ if (tabOffset < 0)
446
+ return null;
447
+ if (!isCommandCodeQuestionTabRow(region[tabOffset]))
448
+ return null;
449
+ const body = region.join('\n');
450
+ if (!COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body))
451
+ return null;
452
+ if (!COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN.test(body))
453
+ return null;
454
+ if (!COMMAND_CODE_REVIEW_BACK_HINT_PATTERN.test(body))
455
+ return null;
456
+ const submitRow = region.find((row) => COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(row));
457
+ return {
458
+ hasUnansweredWarning: COMMAND_CODE_REVIEW_UNANSWERED_PATTERN.test(body),
459
+ cursorOnSubmit: submitRow !== undefined && submitRow.includes(exports.COMMAND_CODE_CURSOR_GLYPH),
460
+ };
461
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readContextAbove = readContextAbove;
4
+ /** How many non-blank rows above the options may hold the question. */
5
+ const QUESTION_SCAN_ROWS = 4;
6
+ /**
7
+ * The non-blank rows above `firstRow`, nearest first, joined by newlines.
8
+ * Rows at or above `floorRow` are not read: pass -1 to read to the top of the
9
+ * frame.
10
+ */
11
+ function readContextAbove(lines, firstRow, floorRow) {
12
+ const rows = [];
13
+ for (let i = firstRow - 1; i > floorRow && rows.length < QUESTION_SCAN_ROWS; i--) {
14
+ const row = lines[i].trim();
15
+ if (row === '')
16
+ continue;
17
+ rows.push(row);
18
+ }
19
+ return rows.join('\n');
20
+ }
@@ -13,10 +13,15 @@ exports.copilotStatusDetector = exports.VERIFIED_AGAINST = void 0;
13
13
  exports.readIdleEvidence = readIdleEvidence;
14
14
  const cli_patterns_1 = require("../../cli-patterns");
15
15
  const prompt_detector_1 = require("../../prompt-detector");
16
+ const verdicts_1 = require("../verdicts");
16
17
  const status_reason_1 = require("../../status-reason");
17
18
  const prompt_1 = require("./prompt");
19
+ const live_region_1 = require("./live-region");
18
20
  const run_detection_1 = require("../run-detection");
19
21
  const verified_against_1 = require("../verified-against");
22
+ function detectCopilotPrompt(clean) {
23
+ return (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(clean), (0, cli_patterns_1.buildDetectPromptOptions)('copilot'));
24
+ }
20
25
  /** copilot-cli build these rules were read off (#1885 / #1895; value in ../verified-against, #1929). */
21
26
  exports.VERIFIED_AGAINST = verified_against_1.COPILOT_VERIFIED_AGAINST;
22
27
  /**
@@ -39,6 +44,8 @@ function readIdleEvidence(frame) {
39
44
  exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
40
45
  tool: 'copilot',
41
46
  verifiedAgainst: exports.VERIFIED_AGAINST,
47
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
48
+ liveRegion: live_region_1.COPILOT_LIVE_REGION,
42
49
  beforePrompt(frame) {
43
50
  // 0. Copilot: picker detection BEFORE thinking detection
44
51
  // COPILOT_THINKING_PATTERN includes "Reasoning\s+[■▪▮]" which matches the
@@ -63,33 +70,18 @@ exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
63
70
  // never the transcript. Ordering against them is therefore settled inside the
64
71
  // helper: it declines any frame that still has a status bar.
65
72
  if ((0, cli_patterns_1.isCopilotSelectionFrame)(frame.contentLines)) {
66
- const promptOptions = (0, cli_patterns_1.buildDetectPromptOptions)('copilot');
67
- const promptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), promptOptions);
73
+ const promptDetection = detectCopilotPrompt(frame.clean);
68
74
  if (promptDetection.isPrompt) {
69
75
  // Distinguish yes/no prompts (2-3 options, e.g., "Do you want to run this command?")
70
76
  // from ask_user multi-select prompts (4+ options). Yes/no prompts should show
71
77
  // PromptPanel with buttons; ask_user prompts need NavigationButtons for ↑↓ selection.
72
78
  const optionsCount = promptDetection.promptData?.options?.length ?? 0;
73
79
  if (optionsCount <= 3) {
74
- return {
75
- status: 'waiting',
76
- confidence: 'high',
77
- reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
78
- hasActivePrompt: true,
79
- evidence: 'positive',
80
- promptDetection,
81
- };
80
+ return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, promptDetection);
82
81
  }
83
82
  // 4+ options: treat as selection list (NavigationButtons)
84
83
  }
85
- return {
86
- status: 'waiting',
87
- confidence: 'high',
88
- reason: status_reason_1.STATUS_REASON.COPILOT_SELECTION_LIST,
89
- hasActivePrompt: false,
90
- evidence: 'positive',
91
- promptDetection,
92
- };
84
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.COPILOT_SELECTION_LIST, promptDetection);
93
85
  }
94
86
  // 0.5. Copilot: the bottom status bar carries the running half of the turn
95
87
  // (Issue #547 put a thinking check here; Issue #1885 replaced what it reads).
@@ -113,16 +105,8 @@ exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
113
105
  // window form would also have matched copilot's own response text -- see
114
106
  // `status-vocabulary-in-response.txt`.
115
107
  if ((0, cli_patterns_1.readCopilotStatusBar)(frame.contentLines) === 'working') {
116
- const promptOptions = (0, cli_patterns_1.buildDetectPromptOptions)('copilot');
117
- const promptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), promptOptions);
118
- return {
119
- status: 'running',
120
- confidence: 'high',
121
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
122
- hasActivePrompt: false,
123
- evidence: 'positive',
124
- promptDetection,
125
- };
108
+ const promptDetection = detectCopilotPrompt(frame.clean);
109
+ return (0, verdicts_1.positiveVerdictWithPrompt)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR, promptDetection);
126
110
  }
127
111
  return null;
128
112
  },
@@ -147,13 +131,7 @@ exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
147
131
  // verdict claude's `❯` row and codex's `›` row publish, so nothing downstream
148
132
  // has to learn a new reason code.
149
133
  if ((0, cli_patterns_1.readCopilotStatusBar)(frame.contentLines) === 'idle') {
150
- return {
151
- status: 'ready',
152
- confidence: 'high',
153
- reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
154
- hasActivePrompt: false,
155
- evidence: 'positive',
156
- };
134
+ return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
157
135
  }
158
136
  return null;
159
137
  },
@@ -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
+ };