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,640 @@
1
+ "use strict";
2
+ /**
3
+ * Copilot pattern constants and helpers moved out of `../../cli-patterns.ts`
4
+ * (Issue #3217). `cli-patterns.ts` re-exports every public name.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = void 0;
8
+ exports.readCopilotStatusBar = readCopilotStatusBar;
9
+ exports.findCopilotChromeStart = findCopilotChromeStart;
10
+ exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
11
+ exports.isCopilotFolderTrustDialog = isCopilotFolderTrustDialog;
12
+ const ansi_1 = require("../../ansi");
13
+ const pasted_text_1 = require("../../shared/pasted-text");
14
+ const strip_box_drawing_1 = require("../../shared/strip-box-drawing");
15
+ /**
16
+ * Copilot prompt pattern (Issue #545)
17
+ * Copilot CLI shows "❯" followed by cursor/text hint:
18
+ * - "❯ [7m [0mType @ to mention files, # for issues/PRs, / for commands, or ? for"
19
+ * - "❯ " (bare prompt)
20
+ * Also matches "? " prefix for question prompts.
21
+ */
22
+ exports.COPILOT_PROMPT_PATTERN = /^[>❯]\s|^\?\s+/m;
23
+ /**
24
+ * Copilot thinking/processing pattern (Issue #545)
25
+ * Copilot CLI shows various action indicators during processing:
26
+ * - "Exploring repo (Esc to cancel · 2.3 KiB)"
27
+ * - "Reasoning ■■■ medium"
28
+ * - "... Thinking"
29
+ * - Tool use: "● Read package.json" / "◉ Mapping structure (Esc to cancel · 8.4 KiB)"
30
+ * Note: "Esc to cancel" alone is not used because trust dialog footer also contains it.
31
+ * Instead, match the action pattern with parenthesized context: "(Esc to cancel ·"
32
+ * Braille spinner characters (U+2800-U+28FF) are also checked.
33
+ *
34
+ * Issue #1897: the bare words `Generating` and `Processing` were dropped. This
35
+ * constant is also a member of {@link COPILOT_SKIP_PATTERNS}, so every
36
+ * alternative here doubles as a "delete this line from the saved response" rule
37
+ * and as the tail-window liveness test in `extractResponse`. Those two words are
38
+ * ordinary English -- a reply whose last line reads "Processing complete." had
39
+ * the line deleted AND pinned the turn to "still thinking" for as long as it was
40
+ * on screen, so the response was never saved at all. The remaining alternatives
41
+ * are all glyph- or punctuation-shaped and cannot occur in prose by accident.
42
+ * Nothing is lost as a running signal either: #1885 measured 0 matches for this
43
+ * whole pattern across 44 live generating frames of copilot 1.0.80, whose turn
44
+ * state is read from the status bar by {@link readCopilotStatusBar} instead.
45
+ */
46
+ exports.COPILOT_THINKING_PATTERN = /[\u2800-\u28FF]|\(Esc to cancel|Reasoning\s+[■▪▮]|\.\.\.\s+Thinking/;
47
+ /**
48
+ * Copilot CLI's bottom status bar while a turn is in flight (Issue #1885).
49
+ *
50
+ * Measured on copilot 1.0.80 at the production 200x1000 geometry
51
+ * (`tests/unit/lib/detection/fixtures/copilot-live-1885/`). The bar is the
52
+ * bottom row of the pane and reads, across 44 captured generating frames:
53
+ *
54
+ * " ● Working esc interrupt GPT-5.6 Terra"
55
+ * " ◉ Working · 1.5 KiB esc interrupt GPT-5.6 Terra"
56
+ *
57
+ * The leading glyph cycles through ● ◉ ◎ ○ and the byte counter appears only
58
+ * once the turn has produced output, so neither is anchored on. `esc interrupt`
59
+ * is the affordance hint copilot draws for as long as the turn can be
60
+ * interrupted -- it is on every generating frame and on every tool-execution
61
+ * frame -- which makes it the same signal opencode's
62
+ * {@link OPENCODE_PROCESSING_INDICATOR} rests on.
63
+ *
64
+ * It is matched against the STATUS BAR ROW ONLY, never a window
65
+ * (see {@link readCopilotStatusBar}). `status-vocabulary-in-response.txt` is a
66
+ * live frame where copilot was asked to print this vocabulary and answered
67
+ * " ● Working esc interrupt" as body text: a window match would have pinned that
68
+ * finished session to `running` for the rest of its life.
69
+ *
70
+ * No /g flag (S4-5: would make test() stateful). No quantifier over a
71
+ * character class that can match its neighbour (SEC4-001: ReDoS safe).
72
+ */
73
+ exports.COPILOT_WORKING_STATUS_PATTERN = /\besc\s+interrupt\b/;
74
+ /**
75
+ * Copilot CLI's bottom status bar while no turn is running (Issue #1885).
76
+ *
77
+ * The same row as {@link COPILOT_WORKING_STATUS_PATTERN}, in the state copilot
78
+ * paints when it is NOT working:
79
+ *
80
+ * " ← open sidebar · / commands · ? help · tab next tab GPT-5.6 Terra"
81
+ *
82
+ * This is copilot's positive completion evidence under design rule D1
83
+ * (`docs/design/multi-agent-state-architecture.md` §4 D1 decision 1, item 2):
84
+ * the key-hint bar and the working bar are two renderings of one row, so seeing
85
+ * the hints is an affirmative observation that the turn is over -- not the
86
+ * absence of a busy marker somewhere on screen. The composer cannot carry that
87
+ * evidence on copilot: `❯` between its two full-width rules is drawn during
88
+ * generation too (measured on every frame of the running fixtures), which is
89
+ * exactly why the always-visible prompt used to win at step 3 of
90
+ * `detectSessionStatus` and report a generating session as ready.
91
+ *
92
+ * Two alternative spellings of one affordance, because copilot has reworded
93
+ * this row before: 1.0.80 shows "? help", and the pre-1.0.79 wording survives
94
+ * in {@link COPILOT_SKIP_PATTERNS} as "? for shortcuts". "/ commands" covers
95
+ * the slash-command hint independently, so a rewording of either half alone
96
+ * does not cost the tool its completion evidence.
97
+ *
98
+ * No /g flag (S4-5). Linear alternation, no nested quantifiers (SEC4-001).
99
+ */
100
+ exports.COPILOT_IDLE_STATUS_PATTERN = /\/\s+commands\b|\?\s+(?:help\b|for\s+shortcuts\b)/;
101
+ /**
102
+ * Read copilot's bottom status bar out of a captured frame (Issue #1885).
103
+ *
104
+ * Takes the whole frame rather than a row so the positional anchor -- "the
105
+ * status bar is the bottom row of the pane" -- cannot be lost at a call site.
106
+ * The scan stops at the first non-blank row from the bottom: if that row is
107
+ * neither state, this returns null and the caller has no evidence, which is the
108
+ * D1-correct answer rather than a guess. Two measured frames rely on it:
109
+ *
110
+ * - a permission dialog replaces the whole bottom of the pane with its box, so
111
+ * the bottom row is `╰───…` and neither pattern matches. The dialog then
112
+ * reaches `detectPrompt` and is reported as `waiting`, unchanged.
113
+ * - the `/model` picker ends in its own footer
114
+ * ("↑/↓ to navigate · … · enter to select · esc to cancel"), which is not the
115
+ * status bar either -- so this reports nothing about it and leaves that
116
+ * screen to the selection-list branch (Issue #1895's subject).
117
+ *
118
+ * @param contentLines - Frame rows, ANSI already stripped, in pane order
119
+ * @returns The state the bottom row announces, or null when it announces neither
120
+ */
121
+ function readCopilotStatusBar(contentLines) {
122
+ for (let i = contentLines.length - 1; i >= 0; i--) {
123
+ const row = contentLines[i];
124
+ if (row.trim() === '')
125
+ continue;
126
+ if (exports.COPILOT_WORKING_STATUS_PATTERN.test(row))
127
+ return 'working';
128
+ if (exports.COPILOT_IDLE_STATUS_PATTERN.test(row))
129
+ return 'idle';
130
+ return null;
131
+ }
132
+ return null;
133
+ }
134
+ /**
135
+ * Copilot separator pattern (Issue #545)
136
+ * Placeholder - to be updated after Phase 1 TUI investigation.
137
+ */
138
+ exports.COPILOT_SEPARATOR_PATTERN = /^─{10,}$/m;
139
+ /** How far above the bottom row copilot's closing rule may sit. */
140
+ const COPILOT_STATUS_BAR_MAX_ROWS = 2;
141
+ /** How many rows copilot's composer may span before the block stops looking like chrome. */
142
+ const COPILOT_COMPOSER_MAX_ROWS = 40;
143
+ /**
144
+ * One of the two rows that fence copilot's composer.
145
+ *
146
+ * Two renderings of one thing, because copilot redrew its composer between the
147
+ * builds this file is measured against (Issue #2269):
148
+ *
149
+ * - **1.0.80** fences it with a full-width horizontal rule, `─` to the pane's
150
+ * width, above and below.
151
+ * - **1.0.82** fences it with a half-block frame instead: `╻` (U+257B) followed
152
+ * by `▄` to the pane's width above, `╹` (U+2579) followed by `▀` below.
153
+ *
154
+ * The corner glyph is REQUIRED on the 1.0.82 forms and that is load-bearing, not
155
+ * decoration. 1.0.82 also boxes the echoed user prompt in the transcript between
156
+ * two dividers of the same half blocks — `tests/unit/lib/detection/fixtures/
157
+ * copilot-live-2269/turn-complete.txt` rows 10 and 12 — and those carry no
158
+ * corner. Accepting a bare `▄`/`▀` run here would let the newest echo's box be
159
+ * read as the composer, which would put `findCopilotChromeStart` ~985 rows too
160
+ * high and delete the reply along with the chrome.
161
+ */
162
+ const COPILOT_RULE_ROW = /^(?:─{10,}|╻▄{10,}|╹▀{10,})$/;
163
+ /**
164
+ * copilot's composer glyph, at the pane's own indent.
165
+ *
166
+ * `>` is the legacy spelling, `❯` is 1.0.80's. 1.0.82 draws no prompt glyph in
167
+ * the composer at all: the row is the frame's left edge, `┃` (U+2503), and the
168
+ * operator's text follows it (`copilot-live-2269/boot-idle.txt` row 998 is the
169
+ * bare glyph on an empty composer). `┃` is safe to accept here even though the
170
+ * reasoning block's rows also start with a vertical — that one is `│` (U+2502,
171
+ * {@link COPILOT_BOX_ROW_PATTERN}) — and in any case this test is only ever
172
+ * applied to the single row between two fence rows, never to a window.
173
+ */
174
+ const COPILOT_COMPOSER_GLYPH = /^ {0,2}[>❯┃]/;
175
+ /**
176
+ * Locate the start of copilot CLI's bottom-pinned chrome within a captured pane
177
+ * (Issue #1897).
178
+ *
179
+ * copilot 1.0.80 runs on the alternate screen and reserves the last five rows of
180
+ * the pane. Measured at the production 200x1000 geometry
181
+ * (`tests/unit/lib/detection/fixtures/copilot-live-1885/`), with the transcript
182
+ * ~970 rows above and nothing but padding in between:
183
+ *
184
+ * <cwd> [⎇ <branch>] Session: N AIC used
185
+ * ──────────────────── ← opening rule
186
+ * ❯ <composer>
187
+ * ──────────────────── ← closing rule
188
+ * ◉ Working · 1.5 KiB esc interrupt GPT-5.6 Terra ← status bar
189
+ *
190
+ * Issue #2269 re-measured the same five rows on 1.0.82, where the fence and the
191
+ * composer are drawn differently but the layout is unchanged:
192
+ *
193
+ * <cwd> Session: N AIC used
194
+ * ╻▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ← opening frame
195
+ * ┃<composer>
196
+ * ╹▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ← closing frame
197
+ * ← open sidebar · / commands · ? help · tab next tab GPT-5.6 Terra
198
+ *
199
+ * Both spellings live in {@link COPILOT_RULE_ROW} and
200
+ * {@link COPILOT_COMPOSER_GLYPH}; the search below is unchanged. Until they were
201
+ * added this function returned -1 on every 1.0.82 frame, `contentEnd` fell back
202
+ * to the whole pane, and the saved reply opened with 199 `▀` and ended with the
203
+ * `← open sidebar …` footer -- #2269's headline symptom.
204
+ *
205
+ * The boundary is found structurally -- closing rule, opening rule, composer
206
+ * glyph -- and never by matching the status bar's wording. That is the same
207
+ * reasoning {@link findClaudeChromeStart} records (#1289) plus the measurement
208
+ * behind {@link COPILOT_WORKING_STATUS_PATTERN}: copilot will print its own
209
+ * status-bar vocabulary as body text when asked to
210
+ * (`status-vocabulary-in-response.txt` holds ` ● Working esc interrupt` as a
211
+ * reply), so a vocabulary rule strong enough to delete the real bar also deletes
212
+ * that reply. Position is the only thing that separates them.
213
+ *
214
+ * Without this trim the bar is transcript as far as every consumer is concerned:
215
+ * it reached the TUI accumulator on every poll and was saved to History as the
216
+ * agent's answer (#1897's headline symptom, ` Working esc interrupt GPT-5.6
217
+ * Terra`), and its spinner glyph and byte counter change on every tick, so it
218
+ * also defeats the content dedup the alternate-screen tools rely on (#1268).
219
+ *
220
+ * @param lines - Captured pane rows, ANSI-bearing or not; trailing blanks tolerated
221
+ * @returns Index of the first chrome row, or -1 when the pane carries no chrome
222
+ * (a permission dialog draws its box over the whole bottom of the pane, so
223
+ * there is no composer and no bar -- those frames return -1 and are left to
224
+ * `detectPrompt`, exactly as {@link readCopilotStatusBar} leaves them)
225
+ */
226
+ function findCopilotChromeStart(lines) {
227
+ const isRule = (line) => COPILOT_RULE_ROW.test((0, ansi_1.stripAnsi)(line).trim());
228
+ let lastRow = lines.length - 1;
229
+ while (lastRow >= 0 && (0, ansi_1.stripAnsi)(lines[lastRow]).trim() === '')
230
+ lastRow--;
231
+ if (lastRow < 0)
232
+ return -1;
233
+ let closingRule = -1;
234
+ for (let i = lastRow; i >= Math.max(0, lastRow - COPILOT_STATUS_BAR_MAX_ROWS); i--) {
235
+ if (isRule(lines[i])) {
236
+ closingRule = i;
237
+ break;
238
+ }
239
+ }
240
+ if (closingRule < 0)
241
+ return -1;
242
+ let openingRule = -1;
243
+ for (let i = closingRule - 1; i >= Math.max(0, closingRule - COPILOT_COMPOSER_MAX_ROWS); i--) {
244
+ if (isRule(lines[i])) {
245
+ openingRule = i;
246
+ break;
247
+ }
248
+ }
249
+ if (openingRule < 0)
250
+ return -1;
251
+ // Confirm the fenced rows are the composer rather than a reply that happens to
252
+ // sit between two horizontal rules.
253
+ if (!COPILOT_COMPOSER_GLYPH.test((0, ansi_1.stripAnsi)(lines[openingRule + 1] ?? '')))
254
+ return -1;
255
+ // The row above the opening rule is copilot's cwd/branch/session header, which
256
+ // an overlay (the `/model` picker) replaces with a blank rather than with
257
+ // transcript -- measured on all five non-dialog fixtures.
258
+ return Math.max(0, openingRule - 1);
259
+ }
260
+ /**
261
+ * A row copilot draws as part of a box or a collapsed reasoning block
262
+ * (Issue #1897).
263
+ *
264
+ * 1.0.80 renders the model's private reasoning as a `⌄ Thought for 41s` header
265
+ * followed by rows that each begin `│ `, and draws dialogs inside `╭─╮`/`╰─╯`
266
+ * frames. {@link COPILOT_SKIP_PATTERNS} already carries a `[╭╮╰╯│]` rule, but
267
+ * `normalizeCopilotLine` deletes every U+2500..U+257F glyph *before* the skip
268
+ * patterns are applied, so by the time that rule runs the row it is meant to
269
+ * catch reads as ordinary prose -- which is how the TUI accumulator came to save
270
+ * copilot's chain-of-thought as the reply. Matched against the ANSI-stripped row,
271
+ * before normalisation.
272
+ *
273
+ * `─` is deliberately absent: a rule row is {@link COPILOT_SEPARATOR_PATTERN}'s
274
+ * job, and `── heading ──` is content.
275
+ */
276
+ exports.COPILOT_BOX_ROW_PATTERN = /^\s*[│└╰╭╮╯├┤┬┴┼]/;
277
+ /**
278
+ * copilot's collapsed-section header (Issue #1897).
279
+ *
280
+ * Measured on 1.0.80: `⌄ Thinking…` while the reasoning block is live, replaced
281
+ * by `⌄ Thought for 41s` once the turn moves on. Anchored on the `⌄` disclosure
282
+ * glyph rather than on the words, because "Thinking…" also occurs as body text
283
+ * -- `status-vocabulary-in-response.txt` contains exactly that row as a reply,
284
+ * and it must survive cleaning.
285
+ */
286
+ exports.COPILOT_REASONING_HEADER_PATTERN = /^\s*⌄\s/;
287
+ /**
288
+ * copilot's echo of the operator's own prompt in the transcript (Issue #1897).
289
+ *
290
+ * 1.0.80 draws every transcript row at the pane's one-column indent -- ` ❯ Reply
291
+ * with exactly the word: pong` -- while the composer at the bottom of the pane is
292
+ * at column 0. The bare `^[>❯]` form therefore never matched the echo, so
293
+ * `resolveExtractionStartIndex`'s copilot branch found no anchor, fell back to
294
+ * line 0, and handed the launch banner to the cleaner as the turn's reply.
295
+ *
296
+ * Bounded to two leading spaces rather than `\s*` so a quoted `> …` line inside a
297
+ * reply cannot be mistaken for a new turn boundary.
298
+ */
299
+ exports.COPILOT_USER_ECHO_PATTERN = /^ {0,2}[>❯]\s+\S/;
300
+ /**
301
+ * One of the half-block dividers copilot 1.0.82 boxes a transcript row with
302
+ * (Issue #2269).
303
+ *
304
+ * 1.0.80 drew the echoed prompt as a single bare ` ❯ <text>` row. 1.0.82 draws
305
+ * a full-width `▄` run above it and a full-width `▀` run below it
306
+ * (`copilot-live-2269/turn-complete.txt` rows 10 and 12):
307
+ *
308
+ * ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
309
+ * ❯ Reply with exactly the word: uat-run1 00:27
310
+ * ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
311
+ * ● uat-run1
312
+ *
313
+ * {@link COPILOT_SKIP_PATTERNS}' `/[█▘▝▖▗▔▄▌▐]/` rule already dropped the `▄`
314
+ * row. `▀` (U+2580) was not in that class, so the row BELOW the echo survived --
315
+ * and extraction starts one row past the echo, which made a wall of 199 `▀` the
316
+ * first line of every saved 1.0.82 reply.
317
+ *
318
+ * Deliberately not "add `▀` to that character class": this requires a run of ten
319
+ * or more and nothing else on the row, so a reply that happens to use a single
320
+ * half block as a glyph is untouched. The optional leading corner accepts the
321
+ * composer's own fence rows (`╻▄…` / `╹▀…`) as well, which is defence in depth
322
+ * only -- {@link findCopilotChromeStart} cuts those structurally, and this rule
323
+ * is what stops them reaching History if a future build moves the fence again.
324
+ */
325
+ exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = /^\s*[╻╹]?[▀▄]{10,}\s*$/;
326
+ /**
327
+ * The verbs copilot prints on a tool row, as a regex alternation source.
328
+ *
329
+ * One list, shared by {@link COPILOT_TOOL_ROW_PATTERN} here and by
330
+ * `COPILOT_TOOL_ACTION_PATTERN` in `response-cleaner.ts`: the two match the same
331
+ * vocabulary behind different markers, and a verb added to one and not the other
332
+ * is a leak nothing fails on.
333
+ *
334
+ * `Asked user` / `Asking user` are Issue #2269's addition. copilot answers a
335
+ * prompt it cannot act on by calling its ask-user tool, and the row it leaves in
336
+ * the transcript (`● Asked user What would you like me to help with?`, measured
337
+ * in `copilot-live-2269/turn-oneword-echo-askuser.txt`) was being saved as the
338
+ * agent's reply -- the "launch screen as the answer" the Issue reports.
339
+ */
340
+ exports.COPILOT_TOOL_VERBS = 'Get|Read|Run|Search|Write|Edit|Delete|List|Create|Fetch|Explore|Execute|Install|Asked user|Asking user|Model changed to:';
341
+ /**
342
+ * copilot 1.0.82's tool row, whose marker is a file-type badge (Issue #2269).
343
+ *
344
+ * 1.0.80 drew every tool row as `● <Verb> …` and `COPILOT_TOOL_ACTION_PATTERN`
345
+ * reads exactly that. 1.0.82 puts a short badge for the file the tool touched in
346
+ * front of the verb instead, and only falls back to `●` for a type it has no
347
+ * badge for. Measured verbatim over
348
+ * `copilot-live-2269/turn-tool-badges.txt` and `turn-tool-rows.txt`:
349
+ *
350
+ * / Search "a.ts" 1 file found
351
+ * MD Read note.md L1:1 (1 line read)
352
+ * TS Read a.ts 1 line read
353
+ * PY Read c.py 1 line read
354
+ * {} Read b.json 1 line read
355
+ * ● Read d.txt 1 line read ← plain text keeps the 1.0.80 marker
356
+ *
357
+ * So the badge is `/`, `{}`, or two to four upper-case characters. Two is the
358
+ * floor on purpose: a one-character class would also match the pronoun in an
359
+ * English sentence ("I Read the file"), and no measured badge is one character.
360
+ * `●` is left to `COPILOT_TOOL_ACTION_PATTERN`, which is the rule that already
361
+ * owns it -- copilot's own prose is `● <text>` too (`● done`, `● 対象ファイルを
362
+ * 確認して内容を読み込みます。`), and only the verb list separates the two.
363
+ *
364
+ * The `$` badge is absent for the same reason: `$ Shell Print requested text 2
365
+ * lines…` opens a BLOCK whose command rows follow, which is
366
+ * `COPILOT_TOOL_INVOCATION_PATTERN`'s job, and `Shell` is not in the verb list
367
+ * anyway.
368
+ *
369
+ * No /g flag (S4-5: would make test() stateful). No quantifier nested inside
370
+ * another (SEC4-001: ReDoS safe).
371
+ */
372
+ exports.COPILOT_TOOL_ROW_PATTERN = new RegExp(`^\\s*(?:\\/|\\{\\}|[A-Z][A-Z0-9+#]{1,3})\\s+(?:${exports.COPILOT_TOOL_VERBS})[\\s:]`);
373
+ /**
374
+ * A wrapped continuation of the copilot transcript row above it (Issue #1897).
375
+ *
376
+ * Marker rows (` ❯ `, ` ● `, ` $ `, ` ⌄ `) carry one leading space; the rows they
377
+ * wrap onto are indented further and carry no marker, and a blank row separates
378
+ * one block from the next (measured on 1.0.80 at 200x1000). Used to walk past the
379
+ * tail of a long *user* prompt so the extracted reply does not open with the
380
+ * second half of the operator's own question.
381
+ */
382
+ exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = /^ {2,}\S/;
383
+ /**
384
+ * Rows that only copilot's first-launch screen draws (Issue #1897).
385
+ *
386
+ * The launch screen is a complete, idle frame: the composer is drawn, the status
387
+ * bar shows key hints, and nothing about it says "no turn has happened yet". So
388
+ * `extractResponse` classified it as a finished response and History opened with
389
+ * the banner as the agent's first message -- before the operator's first prompt.
390
+ *
391
+ * These anchors are only ever consulted for a frame that carries no echoed user
392
+ * prompt at all (see the copilot banner guard in `extractResponse`), which is
393
+ * what keeps a reply that quotes any of this wording from being suppressed.
394
+ */
395
+ exports.COPILOT_BOOT_BANNER_ANCHORS = [
396
+ /No copilot-instructions\.md found/,
397
+ /Copilot uses AI, so always check for mistakes\./,
398
+ /Copilot v\d[\w.]*\s+uses AI/,
399
+ /^\s*(?:●\s+)?GitHub Copilot\s+v\d/m,
400
+ /^\s*(?:●\s+)?Tip:\s*\//m,
401
+ /Describe a task to get started/,
402
+ /Prefer a visual workspace\?/,
403
+ // Issue #2269: copilot's greeting for a prompt it cannot act on. It arrives
404
+ // through the ask-user tool, so the row that reaches the transcript is
405
+ // `● Asked user Hi — what would you like to work on?` and the dialog's own
406
+ // body repeats the question. Both are chrome for a turn that produced no
407
+ // answer, and the operator saw the greeting saved as the agent's reply.
408
+ /what would you like to work on\?/i,
409
+ ];
410
+ /**
411
+ * The key-hint footer copilot draws under a picker, matched one ROW at a time
412
+ * (Issue #547; rewritten against live 1.0.80 frames by Issue #1895).
413
+ *
414
+ * The pattern this replaced --
415
+ * `/Search\s+\w+\.\.\.|Select\s+Model|to (?:navigate|select).*Enter to (?:select|confirm)/`
416
+ * -- matched **none** of the eleven pickers 1.0.80 opens (measured; the frames
417
+ * are in `tests/unit/lib/detection/fixtures/copilot-picker-1895/`, and #1885 /
418
+ * #1886 / #1913 reached the same result independently). `/model` renders
419
+ * `❯ Search models…` with U+2026 rather than three periods, no picker carries
420
+ * the words `Select Model`, and every footer spells its verbs in lower case.
421
+ *
422
+ * What all eleven footers do share is the shape of a key-hint bar: `·`-separated
423
+ * hints carrying either arrow-key navigation or a lower-case dismiss verb.
424
+ * Measured verbatim, bottom-most first:
425
+ *
426
+ * /model ↑/↓ to navigate · ←/→ reasoning effort · tab context window ·
427
+ * shift+tab group: recommended · enter to select · esc to cancel
428
+ * /agent n new agent · ? learn more · esc cancel
429
+ * /theme ↑/↓ to navigate · enter to select · esc to cancel
430
+ * /permissions 1-2 to select · ↑/↓ to navigate · enter to confirm · esc to cancel
431
+ * /skills ↑/↓ to navigate · enter to toggle · esc to close
432
+ * /mcp ↑/↓ to select · enter to show · a to add · esc to close
433
+ * /settings / search · ↑/↓ navigate · tab switch scope · enter edit ·
434
+ * ctrl+r reset · ctrl+e editor · esc close
435
+ * /statusline ↑/↓ nav · enter toggle · esc close
436
+ * /subagents ↑/↓ to navigate · space on/off · r reset · enter to select · esc to cancel
437
+ * /resume / search · ↑/↓ navigate · enter select · ←/→ switch tabs · r refresh ·
438
+ * x delete · s sort:relevance · esc cancel
439
+ * /session / search · ↑/↓ navigate · enter open · n new · tab switch tabs · a filter:all
440
+ *
441
+ * Neither half of the alternation is universal -- `/agent` has no list to walk
442
+ * so it prints no `↑/↓`, and `/session` offers no `esc` -- but every footer has
443
+ * one of them, so the union covers 11/11 while each individual disjunct stays
444
+ * specific enough to be worth requiring. The slash in `↑/↓` is optional only as
445
+ * a rewording tolerance: the synthetic frames pinned since Issue #547 spell it
446
+ * `↑↓`, and whether copilot ever drew it that way is not something this Issue
447
+ * measured. Every 1.0.80 footer above has the slash.
448
+ *
449
+ * Three deliberate narrowings keep this off ordinary text:
450
+ * - the `·` lookahead, so a sentence such as "press esc to cancel" is not a
451
+ * footer unless it is also a hint bar;
452
+ * - lower case, which is what 1.0.80 draws. `(Esc to cancel · 2.3 KiB)` -- the
453
+ * capitalised spelling in {@link COPILOT_THINKING_PATTERN} -- is a *progress*
454
+ * row, and it would otherwise satisfy both halves of this pattern;
455
+ * - `cancel|close` only, so the status bar's `esc interrupt`
456
+ * ({@link COPILOT_WORKING_STATUS_PATTERN}) is not a footer either.
457
+ *
458
+ * The narrowings are defence in depth; the load-bearing guard is positional and
459
+ * lives in {@link isCopilotSelectionFrame} -- copilot's own answer text can and
460
+ * does contain these exact rows (`picker-vocabulary-in-response.txt` is a live
461
+ * frame of it), so no window-scoped match on this vocabulary can be safe.
462
+ *
463
+ * No /g flag (S4-5: would make test() stateful). `[^\n]*` cannot cross a row and
464
+ * no quantifier is nested inside another (SEC4-001: ReDoS safe).
465
+ */
466
+ exports.COPILOT_SELECTION_FOOTER_PATTERN = /^(?=[^\n]*·)[^\n]*(?:↑\/?↓|\besc\s+(?:to\s+)?(?:cancel|close)\b)/m;
467
+ /**
468
+ * How many non-blank rows up from the bottom of the pane may carry the footer.
469
+ *
470
+ * Nine of the eleven pickers put it on the bottom row itself; `/agent` and
471
+ * `/subagents` draw their panel with a closing full-width rule underneath it,
472
+ * which puts the footer two non-blank rows up. Three is that measurement plus
473
+ * one row of slack -- deliberately far short of a window that could reach the
474
+ * transcript, which on the production 200x1000 geometry sits ~950 rows above.
475
+ */
476
+ const COPILOT_SELECTION_FOOTER_SCAN_ROWS = 3;
477
+ /**
478
+ * Whether the pane is sitting on one of copilot's pickers (Issue #1895).
479
+ *
480
+ * Takes the whole frame rather than a window for the same reason
481
+ * {@link readCopilotStatusBar} does: the evidence is positional, and a call site
482
+ * cannot be trusted to preserve "near the bottom of the pane" on its own. Two
483
+ * facts, both measured on 1.0.80, make the position sufficient:
484
+ *
485
+ * - **A picker replaces copilot's chrome.** In the idle and generating states
486
+ * the bottom five rows are cwd / rule / composer / rule / status bar; while a
487
+ * picker is up, none of them are drawn. So a frame whose bottom row is a
488
+ * status bar is not a picker, whatever its transcript says -- which is the
489
+ * whole of the false-positive half of Issue #1895. `detectSessionStatus`
490
+ * reads the same row for the running verdict at step 0.5, so checking it
491
+ * first here also fixes the order between the two branches: the status bar
492
+ * wins, and the picker branch only speaks when copilot has taken it away.
493
+ * - **An answerable dialog is drawn inside a box; a picker is not.** The
494
+ * folder-trust and permission dialogs wear the same lower-case
495
+ * `↑/↓ to navigate · enter to select · esc to cancel` footer, but every one of
496
+ * their rows reads `│ … │` and the bottom row is `╰─…─╯`. Skipping boxed rows
497
+ * keeps those on the prompt branch, where they belong: they are the agent
498
+ * blocked on the human (`hasActivePrompt: true`, exit 10 for `wait`), not a
499
+ * list the operator opened.
500
+ *
501
+ * @param contentLines - Frame rows, ANSI already stripped, in pane order
502
+ * @returns True when the bottom of the pane is a picker's key-hint footer
503
+ */
504
+ function isCopilotSelectionFrame(contentLines) {
505
+ if (readCopilotStatusBar(contentLines) !== null)
506
+ return false;
507
+ let scanned = 0;
508
+ for (let i = contentLines.length - 1; i >= 0; i--) {
509
+ const row = contentLines[i];
510
+ const trimmed = row.trim();
511
+ if (trimmed === '')
512
+ continue;
513
+ if (++scanned > COPILOT_SELECTION_FOOTER_SCAN_ROWS)
514
+ break;
515
+ // A boxed row belongs to a dialog, not a picker (see above).
516
+ if (trimmed.startsWith('│') || trimmed.endsWith('│'))
517
+ continue;
518
+ if (exports.COPILOT_SELECTION_FOOTER_PATTERN.test(row))
519
+ return true;
520
+ }
521
+ return false;
522
+ }
523
+ /**
524
+ * Anchors of Copilot CLI's first-launch "Confirm folder trust" dialog (Issue #1886).
525
+ *
526
+ * Recorded from copilot 1.0.80 (`tests/fixtures/copilot-folder-trust-1080.ts`):
527
+ * copilot asks this once per untrusted git repository, before anything else runs,
528
+ * and the whole dialog is drawn inside a box — every row reads `│ <content>`.
529
+ * That is why `COPILOT_PROMPT_PATTERN` (`^[>❯]\s`) does not match the frame at
530
+ * all and `waitForReady` used to spin its full 30-second window against it.
531
+ *
532
+ * Both anchors are required. One of them alone would also match this dialog's
533
+ * text quoted back inside a model response, and a false positive here does not
534
+ * merely mis-report a status: it sends a bare `1` into a live composer.
535
+ *
536
+ * The anchors live here rather than in `cli-tools/copilot` for the same reason
537
+ * codex's do (Issue #1829): the Auto-Yes poller judges the same screen through
538
+ * `detectPrompt`, and two copies of the wording would be two chances to disagree
539
+ * about what this dialog is.
540
+ */
541
+ exports.COPILOT_FOLDER_TRUST_ANCHORS = [
542
+ 'Confirm folder trust',
543
+ 'Do you trust the files in this folder?',
544
+ ];
545
+ /**
546
+ * The one option CommandMate may answer on the operator's behalf: `1. Yes`,
547
+ * which grants trust for THIS SESSION only.
548
+ *
549
+ * Matching the option text — not just the dialog — is the fail-safe. Option 2
550
+ * ("Yes, and remember this folder for future sessions") writes `trustedFolders`
551
+ * into `~/.copilot/config.json`, one file shared by every checkout on the
552
+ * machine (measured: answering `1` leaves that file byte-identical). If copilot
553
+ * ever reorders the list so that `1` is the remembering variant, this stops
554
+ * matching, nothing is sent, and the launch degrades to the pre-#1886 stall
555
+ * instead of silently persisting a trust grant.
556
+ *
557
+ * Written against the box-stripped frame, where the row reads `❯ 1. Yes`.
558
+ * `[ \t]*$` rather than `\s*$` so the trailing anchor cannot roll onto a later
559
+ * line and accept `1. Yes, and remember ...`.
560
+ */
561
+ exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = /^[ \t]*(?:[>❯][ \t]*)?1\.[ \t]+Yes[ \t]*$/m;
562
+ /**
563
+ * Key that selects {@link COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN}.
564
+ * Measured on 1.0.80: the digit confirms on its own — sending a trailing Enter
565
+ * would land on the composer that the dialog's dismissal reveals.
566
+ */
567
+ exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = '1';
568
+ /**
569
+ * Whether the pane is sitting on the folder-trust dialog with the session-only
570
+ * option in first position.
571
+ *
572
+ * @param output - ANSI-stripped pane capture (box drawing still present)
573
+ * @returns True when both anchors and the `1. Yes` option row are present
574
+ */
575
+ function isCopilotFolderTrustDialog(output) {
576
+ if (!exports.COPILOT_FOLDER_TRUST_ANCHORS.every((anchor) => output.includes(anchor))) {
577
+ return false;
578
+ }
579
+ return exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN.test((0, strip_box_drawing_1.stripBoxDrawing)(output));
580
+ }
581
+ /**
582
+ * Copilot skip patterns for response cleaning (Issue #545)
583
+ * Placeholder patterns - to be refined after Phase 1 TUI investigation.
584
+ */
585
+ exports.COPILOT_SKIP_PATTERNS = [
586
+ pasted_text_1.PASTED_TEXT_PATTERN,
587
+ exports.COPILOT_SEPARATOR_PATTERN,
588
+ exports.COPILOT_THINKING_PATTERN,
589
+ // Issue #1895 replaced COPILOT_SELECTION_LIST_PATTERN with the row-scoped
590
+ // picker footer; the vocabulary it carried (`Search \w+...` / `Select Model`)
591
+ // is copilot's prose, not its chrome.
592
+ exports.COPILOT_SELECTION_FOOTER_PATTERN,
593
+ // Collapsed reasoning header (Issue #1897): "⌄ Thinking…" / "⌄ Thought for 41s"
594
+ exports.COPILOT_REASONING_HEADER_PATTERN,
595
+ // 1.0.82's transcript dividers and badge-marked tool rows (Issue #2269)
596
+ exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN,
597
+ exports.COPILOT_TOOL_ROW_PATTERN,
598
+ // Issue #2269: the anchored box-row rule, so the raw-row consumer agrees with
599
+ // the accumulator. `[╭╮╰╯│]` below is unanchored and omits `└`, which is the
600
+ // glyph copilot opens a detail row with (` └ Enable all permissions (tools,
601
+ // paths, and URLs)` under the launch screen's tip). `normalizeCopilotLine`
602
+ // deletes every U+2500..U+257F glyph, so by the time the skip patterns run in
603
+ // `cleanCopilotResponse` that row reads as prose -- which is how the ONE row
604
+ // of the 1.0.82 launch screen that no other rule caught became the agent's
605
+ // first reply. `extractCopilotContentLines` already tests this pattern before
606
+ // normalising (#1897); adding it here is what gives `extractResponse`, which
607
+ // never normalises, the same answer.
608
+ exports.COPILOT_BOX_ROW_PATTERN,
609
+ // Logo/banner lines
610
+ /^GitHub Copilot\s+v/,
611
+ /[█▘▝▖▗▔▄▌▐]/,
612
+ /[╭╮╰╯│]/,
613
+ // Status bar (branch + model display)
614
+ /\[⎇\s+\w[^\]]*\]/,
615
+ // Operation guide lines
616
+ /^shift\+tab\s/,
617
+ /^\?\s+for\s+shortcuts/,
618
+ /^ctrl\+[a-z]\s+\w/,
619
+ // Prompt lines
620
+ /^[❯>]\s*(Type\s+@|$)/,
621
+ // Tip/hint lines. Issue #2269 added the `●` marker: 1.0.82 draws the launch
622
+ // screen's tip as `● Tip: /allow-all`, and `cleanCopilotResponse` strips the
623
+ // bullet only AFTER the skip patterns have run, so the bare form never
624
+ // matched and the tip was the one banner row that reached History.
625
+ /^\s*(?:●\s+)?Tip:\s*\//,
626
+ // Issue #2269: copilot's own tab bar, the top row of every 1.0.82 frame. It is
627
+ // the second banner row the launch screen leaked (the logo, the disclaimer and
628
+ // the tip's `└ …` detail row are all caught by the glyph rules above), and
629
+ // between them they are the whole difference between "the launch screen cleans
630
+ // to nothing and cannot be saved" and "History opens with the banner". Spelled
631
+ // out in full rather than as a keyword so a reply that mentions one of these
632
+ // words is untouched.
633
+ /^\s*Current\s+Sessions\s+Issues\s+Pull requests\s+Gists\s*$/,
634
+ // Initial display text
635
+ /^Describe a task to get started/,
636
+ // Issue #571: Disclaimer, initialization message, environment info
637
+ /^Copilot uses AI, so always check for mistakes\.$/, // Disclaimer (full-line match to avoid filtering user content mentioning Copilot)
638
+ /^● 💡/, // Initialization hint message
639
+ /^● Environment loaded:/, // Environment info
640
+ ];
@@ -40,19 +40,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.detectCopilotDialog = detectCopilotDialog;
41
41
  const cli_patterns_1 = require("../../cli-patterns");
42
42
  const dialog_block_1 = require("../dialog-block");
43
+ const context_above_1 = require("../context-above");
43
44
  /** copilot's permission question, in the spelling 1.0.80 draws. */
44
45
  const COPILOT_PERMISSION_QUESTION_PATTERN = /do you want to\b/i;
45
- /** How many non-blank rows above the options may hold the question. */
46
- const QUESTION_SCAN_ROWS = 4;
47
46
  function readContextAbove(lines, firstRow) {
48
- const rows = [];
49
- for (let i = firstRow - 1; i >= 0 && rows.length < QUESTION_SCAN_ROWS; i--) {
50
- const row = lines[i].trim();
51
- if (row === '')
52
- continue;
53
- rows.push(row);
54
- }
55
- return rows.join('\n');
47
+ return (0, context_above_1.readContextAbove)(lines, firstRow, -1);
56
48
  }
57
49
  /**
58
50
  * Does this frame carry a copilot dialog?