commandmate 0.27.1 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (980) hide show
  1. package/.env.example +28 -0
  2. package/.next/BUILD_ID +1 -1
  3. package/.next/app-build-manifest.json +441 -404
  4. package/.next/app-path-routes-manifest.json +34 -29
  5. package/.next/build-manifest.json +5 -5
  6. package/.next/prerender-manifest.json +9 -9
  7. package/.next/react-loadable-manifest.json +0 -6
  8. package/.next/required-server-files.json +1 -1
  9. package/.next/routes-manifest.json +32 -0
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update/route.js +1 -1
  12. package/.next/server/app/api/app/update/route.js.nft.json +1 -1
  13. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update-check/route.js +1 -1
  15. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  17. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  20. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/messages/route.js +1 -1
  23. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/session/route.js +1 -1
  26. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/start/route.js +32 -1
  29. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/terminal/route.js +34 -3
  32. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/assistant/tools/route.js +1 -1
  35. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  36. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/auth/login/route.js +1 -1
  38. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/auth/logout/route.js +1 -1
  40. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/auth/status/route.js +1 -1
  42. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/capabilities/route.js +1 -1
  44. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/daily-summary/route.js +1 -1
  46. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  47. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  49. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  50. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  52. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  53. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  55. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  56. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/external-apps/route.js +1 -1
  58. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  59. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/fs/browse/route.js +1 -1
  61. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  62. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/fs/recent-paths/route.js +1 -1
  64. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  65. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  67. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  68. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  70. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  71. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  73. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  74. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/metrics/vibe/route.js +1 -1
  76. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  77. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/push/escalation/route.js +1 -1
  80. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  81. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/push/subscriptions/route.js +7 -1
  83. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  84. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/push/vapid/route.js +1 -1
  86. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  87. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/remote/pair/route.js +2 -0
  89. package/.next/server/app/api/remote/pair/route.js.nft.json +1 -0
  90. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -0
  91. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  92. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  93. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  95. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  96. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  98. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  99. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  101. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  102. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/repositories/clone/route.js +1 -1
  104. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  105. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  107. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  108. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/repositories/restore/route.js +1 -1
  110. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  111. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/repositories/route.js +1 -1
  113. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  114. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/repositories/scan/route.js +1 -1
  116. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  117. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/repositories/sync/route.js +1 -1
  119. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  120. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  122. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  123. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  125. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  126. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  128. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/skills/installations/route.js +1 -1
  130. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  131. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/skills/operations/route.js +1 -1
  133. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  134. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/skills/reindex/route.js +1 -1
  136. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  137. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  139. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  141. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
  143. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  144. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  146. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  147. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/templates/[id]/route.js +2 -2
  149. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  150. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/templates/route.js +2 -2
  152. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  153. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/todos/route.js +1 -1
  155. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  156. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  158. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  159. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/verification/runs/route.js +1 -1
  161. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  162. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  165. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  171. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  176. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -2
  179. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  188. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  252. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  258. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  261. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -0
  263. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -0
  264. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -0
  265. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  267. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  270. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  273. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  275. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  276. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +4 -4
  278. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  279. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  282. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  285. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  288. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -0
  290. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -0
  291. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -0
  292. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -0
  293. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -0
  294. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -0
  295. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -0
  296. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -0
  297. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -0
  298. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  299. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  300. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  303. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  304. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  305. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  306. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  308. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  309. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +5 -1
  311. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  312. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  314. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  315. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  316. package/.next/server/app/api/worktrees/[id]/schedules/route.js +6 -2
  317. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  318. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  319. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  320. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  321. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  322. package/.next/server/app/api/worktrees/[id]/send/route.js +7 -3
  323. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  324. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  326. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  327. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  328. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  329. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  330. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  331. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  332. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  333. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  334. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  335. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  336. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  337. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  338. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  339. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  340. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  341. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  342. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  343. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  344. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  345. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  346. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  347. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  348. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  349. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  350. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  351. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  352. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  353. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  354. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  355. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  356. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  357. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  358. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  359. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  360. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  361. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  362. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  363. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  364. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  365. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  366. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  367. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -3
  368. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  369. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  370. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  371. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  372. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  373. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  374. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  375. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  376. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  377. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  378. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  379. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  380. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  381. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  382. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  383. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  384. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  385. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  386. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  387. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  388. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  389. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  390. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  391. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  392. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  393. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  394. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  395. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  396. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  397. package/.next/server/app/api/worktrees/route.js +1 -1
  398. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  399. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  400. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  401. package/.next/server/app/login/page.js +2 -2
  402. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  403. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  404. package/.next/server/app/more/page.js +1 -1
  405. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  406. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  407. package/.next/server/app/page_client-reference-manifest.js +1 -1
  408. package/.next/server/app/proxy/[...path]/route.js +1 -1
  409. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  410. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  411. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  412. package/.next/server/app/review/page.js +1 -1
  413. package/.next/server/app/review/page.js.nft.json +1 -1
  414. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  415. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  416. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  417. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  418. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  419. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
  420. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  421. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  422. package/.next/server/app/worktrees/[id]/page.js +15 -10
  423. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  424. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  425. package/.next/server/app/worktrees/[id]/terminal/page.js +2 -2
  426. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  427. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  428. package/.next/server/app-paths-manifest.json +34 -29
  429. package/.next/server/chunks/1058.js +1 -0
  430. package/.next/server/chunks/1068.js +1 -3
  431. package/.next/server/chunks/1162.js +1 -1
  432. package/.next/server/chunks/1191.js +13 -0
  433. package/.next/server/chunks/1296.js +1 -1
  434. package/.next/server/chunks/1601.js +2 -2
  435. package/.next/server/chunks/1714.js +7 -0
  436. package/.next/server/chunks/1886.js +5 -0
  437. package/.next/server/chunks/1944.js +1 -0
  438. package/.next/server/chunks/2119.js +1 -1
  439. package/.next/server/chunks/221.js +19 -0
  440. package/.next/server/chunks/222.js +1 -0
  441. package/.next/server/chunks/2328.js +1 -1
  442. package/.next/server/chunks/2366.js +1 -0
  443. package/.next/server/chunks/2404.js +1 -1
  444. package/.next/server/chunks/243.js +1 -0
  445. package/.next/server/chunks/2445.js +1 -1
  446. package/.next/server/chunks/2759.js +1 -1
  447. package/.next/server/chunks/3346.js +1 -1
  448. package/.next/server/chunks/3440.js +1 -1
  449. package/.next/server/chunks/3480.js +17 -1
  450. package/.next/server/chunks/3543.js +1 -1
  451. package/.next/server/chunks/3558.js +1 -0
  452. package/.next/server/chunks/3945.js +1 -1
  453. package/.next/server/chunks/4299.js +1 -0
  454. package/.next/server/chunks/4393.js +1 -1
  455. package/.next/server/chunks/5017.js +1 -1
  456. package/.next/server/chunks/5089.js +1 -1
  457. package/.next/server/chunks/5354.js +1 -1
  458. package/.next/server/chunks/5571.js +1 -1
  459. package/.next/server/chunks/6130.js +1 -1
  460. package/.next/server/chunks/6274.js +11 -10
  461. package/.next/server/chunks/6285.js +1 -1
  462. package/.next/server/chunks/6337.js +1 -0
  463. package/.next/server/chunks/6401.js +1 -1
  464. package/.next/server/chunks/663.js +78 -0
  465. package/.next/server/chunks/7472.js +1 -1
  466. package/.next/server/chunks/7824.js +1 -0
  467. package/.next/server/chunks/7905.js +1 -0
  468. package/.next/server/chunks/880.js +6 -6
  469. package/.next/server/chunks/8807.js +84 -18
  470. package/.next/server/chunks/9123.js +2 -2
  471. package/.next/server/chunks/9130.js +5 -0
  472. package/.next/server/chunks/9328.js +1 -1
  473. package/.next/server/chunks/9358.js +1 -1
  474. package/.next/server/chunks/9508.js +1 -1
  475. package/.next/server/chunks/9584.js +1 -0
  476. package/.next/server/chunks/9627.js +274 -0
  477. package/.next/server/chunks/9798.js +2 -0
  478. package/.next/server/chunks/9938.js +1 -1
  479. package/.next/server/functions-config-manifest.json +3 -1
  480. package/.next/server/middleware-build-manifest.js +1 -1
  481. package/.next/server/middleware-manifest.json +5 -5
  482. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  483. package/.next/server/pages/500.html +1 -1
  484. package/.next/server/server-reference-manifest.json +1 -1
  485. package/.next/server/src/middleware.js +1 -1
  486. package/.next/server/src/middleware.js.map +1 -1
  487. package/.next/static/chunks/1188-8567ee5ecfef02ee.js +1 -0
  488. package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +1 -0
  489. package/.next/static/chunks/3968-8d8ca15657748bfb.js +1 -0
  490. package/.next/static/chunks/5229-580b581fce5aeb52.js +1 -0
  491. package/.next/static/chunks/6381-c8d93ec301dbc380.js +1 -0
  492. package/.next/static/chunks/app/api/app/update/route-e3626364434d521b.js +1 -0
  493. package/.next/static/chunks/app/api/app/update-check/route-e3626364434d521b.js +1 -0
  494. package/.next/static/chunks/app/api/assistant/conversation/route-e3626364434d521b.js +1 -0
  495. package/.next/static/chunks/app/api/assistant/current-output/route-e3626364434d521b.js +1 -0
  496. package/.next/static/chunks/app/api/assistant/messages/route-e3626364434d521b.js +1 -0
  497. package/.next/static/chunks/app/api/assistant/session/route-e3626364434d521b.js +1 -0
  498. package/.next/static/chunks/app/api/assistant/start/route-e3626364434d521b.js +1 -0
  499. package/.next/static/chunks/app/api/assistant/terminal/route-e3626364434d521b.js +1 -0
  500. package/.next/static/chunks/app/api/assistant/tools/route-e3626364434d521b.js +1 -0
  501. package/.next/static/chunks/app/api/auth/login/route-e3626364434d521b.js +1 -0
  502. package/.next/static/chunks/app/api/auth/logout/route-e3626364434d521b.js +1 -0
  503. package/.next/static/chunks/app/api/auth/status/route-e3626364434d521b.js +1 -0
  504. package/.next/static/chunks/app/api/capabilities/route-e3626364434d521b.js +1 -0
  505. package/.next/static/chunks/app/api/daily-summary/route-e3626364434d521b.js +1 -0
  506. package/.next/static/chunks/app/api/daily-summary/status/route-e3626364434d521b.js +1 -0
  507. package/.next/static/chunks/app/api/external-apps/[id]/health/route-e3626364434d521b.js +1 -0
  508. package/.next/static/chunks/app/api/external-apps/[id]/route-e3626364434d521b.js +1 -0
  509. package/.next/static/chunks/app/api/external-apps/route-e3626364434d521b.js +1 -0
  510. package/.next/static/chunks/app/api/fs/browse/route-e3626364434d521b.js +1 -0
  511. package/.next/static/chunks/app/api/fs/recent-paths/route-e3626364434d521b.js +1 -0
  512. package/.next/static/chunks/app/api/hooks/agent-event/route-e3626364434d521b.js +1 -0
  513. package/.next/static/chunks/app/api/hooks/claude-done/route-e3626364434d521b.js +1 -0
  514. package/.next/static/chunks/app/api/hooks/permission-request/route-e3626364434d521b.js +1 -0
  515. package/.next/static/chunks/app/api/metrics/vibe/route-e3626364434d521b.js +1 -0
  516. package/.next/static/chunks/app/api/ollama/models/route-e3626364434d521b.js +1 -0
  517. package/.next/static/chunks/app/api/push/escalation/route-e3626364434d521b.js +1 -0
  518. package/.next/static/chunks/app/api/push/subscriptions/route-e3626364434d521b.js +1 -0
  519. package/.next/static/chunks/app/api/push/vapid/route-e3626364434d521b.js +1 -0
  520. package/.next/static/chunks/app/api/remote/pair/route-e3626364434d521b.js +1 -0
  521. package/.next/static/chunks/app/api/repositories/[id]/route-e3626364434d521b.js +1 -0
  522. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-e3626364434d521b.js +1 -0
  523. package/.next/static/chunks/app/api/repositories/[id]/todos/route-e3626364434d521b.js +1 -0
  524. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-e3626364434d521b.js +1 -0
  525. package/.next/static/chunks/app/api/repositories/clone/route-e3626364434d521b.js +1 -0
  526. package/.next/static/chunks/app/api/repositories/excluded/route-e3626364434d521b.js +1 -0
  527. package/.next/static/chunks/app/api/repositories/restore/route-e3626364434d521b.js +1 -0
  528. package/.next/static/chunks/app/api/repositories/route-e3626364434d521b.js +1 -0
  529. package/.next/static/chunks/app/api/repositories/scan/route-e3626364434d521b.js +1 -0
  530. package/.next/static/chunks/app/api/repositories/sync/route-e3626364434d521b.js +1 -0
  531. package/.next/static/chunks/app/api/repositories/validate-path/route-e3626364434d521b.js +1 -0
  532. package/.next/static/chunks/app/api/sidebar/group-order/route-e3626364434d521b.js +1 -0
  533. package/.next/static/chunks/app/api/skills/[id]/route-e3626364434d521b.js +1 -0
  534. package/.next/static/chunks/app/api/skills/installations/route-e3626364434d521b.js +1 -0
  535. package/.next/static/chunks/app/api/skills/operations/route-e3626364434d521b.js +1 -0
  536. package/.next/static/chunks/app/api/skills/reindex/route-e3626364434d521b.js +1 -0
  537. package/.next/static/chunks/app/api/skills/route-e3626364434d521b.js +1 -0
  538. package/.next/static/chunks/app/api/slash-commands/route-e3626364434d521b.js +1 -0
  539. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-e3626364434d521b.js +1 -0
  540. package/.next/static/chunks/app/api/tasks/[taskId]/route-e3626364434d521b.js +1 -0
  541. package/.next/static/chunks/app/api/templates/[id]/route-e3626364434d521b.js +1 -0
  542. package/.next/static/chunks/app/api/templates/route-e3626364434d521b.js +1 -0
  543. package/.next/static/chunks/app/api/todos/route-e3626364434d521b.js +1 -0
  544. package/.next/static/chunks/app/api/verification/runs/[runId]/route-e3626364434d521b.js +1 -0
  545. package/.next/static/chunks/app/api/verification/runs/route-e3626364434d521b.js +1 -0
  546. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-e3626364434d521b.js +1 -0
  547. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-e3626364434d521b.js +1 -0
  548. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-e3626364434d521b.js +1 -0
  549. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-e3626364434d521b.js +1 -0
  550. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-e3626364434d521b.js +1 -0
  551. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-e3626364434d521b.js +1 -0
  552. package/.next/static/chunks/app/api/worktrees/[id]/env/route-e3626364434d521b.js +1 -0
  553. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-e3626364434d521b.js +1 -0
  554. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-e3626364434d521b.js +1 -0
  555. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-e3626364434d521b.js +1 -0
  556. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-e3626364434d521b.js +1 -0
  557. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-e3626364434d521b.js +1 -0
  558. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-e3626364434d521b.js +1 -0
  559. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-e3626364434d521b.js +1 -0
  560. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-e3626364434d521b.js +1 -0
  561. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-e3626364434d521b.js +1 -0
  562. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-e3626364434d521b.js +1 -0
  563. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-e3626364434d521b.js +1 -0
  564. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-e3626364434d521b.js +1 -0
  565. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-e3626364434d521b.js +1 -0
  566. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-e3626364434d521b.js +1 -0
  567. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-e3626364434d521b.js +1 -0
  568. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-e3626364434d521b.js +1 -0
  569. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-e3626364434d521b.js +1 -0
  570. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-e3626364434d521b.js +1 -0
  571. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-e3626364434d521b.js +1 -0
  572. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-e3626364434d521b.js +1 -0
  573. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-e3626364434d521b.js +1 -0
  574. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-e3626364434d521b.js +1 -0
  575. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-e3626364434d521b.js +1 -0
  576. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-e3626364434d521b.js +1 -0
  577. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-e3626364434d521b.js +1 -0
  578. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-e3626364434d521b.js +1 -0
  579. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-e3626364434d521b.js +1 -0
  580. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-e3626364434d521b.js +1 -0
  581. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-e3626364434d521b.js +1 -0
  582. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-e3626364434d521b.js +1 -0
  583. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-e3626364434d521b.js +1 -0
  584. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-e3626364434d521b.js +1 -0
  585. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-e3626364434d521b.js +1 -0
  586. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-e3626364434d521b.js +1 -0
  587. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-e3626364434d521b.js +1 -0
  588. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-e3626364434d521b.js +1 -0
  589. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-e3626364434d521b.js +1 -0
  590. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-e3626364434d521b.js +1 -0
  591. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-e3626364434d521b.js +1 -0
  592. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-e3626364434d521b.js +1 -0
  593. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-e3626364434d521b.js +1 -0
  594. package/.next/static/chunks/app/api/worktrees/[id]/route-e3626364434d521b.js +1 -0
  595. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-e3626364434d521b.js +1 -0
  596. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-e3626364434d521b.js +1 -0
  597. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-e3626364434d521b.js +1 -0
  598. package/.next/static/chunks/app/api/worktrees/[id]/search/route-e3626364434d521b.js +1 -0
  599. package/.next/static/chunks/app/api/worktrees/[id]/send/route-e3626364434d521b.js +1 -0
  600. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-e3626364434d521b.js +1 -0
  601. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-e3626364434d521b.js +1 -0
  602. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-e3626364434d521b.js +1 -0
  603. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-e3626364434d521b.js +1 -0
  604. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-e3626364434d521b.js +1 -0
  605. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-e3626364434d521b.js +1 -0
  606. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-e3626364434d521b.js +1 -0
  607. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-e3626364434d521b.js +1 -0
  608. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-e3626364434d521b.js +1 -0
  609. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-e3626364434d521b.js +1 -0
  610. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-e3626364434d521b.js +1 -0
  611. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-e3626364434d521b.js +1 -0
  612. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-e3626364434d521b.js +1 -0
  613. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-e3626364434d521b.js +1 -0
  614. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-e3626364434d521b.js +1 -0
  615. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-e3626364434d521b.js +1 -0
  616. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-e3626364434d521b.js +1 -0
  617. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-e3626364434d521b.js +1 -0
  618. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-e3626364434d521b.js +1 -0
  619. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-e3626364434d521b.js +1 -0
  620. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-e3626364434d521b.js +1 -0
  621. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-e3626364434d521b.js +1 -0
  622. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-e3626364434d521b.js +1 -0
  623. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-e3626364434d521b.js +1 -0
  624. package/.next/static/chunks/app/api/worktrees/route-e3626364434d521b.js +1 -0
  625. package/.next/static/chunks/app/login/page-03659dded846ef1d.js +1 -0
  626. package/.next/static/chunks/app/manifest.webmanifest/route-e3626364434d521b.js +1 -0
  627. package/.next/static/chunks/app/more/page-03867ab635d197c7.js +1 -0
  628. package/.next/static/chunks/app/proxy/[...path]/route-e3626364434d521b.js +1 -0
  629. package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +1 -0
  630. package/.next/static/chunks/app/worktrees/[id]/layout-e3626364434d521b.js +1 -0
  631. package/.next/static/chunks/app/worktrees/[id]/page-c07b23b6ca58091c.js +1 -0
  632. package/.next/static/chunks/app/worktrees/[id]/terminal/page-00ad5d9a62a71cab.js +1 -0
  633. package/.next/static/chunks/webpack-7e79064bfce988d7.js +1 -0
  634. package/.next/static/css/b6990f889f4f9515.css +1 -0
  635. package/.next/static/uulKcSOgyxChTo4SipUSF/_buildManifest.js +1 -0
  636. package/.next/trace +13 -13
  637. package/.next/types/app/api/remote/pair/route.ts +347 -0
  638. package/.next/types/app/api/worktrees/[id]/instances/opencode/route.ts +347 -0
  639. package/.next/types/app/api/worktrees/[id]/opencode/diff/route.ts +347 -0
  640. package/.next/types/app/api/worktrees/[id]/opencode/session/route.ts +347 -0
  641. package/.next/types/app/api/worktrees/[id]/opencode/share/route.ts +347 -0
  642. package/.next/types/routes.d.ts +6 -1
  643. package/.next/types/validator.ts +45 -0
  644. package/README.md +24 -4
  645. package/dist/cli/commands/init.d.ts.map +1 -1
  646. package/dist/cli/commands/init.js +66 -0
  647. package/dist/cli/commands/instances.d.ts.map +1 -1
  648. package/dist/cli/commands/instances.js +46 -1
  649. package/dist/cli/commands/interrupt.d.ts +25 -0
  650. package/dist/cli/commands/interrupt.d.ts.map +1 -0
  651. package/dist/cli/commands/interrupt.js +146 -0
  652. package/dist/cli/commands/remote.d.ts +248 -0
  653. package/dist/cli/commands/remote.d.ts.map +1 -0
  654. package/dist/cli/commands/remote.js +849 -0
  655. package/dist/cli/commands/report.d.ts.map +1 -1
  656. package/dist/cli/commands/report.js +11 -4
  657. package/dist/cli/commands/respond.d.ts.map +1 -1
  658. package/dist/cli/commands/respond.js +146 -1
  659. package/dist/cli/commands/status.d.ts.map +1 -1
  660. package/dist/cli/commands/status.js +104 -0
  661. package/dist/cli/commands/wait.d.ts.map +1 -1
  662. package/dist/cli/commands/wait.js +39 -1
  663. package/dist/cli/config/agent-target-options.d.ts +12 -0
  664. package/dist/cli/config/agent-target-options.d.ts.map +1 -1
  665. package/dist/cli/config/agent-target-options.js +15 -1
  666. package/dist/cli/config/security-messages.d.ts +25 -0
  667. package/dist/cli/config/security-messages.d.ts.map +1 -1
  668. package/dist/cli/config/security-messages.js +43 -1
  669. package/dist/cli/docs/agent-operations.d.ts +1 -1
  670. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  671. package/dist/cli/docs/agent-operations.js +34 -0
  672. package/dist/cli/program.d.ts.map +1 -1
  673. package/dist/cli/program.js +12 -0
  674. package/dist/cli/types/api-responses.d.ts +375 -0
  675. package/dist/cli/types/api-responses.d.ts.map +1 -1
  676. package/dist/cli/types/index.d.ts +83 -0
  677. package/dist/cli/types/index.d.ts.map +1 -1
  678. package/dist/cli/types/index.js +31 -1
  679. package/dist/cli/utils/daemon.d.ts.map +1 -1
  680. package/dist/cli/utils/daemon.js +3 -0
  681. package/dist/cli/utils/env-setup.d.ts +24 -0
  682. package/dist/cli/utils/env-setup.d.ts.map +1 -1
  683. package/dist/cli/utils/env-setup.js +70 -0
  684. package/dist/cli/utils/qr-terminal.d.ts +54 -0
  685. package/dist/cli/utils/qr-terminal.d.ts.map +1 -0
  686. package/dist/cli/utils/qr-terminal.js +181 -0
  687. package/dist/cli/utils/remote-state.d.ts +123 -0
  688. package/dist/cli/utils/remote-state.d.ts.map +1 -0
  689. package/dist/cli/utils/remote-state.js +193 -0
  690. package/dist/cli/utils/vapid-keygen.d.ts +74 -0
  691. package/dist/cli/utils/vapid-keygen.d.ts.map +1 -0
  692. package/dist/cli/utils/vapid-keygen.js +111 -0
  693. package/dist/config/auth-config.d.ts +1 -1
  694. package/dist/config/auth-config.d.ts.map +1 -1
  695. package/dist/config/auth-config.js +5 -0
  696. package/dist/lib/cli-tools/types.d.ts +11 -1
  697. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  698. package/dist/lib/detection/tools/verified-against.d.ts +14 -3
  699. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  700. package/dist/lib/detection/tools/verified-against.js +14 -3
  701. package/dist/lib/push/vapid.d.ts +178 -0
  702. package/dist/lib/push/vapid.d.ts.map +1 -0
  703. package/dist/lib/push/vapid.js +293 -0
  704. package/dist/lib/remote/cloudflare.d.ts +285 -0
  705. package/dist/lib/remote/cloudflare.d.ts.map +1 -0
  706. package/dist/lib/remote/cloudflare.js +619 -0
  707. package/dist/lib/remote/index.d.ts +17 -0
  708. package/dist/lib/remote/index.d.ts.map +1 -0
  709. package/dist/lib/remote/index.js +64 -0
  710. package/dist/lib/remote/provider-registry.d.ts +29 -0
  711. package/dist/lib/remote/provider-registry.d.ts.map +1 -0
  712. package/dist/lib/remote/provider-registry.js +73 -0
  713. package/dist/lib/remote/tailscale.d.ts +268 -0
  714. package/dist/lib/remote/tailscale.d.ts.map +1 -0
  715. package/dist/lib/remote/tailscale.js +546 -0
  716. package/dist/lib/remote/types.d.ts +127 -0
  717. package/dist/lib/remote/types.d.ts.map +1 -0
  718. package/dist/lib/remote/types.js +53 -0
  719. package/dist/lib/security/pairing-code.d.ts +182 -0
  720. package/dist/lib/security/pairing-code.d.ts.map +1 -0
  721. package/dist/lib/security/pairing-code.js +265 -0
  722. package/dist/lib/server/localhost-self-check.d.ts +203 -0
  723. package/dist/lib/server/localhost-self-check.d.ts.map +1 -0
  724. package/dist/lib/server/localhost-self-check.js +333 -0
  725. package/dist/server/locales/en/notifications.json +23 -1
  726. package/dist/server/locales/ja/notifications.json +23 -1
  727. package/dist/server/server.js +103 -0
  728. package/dist/server/src/config/auth-config.js +5 -0
  729. package/dist/server/src/config/image-extensions.js +244 -0
  730. package/dist/server/src/config/opencode-constants.js +69 -0
  731. package/dist/server/src/config/tmux-pane-config.js +100 -1
  732. package/dist/server/src/lib/cli-tools/base.js +33 -48
  733. package/dist/server/src/lib/cli-tools/opencode-config.js +12 -0
  734. package/dist/server/src/lib/cli-tools/opencode.js +435 -7
  735. package/dist/server/src/lib/cli-tools/start-availability.js +160 -0
  736. package/dist/server/src/lib/cmate-cli-tool-parser.js +328 -7
  737. package/dist/server/src/lib/cmate-parser.js +12 -0
  738. package/dist/server/src/lib/db/agent-instances-db.js +129 -0
  739. package/dist/server/src/lib/db/agent-session-cost-db.js +204 -0
  740. package/dist/server/src/lib/db/agent-session-cost-sampler.js +194 -0
  741. package/dist/server/src/lib/db/chat-db.js +33 -0
  742. package/dist/server/src/lib/db/db-instance.js +11 -0
  743. package/dist/server/src/lib/db/db.js +8 -3
  744. package/dist/server/src/lib/db/migrations/index.js +6 -0
  745. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  746. package/dist/server/src/lib/db/migrations/v57-push-subscription-defaults-notice.js +54 -0
  747. package/dist/server/src/lib/db/migrations/v58-agent-session-costs.js +100 -0
  748. package/dist/server/src/lib/db/migrations/v59-opencode-instance-settings.js +71 -0
  749. package/dist/server/src/lib/db/push-subscriptions-db.js +56 -5
  750. package/dist/server/src/lib/detection/cli-patterns.js +17 -6
  751. package/dist/server/src/lib/detection/excerpt.js +48 -0
  752. package/dist/server/src/lib/detection/model-info-extractor.js +26 -3
  753. package/dist/server/src/lib/detection/opencode-modal-overlay.js +400 -0
  754. package/dist/server/src/lib/detection/opencode-pane-obstruction.js +181 -0
  755. package/dist/server/src/lib/detection/status-detector.js +7 -0
  756. package/dist/server/src/lib/detection/status-reason.js +20 -0
  757. package/dist/server/src/lib/detection/terminal-columns.js +94 -0
  758. package/dist/server/src/lib/detection/tools/opencode/detect.js +43 -0
  759. package/dist/server/src/lib/detection/tools/opencode/prompt.js +20 -0
  760. package/dist/server/src/lib/detection/tools/verified-against.js +14 -3
  761. package/dist/server/src/lib/detection/upstream-faults.js +7 -22
  762. package/dist/server/src/lib/hooks/agent-session-telemetry.js +324 -0
  763. package/dist/server/src/lib/hooks/pending-decision-kind.js +72 -0
  764. package/dist/server/src/lib/hooks/sources/define-source.js +88 -0
  765. package/dist/server/src/lib/hooks/sources/opencode/client.js +907 -2
  766. package/dist/server/src/lib/hooks/sources/opencode/diff.js +336 -0
  767. package/dist/server/src/lib/hooks/sources/opencode/history.js +480 -0
  768. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +76 -7
  769. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +222 -0
  770. package/dist/server/src/lib/hooks/sources/opencode/mappers.js +31 -0
  771. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +45 -0
  772. package/dist/server/src/lib/hooks/sources/opencode/ports.js +16 -0
  773. package/dist/server/src/lib/hooks/sources/opencode/push.js +307 -0
  774. package/dist/server/src/lib/hooks/sources/opencode/reattach.js +284 -0
  775. package/dist/server/src/lib/hooks/sources/opencode/runtime.js +165 -2
  776. package/dist/server/src/lib/hooks/sources/opencode/source.js +46 -2
  777. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +407 -4
  778. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +383 -0
  779. package/dist/server/src/lib/hooks/structured-decision-response.js +460 -0
  780. package/dist/server/src/lib/job-executor.js +43 -20
  781. package/dist/server/src/lib/polling/response-checker.js +43 -16
  782. package/dist/server/src/lib/polling/structured-history-gate.js +75 -0
  783. package/dist/server/src/lib/prompt-answer-sender.js +153 -2
  784. package/dist/server/src/lib/push/delivery-health.js +237 -0
  785. package/dist/server/src/lib/push/failure-push-notifier.js +109 -7
  786. package/dist/server/src/lib/push/index.js +25 -1
  787. package/dist/server/src/lib/push/prompt-card-state.js +254 -14
  788. package/dist/server/src/lib/push/push-sender.js +63 -12
  789. package/dist/server/src/lib/push/resolution-push-notifier.js +15 -3
  790. package/dist/server/src/lib/push/vapid.js +264 -5
  791. package/dist/server/src/lib/push/waiting-push-notifier.js +7 -0
  792. package/dist/server/src/lib/server/localhost-self-check.js +333 -0
  793. package/dist/server/src/lib/session/agent-event-state.js +169 -4
  794. package/dist/server/src/lib/session/claude-executor.js +152 -15
  795. package/dist/server/src/lib/session/current-output-builder.js +182 -15
  796. package/dist/server/src/lib/session/opencode-session-api.js +214 -0
  797. package/dist/server/src/lib/session/opencode-session-recall.js +168 -0
  798. package/dist/server/src/lib/session/opencode-session-store.js +274 -0
  799. package/dist/server/src/lib/session/provisional-turn.js +54 -1
  800. package/dist/server/src/lib/session/send-user-message.js +6 -5
  801. package/dist/server/src/lib/session/structured-prompt.js +53 -2
  802. package/dist/server/src/lib/skills/compatibility-matrix.js +50 -1
  803. package/dist/server/src/lib/tmux/tmux.js +74 -4
  804. package/dist/server/src/lib/verification/gate-runner.js +71 -8
  805. package/dist/server/src/types/agent-session.js +63 -0
  806. package/dist/server/src/types/agent-transcript.js +80 -0
  807. package/dist/server/src/types/opencode-export.js +228 -0
  808. package/dist/server/src/types/opencode-instance-settings.js +140 -0
  809. package/dist/server/src/types/opencode-share.js +111 -0
  810. package/dist/server/src/types/terminal-keys.js +69 -1
  811. package/dist/types/cli-tool-contracts.d.ts +48 -0
  812. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  813. package/dist/types/terminal-keys.d.ts +89 -0
  814. package/dist/types/terminal-keys.d.ts.map +1 -0
  815. package/dist/types/terminal-keys.js +105 -0
  816. package/package.json +2 -1
  817. package/.next/server/chunks/1029.js +0 -1
  818. package/.next/server/chunks/1239.js +0 -1
  819. package/.next/server/chunks/1538.js +0 -7
  820. package/.next/server/chunks/2546.js +0 -1
  821. package/.next/server/chunks/2689.js +0 -13
  822. package/.next/server/chunks/3292.js +0 -1
  823. package/.next/server/chunks/3417.js +0 -1
  824. package/.next/server/chunks/3736.js +0 -1
  825. package/.next/server/chunks/4423.js +0 -1
  826. package/.next/server/chunks/4444.js +0 -32
  827. package/.next/server/chunks/4565.js +0 -3
  828. package/.next/server/chunks/467.js +0 -1
  829. package/.next/server/chunks/4905.js +0 -5
  830. package/.next/server/chunks/552.js +0 -19
  831. package/.next/server/chunks/5998.js +0 -74
  832. package/.next/server/chunks/6919.js +0 -1
  833. package/.next/server/chunks/7970.js +0 -229
  834. package/.next/server/chunks/8536.js +0 -1
  835. package/.next/server/chunks/9284.js +0 -1
  836. package/.next/static/9IXgWfBUtnEnRqnbmErTp/_buildManifest.js +0 -1
  837. package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +0 -1
  838. package/.next/static/chunks/5229-1f5f19740a8d6c11.js +0 -1
  839. package/.next/static/chunks/6271.295ced91b6335f18.js +0 -1
  840. package/.next/static/chunks/6381-8cfe50a5ca5425b1.js +0 -1
  841. package/.next/static/chunks/8521-c43994fb58501d13.js +0 -1
  842. package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +0 -1
  843. package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +0 -1
  844. package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +0 -1
  845. package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +0 -1
  846. package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +0 -1
  847. package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +0 -1
  848. package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +0 -1
  849. package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +0 -1
  850. package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +0 -1
  851. package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +0 -1
  852. package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +0 -1
  853. package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +0 -1
  854. package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +0 -1
  855. package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +0 -1
  856. package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +0 -1
  857. package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +0 -1
  858. package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +0 -1
  859. package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +0 -1
  860. package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +0 -1
  861. package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +0 -1
  862. package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +0 -1
  863. package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +0 -1
  864. package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +0 -1
  865. package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +0 -1
  866. package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +0 -1
  867. package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +0 -1
  868. package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +0 -1
  869. package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +0 -1
  870. package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +0 -1
  871. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +0 -1
  872. package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +0 -1
  873. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +0 -1
  874. package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +0 -1
  875. package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +0 -1
  876. package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +0 -1
  877. package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +0 -1
  878. package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +0 -1
  879. package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +0 -1
  880. package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +0 -1
  881. package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +0 -1
  882. package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +0 -1
  883. package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +0 -1
  884. package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +0 -1
  885. package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +0 -1
  886. package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +0 -1
  887. package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +0 -1
  888. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +0 -1
  889. package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +0 -1
  890. package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +0 -1
  891. package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +0 -1
  892. package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +0 -1
  893. package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +0 -1
  894. package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +0 -1
  895. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +0 -1
  896. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +0 -1
  897. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +0 -1
  898. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +0 -1
  899. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +0 -1
  900. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +0 -1
  901. package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +0 -1
  902. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +0 -1
  903. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +0 -1
  904. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +0 -1
  905. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +0 -1
  906. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +0 -1
  907. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +0 -1
  908. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +0 -1
  909. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +0 -1
  910. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +0 -1
  911. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +0 -1
  912. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +0 -1
  913. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +0 -1
  914. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +0 -1
  915. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +0 -1
  916. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +0 -1
  917. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +0 -1
  918. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +0 -1
  919. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +0 -1
  920. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +0 -1
  921. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +0 -1
  922. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +0 -1
  923. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +0 -1
  924. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +0 -1
  925. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +0 -1
  926. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +0 -1
  927. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +0 -1
  928. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +0 -1
  929. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +0 -1
  930. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +0 -1
  931. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +0 -1
  932. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +0 -1
  933. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +0 -1
  934. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +0 -1
  935. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +0 -1
  936. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +0 -1
  937. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +0 -1
  938. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +0 -1
  939. package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +0 -1
  940. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +0 -1
  941. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +0 -1
  942. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +0 -1
  943. package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +0 -1
  944. package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +0 -1
  945. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +0 -1
  946. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +0 -1
  947. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +0 -1
  948. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +0 -1
  949. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +0 -1
  950. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +0 -1
  951. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +0 -1
  952. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +0 -1
  953. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +0 -1
  954. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +0 -1
  955. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +0 -1
  956. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +0 -1
  957. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +0 -1
  958. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +0 -1
  959. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +0 -1
  960. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +0 -1
  961. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +0 -1
  962. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +0 -1
  963. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +0 -1
  964. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +0 -1
  965. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +0 -1
  966. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +0 -1
  967. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +0 -1
  968. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +0 -1
  969. package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +0 -1
  970. package/.next/static/chunks/app/login/page-adc51f0f7cbb7ac6.js +0 -1
  971. package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +0 -1
  972. package/.next/static/chunks/app/more/page-3266dfa945972649.js +0 -1
  973. package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +0 -1
  974. package/.next/static/chunks/app/review/page-8f63aff862fee421.js +0 -1
  975. package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +0 -1
  976. package/.next/static/chunks/app/worktrees/[id]/page-f7b3dfbe757dc6b8.js +0 -1
  977. package/.next/static/chunks/app/worktrees/[id]/terminal/page-a75fe180a7233b2b.js +0 -1
  978. package/.next/static/chunks/webpack-6a9668cf54a26eba.js +0 -1
  979. package/.next/static/css/928e5a8830fbf997.css +0 -1
  980. /package/.next/static/{9IXgWfBUtnEnRqnbmErTp → uulKcSOgyxChTo4SipUSF}/_ssgManifest.js +0 -0
@@ -0,0 +1,400 @@
1
+ "use strict";
2
+ /**
3
+ * opencode's modal overlays, detected structurally from a captured frame
4
+ * (Issue #2112).
5
+ *
6
+ * ## What this is about
7
+ *
8
+ * opencode 1.18 opens its session list (`ctrl+x l`), agent list (`ctrl+x a`),
9
+ * timeline (`ctrl+x g`), command palette (`ctrl+p`) and model picker
10
+ * (`ctrl+x m`) as an overlay painted OVER the transcript. The overlay hides
11
+ * nothing the detector reads: the finished-turn marker `▣ Build · <model> ·
12
+ * 2.8s` from the previous turn is still on the pane above it, and the input box
13
+ * is still drawn below it. So branch D of `tools/opencode/detect.ts` matched the
14
+ * old marker and published a pane that is blocked on a human as
15
+ * `ready` / `opencode_response_complete` — measured on the committed #2046
16
+ * fixtures, `dialog-{session-list,agent-list,timeline}.txt`.
17
+ *
18
+ * That is worse than it sounds, and it is why this module exists rather than a
19
+ * widened allowlist. `ready` is POSITIVE evidence, so the frame never reaches
20
+ * the "nothing could read this" path #1017 / #1494 built for unknown overlays:
21
+ * `isUnclassifiedActive` stays false, the 60-second escape hatch never opens,
22
+ * and `commandmate wait` reports the blocked pane as **exit 0, completed**.
23
+ * `claude`'s `/help` overlay is the benign version of the same shape — it lands
24
+ * on `running` / `default`, i.e. on the no-evidence side, where the hatch does
25
+ * open.
26
+ *
27
+ * ## The signature, and why it is not a word list
28
+ *
29
+ * `Sessions`, `Commands`, `Timeline` and `Select agent` are the overlay
30
+ * headings. They are also ordinary English an agent writes in a reply, and
31
+ * Issue #1883 already deleted one "the word is somewhere on the pane" inference
32
+ * for exactly that reason (#1896 measured the harm: an answer that said
33
+ * `Select model to continue:` parked the session on `waiting` for the rest of
34
+ * the session). `OPENCODE_SELECTION_LIST_PATTERN` reacted by narrowing to three
35
+ * allowlisted headings, which is why `Select agent` does not match it today.
36
+ *
37
+ * This module reads the LAYOUT instead. opencode paints the overlay as a
38
+ * background-coloured rectangle, and `capture-pane -e` re-emits that background
39
+ * verbatim:
40
+ *
41
+ * ```
42
+ * ␛[48;2;20;20;20m Commands ␛[38;2;128;128;128mesc␛[0m ␛[48;2;4;4;4mlogical
43
+ * └ column 10 ─────────────────────────────────────────────────────────┘ column 70
44
+ * ```
45
+ *
46
+ * Every row of the overlay switches the background on at the SAME column and
47
+ * off at the SAME column, whatever is written on it — and one of those rows
48
+ * carries the overlay's own dismiss affordance, `esc`, right-aligned INSIDE the
49
+ * rectangle. Both halves are needed:
50
+ *
51
+ * - the rectangle alone is also what opencode's input box and its echoed user
52
+ * prompts are (measured: the composer is a painted rectangle at columns
53
+ * 3–78 on every 80-column frame in `opencode-live-2046`);
54
+ * - the `esc` hatch alone is also what the composer footer says while the agent
55
+ * is generating (`⬝⬝⬝⬝⬝⬝ esc interrupt`, `esc again to interrupt`) — which
56
+ * is why the hatch is required to be the LAST thing inside the rectangle, as
57
+ * `OPENCODE_SELECTION_LIST_PATTERN` requires it to be the last thing on the
58
+ * line.
59
+ *
60
+ * Reading the rectangle rather than the row's total width is what makes this
61
+ * work over a busy transcript. At 120 and 200 columns the same palette is
62
+ * centred with response text visible on BOTH sides of it
63
+ * (`opencode-live-2047/w200/command-palette.txt`), so the rows are not equal in
64
+ * length and nothing outside the rectangle is constant — only its two edges are.
65
+ *
66
+ * ## What a match means, and what it does not
67
+ *
68
+ * A match means a background-painted rectangle offering an `esc` hatch was on
69
+ * the pane. A **non**-match means no such rectangle could be read, and NEVER
70
+ * "no overlay is open": the rule needs the SGR the capture was taken with, so a
71
+ * caller that hands over an already-stripped frame — Auto-Yes's
72
+ * `captureAndCleanOutput` is the one in this repository — always gets `null`.
73
+ * That is fail-open by construction and matches how `tools/opencode/prompt.ts`
74
+ * already describes its own gutter anchor on that path. Every production caller
75
+ * of `detectSessionStatus` passes the raw `capture-pane -e` output
76
+ * (`lib/tmux/tmux.ts` always passes `-e`).
77
+ *
78
+ * A leaf module by design: it imports the ANSI primitives, the column rule and
79
+ * the excerpt bound and nothing else.
80
+ *
81
+ * @module lib/detection/opencode-modal-overlay
82
+ */
83
+ Object.defineProperty(exports, "__esModule", { value: true });
84
+ exports.OPENCODE_OVERLAY_TRUNCATION_MARKER = exports.OPENCODE_OVERLAY_EXCERPT_MAX_BYTES = exports.OPENCODE_OVERLAY_HEADER_ROW_LIMIT = exports.OPENCODE_OVERLAY_MIN_ROWS = exports.OPENCODE_OVERLAY_MIN_WIDTH = exports.OPENCODE_OVERLAY_MIN_LEFT = exports.OPENCODE_MODAL_OVERLAY_RECOVERY_KEY = exports.OPENCODE_MODAL_OVERLAY_ID = void 0;
85
+ exports.detectOpenCodeModalOverlay = detectOpenCodeModalOverlay;
86
+ const excerpt_1 = require("./excerpt");
87
+ const terminal_columns_1 = require("./terminal-columns");
88
+ /**
89
+ * Published `sessionStatusReason` for this signature.
90
+ *
91
+ * Snake case, like every other reason, and distinct from
92
+ * `opencode_selection_list` on purpose: an operator reading `capture --json`
93
+ * can then tell "the allowlisted picker heading matched" from "a painted
94
+ * rectangle with an esc hatch was on the pane", which are two different
95
+ * readings of the same screen and fail in different ways.
96
+ */
97
+ exports.OPENCODE_MODAL_OVERLAY_ID = 'opencode_modal_overlay';
98
+ /**
99
+ * The key that closes it, in opencode's own notation.
100
+ *
101
+ * Taken from the overlay's own chrome — the hatch this module anchors on IS the
102
+ * affordance, printed by opencode at the right edge of the header row. Exported
103
+ * for the same reason {@link OPENCODE_SIDEBAR_RECOVERY_CHORD} is: no surface
104
+ * should hold a bare key literal of its own.
105
+ */
106
+ exports.OPENCODE_MODAL_OVERLAY_RECOVERY_KEY = 'esc';
107
+ /**
108
+ * Leftmost column an overlay rectangle may start at.
109
+ *
110
+ * One, not zero. A rectangle that starts at column 0 is not an overlay drawn
111
+ * OVER the pane — it is the pane's own background, which some themes paint
112
+ * explicitly (measured: `opencode-live-2047/w200/*` paint every row
113
+ * `48;2;4;4;4` from column 0), and treating that as a rectangle makes every row
114
+ * of every frame "match" whatever else is asserted. The measured overlays start
115
+ * at column 10 (80 and 120 columns), 70 (200 columns) and 1 (the 80-column
116
+ * session list and timeline, which are nearly pane-wide), so the constraint has
117
+ * never been the thing that decided a verdict.
118
+ */
119
+ exports.OPENCODE_OVERLAY_MIN_LEFT = 1;
120
+ /**
121
+ * Narrowest rectangle that can be an overlay, in columns.
122
+ *
123
+ * The measured overlays are 60 columns wide (palette and pickers at every
124
+ * width) and 78 (the session list and timeline at 80 columns), so this is a
125
+ * floor with four times the headroom rather than a tuned threshold. Its job is
126
+ * to reject a single highlighted CELL — opencode paints the selected row of a
127
+ * list in its own background, and a one-word highlight elsewhere on the pane
128
+ * should not be able to pose as a dialog.
129
+ */
130
+ exports.OPENCODE_OVERLAY_MIN_WIDTH = 16;
131
+ /**
132
+ * How many rows must carry the rectangle before this reports a match.
133
+ *
134
+ * Three: the measured overlays carry 8 (the timeline, the shortest) to 72 (the
135
+ * command palette), so there is an order of magnitude of headroom, and three is
136
+ * what a real dialog cannot be under — opencode draws a padding row, the header
137
+ * row with the hatch, and a padding row before any content at all.
138
+ */
139
+ exports.OPENCODE_OVERLAY_MIN_ROWS = 3;
140
+ /**
141
+ * How far down the rectangle the `esc` hatch may sit, in rows.
142
+ *
143
+ * A dialog puts its dismiss affordance in its TITLE BAR, and the measurement is
144
+ * unusually clean: on all eleven overlays in this repository — four #2046
145
+ * dialogs, the palette at 80/120/200 columns, the #2049 and #1896 palettes, the
146
+ * #1896 model picker and the canary picker — the hatch is on the SECOND row that
147
+ * carries the rectangle, the first being the overlay's top padding. Three is
148
+ * that measurement plus one row of headroom.
149
+ *
150
+ * What it buys is the case the other guards cannot reach: opencode paints code
151
+ * blocks in an agent's reply with their own background, so a fenced keybinding
152
+ * table (`quit esc`) is a painted rectangle with a hatch-shaped row in it.
153
+ * Requiring the hatch at the top makes that a table in the middle of a block
154
+ * rather than a dialog's title bar. The 120- and 200-column captures show the
155
+ * other half of the same problem — transcript painting produces up to fourteen
156
+ * incidental rectangles per frame — and not one of them carries a hatch at all.
157
+ */
158
+ exports.OPENCODE_OVERLAY_HEADER_ROW_LIMIT = 3;
159
+ /** Bound on {@link OpenCodeModalOverlay.headerText}, in UTF-8 bytes. */
160
+ exports.OPENCODE_OVERLAY_EXCERPT_MAX_BYTES = 200;
161
+ /** Appended when {@link OPENCODE_OVERLAY_EXCERPT_MAX_BYTES} cut the excerpt. */
162
+ exports.OPENCODE_OVERLAY_TRUNCATION_MARKER = '…[truncated]';
163
+ /**
164
+ * The overlay's dismiss affordance, right-aligned inside the rectangle.
165
+ *
166
+ * Deliberately the same shape as `OPENCODE_SELECTION_LIST_PATTERN`'s tail
167
+ * (Issue #1896): text, then two or more spaces, then `esc`, then nothing but
168
+ * padding. The `$` is what separates a dialog's hatch from the composer footer's
169
+ * `esc interrupt` / `esc again to interrupt`, which carry a word AFTER the key —
170
+ * both of those are live frames in this repository
171
+ * (`opencode-live-1883/turn-running.txt`,
172
+ * `opencode-live-1894/esc-again-after-marker.txt`) and both are painted
173
+ * rectangles, so without the anchor a generating pane would be read as a dialog.
174
+ *
175
+ * Applied to the rectangle's own columns, never to the whole row: at 120 and 200
176
+ * columns the transcript resumes to the right of the overlay on the same line,
177
+ * so a row-anchored `$` would never match there.
178
+ *
179
+ * The leading `\S` keeps a rectangle whose only content is the hatch from
180
+ * counting: a dialog has a heading.
181
+ *
182
+ * Linear pattern, no nested quantifiers — ReDoS safe (S4-001).
183
+ */
184
+ const OVERLAY_ESCAPE_HATCH = /\S[^\S\n]{2,}esc[^\S\n]*$/;
185
+ /** Cheap pre-filter for the rows worth measuring at all. */
186
+ const ESCAPE_HATCH_WORD = 'esc';
187
+ /**
188
+ * One of opencode's own box gutters: the composer, the permission dialog, or an
189
+ * echoed user prompt.
190
+ *
191
+ * Same character class as `OPENCODE_GUTTER_ROW_PATTERN` (Issue #1893) plus the
192
+ * bottom border's `╹`. Those boxes are painted rectangles too — the composer is
193
+ * one at columns 3–78 on every 80-column frame here — and a user whose prompt
194
+ * happened to end in `… esc` would otherwise be drawing an overlay in the
195
+ * transcript. That is not hypothetical: it is `words-in-response.txt`, this
196
+ * Issue's negative control, whose echoed prompt says all four dialog headings
197
+ * and ends in a hatch.
198
+ *
199
+ * Tested at the column immediately LEFT of the rectangle, because that is where
200
+ * opencode puts the glyph: the gutter is drawn first and the background is
201
+ * switched on after it, so the box's painted interior starts one column to its
202
+ * right (measured — `[(null, 0, 3), ('48;2;30;30;30', 3, 78)]` on every gutter
203
+ * row of `sidebar-off.txt`). The rectangle's own first column is tested too, so
204
+ * a theme that paints the gutter itself is covered by the same rule.
205
+ */
206
+ const BOX_GUTTER = /^[│┃╹]/;
207
+ /**
208
+ * Every ANSI sequence, in the repository's own spelling.
209
+ *
210
+ * Restated from `ANSI_PATTERN` (`ansi.ts`) rather than imported because this
211
+ * module needs to walk the sequences IN ORDER while counting columns, and that
212
+ * one is a shared `g`-flagged instance whose `lastIndex` a caller must not
213
+ * disturb. `tests/unit/detection-opencode-modal-overlay-2112.test.ts` asserts
214
+ * the text this scan produces is byte-identical to `stripAnsi`'s, so the
215
+ * restatement cannot drift silently.
216
+ */
217
+ const ANSI_SEQUENCE = /\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\[[0-9;]*m/g;
218
+ /** An SGR sequence, with its parameters. Only these can change the background. */
219
+ const SGR_PARAMETERS = /^(?:\x1b\[|\[)([0-9;]*)m$/;
220
+ /**
221
+ * Fold one SGR sequence's parameters into the current background.
222
+ *
223
+ * Handles the three forms tmux emits: the 16-colour codes (`40`–`47`,
224
+ * `100`–`107`), the 256-colour and 24-bit extended forms (`48;5;n`,
225
+ * `48;2;r;g;b`), and the two resets (`0`, `49`). Foreground and attribute codes
226
+ * leave the background alone, which is what keeps a syntax-highlighted
227
+ * transcript row from producing dozens of spurious edges.
228
+ */
229
+ function applySgr(current, parameters) {
230
+ const parts = (parameters === '' ? '0' : parameters).split(';');
231
+ let bg = current;
232
+ for (let i = 0; i < parts.length; i++) {
233
+ const code = Number(parts[i] === '' ? '0' : parts[i]);
234
+ if (!Number.isFinite(code))
235
+ continue;
236
+ if (code === 0 || code === 49) {
237
+ bg = null;
238
+ }
239
+ else if ((code >= 40 && code <= 47) || (code >= 100 && code <= 107)) {
240
+ bg = parts[i];
241
+ }
242
+ else if (code === 48) {
243
+ if (parts[i + 1] === '2') {
244
+ bg = parts.slice(i, i + 5).join(';');
245
+ i += 4;
246
+ }
247
+ else if (parts[i + 1] === '5') {
248
+ bg = parts.slice(i, i + 3).join(';');
249
+ i += 2;
250
+ }
251
+ }
252
+ }
253
+ return bg;
254
+ }
255
+ /** Measure one captured row: its text, its background runs and their edges. */
256
+ function scanRow(line) {
257
+ ANSI_SEQUENCE.lastIndex = 0;
258
+ const segments = [];
259
+ let text = '';
260
+ let bg = null;
261
+ let columns = 0;
262
+ let segmentStart = 0;
263
+ let cursor = 0;
264
+ let match;
265
+ while ((match = ANSI_SEQUENCE.exec(line)) !== null) {
266
+ const chunk = line.slice(cursor, match.index);
267
+ text += chunk;
268
+ columns += (0, terminal_columns_1.visibleWidth)(chunk);
269
+ cursor = match.index + match[0].length;
270
+ const sgr = SGR_PARAMETERS.exec(match[0]);
271
+ if (sgr === null)
272
+ continue;
273
+ const next = applySgr(bg, sgr[1]);
274
+ if (next === bg)
275
+ continue;
276
+ if (columns > segmentStart)
277
+ segments.push({ bg, start: segmentStart, end: columns });
278
+ bg = next;
279
+ segmentStart = columns;
280
+ }
281
+ const tail = line.slice(cursor);
282
+ text += tail;
283
+ columns += (0, terminal_columns_1.visibleWidth)(tail);
284
+ if (columns > segmentStart)
285
+ segments.push({ bg, start: segmentStart, end: columns });
286
+ const edges = new Set(segments.map(segment => segment.start));
287
+ if (segments.length > 0)
288
+ edges.add(segments[segments.length - 1].end);
289
+ return { text, segments, edges, width: columns };
290
+ }
291
+ /** The background painted at one column, or `null` for the terminal default. */
292
+ function backgroundAt(row, column) {
293
+ for (const segment of row.segments) {
294
+ if (segment.start <= column && column < segment.end)
295
+ return segment.bg;
296
+ }
297
+ return null;
298
+ }
299
+ /**
300
+ * Does this row carry the rectangle `[left, right)`?
301
+ *
302
+ * Four conditions, and every one of them is about the LAYOUT:
303
+ *
304
+ * 1. the row has a background boundary at both edges;
305
+ * 2. every column between them is painted — an unpainted gap means the two
306
+ * boundaries belong to two different things that happen to line up;
307
+ * 3. the boundaries are real transitions, i.e. what is painted just outside
308
+ * differs from what is painted just inside. This is what stops a theme that
309
+ * paints the whole pane from turning every column pair into a rectangle;
310
+ * 4. neither the rectangle's first column nor the column just left of it holds
311
+ * one of opencode's own box gutters.
312
+ */
313
+ function carriesRectangle(row, left, right) {
314
+ if (!row.edges.has(left) || !row.edges.has(right))
315
+ return false;
316
+ for (const segment of row.segments) {
317
+ if (segment.end <= left || segment.start >= right)
318
+ continue;
319
+ if (segment.bg === null)
320
+ return false;
321
+ }
322
+ if (backgroundAt(row, left - 1) === backgroundAt(row, left))
323
+ return false;
324
+ if (right < row.width && backgroundAt(row, right) === backgroundAt(row, right - 1))
325
+ return false;
326
+ if (BOX_GUTTER.test((0, terminal_columns_1.sliceColumns)(row.text, left - 1, left)))
327
+ return false;
328
+ return !BOX_GUTTER.test((0, terminal_columns_1.sliceColumns)(row.text, left, right));
329
+ }
330
+ /**
331
+ * The modal overlay painted over an opencode transcript, or null.
332
+ *
333
+ * Call it only for opencode: the rule is about opencode's own dialog chrome, and
334
+ * every other tool is left exactly as it was (Issue #2112 changes no other
335
+ * tool's detection).
336
+ *
337
+ * The search is seeded from the rows that contain the literal `esc` and never
338
+ * from the frame at large, so the cost is `rows × (background boundaries on a
339
+ * hatch row)²` rather than anything quadratic in the pane. Background boundaries
340
+ * are rare — a foreground-only SGR does not make one — so a 200-row opencode
341
+ * capture typically seeds from a single row with fewer than ten of them.
342
+ *
343
+ * When more than one rectangle qualifies the widest-supported one wins, measured
344
+ * by how many rows carry it: an overlay's own highlighted list item is a
345
+ * rectangle too, and it is drawn on exactly one row.
346
+ *
347
+ * A caveat the seeding makes easy to miss: two identical rows are two entries in
348
+ * `carrying`, so the title-bar check below compares object identity rather than
349
+ * value.
350
+ *
351
+ * @param frame - The capture with its ANSI intact (`capture-pane -e`)
352
+ */
353
+ function detectOpenCodeModalOverlay(frame) {
354
+ const rows = frame.split('\n').map(scanRow);
355
+ const examined = new Set();
356
+ let best = null;
357
+ for (const row of rows) {
358
+ if (!row.text.includes(ESCAPE_HATCH_WORD))
359
+ continue;
360
+ const edges = [...row.edges].sort((a, b) => a - b);
361
+ for (const left of edges) {
362
+ if (left < exports.OPENCODE_OVERLAY_MIN_LEFT)
363
+ continue;
364
+ for (const right of edges) {
365
+ if (right - left < exports.OPENCODE_OVERLAY_MIN_WIDTH)
366
+ continue;
367
+ const key = `${left}:${right}`;
368
+ if (examined.has(key))
369
+ continue;
370
+ if (!carriesRectangle(row, left, right))
371
+ continue;
372
+ const header = (0, terminal_columns_1.sliceColumns)(row.text, left, right);
373
+ if (!OVERLAY_ESCAPE_HATCH.test(header))
374
+ continue;
375
+ examined.add(key);
376
+ const carrying = rows.filter(candidate => carriesRectangle(candidate, left, right));
377
+ if (carrying.length < exports.OPENCODE_OVERLAY_MIN_ROWS)
378
+ continue;
379
+ // Identity, not a re-test: `row` is the row whose slice just matched, and
380
+ // asking which position it holds in the rectangle is the whole of the
381
+ // title-bar rule. A second search by text would find the FIRST hatch-
382
+ // shaped row instead, which is a different question.
383
+ const headerRow = carrying.indexOf(row);
384
+ if (headerRow < 0 || headerRow >= exports.OPENCODE_OVERLAY_HEADER_ROW_LIMIT)
385
+ continue;
386
+ if (best === null || carrying.length > best.rows) {
387
+ best = {
388
+ id: exports.OPENCODE_MODAL_OVERLAY_ID,
389
+ headerText: (0, excerpt_1.truncateToByteBudget)(header.trim(), exports.OPENCODE_OVERLAY_EXCERPT_MAX_BYTES, exports.OPENCODE_OVERLAY_TRUNCATION_MARKER),
390
+ left,
391
+ right,
392
+ rows: carrying.length,
393
+ headerRow,
394
+ };
395
+ }
396
+ }
397
+ }
398
+ }
399
+ return best;
400
+ }
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ /**
3
+ * opencode's sidebar, detected structurally from a captured frame (Issue #2095).
4
+ *
5
+ * ## What this is about
6
+ *
7
+ * opencode 1.18.22 paints a right-hand sidebar (session title, `Context` /
8
+ * token counters, `LSP` status) that does **not** get its own region of a
9
+ * `capture-pane`. It shares ROWS with the transcript and with the input box, so
10
+ * every captured line becomes `<transcript text> … <sidebar text>` and every
11
+ * reader in this repo sees one row (Issue #2047 measured this at ≥121 columns).
12
+ *
13
+ * Issue #2046 then measured the consequence at the width production actually
14
+ * runs opencode at. `ctrl+x b` (`sidebar_toggle`) turns the sidebar on at **80
15
+ * columns**, below the width #2047 found it appearing at on its own, and the
16
+ * same finished turn flips from `ready` / `opencode_response_complete` to
17
+ * `running` / `unknown_frame` with the sidebar's own text saved as the
18
+ * assistant's reply. Escape does not close it; pressing `ctrl+x b` again does.
19
+ *
20
+ * #2046 removed `b` from {@link OPENCODE_LEADER_CHORD_VALUES} and the
21
+ * special-keys route refuses it, but that only closes CommandMate's own door:
22
+ * opencode's `ctrl+p` command palette lists `Show sidebar ctrl+x b` and a user
23
+ * can run it from there. **This module does not stop the sidebar. It makes the
24
+ * sidebar visible to the people and the tools that are waiting on the pane.**
25
+ *
26
+ * ## The signature, and why it is not a word list
27
+ *
28
+ * `Context`, `LSP` and `tokens` are on the sidebar, and they are also ordinary
29
+ * English an agent writes in a reply — a word list would flag any turn that
30
+ * happens to discuss LSPs. The signature this module uses is the geometry
31
+ * instead:
32
+ *
33
+ * ```
34
+ * ┃ Context ← gutter row, second column
35
+ * OK2046 1% used
36
+ * ┃ Build · Claude Sonnet 4.6 GitHub maenokota-share-work-…
37
+ * ╹▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ commandmate-issue-2046/…
38
+ * ↑ the box ends here
39
+ * ```
40
+ *
41
+ * opencode draws the input box's bottom edge as `╹` + a run of `▀` spanning the
42
+ * box's full width, and pads every gutter (`┃`) row out to that same width. So
43
+ * the box's right edge is measurable from the frame itself, and **content to the
44
+ * right of it on a row that belongs to the box is a second column** — something
45
+ * a box that owns the full pane width can never produce, because its own text
46
+ * wraps at that edge.
47
+ *
48
+ * Deliberately NOT gated on the pane being wide. #2046's measurement is that the
49
+ * explicit toggle ignores the 121-column threshold, so a width branch would miss
50
+ * the case this Issue exists for.
51
+ *
52
+ * ## What a match means, and what it does not
53
+ *
54
+ * A match means the frame was laid out in two columns. A **non**-match means the
55
+ * layout could not be read — most often because no bottom border was on the
56
+ * frame at all, which is what a permission dialog produces (measured:
57
+ * `permission-bash.txt` / `permission-edit.txt` under every width of
58
+ * `tests/fixtures/opencode-live-2047` carry no border row) — and NEVER "the
59
+ * sidebar is off". Nothing reading this may report
60
+ * `null` as an all-clear, for the same reason `upstream-faults.ts` says so.
61
+ *
62
+ * A leaf module by design: it imports {@link stripAnsi}, the excerpt bound and
63
+ * the column rule and nothing else, so the payload builder, the CLI types and the
64
+ * client components that derive this from the frame they already hold can all
65
+ * share one rule.
66
+ *
67
+ * @module lib/detection/opencode-pane-obstruction
68
+ */
69
+ Object.defineProperty(exports, "__esModule", { value: true });
70
+ exports.OPENCODE_SIDEBAR_TRUNCATION_MARKER = exports.OPENCODE_SIDEBAR_EXCERPT_MAX_BYTES = exports.OPENCODE_SIDEBAR_MIN_ROWS = exports.OPENCODE_SIDEBAR_RECOVERY_CHORD = exports.OPENCODE_SIDEBAR_OBSTRUCTION_ID = void 0;
71
+ exports.detectOpenCodePaneObstruction = detectOpenCodePaneObstruction;
72
+ const ansi_1 = require("./ansi");
73
+ const excerpt_1 = require("./excerpt");
74
+ const terminal_columns_1 = require("./terminal-columns");
75
+ /**
76
+ * Published `paneObstruction.id` for this signature.
77
+ *
78
+ * Snake case, like every `sessionStatusReason` value, because the same operators
79
+ * read the two next to each other in `capture --json`.
80
+ */
81
+ exports.OPENCODE_SIDEBAR_OBSTRUCTION_ID = 'opencode_sidebar';
82
+ /**
83
+ * The keystroke that closes it, in opencode's own notation.
84
+ *
85
+ * Taken verbatim from opencode's keybind table, which its `ctrl+p` palette
86
+ * prints as `Show sidebar ctrl+x b` — see
87
+ * `tests/fixtures/opencode-live-2046/w80/dialog-command-palette.txt:70`.
88
+ * Exported rather than written into each surface so the UI banner, the history
89
+ * row and `wait`'s stderr cannot drift apart, and so no surface has to hold a
90
+ * bare key literal of its own.
91
+ */
92
+ exports.OPENCODE_SIDEBAR_RECOVERY_CHORD = 'ctrl+x b';
93
+ /**
94
+ * How many box rows must carry a second column before this reports a match.
95
+ *
96
+ * Two, as cheap insurance against a single stray cell — a wide character
97
+ * straddling the edge, a repaint caught mid-write. Not a tuned threshold: the
98
+ * measured frames carry 3 (in the 100-row window this is judged on) to 11, so
99
+ * the guard has an order of magnitude of headroom and has never been the thing
100
+ * that decided a verdict.
101
+ */
102
+ exports.OPENCODE_SIDEBAR_MIN_ROWS = 2;
103
+ /** Bound on {@link OpenCodePaneObstruction.matchedText}, in UTF-8 bytes. */
104
+ exports.OPENCODE_SIDEBAR_EXCERPT_MAX_BYTES = 200;
105
+ /** Appended when {@link OPENCODE_SIDEBAR_EXCERPT_MAX_BYTES} cut the excerpt. */
106
+ exports.OPENCODE_SIDEBAR_TRUNCATION_MARKER = '…[truncated]';
107
+ /**
108
+ * The input box's bottom edge: ` ╹▀▀▀▀▀…`.
109
+ *
110
+ * The same anchor `OPENCODE_COMPOSER_BOTTOM_BORDER` (`cli-patterns.ts`, Issue
111
+ * #1911) uses, restated here with capture groups because this module needs the
112
+ * edge's COLUMN and that one only needs to know the row exists.
113
+ * `tests/unit/detection-opencode-pane-obstruction-2095.test.ts` asserts the two
114
+ * still select the same rows, so the restatement cannot drift silently.
115
+ */
116
+ const COMPOSER_BOTTOM_BORDER_ROW = /^([^\S\n]*)╹(▀{4,})/;
117
+ /**
118
+ * A row of the input box: leading space, then the gutter.
119
+ *
120
+ * Character class shared with `OPENCODE_GUTTER_ROW_PATTERN` (Issue #1893):
121
+ * opencode draws the same box with `┃` and, in some themes, `│`.
122
+ */
123
+ const COMPOSER_GUTTER_ROW = /^([^\S\n]*)[│┃]/;
124
+ /**
125
+ * The second column sharing rows with an opencode transcript, or null.
126
+ *
127
+ * Call it only for opencode: the anchors are opencode's own box drawing, and
128
+ * every other tool is left exactly as it was (Issue #2095 changes no other
129
+ * tool's detection).
130
+ *
131
+ * ANSI is stripped first — the sidebar is painted with an SGR background, so on
132
+ * a raw `capture-pane -e` frame the column boundary is buried in escape
133
+ * sequences.
134
+ */
135
+ function detectOpenCodePaneObstruction(frame) {
136
+ const lines = (0, ansi_1.stripAnsi)(frame).split('\n');
137
+ // The LAST border row, not the first: a long capture holds the borders of
138
+ // every repaint still in scrollback, and the only one that describes the box
139
+ // on screen now is the last one. Reading an older, wider edge would report
140
+ // "no second column" on a pane that has one.
141
+ let borderIndex = -1;
142
+ let boxLeft = -1;
143
+ let boxRight = -1;
144
+ for (let i = 0; i < lines.length; i++) {
145
+ const border = COMPOSER_BOTTOM_BORDER_ROW.exec(lines[i]);
146
+ if (!border)
147
+ continue;
148
+ borderIndex = i;
149
+ boxLeft = border[1].length;
150
+ boxRight = boxLeft + 1 + border[2].length;
151
+ }
152
+ if (borderIndex === -1)
153
+ return null;
154
+ let rows = 0;
155
+ let matchedText = '';
156
+ for (let i = 0; i < lines.length; i++) {
157
+ const line = lines[i];
158
+ if (i !== borderIndex) {
159
+ const gutter = COMPOSER_GUTTER_ROW.exec(line);
160
+ // Same indent as the border, or it is not this box's row. At 200 columns
161
+ // opencode centres the home screen's box (measured: `boxLeft` 63), so an
162
+ // indent-agnostic test would count transcript rows as box rows.
163
+ if (!gutter || gutter[1].length !== boxLeft)
164
+ continue;
165
+ }
166
+ // Cut at the COLUMN, not at the UTF-16 unit — see {@link indexAtColumn} for
167
+ // which of the two ways those disagree can invent a column that is not
168
+ // there. A box that owns the full pane width slices to '' whatever is
169
+ // written in it.
170
+ const tail = line.slice((0, terminal_columns_1.indexAtColumn)(line, boxRight)).trim();
171
+ if (tail === '')
172
+ continue;
173
+ rows += 1;
174
+ if (matchedText === '') {
175
+ matchedText = (0, excerpt_1.truncateToByteBudget)(tail, exports.OPENCODE_SIDEBAR_EXCERPT_MAX_BYTES, exports.OPENCODE_SIDEBAR_TRUNCATION_MARKER);
176
+ }
177
+ }
178
+ if (rows < exports.OPENCODE_SIDEBAR_MIN_ROWS)
179
+ return null;
180
+ return { id: exports.OPENCODE_SIDEBAR_OBSTRUCTION_ID, matchedText, boxRight, rows };
181
+ }
@@ -42,6 +42,13 @@ Object.defineProperty(exports, "STATUS_REASON", { enumerable: true, get: functio
42
42
  */
43
43
  exports.SELECTION_LIST_REASONS = new Set([
44
44
  status_reason_1.STATUS_REASON.OPENCODE_SELECTION_LIST,
45
+ // Issue #2112: opencode's session list / agent list / timeline / command
46
+ // palette, recognised from the rectangle they are painted as rather than from
47
+ // their headings. Like every other opencode overlay they are driven by ↑/↓ +
48
+ // Enter and dismissed with `esc`, which is what NavigationButtons sends —
49
+ // and, critically, they must never be read as a finished turn: the marker
50
+ // from the PREVIOUS turn is still on the pane behind them.
51
+ status_reason_1.STATUS_REASON.OPENCODE_MODAL_OVERLAY,
45
52
  // Issue #1893: opencode's permission dialog is a horizontal button strip that
46
53
  // only ←/→ + Enter drive — typing an option number does nothing (measured on
47
54
  // 1.18.21), so it is a `menu`, not something `respond <id> N` can answer.
@@ -23,6 +23,26 @@ exports.STATUS_REASON = {
23
23
  THINKING_INDICATOR: 'thinking_indicator',
24
24
  OPENCODE_PROCESSING_INDICATOR: 'opencode_processing_indicator',
25
25
  OPENCODE_SELECTION_LIST: 'opencode_selection_list',
26
+ /**
27
+ * Issue #2112: a background-painted rectangle with an `esc` hatch was drawn
28
+ * over the transcript — opencode's session list, agent list, timeline,
29
+ * command palette or picker.
30
+ *
31
+ * Distinct from {@link STATUS_REASON.OPENCODE_SELECTION_LIST} because the two
32
+ * are different READINGS of the same screen: that one is the allowlisted
33
+ * heading (`Select model` / `Select provider` / `Connect a provider`, #1896)
34
+ * found as text and survives ANSI stripping; this one is the layout and needs
35
+ * the SGR the capture was taken with. An operator reading `capture --json`
36
+ * can tell which one answered, which is the difference between "the heading is
37
+ * one we know" and "something modal is on the pane".
38
+ *
39
+ * The literal is restated from `OPENCODE_MODAL_OVERLAY_ID`
40
+ * (`lib/detection/opencode-modal-overlay.ts`) rather than imported, so this
41
+ * module keeps the no-imports property its docblock above depends on;
42
+ * `tests/unit/detection-opencode-modal-overlay-2112.test.ts` pins the two
43
+ * equal so the restatement cannot drift.
44
+ */
45
+ OPENCODE_MODAL_OVERLAY: 'opencode_modal_overlay',
26
46
  /** Issue #1893: opencode's permission dialog — an arrow-key button strip. */
27
47
  OPENCODE_PERMISSION_PROMPT: 'opencode_permission_prompt',
28
48
  CLAUDE_SELECTION_LIST: 'claude_selection_list',