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,29 @@
1
+ "use strict";
2
+ /**
3
+ * Gemini pattern constants 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.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = void 0;
8
+ /**
9
+ * Gemini interactive REPL prompt pattern
10
+ * Gemini CLI shows a `>` or `❯` prompt when waiting for user input in interactive mode.
11
+ *
12
+ * Two branches (Issue #386):
13
+ * - Branch 1: `^[>❯]\s*$` -- bare prompt character (empty input line)
14
+ * - Branch 2: `^\s*[>❯]\s+Type your message.*$` -- new-format prompt with placeholder text
15
+ * (e.g., " > Type your message or @path/to/file"). Leading whitespace is allowed
16
+ * because tmux capture-pane output may include padding.
17
+ *
18
+ * Branch 2 requires "Type your message" after the indicator to avoid false positives
19
+ * on quoted response lines (e.g., "> some quoted text").
20
+ *
21
+ * @see CLAUDE_PROMPT_PATTERN for similar dual-format matching approach
22
+ */
23
+ // [S4-5] /g flag prohibited: would make test() stateful
24
+ exports.GEMINI_PROMPT_PATTERN = /^[>❯]\s*$|^\s*[>❯]\s+Type your message.*$/m;
25
+ /**
26
+ * Gemini thinking/processing pattern
27
+ * Gemini CLI shows braille spinner characters and status text while processing.
28
+ */
29
+ exports.GEMINI_THINKING_PATTERN = /[\u2800-\u28FF]|Thinking\.\.\./;
@@ -6,7 +6,7 @@
6
6
  * `normalizeFrame` reads it, and the detector modules import `normalizeFrame`,
7
7
  * so going through `registry.ts` would close an import cycle. Each detector
8
8
  * declares the same object as its `ToolDetectorSpec.liveRegion`, and
9
- * `detector-contract.test.ts` holds the two to identity.
9
+ * `live-region-markers.test.ts` holds the two to identity.
10
10
  *
11
11
  * `gemini` and `vibe-local` have no measured frames and no declaration: their
12
12
  * frames carry the whole-frame region, which is the pre-#3183 reading.
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.opencodeStatusDetector = exports.VERIFIED_AGAINST = void 0;
12
12
  exports.readIdleEvidence = readIdleEvidence;
13
13
  const cli_patterns_1 = require("../../cli-patterns");
14
+ const verdicts_1 = require("../verdicts");
14
15
  const status_reason_1 = require("../../status-reason");
15
16
  const opencode_modal_overlay_1 = require("../../opencode-modal-overlay");
16
17
  const prompt_1 = require("./prompt");
@@ -126,23 +127,11 @@ exports.opencodeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
126
127
  // `wait` still stops for it (`isSelectionListActive` → exit 10) and the UI
127
128
  // renders NavigationButtons, which send exactly the keys the strip takes.
128
129
  if (cli_patterns_1.OPENCODE_PERMISSION_PATTERN.test(frame.lastLines)) {
129
- return {
130
- status: 'waiting',
131
- confidence: 'high',
132
- reason: status_reason_1.STATUS_REASON.OPENCODE_PERMISSION_PROMPT,
133
- hasActivePrompt: false,
134
- evidence: 'positive',
135
- };
130
+ return (0, verdicts_1.positiveVerdict)('waiting', status_reason_1.STATUS_REASON.OPENCODE_PERMISSION_PROMPT);
136
131
  }
137
132
  // A. Check footer for processing indicator ("esc interrupt" replaces "ctrl+t variants..." during processing)
138
133
  if (cli_patterns_1.OPENCODE_PROCESSING_INDICATOR.test(frame.lastLines)) {
139
- return {
140
- status: 'running',
141
- confidence: 'high',
142
- reason: status_reason_1.STATUS_REASON.OPENCODE_PROCESSING_INDICATOR,
143
- hasActivePrompt: false,
144
- evidence: 'positive',
145
- };
134
+ return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.OPENCODE_PROCESSING_INDICATOR);
146
135
  }
147
136
  const { candidates, lastIndex } = findContentEnd(frame);
148
137
  if (lastIndex < 0)
@@ -152,13 +141,7 @@ exports.opencodeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
152
141
  .slice(Math.max(0, lastIndex - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastIndex + 1)
153
142
  .join('\n');
154
143
  if ((0, cli_patterns_1.detectThinking)('opencode', contentThinkingWindow)) {
155
- return {
156
- status: 'running',
157
- confidence: 'high',
158
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
159
- hasActivePrompt: false,
160
- evidence: 'positive',
161
- };
144
+ return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
162
145
  }
163
146
  // C. Check content area for selection list (Issue #473: fuzzy-search list detection)
164
147
  // Selection list header ("Select model"/"Select provider") may be far above the
@@ -167,13 +150,7 @@ exports.opencodeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
167
150
  .slice(Math.max(0, lastIndex - frame_1.STATUS_CHECK_LINE_COUNT + 1), lastIndex + 1)
168
151
  .join('\n');
169
152
  if (cli_patterns_1.OPENCODE_SELECTION_LIST_PATTERN.test(candidates.join('\n'))) {
170
- return {
171
- status: 'waiting',
172
- confidence: 'high',
173
- reason: status_reason_1.STATUS_REASON.OPENCODE_SELECTION_LIST,
174
- hasActivePrompt: false,
175
- evidence: 'positive',
176
- };
153
+ return (0, verdicts_1.positiveVerdict)('waiting', status_reason_1.STATUS_REASON.OPENCODE_SELECTION_LIST);
177
154
  }
178
155
  // C2. A modal overlay painted over the transcript (Issue #2112).
179
156
  //
@@ -208,13 +185,7 @@ exports.opencodeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
208
185
  // production caller of `detectSessionStatus` passes the `capture-pane -e`
209
186
  // bytes (`lib/tmux/tmux.ts` always passes `-e`).
210
187
  if ((0, opencode_modal_overlay_1.detectOpenCodeModalOverlay)(frame.raw) !== null) {
211
- return {
212
- status: 'waiting',
213
- confidence: 'high',
214
- reason: status_reason_1.STATUS_REASON.OPENCODE_MODAL_OVERLAY,
215
- hasActivePrompt: false,
216
- evidence: 'positive',
217
- };
188
+ return (0, verdicts_1.positiveVerdict)('waiting', status_reason_1.STATUS_REASON.OPENCODE_MODAL_OVERLAY);
218
189
  }
219
190
  // D. Check last few content lines for the finished-turn marker.
220
191
  //
@@ -227,13 +198,7 @@ exports.opencodeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
227
198
  // through to the heuristics rather than claiming a completion that never
228
199
  // happened, which is what design rule D1 asks for.
229
200
  if (cli_patterns_1.OPENCODE_TURN_COMPLETE_PATTERN.test(contentCheckWindow)) {
230
- return {
231
- status: 'ready',
232
- confidence: 'high',
233
- reason: status_reason_1.STATUS_REASON.OPENCODE_RESPONSE_COMPLETE,
234
- hasActivePrompt: false,
235
- evidence: 'positive',
236
- };
201
+ return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.OPENCODE_RESPONSE_COMPLETE);
237
202
  }
238
203
  // E. Idle composer (Issue #473 found the row; Issue #1883 made it positive).
239
204
  //
@@ -257,13 +222,7 @@ exports.opencodeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
257
222
  .slice(Math.max(0, lastIndex - frame_1.STATUS_CHECK_LINE_COUNT + 1), lastIndex + 1)
258
223
  .join('\n');
259
224
  if (cli_patterns_1.OPENCODE_IDLE_COMPOSER_PATTERN.test(composerWindow)) {
260
- return {
261
- status: 'ready',
262
- confidence: 'high',
263
- reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
264
- hasActivePrompt: false,
265
- evidence: 'positive',
266
- };
225
+ return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
267
226
  }
268
227
  return null;
269
228
  },
@@ -0,0 +1,508 @@
1
+ "use strict";
2
+ /**
3
+ * OpenCode pattern constants and helpers moved out of `../../cli-patterns.ts`
4
+ * (Issue #3217 I-3). `cli-patterns.ts` re-exports every public name.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = void 0;
8
+ exports.findOpenCodeChromeStart = findOpenCodeChromeStart;
9
+ exports.findOpenCodeUserEchoEnd = findOpenCodeUserEchoEnd;
10
+ exports.findOpenCodeComposerRows = findOpenCodeComposerRows;
11
+ exports.stripOpenCodeGutter = stripOpenCodeGutter;
12
+ const pasted_text_1 = require("../../shared/pasted-text");
13
+ /**
14
+ * OpenCode prompt pattern (Issue #379)
15
+ * OpenCode TUI shows "Ask anything..." in the input area when waiting for user input.
16
+ * Unlike Claude/Codex (which use > or ❯), OpenCode uses a text-based prompt indicator.
17
+ */
18
+ exports.OPENCODE_PROMPT_PATTERN = /Ask anything(?:\.\.\.|\u2026)/;
19
+ /**
20
+ * OpenCode idle composer pattern (Issue #1883).
21
+ *
22
+ * The `Ask anything...` placeholder as opencode actually draws it: **inside the
23
+ * input box**, behind the box's own gutter (`\u2503`, or `\u2502` on a lighter
24
+ * border style). Two measured facts make that row positive evidence that the
25
+ * composer is empty, rather than the mere absence of a busy marker (design
26
+ * principle D1 in `docs/design/multi-agent-state-architecture.md`):
27
+ *
28
+ * - opencode paints the placeholder **only while the input buffer is empty**.
29
+ * The first typed character replaces the whole row — measured live on
30
+ * opencode 1.18.20, pane 80x200 (`opencode-live-1883/composer-residual.txt`
31
+ * holds `\u2503 echo PREFILLED` where the idle frame holds the placeholder).
32
+ * - the gutter says the row belongs to the input box. `Ask anything...` printed
33
+ * in a response body has no gutter, and reading that as an idle composer is
34
+ * the "the phrase is on screen somewhere" inference D1 forbids.
35
+ *
36
+ * **Match this against the ANSI-stripped frame BEFORE {@link stripBoxDrawing}**,
37
+ * which strips the very gutter this pattern anchors on.
38
+ *
39
+ * The whitespace runs are `[^\S\n]` (horizontal only) on purpose: plain `\s`
40
+ * crosses newlines under the `m` flag, which let the gutter of one row pair up
41
+ * with the phrase several rows below it and matched frames that hold no
42
+ * composer at all (measured on `phrase-in-response.txt`).
43
+ *
44
+ * {@link OPENCODE_PROMPT_PATTERN} stays as it is: `response-checker` and
45
+ * `OPENCODE_SKIP_PATTERNS` want the bare phrase wherever it lands, because they
46
+ * are deleting the row from an extracted response, not judging a session.
47
+ *
48
+ * opencode 1.18.31 以降は見本文を U+2026(`…`)で描く。ASCII の `...` も実行ファイルに
49
+ * 残っているので両方を受け付ける(Issue #2915、2026-09-28 に実行ファイルから確認)。
50
+ */
51
+ exports.OPENCODE_IDLE_COMPOSER_PATTERN = /^[^\S\n]*[\u2502\u2503][^\S\n]*Ask anything(?:\.\.\.|\u2026)/m;
52
+ /**
53
+ * OpenCode prompt pattern after response completion (Issue #379)
54
+ * Shows "tab agents ctrl+p commands" in the TUI status bar after a response finishes.
55
+ * Used as extraction stop condition in response-poller.ts [D2-003].
56
+ */
57
+ exports.OPENCODE_PROMPT_AFTER_RESPONSE = /tab agents\s+ctrl\+p commands/;
58
+ /**
59
+ * OpenCode thinking/processing pattern (Issue #379)
60
+ * OpenCode TUI shows "Thinking:" prefix while the Ollama model is generating a response.
61
+ * Used by detectThinking() to determine if the tool is actively processing.
62
+ */
63
+ exports.OPENCODE_THINKING_PATTERN = /Thinking:/;
64
+ /**
65
+ * OpenCode loading indicator pattern (Issue #379)
66
+ * Shows a series of 4+ filled square characters (U+2B1D) during initial loading/model warm-up.
67
+ * Filtered from response extraction via OPENCODE_SKIP_PATTERNS.
68
+ */
69
+ exports.OPENCODE_LOADING_PATTERN = /\u2B1D{4,}/;
70
+ /**
71
+ * OpenCode's Build summary LINE, in either of the two forms it is drawn in
72
+ * (Issue #379, corrected by Issue #1893).
73
+ *
74
+ * **This is a line filter, not completion evidence.** It matches
75
+ * `▣ <Action> · <model>` with the duration OPTIONAL, and opencode 1.18 draws
76
+ * that duration-less form on a step that is still in flight -- so a frame this
77
+ * pattern matches may be mid-turn, waiting on a permission dialog, or aborted.
78
+ * Use {@link OPENCODE_TURN_COMPLETE_PATTERN} to decide that a turn has finished.
79
+ *
80
+ * The docstring that stood here until #1893 claimed the opposite ("short
81
+ * responses may omit the timing portion"). Measured against opencode 1.18.21 at
82
+ * the production 80x200 geometry, that is wrong in both directions:
83
+ *
84
+ * - a 2.3-second answer still carries its duration
85
+ * (`▣ Build · GPT-5.6 Luna · 2.3s`, `opencode-live-1893/turn-complete-short.txt`),
86
+ * so no completed turn needs the duration-less branch;
87
+ * - the duration-less form is what opencode leaves on screen while a tool call
88
+ * waits for permission and after a rejected one
89
+ * (`opencode-live-1893/permission-bash.txt`, `…/turn-aborted-no-duration.txt`).
90
+ *
91
+ * Kept loose because three callers want the LINE rather than the verdict:
92
+ * `tui-accumulator.ts`, `response-cleaner.ts` and `polling/response-checker.ts`
93
+ * all use it to drop the summary row from an extracted response, and the
94
+ * mid-step row has to be dropped too. #1911 removed the one caller that used it
95
+ * as a turn BOUNDARY rather than a line filter (the "second-to-last ▣" anchor,
96
+ * replaced by {@link findOpenCodeUserEchoEnd}); the name is left alone because
97
+ * the remaining three callers all want the line.
98
+ */
99
+ exports.OPENCODE_RESPONSE_COMPLETE = /\u25A3\s+\w+\s+·\s+\S+(?:\s+·\s+(?:[\d]+h\s*)?(?:[\d]+m\s*)?[\d.]+s)?/;
100
+ /**
101
+ * OpenCode's finished-turn marker: the Build summary line WITH its duration
102
+ * (Issue #1893).
103
+ *
104
+ * `▣ Build · GPT-5.6 Luna · 5.2s`. This is the one tool-specific completion
105
+ * marker design rule D1 recognises today
106
+ * (`docs/design/multi-agent-state-architecture.md` §4 D1 decision 1, item 1),
107
+ * and the duration is the whole of what makes it positive evidence: opencode
108
+ * prints the same row without a duration while a step is still open, which is
109
+ * how a session parked on a permission dialog was published as
110
+ * `ready`/`opencode_response_complete` (#1893) and how `isOpenCodeComplete`
111
+ * saved the dialog body as if it were an answer.
112
+ *
113
+ * The model segment is `[^·\n]+` rather than `\S+` because real model names
114
+ * carry spaces (`GPT-5.6 Luna`): with `\S+` the optional-duration group of
115
+ * {@link OPENCODE_RESPONSE_COMPLETE} could never reach the duration on a
116
+ * two-word model, so "with duration" and "without duration" were the same match
117
+ * there. Excluding the middle dot rather than allowing anything keeps the
118
+ * quantifier unable to swallow its own delimiter (no nested/ambiguous
119
+ * quantifier -- ReDoS safe), and `.`/`[^·\n]` never cross a line without the
120
+ * `m` flag, so the duration has to be on the marker's own row.
121
+ *
122
+ * Durations observed: `2.3s`, `5.2s`, `45.2s`; the `Nh`/`Nm` prefixes are
123
+ * inherited from the #379 pattern and kept for long turns.
124
+ */
125
+ exports.OPENCODE_TURN_COMPLETE_PATTERN = /\u25A3\s+\w+\s+·\s+[^·\n]+·\s+(?:\d+h\s*)?(?:\d+m\s*)?[\d.]+s/;
126
+ /**
127
+ * OpenCode's permission dialog, anchored on its button row (Issue #1893).
128
+ *
129
+ * opencode 1.18 asks for tool permission with a bottom-anchored box whose last
130
+ * interactive row is a horizontal button strip:
131
+ *
132
+ * ```
133
+ * ┃ △ Permission required
134
+ * ┃ # Shell command
135
+ * ┃ $ ls -la
136
+ * ┃ Allow once Allow always Reject ctrl+f fullscreen ⇆ select enter con
137
+ * ```
138
+ *
139
+ * Nothing in the detection layer saw it before #1893: it carries no number, no
140
+ * `(y/n)`, and no "press enter to confirm" footer, so `detectPrompt` answers
141
+ * `isPrompt: false` and the status detector fell through to the Build marker
142
+ * above it. The row is matched as POSITIVE evidence that a decision is pending
143
+ * (design rule D1) -- it is the affordance itself, not the absence of a busy
144
+ * marker.
145
+ *
146
+ * **Match this against the ANSI-stripped frame BEFORE {@link stripBoxDrawing}**,
147
+ * exactly like {@link OPENCODE_IDLE_COMPOSER_PATTERN}: the leading `┃` (or
148
+ * `│` on a lighter border style) is what says the row belongs to the dialog box
149
+ * rather than to a response body that happens to quote the labels -- the
150
+ * "the phrase is on screen somewhere" inference #1883 had to remove.
151
+ *
152
+ * Deliberately NOT anchored on:
153
+ *
154
+ * - `enter confirm`, which is truncated to `enter con` at opencode's own 80
155
+ * column layout (measured);
156
+ * - `△ Permission required` alone, which is a heading rather than an
157
+ * affordance and survives in the fullscreen (`ctrl+f`) view whose key handling
158
+ * was not measured.
159
+ *
160
+ * The three labels are the same for the `bash` and the `edit` dialog (measured:
161
+ * `permission-bash.txt`, `permission-edit.txt`), and the strip is repainted away
162
+ * the moment the dialog is answered, so a matched row is never scrollback
163
+ * (`turn-aborted-no-duration.txt` holds no `Allow once`).
164
+ *
165
+ * The whitespace runs are `[^\S\n]` (horizontal only) for the reason #1883
166
+ * documents: plain `\s` crosses newlines under the `m` flag and would pair a
167
+ * gutter on one row with labels several rows below it.
168
+ */
169
+ exports.OPENCODE_PERMISSION_PATTERN = /^[^\S\n]*[\u2502\u2503][^\S\n]*Allow once[^\S\n]+Allow always[^\S\n]+Reject\b/m;
170
+ /**
171
+ * OpenCode's busy footer, in BOTH of the spellings it is drawn in (Issue #379,
172
+ * widened by Issue #1894).
173
+ *
174
+ * opencode 1.18 needs Escape TWICE to abort a turn, and the first press does not
175
+ * abort anything -- it re-labels the footer:
176
+ *
177
+ * ```
178
+ * ⬝⬝⬝⬝⬝⬝⬝⬝ esc interrupt 6.5K (1%) · $0.00 ctrl+p commands
179
+ * ⬝■■■■■■⬝ esc again to interrupt 7.2K (1%) · $0.00 ctrl+p commands
180
+ * ```
181
+ *
182
+ * Measured on opencode 1.18.21 at the production 80x200 geometry, sampling the
183
+ * footer every ~360 ms after a single Escape: the second spelling is up from
184
+ * 0.31 s to 4.71 s and the row is back to `esc interrupt` at 5.07 s -- a
185
+ * five-second window, exactly as long as the second-press deadline
186
+ * ({@link OPENCODE_INTERRUPT_SECOND_ESCAPE_DELAY_MS} is sized against it). The
187
+ * generation continues throughout; the turn ran to a natural
188
+ * `▣ Build · GPT-5.6 Luna · 11.3s`, 3 runs out of 3.
189
+ *
190
+ * Before #1894 those five seconds matched nothing at all: `detectSessionStatus`
191
+ * lost branch A and fell through to `running`/`default` while the frame was
192
+ * fresh, and to `ready`/`no_recent_output` once the poller's
193
+ * `lastOutputTimestamp` aged past `STALE_OUTPUT_THRESHOLD_MS` -- both of them
194
+ * `statusEvidence: 'none'`, i.e. a generating session
195
+ * published with no evidence and, on the second path, as FINISHED. That is the
196
+ * "vocabulary changed, so `ready` came back" failure design rule D1 names
197
+ * (`docs/design/multi-agent-state-architecture.md` §4 D1, row #1894), and the
198
+ * row is the same positive busy evidence in either spelling.
199
+ *
200
+ * The optional group is `(?:again to )?` rather than a looser `.*` on purpose:
201
+ * it matches the two measured strings and nothing between an `esc` and an
202
+ * `interrupt` several words apart. Linear, no nested quantifiers -- ReDoS safe.
203
+ *
204
+ * Filtered from response extraction via OPENCODE_SKIP_PATTERNS, which shares
205
+ * this constant: the widened row is dropped from a saved answer for the same
206
+ * reason the narrow one was.
207
+ */
208
+ exports.OPENCODE_PROCESSING_INDICATOR = /esc (?:again to )?interrupt/;
209
+ /**
210
+ * OpenCode's composer bottom border: ` ╹▀▀▀▀▀▀…` (Issue #1911).
211
+ *
212
+ * `╹` (heavy up) is the corner opencode joins the input box's `┃`
213
+ * gutter to, and the `▀` run is the box's bottom edge. It is the one row of
214
+ * the bottom-anchored chrome that can never appear inside a response body, which
215
+ * makes it the anchor {@link findOpenCodeChromeStart} walks up from.
216
+ */
217
+ exports.OPENCODE_COMPOSER_BOTTOM_BORDER = /^[^\S\n]*╹▀{4,}/;
218
+ /**
219
+ * A row that belongs to one of opencode's boxes, matched by its own gutter
220
+ * (Issue #1911).
221
+ *
222
+ * opencode draws three different boxes with the same `┃` gutter (`│`
223
+ * on a lighter border style): the echoed USER PROMPT in the transcript, the
224
+ * COMPOSER pinned to the bottom of the pane, and the PERMISSION DIALOG that
225
+ * replaces the composer. Which one a matched row belongs to is decided by where
226
+ * it sits, not by what it says — see {@link findOpenCodeChromeStart} and
227
+ * {@link findOpenCodeUserEchoEnd}.
228
+ *
229
+ * **Match against the ANSI-stripped frame BEFORE {@link stripBoxDrawing}**,
230
+ * which removes the very gutter this anchors on.
231
+ */
232
+ exports.OPENCODE_GUTTER_ROW_PATTERN = /^[^\S\n]*[│┃]/;
233
+ /**
234
+ * An echoed user prompt row: a gutter row that carries text (Issue #1911).
235
+ *
236
+ * The echo block opencode draws for a submitted message is a blank gutter row,
237
+ * one or more gutter rows holding the message, and another blank gutter row.
238
+ * This matches the middle ones.
239
+ */
240
+ exports.OPENCODE_USER_ECHO_PATTERN = /^[^\S\n]*[│┃][^\S\n]*\S/;
241
+ /**
242
+ * The status cell of opencode's bottom footer (Issue #1911).
243
+ *
244
+ * Measured at the production 80x200 geometry the footer reads
245
+ * `<cwd> 6.4K (1%) · $ctrl+p` / `commands` while idle and
246
+ * `⬝⬝⬝⬝⬝⬝⬝⬝ esc interrupt 6.3K (1%) · $0.00 ctrl+p commands` while running:
247
+ * a context-usage cell followed by the cost sigil. Neither
248
+ * {@link OPENCODE_PROMPT_AFTER_RESPONSE} (`tab agents ctrl+p commands`, which
249
+ * opencode only prints on the FIRST idle frame, before any turn has run) nor
250
+ * {@link OPENCODE_PROCESSING_INDICATOR} covers the idle form, so this row used
251
+ * to be saved as part of the assistant's reply.
252
+ *
253
+ * This is a SECONDARY net. The cwd that shares the row wraps over up to three
254
+ * further rows that carry no signature at all, so the footer is removed
255
+ * structurally by {@link findOpenCodeChromeStart}; this pattern only catches the
256
+ * signed row when that boundary is not available (e.g. a caller holding a
257
+ * fragment rather than a whole pane).
258
+ *
259
+ * Linear, no nested quantifiers — ReDoS safe.
260
+ */
261
+ exports.OPENCODE_FOOTER_STATUS_PATTERN = /\d+(?:\.\d+)?[KMGT]?\s+\(\d+%\)\s+·\s+\$/;
262
+ /**
263
+ * Locate the start of opencode's bottom-anchored chrome within a captured pane
264
+ * (Issue #1911).
265
+ *
266
+ * opencode runs in the alternate screen and reserves the last rows of the pane
267
+ * for chrome that is never transcript content:
268
+ *
269
+ * ```
270
+ * ┃ ← composer box (blank rows + model row),
271
+ * ┃ Build · GPT-5.6 Luna … or the permission dialog that replaces it
272
+ * ╹▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ← composer bottom border
273
+ * /private/tmp/…-share- 6.4K (1%) · $ctrl+p ← footer, cwd wrapped
274
+ * work-github-kewton-… commands over up to three rows
275
+ * ```
276
+ *
277
+ * Everything from the returned index down is chrome. This is the opencode twin
278
+ * of {@link findClaudeChromeStart} and exists for the same reason (#1289): the
279
+ * footer's cwd rows and the composer's model row were reaching saved responses,
280
+ * which is defect 1 of #1911.
281
+ *
282
+ * Found structurally rather than by matching footer text, because the footer's
283
+ * text is opencode's to change and two of its four rows (the cwd continuations)
284
+ * are an arbitrary filesystem path with no signature at all.
285
+ *
286
+ * @param lines - Captured pane lines, ANSI-stripped, box drawing intact.
287
+ * Trailing blank rows are tolerated.
288
+ * @returns Index of the first chrome row, or -1 when no chrome is recognisable.
289
+ */
290
+ function findOpenCodeChromeStart(lines) {
291
+ let last = lines.length - 1;
292
+ while (last >= 0 && lines[last].trim() === '')
293
+ last--;
294
+ if (last < 0)
295
+ return -1;
296
+ const walkUpGutter = (from) => {
297
+ let top = from;
298
+ while (top - 1 >= 0 && exports.OPENCODE_GUTTER_ROW_PATTERN.test(lines[top - 1]))
299
+ top--;
300
+ return top;
301
+ };
302
+ // The composer's bottom border. Searched from the last row upwards over the
303
+ // WHOLE pane rather than over the few rows the footer occupies: on the boot
304
+ // screen opencode centres the composer under its banner (row ~99 of 200) while
305
+ // the footer stays pinned to the bottom, so a window sized for the footer
306
+ // misses the border entirely (measured, `opencode-live-1883/boot-idle.txt`).
307
+ for (let i = last; i >= 0; i--) {
308
+ if (exports.OPENCODE_COMPOSER_BOTTOM_BORDER.test(lines[i])) {
309
+ return walkUpGutter(i);
310
+ }
311
+ }
312
+ // No border: the permission dialog draws over the composer and its own box
313
+ // runs to the last row of the pane (measured, `opencode-live-1893/permission-*.txt`).
314
+ if (exports.OPENCODE_GUTTER_ROW_PATTERN.test(lines[last])) {
315
+ return walkUpGutter(last);
316
+ }
317
+ return -1;
318
+ }
319
+ /**
320
+ * Locate the last row of the NEWEST echoed user prompt in a captured pane
321
+ * (Issue #1911).
322
+ *
323
+ * The turn currently being answered starts on the row after this one, so it is
324
+ * both the extraction anchor (`resolveExtractionStartIndex`'s opencode branch)
325
+ * and the floor the finished-turn marker has to sit below before a frame counts
326
+ * as a completed turn (`isOpenCodeComplete`).
327
+ *
328
+ * Before #1911 the anchor was "the second-to-last `▣ Build` row", which has two
329
+ * measured failure modes: on the first turn of a session there is no second row,
330
+ * so extraction fell back to line 0 and saved the whole pane; and the row it
331
+ * anchors on belongs to the PREVIOUS turn, so the echoed prompt of the current
332
+ * one was always included in the reply.
333
+ *
334
+ * @param lines - Captured pane lines, ANSI-stripped, box drawing intact.
335
+ * @param chromeStart - Result of {@link findOpenCodeChromeStart}; the search
336
+ * stops above it so the composer's and the permission dialog's own gutter rows
337
+ * are never read as an echoed prompt. Pass -1 when no chrome was found.
338
+ * @returns Index of the echo block's last row, or -1 when no echo is on screen
339
+ * (a turn whose head has scrolled out of the alternate-screen pane).
340
+ */
341
+ function findOpenCodeUserEchoEnd(lines, chromeStart) {
342
+ const limit = chromeStart >= 0 ? chromeStart : lines.length;
343
+ for (let i = limit - 1; i >= 0; i--) {
344
+ if (!exports.OPENCODE_USER_ECHO_PATTERN.test(lines[i]))
345
+ continue;
346
+ // The block's trailing blank gutter row(s) belong to the echo, not to the reply.
347
+ let end = i;
348
+ while (end + 1 < limit && exports.OPENCODE_GUTTER_ROW_PATTERN.test(lines[end + 1]))
349
+ end++;
350
+ return end;
351
+ }
352
+ return -1;
353
+ }
354
+ /**
355
+ * The rows of opencode's composer that hold the INPUT BUFFER (Issue #1906).
356
+ *
357
+ * opencode has no prompt marker — no `>` / `❯` / `›` anywhere near its input —
358
+ * so "is the message still sitting in the composer?" cannot be asked the way it
359
+ * is asked of every other TUI. What opencode has instead is a box, and the box
360
+ * has a fixed shape, measured at the production 80x200 geometry across every
361
+ * frame in `opencode-live-1883/`, `opencode-live-1893/` and
362
+ * `opencode-live-1906/`:
363
+ *
364
+ * ```
365
+ * ┃ ← buffer rows: blank when empty,
366
+ * ┃ Review the send path. one row per (wrapped) line of the
367
+ * ┃ Check newline handling. typed message, or the
368
+ * ┃ Report findings. `Ask anything...` placeholder on a
369
+ * ┃ session that has not answered yet
370
+ * ┃ Build · GPT-5.6 Luna GitHub Copilot ← the agent/model row, ALWAYS last
371
+ * ╹▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ← the box's bottom border
372
+ * ```
373
+ *
374
+ * The agent/model row is what makes a naive "any guttered row with text" read
375
+ * wrong: it always carries text, so the composer would never look empty. It is
376
+ * identified structurally — the last gutter row before the border — rather than
377
+ * by matching `Build ·` or a model name, both of which are opencode's to change
378
+ * and neither of which is stable across agents (`Build`, `Plan`, a custom agent).
379
+ *
380
+ * Anchored on the border, not on the bottom of the pane, because opencode
381
+ * centres the whole box under its banner before the first turn (row ~100 of 200)
382
+ * and only pins it to the bottom afterwards — see {@link findOpenCodeChromeStart},
383
+ * whose upward walk this shares.
384
+ *
385
+ * Returns `null` when no composer is on screen at all. That is the permission
386
+ * dialog (it replaces the composer and draws no bottom border — measured,
387
+ * `opencode-live-1893/permission-*.txt`), a full-screen overlay, or a session
388
+ * still starting.
389
+ *
390
+ * @param lines - Captured pane lines, ANSI-stripped, box drawing intact. Must be
391
+ * the WHOLE pane: a tail window sized for the other tools does not contain the
392
+ * box on a pre-first-turn frame.
393
+ * @returns The buffer rows with their gutters intact, or `null` when the
394
+ * composer is not on screen. An empty array means a box with no buffer row,
395
+ * which no measured frame produces.
396
+ */
397
+ function findOpenCodeComposerRows(lines) {
398
+ let border = -1;
399
+ for (let i = lines.length - 1; i >= 0; i--) {
400
+ if (exports.OPENCODE_COMPOSER_BOTTOM_BORDER.test(lines[i])) {
401
+ border = i;
402
+ break;
403
+ }
404
+ }
405
+ if (border < 0)
406
+ return null;
407
+ let top = border;
408
+ while (top - 1 >= 0 && exports.OPENCODE_GUTTER_ROW_PATTERN.test(lines[top - 1]))
409
+ top--;
410
+ // `top .. border - 1` are the box's gutter rows; the last of them is the
411
+ // agent/model row, which belongs to the chrome rather than to the buffer.
412
+ const modelRow = border - 1;
413
+ if (modelRow < top)
414
+ return null;
415
+ return lines.slice(top, modelRow);
416
+ }
417
+ /**
418
+ * A composer row with its gutter (and the padding either side) removed
419
+ * (Issue #1906). Blank for an empty buffer row.
420
+ */
421
+ function stripOpenCodeGutter(row) {
422
+ return row.replace(exports.OPENCODE_GUTTER_ROW_PATTERN, '').trim();
423
+ }
424
+ /**
425
+ * OpenCode TUI selection list pattern (Issue #473, narrowed by Issue #1896).
426
+ *
427
+ * Detects the fuzzy-search picker overlay opencode draws for `/models`,
428
+ * `/providers` and `/connect`, anchored on its HEADER ROW COMPLETE WITH the
429
+ * right-aligned `esc` hatch:
430
+ *
431
+ * ```
432
+ * Select model esc
433
+ *
434
+ * Search
435
+ *
436
+ * Recent
437
+ * ● GPT-5.6 Luna GitHub Copilot
438
+ * ```
439
+ *
440
+ * The `esc` is the picker's own dismiss affordance -- positive evidence that an
441
+ * overlay is open (design rule D1), rather than the presence of two English
442
+ * words somewhere on the pane. Until #1896 the pattern was the bare phrase, and
443
+ * `status-detector.ts` tests it against the WHOLE content area (up to ~200 rows,
444
+ * because the header can sit far above the last row when the list is long), so
445
+ * an agent that merely wrote `Select model to continue:` in its answer parked the
446
+ * session on `waiting` / `opencode_selection_list` for the rest of the session
447
+ * -- measured live on opencode 1.18.21,
448
+ * `opencode-live-1896/select-model-in-response.txt`.
449
+ *
450
+ * Requiring two or more spaces before `esc` is what separates the header row
451
+ * from prose: the picker right-aligns the hatch across the overlay's width
452
+ * (37 spaces in the measured frame), while a sentence that happens to end in
453
+ * "esc" would not.
454
+ *
455
+ * NOT additionally anchored on the `Search` row below the header: its distance
456
+ * from the header is unmeasured for the `Connect a provider` variant (that
457
+ * overlay needs an unconfigured provider to open, which the live probe could not
458
+ * produce without touching the operator's real credentials), and the header's
459
+ * own hatch is already the affordance.
460
+ *
461
+ * The header allowlist is deliberately unchanged, and Issue #2112 kept it that
462
+ * way rather than adding the five headings it found missing (`Select agent`,
463
+ * `Sessions`, `Timeline`, `Commands`, and the palette's). #1896 left the
464
+ * question as "a separate change with its own live frames"; #2046 supplied the
465
+ * frames and the answer they gave is that a WIDER WORD LIST is the wrong shape.
466
+ * Three of those dialogs published `ready` / `opencode_response_complete` — the
467
+ * marker of the previous turn, still on the pane behind the overlay — so the
468
+ * damage was a false COMPLETION, not a missing NavigationButtons row, and no
469
+ * heading added here would have changed that ordering. The fix is a gate ahead
470
+ * of the completion branch that reads the overlay's LAYOUT
471
+ * (`lib/detection/opencode-modal-overlay.ts`, branch C2 of
472
+ * `tools/opencode/detect.ts`), which is also what keeps the prose false
473
+ * positives this pattern was narrowed for from coming back through a longer
474
+ * list.
475
+ *
476
+ * This pattern still runs, and still first: it is the reading that survives ANSI
477
+ * stripping, where the layout rule cannot see anything at all.
478
+ *
479
+ * The whitespace runs are `[^\S\n]` (horizontal only) for the reason Issue #1883
480
+ * documents: plain `\s` crosses newlines under the `m` flag, which would let a
481
+ * header on one row pair up with an `esc` several rows below it.
482
+ *
483
+ * Linear pattern, no nested quantifiers -- ReDoS safe (S4-001).
484
+ */
485
+ exports.OPENCODE_SELECTION_LIST_PATTERN = /^[^\S\n]*(?:Select[^\S\n]+(?:model|provider)|Connect[^\S\n]+a[^\S\n]+provider)[^\S\n]{2,}esc[^\S\n]*$/m;
486
+ /**
487
+ * OpenCode TUI separator pattern (Issue #379)
488
+ * Matches lines composed entirely of box-drawing / TUI decoration characters.
489
+ * Covers: vertical lines (U+2503), box corners, horizontal lines, and other TUI elements.
490
+ */
491
+ exports.OPENCODE_SEPARATOR_PATTERN = /^[\u2503\u2579\u25A3\u2580\u2500\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C]+$/;
492
+ /**
493
+ * OpenCode skip patterns for response cleaning (Issue #379)
494
+ * Lines matching any of these patterns are filtered from extracted responses.
495
+ * Includes: TUI separators, loading indicators, Build summary prefix,
496
+ * status bar prompts, processing indicators, input prompt, the footer's
497
+ * context/cost status cell (Issue #1911), and pasted text markers.
498
+ */
499
+ exports.OPENCODE_SKIP_PATTERNS = [
500
+ exports.OPENCODE_SEPARATOR_PATTERN,
501
+ exports.OPENCODE_LOADING_PATTERN,
502
+ /^Build\s+/,
503
+ exports.OPENCODE_PROMPT_AFTER_RESPONSE,
504
+ exports.OPENCODE_PROCESSING_INDICATOR,
505
+ exports.OPENCODE_PROMPT_PATTERN,
506
+ exports.OPENCODE_FOOTER_STATUS_PATTERN,
507
+ pasted_text_1.PASTED_TEXT_PATTERN,
508
+ ];