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
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ /**
3
+ * Answering Command Code's plan review overlay from the CLI / API (Issue #3125).
4
+ *
5
+ * The overlay (`REVIEW` — `Approve ctrl+a` / `Cancel esc` / `type + enter to
6
+ * comment`) is not a dialog with options and not the composer, so neither
7
+ * `respond` (options) nor `send` (composer) could reach it. This module is the
8
+ * one place its keys are decided:
9
+ *
10
+ * | action | keys | allowed on phase |
11
+ * |-----------|----------------------------------------|-------------------------------|
12
+ * | `comment` | `Enter`, the text (`-l`), `Enter` | `body` |
13
+ * | `submit` | [the comment keys], `C-r` | `body` (needs ≥1 comment) |
14
+ * | `approve` | `C-a` — or `Enter` on the radio | `body`, `approve-choice` |
15
+ * | `cancel` | `Escape` | `body`, `approve-choice` |
16
+ *
17
+ * Why the comment opens the box with `Enter` first instead of just typing: `?`
18
+ * `x` `!` are one-key quick comments on this screen (measured on 1.58.0), so a
19
+ * comment that begins with one of them would pin a canned sentence instead.
20
+ * An empty `Enter` with the cursor in the plan body only opens the box
21
+ * (measured, #2763 §1 問い 4), and inside the box every key is text.
22
+ *
23
+ * Everything else is refused with nothing sent:
24
+ * - `action-focus`: `Enter` RUNS the focused action there (#2763 approved a
25
+ * plan that way), and what the shortcuts and letters do with the focus on
26
+ * the list was not measured;
27
+ * - `comment-box`: someone is typing a comment in the pane, and `Escape` there
28
+ * discards it rather than cancelling the review;
29
+ * - `unknown`: a hint bar this module has not seen.
30
+ *
31
+ * Approval is only ever the explicit `approve` action. Nothing here is reached
32
+ * by Auto-Yes: the detector publishes this screen with `hasActivePrompt: false`.
33
+ *
34
+ * @module lib/cli-tools/command-code-plan-review
35
+ */
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.PLAN_REVIEW_STEP_DELAY_MS = exports.PLAN_REVIEW_REFUSAL = exports.PLAN_REVIEW_ACTIONS = void 0;
38
+ exports.isPlanReviewAction = isPlanReviewAction;
39
+ exports.planCommandCodePlanReviewKeys = planCommandCodePlanReviewKeys;
40
+ exports.sendCommandCodePlanReviewKeys = sendCommandCodePlanReviewKeys;
41
+ const tmux_1 = require("../tmux/tmux");
42
+ const tmux_capture_cache_1 = require("../tmux/tmux-capture-cache");
43
+ exports.PLAN_REVIEW_ACTIONS = ['comment', 'submit', 'approve', 'cancel'];
44
+ function isPlanReviewAction(value) {
45
+ return typeof value === 'string' && exports.PLAN_REVIEW_ACTIONS.includes(value);
46
+ }
47
+ /** Refusal reason codes. All of them mean "nothing was sent". */
48
+ exports.PLAN_REVIEW_REFUSAL = {
49
+ /** The overlay is up, but its focus is somewhere these keys are unsafe. */
50
+ BUSY: 'plan_review_busy',
51
+ /** `submit` with no comment given and none pending. */
52
+ NOTHING_TO_SUBMIT: 'plan_review_nothing_to_submit',
53
+ /** A bare number / yes / no, which would otherwise become a comment. */
54
+ AMBIGUOUS_ANSWER: 'plan_review_ambiguous_answer',
55
+ /** The request does not fit this screen (no text for a comment, `--default`). */
56
+ INVALID_REQUEST: 'plan_review_invalid_request',
57
+ };
58
+ /**
59
+ * A comment the caller did not label as one, that is really an answer meant
60
+ * for an options dialog. Typed as a comment it would land on the plan.
61
+ */
62
+ const DIALOG_ANSWER_LIKE = /^(?:\d+(?:\s*,\s*\d+)*|y|yes|n|no)$/i;
63
+ /** One line: a newline inside the box would pin the comment half-typed. */
64
+ function normalizeComment(text) {
65
+ return text.replace(/\s*[\r\n]+\s*/g, ' ').trim();
66
+ }
67
+ const PHASE_REFUSALS = {
68
+ 'action-focus': 'The plan review has its focus on the action list (`↑/↓ choose · enter to run`), where Enter runs the ' +
69
+ 'focused action, so no key was sent. Move the focus back into the plan (↑) in the terminal, then retry.',
70
+ 'comment-box': 'A comment is being typed in the plan review (`enter to pin · esc discard`), so no key was sent. ' +
71
+ 'Pin or discard it in the terminal, then retry.',
72
+ unknown: 'The plan review is up, but its hint bar is not one this version knows, so no key was sent. ' +
73
+ 'Answer it in the terminal.',
74
+ };
75
+ /**
76
+ * Decide the keys for a request against the screen as it is now. Pure.
77
+ *
78
+ * @param state - `readCommandCodePlanReviewState` of the frame about to be answered
79
+ * @param request - what the caller asked for
80
+ */
81
+ function planCommandCodePlanReviewKeys(state, request) {
82
+ const comment = request.text === undefined ? '' : normalizeComment(request.text);
83
+ const action = request.action ?? 'comment';
84
+ if (request.useDefault) {
85
+ return {
86
+ ok: false,
87
+ reason: exports.PLAN_REVIEW_REFUSAL.INVALID_REQUEST,
88
+ message: 'The plan review has no default option. Comment with text, or choose ' +
89
+ '--plan-review submit | approve | cancel.',
90
+ };
91
+ }
92
+ if ((action === 'approve' || action === 'cancel') && comment) {
93
+ return {
94
+ ok: false,
95
+ reason: exports.PLAN_REVIEW_REFUSAL.INVALID_REQUEST,
96
+ message: `--plan-review ${action} takes no text. Comment first, then ${action}.`,
97
+ };
98
+ }
99
+ if (action === 'comment' && !comment) {
100
+ return {
101
+ ok: false,
102
+ reason: exports.PLAN_REVIEW_REFUSAL.INVALID_REQUEST,
103
+ message: 'A plan review comment needs text.',
104
+ };
105
+ }
106
+ if (request.action === undefined && DIALOG_ANSWER_LIKE.test(comment)) {
107
+ return {
108
+ ok: false,
109
+ reason: exports.PLAN_REVIEW_REFUSAL.AMBIGUOUS_ANSWER,
110
+ message: `The plan review has no numbered options, and "${comment}" would be pinned to the plan as a ` +
111
+ 'comment, so no key was sent. Approve or cancel with --plan-review approve | cancel; to really ' +
112
+ 'comment this text, add --plan-review comment.',
113
+ };
114
+ }
115
+ if (state.phase === 'approve-choice') {
116
+ // The radio `ctrl+a` opens when comments are pending (1.58.0): `enter
117
+ // confirm · esc back`. Enter confirms whichever side is `(•)`.
118
+ if (action === 'approve')
119
+ return { ok: true, action, steps: [{ kind: 'key', key: 'Enter' }], comment: null };
120
+ if (action === 'cancel')
121
+ return { ok: true, action, steps: [{ kind: 'key', key: 'Escape' }], comment: null };
122
+ return {
123
+ ok: false,
124
+ reason: exports.PLAN_REVIEW_REFUSAL.BUSY,
125
+ message: 'The plan review is asking how to approve (`←/→ choose · enter confirm · esc back`), so no key was ' +
126
+ 'sent. Confirm with --plan-review approve, or go back with --plan-review cancel.',
127
+ };
128
+ }
129
+ if (state.phase !== 'body') {
130
+ return { ok: false, reason: exports.PLAN_REVIEW_REFUSAL.BUSY, message: PHASE_REFUSALS[state.phase] };
131
+ }
132
+ const commentSteps = comment
133
+ ? [{ kind: 'key', key: 'Enter' }, { kind: 'text', text: comment }, { kind: 'key', key: 'Enter' }]
134
+ : [];
135
+ switch (action) {
136
+ case 'comment':
137
+ return { ok: true, action, steps: commentSteps, comment };
138
+ case 'submit':
139
+ if (!comment && state.pendingComments === 0) {
140
+ return {
141
+ ok: false,
142
+ reason: exports.PLAN_REVIEW_REFUSAL.NOTHING_TO_SUBMIT,
143
+ message: 'The plan review has no pending comment to submit, so no key was sent. Give the comment text ' +
144
+ 'with --plan-review submit, or approve / cancel the plan.',
145
+ };
146
+ }
147
+ return { ok: true, action, steps: [...commentSteps, { kind: 'key', key: 'C-r' }], comment: comment || null };
148
+ case 'approve':
149
+ return { ok: true, action, steps: [{ kind: 'key', key: 'C-a' }], comment: null };
150
+ case 'cancel':
151
+ return { ok: true, action, steps: [{ kind: 'key', key: 'Escape' }], comment: null };
152
+ }
153
+ }
154
+ /** Pause between steps, so the TUI handles each one as its own input event. */
155
+ exports.PLAN_REVIEW_STEP_DELAY_MS = 300;
156
+ /**
157
+ * Send the planned steps, one tmux invocation each.
158
+ *
159
+ * Key steps (including `C-r`) go through `sendSpecialKeys`; the comment text
160
+ * goes through `-l` so it is never resolved as a key name.
161
+ */
162
+ async function sendCommandCodePlanReviewKeys(sessionName, steps, sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))) {
163
+ for (let i = 0; i < steps.length; i++) {
164
+ const step = steps[i];
165
+ if (step.kind === 'text') {
166
+ await (0, tmux_1.sendKeys)(sessionName, step.text, false, { literal: true });
167
+ }
168
+ else {
169
+ await (0, tmux_1.sendSpecialKeys)(sessionName, [step.key]);
170
+ }
171
+ if (i < steps.length - 1)
172
+ await sleep(exports.PLAN_REVIEW_STEP_DELAY_MS);
173
+ }
174
+ (0, tmux_capture_cache_1.invalidateCache)(sessionName);
175
+ }
@@ -36,7 +36,7 @@
36
36
  * only the correlation.
37
37
  */
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.CommandCodeTool = exports.COMMAND_CODE_EXIT_COMMAND = exports.COMMAND_CODE_LAUNCH_FLAGS = exports.COMMAND_CODE_COMMAND = void 0;
39
+ exports.CommandCodeTool = exports.COMMAND_CODE_PLAN_REVIEW_SEND_MESSAGE = exports.COMMAND_CODE_STARTING_WINDOW_MS = exports.COMMAND_CODE_EXIT_COMMAND = exports.COMMAND_CODE_LAUNCH_FLAGS = exports.COMMAND_CODE_COMMAND = void 0;
40
40
  exports.buildCommandCodeLaunchCommand = buildCommandCodeLaunchCommand;
41
41
  exports.isCommandCodeReady = isCommandCodeReady;
42
42
  const base_1 = require("./base");
@@ -51,6 +51,8 @@ const tool_id_1 = require("../../lib/hooks/sources/command-code/tool-id");
51
51
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
52
52
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
53
53
  const install_hints_1 = require("./install-hints");
54
+ const plan_review_state_1 = require("../detection/tools/command-code/plan-review-state");
55
+ const session_start_error_1 = require("../../lib/session/session-start-error");
54
56
  const logger = (0, logger_1.createLogger)('cli-tools/command-code');
55
57
  /** The executable CommandMate launches. See the module docblock for why not `cmd`. */
56
58
  exports.COMMAND_CODE_COMMAND = 'commandcode';
@@ -106,6 +108,16 @@ const COMMAND_CODE_POLL_INTERVAL_MS = 1000;
106
108
  const COMMAND_CODE_INIT_MAX_ATTEMPTS = 30;
107
109
  /** Timeout for waiting for the composer before sending a message. */
108
110
  const COMMAND_CODE_PROMPT_WAIT_TIMEOUT_MS = 15000;
111
+ /**
112
+ * How long after a launch a composer that has never been seen still counts as
113
+ * "starting" (Issue #3006).
114
+ *
115
+ * Past this, a pane that has shown no composer since it was launched is not
116
+ * slow, it is stuck on something (an unmeasured dialog, a crash screen), and
117
+ * `prompt not ready` — which #3007 answers by reading the screen — is the
118
+ * truer report than "retry in a few seconds".
119
+ */
120
+ exports.COMMAND_CODE_STARTING_WINDOW_MS = 120_000;
109
121
  /** Rows of pane tail the readiness probe reads. */
110
122
  const COMMAND_CODE_READINESS_CAPTURE_LINES = 50;
111
123
  /**
@@ -133,6 +145,16 @@ function isCommandCodeReady(rawOutput) {
133
145
  return false;
134
146
  return !cli_patterns_1.COMMAND_CODE_THINKING_PATTERN.test((0, cli_patterns_1.stripAnsi)(rawOutput));
135
147
  }
148
+ /**
149
+ * Why `send` stops at the plan review overlay (Issue #3125).
150
+ *
151
+ * The overlay replaces the composer until a human decides, so waiting for the
152
+ * composer only ran out the clock (`prompt not ready` after the full timeout).
153
+ * Its comments, Submit review, approval and cancel go through `respond`.
154
+ */
155
+ exports.COMMAND_CODE_PLAN_REVIEW_SEND_MESSAGE = 'Command Code is showing a plan review (REVIEW), which takes review comments, not messages. ' +
156
+ 'Comment with `commandmate respond <worktree-id> "<text>"`, then `--plan-review submit` (ctrl+r), ' +
157
+ '`--plan-review approve` (ctrl+a) or `--plan-review cancel` (esc).';
136
158
  /**
137
159
  * Command Code CLI tool implementation.
138
160
  * Manages `commandcode` sessions using tmux.
@@ -141,6 +163,20 @@ class CommandCodeTool extends base_1.BaseCLITool {
141
163
  id = 'command-code';
142
164
  name = 'Command Code CLI';
143
165
  command = exports.COMMAND_CODE_COMMAND;
166
+ /**
167
+ * Sessions this instance launched whose composer has not been seen since,
168
+ * keyed by tmux session name, valued by launch time (Issue #3006).
169
+ *
170
+ * This is what tells a slow cold start apart from a live session that is
171
+ * showing something other than the composer. Only the launch path adds an
172
+ * entry, and any readiness probe that sees the composer removes it, so a
173
+ * session that has ever reached its composer keeps the old
174
+ * `prompt not ready` refusal. Held per instance rather than per module
175
+ * because `CLIToolManager` holds one instance for the process, and a restart
176
+ * forgets it — which errs towards `prompt not ready`, the answer this
177
+ * repository gave before.
178
+ */
179
+ composerPendingSince = new Map();
144
180
  /**
145
181
  * Declare the claude-family pad (Issue #2297).
146
182
  *
@@ -209,6 +245,9 @@ class CommandCodeTool extends base_1.BaseCLITool {
209
245
  // launch below then fails: falling back to the screen scraper is always safe
210
246
  // and trusting a dead session's events is not.
211
247
  (0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: tool_id_1.COMMAND_CODE_CLI_TOOL_ID, instanceId });
248
+ // Issue #3006: from here until a readiness probe sees the composer, a send
249
+ // that cannot find it is reporting a slow start, not a wedged session.
250
+ this.composerPendingSince.set(sessionName, Date.now());
212
251
  try {
213
252
  if (!exists) {
214
253
  // Inline-rendered, so the pane keeps scrollback; depth comes from the
@@ -229,6 +268,7 @@ class CommandCodeTool extends base_1.BaseCLITool {
229
268
  logger.info('started-command-code-session');
230
269
  }
231
270
  catch (error) {
271
+ this.composerPendingSince.delete(sessionName);
232
272
  throw new Error(`Failed to start Command Code session: ${(0, errors_1.getErrorMessage)(error)}`);
233
273
  }
234
274
  }
@@ -246,6 +286,7 @@ class CommandCodeTool extends base_1.BaseCLITool {
246
286
  try {
247
287
  const rawOutput = await (0, tmux_1.capturePane)(sessionName, COMMAND_CODE_READINESS_CAPTURE_LINES);
248
288
  if (isCommandCodeReady(rawOutput)) {
289
+ this.composerPendingSince.delete(sessionName);
249
290
  logger.info('command-code-prompt-detected');
250
291
  return;
251
292
  }
@@ -262,23 +303,57 @@ class CommandCodeTool extends base_1.BaseCLITool {
262
303
  * Mirrors CodexTool.waitForPrompt: throws on timeout so a failed readiness
263
304
  * check STOPS the send rather than typing into a non-ready TUI.
264
305
  *
306
+ * Issue #3006: when the session was launched by this server and its composer
307
+ * has not been seen once since — the cold start of a dispatch — the timeout
308
+ * is a {@link SessionStartTimeoutError} (`SESSION_STARTING`, 503 at the send
309
+ * route), the same answer claude gives for a start that is merely slow. A
310
+ * session that HAS shown its composer keeps the plain `prompt not ready`
311
+ * error: it is up, and something on screen is in the way.
312
+ *
313
+ * @throws SessionStartTimeoutError when a just-launched session's composer
314
+ * has still not appeared
315
+ * @throws Error ({@link COMMAND_CODE_PLAN_REVIEW_SEND_MESSAGE}) at once when
316
+ * the plan review overlay is on screen (Issue #3125)
265
317
  * @throws Error when the composer is not detected within the timeout
266
318
  */
267
319
  async waitForPrompt(sessionName) {
268
320
  const startTime = Date.now();
269
321
  const pollInterval = 500;
322
+ let planReviewPolls = 0;
270
323
  while (Date.now() - startTime < COMMAND_CODE_PROMPT_WAIT_TIMEOUT_MS) {
324
+ let planReviewUp = false;
271
325
  try {
272
326
  const rawOutput = await (0, tmux_1.capturePane)(sessionName, COMMAND_CODE_READINESS_CAPTURE_LINES);
273
- if (isCommandCodeReady(rawOutput)) {
327
+ // Read first: a focused action row (`❯ Approve ctrl+a`) is a `❯` row.
328
+ planReviewUp = (0, plan_review_state_1.readCommandCodePlanReviewState)(rawOutput) !== null;
329
+ if (!planReviewUp && isCommandCodeReady(rawOutput)) {
330
+ this.composerPendingSince.delete(sessionName);
274
331
  return;
275
332
  }
276
333
  }
277
334
  catch {
278
335
  // Capture may fail - continue polling
279
336
  }
337
+ // Issue #3125: no composer comes back until a human answers the review.
338
+ // Two polls in a row, because the frame redrawn just after `Esc` can
339
+ // still carry the footer (`after-cancel-partial-redraw.txt`, #2763).
340
+ planReviewPolls = planReviewUp ? planReviewPolls + 1 : 0;
341
+ if (planReviewPolls >= 2) {
342
+ logger.info('command-code-plan-review-blocks-send', { sessionName });
343
+ throw new Error(exports.COMMAND_CODE_PLAN_REVIEW_SEND_MESSAGE);
344
+ }
280
345
  await new Promise((resolve) => setTimeout(resolve, pollInterval));
281
346
  }
347
+ const launchedAt = this.composerPendingSince.get(sessionName);
348
+ if (launchedAt !== undefined) {
349
+ const sinceLaunchMs = Date.now() - launchedAt;
350
+ if (sinceLaunchMs <= exports.COMMAND_CODE_STARTING_WINDOW_MS) {
351
+ logger.info('command-code-session-still-starting', { sessionName, sinceLaunchMs });
352
+ throw new session_start_error_1.SessionStartTimeoutError(this.name, sessionName, sinceLaunchMs);
353
+ }
354
+ // Too long since the launch to call it slow; report it as not ready.
355
+ this.composerPendingSince.delete(sessionName);
356
+ }
282
357
  logger.info('command-code-prompt-not-ready');
283
358
  throw new Error('Command Code prompt not ready: timed out waiting for the composer before sending');
284
359
  }
@@ -312,6 +387,9 @@ class CommandCodeTool extends base_1.BaseCLITool {
312
387
  logger.info('sent-message-to-command-code-session');
313
388
  }
314
389
  catch (error) {
390
+ // Issue #3006: passed through unwrapped so its `code` reaches the route.
391
+ if ((0, session_start_error_1.isSessionStartTimeoutError)(error))
392
+ throw error;
315
393
  throw new Error(`Failed to send message to Command Code: ${(0, errors_1.getErrorMessage)(error)}`);
316
394
  }
317
395
  }
@@ -338,6 +416,7 @@ class CommandCodeTool extends base_1.BaseCLITool {
338
416
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_EXIT_WAIT_MS));
339
417
  }
340
418
  const killed = await (0, tmux_1.killSession)(sessionName);
419
+ this.composerPendingSince.delete(sessionName);
341
420
  // So a later session reusing the name starts clean.
342
421
  (0, tmux_capture_cache_1.invalidateCache)(sessionName);
343
422
  if (killed) {
@@ -87,6 +87,16 @@ const COMPOSER_SPECS = {
87
87
  clearBeforeSend: false,
88
88
  submitEnterCount: 1,
89
89
  },
90
+ // Issue #2934: OpenCode V2 draws the same gutter-and-no-marker input box as
91
+ // v1 (`┃ Ask anything… "…"` on 2.0.18, 80x200), so the box reader is the
92
+ // right one — the marker reader would find nothing and classify every send
93
+ // `submitted` without evidence. Same pane height as v1's.
94
+ 'opencode-v2': {
95
+ reader: 'opencode-box',
96
+ verifyCaptureLines: tmux_pane_config_1.OPENCODE_PANE_HEIGHT,
97
+ clearBeforeSend: false,
98
+ submitEnterCount: 1,
99
+ },
90
100
  };
91
101
  /**
92
102
  * The composer description for a CLI tool.
@@ -39,6 +39,7 @@
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.COPILOT_VERSION_PROBE_TIMEOUT_MS = void 0;
41
41
  exports.findExecutableOnPath = findExecutableOnPath;
42
+ exports.findExecutablesOnPath = findExecutablesOnPath;
42
43
  exports.resolveCopilotExecutable = resolveCopilotExecutable;
43
44
  const child_process_1 = require("child_process");
44
45
  const fs_1 = require("fs");
@@ -83,17 +84,32 @@ function isExecutableFile(candidate) {
83
84
  * is; what is copilot-specific is the caller below.
84
85
  */
85
86
  function findExecutableOnPath(name) {
87
+ return findExecutablesOnPath(name, 1)[0] ?? null;
88
+ }
89
+ /**
90
+ * Every executable named `name` on `PATH`, in `PATH` order, up to `limit`.
91
+ *
92
+ * Issue #2939: `opencode` can name two different programs on one machine
93
+ * (OpenCode 1.x's installer and `@opencode/cli`, which registers `opencode`
94
+ * next to `opencode2`), so "the first one" is not always the one a tool wants.
95
+ * The same walk as {@link findExecutableOnPath}, not a second copy of it.
96
+ */
97
+ function findExecutablesOnPath(name, limit = Infinity) {
86
98
  const rawPath = process.env.PATH;
87
- if (!rawPath)
88
- return null;
99
+ if (!rawPath || limit <= 0)
100
+ return [];
101
+ const found = [];
89
102
  for (const directory of rawPath.split(path_1.delimiter)) {
90
103
  if (!directory)
91
104
  continue;
92
105
  const candidate = (0, path_1.join)(directory, name);
93
- if (isExecutableFile(candidate))
94
- return candidate;
106
+ if (found.includes(candidate) || !isExecutableFile(candidate))
107
+ continue;
108
+ found.push(candidate);
109
+ if (found.length >= limit)
110
+ break;
95
111
  }
96
- return null;
112
+ return found;
97
113
  }
98
114
  /**
99
115
  * Where `gh copilot` puts the copy it downloads.
@@ -42,7 +42,7 @@
42
42
  * @module lib/cli-tools/graceful-exit
43
43
  */
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.DEFAULT_GRACEFUL_EXIT_SPEC = exports.GEMINI_EXIT_COMMAND_TEXT = exports.COMMAND_CODE_EXIT_COMMAND_TEXT = exports.OPENCODE_EXIT_COMMAND_TEXT = exports.COPILOT_EXIT_COMMAND_TEXT = void 0;
45
+ exports.DEFAULT_GRACEFUL_EXIT_SPEC = exports.GEMINI_EXIT_COMMAND_TEXT = exports.COMMAND_CODE_EXIT_COMMAND_TEXT = exports.OPENCODE_V2_EXIT_COMMAND_TEXT = exports.OPENCODE_EXIT_COMMAND_TEXT = exports.COPILOT_EXIT_COMMAND_TEXT = void 0;
46
46
  exports.resolveGracefulExitSpec = resolveGracefulExitSpec;
47
47
  exports.verifyGracefulExit = verifyGracefulExit;
48
48
  const copilot_constants_1 = require("../../config/copilot-constants");
@@ -52,6 +52,8 @@ const cli_tool_contracts_1 = require("../../types/cli-tool-contracts");
52
52
  exports.COPILOT_EXIT_COMMAND_TEXT = '/exit';
53
53
  /** The graceful exit command opencode's TUI accepts. */
54
54
  exports.OPENCODE_EXIT_COMMAND_TEXT = '/exit';
55
+ /** OpenCode V2's quit command (Issue #2934) — the TUI's own `/exit`. */
56
+ exports.OPENCODE_V2_EXIT_COMMAND_TEXT = '/exit';
55
57
  /** Command Code's own quit command (Issue #2250). */
56
58
  exports.COMMAND_CODE_EXIT_COMMAND_TEXT = '/exit';
57
59
  /** The graceful exit command gemini's TUI accepts. */
@@ -141,6 +143,18 @@ const GRACEFUL_EXIT_SPECS = {
141
143
  exitWaitMs: cli_tool_timing_config_1.OPENCODE_EXIT_WAIT_MS,
142
144
  ownsLoopbackServer: true,
143
145
  },
146
+ // Issue #2934: `/exit` and a separate Enter, as for v1. The server is not the
147
+ // TUI here but `opencode2 serve` in the same pane, stopped by
148
+ // `scripts/opencode-v2/launch.sh`'s trap when the TUI goes — so the pane still
149
+ // owns a loopback port, and the postcondition checks it stopped answering.
150
+ 'opencode-v2': {
151
+ keys: [
152
+ (0, cli_tool_contracts_1.literalStep)(exports.OPENCODE_V2_EXIT_COMMAND_TEXT, cli_tool_timing_config_1.TUI_TEXT_INPUT_WAIT_MS),
153
+ (0, cli_tool_contracts_1.keyStep)('Enter'),
154
+ ],
155
+ exitWaitMs: cli_tool_timing_config_1.OPENCODE_V2_EXIT_WAIT_MS,
156
+ ownsLoopbackServer: true,
157
+ },
144
158
  };
145
159
  /**
146
160
  * The graceful-exit description for a CLI tool.
@@ -6,7 +6,7 @@
6
6
  * @module cli-tools
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.CLIToolManager = exports.buildCommandCodeLaunchCommand = exports.CommandCodeTool = exports.AntigravityTool = exports.GeminiTool = exports.CodexTool = exports.ClaudeTool = exports.BaseCLITool = exports.DEFAULT_GRACEFUL_EXIT_SPEC = exports.verifyGracefulExit = exports.resolveGracefulExitSpec = exports.GEMINI_PANE_HEIGHT = exports.resolveCaptureSpec = exports.DEFAULT_COMPOSER_SPEC = exports.resolveComposerSpec = exports.isImageCapableCLITool = void 0;
9
+ exports.CLIToolManager = exports.OpenCodeV2Tool = exports.buildCommandCodeLaunchCommand = exports.CommandCodeTool = exports.AntigravityTool = exports.GeminiTool = exports.CodexTool = exports.ClaudeTool = exports.BaseCLITool = exports.DEFAULT_GRACEFUL_EXIT_SPEC = exports.verifyGracefulExit = exports.resolveGracefulExitSpec = exports.GEMINI_PANE_HEIGHT = exports.resolveCaptureSpec = exports.DEFAULT_COMPOSER_SPEC = exports.resolveComposerSpec = exports.isImageCapableCLITool = void 0;
10
10
  var types_1 = require("./types");
11
11
  Object.defineProperty(exports, "isImageCapableCLITool", { enumerable: true, get: function () { return types_1.isImageCapableCLITool; } });
12
12
  var composer_spec_1 = require("./composer-spec");
@@ -34,6 +34,8 @@ Object.defineProperty(exports, "AntigravityTool", { enumerable: true, get: funct
34
34
  var command_code_1 = require("./command-code");
35
35
  Object.defineProperty(exports, "CommandCodeTool", { enumerable: true, get: function () { return command_code_1.CommandCodeTool; } });
36
36
  Object.defineProperty(exports, "buildCommandCodeLaunchCommand", { enumerable: true, get: function () { return command_code_1.buildCommandCodeLaunchCommand; } });
37
+ var opencode_v2_1 = require("./opencode-v2");
38
+ Object.defineProperty(exports, "OpenCodeV2Tool", { enumerable: true, get: function () { return opencode_v2_1.OpenCodeV2Tool; } });
37
39
  // Export CLI tool manager
38
40
  var manager_1 = require("./manager");
39
41
  Object.defineProperty(exports, "CLIToolManager", { enumerable: true, get: function () { return manager_1.CLIToolManager; } });
@@ -83,6 +83,8 @@ exports.CLI_TOOL_INSTALL_HINTS = {
83
83
  opencode: 'Install with: npm install -g opencode-ai',
84
84
  copilot: copilot_constants_1.COPILOT_INSTALL_HINT,
85
85
  'command-code': 'Install with: npm install -g command-code',
86
+ // Issue #2934: the package installs the `opencode2` executable.
87
+ 'opencode-v2': 'Install with: npm install -g @opencode/cli',
86
88
  // No package to name: `agy` ships with Antigravity and updates itself. The
87
89
  // URL is lifted from the binary on PATH rather than from a search result.
88
90
  antigravity: 'Install the Antigravity CLI: https://antigravity.google/docs/cli/reference',
@@ -114,18 +116,22 @@ function getCliToolInstallHint(id) {
114
116
  * and #2009's contract is that the phrase survives.
115
117
  *
116
118
  * @param tool - The tool that could not be started
119
+ * @param detail - Why, when there is more to say than "not on PATH" — e.g.
120
+ * `opencode` is there but is OpenCode V2 (Issue #2939)
117
121
  * @returns A sentence safe to hand back to an HTTP caller
118
122
  */
119
- function buildMissingToolMessage(tool) {
123
+ function buildMissingToolMessage(tool, detail) {
120
124
  return (`${tool.name} (${tool.command}) is not installed or not in PATH. ` +
125
+ (detail ? `${detail} ` : '') +
121
126
  `${getCliToolInstallHint(tool.id)}`);
122
127
  }
123
128
  /**
124
129
  * The typed refusal, carrying {@link buildMissingToolMessage}.
125
130
  *
126
131
  * @param tool - The tool that could not be started
132
+ * @param detail - See {@link buildMissingToolMessage}
127
133
  * @returns The error every launch path throws for a missing binary
128
134
  */
129
- function missingToolError(tool) {
130
- return new session_start_error_1.SessionStartUnavailableError(tool.name, buildMissingToolMessage(tool));
135
+ function missingToolError(tool, detail) {
136
+ return new session_start_error_1.SessionStartUnavailableError(tool.name, buildMissingToolMessage(tool, detail));
131
137
  }
@@ -211,6 +211,25 @@ const LIVENESS_SPECS = {
211
211
  cli_patterns_1.COMMAND_CODE_THINKING_PATTERN,
212
212
  ],
213
213
  },
214
+ /**
215
+ * OpenCode V2 2.0.18 — measured at 80x200 (Issue #2934).
216
+ *
217
+ * The footer (`… ctrl+p commands`) is drawn on every frame the TUI paints,
218
+ * before and after a turn and while one runs, so it alone carries liveness;
219
+ * the placeholder and the running hint are listed as well so a frame with
220
+ * either is not taken for a shell. None of the three can be matched by a
221
+ * shell prompt. After the TUI exits the alternate screen is gone and only the
222
+ * shell's rows remain, which is what makes the verdict flip.
223
+ */
224
+ 'opencode-v2': {
225
+ ...SHARED,
226
+ ...ADDED_TOOL_DEFAULTS,
227
+ alivePatterns: [
228
+ cli_patterns_1.OPENCODE_V2_IDLE_COMPOSER_PATTERN,
229
+ cli_patterns_1.OPENCODE_V2_FOOTER_PATTERN,
230
+ cli_patterns_1.OPENCODE_V2_THINKING_PATTERN,
231
+ ],
232
+ },
214
233
  /** vibe-local — patterns from `cli-patterns`; no live frames (needs Ollama). */
215
234
  'vibe-local': {
216
235
  ...SHARED,
@@ -46,6 +46,7 @@ const opencode_1 = require("./opencode");
46
46
  const copilot_1 = require("./copilot");
47
47
  const antigravity_1 = require("./antigravity");
48
48
  const command_code_1 = require("./command-code");
49
+ const opencode_v2_1 = require("./opencode-v2");
49
50
  /**
50
51
  * CLI Tool Manager (Singleton)
51
52
  * Provides centralized access to all CLI tools (Issue #368: includes Vibe Local, Issue #379: includes OpenCode)
@@ -67,6 +68,7 @@ class CLIToolManager {
67
68
  this.tools.set('copilot', new copilot_1.CopilotTool());
68
69
  this.tools.set('antigravity', new antigravity_1.AntigravityTool());
69
70
  this.tools.set('command-code', new command_code_1.CommandCodeTool());
71
+ this.tools.set('opencode-v2', new opencode_v2_1.OpenCodeV2Tool());
70
72
  }
71
73
  /**
72
74
  * Get singleton instance