commandmate 0.42.1 → 0.43.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 (435) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +144 -144
  3. package/.next/app-path-routes-manifest.json +23 -23
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  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_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update-check/route.js +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/capabilities/route.js +1 -1
  18. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/daily-summary/route.js +1 -1
  20. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  21. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  24. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/hooks/agent-event/route.js +103 -1
  31. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  32. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  34. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  35. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  37. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  45. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  46. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/relays/route.js +1 -1
  48. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  49. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  53. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  54. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/repositories/clone/route.js +1 -1
  56. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  57. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/repositories/restore/route.js +1 -1
  60. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  61. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/route.js +1 -1
  63. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/scan/route.js +1 -1
  66. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/sync/route.js +1 -1
  69. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  70. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  73. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  74. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/skills/[id]/route.js +1 -1
  78. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/skills/route.js +1 -1
  83. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/slash-commands/route.js +1 -1
  85. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  94. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  97. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  100. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -1
  104. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  105. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  108. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  111. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +3 -1
  116. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  117. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  145. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  148. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  151. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  161. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  167. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  171. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/route.js +1 -103
  173. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +3 -1
  176. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +3 -1
  179. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -1
  182. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -103
  186. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +104 -2
  189. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/route.js +1 -1
  229. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  232. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  234. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  235. package/.next/server/app/page_client-reference-manifest.js +1 -1
  236. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  239. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  240. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  241. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  243. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  244. package/.next/server/app/worktrees/[id]/page.js +9 -9
  245. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  246. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  247. package/.next/server/app-paths-manifest.json +23 -23
  248. package/.next/server/chunks/1068.js +1 -1
  249. package/.next/server/chunks/1210.js +1 -1
  250. package/.next/server/chunks/1501.js +4 -4
  251. package/.next/server/chunks/1990.js +1 -1
  252. package/.next/server/chunks/2119.js +1 -1
  253. package/.next/server/chunks/22.js +1 -1
  254. package/.next/server/chunks/2328.js +1 -1
  255. package/.next/server/chunks/2404.js +4 -3
  256. package/.next/server/chunks/2445.js +1 -1
  257. package/.next/server/chunks/252.js +1 -1
  258. package/.next/server/chunks/2816.js +1 -1
  259. package/.next/server/chunks/3543.js +1 -1
  260. package/.next/server/chunks/3730.js +1 -1
  261. package/.next/server/chunks/3945.js +1 -1
  262. package/.next/server/chunks/4207.js +3 -3
  263. package/.next/server/chunks/434.js +1 -1
  264. package/.next/server/chunks/5064.js +1 -1
  265. package/.next/server/chunks/5571.js +1 -1
  266. package/.next/server/chunks/5742.js +1 -1
  267. package/.next/server/chunks/5775.js +1 -1
  268. package/.next/server/chunks/611.js +1 -1
  269. package/.next/server/chunks/6130.js +1 -1
  270. package/.next/server/chunks/6285.js +1 -1
  271. package/.next/server/chunks/6491.js +103 -0
  272. package/.next/server/chunks/6661.js +1 -1
  273. package/.next/server/chunks/6781.js +1 -1
  274. package/.next/server/chunks/6793.js +1 -1
  275. package/.next/server/chunks/7491.js +3 -0
  276. package/.next/server/chunks/7685.js +1 -1
  277. package/.next/server/chunks/7905.js +1 -1
  278. package/.next/server/chunks/8581.js +2 -2
  279. package/.next/server/chunks/8583.js +1 -1
  280. package/.next/server/chunks/8673.js +6 -6
  281. package/.next/server/chunks/8728.js +2 -2
  282. package/.next/server/chunks/8791.js +1 -1
  283. package/.next/server/chunks/8800.js +4 -3
  284. package/.next/server/chunks/8918.js +5 -5
  285. package/.next/server/chunks/9130.js +3 -3
  286. package/.next/server/chunks/{8052.js → 9353.js} +4 -2
  287. package/.next/server/chunks/9390.js +3 -0
  288. package/.next/server/chunks/9627.js +4 -4
  289. package/.next/server/chunks/964.js +1 -1
  290. package/.next/server/chunks/967.js +1 -0
  291. package/.next/server/chunks/9731.js +3 -3
  292. package/.next/server/chunks/9882.js +3 -3
  293. package/.next/server/middleware-manifest.json +5 -5
  294. package/.next/server/pages/500.html +1 -1
  295. package/.next/server/server-reference-manifest.json +1 -1
  296. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  297. package/.next/static/chunks/{2407-21fbf12d753b8d4d.js → 2407-940df9b11fadafc6.js} +1 -1
  298. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  299. package/.next/static/chunks/5449-6cb80bab2bd06b79.js +1 -0
  300. package/.next/static/chunks/7705-1f58d4c03d991fcf.js +1 -0
  301. package/.next/static/chunks/8165-3525fb42f1b4976e.js +1 -0
  302. package/.next/static/chunks/app/{layout-8ff4c7c08ef1f621.js → layout-057c850cd0df978e.js} +1 -1
  303. package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +1 -0
  304. package/.next/static/chunks/app/skills/[skillId]/page-74aac15286504ef4.js +1 -0
  305. package/.next/static/chunks/app/skills/page-182e16168b2fc098.js +1 -0
  306. package/.next/static/chunks/app/worktrees/[id]/page-eab0bf7564d3f9e2.js +1 -0
  307. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  308. package/.next/trace +13 -13
  309. package/README.md +3 -3
  310. package/dist/cli/commands/ask.d.ts.map +1 -1
  311. package/dist/cli/commands/ask.js +23 -149
  312. package/dist/cli/commands/reply.d.ts +40 -0
  313. package/dist/cli/commands/reply.d.ts.map +1 -0
  314. package/dist/cli/commands/reply.js +133 -0
  315. package/dist/cli/commands/verify.d.ts.map +1 -1
  316. package/dist/cli/commands/verify.js +9 -0
  317. package/dist/cli/commands/wait.d.ts +5 -0
  318. package/dist/cli/commands/wait.d.ts.map +1 -1
  319. package/dist/cli/commands/wait.js +10 -1
  320. package/dist/cli/docs/agent-operations.d.ts +2 -2
  321. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  322. package/dist/cli/docs/agent-operations.js +13 -0
  323. package/dist/cli/program.d.ts.map +1 -1
  324. package/dist/cli/program.js +4 -0
  325. package/dist/cli/types/index.d.ts +2 -0
  326. package/dist/cli/types/index.d.ts.map +1 -1
  327. package/dist/cli/utils/reply-ledger.d.ts +95 -0
  328. package/dist/cli/utils/reply-ledger.d.ts.map +1 -0
  329. package/dist/cli/utils/reply-ledger.js +187 -0
  330. package/dist/lib/cli-tools/copilot-executable.d.ts +9 -0
  331. package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -1
  332. package/dist/lib/cli-tools/copilot-executable.js +21 -5
  333. package/dist/lib/cli-tools/opencode-executable.d.ts +103 -0
  334. package/dist/lib/cli-tools/opencode-executable.d.ts.map +1 -0
  335. package/dist/lib/cli-tools/opencode-executable.js +179 -0
  336. package/dist/lib/cli-tools/types.d.ts +1 -1
  337. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  338. package/dist/lib/cli-tools/types.js +5 -1
  339. package/dist/lib/detection/tools/verified-against.d.ts +15 -0
  340. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  341. package/dist/lib/detection/tools/verified-against.js +17 -1
  342. package/dist/lib/detection/version-probes.d.ts.map +1 -1
  343. package/dist/lib/detection/version-probes.js +14 -1
  344. package/dist/lib/session/tmux-session-surface.d.ts.map +1 -1
  345. package/dist/lib/session/tmux-session-surface.js +1 -1
  346. package/dist/server/locales/en/worktree.json +44 -14
  347. package/dist/server/locales/ja/worktree.json +44 -14
  348. package/dist/server/server.js +23 -0
  349. package/dist/server/src/config/cli-tool-timing-config.js +19 -1
  350. package/dist/server/src/config/detection-evidence-config.js +3 -0
  351. package/dist/server/src/config/schedule-config.js +55 -1
  352. package/dist/server/src/lib/auto-yes-poller.js +47 -4
  353. package/dist/server/src/lib/cli-tools/agent-mode-spec.js +54 -2
  354. package/dist/server/src/lib/cli-tools/base.js +6 -2
  355. package/dist/server/src/lib/cli-tools/command-code.js +55 -1
  356. package/dist/server/src/lib/cli-tools/composer-spec.js +10 -0
  357. package/dist/server/src/lib/cli-tools/copilot-executable.js +21 -5
  358. package/dist/server/src/lib/cli-tools/graceful-exit.js +15 -1
  359. package/dist/server/src/lib/cli-tools/index.js +3 -1
  360. package/dist/server/src/lib/cli-tools/install-hints.js +9 -3
  361. package/dist/server/src/lib/cli-tools/liveness-spec.js +19 -0
  362. package/dist/server/src/lib/cli-tools/manager.js +2 -0
  363. package/dist/server/src/lib/cli-tools/opencode-executable.js +179 -0
  364. package/dist/server/src/lib/cli-tools/opencode-v2.js +369 -0
  365. package/dist/server/src/lib/cli-tools/opencode.js +29 -5
  366. package/dist/server/src/lib/cli-tools/types.js +5 -1
  367. package/dist/server/src/lib/cmate-cli-tool-parser.js +65 -7
  368. package/dist/server/src/lib/cmate-parser.js +12 -0
  369. package/dist/server/src/lib/cmate-validator.js +13 -1
  370. package/dist/server/src/lib/db/worktree-db.js +1 -1
  371. package/dist/server/src/lib/detection/cli-patterns.js +78 -2
  372. package/dist/server/src/lib/detection/model-info-extractor.js +79 -7
  373. package/dist/server/src/lib/detection/status-detector.js +10 -1
  374. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +2 -1
  375. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +253 -0
  376. package/dist/server/src/lib/detection/tools/opencode-v2/dialog-title.js +48 -0
  377. package/dist/server/src/lib/detection/tools/registry.js +2 -0
  378. package/dist/server/src/lib/detection/tools/run-detection.js +9 -0
  379. package/dist/server/src/lib/detection/tools/verified-against.js +17 -1
  380. package/dist/server/src/lib/detection/upstream-faults.js +8 -0
  381. package/dist/server/src/lib/detection/version-probes.js +14 -1
  382. package/dist/server/src/lib/hooks/agent-session-telemetry.js +36 -1
  383. package/dist/server/src/lib/hooks/sources/opencode/log-diagnosis.js +105 -0
  384. package/dist/server/src/lib/hooks/sources/opencode/source.js +7 -1
  385. package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +422 -0
  386. package/dist/server/src/lib/hooks/sources/opencode-v2/decision-labels.js +24 -0
  387. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +421 -0
  388. package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +271 -0
  389. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +165 -0
  390. package/dist/server/src/lib/hooks/sources/opencode-v2/payloads.js +351 -0
  391. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +230 -0
  392. package/dist/server/src/lib/hooks/sources/opencode-v2/reattach.js +149 -0
  393. package/dist/server/src/lib/hooks/sources/opencode-v2/runtime.js +180 -0
  394. package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +182 -0
  395. package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +295 -0
  396. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +455 -0
  397. package/dist/server/src/lib/hooks/sources/opencode-v2/tool-id.js +18 -0
  398. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +214 -0
  399. package/dist/server/src/lib/hooks/sources/registry.js +2 -0
  400. package/dist/server/src/lib/hooks/structured-decision-response.js +14 -5
  401. package/dist/server/src/lib/job-executor.js +2 -1
  402. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +15 -1
  403. package/dist/server/src/lib/polling/structured-history-gate.js +19 -5
  404. package/dist/server/src/lib/relay/relay-delivery.js +4 -1
  405. package/dist/server/src/lib/session/agent-event-state.js +24 -0
  406. package/dist/server/src/lib/session/claude-executor.js +184 -10
  407. package/dist/server/src/lib/session/current-output-builder.js +27 -3
  408. package/dist/server/src/lib/session/send-user-message.js +4 -0
  409. package/dist/server/src/lib/session/structured-prompt.js +54 -0
  410. package/dist/server/src/lib/session/tmux-session-surface.js +1 -1
  411. package/dist/server/src/lib/skills/compatibility-matrix.js +65 -0
  412. package/dist/server/src/lib/tmux/tmux.js +48 -2
  413. package/dist/server/src/lib/verification/env-clean-gate.js +228 -9
  414. package/dist/server/src/lib/verification/env-snapshot.js +65 -1
  415. package/dist/server/src/types/cli-tool-contracts.js +10 -2
  416. package/dist/types/cli-tool-contracts.d.ts +16 -5
  417. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  418. package/dist/types/cli-tool-contracts.js +10 -2
  419. package/package.json +2 -1
  420. package/release-notes/0.42.2.json +20 -0
  421. package/release-notes/0.43.0.json +130 -0
  422. package/scripts/hooks/cmate-agent-event.sh +14 -0
  423. package/scripts/opencode-v2/launch.sh +226 -0
  424. package/.next/server/chunks/4443.js +0 -3
  425. package/.next/server/chunks/5164.js +0 -1
  426. package/.next/server/chunks/650.js +0 -1
  427. package/.next/static/chunks/5449-550bd273dccc3ae4.js +0 -1
  428. package/.next/static/chunks/7705-2a2936551b0cf9a3.js +0 -1
  429. package/.next/static/chunks/8165-934ee7ff3b4ddfd4.js +0 -1
  430. package/.next/static/chunks/app/review/page-30616daa1dc595c2.js +0 -1
  431. package/.next/static/chunks/app/skills/[skillId]/page-ab7e432b69fccb3b.js +0 -1
  432. package/.next/static/chunks/app/skills/page-56b4fa11223e0cbd.js +0 -1
  433. package/.next/static/chunks/app/worktrees/[id]/page-3c946bd2875391fd.js +0 -1
  434. /package/.next/static/{3M_S0B7dhEDdVE2XSJz1Y → BVkBYdceLRvMROqQIqeBx}/_buildManifest.js +0 -0
  435. /package/.next/static/{3M_S0B7dhEDdVE2XSJz1Y → BVkBYdceLRvMROqQIqeBx}/_ssgManifest.js +0 -0
@@ -23,6 +23,7 @@
23
23
  */
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.ENV_SNAPSHOT_RETENTION_MS = exports.ENV_SNAPSHOT_DIR_NAME = exports.VOLATILE_ENTRY_PATTERNS = exports.MCBD_SESSION_PREFIX = exports.COMMANDMATE_PROCESS_PATTERN = exports.DEFAULT_ENV_PROBE_DEPS = exports.ENV_PROBE_LABELS = exports.ENV_PROBE_IDS = exports.ENV_SNAPSHOT_VERSION = void 0;
26
+ exports.isCommandMateCommandLine = isCommandMateCommandLine;
26
27
  exports.probeListeners = probeListeners;
27
28
  exports.probeTmuxSessions = probeTmuxSessions;
28
29
  exports.probeHomeEntries = probeHomeEntries;
@@ -109,8 +110,71 @@ exports.DEFAULT_ENV_PROBE_DEPS = {
109
110
  * to "CommandMate 関連" for exactly that reason, so relevance is decided from
110
111
  * the owning process's command line rather than from the port number — a
111
112
  * developer's `commandmate start --port 3179` is as relevant as port 3000.
113
+ *
114
+ * This is only the vocabulary, and a cheap first filter. Matched against the
115
+ * whole command line it also hits a process that merely *mentions* a
116
+ * CommandMate path among its arguments — an editor's language server started
117
+ * with `--workspace_id …_commandmate_issue_2616` was recorded as a CommandMate
118
+ * listener and then read as "killed" when it exited (#2627). The decision is
119
+ * {@link isCommandMateCommandLine}'s, which looks only at the program.
112
120
  */
113
121
  exports.COMMANDMATE_PROCESS_PATTERN = /commandmate|dist\/server\/server\.js|next-server|next (dev|start)|server\.ts/i;
122
+ /**
123
+ * Executables that run a script named by a later argument. CommandMate is
124
+ * never a native binary of its own: every shape it runs as is one of these
125
+ * with a CommandMate script, or a process title set by one of them.
126
+ */
127
+ const SCRIPT_LAUNCHERS = new Set(['node', 'nodejs', 'bun', 'tsx', 'ts-node', 'npx', 'next']);
128
+ /** Executables that are CommandMate by their own name (process title or bin). */
129
+ const COMMANDMATE_EXECUTABLES = /^(commandmate(\.js)?|next-server)$/i;
130
+ /** A script argument that is CommandMate's server or CLI, judged by its path's end. */
131
+ function isCommandMateScript(token) {
132
+ const name = (0, path_1.basename)(token);
133
+ return (/(^|\/)dist\/server\/server\.js$/.test(token) ||
134
+ name === 'server.ts' ||
135
+ /^commandmate(\.js)?$/i.test(name));
136
+ }
137
+ /**
138
+ * Whether a `ps` command line is a CommandMate process (#2627).
139
+ *
140
+ * Judged on the program, never on free-form arguments:
141
+ *
142
+ * - the executable itself (`next-server (v14…)`, a `commandmate` bin run
143
+ * directly) — its basename, so a directory called `commandmate` in the
144
+ * executable's *path* does not count either;
145
+ * - or, when the executable is a script launcher (`node`, `tsx`, `next`, …),
146
+ * its positional arguments matched as whole paths by their end:
147
+ * `…/dist/server/server.js`, `server.ts`, a `commandmate` bin, or `next`
148
+ * followed by `dev` / `start`.
149
+ *
150
+ * Flags are dropped before matching, `--workspace=/x/commandmate` included,
151
+ * and a positional counts only as a whole token: `/x/commandmate-issue-1` is a
152
+ * path that mentions CommandMate, not CommandMate. Any other executable —
153
+ * `language_server_macos_arm`, Chrome, postgres — is not CommandMate whatever
154
+ * its arguments say.
155
+ *
156
+ * Why not `ps -o comm=` (the executable alone): `node dist/server/server.js` is
157
+ * `node` there, indistinguishable from every other node process, so the
158
+ * production server itself would stop being recorded.
159
+ */
160
+ function isCommandMateCommandLine(commandLine) {
161
+ if (!exports.COMMANDMATE_PROCESS_PATTERN.test(commandLine))
162
+ return false;
163
+ const [program, ...rest] = commandLine.trim().split(/\s+/);
164
+ if (!program)
165
+ return false;
166
+ const name = (0, path_1.basename)(program);
167
+ if (COMMANDMATE_EXECUTABLES.test(name))
168
+ return true;
169
+ if (!SCRIPT_LAUNCHERS.has(name.toLowerCase()))
170
+ return false;
171
+ const positionals = [name, ...rest.filter((token) => !token.startsWith('-'))];
172
+ return positionals.some((token, index) => {
173
+ if (index > 0 && isCommandMateScript(token))
174
+ return true;
175
+ return (0, path_1.basename)(token) === 'next' && /^(dev|start)$/.test(positionals[index + 1] ?? '');
176
+ });
177
+ }
114
178
  /** `ps` line: leading pid, then the full command line. */
115
179
  function parseProcessTable(stdout) {
116
180
  const table = new Map();
@@ -213,7 +277,7 @@ async function probeListeners(deps) {
213
277
  const table = parseProcessTable(processes.stdout);
214
278
  const relevant = blocks.filter((block) => {
215
279
  const commandLine = table.get(block.pid);
216
- return commandLine !== undefined && exports.COMMANDMATE_PROCESS_PATTERN.test(commandLine);
280
+ return commandLine !== undefined && isCommandMateCommandLine(commandLine);
217
281
  });
218
282
  if (relevant.length === 0)
219
283
  return ok([]);
@@ -96,11 +96,18 @@ exports.GRACEFUL_EXIT_FAILURE_REASONS = ['graceful_exit_timeout', 'port_orphaned
96
96
  * | `manual` | claude | `⏸ manual mode on` |
97
97
  * | `auto` | claude | `⏵⏵ auto mode on` |
98
98
  * | `accept-edits` | claude / Command Code / agy | `⏵⏵ accept edits on`, `» accept edits on`, `accept-edits ·` |
99
- * | `plan` | all five | `⏸ plan mode on`, `plan mode`, `Plan mode (shift+tab to cycle)`, `plan` |
99
+ * | `plan` | all six | `⏸ plan mode on`, `plan mode`, `Plan mode (shift+tab to cycle)`, `plan`, `┃ Plan · <model>` |
100
100
  * | `autopilot` | copilot | `autopilot` in the hint bar |
101
101
  * | `bypass` | Command Code (NOT in its cycle) | `» permission bypass on` |
102
102
  * | `dont-ask` | Command Code (NOT in its cycle) | `» don't-ask on` |
103
103
  * | `default` | Command Code | `? for shortcuts` (its own row) |
104
+ * | `build` | OpenCode V2 (Issue #3038) | `┃ Build · <model>` under the composer |
105
+ *
106
+ * `build` is OpenCode V2's AGENT, not a permission mode, and it is its own id
107
+ * rather than `default` on purpose: the chip says what the pane says (#2592).
108
+ * OpenCode V2's `shift+tab` toggles `Build` ⇄ `Plan` agents, and the button
109
+ * carries the `opencodeAgentSwitch` note so the "permission mode" wording of
110
+ * its aria label is not the whole story.
104
111
  *
105
112
  * `bypass` and `dont-ask` are declared even though `shift+tab` cannot REACH
106
113
  * them, and that is the point: a user who put Command Code in one of those from
@@ -118,6 +125,7 @@ exports.AGENT_MODE_IDS = [
118
125
  'autopilot',
119
126
  'bypass',
120
127
  'dont-ask',
128
+ 'build',
121
129
  ];
122
130
  /**
123
131
  * The verdict for a frame nothing in {@link AgentModeSpec.indicators} matched.
@@ -146,4 +154,4 @@ function isAgentModeId(value) {
146
154
  * translated (`.eslintrc.json`'s i18n rule, Issue #1271), and because the tool
147
155
  * declaring it has no way to call `useTranslations()`.
148
156
  */
149
- exports.AGENT_MODE_NOTE_IDS = ['codexModelCoupled'];
157
+ exports.AGENT_MODE_NOTE_IDS = ['codexModelCoupled', 'opencodeAgentSwitch'];
@@ -418,11 +418,18 @@ export type ToolLivenessVerdict = {
418
418
  * | `manual` | claude | `⏸ manual mode on` |
419
419
  * | `auto` | claude | `⏵⏵ auto mode on` |
420
420
  * | `accept-edits` | claude / Command Code / agy | `⏵⏵ accept edits on`, `» accept edits on`, `accept-edits ·` |
421
- * | `plan` | all five | `⏸ plan mode on`, `plan mode`, `Plan mode (shift+tab to cycle)`, `plan` |
421
+ * | `plan` | all six | `⏸ plan mode on`, `plan mode`, `Plan mode (shift+tab to cycle)`, `plan`, `┃ Plan · <model>` |
422
422
  * | `autopilot` | copilot | `autopilot` in the hint bar |
423
423
  * | `bypass` | Command Code (NOT in its cycle) | `» permission bypass on` |
424
424
  * | `dont-ask` | Command Code (NOT in its cycle) | `» don't-ask on` |
425
425
  * | `default` | Command Code | `? for shortcuts` (its own row) |
426
+ * | `build` | OpenCode V2 (Issue #3038) | `┃ Build · <model>` under the composer |
427
+ *
428
+ * `build` is OpenCode V2's AGENT, not a permission mode, and it is its own id
429
+ * rather than `default` on purpose: the chip says what the pane says (#2592).
430
+ * OpenCode V2's `shift+tab` toggles `Build` ⇄ `Plan` agents, and the button
431
+ * carries the `opencodeAgentSwitch` note so the "permission mode" wording of
432
+ * its aria label is not the whole story.
426
433
  *
427
434
  * `bypass` and `dont-ask` are declared even though `shift+tab` cannot REACH
428
435
  * them, and that is the point: a user who put Command Code in one of those from
@@ -431,7 +438,7 @@ export type ToolLivenessVerdict = {
431
438
  * 1.53.1, where `? for shortcuts` is drawn in every mode, that fall-through is
432
439
  * a chip that says `default` while the agent bypasses permissions.
433
440
  */
434
- export declare const AGENT_MODE_IDS: readonly ["default", "manual", "accept-edits", "plan", "auto", "autopilot", "bypass", "dont-ask"];
441
+ export declare const AGENT_MODE_IDS: readonly ["default", "manual", "accept-edits", "plan", "auto", "autopilot", "bypass", "dont-ask", "build"];
435
442
  /** One permission mode a supported CLI can be in. */
436
443
  export type AgentModeId = typeof AGENT_MODE_IDS[number];
437
444
  /**
@@ -482,7 +489,7 @@ export interface AgentModeIndicator {
482
489
  * translated (`.eslintrc.json`'s i18n rule, Issue #1271), and because the tool
483
490
  * declaring it has no way to call `useTranslations()`.
484
491
  */
485
- export declare const AGENT_MODE_NOTE_IDS: readonly ["codexModelCoupled"];
492
+ export declare const AGENT_MODE_NOTE_IDS: readonly ["codexModelCoupled", "opencodeAgentSwitch"];
486
493
  /** Which caution one tool's mode button carries, if any. */
487
494
  export type AgentModeNoteId = typeof AGENT_MODE_NOTE_IDS[number];
488
495
  /**
@@ -516,7 +523,7 @@ export type AgentModeNoteId = typeof AGENT_MODE_NOTE_IDS[number];
516
523
  */
517
524
  export interface AgentModeSpec {
518
525
  /**
519
- * The key that advances the cycle — `BTab` for all five declaring tools.
526
+ * The key that advances the cycle — `BTab` for all six declaring tools.
520
527
  *
521
528
  * Declared rather than hard-coded so the invariant above is checkable, and so
522
529
  * a tool that moves its binding changes one line.
@@ -554,10 +561,14 @@ export interface AgentModeSpec {
554
561
  /**
555
562
  * A caution this tool's button must carry, or `null`.
556
563
  *
557
- * codex alone today: its modes are coupled to the model and reasoning effort
564
+ * codex: its modes are coupled to the model and reasoning effort
558
565
  * (`xhigh` ⇄ `medium`, measured 2026-09-16), so one press of a button labelled
559
566
  * "mode" also moves the model tier. Issue #2592 §「設計に効く事実」4 requires
560
567
  * that be visible rather than discovered.
568
+ *
569
+ * OpenCode V2 (Issue #3038): its `shift+tab` switches the AGENT (`Build`,
570
+ * which edits, ⇄ `Plan`, which only reads) rather than a permission mode, so
571
+ * the note says what the button actually switches.
561
572
  */
562
573
  readonly noteId: AgentModeNoteId | null;
563
574
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-tool-contracts.d.ts","sourceRoot":"","sources":["../../src/types/cli-tool-contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-tool-contracts.d.ts","sourceRoot":"","sources":["../../src/types/cli-tool-contracts.ts"],"names":[],"mappings":"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"}
@@ -96,11 +96,18 @@ exports.GRACEFUL_EXIT_FAILURE_REASONS = ['graceful_exit_timeout', 'port_orphaned
96
96
  * | `manual` | claude | `⏸ manual mode on` |
97
97
  * | `auto` | claude | `⏵⏵ auto mode on` |
98
98
  * | `accept-edits` | claude / Command Code / agy | `⏵⏵ accept edits on`, `» accept edits on`, `accept-edits ·` |
99
- * | `plan` | all five | `⏸ plan mode on`, `plan mode`, `Plan mode (shift+tab to cycle)`, `plan` |
99
+ * | `plan` | all six | `⏸ plan mode on`, `plan mode`, `Plan mode (shift+tab to cycle)`, `plan`, `┃ Plan · <model>` |
100
100
  * | `autopilot` | copilot | `autopilot` in the hint bar |
101
101
  * | `bypass` | Command Code (NOT in its cycle) | `» permission bypass on` |
102
102
  * | `dont-ask` | Command Code (NOT in its cycle) | `» don't-ask on` |
103
103
  * | `default` | Command Code | `? for shortcuts` (its own row) |
104
+ * | `build` | OpenCode V2 (Issue #3038) | `┃ Build · <model>` under the composer |
105
+ *
106
+ * `build` is OpenCode V2's AGENT, not a permission mode, and it is its own id
107
+ * rather than `default` on purpose: the chip says what the pane says (#2592).
108
+ * OpenCode V2's `shift+tab` toggles `Build` ⇄ `Plan` agents, and the button
109
+ * carries the `opencodeAgentSwitch` note so the "permission mode" wording of
110
+ * its aria label is not the whole story.
104
111
  *
105
112
  * `bypass` and `dont-ask` are declared even though `shift+tab` cannot REACH
106
113
  * them, and that is the point: a user who put Command Code in one of those from
@@ -118,6 +125,7 @@ exports.AGENT_MODE_IDS = [
118
125
  'autopilot',
119
126
  'bypass',
120
127
  'dont-ask',
128
+ 'build',
121
129
  ];
122
130
  /**
123
131
  * The verdict for a frame nothing in {@link AgentModeSpec.indicators} matched.
@@ -146,4 +154,4 @@ function isAgentModeId(value) {
146
154
  * translated (`.eslintrc.json`'s i18n rule, Issue #1271), and because the tool
147
155
  * declaring it has no way to call `useTranslations()`.
148
156
  */
149
- exports.AGENT_MODE_NOTE_IDS = ['codexModelCoupled'];
157
+ exports.AGENT_MODE_NOTE_IDS = ['codexModelCoupled', 'opencodeAgentSwitch'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.42.1",
3
+ "version": "0.43.0",
4
4
  "description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -33,6 +33,7 @@
33
33
  "!.next/cache",
34
34
  "public/",
35
35
  "scripts/hooks/",
36
+ "scripts/opencode-v2/",
36
37
  ".env.example",
37
38
  "release-notes/"
38
39
  ],
@@ -0,0 +1,20 @@
1
+ {
2
+ "version": "0.42.2",
3
+ "date": "2026-09-28",
4
+ "highlight": {
5
+ "ja": "ブランチごとに選んだ既定のエージェントが、同期のたびに Claude に戻ってしまう問題を直しました。",
6
+ "en": "Fixed the default agent chosen for a branch switching back to Claude every time branches were synced."
7
+ },
8
+ "added": [],
9
+ "improved": [],
10
+ "fixed": [
11
+ {
12
+ "ja": "ブランチごとに選んだ既定のエージェントが、同期のたびに Claude に戻ってしまう問題を直しました。",
13
+ "en": "Fixed the default agent chosen for a branch switching back to Claude every time branches were synced."
14
+ },
15
+ {
16
+ "ja": "commandmate verify でタスクを指定できるようになり、完了済みのタスクを検証し直せるようになりました。",
17
+ "en": "commandmate verify can now take a task, so a finished task can be verified again."
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "version": "0.43.0",
3
+ "date": "2026-09-30",
4
+ "highlight": {
5
+ "ja": "OpenCode V2 をエージェントとして使えるようになりました。起動・状態表示・承認や質問への応答・スケジュールまで、これまでの OpenCode と同じ場所で扱えます。",
6
+ "en": "OpenCode V2 is now available as an agent. Launching, status, answering approvals and questions, and schedules all work in the same places as the existing OpenCode."
7
+ },
8
+ "added": [
9
+ {
10
+ "ja": "OpenCode V2 をエージェントとして選べるようになり、起動・終了と状態の表示ができるようになりました。",
11
+ "en": "You can now choose OpenCode V2 as an agent, start and stop it, and see its status."
12
+ },
13
+ {
14
+ "ja": "OpenCode V2 の承認と質問に、画面・スマホ・CLI・Auto-Yes から答えられるようになりました。",
15
+ "en": "You can now answer OpenCode V2 approvals and questions from the screen, your phone, the CLI, or Auto-Yes."
16
+ },
17
+ {
18
+ "ja": "OpenCode V2 の入力欄で「/」を打つと、スラッシュコマンドの候補が出るようになりました。",
19
+ "en": "Typing / in the OpenCode V2 input now shows slash command suggestions."
20
+ },
21
+ {
22
+ "ja": "OpenCode V2 で、実際に返答したモデル名が画面と capture に出るようになりました。",
23
+ "en": "OpenCode V2 now shows the model that actually replied, on screen and in capture."
24
+ },
25
+ {
26
+ "ja": "OpenCode V2 でも、エージェント切り替えやコマンドパレットのクイックキーが使えるようになりました。",
27
+ "en": "Quick keys such as agent switching and the command palette now work with OpenCode V2."
28
+ },
29
+ {
30
+ "ja": "OpenCode V2 のトークン・費用・コンテキストの使用量が、これまでの OpenCode と同じ場所に出るようになりました。",
31
+ "en": "OpenCode V2 token, cost, and context usage now appear in the same place as for the existing OpenCode."
32
+ },
33
+ {
34
+ "ja": "スケジュールで OpenCode V2 を指定でき、モデルやエージェントなどの実行オプションも渡せるようになりました。",
35
+ "en": "Schedules can now run OpenCode V2 and pass run options such as the model and agent."
36
+ },
37
+ {
38
+ "ja": "OpenCode V2 のダイアログカードに、モデルを切り替えるキーが出るようになりました。",
39
+ "en": "OpenCode V2 dialog cards now show the keys for switching models."
40
+ },
41
+ {
42
+ "ja": "日次確認の対象に OpenCode V2 が加わりました。",
43
+ "en": "The daily health check now covers OpenCode V2."
44
+ },
45
+ {
46
+ "ja": "新しい commandmate reply コマンドで、セッションの最新の返答を読めるようになりました。",
47
+ "en": "The new commandmate reply command reads a session's latest reply."
48
+ }
49
+ ],
50
+ "improved": [
51
+ {
52
+ "ja": "OpenCode V2 の Build と Plan の切り替えが入力欄の横のボタンになり、今のエージェントが表示されるようになりました。",
53
+ "en": "Switching between Build and Plan in OpenCode V2 is now a button next to the input, and it shows the current agent."
54
+ },
55
+ {
56
+ "ja": "Skill の互換表で、OpenCode V2 は Skill を足したあとに開始し直さなくてよいことを示すようにしました。",
57
+ "en": "The Skill compatibility table now shows that OpenCode V2 does not need a restart after a Skill is added."
58
+ },
59
+ {
60
+ "ja": "commandmate ask が、会話が長すぎてモデルの上限を超えたときに、完了ではなく失敗として返すようになりました。",
61
+ "en": "commandmate ask now reports a failure, not a completed turn, when the conversation is over the model's context limit."
62
+ },
63
+ {
64
+ "ja": "起動したばかりの Command Code にすぐ送ったとき、「起動中」として返すようになりました。",
65
+ "en": "Sending to a Command Code session that has only just started is now reported as still starting."
66
+ }
67
+ ],
68
+ "fixed": [
69
+ {
70
+ "ja": "新しいセッションを起動した直後の送信が、約 1 分待たされて失敗することがある問題を直しました。",
71
+ "en": "Fixed the first send to a new session sometimes waiting about a minute and then failing."
72
+ },
73
+ {
74
+ "ja": "起動直後の Claude で、使っているモデル名が表示されない問題を直しました。",
75
+ "en": "Fixed the model name not showing for a Claude session that had just started."
76
+ },
77
+ {
78
+ "ja": "Auto-Yes が飛ばした画面の警告が、同じ画面の間に何度も出る問題を直しました。",
79
+ "en": "Fixed the warning for a screen Auto-Yes skipped repeating while the same screen stayed up."
80
+ },
81
+ {
82
+ "ja": "OpenCode V2 の返答が履歴に記録されない問題を直しました。",
83
+ "en": "Fixed OpenCode V2 replies not being recorded in History."
84
+ },
85
+ {
86
+ "ja": "OpenCode V2 の返答に番号付きのリストがあると、応答待ちと誤って扱われ、Auto-Yes が番号を送ってしまう問題を直しました。",
87
+ "en": "Fixed numbered lists in OpenCode V2 replies being treated as a question, which made Auto-Yes send a number."
88
+ },
89
+ {
90
+ "ja": "OpenCode V2 でダイアログが開いたまま送信すると、本文が消える問題を直しました。",
91
+ "en": "Fixed the message being lost when sending while an OpenCode V2 dialog was open."
92
+ },
93
+ {
94
+ "ja": "OpenCode V2 で、引数なしのスラッシュコマンドが実行されない問題を直しました。",
95
+ "en": "Fixed OpenCode V2 slash commands without arguments not running."
96
+ },
97
+ {
98
+ "ja": "OpenCode V2 の承認の文言や、保留中の承認への Auto-Yes の応答を直しました。",
99
+ "en": "Fixed OpenCode V2 approval wording and Auto-Yes answers to pending approvals."
100
+ },
101
+ {
102
+ "ja": "OpenCode V2 の承認や質問を待つ間の注意文が、チャットに記録されてしまう問題を直しました。",
103
+ "en": "Fixed the notice shown while OpenCode V2 waits on an approval or question being recorded in the chat."
104
+ },
105
+ {
106
+ "ja": "OpenCode V2 を起動すると、プロジェクトの package.json が書き換えられる問題を直しました。",
107
+ "en": "Fixed starting OpenCode V2 writing to the project's package.json."
108
+ },
109
+ {
110
+ "ja": "OpenCode V2 を opencode という名前で入れている環境でも、正しく起動するようにしました。",
111
+ "en": "OpenCode V2 now starts correctly when it is installed under the name opencode."
112
+ },
113
+ {
114
+ "ja": "OpenCode と OpenCode V2 を取り違えることがある問題を直しました。",
115
+ "en": "Fixed OpenCode and OpenCode V2 sometimes being mixed up."
116
+ },
117
+ {
118
+ "ja": "OpenCode V2 のスケジュールが worktree で動くようにし、画面から作れてしまう不正なスケジュールを防ぎました。",
119
+ "en": "OpenCode V2 schedules now run in the worktree, and invalid schedules can no longer be created from the screen."
120
+ },
121
+ {
122
+ "ja": "日次確認で、codex の更新ダイアログや設定ファイル、OpenCode のモデル選択と入力履歴の扱いに関する問題を直しました。",
123
+ "en": "Fixed daily health check issues with the codex update dialog and config file, and with OpenCode model selection and input history."
124
+ },
125
+ {
126
+ "ja": "commandmate verify が、別の作業で一時的にできたファイルを自分の違反として数える問題を直しました。",
127
+ "en": "Fixed commandmate verify counting temporary files from other work as its own violations."
128
+ }
129
+ ]
130
+ }
@@ -265,6 +265,20 @@ fi
265
265
  if [ -n "$DETAIL" ]; then
266
266
  BODY="$BODY,\"detail\":\"$(json_escape "$DETAIL")\""
267
267
  fi
268
+ # Issue #2955. Claude names its model on `SessionStart` (`"model":
269
+ # "claude-sonnet-5-5"`, measured on 2.1.284), and `SessionStart` is the one
270
+ # Claude event that has to come through this script (http hooks are not
271
+ # supported there). Before #2955 the value was dropped here, so the server's
272
+ # model latch was never written for any claude session. Forwarded on
273
+ # session_start only — other tools' payloads keep the body they had — and
274
+ # omitted when the payload has none (`claude -p`, the `SessionStart` of
275
+ # `/clear`), where an empty value would read as "the model is unknown".
276
+ if [ "$EVENT" = "session_start" ] && [ -n "$HOOK_JSON" ]; then
277
+ MODEL="$(json_string_field "$HOOK_JSON" 'model')"
278
+ if [ -n "$MODEL" ]; then
279
+ BODY="$BODY,\"model\":\"$(json_escape "$MODEL")\""
280
+ fi
281
+ fi
268
282
  BODY="$BODY}"
269
283
 
270
284
  # Token via --header rather than the command line of a subprocess: argv is world
@@ -0,0 +1,226 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # launch.sh — run an OpenCode V2 (`opencode2`) server and its TUI in ONE tmux
4
+ # pane, so the two live and die together (Issue #2934, Epic #2370 Phase 1).
5
+ #
6
+ # OpenCode 2's TUI does not host the API the way v1's does: the API is a
7
+ # separate `opencode2 serve`, and the TUI attaches to it with `--server`. If
8
+ # CommandMate started the server as a child of its own process, a CommandMate
9
+ # restart would take every agent's server down with it; if the server were
10
+ # started in the pane without a guard, closing the pane would leave the port
11
+ # bound (the #1905 failure, which v1 only avoided because its TUI WAS the
12
+ # server). So this wrapper owns both processes and a trap stops the server on
13
+ # every way out: the TUI exiting, `tmux kill-session` (SIGHUP), Ctrl-C (SIGINT)
14
+ # and SIGTERM.
15
+ #
16
+ # Usage:
17
+ # launch.sh --port <N> --password-file <path> --directory <path>
18
+ # [--executable <path>]
19
+ #
20
+ # The executable
21
+ # The OpenCode V2 binary to run for both the server and the TUI. CommandMate
22
+ # passes the absolute path it identified as OpenCode V2 by `--version`
23
+ # (Issue #2952), which may be named `opencode` as well as `opencode2`, and
24
+ # which the pane's own PATH might resolve differently. Omitted, it is
25
+ # `opencode2` looked up on PATH.
26
+ #
27
+ # The password
28
+ # CommandMate generates one per launch and writes it to a 0600 file under
29
+ # ~/.commandmate/opencode-v2/. It is read here and placed in the environment
30
+ # variable OPENCODE_SERVER_PASSWORD ONLY: it is never echoed, never passed as
31
+ # an argument (argv is readable by `ps`), and the readiness probe hands it to
32
+ # curl through `--config -` on stdin for the same reason. Accepted, and stated
33
+ # so nobody has to rediscover it: the serve and TUI processes carry it in their
34
+ # environment, and so does any shell tool the agent runs. The server listens on
35
+ # 127.0.0.1 only, so what the password protects stays inside the same OS user.
36
+ #
37
+ # Environment (tests only):
38
+ # CM_OPENCODE_V2_READY_TIMEOUT seconds to wait for the server (default 15)
39
+ #
40
+ # Exit codes: the TUI's own status when it exits; 64 usage error; 66 password
41
+ # file unreadable or empty; 69 the server did not answer in time; 129/130/143
42
+ # when stopped by SIGHUP / SIGINT / SIGTERM.
43
+ #
44
+ # Written for bash 3.2 (the macOS system bash): no associative arrays, no
45
+ # `mapfile`, no `${var^^}`, no `wait -n`.
46
+
47
+ set -u
48
+
49
+ PROGRAM_NAME="launch.sh"
50
+ READY_TIMEOUT_SECONDS="${CM_OPENCODE_V2_READY_TIMEOUT:-15}"
51
+ STOP_GRACE_TICKS=30 # x 0.1 s before SIGKILL
52
+
53
+ port=""
54
+ password_file=""
55
+ directory=""
56
+ executable=""
57
+
58
+ usage() {
59
+ echo "Usage: ${PROGRAM_NAME} --port <N> --password-file <path> --directory <path> [--executable <path>]" >&2
60
+ }
61
+
62
+ die() {
63
+ local code="$1"
64
+ shift
65
+ echo "${PROGRAM_NAME}: $*" >&2
66
+ exit "$code"
67
+ }
68
+
69
+ while [ $# -gt 0 ]; do
70
+ case "$1" in
71
+ --port)
72
+ [ $# -ge 2 ] || { usage; exit 64; }
73
+ port="$2"
74
+ shift 2
75
+ ;;
76
+ --password-file)
77
+ [ $# -ge 2 ] || { usage; exit 64; }
78
+ password_file="$2"
79
+ shift 2
80
+ ;;
81
+ --directory)
82
+ [ $# -ge 2 ] || { usage; exit 64; }
83
+ directory="$2"
84
+ shift 2
85
+ ;;
86
+ --executable)
87
+ [ $# -ge 2 ] || { usage; exit 64; }
88
+ executable="$2"
89
+ [ -n "$executable" ] || { usage; exit 64; }
90
+ shift 2
91
+ ;;
92
+ -h | --help)
93
+ usage
94
+ exit 0
95
+ ;;
96
+ *)
97
+ usage
98
+ die 64 "unknown argument: $1"
99
+ ;;
100
+ esac
101
+ done
102
+
103
+ if [ -z "$port" ] || [ -z "$password_file" ] || [ -z "$directory" ]; then
104
+ usage
105
+ exit 64
106
+ fi
107
+ case "$port" in
108
+ '' | *[!0-9]*) die 64 "--port must be a number: ${port}" ;;
109
+ esac
110
+ if [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
111
+ die 64 "--port out of range: ${port}"
112
+ fi
113
+ case "$READY_TIMEOUT_SECONDS" in
114
+ '' | *[!0-9]*) READY_TIMEOUT_SECONDS=15 ;;
115
+ esac
116
+ [ -d "$directory" ] || die 64 "--directory is not a directory: ${directory}"
117
+ if [ -n "$executable" ]; then
118
+ { [ -f "$executable" ] && [ -x "$executable" ]; } ||
119
+ die 64 "--executable is not an executable file: ${executable}"
120
+ else
121
+ executable="opencode2"
122
+ fi
123
+ [ -r "$password_file" ] || die 66 "password file is not readable: ${password_file}"
124
+
125
+ # `read` returns non-zero on a file without a trailing newline even though it
126
+ # filled the variable, so success is judged by the value, not the status.
127
+ OPENCODE_SERVER_PASSWORD=""
128
+ IFS= read -r OPENCODE_SERVER_PASSWORD <"$password_file" || true
129
+ [ -n "$OPENCODE_SERVER_PASSWORD" ] || die 66 "password file is empty: ${password_file}"
130
+ export OPENCODE_SERVER_PASSWORD
131
+
132
+ # Keep the user's project untouched (Issue #2957). On start the TUI checks for
133
+ # its own update by running `npm`/`pnpm`/`yarn`/`bun list -g` in the directory
134
+ # it was started from; where `pnpm`/`yarn` are corepack shims, corepack then
135
+ # writes a "packageManager" field into the nearest package.json (auto-pin).
136
+ # Measured with opencode2 v2.0.18: OPENCODE_DISABLE_AUTOUPDATE=1 stops those
137
+ # spawns altogether, and COREPACK_ENABLE_AUTO_PIN=0 keeps corepack from writing
138
+ # should any package manager run anyway. CommandMate reports updates itself.
139
+ export OPENCODE_DISABLE_AUTOUPDATE=1
140
+ export COREPACK_ENABLE_AUTO_PIN=0
141
+
142
+ server_url="http://127.0.0.1:${port}"
143
+ serve_pid=""
144
+ tui_pid=""
145
+
146
+ # Stop one child: SIGTERM, a short grace period, then SIGKILL, then reap it so
147
+ # the port is released before this script's own exit is observable.
148
+ # shellcheck disable=SC2329 # invoked from the EXIT trap via cleanup
149
+ stop_child() {
150
+ local pid="$1"
151
+ local ticks=0
152
+ [ -n "$pid" ] || return 0
153
+ kill -TERM "$pid" 2>/dev/null || true
154
+ while kill -0 "$pid" 2>/dev/null; do
155
+ if [ "$ticks" -ge "$STOP_GRACE_TICKS" ]; then
156
+ kill -KILL "$pid" 2>/dev/null || true
157
+ break
158
+ fi
159
+ sleep 0.1
160
+ ticks=$((ticks + 1))
161
+ done
162
+ wait "$pid" 2>/dev/null || true
163
+ }
164
+
165
+ # shellcheck disable=SC2329 # invoked by the EXIT trap
166
+ cleanup() {
167
+ local tui="$tui_pid"
168
+ local serve="$serve_pid"
169
+ tui_pid=""
170
+ serve_pid=""
171
+ stop_child "$tui"
172
+ stop_child "$serve"
173
+ }
174
+
175
+ trap cleanup EXIT
176
+ # Each signal becomes an ordinary exit, which runs the EXIT trap above exactly
177
+ # once. The TUI is waited on with `wait` (below) rather than run as a
178
+ # foreground command precisely so these fire immediately: bash defers a
179
+ # trapped signal until a foreground child returns, and a TUI that ignores the
180
+ # hangup would otherwise keep the server alive forever.
181
+ trap 'exit 129' HUP
182
+ trap 'exit 130' INT
183
+ trap 'exit 143' TERM
184
+
185
+ # The server's own output would only be painted over by the TUI's alternate
186
+ # screen, and with OPENCODE_SERVER_PASSWORD set it prints no secret anyway.
187
+ "$executable" serve --hostname 127.0.0.1 --port "$port" </dev/null >/dev/null 2>&1 &
188
+ serve_pid=$!
189
+
190
+ # Ready means `GET /openapi.json` answered 200 with our credentials. The
191
+ # credentials go to curl on stdin (`--config -`), never on its command line.
192
+ probe_ready() {
193
+ local code
194
+ code="$(printf 'user = "opencode:%s"\n' "$OPENCODE_SERVER_PASSWORD" |
195
+ curl --config - --silent --output /dev/null --write-out '%{http_code}' \
196
+ --max-time 1 "${server_url}/openapi.json" 2>/dev/null)" || true
197
+ [ "$code" = "200" ]
198
+ }
199
+
200
+ ready=0
201
+ deadline=$((SECONDS + READY_TIMEOUT_SECONDS))
202
+ while [ "$SECONDS" -lt "$deadline" ]; do
203
+ if ! kill -0 "$serve_pid" 2>/dev/null; then
204
+ die 69 "${executable} serve exited before answering on ${server_url}"
205
+ fi
206
+ if probe_ready; then
207
+ ready=1
208
+ break
209
+ fi
210
+ sleep 0.25
211
+ done
212
+ [ "$ready" -eq 1 ] || die 69 "${executable} serve did not answer on ${server_url} within ${READY_TIMEOUT_SECONDS}s"
213
+
214
+ # Asynchronous commands in a non-interactive shell get /dev/null as stdin
215
+ # unless they are given an explicit redirection, so the terminal is handed over
216
+ # on fd 3. The TUI still shares this script's process group, which is the
217
+ # pane's foreground group, so it keeps reading the terminal.
218
+ exec 3<&0
219
+ "$executable" --server "$server_url" "$directory" <&3 3<&- &
220
+ tui_pid=$!
221
+ exec 3<&-
222
+
223
+ status=0
224
+ wait "$tui_pid" || status=$?
225
+ tui_pid=""
226
+ exit "$status"