commandmate 0.44.2 → 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 (581) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +149 -149
  3. package/.next/app-path-routes-manifest.json +21 -21
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  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 -1
  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 -1
  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 +2 -2
  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 +21 -21
  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 -1
  294. package/.next/server/chunks/2710.js +1 -1
  295. package/.next/server/chunks/2908.js +1 -1
  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 -1
  308. package/.next/server/chunks/5625.js +25 -0
  309. package/.next/server/chunks/611.js +1 -1
  310. package/.next/server/chunks/6130.js +1 -1
  311. package/.next/server/chunks/6401.js +1 -1
  312. package/.next/server/chunks/6781.js +1 -1
  313. package/.next/server/chunks/6793.js +3 -3
  314. package/.next/server/chunks/7491.js +2 -2
  315. package/.next/server/chunks/7905.js +1 -1
  316. package/.next/server/chunks/850.js +1 -1
  317. package/.next/server/chunks/8728.js +3 -3
  318. package/.next/server/chunks/8791.js +1 -1
  319. package/.next/server/chunks/8800.js +1 -1
  320. package/.next/server/chunks/8918.js +7 -7
  321. package/.next/server/chunks/9130.js +1 -1
  322. package/.next/server/chunks/9390.js +2 -2
  323. package/.next/server/chunks/9584.js +1 -1
  324. package/.next/server/chunks/9627.js +6 -6
  325. package/.next/server/chunks/9731.js +3 -3
  326. package/.next/server/middleware-manifest.json +5 -5
  327. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  328. package/.next/server/pages/500.html +1 -1
  329. package/.next/server/server-reference-manifest.json +1 -1
  330. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  331. package/.next/static/chunks/{2407-051f6f84226a9f2c.js → 2407-06d35bb1aa02de80.js} +1 -1
  332. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  333. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  334. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  335. package/.next/static/chunks/app/{layout-9da1ab602bcb3051.js → layout-0d1750b833f5cc3e.js} +1 -1
  336. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  337. package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
  338. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  339. package/.next/static/css/057f64a65726c439.css +1 -0
  340. package/.next/trace +13 -13
  341. package/dist/cli/commands/ask.d.ts.map +1 -1
  342. package/dist/cli/commands/ask.js +120 -119
  343. package/dist/cli/commands/attach.d.ts +94 -0
  344. package/dist/cli/commands/attach.d.ts.map +1 -1
  345. package/dist/cli/commands/attach.js +145 -7
  346. package/dist/cli/commands/auto-yes.js +1 -1
  347. package/dist/cli/commands/capture.d.ts.map +1 -1
  348. package/dist/cli/commands/capture.js +3 -5
  349. package/dist/cli/commands/command-target.d.ts +23 -0
  350. package/dist/cli/commands/command-target.d.ts.map +1 -0
  351. package/dist/cli/commands/command-target.js +25 -0
  352. package/dist/cli/commands/instances.d.ts.map +1 -1
  353. package/dist/cli/commands/instances.js +41 -2
  354. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  355. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  356. package/dist/cli/commands/message-dispatch.js +63 -0
  357. package/dist/cli/commands/reply.d.ts.map +1 -1
  358. package/dist/cli/commands/reply.js +2 -5
  359. package/dist/cli/commands/respond.d.ts.map +1 -1
  360. package/dist/cli/commands/respond.js +3 -6
  361. package/dist/cli/commands/send.d.ts.map +1 -1
  362. package/dist/cli/commands/send.js +149 -146
  363. package/dist/cli/commands/wait.d.ts.map +1 -1
  364. package/dist/cli/commands/wait.js +589 -431
  365. package/dist/cli/types/api-responses.d.ts +159 -27
  366. package/dist/cli/types/api-responses.d.ts.map +1 -1
  367. package/dist/cli/types/api-responses.js +4 -2
  368. package/dist/cli/utils/api-client.d.ts +25 -5
  369. package/dist/cli/utils/api-client.d.ts.map +1 -1
  370. package/dist/cli/utils/api-client.js +87 -55
  371. package/dist/cli/utils/server-url.d.ts +1 -0
  372. package/dist/cli/utils/server-url.d.ts.map +1 -1
  373. package/dist/cli/utils/server-url.js +7 -0
  374. package/dist/config/uat-isolation.d.ts +140 -0
  375. package/dist/config/uat-isolation.d.ts.map +1 -0
  376. package/dist/config/uat-isolation.js +246 -0
  377. package/dist/lib/global-state.d.ts +12 -0
  378. package/dist/lib/global-state.d.ts.map +1 -0
  379. package/dist/lib/global-state.js +16 -0
  380. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  381. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  382. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  383. package/dist/lib/session/prompt-view.d.ts +26 -3
  384. package/dist/lib/session/prompt-view.d.ts.map +1 -1
  385. package/dist/lib/session/prompt-view.js +26 -3
  386. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  387. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  388. package/dist/lib/session/status-evidence-type.js +2 -0
  389. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  390. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  391. package/dist/server/locales/en/worktree.json +3 -1
  392. package/dist/server/locales/ja/worktree.json +3 -1
  393. package/dist/server/src/cli/types/api-responses.js +4 -2
  394. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  395. package/dist/server/src/config/uat-isolation.js +246 -0
  396. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  397. package/dist/server/src/lib/auto-yes-lifecycle.js +6 -0
  398. package/dist/server/src/lib/auto-yes-poller.js +450 -160
  399. package/dist/server/src/lib/auto-yes-state.js +2 -2
  400. package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
  401. package/dist/server/src/lib/cli-tools/base.js +151 -0
  402. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  403. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  404. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  405. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  406. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  407. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  408. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  409. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  410. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  411. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  412. package/dist/server/src/lib/detection/cli-patterns.js +374 -3065
  413. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  414. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  415. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  416. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  417. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  418. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  419. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  420. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  421. package/dist/server/src/lib/detection/tools/antigravity/detect.js +5 -29
  422. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  423. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  424. package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
  425. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  426. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  427. package/dist/server/src/lib/detection/tools/codex/detect.js +46 -85
  428. package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
  429. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  430. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  431. package/dist/server/src/lib/detection/tools/command-code/detect.js +8 -50
  432. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  433. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  434. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  435. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  436. package/dist/server/src/lib/detection/tools/copilot/detect.js +10 -35
  437. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  438. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  439. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  440. package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
  441. package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
  442. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  443. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
  444. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  445. package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
  446. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  447. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  448. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  449. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  450. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  451. package/dist/server/src/lib/global-state.js +16 -0
  452. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  453. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  454. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  455. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  456. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  457. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  458. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  459. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  460. package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
  461. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  462. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  463. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  464. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  465. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  466. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  467. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  468. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  469. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  470. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  471. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  472. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  473. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  474. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  475. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  476. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  477. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  478. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  479. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  480. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  481. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  482. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  483. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  484. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  485. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  486. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  487. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  488. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  489. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  490. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  491. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  492. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  493. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  494. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  495. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  496. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  497. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  498. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  499. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  500. package/dist/server/src/lib/polling/response-checker.js +641 -1142
  501. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  502. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  503. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  504. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  505. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  506. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  507. package/dist/server/src/lib/prompt-answer-sender.js +5 -4
  508. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  509. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  510. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  511. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  512. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  513. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -5
  514. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  515. package/dist/server/src/lib/relay/relay-delivery.js +3 -2
  516. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  517. package/dist/server/src/lib/response-cleaner.js +24 -1
  518. package/dist/server/src/lib/response-extractor.js +16 -0
  519. package/dist/server/src/lib/schedule-manager.js +8 -10
  520. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  521. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  522. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  523. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  524. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  525. package/dist/server/src/lib/session/agent-event-state.js +106 -1854
  526. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  527. package/dist/server/src/lib/session/agent-event-turn.js +811 -0
  528. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  529. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  530. package/dist/server/src/lib/session/claude-executor.js +45 -5
  531. package/dist/server/src/lib/session/claude-session.js +21 -65
  532. package/dist/server/src/lib/session/cli-session.js +17 -0
  533. package/dist/server/src/lib/session/current-output-builder.js +450 -1103
  534. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  535. package/dist/server/src/lib/session/current-output-types.js +9 -0
  536. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  537. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  538. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  539. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  540. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  541. package/dist/server/src/lib/session/prompt-view.js +26 -3
  542. package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
  543. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  544. package/dist/server/src/lib/session/send-user-message.js +1 -1
  545. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  546. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  547. package/dist/server/src/lib/session/status-evidence.js +2 -2
  548. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  549. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  550. package/dist/server/src/lib/session-cleanup.js +1 -5
  551. package/dist/server/src/lib/skills/install-plan.js +2 -1
  552. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  553. package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
  554. package/dist/server/src/lib/timer-manager.js +6 -8
  555. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  556. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  557. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  558. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  559. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  560. package/dist/server/src/lib/tmux/tmux.js +33 -59
  561. package/dist/server/src/lib/tui-accumulator.js +2 -2
  562. package/dist/server/src/lib/version-checker.js +6 -6
  563. package/dist/server/src/lib/ws-server.js +47 -11
  564. package/docs/en/user-guide/webapp-guide.md +27 -3
  565. package/package.json +1 -1
  566. package/release-notes/0.44.3.json +82 -0
  567. package/scripts/hooks/cmate-agent-event.sh +18 -0
  568. package/.next/server/chunks/1068.js +0 -1
  569. package/.next/server/chunks/4372.js +0 -5
  570. package/.next/server/chunks/6474.js +0 -14
  571. package/.next/server/chunks/967.js +0 -1
  572. package/.next/server/chunks/9798.js +0 -2
  573. package/.next/server/chunks/9882.js +0 -25
  574. package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
  575. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  576. package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +0 -1
  577. package/.next/static/css/38070d879efa1371.css +0 -1
  578. package/dist/server/src/lib/cli-tools/index.js +0 -41
  579. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  580. /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
  581. /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
@@ -0,0 +1,670 @@
1
+ "use strict";
2
+ /**
3
+ * The steps split out of `extractResponse`, including the per-tool
4
+ * startup-screen defenses (Issue #3374 split from response-checker.ts).
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.findChromeStart = findChromeStart;
8
+ exports.findRecentUserPromptIndexInFrame = findRecentUserPromptIndexInFrame;
9
+ exports.isTurnComplete = isTurnComplete;
10
+ exports.extractCompletedResponse = extractCompletedResponse;
11
+ exports.extractPartialResponse = extractPartialResponse;
12
+ const cli_patterns_1 = require("../../lib/detection/cli-patterns");
13
+ const logger_1 = require("../../lib/logger");
14
+ const thinking_constants_1 = require("../../config/thinking-constants");
15
+ const logger = (0, logger_1.createLogger)('response-poller');
16
+ const response_extractor_1 = require("../response-extractor");
17
+ const startup_screen_1 = require("./startup-screen");
18
+ const response_poller_constants_1 = require("./response-poller-constants");
19
+ const response_checker_extraction_result_1 = require("./response-checker-extraction-result");
20
+ /**
21
+ * How many rows from the bottom of a copilot capture may hold its status bar.
22
+ *
23
+ * `readCopilotStatusBar` stops at the first non-blank row from the end, and the
24
+ * capture handed to it here has already had its trailing blanks trimmed, so one
25
+ * row is enough in practice. The slack exists so the reader keeps working if that
26
+ * trim ever changes, without mapping a thousand rows through `stripAnsi` on every
27
+ * poll tick. (Issue #1897)
28
+ */
29
+ const COPILOT_STATUS_BAR_SCAN_ROWS = 8;
30
+ // ============================================================================
31
+ // extractResponse (internal)
32
+ // ============================================================================
33
+ /**
34
+ * Where the tool's pinned footer starts in the capture — the row the transcript
35
+ * stops at — or -1 when the tool pins none or its landmark is not on the frame.
36
+ *
37
+ * Split out of {@link extractResponse} (Issue #3213). The comment above
38
+ * `openCodeCleanLines` there introduces the first three readers and says why
39
+ * they stay separate functions; the one in the body here continues it.
40
+ *
41
+ * @param cliToolId - CLI tool identifier
42
+ * @param lines - The trimmed tmux buffer lines array
43
+ * @param openCodeCleanLines - `lines` with ANSI stripped for opencode, null for every other tool
44
+ * @returns Index of the first chrome row, or -1
45
+ */
46
+ function findChromeStart(cliToolId, lines, openCodeCleanLines) {
47
+ // Issue #2250: Command Code is the fourth. Its landmark is its own — the
48
+ // `❯ Ask your question...` composer fenced by two full-pane rules, with the
49
+ // permission-mode row underneath — and it is load-bearing rather than tidy:
50
+ // that placeholder is drawn with the same `❯ <text>` shape as a transcript
51
+ // echo, so without the boundary `findRecentUserPromptIndex` anchors the turn
52
+ // on the FOOTER and every reply extracts as empty (#1289's defect, verbatim).
53
+ //
54
+ // Issue #2400: codex is the fifth, and the one that had been missing. It pins
55
+ // the same two rows — `› Ask Codex to do anything` and the `model · cwd`
56
+ // status bar — and without a boundary the saturated-window anchor (#1670)
57
+ // walked into them: the newest `›` in the pane was the COMPOSER, so extraction
58
+ // started on the status bar and every reply on a saturated pane was saved as
59
+ // that one row. `findCodexChromeStart` reads the composer by its SGR
60
+ // attributes (#2310) rather than by its placeholder wording, which is what the
61
+ // previous guard did and why it stopped working at codex 0.15x.
62
+ return cliToolId === 'claude'
63
+ ? (0, cli_patterns_1.findClaudeChromeStart)(lines)
64
+ : cliToolId === 'copilot'
65
+ ? (0, cli_patterns_1.findCopilotChromeStart)(lines)
66
+ : cliToolId === 'command-code'
67
+ ? (0, cli_patterns_1.findCommandCodeChromeStart)(lines)
68
+ : cliToolId === 'codex'
69
+ ? (0, cli_patterns_1.findCodexChromeStart)(lines)
70
+ : openCodeCleanLines
71
+ ? (0, cli_patterns_1.findOpenCodeChromeStart)(openCodeCleanLines)
72
+ : -1;
73
+ }
74
+ /**
75
+ * Index of the newest echoed user prompt in the transcript, or -1 when there is
76
+ * none in the window.
77
+ *
78
+ * The body of the `findRecentUserPromptIndex` closure in {@link extractResponse},
79
+ * split out as it was (Issue #3213). The closure is still there: it binds the
80
+ * frame and keeps the default window, because `resolveExtractionStartIndex` and
81
+ * `buildPromptExtractionResult` take the search as a one-argument callback.
82
+ *
83
+ * @param cliToolId - CLI tool identifier
84
+ * @param lines - The trimmed tmux buffer lines array
85
+ * @param openCodeCleanLines - `lines` with ANSI stripped for opencode, null for every other tool
86
+ * @param chromeStart - What `findChromeStart` returned for this frame
87
+ * @param contentEnd - Where the transcript stops: `chromeStart`, or the line count when that is -1
88
+ * @param windowSize - How many rows up from `contentEnd` to search
89
+ * @returns Index into `lines`, or -1
90
+ */
91
+ function findRecentUserPromptIndexInFrame(cliToolId, lines, openCodeCleanLines, chromeStart, contentEnd, windowSize) {
92
+ let userPromptPattern;
93
+ if (cliToolId === 'codex') {
94
+ // Issue #2400: codex's three uses of `›` are separated by their SGR
95
+ // attributes, not by their text (#2310). This branch used to exclude the
96
+ // composer with a negative lookahead over its placeholder strings
97
+ // (`Implement`, `Find and fix`, `Type`, `Summarize`) — codex 0.1x wording,
98
+ // none of which 0.15x draws. `Ask Codex to do anything` passed the guard,
99
+ // became the newest "echo", and on a saturated pane (#1670) — the only
100
+ // path where this anchor decides where extraction STARTS — every reply was
101
+ // saved as the single status-bar row below it.
102
+ //
103
+ // Two independent things now keep the composer out, and the reader needs
104
+ // both because neither covers the other's frames: `contentEnd` cuts the
105
+ // composer off structurally when `findCodexChromeStart` located it, and
106
+ // when it did not, `findCodexUserEchoIndex` steps over the bottom-most
107
+ // `›` row instead. The second is what still answers on an ANSI-stripped
108
+ // capture, where none of #2310's attributes survive to be read.
109
+ return (0, cli_patterns_1.findCodexUserEchoIndex)(lines, contentEnd, windowSize, chromeStart >= 0);
110
+ }
111
+ else if (openCodeCleanLines) {
112
+ // Issue #1911: anchor on the newest ECHOED USER PROMPT, not on the
113
+ // second-to-last `▣ Build` row. The old anchor belonged to the PREVIOUS
114
+ // turn, so the echoed prompt of the current one was always extracted as
115
+ // part of the reply — and on the first turn of a session, where there is
116
+ // no second marker, it fell through to line 0 and the whole pane (banner
117
+ // included) became the answer. `windowSize` is ignored: the alternate
118
+ // screen has no scrollback, so the whole pane IS the window, and every
119
+ // caller already passes `totalLines` or more for this tool.
120
+ return (0, response_extractor_1.resolveOpenCodeTurnRegion)(openCodeCleanLines).echoEnd;
121
+ }
122
+ else if (cliToolId === 'copilot') {
123
+ // Issue #1897: copilot 1.0.80 draws the transcript one column in, so the
124
+ // bare `^[>❯]` form below never matched the echoed prompt -- every copilot
125
+ // extraction fell back to line 0, i.e. to the launch banner. The composer,
126
+ // which IS at column 0, lives below `contentEnd` and so cannot be picked up
127
+ // as an echo here.
128
+ //
129
+ // The scan then walks past the echo's own wrapped rows and returns the LAST
130
+ // of them, so that callers' `+ 1` lands on the reply rather than on the
131
+ // second half of the operator's question.
132
+ //
133
+ // Same defect as #1911's opencode branch above and the same shape of fix,
134
+ // but NOT the same code: opencode's echo is a `┃ <text>` gutter row and
135
+ // copilot's is ` ❯ <text>` at the pane's one-column indent, so the anchor
136
+ // and the continuation rule are both tool-specific measurements.
137
+ for (let i = contentEnd - 1; i >= Math.max(0, contentEnd - windowSize); i--) {
138
+ if (!cli_patterns_1.COPILOT_USER_ECHO_PATTERN.test((0, cli_patterns_1.stripAnsi)(lines[i])))
139
+ continue;
140
+ let echoEnd = i;
141
+ while (echoEnd + 1 < contentEnd &&
142
+ cli_patterns_1.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN.test((0, cli_patterns_1.stripAnsi)(lines[echoEnd + 1]))) {
143
+ echoEnd++;
144
+ }
145
+ return echoEnd;
146
+ }
147
+ return -1;
148
+ }
149
+ else {
150
+ userPromptPattern = /^[>❯]\s+\S/;
151
+ }
152
+ // Issue #1289: for Claude the search stops above the footer. The text the
153
+ // user just typed sits in the footer's input box and matches the same "❯ …"
154
+ // shape as the transcript echo; anchoring on it would treat the footer as
155
+ // the newest turn and extract the status bar as its reply.
156
+ for (let i = contentEnd - 1; i >= Math.max(0, contentEnd - windowSize); i--) {
157
+ const cleanLine = (0, cli_patterns_1.stripAnsi)(lines[i]);
158
+ if (userPromptPattern.test(cleanLine)) {
159
+ return i;
160
+ }
161
+ }
162
+ return -1;
163
+ }
164
+ // Startup-screen defenses, split out of extractResponse one function per tool
165
+ // (Issue #3213). Each is called on a frame the completion rules have already
166
+ // accepted, with the `response` extracted from it, and answers only for its own
167
+ // tool: the incomplete result to return when the frame is that tool's startup
168
+ // screen rather than a reply, `null` when the response stands. They are declared
169
+ // in the order extractResponse calls them — the comments inside say "above" and
170
+ // "below" about each other and about the checks that ran before the call.
171
+ //
172
+ // Issue #3293 added the last two, codex and vibe-local. Theirs is the one result
173
+ // here that is not incomplete: an empty COMPLETE one, for the reason given at
174
+ // `readStartupScreenPastCursor`.
175
+ /**
176
+ * Claude: the startup banner, and an echoed prompt with no reply under it yet.
177
+ *
178
+ * @param cliToolId - CLI tool identifier
179
+ * @param response - The response extracted from the frame
180
+ * @param totalLines - Total line count in the buffer
181
+ * @param skipPatterns - The tool's skip patterns from `getCliToolPatterns`
182
+ * @param findRecentUserPromptIndex - Callback to locate the most recent user prompt
183
+ * @returns The incomplete result to return, or null when the response stands
184
+ */
185
+ function suppressClaudeStartupScreen(cliToolId, response, totalLines, skipPatterns, findRecentUserPromptIndex) {
186
+ // CRITICAL FIX: Detect and skip Claude Code startup banner/screen
187
+ if (cliToolId === 'claude') {
188
+ const cleanResponse = (0, cli_patterns_1.stripAnsi)(response);
189
+ // Issue #2247: `│` is what Claude Code draws markdown TABLES with -- the
190
+ // live frame in `tests/fixtures/claude-live-2247/turn-table.txt` is a
191
+ // two-row table and nothing else -- so it identified a reply, not a banner.
192
+ // The banner's own frame glyphs are the rounded corners and the block
193
+ // shading; those stay.
194
+ const hasBannerArt = /[╭╮╰╯]/.test(cleanResponse) || /░{3,}/.test(cleanResponse) || /▓{3,}/.test(cleanResponse);
195
+ // Issue #2247: the bare `v\d+\.\d+` alternative matched any version string a
196
+ // reply happens to mention. The frame that lost a turn on 2026-09-02 was
197
+ // "GitHub Release v0.30.0 を公開しました" (148 chars, well under the 2000
198
+ // below). What the banner actually prints is the tool's own name and
199
+ // version on one row -- `Claude Code v2.1.258` -- so that is what is
200
+ // matched now, plus the `claude/` form older banners used.
201
+ const hasVersionInfo = /Claude Code v\d+\.\d+|claude\//.test(cleanResponse);
202
+ const hasStartupTips = /Tip:|for shortcuts|\?\s*for help/.test(cleanResponse);
203
+ const hasProjectInit = /^\s*\/Users\/.*$/m.test(cleanResponse) && cleanResponse.split('\n').length < 30;
204
+ // Issue #2247: the anchors above are only evidence of a banner on a pane
205
+ // that has not had a single turn yet -- the same shape as the #1897 copilot
206
+ // fix below. Claude echoes every prompt into the transcript as `❯ <text>`,
207
+ // and the startup screen has none, so an echo anywhere in the transcript
208
+ // rules the banner out no matter what the reply quotes.
209
+ //
210
+ // The search is `findRecentUserPromptIndex`, deliberately: it is the same
211
+ // `/^[>❯]\s+\S/` this file already anchors extraction on, and it stops at
212
+ // `contentEnd`. That bound is load-bearing rather than incidental -- the
213
+ // footer's composer draws a DIM ghost suggestion (`❯ Try "write a test for
214
+ // <filepath>"`, see `boot-banner.txt`) whose stripped bytes are identical
215
+ // to a real echo (#1879), so a scan over the whole pane would read the
216
+ // startup screen as "already had a turn" and put the banner back in
217
+ // History.
218
+ const hasTurnEcho = findRecentUserPromptIndex(totalLines) >= 0;
219
+ const userPromptMatch = cleanResponse.match(/^[>❯]\s+(\S.*)$/m);
220
+ if (userPromptMatch) {
221
+ const userPromptIndex = cleanResponse.indexOf(userPromptMatch[0]);
222
+ const contentAfterPrompt = cleanResponse.substring(userPromptIndex + userPromptMatch[0].length).trim();
223
+ const contentLines = contentAfterPrompt.split('\n').filter(line => {
224
+ const trimmed = line.trim();
225
+ return trimmed &&
226
+ !skipPatterns.some(p => p.test(trimmed)) &&
227
+ !/^─+$/.test(trimmed);
228
+ });
229
+ if (contentLines.length === 0) {
230
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
231
+ }
232
+ }
233
+ else if (!hasTurnEcho &&
234
+ (hasBannerArt || hasVersionInfo || hasStartupTips || hasProjectInit) &&
235
+ response.length < 2000) {
236
+ // Issue #2247: this branch used to swallow the turn in silence -- the
237
+ // poller kept ticking every 2s and `response-poller` logged nothing at
238
+ // all, so the only way to tell a lost turn from an idle session was to
239
+ // re-run `extractResponse` on a saved pane by hand. It is reached only
240
+ // before the first echo lands, so it cannot become a per-tick flood.
241
+ logger.info('Claude startup banner suppressed, response not saved', {
242
+ responseLength: response.length,
243
+ hasBannerArt,
244
+ hasVersionInfo,
245
+ hasStartupTips,
246
+ hasProjectInit,
247
+ });
248
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
249
+ }
250
+ }
251
+ return null;
252
+ }
253
+ /**
254
+ * Copilot: the launch screen.
255
+ *
256
+ * @param cliToolId - CLI tool identifier
257
+ * @param response - The response extracted from the frame
258
+ * @param totalLines - Total line count in the buffer
259
+ * @returns The incomplete result to return, or null when the response stands
260
+ */
261
+ function suppressCopilotLaunchScreen(cliToolId, response, totalLines) {
262
+ // Issue #1897: copilot's launch screen is a complete, idle frame -- composer
263
+ // drawn, key hints on the status bar -- so every check above accepts it and
264
+ // History used to open with the banner ("Current Sessions Issues Pull
265
+ // requests Gists / No copilot-instructions.md found… / Tip: /app") saved as
266
+ // the agent's first reply, before the operator had said anything.
267
+ //
268
+ // What actually distinguishes it is that no turn has happened: copilot echoes
269
+ // every prompt into the transcript as ` ❯ <text>`, and the launch screen has
270
+ // none. The banner anchors are only consulted once that echo is missing, so a
271
+ // reply that quotes any of this wording is unaffected.
272
+ if (cliToolId === 'copilot') {
273
+ const cleanResponse = (0, cli_patterns_1.stripAnsi)(response);
274
+ const hasUserEcho = cleanResponse
275
+ .split('\n')
276
+ .some(line => cli_patterns_1.COPILOT_USER_ECHO_PATTERN.test(line));
277
+ if (!hasUserEcho && cli_patterns_1.COPILOT_BOOT_BANNER_ANCHORS.some(anchor => anchor.test(cleanResponse))) {
278
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
279
+ }
280
+ }
281
+ return null;
282
+ }
283
+ /**
284
+ * Command Code: the launch screen.
285
+ *
286
+ * @param cliToolId - CLI tool identifier
287
+ * @param response - The response extracted from the frame
288
+ * @param totalLines - Total line count in the buffer
289
+ * @param findRecentUserPromptIndex - Callback to locate the most recent user prompt
290
+ * @returns The incomplete result to return, or null when the response stands
291
+ */
292
+ function suppressCommandCodeLaunchScreen(cliToolId, response, totalLines, findRecentUserPromptIndex) {
293
+ // Issue #2250: Command Code's launch screen is a complete, idle frame --
294
+ // block-art logo, three `#` banner rows, composer drawn between its two
295
+ // rules -- so every check above accepts it, and History would open with
296
+ // `# Command Code v1.40.1 / # models: … / # <cwd>` saved as the agent's
297
+ // first reply before the operator has said anything.
298
+ //
299
+ // The rule is ONE condition and it is a positive one: Command Code echoes
300
+ // every prompt into the transcript as `❯ <text>`, and the launch screen has
301
+ // none. That is the shape #1897 and #2247 both converged on; the anchor
302
+ // heuristics claude carries above (`hasBannerArt` / `hasVersionInfo` /
303
+ // `hasStartupTips`) are deliberately NOT reproduced here, because they are
304
+ // what #2247 had to take back -- a bare version string in a reply is a
305
+ // normal reply, and Command Code prints its own version on every launch.
306
+ //
307
+ // `findRecentUserPromptIndex` is the same `/^[>❯]\s+\S/` scan the extraction
308
+ // anchors on, and it stops at `contentEnd`, so the composer's own dim
309
+ // `❯ Ask your question...` placeholder cannot be mistaken for an echo
310
+ // (#1879's trap).
311
+ if (cliToolId === 'command-code' && findRecentUserPromptIndex(totalLines) < 0) {
312
+ logger.info('Command Code launch screen suppressed, response not saved', {
313
+ responseLength: response.length,
314
+ });
315
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
316
+ }
317
+ return null;
318
+ }
319
+ /**
320
+ * Gemini: the banner, the auth/loading states, and a frame too short to be a reply.
321
+ *
322
+ * @param cliToolId - CLI tool identifier
323
+ * @param response - The response extracted from the frame
324
+ * @param totalLines - Total line count in the buffer
325
+ * @returns The incomplete result to return, or null when the response stands
326
+ */
327
+ function suppressGeminiStartupScreen(cliToolId, response, totalLines) {
328
+ // Gemini-specific check
329
+ if (cliToolId === 'gemini') {
330
+ const bannerCharCount = (response.match(/[░█]/g) || []).length;
331
+ const totalChars = response.length;
332
+ if (bannerCharCount > totalChars * 0.3) {
333
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
334
+ }
335
+ if (response_poller_constants_1.GEMINI_LOADING_INDICATORS.some(indicator => response.includes(indicator))) {
336
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
337
+ }
338
+ if (!response.includes('\u2726') && response.length < 10) {
339
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
340
+ }
341
+ }
342
+ return null;
343
+ }
344
+ /**
345
+ * The result for a startup screen of a tool that reads its reply from the
346
+ * cursor: nothing to save, and the cursor moved past the screen (Issue #3293).
347
+ *
348
+ * The defenses above return an incomplete result and leave the cursor where it
349
+ * was. Where extraction is anchored on the echoed prompt (copilot,
350
+ * command-code, opencode) that costs nothing: once a turn exists, the banner
351
+ * above its echo is never read. codex and vibe-local start at
352
+ * `lastCapturedLine`. A cursor left at 0 would put the banner back on the first
353
+ * turn — vibe-local's first reply would be saved with the whole startup screen
354
+ * above it.
355
+ *
356
+ * So the screen is reported as read: a COMPLETE result with an empty response
357
+ * and the `lineCount` the banner save had. `checkForResponse` writes that
358
+ * cursor and saves nothing ("Validate response content is not empty"), which
359
+ * leaves every later tick with exactly the cursor it had before this Issue.
360
+ *
361
+ * Asked of the whole pane, by the reader the pre-send flush uses for the same
362
+ * question ({@link isStartupScreenWithoutUserEcho}), and not of a clipped
363
+ * capture: the echo of a turn longer than the window has scrolled out (#1670).
364
+ *
365
+ * @param tool - The tool the calling defense answers for
366
+ * @param ctx - What this call has read off the capture
367
+ * @param response - The response extracted from the frame
368
+ * @param endIndex - The line count `collectCompletedResponse` reported for it
369
+ * @returns The empty complete result to return, or null when the response stands
370
+ */
371
+ function readStartupScreenPastCursor(tool, ctx, response, endIndex) {
372
+ const { cliToolId, lines, lastCapturedLine, bufferReset, captureWindowSaturated } = ctx;
373
+ // An empty response is already what this would return.
374
+ if (cliToolId !== tool || !response || captureWindowSaturated) {
375
+ return null;
376
+ }
377
+ if (!(0, startup_screen_1.isStartupScreenWithoutUserEcho)(cliToolId, lines)) {
378
+ return null;
379
+ }
380
+ // Only when `checkForResponse` goes on to write the cursor, which is once per
381
+ // startup screen. vibe-local's cursor ends on the last row, so every later
382
+ // tick of the idle pane takes the buffer-reset branch, re-extracts the banner
383
+ // and arrives here again.
384
+ if (bufferReset || endIndex > lastCapturedLine) {
385
+ logger.info(`${tool} startup screen suppressed, response not saved`, {
386
+ responseLength: response.length,
387
+ lineCount: endIndex,
388
+ });
389
+ }
390
+ return {
391
+ response: '',
392
+ isComplete: true,
393
+ lineCount: endIndex,
394
+ bufferReset,
395
+ captureWindowSaturated,
396
+ };
397
+ }
398
+ /**
399
+ * Codex: the startup screen.
400
+ *
401
+ * @param ctx - What this call has read off the capture
402
+ * @param response - The response extracted from the frame
403
+ * @param endIndex - The line count `collectCompletedResponse` reported for it
404
+ * @returns The empty complete result to return, or null when the response stands
405
+ */
406
+ function suppressCodexStartupScreen(ctx, response, endIndex) {
407
+ // Issue #3293: codex's startup screen is a complete, idle frame — composer
408
+ // drawn, no status line above it — so `hasPrompt && !isThinking` accepts it,
409
+ // and the rows from the cursor down were saved as the agent's first reply.
410
+ // On 0.160.0 that is `>_ OpenAI Codex (v0.160.0)`, the cwd, a tagline and the
411
+ // block-art logo (20 rows in `tests/fixtures/startup-screen-3293/`); on 0.15x
412
+ // the `Tip:` and usage notices under the banner box, whose own rows the skip
413
+ // patterns happen to drop.
414
+ //
415
+ // It took one poll of that screen. The frame the folder-trust dialog leaves
416
+ // behind when it is answered is this screen, and answering it with `respond`
417
+ // starts the poller.
418
+ //
419
+ // The dialog itself never reaches this point: it has no composer, and it was
420
+ // returned as a prompt by the early check in extractResponse.
421
+ //
422
+ // A turn longer than the pane does reach it, and has to pass. 0.160.0 keeps
423
+ // no scrollback, so the echo of such a turn has left the pane off the top and
424
+ // "composer, no echo above it" holds for a finished reply. The reader asks
425
+ // for the banner row as well, which that pane has lost with the echo.
426
+ //
427
+ // Issue #3335: on 0.160.0 the cursor this leaves (the composer row, 996) is
428
+ // also where it stays — the pane does not grow, so the replies of the
429
+ // session are drawn above it and the screen read takes none of them. That
430
+ // is by design: they reach History from codex's transcript. See the codex
431
+ // branch of `resolveExtractionStartIndex`.
432
+ return readStartupScreenPastCursor('codex', ctx, response, endIndex);
433
+ }
434
+ /**
435
+ * Vibe Local: the startup screen.
436
+ *
437
+ * @param ctx - What this call has read off the capture
438
+ * @param response - The response extracted from the frame
439
+ * @param endIndex - The line count `collectCompletedResponse` reported for it
440
+ * @returns The empty complete result to return, or null when the response stands
441
+ */
442
+ function suppressVibeLocalStartupScreen(ctx, response, endIndex) {
443
+ // Issue #3293: vibe-local's startup screen ends in an empty `ctx:N% ❯` prompt
444
+ // row with nothing working, so it is accepted the same way. Its skip patterns
445
+ // name some banner rows (`Model …`, `CWD …`) and miss the rest — the
446
+ // launcher's `Model: …` / `Ollama: …` box, the logo, the hint rows — so most
447
+ // of the screen was saved (20 rows of the 1.3.3 capture in the same fixtures).
448
+ return readStartupScreenPastCursor('vibe-local', ctx, response, endIndex);
449
+ }
450
+ /**
451
+ * Does this frame show a finished turn, by its tool's own completion rule?
452
+ *
453
+ * The readings and the four per-tool rules that decided the completion branch
454
+ * of {@link extractResponse}, split out as they were (Issue #3213). The return
455
+ * is the condition that `if` tested.
456
+ *
457
+ * @param ctx - What this call has read off the capture
458
+ * @returns True when the turn on the frame is finished
459
+ */
460
+ function isTurnComplete(ctx) {
461
+ const { cliToolId, lines, totalLines, checkLineCount, cleanOutputToCheck, promptPattern, separatorPattern, thinkingPattern, } = ctx;
462
+ const hasPrompt = promptPattern.test(cleanOutputToCheck);
463
+ const hasSeparator = separatorPattern.test(cleanOutputToCheck);
464
+ // Issue #1671: Codex's activity markers are past-tense transcript records that
465
+ // never leave the scrollback, so testing them against this fixed tail window
466
+ // reports "still thinking" for a finished turn whenever its final message was
467
+ // short enough to keep the last "• Ran <cmd>" row inside the window. Codex gets
468
+ // a liveness check that keys off the status line it repaints above the composer
469
+ // instead; every other tool keeps the tail-window match.
470
+ const isThinking = cliToolId === 'codex'
471
+ ? (0, cli_patterns_1.isCodexTurnActive)(lines, checkLineCount)
472
+ : thinkingPattern.test(cleanOutputToCheck);
473
+ // Issue #1897: copilot's `hasPrompt` is worthless as a completion signal and
474
+ // its `isThinking` is worthless as a liveness one. The `❯` composer is drawn
475
+ // between its two rules throughout a turn (measured on every frame of #1885's
476
+ // running fixtures), and `COPILOT_THINKING_PATTERN` matches nothing copilot
477
+ // 1.0.80 draws (0 of 44 live generating frames). So `hasPrompt && !isThinking`
478
+ // was true on the very first poll of a running turn -- the extractor declared
479
+ // the turn finished, saved the status bar as the reply, and `checkForResponse`
480
+ // stopped polling, which is why the real answer never reached History.
481
+ //
482
+ // 1.0.80 paints the turn's state on the bottom row of the pane and nowhere
483
+ // else, so that ROW -- never a tail window, which copilot's own reply text can
484
+ // forge (`status-vocabulary-in-response.txt`) -- is the evidence. `idle` is a
485
+ // positive observation that the turn is over (design policy §4 D1 decision 1
486
+ // item 2); `working` and `null` (a dialog box has taken the bar away) both mean
487
+ // "not finished", and the dialog case is already served by the prompt path
488
+ // above.
489
+ const copilotStatusBar = cliToolId === 'copilot'
490
+ ? (0, cli_patterns_1.readCopilotStatusBar)(lines.slice(Math.max(0, totalLines - COPILOT_STATUS_BAR_SCAN_ROWS)).map(cli_patterns_1.stripAnsi))
491
+ : null;
492
+ // Prompt-based completion logic
493
+ const isPromptBasedComplete = cliToolId === 'copilot'
494
+ ? copilotStatusBar === 'idle'
495
+ : (cliToolId === 'codex' || cliToolId === 'gemini' || cliToolId === 'vibe-local' || cliToolId === 'antigravity') && hasPrompt && !isThinking;
496
+ const isClaudeComplete = cliToolId === 'claude' && hasPrompt && hasSeparator && !isThinking;
497
+ // Issue #2250: claude's shape, because Command Code's layout is claude's — the
498
+ // composer sits between two full-pane rules and is drawn only when the agent
499
+ // will accept input. Deliberately NOT keyed on `✻ Worked for`: that row is the
500
+ // live turn's, not the transcript's (it is present in `turn-version.txt` and
501
+ // gone from `dialog-create-file.txt`, the same pane one prompt later) and
502
+ // `WorkedDurationNote` omits it entirely for a turn under 1000 ms.
503
+ const isCommandCodeComplete = cliToolId === 'command-code' && hasPrompt && hasSeparator && !isThinking;
504
+ const isOpenCodeDone = cliToolId === 'opencode' && (0, response_extractor_1.isOpenCodeComplete)(cleanOutputToCheck);
505
+ return isPromptBasedComplete || isClaudeComplete || isCommandCodeComplete || isOpenCodeDone;
506
+ }
507
+ /**
508
+ * Collect the rows of a finished turn's reply, and where the cursor stops.
509
+ *
510
+ * The first half of the completion branch of {@link extractResponse}, split out
511
+ * as it was (Issue #3213). The loop writes `endIndex` when it stops early, so
512
+ * it is returned beside the response instead of being written through.
513
+ *
514
+ * @param ctx - What this call has read off the capture
515
+ * @returns The trimmed response, and the line count to report for it
516
+ */
517
+ function collectCompletedResponse(ctx) {
518
+ const { cliToolId, lines, totalLines, chromeStart, contentEnd, lastCapturedLine, bufferReset, captureWindowSaturated, skipPatterns, findRecentUserPromptIndex, } = ctx;
519
+ const responseLines = [];
520
+ const startIndex = (0, response_extractor_1.resolveExtractionStartIndex)(lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, captureWindowSaturated);
521
+ // `contentEnd` bounds the content only; `endIndex` keeps reporting the full
522
+ // buffer so lineCount bookkeeping in session_states is unchanged (#1289).
523
+ //
524
+ // Issue #2400: codex is the exception, and it is the pre-existing behaviour
525
+ // rather than a new rule. Before this Issue the loop below stopped on the
526
+ // composer's `›` and wrote that row's index into `endIndex`; now the composer
527
+ // is outside `contentEnd`, so the break can no longer fire on it and
528
+ // `endIndex` would silently advance ~3 rows further. Those rows matter for
529
+ // codex specifically: it renders INLINE, and it repaints the composer band in
530
+ // place — the next turn's transcript is printed over exactly the rows the
531
+ // composer occupied in this capture. A cursor parked past them would skip
532
+ // real content on the following poll. So the cursor stops where the content
533
+ // stops, which is what it did before.
534
+ let endIndex = cliToolId === 'codex' ? contentEnd : totalLines;
535
+ for (let i = startIndex; i < contentEnd; i++) {
536
+ const line = lines[i];
537
+ const cleanLine = (0, cli_patterns_1.stripAnsi)(line);
538
+ if (cliToolId === 'codex' && /^›\s+/.test(cleanLine)) {
539
+ endIndex = i;
540
+ break;
541
+ }
542
+ if (cliToolId === 'gemini' && /^(%|\$|.*@.*[%$#])\s*$/.test(cleanLine)) {
543
+ endIndex = i;
544
+ break;
545
+ }
546
+ // Antigravity (agy): the bare ">" input box line marks the end of the
547
+ // response (the status bar and shortcuts footer follow below it). (Issue #988)
548
+ if (cliToolId === 'antigravity' && /^>\s*$/.test(cleanLine)) {
549
+ endIndex = i;
550
+ break;
551
+ }
552
+ // Issue #1911: both rows this stops on (`Ask anything...` in the composer,
553
+ // `tab agents ctrl+p commands` under its border) live in the chrome, which
554
+ // `contentEnd` now excludes structurally. Kept only as the fallback for a
555
+ // frame whose chrome could not be located, because there it is still the
556
+ // one boundary available — and #1883 measured that a REPLY can contain
557
+ // `Ask anything...`, so cutting the turn on it is a last resort, not the
558
+ // primary rule.
559
+ if (cliToolId === 'opencode' && chromeStart < 0) {
560
+ if (cli_patterns_1.OPENCODE_PROMPT_PATTERN.test(cleanLine) || cli_patterns_1.OPENCODE_PROMPT_AFTER_RESPONSE.test(cleanLine)) {
561
+ endIndex = i;
562
+ break;
563
+ }
564
+ }
565
+ const shouldSkip = skipPatterns.some(pattern => pattern.test(cleanLine));
566
+ if (shouldSkip) {
567
+ continue;
568
+ }
569
+ responseLines.push(line);
570
+ }
571
+ const response = responseLines.join('\n').trim();
572
+ return { response, endIndex };
573
+ }
574
+ /**
575
+ * Build the result for a frame the completion rules accepted.
576
+ *
577
+ * The body of the completion branch of {@link extractResponse}, split out as it
578
+ * was (Issue #3213). Every return is `extractResponse`'s own result: incomplete
579
+ * when the reply's tail still shows a thinking indicator or the frame is a
580
+ * startup screen, complete otherwise. (A codex or vibe-local startup screen is
581
+ * the exception — complete, with an empty response; Issue #3293.)
582
+ *
583
+ * @param ctx - What this call has read off the capture
584
+ * @returns What `extractResponse` returns for this frame
585
+ */
586
+ function extractCompletedResponse(ctx) {
587
+ const { cliToolId, totalLines, openCodeCleanLines, bufferReset, captureWindowSaturated, thinkingPattern, skipPatterns, findRecentUserPromptIndex, } = ctx;
588
+ const { response, endIndex } = collectCompletedResponse(ctx);
589
+ // DR-004: Check only the tail of the response for thinking indicators.
590
+ //
591
+ // Issue #1897: not for copilot. This is the same tail-window match the #1671
592
+ // codex fix removed from the liveness test, and on copilot it is both
593
+ // redundant and harmful: the status bar above has already made a positive
594
+ // `idle` observation about THIS frame, while the window here sees transcript
595
+ // that never scrolls away. `COPILOT_THINKING_PATTERN`'s braille alternative
596
+ // matches any spinner glyph a reply happens to quote, and the turn would then
597
+ // be reported unfinished for the rest of the session.
598
+ const responseTailLines = response.split('\n').slice(-thinking_constants_1.THINKING_TAIL_LINE_COUNT).join('\n');
599
+ if (cliToolId !== 'copilot' && thinkingPattern.test(responseTailLines)) {
600
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
601
+ }
602
+ // Startup-screen defenses, one per tool and in this order. Each answers only
603
+ // for its own tool; `null` means the response stands.
604
+ const startupScreen = suppressClaudeStartupScreen(cliToolId, response, totalLines, skipPatterns, findRecentUserPromptIndex) ??
605
+ suppressCopilotLaunchScreen(cliToolId, response, totalLines) ??
606
+ suppressCommandCodeLaunchScreen(cliToolId, response, totalLines, findRecentUserPromptIndex) ??
607
+ suppressGeminiStartupScreen(cliToolId, response, totalLines) ??
608
+ suppressCodexStartupScreen(ctx, response, endIndex) ??
609
+ suppressVibeLocalStartupScreen(ctx, response, endIndex);
610
+ if (startupScreen) {
611
+ return startupScreen;
612
+ }
613
+ return {
614
+ response,
615
+ isComplete: true,
616
+ lineCount: endIndex,
617
+ bufferReset,
618
+ captureWindowSaturated,
619
+ // Issue #1911: opencode only. `echoEnd < 0` means the turn is longer than
620
+ // the alternate-screen pane and its head has already scrolled away, so
621
+ // `response` starts mid-answer. Nothing else in this frame can recover it.
622
+ turnHeadTruncated: openCodeCleanLines
623
+ ? (0, response_extractor_1.resolveOpenCodeTurnRegion)(openCodeCleanLines).headTruncated
624
+ : undefined,
625
+ };
626
+ }
627
+ /**
628
+ * Build the result for a frame whose turn is still running: what has streamed
629
+ * so far, or an empty incomplete result when nothing has.
630
+ *
631
+ * The tail of {@link extractResponse}, split out as it was (Issue #3213). Both
632
+ * returns are `extractResponse`'s own result.
633
+ *
634
+ * @param ctx - What this call has read off the capture
635
+ * @returns What `extractResponse` returns for this frame
636
+ */
637
+ function extractPartialResponse(ctx) {
638
+ const { lines, totalLines, contentEnd, lastCapturedLine, bufferReset, captureWindowSaturated, skipPatterns, findRecentUserPromptIndex, } = ctx;
639
+ // Partial response in progress
640
+ const responseLines = [];
641
+ const endIndex = totalLines;
642
+ // Issue #1670: a saturated window makes lastCapturedLine meaningless here too —
643
+ // starting the partial slice at it would stream an arbitrary tail fragment
644
+ // instead of the turn so far. Re-anchor on the echoed user prompt.
645
+ const partialBufferReset = bufferReset || captureWindowSaturated || lastCapturedLine >= endIndex - 5;
646
+ const recentPromptIndex = partialBufferReset ? findRecentUserPromptIndex(80) : -1;
647
+ const startIndex = partialBufferReset
648
+ ? (recentPromptIndex >= 0 ? recentPromptIndex + 1 : Math.max(0, endIndex - 80))
649
+ : Math.max(0, lastCapturedLine);
650
+ // Partial (still-streaming) content is bounded by the footer too (#1289).
651
+ for (let i = startIndex; i < Math.min(endIndex, contentEnd); i++) {
652
+ const line = lines[i];
653
+ const cleanLine = (0, cli_patterns_1.stripAnsi)(line);
654
+ const shouldSkip = skipPatterns.some(pattern => pattern.test(cleanLine));
655
+ if (shouldSkip) {
656
+ continue;
657
+ }
658
+ responseLines.push(line);
659
+ }
660
+ const partialResponse = responseLines.join('\n').trim();
661
+ if (partialResponse) {
662
+ return {
663
+ response: partialResponse,
664
+ isComplete: false,
665
+ lineCount: endIndex,
666
+ };
667
+ }
668
+ // Response not yet complete
669
+ return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
670
+ }