commandmate 0.42.2 → 0.44.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 (624) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +176 -176
  3. package/.next/app-path-routes-manifest.json +34 -34
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +15 -15
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
  9. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/versions/route.js.nft.json +1 -1
  11. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update/route.js +2 -2
  14. package/.next/server/app/api/app/update/route.js.nft.json +1 -1
  15. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/app/update-check/route.js +1 -1
  17. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
  18. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/capabilities/route.js +1 -1
  23. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/daily-summary/route.js +1 -1
  25. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  26. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  28. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  29. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  31. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  33. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  35. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  37. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  39. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/hooks/agent-event/route.js +103 -1
  41. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  42. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  44. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  45. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  47. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  48. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  50. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/push/escalation/route.js +1 -1
  53. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  54. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  56. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/push/vapid/route.js +1 -1
  58. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  59. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  61. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  62. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/relays/route.js +1 -1
  64. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  65. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  68. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  70. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  71. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/clone/route.js +1 -1
  73. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/restore/route.js +1 -1
  78. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  79. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/route.js +1 -1
  81. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/scan/route.js +1 -1
  84. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  85. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/repositories/sync/route.js +1 -1
  87. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  88. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  90. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  92. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  93. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -1
  95. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  97. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/skills/[id]/route.js +1 -1
  99. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  100. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/skills/installations/route.js +1 -1
  102. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  103. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/skills/operations/route.js +2 -2
  105. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  106. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/skills/reindex/route.js +1 -1
  108. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  109. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/skills/route.js +1 -1
  111. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  112. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/slash-commands/route.js +1 -1
  114. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  115. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  117. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  119. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  121. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  123. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  125. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  127. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  130. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  133. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  136. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -1
  138. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  140. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -1
  142. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  143. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  146. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  149. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  151. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  154. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +3 -1
  156. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  157. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  160. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  214. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  221. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +7 -7
  223. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  228. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  235. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  238. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  243. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  246. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/route.js +1 -103
  248. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  249. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +3 -1
  251. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  252. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +3 -1
  254. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -1
  257. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  258. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  261. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -103
  263. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  264. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +103 -1
  266. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  267. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  270. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  273. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  276. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  279. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  282. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  285. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  288. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  291. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  294. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  296. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
  298. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  299. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  301. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  304. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  305. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  306. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  308. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  310. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  311. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  312. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  314. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -1
  316. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  317. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  319. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  320. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  322. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  323. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  324. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  326. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  328. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  329. package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -1
  330. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  331. package/.next/server/app/api/worktrees/route.js +1 -1
  332. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  333. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  334. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  335. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  336. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  337. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  338. package/.next/server/app/page_client-reference-manifest.js +1 -1
  339. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  340. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  341. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  342. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  343. package/.next/server/app/sessions/page.js +1 -1
  344. package/.next/server/app/sessions/page.js.nft.json +1 -1
  345. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  346. package/.next/server/app/skills/[skillId]/page.js +1 -1
  347. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  348. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  349. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  350. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  351. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
  352. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  353. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  354. package/.next/server/app/worktrees/[id]/page.js +9 -9
  355. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  356. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  357. package/.next/server/app/worktrees/[id]/terminal/page.js +1 -1
  358. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  359. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  360. package/.next/server/app-paths-manifest.json +34 -34
  361. package/.next/server/chunks/1068.js +1 -1
  362. package/.next/server/chunks/1210.js +1 -1
  363. package/.next/server/chunks/1501.js +3 -3
  364. package/.next/server/chunks/2119.js +1 -1
  365. package/.next/server/chunks/22.js +1 -1
  366. package/.next/server/chunks/2283.js +15 -0
  367. package/.next/server/chunks/2328.js +1 -1
  368. package/.next/server/chunks/2404.js +4 -3
  369. package/.next/server/chunks/2445.js +1 -1
  370. package/.next/server/chunks/252.js +1 -1
  371. package/.next/server/chunks/2816.js +1 -1
  372. package/.next/server/chunks/3543.js +1 -1
  373. package/.next/server/chunks/3730.js +1 -1
  374. package/.next/server/chunks/3945.js +1 -1
  375. package/.next/server/chunks/4207.js +3 -3
  376. package/.next/server/chunks/4802.js +1 -1
  377. package/.next/server/chunks/488.js +1 -0
  378. package/.next/server/chunks/5064.js +1 -1
  379. package/.next/server/chunks/5326.js +1 -1
  380. package/.next/server/chunks/5456.js +1 -1
  381. package/.next/server/chunks/5571.js +1 -1
  382. package/.next/server/chunks/5775.js +1 -1
  383. package/.next/server/chunks/611.js +1 -1
  384. package/.next/server/chunks/6130.js +1 -1
  385. package/.next/server/chunks/6285.js +1 -1
  386. package/.next/server/chunks/6401.js +1 -1
  387. package/.next/server/chunks/6474.js +14 -0
  388. package/.next/server/chunks/650.js +1 -1
  389. package/.next/server/chunks/6661.js +1 -1
  390. package/.next/server/chunks/6781.js +1 -1
  391. package/.next/server/chunks/6793.js +1 -1
  392. package/.next/server/chunks/6927.js +1 -0
  393. package/.next/server/chunks/7491.js +3 -0
  394. package/.next/server/chunks/7506.js +1 -1
  395. package/.next/server/chunks/7685.js +1 -1
  396. package/.next/server/chunks/7905.js +1 -1
  397. package/.next/server/chunks/8543.js +1 -1
  398. package/.next/server/chunks/8581.js +2 -2
  399. package/.next/server/chunks/8728.js +2 -2
  400. package/.next/server/chunks/8782.js +1 -0
  401. package/.next/server/chunks/8791.js +1 -1
  402. package/.next/server/chunks/8800.js +4 -3
  403. package/.next/server/chunks/8918.js +108 -6
  404. package/.next/server/chunks/9130.js +3 -3
  405. package/.next/server/chunks/{8052.js → 9353.js} +4 -2
  406. package/.next/server/chunks/9390.js +3 -0
  407. package/.next/server/chunks/9627.js +3 -3
  408. package/.next/server/chunks/967.js +1 -0
  409. package/.next/server/chunks/9731.js +3 -3
  410. package/.next/server/chunks/9882.js +3 -3
  411. package/.next/server/middleware-manifest.json +5 -5
  412. package/.next/server/pages/500.html +1 -1
  413. package/.next/server/pages-manifest.json +1 -1
  414. package/.next/server/server-reference-manifest.json +1 -1
  415. package/.next/server/src/middleware.js +2 -2
  416. package/.next/server/src/middleware.js.map +1 -1
  417. package/.next/static/chunks/2053-85a974ddfe7498fe.js +1 -0
  418. package/.next/static/chunks/{2407-6b9e12c099fa598c.js → 2407-340774f1a24f2b45.js} +1 -1
  419. package/.next/static/chunks/5449-6cb80bab2bd06b79.js +1 -0
  420. package/.next/static/chunks/5521-c358c31f60e5e689.js +1 -0
  421. package/.next/static/chunks/591-0a45801e83f26f24.js +1 -0
  422. package/.next/static/chunks/8165-3853772f6ae1299b.js +1 -0
  423. package/.next/static/chunks/{8566-a6a7c70558927410.js → 8566-aeda747542072ace.js} +1 -1
  424. package/.next/static/chunks/8811-29eaa24237f48558.js +1 -0
  425. package/.next/static/chunks/{9619-22adf5367c4b7080.js → 9619-84aced0846cbe3ac.js} +1 -1
  426. package/.next/static/chunks/app/{layout-5b95e1236dcd9ef6.js → layout-0fc249fb7de75a27.js} +1 -1
  427. package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +1 -0
  428. package/.next/static/chunks/app/sessions/page-55297155e7bf01b9.js +1 -0
  429. package/.next/static/chunks/app/skills/[skillId]/page-9ee7a381636e60cb.js +1 -0
  430. package/.next/static/chunks/app/skills/page-182e16168b2fc098.js +1 -0
  431. package/.next/static/chunks/app/worktrees/[id]/page-d2103e0c25be83c8.js +1 -0
  432. package/.next/static/css/38070d879efa1371.css +1 -0
  433. package/.next/trace +13 -13
  434. package/README.md +58 -620
  435. package/dist/cli/commands/ask.d.ts.map +1 -1
  436. package/dist/cli/commands/ask.js +23 -149
  437. package/dist/cli/commands/capture.d.ts.map +1 -1
  438. package/dist/cli/commands/capture.js +11 -1
  439. package/dist/cli/commands/docs.d.ts.map +1 -1
  440. package/dist/cli/commands/docs.js +5 -0
  441. package/dist/cli/commands/remote.d.ts +24 -1
  442. package/dist/cli/commands/remote.d.ts.map +1 -1
  443. package/dist/cli/commands/remote.js +155 -6
  444. package/dist/cli/commands/reply.d.ts +40 -0
  445. package/dist/cli/commands/reply.d.ts.map +1 -0
  446. package/dist/cli/commands/reply.js +133 -0
  447. package/dist/cli/commands/respond.d.ts.map +1 -1
  448. package/dist/cli/commands/respond.js +255 -112
  449. package/dist/cli/commands/stop.d.ts.map +1 -1
  450. package/dist/cli/commands/stop.js +53 -1
  451. package/dist/cli/commands/sync.js +3 -3
  452. package/dist/cli/commands/wait.d.ts +5 -0
  453. package/dist/cli/commands/wait.d.ts.map +1 -1
  454. package/dist/cli/commands/wait.js +10 -1
  455. package/dist/cli/docs/agent-operations.d.ts +2 -2
  456. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  457. package/dist/cli/docs/agent-operations.js +13 -0
  458. package/dist/cli/docs/setup-guide.d.ts +14 -0
  459. package/dist/cli/docs/setup-guide.d.ts.map +1 -0
  460. package/dist/cli/docs/setup-guide.js +366 -0
  461. package/dist/cli/program.d.ts.map +1 -1
  462. package/dist/cli/program.js +4 -0
  463. package/dist/cli/types/api-responses.d.ts +11 -0
  464. package/dist/cli/types/api-responses.d.ts.map +1 -1
  465. package/dist/cli/types/index.d.ts +2 -0
  466. package/dist/cli/types/index.d.ts.map +1 -1
  467. package/dist/cli/utils/daemon.d.ts +42 -2
  468. package/dist/cli/utils/daemon.d.ts.map +1 -1
  469. package/dist/cli/utils/daemon.js +222 -40
  470. package/dist/cli/utils/docs-reader.d.ts +6 -0
  471. package/dist/cli/utils/docs-reader.d.ts.map +1 -1
  472. package/dist/cli/utils/docs-reader.js +14 -13
  473. package/dist/cli/utils/npm-runner.d.ts +12 -0
  474. package/dist/cli/utils/npm-runner.d.ts.map +1 -1
  475. package/dist/cli/utils/npm-runner.js +36 -0
  476. package/dist/cli/utils/process-inspect.d.ts +55 -0
  477. package/dist/cli/utils/process-inspect.d.ts.map +1 -0
  478. package/dist/cli/utils/process-inspect.js +214 -0
  479. package/dist/cli/utils/remote-pairing.d.ts +68 -0
  480. package/dist/cli/utils/remote-pairing.d.ts.map +1 -0
  481. package/dist/cli/utils/remote-pairing.js +117 -0
  482. package/dist/cli/utils/reply-ledger.d.ts +95 -0
  483. package/dist/cli/utils/reply-ledger.d.ts.map +1 -0
  484. package/dist/cli/utils/reply-ledger.js +187 -0
  485. package/dist/cli/utils/server-identity.d.ts +50 -0
  486. package/dist/cli/utils/server-identity.d.ts.map +1 -0
  487. package/dist/cli/utils/server-identity.js +118 -0
  488. package/dist/cli/utils/server-ready.d.ts +13 -0
  489. package/dist/cli/utils/server-ready.d.ts.map +1 -1
  490. package/dist/cli/utils/server-ready.js +16 -0
  491. package/dist/lib/cli-tools/copilot-executable.d.ts +9 -0
  492. package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -1
  493. package/dist/lib/cli-tools/copilot-executable.js +21 -5
  494. package/dist/lib/cli-tools/opencode-executable.d.ts +103 -0
  495. package/dist/lib/cli-tools/opencode-executable.d.ts.map +1 -0
  496. package/dist/lib/cli-tools/opencode-executable.js +179 -0
  497. package/dist/lib/cli-tools/types.d.ts +1 -1
  498. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  499. package/dist/lib/cli-tools/types.js +5 -1
  500. package/dist/lib/detection/tools/verified-against.d.ts +15 -0
  501. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  502. package/dist/lib/detection/tools/verified-against.js +17 -1
  503. package/dist/lib/detection/version-probes.d.ts.map +1 -1
  504. package/dist/lib/detection/version-probes.js +14 -1
  505. package/dist/lib/security/pairing-code.d.ts +2 -1
  506. package/dist/lib/security/pairing-code.d.ts.map +1 -1
  507. package/dist/lib/session/tmux-session-surface.d.ts.map +1 -1
  508. package/dist/lib/session/tmux-session-surface.js +1 -1
  509. package/dist/server/locales/en/worktree.json +72 -20
  510. package/dist/server/locales/ja/worktree.json +72 -20
  511. package/dist/server/server.js +23 -0
  512. package/dist/server/src/config/cli-tool-timing-config.js +19 -1
  513. package/dist/server/src/config/detection-evidence-config.js +3 -0
  514. package/dist/server/src/config/image-extensions.js +1 -0
  515. package/dist/server/src/config/schedule-config.js +55 -1
  516. package/dist/server/src/lib/auto-yes-poller.js +69 -4
  517. package/dist/server/src/lib/cli-tools/agent-mode-spec.js +54 -2
  518. package/dist/server/src/lib/cli-tools/base.js +6 -2
  519. package/dist/server/src/lib/cli-tools/command-code-plan-review.js +175 -0
  520. package/dist/server/src/lib/cli-tools/command-code.js +81 -2
  521. package/dist/server/src/lib/cli-tools/composer-spec.js +10 -0
  522. package/dist/server/src/lib/cli-tools/copilot-executable.js +21 -5
  523. package/dist/server/src/lib/cli-tools/graceful-exit.js +15 -1
  524. package/dist/server/src/lib/cli-tools/index.js +3 -1
  525. package/dist/server/src/lib/cli-tools/install-hints.js +9 -3
  526. package/dist/server/src/lib/cli-tools/liveness-spec.js +19 -0
  527. package/dist/server/src/lib/cli-tools/manager.js +2 -0
  528. package/dist/server/src/lib/cli-tools/opencode-executable.js +179 -0
  529. package/dist/server/src/lib/cli-tools/opencode-v2.js +369 -0
  530. package/dist/server/src/lib/cli-tools/opencode.js +29 -5
  531. package/dist/server/src/lib/cli-tools/types.js +5 -1
  532. package/dist/server/src/lib/cmate-cli-tool-parser.js +65 -7
  533. package/dist/server/src/lib/cmate-parser.js +12 -0
  534. package/dist/server/src/lib/cmate-validator.js +13 -1
  535. package/dist/server/src/lib/detection/cli-patterns.js +172 -3
  536. package/dist/server/src/lib/detection/model-info-extractor.js +79 -7
  537. package/dist/server/src/lib/detection/status-detector.js +10 -1
  538. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +2 -1
  539. package/dist/server/src/lib/detection/tools/codex/detect.js +26 -0
  540. package/dist/server/src/lib/detection/tools/command-code/plan-review-state.js +75 -0
  541. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +253 -0
  542. package/dist/server/src/lib/detection/tools/opencode-v2/dialog-title.js +48 -0
  543. package/dist/server/src/lib/detection/tools/registry.js +2 -0
  544. package/dist/server/src/lib/detection/tools/run-detection.js +9 -0
  545. package/dist/server/src/lib/detection/tools/verified-against.js +17 -1
  546. package/dist/server/src/lib/detection/upstream-faults.js +8 -0
  547. package/dist/server/src/lib/detection/version-probes.js +14 -1
  548. package/dist/server/src/lib/hooks/agent-session-telemetry.js +36 -1
  549. package/dist/server/src/lib/hooks/sources/claude/transcript.js +33 -1
  550. package/dist/server/src/lib/hooks/sources/opencode/log-diagnosis.js +105 -0
  551. package/dist/server/src/lib/hooks/sources/opencode/source.js +7 -1
  552. package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +422 -0
  553. package/dist/server/src/lib/hooks/sources/opencode-v2/decision-labels.js +24 -0
  554. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +421 -0
  555. package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +271 -0
  556. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +165 -0
  557. package/dist/server/src/lib/hooks/sources/opencode-v2/payloads.js +351 -0
  558. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +230 -0
  559. package/dist/server/src/lib/hooks/sources/opencode-v2/reattach.js +149 -0
  560. package/dist/server/src/lib/hooks/sources/opencode-v2/runtime.js +180 -0
  561. package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +182 -0
  562. package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +295 -0
  563. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +455 -0
  564. package/dist/server/src/lib/hooks/sources/opencode-v2/tool-id.js +18 -0
  565. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +214 -0
  566. package/dist/server/src/lib/hooks/sources/registry.js +2 -0
  567. package/dist/server/src/lib/hooks/structured-decision-response.js +14 -5
  568. package/dist/server/src/lib/job-executor.js +2 -1
  569. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +15 -1
  570. package/dist/server/src/lib/polling/structured-history-gate.js +19 -5
  571. package/dist/server/src/lib/relay/relay-delivery.js +4 -1
  572. package/dist/server/src/lib/session/agent-event-state.js +24 -0
  573. package/dist/server/src/lib/session/claude-executor.js +186 -12
  574. package/dist/server/src/lib/session/claude-session.js +131 -15
  575. package/dist/server/src/lib/session/current-output-builder.js +27 -3
  576. package/dist/server/src/lib/session/send-user-message.js +4 -0
  577. package/dist/server/src/lib/session/session-start-error.js +20 -0
  578. package/dist/server/src/lib/session/structured-prompt.js +54 -0
  579. package/dist/server/src/lib/session/tmux-session-surface.js +1 -1
  580. package/dist/server/src/lib/skills/agent-state-paths.js +39 -0
  581. package/dist/server/src/lib/skills/compatibility-matrix.js +65 -0
  582. package/dist/server/src/lib/skills/receipt-owned-paths.js +118 -0
  583. package/dist/server/src/lib/tmux/tmux.js +73 -2
  584. package/dist/server/src/lib/verification/env-clean-gate.js +281 -10
  585. package/dist/server/src/lib/verification/gate-runner.js +29 -2
  586. package/dist/server/src/lib/verification/scope-gate.js +58 -4
  587. package/dist/server/src/types/cli-tool-contracts.js +10 -2
  588. package/dist/types/cli-tool-contracts.d.ts +16 -5
  589. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  590. package/dist/types/cli-tool-contracts.js +10 -2
  591. package/docs/en/architecture.md +722 -0
  592. package/docs/en/user-guide/agents-guide.md +306 -0
  593. package/docs/en/user-guide/cli-setup-guide.md +676 -0
  594. package/docs/en/user-guide/cmate-schedules-guide.md +388 -0
  595. package/docs/en/user-guide/commands-guide.md +467 -0
  596. package/docs/en/user-guide/quick-start.md +231 -0
  597. package/docs/en/user-guide/webapp-guide.md +1020 -0
  598. package/docs/en/user-guide/workflow-examples.md +463 -0
  599. package/package.json +19 -7
  600. package/release-notes/0.43.0.json +130 -0
  601. package/release-notes/0.44.0.json +82 -0
  602. package/scripts/hooks/cmate-agent-event.sh +14 -0
  603. package/scripts/opencode-v2/launch.sh +226 -0
  604. package/.next/server/chunks/1990.js +0 -103
  605. package/.next/server/chunks/3707.js +0 -15
  606. package/.next/server/chunks/4443.js +0 -3
  607. package/.next/server/chunks/5164.js +0 -1
  608. package/.next/server/chunks/5742.js +0 -1
  609. package/.next/server/chunks/7004.js +0 -1
  610. package/.next/server/chunks/8673.js +0 -14
  611. package/.next/static/chunks/2039-117a361f795ddc4b.js +0 -1
  612. package/.next/static/chunks/2053-611dd27d42721b79.js +0 -1
  613. package/.next/static/chunks/3778-56f41fc2cecb8c43.js +0 -1
  614. package/.next/static/chunks/5449-550bd273dccc3ae4.js +0 -1
  615. package/.next/static/chunks/7705-2a2936551b0cf9a3.js +0 -1
  616. package/.next/static/chunks/8165-934ee7ff3b4ddfd4.js +0 -1
  617. package/.next/static/chunks/app/review/page-30616daa1dc595c2.js +0 -1
  618. package/.next/static/chunks/app/sessions/page-1a8ba152bbcb9efb.js +0 -1
  619. package/.next/static/chunks/app/skills/[skillId]/page-ab7e432b69fccb3b.js +0 -1
  620. package/.next/static/chunks/app/skills/page-56b4fa11223e0cbd.js +0 -1
  621. package/.next/static/chunks/app/worktrees/[id]/page-59f5337e031518c6.js +0 -1
  622. package/.next/static/css/b3f433d52b8ed5c8.css +0 -1
  623. /package/.next/static/{MXZXkcFAnpELZnxxHB4iJ → wu7SUiHTirFcrpo5teyZ3}/_buildManifest.js +0 -0
  624. /package/.next/static/{MXZXkcFAnpELZnxxHB4iJ → wu7SUiHTirFcrpo5teyZ3}/_ssgManifest.js +0 -0
@@ -16,9 +16,12 @@
16
16
  * - resolveScheduleCommandOptions(): CMATE.md row -> executor options (Issue #2044)
17
17
  * - TOOLS_WITH_MODEL_SUPPORT: Set of tools supporting --model in CMATE.md
18
18
  * - TOOLS_WITH_RUN_OPTIONS: Set of tools whose column accepts a flag list
19
+ * - TOOLS_WITH_VARIANT_ON_MODEL: tools whose variant rides on the model (Issue #2982)
20
+ * - validateVariantHasModel(): refuse a model-less variant for those tools (Issue #2982)
19
21
  */
20
22
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.OPENCODE_COLUMN_SYNTAX = exports.TOOLS_WITH_RUN_OPTIONS = exports.TOOLS_WITH_MODEL_SUPPORT = void 0;
23
+ exports.OPENCODE_V2_COLUMN_SYNTAX = exports.OPENCODE_COLUMN_SYNTAX = exports.TOOLS_WITH_VARIANT_ON_MODEL = exports.TOOLS_WITH_RUN_OPTIONS = exports.TOOLS_WITH_MODEL_SUPPORT = void 0;
24
+ exports.validateVariantHasModel = validateVariantHasModel;
22
25
  exports.tokenizeCliToolColumn = tokenizeCliToolColumn;
23
26
  exports.parseCliToolColumn = parseCliToolColumn;
24
27
  exports.validateCopilotModelName = validateCopilotModelName;
@@ -57,8 +60,14 @@ const opencode_constants_1 = require("../config/opencode-constants");
57
60
  * format `opencode run --help` documents for `-m, --model` (measured on
58
61
  * opencode 1.18.21). It is not prefixed with `ollama/` — see
59
62
  * `buildCliArgs()` for why that prefix went away.
63
+ *
64
+ * ## `opencode-v2` (Issue #2982)
65
+ *
66
+ * `opencode2 run -m` takes the same `provider/model` value (plus an optional
67
+ * `#variant`, see {@link TOOLS_WITH_VARIANT_ON_MODEL}), and the executor's
68
+ * `opencode-v2` case has built `-m` since #2974.
60
69
  */
61
- exports.TOOLS_WITH_MODEL_SUPPORT = new Set(['copilot', 'opencode']);
70
+ exports.TOOLS_WITH_MODEL_SUPPORT = new Set(['copilot', 'opencode', 'opencode-v2']);
62
71
  /**
63
72
  * CLI Tools whose CMATE.md column is a **flag list** rather than one fixed shape
64
73
  * (Issue #2044).
@@ -73,8 +82,28 @@ exports.TOOLS_WITH_MODEL_SUPPORT = new Set(['copilot', 'opencode']);
73
82
  * CommandMate can drive (`--agent`, `--variant`, `-c`, `--title`), and a
74
83
  * schedule that wants `--agent plan --variant high` cannot say so in three
75
84
  * tokens. Membership here is what {@link parseCliToolColumn} branches on.
85
+ *
86
+ * Issue #2982: `opencode-v2` joins with the same five column flags. Its
87
+ * `opencode2 run` has `-m`, `--agent`, `-c` and `--title` with v1's meaning;
88
+ * `--variant` is the one difference, see {@link TOOLS_WITH_VARIANT_ON_MODEL}.
76
89
  */
77
- exports.TOOLS_WITH_RUN_OPTIONS = new Set(['opencode']);
90
+ exports.TOOLS_WITH_RUN_OPTIONS = new Set(['opencode', 'opencode-v2']);
91
+ /**
92
+ * Tools whose CLI has no `--variant` flag and takes the variant as a suffix of
93
+ * the model instead: `-m provider/model#variant` (Issue #2982).
94
+ *
95
+ * `opencode2 run` (2.0.18, measured in #2974) answers `--variant` with
96
+ * "Unrecognized flag" and exit 1. The column still spells the variant as
97
+ * `--variant <name>` — the same grammar, dialog field and writer order as v1 —
98
+ * and `claude-executor.ts` composes `model#variant`. Two consequences are
99
+ * enforced by {@link validateVariantHasModel}:
100
+ *
101
+ * - a variant **without a model** has nothing to ride on, and is an error
102
+ * rather than a silently dropped option;
103
+ * - `#` in the model itself is not a way around it: `MODEL_NAME_PATTERN`
104
+ * already refuses `#`, so `--model x#high` is rejected as an invalid model.
105
+ */
106
+ exports.TOOLS_WITH_VARIANT_ON_MODEL = new Set(['opencode-v2']);
78
107
  /**
79
108
  * The opencode column grammar, as one line, for error messages.
80
109
  *
@@ -82,6 +111,28 @@ exports.TOOLS_WITH_RUN_OPTIONS = new Set(['opencode']);
82
111
  * the flags the loop accepts are edited together.
83
112
  */
84
113
  exports.OPENCODE_COLUMN_SYNTAX = 'opencode [--model <provider/model>] [--agent <name>] [--variant <name>] [--continue] [--title <text>]';
114
+ /**
115
+ * The opencode-v2 column grammar, as one line, for error messages (Issue #2982).
116
+ *
117
+ * Same flags as {@link OPENCODE_COLUMN_SYNTAX}; `--variant` is nested inside
118
+ * the `--model` bracket because it is only valid alongside a model.
119
+ */
120
+ exports.OPENCODE_V2_COLUMN_SYNTAX = 'opencode-v2 [--model <provider/model> [--variant <name>]] [--agent <name>] [--continue] [--title <text>]';
121
+ /**
122
+ * Error for a variant given without a model, for the tools in
123
+ * {@link TOOLS_WITH_VARIANT_ON_MODEL} (Issue #2982). Shared by the column
124
+ * parser and `cmate-writer.validateScheduleInput()` so the file and the
125
+ * form refuse the same row with the same words.
126
+ *
127
+ * @returns The error message, or undefined when the combination is fine
128
+ */
129
+ function validateVariantHasModel(cliToolId, model, variant) {
130
+ if (!exports.TOOLS_WITH_VARIANT_ON_MODEL.has(cliToolId))
131
+ return undefined;
132
+ if (!variant?.trim() || model?.trim())
133
+ return undefined;
134
+ return `${cliToolId} option "--variant" needs "--model" (sent as -m <provider/model>#<variant>)`;
135
+ }
85
136
  // =============================================================================
86
137
  // Parse Functions
87
138
  // =============================================================================
@@ -154,7 +205,8 @@ function tokenizeCliToolColumn(raw) {
154
205
  * - **a missing value** — `--agent --title x` would make `--title` the agent
155
206
  * name, and a value starting with `-` is the DR4-001 injection shape anyway.
156
207
  *
157
- * @param cliToolId - Always `opencode` today; echoed into error messages
208
+ * @param cliToolId - `opencode` or `opencode-v2` (Issue #2982); echoed into
209
+ * error messages and picks the syntax hint
158
210
  * @param tokens - Tokens after the tool id
159
211
  * @returns The parsed options, or an error
160
212
  */
@@ -218,10 +270,15 @@ function parseOpencodeRunFlags(cliToolId, tokens) {
218
270
  parsed.continueSession = true;
219
271
  break;
220
272
  }
221
- default:
222
- return { cliToolId, error: `${cliToolId} only supports: ${exports.OPENCODE_COLUMN_SYNTAX}` };
273
+ default: {
274
+ const syntax = cliToolId === 'opencode-v2' ? exports.OPENCODE_V2_COLUMN_SYNTAX : exports.OPENCODE_COLUMN_SYNTAX;
275
+ return { cliToolId, error: `${cliToolId} only supports: ${syntax}` };
276
+ }
223
277
  }
224
278
  }
279
+ const variantError = validateVariantHasModel(cliToolId, parsed.model, parsed.variant);
280
+ if (variantError)
281
+ return { cliToolId, error: variantError };
225
282
  return parsed;
226
283
  }
227
284
  /**
@@ -508,7 +565,8 @@ function parseAndValidateCliToolColumn(raw) {
508
565
  * {@link TOOLS_WITH_MODEL_SUPPORT} for the model, exactly as that line did, so
509
566
  * the two agree about which tools take one; the run options are additionally
510
567
  * gated on {@link TOOLS_WITH_RUN_OPTIONS} so a future tool cannot inherit
511
- * opencode's flags by accident.
568
+ * opencode's flags by accident. For `opencode-v2` (Issue #2982) the variant is
569
+ * passed on as-is; the executor folds it into `-m model#variant`.
512
570
  *
513
571
  * Living here rather than in `job-executor.ts` is the point: the column's
514
572
  * grammar is this module's business, and a scheduler that re-states any part of
@@ -206,6 +206,12 @@ function parseSchedulesSection(rows) {
206
206
  logger.warn('parse:invalid-cli-tool', { name: sanitizedName, cliToolId: resolvedCliToolId });
207
207
  continue;
208
208
  }
209
+ // Issue #2934: registered but not schedulable (SCHEDULE_UNSUPPORTED_CLI_TOOLS,
210
+ // empty since #2974). Skipped like an unknown tool, so no run is built for it.
211
+ if (!(0, schedule_config_1.isScheduleSupportedCliTool)(resolvedCliToolId)) {
212
+ logger.warn('parse:unsupported-cli-tool', { name: sanitizedName, cliToolId: resolvedCliToolId });
213
+ continue;
214
+ }
209
215
  const defaultPermission = schedule_config_1.DEFAULT_PERMISSIONS[resolvedCliToolId] ?? '';
210
216
  let permission = permissionStr?.trim() || defaultPermission;
211
217
  // Validate permission against allowed values
@@ -237,6 +243,12 @@ function parseSchedulesSection(rows) {
237
243
  case 'command-code':
238
244
  allowedValues = schedule_config_1.COMMAND_CODE_SCHEDULE_PERMISSIONS;
239
245
  break;
246
+ // Issue #2974: `default` (no flag) / `auto` (`--auto`). An empty cell
247
+ // resolves to `default`, so an `ask` rule fails the run rather than being
248
+ // approved unattended.
249
+ case 'opencode-v2':
250
+ allowedValues = schedule_config_1.OPENCODE_V2_PERMISSIONS;
251
+ break;
240
252
  case 'gemini':
241
253
  case 'vibe-local':
242
254
  case 'opencode':
@@ -225,6 +225,16 @@ function validateSchedulesSection(rows) {
225
225
  field: 'cliTool',
226
226
  });
227
227
  }
228
+ // Issue #2934: a registered tool that cannot be scheduled
229
+ // (SCHEDULE_UNSUPPORTED_CLI_TOOLS, empty since #2974). The parser skips the
230
+ // same rows.
231
+ if (parsed && (0, types_1.isCliToolType)(parsed.cliToolId) && !(0, schedule_config_1.isScheduleSupportedCliTool)(parsed.cliToolId)) {
232
+ errors.push({
233
+ row: i,
234
+ message: `Row ${i + 1}: CLI Tool "${parsed.cliToolId}" is not supported in schedules yet`,
235
+ field: 'cliTool',
236
+ });
237
+ }
228
238
  // Validate permission (6th column)
229
239
  // Empty/missing permission is allowed -- parser applies default per CLI tool
230
240
  const permissionStr = row[5];
@@ -245,7 +255,9 @@ function validateSchedulesSection(rows) {
245
255
  : cliToolId === 'copilot' ? schedule_config_1.COPILOT_PERMISSIONS
246
256
  : cliToolId === 'antigravity' ? schedule_config_1.ANTIGRAVITY_PERMISSIONS
247
257
  : cliToolId === 'command-code' ? schedule_config_1.COMMAND_CODE_SCHEDULE_PERMISSIONS
248
- : [];
258
+ // Issue #2974: `default` / `auto`, the parser's and the dialog's list.
259
+ : cliToolId === 'opencode-v2' ? schedule_config_1.OPENCODE_V2_PERMISSIONS
260
+ : [];
249
261
  if (!allowedValues.includes(trimmedPermission)) {
250
262
  errors.push({
251
263
  row: i,
@@ -4,10 +4,13 @@
4
4
  * Shared between response-poller.ts and API routes
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_USER_ECHO_PATTERN = exports.CODEX_TRAILED_STATUS_BAR_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_EFFORT_PICKER_FOOTER_PATTERN = exports.CODEX_PICKER_FOOTER_PATTERN = exports.CODEX_FORM_SUBMIT_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.CODEX_DIALOG_PATTERN = exports.CODEX_TRUST_QUESTION_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
8
- exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = void 0;
7
+ exports.findOpencodeV2DialogTitle = exports.OPENCODE_V2_DIALOG_TITLE_PATTERN = exports.OPENCODE_V2_THINKING_PATTERN = exports.OPENCODE_V2_FOOTER_PATTERN = exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_USER_ECHO_PATTERN = exports.CODEX_TRAILED_STATUS_BAR_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_EFFORT_PICKER_FOOTER_PATTERN = exports.CODEX_PICKER_FOOTER_PATTERN = exports.CODEX_FORM_SUBMIT_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.CODEX_DIALOG_PATTERN = exports.CODEX_TRUST_QUESTION_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
8
+ exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_V2_SKIP_PATTERNS = void 0;
9
9
  exports.isCodexTurnActive = isCodexTurnActive;
10
10
  exports.findClaudeChromeStart = findClaudeChromeStart;
11
+ exports.resolveClaudeTrustDialogKeys = resolveClaudeTrustDialogKeys;
12
+ exports.isClaudeTrustDialogOpen = isClaudeTrustDialogOpen;
13
+ exports.isShellPaneCommand = isShellPaneCommand;
11
14
  exports.isCodexPromptReady = isCodexPromptReady;
12
15
  exports.getCodexActiveDialog = getCodexActiveDialog;
13
16
  exports.getCodexLifecycleDialog = getCodexLifecycleDialog;
@@ -17,6 +20,7 @@ exports.findOpenCodeChromeStart = findOpenCodeChromeStart;
17
20
  exports.findOpenCodeUserEchoEnd = findOpenCodeUserEchoEnd;
18
21
  exports.findOpenCodeComposerRows = findOpenCodeComposerRows;
19
22
  exports.stripOpenCodeGutter = stripOpenCodeGutter;
23
+ exports.isOpencodeV2ComposerVisible = isOpencodeV2ComposerVisible;
20
24
  exports.readCopilotStatusBar = readCopilotStatusBar;
21
25
  exports.findCopilotChromeStart = findCopilotChromeStart;
22
26
  exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
@@ -228,6 +232,86 @@ function findClaudeChromeStart(lines) {
228
232
  * tmux padding or other output. (SF-001)
229
233
  */
230
234
  exports.CLAUDE_TRUST_DIALOG_PATTERN = /Yes, I trust this folder/m;
235
+ /** The option row of the trust dialog's cursor: `❯` (or legacy `>`) after the dialog's left padding. */
236
+ const CLAUDE_TRUST_CURSOR_ROW_PATTERN = /^\s*[>❯]\s+\S/;
237
+ /** How far the cursor row may sit from the `Yes, I trust this folder` row (the dialog has two options). */
238
+ const CLAUDE_TRUST_MAX_CURSOR_DISTANCE = 3;
239
+ /**
240
+ * Keys that answer Claude Code's folder-trust dialog with "Yes", or null when
241
+ * no answerable dialog is on screen (Issue #3078).
242
+ *
243
+ * The dialog comes in two layouts, and Enter alone is only right for one:
244
+ *
245
+ * - default Yes (Issue #201 era, `tests/unit/lib/claude-session.test.ts`):
246
+ * ` ❯ 1. Yes, I trust this folder` / ` 2. No, exit` — Enter confirms Yes.
247
+ * - default No (2.1.259 `tests/fixtures/chat-dialog-card-2254/claude-trust-2-1-259.txt`,
248
+ * 2.1.287 with a permission allow-list
249
+ * `tests/fixtures/claude-trust-dialog-3078/allowlist-default-no-2-1-287.txt`):
250
+ * ` ❯ No, exit` / ` Yes, I trust this folder` — Enter EXITS Claude Code.
251
+ *
252
+ * So the answer is read off the screen: the distance from the cursor row to the
253
+ * Yes row becomes that many `Up`/`Down` presses, then `Enter`. Only the last
254
+ * dialog in the capture counts, and a dialog followed by Claude's input-box
255
+ * separator is history in the scrollback, not an open dialog.
256
+ *
257
+ * @param output - ANSI-stripped pane output
258
+ * @returns tmux key names ending in `Enter` (just `['Enter']` when the cursor is
259
+ * already on Yes), or null when no open dialog / no readable cursor row
260
+ */
261
+ function resolveClaudeTrustDialogKeys(output) {
262
+ const lines = output.split('\n');
263
+ const yesIndex = findOpenClaudeTrustYesRow(lines);
264
+ if (yesIndex === -1)
265
+ return null;
266
+ for (let distance = 0; distance <= CLAUDE_TRUST_MAX_CURSOR_DISTANCE; distance++) {
267
+ for (const direction of distance === 0 ? [0] : [-1, 1]) {
268
+ const index = yesIndex + direction * distance;
269
+ if (index < 0 || index >= lines.length)
270
+ continue;
271
+ if (!CLAUDE_TRUST_CURSOR_ROW_PATTERN.test(lines[index]))
272
+ continue;
273
+ // Cursor above Yes → move Down; below → move Up.
274
+ const key = direction < 0 ? 'Down' : 'Up';
275
+ return [...Array(distance).fill(key), 'Enter'];
276
+ }
277
+ }
278
+ return null;
279
+ }
280
+ /**
281
+ * Whether Claude Code's folder-trust dialog is the open screen (Issue #3078).
282
+ *
283
+ * The dialog's cursor row (` ❯ No, exit`) has the prompt glyph, so the start
284
+ * wait asks this before CLAUDE_PROMPT_PATTERN rather than reading the dialog as
285
+ * a ready prompt.
286
+ *
287
+ * @param output - ANSI-stripped pane output
288
+ */
289
+ function isClaudeTrustDialogOpen(output) {
290
+ return findOpenClaudeTrustYesRow(output.split('\n')) !== -1;
291
+ }
292
+ /** `#{pane_current_command}` values of an interactive shell, with tmux's `-` login prefix removed. */
293
+ const SHELL_PANE_COMMANDS = new Set(['sh', 'bash', 'zsh', 'fish', 'dash', 'ksh', 'tcsh', 'csh']);
294
+ /**
295
+ * Whether a pane's foreground command is a shell rather than an agent
296
+ * (Issue #3089). Claude Code shows up as `claude`, `node` or its version
297
+ * string (`2.1.287`), never as one of these, so a shell here after the agent
298
+ * was seen running means the agent has exited.
299
+ *
300
+ * @param command - `#{pane_current_command}` of the pane
301
+ */
302
+ function isShellPaneCommand(command) {
303
+ return SHELL_PANE_COMMANDS.has(command.trim().replace(/^-/, ''));
304
+ }
305
+ /** Row of the last `Yes, I trust this folder`, or -1 when absent or already answered. */
306
+ function findOpenClaudeTrustYesRow(lines) {
307
+ for (let i = lines.length - 1; i >= 0; i--) {
308
+ if (!exports.CLAUDE_TRUST_DIALOG_PATTERN.test(lines[i]))
309
+ continue;
310
+ // Claude's input box (separator rows) drawn below it: the dialog is scrollback.
311
+ return lines.slice(i + 1).some((line) => exports.CLAUDE_SEPARATOR_PATTERN.test(line)) ? -1 : i;
312
+ }
313
+ return -1;
314
+ }
231
315
  /**
232
316
  * Codex prompt pattern
233
317
  * T1.2: Improved to detect empty prompts as well
@@ -1469,12 +1553,22 @@ exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = /Enter\s+to\s+set\s+as\s+default\b
1469
1553
  * "Enter to set as default · s to use this session only · Esc to cancel"
1470
1554
  * (/model command footer as of Claude Code v2.1.218 — Issue #1495)
1471
1555
  *
1556
+ * "←/→ to adjust · Enter to confirm · s for this session only · Esc to cancel"
1557
+ * (/effort slider footer as of Claude Code v2.1.257 — Issue #3052; before
1558
+ * 2.1.257 it was "Enter to confirm · Esc to cancel")
1559
+ *
1560
+ * The /effort branch keys on "Enter to confirm · s for this session only" rather
1561
+ * than "←/→ to adjust": the `s` hint is unique to the pickers (the trust dialog's
1562
+ * "Enter to confirm · Esc to cancel" and approval dialogs never carry it), and
1563
+ * keeping the match under the `Enter to` prefix leaves the pattern a single
1564
+ * linear alternation. Linear, no nested quantifiers — ReDoS safe.
1565
+ *
1472
1566
  * The "set as default" branch lets status-detector classify the `/model` overlay
1473
1567
  * as a Claude selection list (NavigationButtons + ESC hatch, hasActivePrompt=false)
1474
1568
  * once detectPrompt() no longer reports it as a prompt (see
1475
1569
  * CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN).
1476
1570
  */
1477
- exports.CLAUDE_SELECTION_LIST_FOOTER = /Enter\s+to\s+(?:select\s+.*to\s+navigate|confirm\s+·\s+Esc|set\s+as\s+default)/;
1571
+ exports.CLAUDE_SELECTION_LIST_FOOTER = /Enter\s+to\s+(?:select\s+.*to\s+navigate|confirm\s+·\s+(?:Esc|s\s+for\s+this\s+session\s+only)|set\s+as\s+default)/;
1478
1572
  /**
1479
1573
  * OpenCode TUI separator pattern (Issue #379)
1480
1574
  * Matches lines composed entirely of box-drawing / TUI decoration characters.
@@ -1498,6 +1592,68 @@ exports.OPENCODE_SKIP_PATTERNS = [
1498
1592
  exports.OPENCODE_FOOTER_STATUS_PATTERN,
1499
1593
  exports.PASTED_TEXT_PATTERN,
1500
1594
  ];
1595
+ // =============================================================================
1596
+ // OpenCode V2 (`opencode2`, Issue #2934)
1597
+ // =============================================================================
1598
+ //
1599
+ // A separate tool id from `opencode` (Epic #2370, decision 1). Its TUI is drawn
1600
+ // by the same toolkit and many rows look alike, but v1's constants are v1's:
1601
+ // they are left exactly as they are, and v2 names its own here so a change on
1602
+ // either side cannot move the other. Phase 1 reads only what the send path and
1603
+ // the fallback status reader need; the approval dialog (`Always allow`, the
1604
+ // reverse of v1's `Allow always`), the completion row and the session tabs are
1605
+ // Phase 3's.
1606
+ /**
1607
+ * OpenCode V2's empty composer: the input box's `┃` gutter with the
1608
+ * `Ask anything…` placeholder on the same row (2.0.18 draws U+2026; the ASCII
1609
+ * `...` is accepted too, as for v1 since #2915).
1610
+ *
1611
+ * Measured on 2.0.18 at 80x200 (2026-09-28):
1612
+ * ` ┃ Ask anything… "Fix broken tests"`. Match against the ANSI-stripped
1613
+ * frame BEFORE `stripBoxDrawing`, which removes the gutter this anchors on.
1614
+ */
1615
+ exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN = /^[^\S\n]*[\u2502\u2503][^\S\n]*Ask anything(?:\.\.\.|\u2026)/m;
1616
+ /**
1617
+ * OpenCode V2's footer, which ends in `ctrl+p commands` on every frame the
1618
+ * TUI draws (before a turn: `<path>:<branch> shift+tab agents ctrl+p commands`;
1619
+ * after one: `<path>:<branch> 8.8K (1%) ctrl+p commands`, 2.0.18).
1620
+ *
1621
+ * Proof that the TUI — and so its composer — is on screen, NOT that it is idle:
1622
+ * a running turn keeps the footer.
1623
+ */
1624
+ exports.OPENCODE_V2_FOOTER_PATTERN = /ctrl\+p commands/;
1625
+ /**
1626
+ * OpenCode V2 working indicator: the footer's `esc interrupt` hint, drawn only
1627
+ * while a turn is running (2.0.18).
1628
+ */
1629
+ exports.OPENCODE_V2_THINKING_PATTERN = /esc interrupt/;
1630
+ /**
1631
+ * Whether OpenCode V2's composer is on screen, so a send may type into it
1632
+ * (Issue #2934, D6): the gutter-anchored placeholder, or the footer.
1633
+ *
1634
+ * @param text - ANSI-stripped capture, box drawing intact
1635
+ */
1636
+ function isOpencodeV2ComposerVisible(text) {
1637
+ return exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN.test(text) || exports.OPENCODE_V2_FOOTER_PATTERN.test(text);
1638
+ }
1639
+ /**
1640
+ * The OpenCode V2 dialog title row and its reader (Issue #2971) live in a
1641
+ * browser-safe leaf since Issue #2983, because the chat surface's dialog card
1642
+ * reads the same row to decide whether v2's model keys may close the dialog
1643
+ * first. Re-exported here so every server-side caller keeps one import site.
1644
+ */
1645
+ var dialog_title_1 = require("./tools/opencode-v2/dialog-title");
1646
+ Object.defineProperty(exports, "OPENCODE_V2_DIALOG_TITLE_PATTERN", { enumerable: true, get: function () { return dialog_title_1.OPENCODE_V2_DIALOG_TITLE_PATTERN; } });
1647
+ Object.defineProperty(exports, "findOpencodeV2DialogTitle", { enumerable: true, get: function () { return dialog_title_1.findOpencodeV2DialogTitle; } });
1648
+ /** OpenCode V2 rows that are chrome, never reply content. */
1649
+ exports.OPENCODE_V2_SKIP_PATTERNS = [
1650
+ exports.OPENCODE_SEPARATOR_PATTERN,
1651
+ exports.OPENCODE_V2_FOOTER_PATTERN,
1652
+ exports.OPENCODE_V2_THINKING_PATTERN,
1653
+ /Ask anything(?:\.\.\.|\u2026)/,
1654
+ /^Build\s+·/,
1655
+ exports.PASTED_TEXT_PATTERN,
1656
+ ];
1501
1657
  /**
1502
1658
  * Copilot prompt pattern (Issue #545)
1503
1659
  * Copilot CLI shows "❯" followed by cursor/text hint:
@@ -2669,6 +2825,9 @@ function detectThinking(cliToolId, content) {
2669
2825
  case 'command-code':
2670
2826
  result = exports.COMMAND_CODE_THINKING_PATTERN.test(content);
2671
2827
  break;
2828
+ case 'opencode-v2':
2829
+ result = exports.OPENCODE_V2_THINKING_PATTERN.test(content);
2830
+ break;
2672
2831
  default:
2673
2832
  result = exports.CLAUDE_THINKING_PATTERN.test(content);
2674
2833
  }
@@ -2787,6 +2946,16 @@ function getCliToolPatterns(cliToolId) {
2787
2946
  thinkingPattern: exports.COMMAND_CODE_THINKING_PATTERN,
2788
2947
  skipPatterns: [...exports.COMMAND_CODE_SKIP_PATTERNS],
2789
2948
  };
2949
+ // Issue #2934: OpenCode V2's own constants (see OPENCODE_V2_* above). The
2950
+ // separator row is the same half-block rule v1 draws, so v1's pattern is
2951
+ // reused as a value; nothing of v1's is changed.
2952
+ case 'opencode-v2':
2953
+ return {
2954
+ promptPattern: exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN,
2955
+ separatorPattern: exports.OPENCODE_SEPARATOR_PATTERN,
2956
+ thinkingPattern: exports.OPENCODE_V2_THINKING_PATTERN,
2957
+ skipPatterns: [...exports.OPENCODE_V2_SKIP_PATTERNS],
2958
+ };
2790
2959
  default:
2791
2960
  // Default to Claude patterns
2792
2961
  return getCliToolPatterns('claude');
@@ -62,7 +62,7 @@
62
62
  * @see Issue #1784, Phase 2 of the model/effort visibility series
63
63
  */
64
64
  Object.defineProperty(exports, "__esModule", { value: true });
65
- exports.ANTIGRAVITY_MODEL_ID_EFFORT_PATTERN = exports.COMMAND_CODE_BANNER_MODELS_PATTERN = exports.OPENCODE_STEP_MODEL_PATTERN = exports.COPILOT_MODEL_CHANGE_PATTERN = exports.ANTIGRAVITY_BANNER_MODEL_PATTERN = exports.ANTIGRAVITY_STATUS_BAR_HINT_PATTERN = exports.CLAUDE_MODEL_SWITCH_PATTERN = exports.CLAUDE_STARTUP_BANNER_PATTERN = exports.CODEX_STATUS_BAR_WITH_TRAILER_PATTERN = exports.CODEX_FOOTER_EFFORT_SLOT_PATTERN = exports.CODEX_FOOTER_MODEL_PATTERN = exports.REASONING_EFFORT_LEVELS = void 0;
65
+ exports.ANTIGRAVITY_MODEL_ID_EFFORT_PATTERN = exports.COMMAND_CODE_BANNER_MODELS_PATTERN = exports.OPENCODE_STEP_MODEL_PATTERN = exports.COPILOT_MODEL_CHANGE_PATTERN = exports.ANTIGRAVITY_BANNER_MODEL_PATTERN = exports.ANTIGRAVITY_STATUS_BAR_HINT_PATTERN = exports.CLAUDE_MODEL_SWITCH_PATTERN = exports.CLAUDE_EFFORT_ROW_PATTERN = exports.CLAUDE_STARTUP_BANNER_V2_1_28X_PATTERN = exports.CLAUDE_STARTUP_BANNER_PATTERN = exports.CODEX_STATUS_BAR_WITH_TRAILER_PATTERN = exports.CODEX_FOOTER_EFFORT_SLOT_PATTERN = exports.CODEX_FOOTER_MODEL_PATTERN = exports.REASONING_EFFORT_LEVELS = void 0;
66
66
  exports.resolveEffortToken = resolveEffortToken;
67
67
  exports.extractModelInfo = extractModelInfo;
68
68
  exports.deriveEffortFromModelId = deriveEffortFromModelId;
@@ -288,14 +288,83 @@ function readCodexFooter(line) {
288
288
  * literal-anchored parts, and the greedy prefix class is disjoint from `\S`.
289
289
  */
290
290
  exports.CLAUDE_STARTUP_BANNER_PATTERN = /^\s*[\u2500-\u259F][\s\u2500-\u259F]*(\S[^\u2500-\u259F]*?)\s+with\s+(minimal|low|medium|high|xhigh)\s+effort\b/i;
291
+ /**
292
+ * The startup banner as claude 2.1.28x draws it: `<model> · <plan>` with no
293
+ * effort clause (Issue #2955).
294
+ *
295
+ * Measured on claude 2.1.284 (`tests/fixtures/claude-session-start-2955/`):
296
+ * `▝▜██████▀ Sonnet 5.5 · Claude Max`
297
+ * The effort moved off this row to a right-aligned one of its own
298
+ * ({@link CLAUDE_EFFORT_ROW_PATTERN}). Issue #3023 measured on 2.1.285 that
299
+ * this is the shape at the model's DEFAULT effort only: a non-default effort
300
+ * brings the clause back (`Opus 5.5 with xhigh effort · Claude Max`), which
301
+ * {@link CLAUDE_STARTUP_BANNER_PATTERN} reads
302
+ * (`tests/fixtures/claude-effort-default-3023/`).
303
+ *
304
+ * Without the `with … effort` anchor, a box-framed table row containing ` · `
305
+ * would read as a banner — the reason #2361 declined to widen
306
+ * {@link CLAUDE_STARTUP_BANNER_PATTERN}. The anchor here is the plan instead:
307
+ * the separator must be followed by `Claude <Plan>`, the spelling measured on
308
+ * 2.1.284. `API Usage Billing` is deliberately NOT accepted yet: the only frames
309
+ * that carry it are #2361's 2.1.263 Haiku banners, and
310
+ * `model-info-claude-switch-2361.test.ts` pins those as an honest unknown
311
+ * (`fullscreen-after-clear`). The hook's `SessionStart` names the model on
312
+ * those sessions. `·` is excluded from the model group so the lazy
313
+ * match stops at the first separator, and a label still carrying `with …
314
+ * effort` (a truncated old-format banner) is refused by the caller.
315
+ *
316
+ * Tried only after the old pattern, so a 2.1.232-shaped line keeps its effort.
317
+ */
318
+ exports.CLAUDE_STARTUP_BANNER_V2_1_28X_PATTERN = /^\s*[\u2500-\u259F][\s\u2500-\u259F]*(\S[^\u2500-\u259F·]*?)\s+·\s+Claude\s+[A-Za-z]+\b/;
319
+ /**
320
+ * The right-aligned effort row claude 2.1.28x draws under its banner
321
+ * (Issue #2955): `◐ medium · /effort`.
322
+ *
323
+ * Anchored on the trailing `· /effort` hint, which is chrome and nothing a
324
+ * reply would end a line with; the leading glyph is any one non-space
325
+ * character (the dial changes with the level). The word goes through
326
+ * {@link resolveEffortToken}, so anything outside the known levels reads as no
327
+ * effort rather than as a guess.
328
+ *
329
+ * The row is drawn on the first frame only; after the first turn it is gone
330
+ * (Issue #3023), so a later frame reads the model and no effort.
331
+ */
332
+ exports.CLAUDE_EFFORT_ROW_PATTERN = /^\s*\S\s+([A-Za-z]+)\s+·\s+\/effort\s*$/;
291
333
  function readClaudeBanner(line) {
292
334
  const match = exports.CLAUDE_STARTUP_BANNER_PATTERN.exec(line);
293
- if (!match)
335
+ if (match) {
336
+ const model = match[1].trim();
337
+ if (!isPlausibleModelLabel(model))
338
+ return null;
339
+ return { model, effort: resolveEffortToken(match[2]) };
340
+ }
341
+ // Issue #2955: the 2.1.28x shape, no effort on the row.
342
+ const current = exports.CLAUDE_STARTUP_BANNER_V2_1_28X_PATTERN.exec(line);
343
+ if (!current)
294
344
  return null;
295
- const model = match[1].trim();
296
- if (!isPlausibleModelLabel(model))
345
+ const model = current[1].trim();
346
+ if (/\swith\s/i.test(model) || !isPlausibleModelLabel(model))
297
347
  return null;
298
- return { model, effort: resolveEffortToken(match[2]) };
348
+ return { model, effort: null };
349
+ }
350
+ function readClaudeEffortRow(line) {
351
+ const match = exports.CLAUDE_EFFORT_ROW_PATTERN.exec(line);
352
+ if (!match)
353
+ return null;
354
+ const effort = resolveEffortToken(match[1]);
355
+ return effort === null ? null : { model: null, effort };
356
+ }
357
+ /**
358
+ * The banner, with the effort filled from the 2.1.28x effort row when the
359
+ * banner itself names none (Issue #2955). The row is consulted only for a
360
+ * banner that was read, so it never supplies an effort on its own.
361
+ */
362
+ function readClaudeBannerWithEffort(captureText) {
363
+ const banner = scanFromEnd(captureText, readClaudeBanner);
364
+ if (!banner || banner.effort !== null)
365
+ return banner;
366
+ const row = scanFromEnd(captureText, readClaudeEffortRow);
367
+ return row ? { model: banner.model, effort: row.effort } : banner;
299
368
  }
300
369
  /**
301
370
  * Reads `<model>[ with <effort> effort]` off the line Claude prints when the
@@ -341,7 +410,10 @@ function readClaudeBanner(line) {
341
410
  * Billing`), so {@link CLAUDE_STARTUP_BANNER_PATTERN} does not read it and
342
411
  * the confirmation line is what publishes the model there. The banner
343
412
  * pattern is deliberately not widened: without the `with … effort` anchor
344
- * a box-framed table row containing ` · ` would read as a banner.
413
+ * a box-framed table row containing ` · ` would read as a banner. (#2955
414
+ * added a second, plan-anchored pattern for the 2.1.28x banner —
415
+ * {@link CLAUDE_STARTUP_BANNER_V2_1_28X_PATTERN} — which accepts
416
+ * `· Claude <Plan>` only, so this Haiku row is still not read.)
345
417
  * - **`/fast` prints `⎿ ↯ Fast mode ON · model set to Opus 5 · $10/$50 per
346
418
  * Mtok` and is a model switch** (`PostModelSwitch` reported
347
419
  * `claude-fable-5-1` → `claude-opus-5[1m]` on the same keypress). It is NOT
@@ -747,7 +819,7 @@ function extractModelInfo(cliToolId, captureText) {
747
819
  // hooks name the model on `SessionStart` alone — `/model` fires none of
748
820
  // the events CommandMate registers — so on a switch the pane is the only
749
821
  // channel that hears it.
750
- return (scanFromEnd(captureText, readClaudeBanner) ??
822
+ return (readClaudeBannerWithEffort(captureText) ??
751
823
  scanFromEnd(captureText, readClaudeModelSwitchLine) ??
752
824
  unknown());
753
825
  case 'antigravity':
@@ -31,6 +31,7 @@ exports.detectSessionStatus = detectSessionStatus;
31
31
  const status_reason_1 = require("./status-reason");
32
32
  const frame_1 = require("./tools/frame");
33
33
  const registry_1 = require("./tools/registry");
34
+ const auto_yes_dialog_gate_1 = require("../../lib/polling/auto-yes-dialog-gate");
34
35
  var status_reason_2 = require("./status-reason");
35
36
  Object.defineProperty(exports, "STATUS_REASON", { enumerable: true, get: function () { return status_reason_2.STATUS_REASON; } });
36
37
  /**
@@ -139,7 +140,15 @@ Object.defineProperty(exports, "STATUS_CHECK_LINE_COUNT", { enumerable: true, ge
139
140
  */
140
141
  function detectSessionStatus(output, cliToolId, lastOutputTimestamp) {
141
142
  const frame = (0, frame_1.normalizeFrame)(output);
142
- const verdict = (0, registry_1.getToolStatusDetector)(cliToolId).detect(frame, { lastOutputTimestamp });
143
+ const verdict = (0, registry_1.getToolStatusDetector)(cliToolId).detect(frame, {
144
+ lastOutputTimestamp,
145
+ // Issue #2991: the same presence reading Auto-Yes and History use, so an
146
+ // unvouched numbered list is not `waiting` here either (and therefore
147
+ // neither `isPromptWaiting` nor a send refusal). Consulted only by tools
148
+ // that set `requireVouchedPrompt`; `legacy` tools and non-`multiple_choice`
149
+ // prompts come back `present: true` regardless.
150
+ isPromptVouched: (prompt) => (0, auto_yes_dialog_gate_1.evaluateDialogPresence)(cliToolId, prompt.promptData?.type, output).present,
151
+ });
143
152
  return {
144
153
  status: verdict.status,
145
154
  confidence: verdict.confidence,
@@ -155,10 +155,11 @@ exports.CODEX_DIALOG_RULES_VERIFIED_AGAINST = {
155
155
  * | `Press space to select or enter to save for next conversation` | `/experimental` | 1st |
156
156
  * | `Press space to select or enter to save` | `/experimental` (0.155.1) | 1st |
157
157
  * | `left/right group · enter edit shortcut · … · esc close` | `/keymap` | 2nd |
158
+ * | `enter continue · esc skip` | update offer (0.157.1, Issue #3020) | 2nd |
158
159
  *
159
160
  * No `/g` (keeps `.test()` stateless) and no nested quantifiers (ReDoS-safe).
160
161
  */
161
- exports.CODEX_DIALOG_FOOTER_PATTERN = /press\s+\S+\s+to\s+\S|esc\s+(?:to\s+)?(?:cancel|close|dismiss|quit|exit|back|go\s+back)/i;
162
+ exports.CODEX_DIALOG_FOOTER_PATTERN = /press\s+\S+\s+to\s+\S|esc\s+(?:to\s+)?(?:cancel|close|dismiss|quit|exit|back|go\s+back|skip)/i;
162
163
  const INITIAL_SGR = { bold: false, dim: false, fg: null };
163
164
  /**
164
165
  * Apply one SGR parameter list to the running attribute state.
@@ -16,12 +16,14 @@
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.codexStatusDetector = exports.VERIFIED_AGAINST = void 0;
18
18
  exports.isCodexStalePrompt = isCodexStalePrompt;
19
+ exports.isCodexModelPickerFrame = isCodexModelPickerFrame;
19
20
  const cli_patterns_1 = require("../../cli-patterns");
20
21
  const prompt_detector_1 = require("../../prompt-detector");
21
22
  const status_reason_1 = require("../../status-reason");
22
23
  const cli_patterns_2 = require("./cli-patterns");
23
24
  const prompt_1 = require("./prompt");
24
25
  const frame_1 = require("../frame");
26
+ const dialog_block_1 = require("../dialog-block");
25
27
  const run_detection_1 = require("../run-detection");
26
28
  const verified_against_1 = require("../verified-against");
27
29
  const thinking_constants_1 = require("../../../../config/thinking-constants");
@@ -463,3 +465,27 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
463
465
  return null;
464
466
  },
465
467
  });
468
+ /**
469
+ * Issue #3062: is this frame codex's `/model` picker (either stage)?
470
+ *
471
+ * Auto-Yes must not answer it: the digit is an immediate decision, so the
472
+ * poller would pick the model and the reasoning effort for the operator. It is
473
+ * judged by the picker's own footer row (`enter select · esc back`, `enter
474
+ * default · s session · esc back`) rather than by `detectDialog`'s `picker`
475
+ * kind, which also covers the hooks list/detail screens whose Auto-Yes
476
+ * behaviour is unchanged. The footer must sit under the option block of a frame
477
+ * `detectDialog` vouches for, so the same words quoted in a reply do not count.
478
+ * `/prompt-response` does not call this and keeps accepting an answer.
479
+ *
480
+ * @param cleanOutput - The capture Auto-Yes judged (ANSI and box drawing stripped)
481
+ */
482
+ function isCodexModelPickerFrame(cleanOutput) {
483
+ const frame = (0, frame_1.normalizeFrame)(cleanOutput);
484
+ if (!exports.codexStatusDetector.detectDialog(frame))
485
+ return false;
486
+ const contentEnd = findCodexContentEnd(frame.contentLines);
487
+ const block = (0, dialog_block_1.findNumberedOptionBlock)((0, cli_patterns_1.stripBoxDrawing)(frame.clean).split('\n'), contentEnd);
488
+ return (block !== null &&
489
+ (cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(block.footer) ||
490
+ cli_patterns_1.CODEX_EFFORT_PICKER_FOOTER_PATTERN.test(block.footer)));
491
+ }