commandmate 0.43.0 → 0.44.1

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 (531) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +357 -361
  3. package/.next/app-path-routes-manifest.json +33 -33
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route.js.nft.json +1 -1
  12. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update/route.js +2 -2
  15. package/.next/server/app/api/app/update/route.js.nft.json +1 -1
  16. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/app/update-check/route.js +1 -1
  18. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
  19. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/capabilities/route.js +1 -1
  24. package/.next/server/app/api/capabilities/route_client-reference-manifest.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.nft.json +1 -1
  28. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  30. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  32. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  34. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  36. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  38. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  40. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  41. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  43. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  44. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  46. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  47. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  49. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/push/escalation/route.js +1 -1
  52. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  53. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  55. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/push/vapid/route.js +1 -1
  57. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  58. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  60. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  61. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/relays/route.js +1 -1
  63. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  64. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/remote/pair/route.js +2 -2
  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.nft.json +1 -1
  114. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  116. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  118. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  120. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  122. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  124. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  126. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  132. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  135. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -1
  137. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  139. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  141. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  144. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  147. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  149. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  151. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  153. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  156. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js.nft.json +1 -1
  204. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  210. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  213. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +7 -7
  219. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  228. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  235. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  237. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  240. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  243. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  247. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  249. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  252. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  257. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  258. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  261. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  264. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  267. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  270. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  273. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  276. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  279. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  284. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  286. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
  288. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  289. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  291. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  294. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  296. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  298. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  300. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  302. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  304. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  305. package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -1
  306. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  308. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  309. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  311. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  312. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  314. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  316. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  317. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  318. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  319. package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -1
  320. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/api/worktrees/route.js +1 -1
  322. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  323. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  325. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  326. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  327. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  328. package/.next/server/app/page_client-reference-manifest.js +1 -1
  329. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  330. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  331. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  332. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  333. package/.next/server/app/sessions/page.js +1 -1
  334. package/.next/server/app/sessions/page.js.nft.json +1 -1
  335. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  336. package/.next/server/app/skills/[skillId]/page.js +1 -1
  337. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  338. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  339. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  340. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  341. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
  342. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  343. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  344. package/.next/server/app/worktrees/[id]/page.js +9 -9
  345. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  346. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  347. package/.next/server/app/worktrees/[id]/terminal/page.js +1 -1
  348. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  349. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  350. package/.next/server/app-paths-manifest.json +33 -33
  351. package/.next/server/chunks/1068.js +1 -1
  352. package/.next/server/chunks/1501.js +3 -3
  353. package/.next/server/chunks/2119.js +1 -1
  354. package/.next/server/chunks/2283.js +15 -0
  355. package/.next/server/chunks/2328.js +1 -1
  356. package/.next/server/chunks/2404.js +1 -1
  357. package/.next/server/chunks/2445.js +1 -1
  358. package/.next/server/chunks/2816.js +1 -1
  359. package/.next/server/chunks/4207.js +1 -1
  360. package/.next/server/chunks/4802.js +1 -1
  361. package/.next/server/chunks/488.js +1 -0
  362. package/.next/server/chunks/5326.js +1 -1
  363. package/.next/server/chunks/5456.js +1 -1
  364. package/.next/server/chunks/611.js +1 -1
  365. package/.next/server/chunks/6130.js +1 -1
  366. package/.next/server/chunks/6401.js +1 -1
  367. package/.next/server/chunks/6474.js +14 -0
  368. package/.next/server/chunks/650.js +1 -0
  369. package/.next/server/chunks/6781.js +1 -1
  370. package/.next/server/chunks/{5742.js → 6927.js} +1 -1
  371. package/.next/server/chunks/7506.js +1 -1
  372. package/.next/server/chunks/7685.js +1 -1
  373. package/.next/server/chunks/7905.js +1 -1
  374. package/.next/server/chunks/8543.js +1 -1
  375. package/.next/server/chunks/8581.js +2 -2
  376. package/.next/server/chunks/8728.js +2 -2
  377. package/.next/server/chunks/8782.js +1 -0
  378. package/.next/server/chunks/8791.js +1 -1
  379. package/.next/server/chunks/8918.js +105 -3
  380. package/.next/server/chunks/9130.js +1 -1
  381. package/.next/server/chunks/9390.js +1 -1
  382. package/.next/server/chunks/967.js +1 -1
  383. package/.next/server/chunks/9731.js +3 -3
  384. package/.next/server/chunks/9882.js +3 -3
  385. package/.next/server/middleware-build-manifest.js +1 -1
  386. package/.next/server/middleware-manifest.json +5 -5
  387. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  388. package/.next/server/pages/500.html +1 -1
  389. package/.next/server/server-reference-manifest.json +1 -1
  390. package/.next/server/src/middleware.js +2 -2
  391. package/.next/server/src/middleware.js.map +1 -1
  392. package/.next/static/chunks/{1642-767aed8e7c61ef7f.js → 1642-fb2e176aaadbd137.js} +1 -1
  393. package/.next/static/chunks/2053-85a974ddfe7498fe.js +1 -0
  394. package/.next/static/chunks/{2407-940df9b11fadafc6.js → 2407-f1f258d4a1d92620.js} +1 -1
  395. package/.next/static/chunks/{2619-a305ad4810f1393a.js → 2619-04bc32f026a0d946.js} +1 -1
  396. package/.next/static/chunks/344-e1cefd00787060e4.js +1 -0
  397. package/.next/static/chunks/3922.f45dcfc1e7da552a.js +1 -0
  398. package/.next/static/chunks/5521-c358c31f60e5e689.js +1 -0
  399. package/.next/static/chunks/591-308072f285c34787.js +1 -0
  400. package/.next/static/chunks/6654-ac431270fac1a283.js +1 -0
  401. package/.next/static/chunks/{8165-3525fb42f1b4976e.js → 8165-3853772f6ae1299b.js} +1 -1
  402. package/.next/static/chunks/{8566-a6a7c70558927410.js → 8566-aeda747542072ace.js} +1 -1
  403. package/.next/static/chunks/8811-29eaa24237f48558.js +1 -0
  404. package/.next/static/chunks/{9619-22adf5367c4b7080.js → 9619-6c17a271f7f98fbb.js} +1 -1
  405. package/.next/static/chunks/998-2eb5883186abd0bd.js +1 -0
  406. package/.next/static/chunks/app/layout-da66300cc20244ed.js +1 -0
  407. package/.next/static/chunks/app/more/{page-30057cf1e0762ad2.js → page-87c84987b2765213.js} +1 -1
  408. package/.next/static/chunks/app/{page-8483ba400af011f5.js → page-1b820c421db48c2c.js} +1 -1
  409. package/.next/static/chunks/app/review/page-95f749caae382f46.js +1 -0
  410. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +1 -0
  411. package/.next/static/chunks/app/skills/[skillId]/{page-74aac15286504ef4.js → page-9ee7a381636e60cb.js} +1 -1
  412. package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +1 -0
  413. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-c601f3b3ece6557e.js → page-373ea37b16d930c7.js} +1 -1
  414. package/.next/static/chunks/{webpack-49ade0526854dd4e.js → webpack-021f0741f22dd16a.js} +1 -1
  415. package/.next/static/css/38070d879efa1371.css +1 -0
  416. package/.next/trace +13 -13
  417. package/README.md +90 -605
  418. package/dist/cli/commands/capture.d.ts.map +1 -1
  419. package/dist/cli/commands/capture.js +11 -1
  420. package/dist/cli/commands/docs.d.ts.map +1 -1
  421. package/dist/cli/commands/docs.js +5 -0
  422. package/dist/cli/commands/remote.d.ts +34 -1
  423. package/dist/cli/commands/remote.d.ts.map +1 -1
  424. package/dist/cli/commands/remote.js +171 -6
  425. package/dist/cli/commands/respond.d.ts.map +1 -1
  426. package/dist/cli/commands/respond.js +255 -112
  427. package/dist/cli/commands/stop.d.ts.map +1 -1
  428. package/dist/cli/commands/stop.js +53 -1
  429. package/dist/cli/commands/sync.js +3 -3
  430. package/dist/cli/commands/wait.d.ts.map +1 -1
  431. package/dist/cli/commands/wait.js +11 -0
  432. package/dist/cli/docs/setup-guide.d.ts +14 -0
  433. package/dist/cli/docs/setup-guide.d.ts.map +1 -0
  434. package/dist/cli/docs/setup-guide.js +368 -0
  435. package/dist/cli/types/api-responses.d.ts +21 -0
  436. package/dist/cli/types/api-responses.d.ts.map +1 -1
  437. package/dist/cli/types/index.d.ts +2 -0
  438. package/dist/cli/types/index.d.ts.map +1 -1
  439. package/dist/cli/utils/daemon.d.ts +42 -2
  440. package/dist/cli/utils/daemon.d.ts.map +1 -1
  441. package/dist/cli/utils/daemon.js +222 -40
  442. package/dist/cli/utils/docs-reader.d.ts +6 -0
  443. package/dist/cli/utils/docs-reader.d.ts.map +1 -1
  444. package/dist/cli/utils/docs-reader.js +14 -13
  445. package/dist/cli/utils/npm-runner.d.ts +12 -0
  446. package/dist/cli/utils/npm-runner.d.ts.map +1 -1
  447. package/dist/cli/utils/npm-runner.js +36 -0
  448. package/dist/cli/utils/process-inspect.d.ts +55 -0
  449. package/dist/cli/utils/process-inspect.d.ts.map +1 -0
  450. package/dist/cli/utils/process-inspect.js +214 -0
  451. package/dist/cli/utils/remote-pairing.d.ts +68 -0
  452. package/dist/cli/utils/remote-pairing.d.ts.map +1 -0
  453. package/dist/cli/utils/remote-pairing.js +117 -0
  454. package/dist/cli/utils/server-identity.d.ts +50 -0
  455. package/dist/cli/utils/server-identity.d.ts.map +1 -0
  456. package/dist/cli/utils/server-identity.js +118 -0
  457. package/dist/cli/utils/server-ready.d.ts +13 -0
  458. package/dist/cli/utils/server-ready.d.ts.map +1 -1
  459. package/dist/cli/utils/server-ready.js +16 -0
  460. package/dist/lib/detection/status-reason.d.ts +17 -0
  461. package/dist/lib/detection/status-reason.d.ts.map +1 -1
  462. package/dist/lib/detection/status-reason.js +17 -0
  463. package/dist/lib/security/pairing-code.d.ts +2 -1
  464. package/dist/lib/security/pairing-code.d.ts.map +1 -1
  465. package/dist/server/locales/en/worktree.json +41 -7
  466. package/dist/server/locales/ja/worktree.json +41 -7
  467. package/dist/server/src/config/image-extensions.js +1 -0
  468. package/dist/server/src/config/session-starting-config.js +75 -0
  469. package/dist/server/src/lib/auto-yes-poller.js +22 -0
  470. package/dist/server/src/lib/cli-tools/antigravity.js +2 -1
  471. package/dist/server/src/lib/cli-tools/base.js +15 -1
  472. package/dist/server/src/lib/cli-tools/codex.js +3 -2
  473. package/dist/server/src/lib/cli-tools/command-code-plan-review.js +175 -0
  474. package/dist/server/src/lib/cli-tools/command-code.js +30 -4
  475. package/dist/server/src/lib/cli-tools/copilot.js +2 -1
  476. package/dist/server/src/lib/cli-tools/gemini.js +2 -1
  477. package/dist/server/src/lib/cli-tools/liveness-spec.js +27 -9
  478. package/dist/server/src/lib/cli-tools/opencode-v2.js +2 -1
  479. package/dist/server/src/lib/cli-tools/opencode.js +2 -1
  480. package/dist/server/src/lib/cli-tools/vibe-local.js +2 -1
  481. package/dist/server/src/lib/detection/cli-patterns.js +94 -1
  482. package/dist/server/src/lib/detection/status-reason.js +17 -0
  483. package/dist/server/src/lib/detection/tool-liveness.js +3 -1
  484. package/dist/server/src/lib/detection/tools/codex/detect.js +26 -0
  485. package/dist/server/src/lib/detection/tools/command-code/plan-review-state.js +75 -0
  486. package/dist/server/src/lib/hooks/sources/claude/transcript.js +33 -1
  487. package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
  488. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -0
  489. package/dist/server/src/lib/session/claude-executor.js +2 -2
  490. package/dist/server/src/lib/session/claude-session.js +138 -16
  491. package/dist/server/src/lib/session/current-output-builder.js +49 -21
  492. package/dist/server/src/lib/session/launch-screen.js +57 -0
  493. package/dist/server/src/lib/session/session-start-error.js +20 -0
  494. package/dist/server/src/lib/session/session-starting-state.js +236 -0
  495. package/dist/server/src/lib/skills/agent-state-paths.js +39 -0
  496. package/dist/server/src/lib/skills/receipt-owned-paths.js +118 -0
  497. package/dist/server/src/lib/tmux/tmux.js +25 -0
  498. package/dist/server/src/lib/verification/env-clean-gate.js +195 -6
  499. package/dist/server/src/lib/verification/gate-runner.js +29 -2
  500. package/dist/server/src/lib/verification/scope-gate.js +58 -4
  501. package/docs/en/architecture.md +722 -0
  502. package/docs/en/user-guide/agents-guide.md +306 -0
  503. package/docs/en/user-guide/cli-setup-guide.md +676 -0
  504. package/docs/en/user-guide/cmate-schedules-guide.md +388 -0
  505. package/docs/en/user-guide/commands-guide.md +467 -0
  506. package/docs/en/user-guide/quick-start.md +231 -0
  507. package/docs/en/user-guide/webapp-guide.md +1020 -0
  508. package/docs/en/user-guide/workflow-examples.md +463 -0
  509. package/package.json +18 -7
  510. package/release-notes/0.44.0.json +82 -0
  511. package/release-notes/0.44.1.json +54 -0
  512. package/.next/server/chunks/1990.js +0 -103
  513. package/.next/server/chunks/3707.js +0 -15
  514. package/.next/server/chunks/6491.js +0 -103
  515. package/.next/server/chunks/7004.js +0 -1
  516. package/.next/server/chunks/8673.js +0 -14
  517. package/.next/static/chunks/2039-117a361f795ddc4b.js +0 -1
  518. package/.next/static/chunks/2053-611dd27d42721b79.js +0 -1
  519. package/.next/static/chunks/344-6f9fc1f38f01a839.js +0 -1
  520. package/.next/static/chunks/3778-56f41fc2cecb8c43.js +0 -1
  521. package/.next/static/chunks/3922.8e79fc89f593280b.js +0 -1
  522. package/.next/static/chunks/5449-6cb80bab2bd06b79.js +0 -1
  523. package/.next/static/chunks/6966-bb854d1145783a64.js +0 -1
  524. package/.next/static/chunks/7705-1f58d4c03d991fcf.js +0 -1
  525. package/.next/static/chunks/app/layout-057c850cd0df978e.js +0 -1
  526. package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +0 -1
  527. package/.next/static/chunks/app/sessions/page-1a8ba152bbcb9efb.js +0 -1
  528. package/.next/static/chunks/app/worktrees/[id]/page-eab0bf7564d3f9e2.js +0 -1
  529. package/.next/static/css/b3f433d52b8ed5c8.css +0 -1
  530. /package/.next/static/{BVkBYdceLRvMROqQIqeBx → 57lOiz8zSEHdw97XIm0af}/_buildManifest.js +0 -0
  531. /package/.next/static/{BVkBYdceLRvMROqQIqeBx → 57lOiz8zSEHdw97XIm0af}/_ssgManifest.js +0 -0
@@ -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_STARTING_WINDOW_MS = 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,7 +51,9 @@ 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");
54
55
  const session_start_error_1 = require("../../lib/session/session-start-error");
56
+ const launch_screen_1 = require("../../lib/session/launch-screen");
55
57
  const logger = (0, logger_1.createLogger)('cli-tools/command-code');
56
58
  /** The executable CommandMate launches. See the module docblock for why not `cmd`. */
57
59
  exports.COMMAND_CODE_COMMAND = 'commandcode';
@@ -144,6 +146,16 @@ function isCommandCodeReady(rawOutput) {
144
146
  return false;
145
147
  return !cli_patterns_1.COMMAND_CODE_THINKING_PATTERN.test((0, cli_patterns_1.stripAnsi)(rawOutput));
146
148
  }
149
+ /**
150
+ * Why `send` stops at the plan review overlay (Issue #3125).
151
+ *
152
+ * The overlay replaces the composer until a human decides, so waiting for the
153
+ * composer only ran out the clock (`prompt not ready` after the full timeout).
154
+ * Its comments, Submit review, approval and cancel go through `respond`.
155
+ */
156
+ exports.COMMAND_CODE_PLAN_REVIEW_SEND_MESSAGE = 'Command Code is showing a plan review (REVIEW), which takes review comments, not messages. ' +
157
+ 'Comment with `commandmate respond <worktree-id> "<text>"`, then `--plan-review submit` (ctrl+r), ' +
158
+ '`--plan-review approve` (ctrl+a) or `--plan-review cancel` (esc).';
147
159
  /**
148
160
  * Command Code CLI tool implementation.
149
161
  * Manages `commandcode` sessions using tmux.
@@ -247,11 +259,11 @@ class CommandCodeTool extends base_1.BaseCLITool {
247
259
  });
248
260
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
249
261
  }
250
- await (0, tmux_1.sendKeys)(sessionName, buildCommandCodeLaunchCommand({
262
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(buildCommandCodeLaunchCommand({
251
263
  target: { worktreeId, cliToolId: tool_id_1.COMMAND_CODE_CLI_TOOL_ID, instanceId },
252
264
  executablePath: this.command,
253
265
  worktreePath,
254
- }), true);
266
+ })), true);
255
267
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.COMMAND_CODE_INIT_WAIT_MS));
256
268
  await this.waitForReady(sessionName);
257
269
  logger.info('started-command-code-session');
@@ -301,15 +313,21 @@ class CommandCodeTool extends base_1.BaseCLITool {
301
313
  *
302
314
  * @throws SessionStartTimeoutError when a just-launched session's composer
303
315
  * has still not appeared
316
+ * @throws Error ({@link COMMAND_CODE_PLAN_REVIEW_SEND_MESSAGE}) at once when
317
+ * the plan review overlay is on screen (Issue #3125)
304
318
  * @throws Error when the composer is not detected within the timeout
305
319
  */
306
320
  async waitForPrompt(sessionName) {
307
321
  const startTime = Date.now();
308
322
  const pollInterval = 500;
323
+ let planReviewPolls = 0;
309
324
  while (Date.now() - startTime < COMMAND_CODE_PROMPT_WAIT_TIMEOUT_MS) {
325
+ let planReviewUp = false;
310
326
  try {
311
327
  const rawOutput = await (0, tmux_1.capturePane)(sessionName, COMMAND_CODE_READINESS_CAPTURE_LINES);
312
- if (isCommandCodeReady(rawOutput)) {
328
+ // Read first: a focused action row (`❯ Approve ctrl+a`) is a `❯` row.
329
+ planReviewUp = (0, plan_review_state_1.readCommandCodePlanReviewState)(rawOutput) !== null;
330
+ if (!planReviewUp && isCommandCodeReady(rawOutput)) {
313
331
  this.composerPendingSince.delete(sessionName);
314
332
  return;
315
333
  }
@@ -317,6 +335,14 @@ class CommandCodeTool extends base_1.BaseCLITool {
317
335
  catch {
318
336
  // Capture may fail - continue polling
319
337
  }
338
+ // Issue #3125: no composer comes back until a human answers the review.
339
+ // Two polls in a row, because the frame redrawn just after `Esc` can
340
+ // still carry the footer (`after-cancel-partial-redraw.txt`, #2763).
341
+ planReviewPolls = planReviewUp ? planReviewPolls + 1 : 0;
342
+ if (planReviewPolls >= 2) {
343
+ logger.info('command-code-plan-review-blocks-send', { sessionName });
344
+ throw new Error(exports.COMMAND_CODE_PLAN_REVIEW_SEND_MESSAGE);
345
+ }
320
346
  await new Promise((resolve) => setTimeout(resolve, pollInterval));
321
347
  }
322
348
  const launchedAt = this.composerPendingSince.get(sessionName);
@@ -35,6 +35,7 @@ const tool_id_1 = require("../../lib/hooks/sources/copilot/tool-id");
35
35
  const errors_1 = require("../../lib/errors");
36
36
  const logger_1 = require("../../lib/logger");
37
37
  const install_hints_1 = require("./install-hints");
38
+ const launch_screen_1 = require("../../lib/session/launch-screen");
38
39
  const logger = (0, logger_1.createLogger)('cli-tools/copilot');
39
40
  /** Interval for polling prompt detection */
40
41
  const COPILOT_POLL_INTERVAL_MS = 1000;
@@ -369,7 +370,7 @@ class CopilotTool extends base_1.BaseCLITool {
369
370
  worktreePath,
370
371
  });
371
372
  // Start Copilot CLI in interactive mode
372
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
373
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
373
374
  // Issue #1907: no blind sleep before this. The 4-second one that used to
374
375
  // sit here was a guess at how long copilot takes to paint (measured on
375
376
  // 1.0.80: banner at ~1.3 s, folder-trust dialog at ~2.5 s), and it was
@@ -22,6 +22,7 @@ const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifec
22
22
  const logger_1 = require("../../lib/logger");
23
23
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
24
24
  const install_hints_1 = require("./install-hints");
25
+ const launch_screen_1 = require("../../lib/session/launch-screen");
25
26
  const logger = (0, logger_1.createLogger)('cli-tools/gemini');
26
27
  /**
27
28
  * Extract error message from unknown error type (DRY)
@@ -128,7 +129,7 @@ class GeminiTool extends base_1.BaseCLITool {
128
129
  executablePath: this.command,
129
130
  worktreePath,
130
131
  });
131
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
132
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
132
133
  // Wait for Gemini to initialize (minimum wait for banner/auth)
133
134
  await new Promise((resolve) => setTimeout(resolve, GEMINI_INIT_WAIT_MS));
134
135
  // Poll until Gemini interactive prompt is ready
@@ -90,22 +90,40 @@ const ADDED_TOOL_DEFAULTS = {
90
90
  */
91
91
  const LIVENESS_SPECS = {
92
92
  /**
93
- * claude's is `isSessionHealthy`, unchanged, expressed as a declaration.
93
+ * claude's is `isSessionHealthy`, expressed as a declaration.
94
94
  *
95
- * Three fields carry that history and are claude's alone: `aliveTailLines:
96
- * null` (the check has always tested the whole frame), `shellPromptPatterns:
97
- * []` (the length gate and the endings are the whole rule), and
95
+ * Two fields carry that history and are claude's alone: `aliveTailLines:
96
+ * null` (the check has always tested the whole frame) and
98
97
  * `unreadableIsExited: true` (an empty pane and a capture that threw have
99
- * both meant "unhealthy" since it was written). Issue #2070's acceptance
100
- * condition is that claude's verdicts do not move, so none of the three may be
101
- * "improved" here — a change would have to be its own Issue, with its own
102
- * measurements.
98
+ * both meant "unhealthy" since it was written). Neither is "improved" here.
99
+ *
100
+ * `shellPromptPatterns` is NOT claude's alone any more (Issue #3191). #2070
101
+ * left it `[]` so claude's verdicts would not move, which kept claude on the
102
+ * length-gated endings rule — and that rule cannot see a prompt of 40
103
+ * characters or more. Measured 2026-10-04: after `/exit` the pane fell back
104
+ * to `maenokota@MAENOnoMac-Studio uat-repo-wt2 %` (42 characters) and the
105
+ * session stayed `running`, so the next send sat in `waitForPrompt` until
106
+ * `Prompt detection timeout (10000ms)`; the author's everyday prompt
107
+ * (`… MyCodeBranchDesk %`, 46) is past the gate too.
108
+ *
109
+ * The positive `user@host …` forms are therefore claude's as well. What made
110
+ * that safe to adopt unnarrowed: every row of every claude screen fixture in
111
+ * the repository (`tests/fixtures/claude-*`, `tests/unit/detection/tools/
112
+ * claude/fixtures/`, the #2070 frames — composer, transcript, dialogs,
113
+ * pickers, banners) was swept against both patterns and NONE matched, not
114
+ * just none on the bottom row; `tool-liveness-3191.test.ts` keeps that
115
+ * sweep. The whole-frame `CLAUDE_PROMPT_PATTERN` check still runs first, so
116
+ * a pane with claude's composer anywhere on it stays alive regardless. Below
117
+ * the 40-character gate the verdicts are unchanged — a pattern match there
118
+ * already ended in `$` / `%` / `#` — only the reason reads `shell prompt
119
+ * detected` instead of `shell prompt ending detected` for a `user@host:…`
120
+ * row.
103
121
  */
104
122
  claude: {
105
123
  ...SHARED,
106
124
  alivePatterns: [cli_patterns_1.CLAUDE_PROMPT_PATTERN],
107
125
  aliveTailLines: null,
108
- shellPromptPatterns: [],
126
+ shellPromptPatterns: tool_liveness_1.SHELL_PROMPT_LINE_PATTERNS,
109
127
  unreadableIsExited: true,
110
128
  fatalPatterns: cli_patterns_1.CLAUDE_SESSION_ERROR_PATTERNS,
111
129
  fatalRegexPatterns: cli_patterns_1.CLAUDE_SESSION_ERROR_REGEX_PATTERNS,
@@ -57,6 +57,7 @@ const graceful_exit_1 = require("./graceful-exit");
57
57
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
58
58
  const install_hints_1 = require("./install-hints");
59
59
  const opencode_executable_1 = require("./opencode-executable");
60
+ const launch_screen_1 = require("../../lib/session/launch-screen");
60
61
  const logger = (0, logger_1.createLogger)('cli-tools/opencode-v2');
61
62
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
62
63
  /** Interval between composer polls (launch and send). */
@@ -232,7 +233,7 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
232
233
  if (port === null) {
233
234
  logger.warn('opencode-v2-launch-without-server', { worktreeId, instanceId });
234
235
  }
235
- await (0, tmux_1.sendKeys)(sessionName, (0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({ target, executablePath: executable.path, worktreePath }), true);
236
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)((0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({ target, executablePath: executable.path, worktreePath })), true);
236
237
  await this.waitForReady(sessionName);
237
238
  await (0, runtime_1.attachOpencodeV2EventStream)(target);
238
239
  logger.info('started-opencode-v2-session');
@@ -75,6 +75,7 @@ const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
75
75
  const install_hints_1 = require("./install-hints");
76
76
  const opencode_executable_1 = require("./opencode-executable");
77
77
  const log_diagnosis_1 = require("../../lib/hooks/sources/opencode/log-diagnosis");
78
+ const launch_screen_1 = require("../../lib/session/launch-screen");
78
79
  const logger = (0, logger_1.createLogger)('cli-tools/opencode');
79
80
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
80
81
  /**
@@ -393,7 +394,7 @@ class OpenCodeTool extends base_1.BaseCLITool {
393
394
  });
394
395
  }
395
396
  const launchedAt = Date.now();
396
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
397
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
397
398
  // Issue #1908: poll for opencode's own composer instead of sleeping 15 s.
398
399
  await this.waitForReady(sessionName);
399
400
  // Issue #1763: subscribe once the server is up. Health-checked first, so
@@ -21,6 +21,7 @@ const logger_1 = require("../../lib/logger");
21
21
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
22
22
  const install_hints_1 = require("./install-hints");
23
23
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
24
+ const launch_screen_1 = require("../../lib/session/launch-screen");
24
25
  const logger = (0, logger_1.createLogger)('cli-tools/vibe-local');
25
26
  /**
26
27
  * Extract error message from unknown error type (DRY)
@@ -123,7 +124,7 @@ class VibeLocalTool extends base_1.BaseCLITool {
123
124
  }
124
125
  // Start vibe-local in interactive mode with auto-approve (-y)
125
126
  // -y flag skips the permission confirmation prompt
126
- await (0, tmux_1.sendKeys)(sessionName, vibeLocalCommand, true);
127
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(vibeLocalCommand), true);
127
128
  // Wait for vibe-local to initialize (banner + model loading)
128
129
  await new Promise((resolve) => setTimeout(resolve, VIBE_LOCAL_INIT_WAIT_MS));
129
130
  logger.info('started-vibe-local-session:sessionname');
@@ -8,6 +8,9 @@ exports.findOpencodeV2DialogTitle = exports.OPENCODE_V2_DIALOG_TITLE_PATTERN = e
8
8
  exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_V2_SKIP_PATTERNS = void 0;
9
9
  exports.isCodexTurnActive = isCodexTurnActive;
10
10
  exports.findClaudeChromeStart = findClaudeChromeStart;
11
+ exports.resolveClaudeTrustDialogKeys = resolveClaudeTrustDialogKeys;
12
+ exports.isClaudeTrustDialogOpen = isClaudeTrustDialogOpen;
13
+ exports.isShellPaneCommand = isShellPaneCommand;
11
14
  exports.isCodexPromptReady = isCodexPromptReady;
12
15
  exports.getCodexActiveDialog = getCodexActiveDialog;
13
16
  exports.getCodexLifecycleDialog = getCodexLifecycleDialog;
@@ -229,6 +232,86 @@ function findClaudeChromeStart(lines) {
229
232
  * tmux padding or other output. (SF-001)
230
233
  */
231
234
  exports.CLAUDE_TRUST_DIALOG_PATTERN = /Yes, I trust this folder/m;
235
+ /** The option row of the trust dialog's cursor: `❯` (or legacy `>`) after the dialog's left padding. */
236
+ const CLAUDE_TRUST_CURSOR_ROW_PATTERN = /^\s*[>❯]\s+\S/;
237
+ /** How far the cursor row may sit from the `Yes, I trust this folder` row (the dialog has two options). */
238
+ const CLAUDE_TRUST_MAX_CURSOR_DISTANCE = 3;
239
+ /**
240
+ * Keys that answer Claude Code's folder-trust dialog with "Yes", or null when
241
+ * no answerable dialog is on screen (Issue #3078).
242
+ *
243
+ * The dialog comes in two layouts, and Enter alone is only right for one:
244
+ *
245
+ * - default Yes (Issue #201 era, `tests/unit/lib/claude-session.test.ts`):
246
+ * ` ❯ 1. Yes, I trust this folder` / ` 2. No, exit` — Enter confirms Yes.
247
+ * - default No (2.1.259 `tests/fixtures/chat-dialog-card-2254/claude-trust-2-1-259.txt`,
248
+ * 2.1.287 with a permission allow-list
249
+ * `tests/fixtures/claude-trust-dialog-3078/allowlist-default-no-2-1-287.txt`):
250
+ * ` ❯ No, exit` / ` Yes, I trust this folder` — Enter EXITS Claude Code.
251
+ *
252
+ * So the answer is read off the screen: the distance from the cursor row to the
253
+ * Yes row becomes that many `Up`/`Down` presses, then `Enter`. Only the last
254
+ * dialog in the capture counts, and a dialog followed by Claude's input-box
255
+ * separator is history in the scrollback, not an open dialog.
256
+ *
257
+ * @param output - ANSI-stripped pane output
258
+ * @returns tmux key names ending in `Enter` (just `['Enter']` when the cursor is
259
+ * already on Yes), or null when no open dialog / no readable cursor row
260
+ */
261
+ function resolveClaudeTrustDialogKeys(output) {
262
+ const lines = output.split('\n');
263
+ const yesIndex = findOpenClaudeTrustYesRow(lines);
264
+ if (yesIndex === -1)
265
+ return null;
266
+ for (let distance = 0; distance <= CLAUDE_TRUST_MAX_CURSOR_DISTANCE; distance++) {
267
+ for (const direction of distance === 0 ? [0] : [-1, 1]) {
268
+ const index = yesIndex + direction * distance;
269
+ if (index < 0 || index >= lines.length)
270
+ continue;
271
+ if (!CLAUDE_TRUST_CURSOR_ROW_PATTERN.test(lines[index]))
272
+ continue;
273
+ // Cursor above Yes → move Down; below → move Up.
274
+ const key = direction < 0 ? 'Down' : 'Up';
275
+ return [...Array(distance).fill(key), 'Enter'];
276
+ }
277
+ }
278
+ return null;
279
+ }
280
+ /**
281
+ * Whether Claude Code's folder-trust dialog is the open screen (Issue #3078).
282
+ *
283
+ * The dialog's cursor row (` ❯ No, exit`) has the prompt glyph, so the start
284
+ * wait asks this before CLAUDE_PROMPT_PATTERN rather than reading the dialog as
285
+ * a ready prompt.
286
+ *
287
+ * @param output - ANSI-stripped pane output
288
+ */
289
+ function isClaudeTrustDialogOpen(output) {
290
+ return findOpenClaudeTrustYesRow(output.split('\n')) !== -1;
291
+ }
292
+ /** `#{pane_current_command}` values of an interactive shell, with tmux's `-` login prefix removed. */
293
+ const SHELL_PANE_COMMANDS = new Set(['sh', 'bash', 'zsh', 'fish', 'dash', 'ksh', 'tcsh', 'csh']);
294
+ /**
295
+ * Whether a pane's foreground command is a shell rather than an agent
296
+ * (Issue #3089). Claude Code shows up as `claude`, `node` or its version
297
+ * string (`2.1.287`), never as one of these, so a shell here after the agent
298
+ * was seen running means the agent has exited.
299
+ *
300
+ * @param command - `#{pane_current_command}` of the pane
301
+ */
302
+ function isShellPaneCommand(command) {
303
+ return SHELL_PANE_COMMANDS.has(command.trim().replace(/^-/, ''));
304
+ }
305
+ /** Row of the last `Yes, I trust this folder`, or -1 when absent or already answered. */
306
+ function findOpenClaudeTrustYesRow(lines) {
307
+ for (let i = lines.length - 1; i >= 0; i--) {
308
+ if (!exports.CLAUDE_TRUST_DIALOG_PATTERN.test(lines[i]))
309
+ continue;
310
+ // Claude's input box (separator rows) drawn below it: the dialog is scrollback.
311
+ return lines.slice(i + 1).some((line) => exports.CLAUDE_SEPARATOR_PATTERN.test(line)) ? -1 : i;
312
+ }
313
+ return -1;
314
+ }
232
315
  /**
233
316
  * Codex prompt pattern
234
317
  * T1.2: Improved to detect empty prompts as well
@@ -1470,12 +1553,22 @@ exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = /Enter\s+to\s+set\s+as\s+default\b
1470
1553
  * "Enter to set as default · s to use this session only · Esc to cancel"
1471
1554
  * (/model command footer as of Claude Code v2.1.218 — Issue #1495)
1472
1555
  *
1556
+ * "←/→ to adjust · Enter to confirm · s for this session only · Esc to cancel"
1557
+ * (/effort slider footer as of Claude Code v2.1.257 — Issue #3052; before
1558
+ * 2.1.257 it was "Enter to confirm · Esc to cancel")
1559
+ *
1560
+ * The /effort branch keys on "Enter to confirm · s for this session only" rather
1561
+ * than "←/→ to adjust": the `s` hint is unique to the pickers (the trust dialog's
1562
+ * "Enter to confirm · Esc to cancel" and approval dialogs never carry it), and
1563
+ * keeping the match under the `Enter to` prefix leaves the pattern a single
1564
+ * linear alternation. Linear, no nested quantifiers — ReDoS safe.
1565
+ *
1473
1566
  * The "set as default" branch lets status-detector classify the `/model` overlay
1474
1567
  * as a Claude selection list (NavigationButtons + ESC hatch, hasActivePrompt=false)
1475
1568
  * once detectPrompt() no longer reports it as a prompt (see
1476
1569
  * CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN).
1477
1570
  */
1478
- exports.CLAUDE_SELECTION_LIST_FOOTER = /Enter\s+to\s+(?:select\s+.*to\s+navigate|confirm\s+·\s+Esc|set\s+as\s+default)/;
1571
+ exports.CLAUDE_SELECTION_LIST_FOOTER = /Enter\s+to\s+(?:select\s+.*to\s+navigate|confirm\s+·\s+(?:Esc|s\s+for\s+this\s+session\s+only)|set\s+as\s+default)/;
1479
1572
  /**
1480
1573
  * OpenCode TUI separator pattern (Issue #379)
1481
1574
  * Matches lines composed entirely of box-drawing / TUI decoration characters.
@@ -115,6 +115,23 @@ exports.STATUS_REASON = {
115
115
  OPENCODE_RESPONSE_COMPLETE: 'opencode_response_complete',
116
116
  INPUT_PROMPT: 'input_prompt',
117
117
  NO_RECENT_OUTPUT: 'no_recent_output',
118
+ /**
119
+ * Issue #3179: the agent's launch is still in progress.
120
+ *
121
+ * Published by `current-output-builder` and `worktree-status-helper` while
122
+ * `lib/session/session-starting-state` holds a record for the instance — from
123
+ * `beginAgentSession` until `startSession` returns or throws, bounded by the
124
+ * tool's readiness wait and released early by a dialog the launch does not
125
+ * answer. The frame underneath (a shell prompt and the launch line, or a trust
126
+ * dialog the launch is about to answer) is not read while it is up: the status
127
+ * is `running`, and `isUnclassifiedActive` / `isSelectionListActive` /
128
+ * `isPromptWaiting` are all false, so no pad, no answer sheet and no `wait`
129
+ * exit 10 is raised for a screen nobody has to drive.
130
+ *
131
+ * ADDITIVE in the sense {@link STATUS_REASON.EXITED} is: a reader that does not
132
+ * know the token sees a `running` session.
133
+ */
134
+ STARTING: 'starting',
118
135
  /**
119
136
  * Issue #2070: the tmux session is there, and the TOOL is not.
120
137
  *
@@ -49,7 +49,9 @@ exports.SHELL_PROMPT_ENDINGS = ['$', '%', '#'];
49
49
  * reproduced on renders as `maenokota@MAENOnoMac-Studio work-codex %` — forty
50
50
  * characters exactly, i.e. one past this gate — so a codex session that had
51
51
  * genuinely fallen back to the shell read as alive. See
52
- * {@link SHELL_PROMPT_LINE_PATTERNS}.
52
+ * {@link SHELL_PROMPT_LINE_PATTERNS}. Issue #3191 found the same gap for claude
53
+ * (`… uat-repo-wt2 %`, 42 characters, after `/exit`), and claude now takes the
54
+ * line patterns too.
53
55
  */
54
56
  exports.MAX_SHELL_PROMPT_LENGTH = 40;
55
57
  /**
@@ -16,12 +16,14 @@
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.codexStatusDetector = exports.VERIFIED_AGAINST = void 0;
18
18
  exports.isCodexStalePrompt = isCodexStalePrompt;
19
+ exports.isCodexModelPickerFrame = isCodexModelPickerFrame;
19
20
  const cli_patterns_1 = require("../../cli-patterns");
20
21
  const prompt_detector_1 = require("../../prompt-detector");
21
22
  const status_reason_1 = require("../../status-reason");
22
23
  const cli_patterns_2 = require("./cli-patterns");
23
24
  const prompt_1 = require("./prompt");
24
25
  const frame_1 = require("../frame");
26
+ const dialog_block_1 = require("../dialog-block");
25
27
  const run_detection_1 = require("../run-detection");
26
28
  const verified_against_1 = require("../verified-against");
27
29
  const thinking_constants_1 = require("../../../../config/thinking-constants");
@@ -463,3 +465,27 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
463
465
  return null;
464
466
  },
465
467
  });
468
+ /**
469
+ * Issue #3062: is this frame codex's `/model` picker (either stage)?
470
+ *
471
+ * Auto-Yes must not answer it: the digit is an immediate decision, so the
472
+ * poller would pick the model and the reasoning effort for the operator. It is
473
+ * judged by the picker's own footer row (`enter select · esc back`, `enter
474
+ * default · s session · esc back`) rather than by `detectDialog`'s `picker`
475
+ * kind, which also covers the hooks list/detail screens whose Auto-Yes
476
+ * behaviour is unchanged. The footer must sit under the option block of a frame
477
+ * `detectDialog` vouches for, so the same words quoted in a reply do not count.
478
+ * `/prompt-response` does not call this and keeps accepting an answer.
479
+ *
480
+ * @param cleanOutput - The capture Auto-Yes judged (ANSI and box drawing stripped)
481
+ */
482
+ function isCodexModelPickerFrame(cleanOutput) {
483
+ const frame = (0, frame_1.normalizeFrame)(cleanOutput);
484
+ if (!exports.codexStatusDetector.detectDialog(frame))
485
+ return false;
486
+ const contentEnd = findCodexContentEnd(frame.contentLines);
487
+ const block = (0, dialog_block_1.findNumberedOptionBlock)((0, cli_patterns_1.stripBoxDrawing)(frame.clean).split('\n'), contentEnd);
488
+ return (block !== null &&
489
+ (cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(block.footer) ||
490
+ cli_patterns_1.CODEX_EFFORT_PICKER_FOOTER_PATTERN.test(block.footer)));
491
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * Which part of Command Code's plan review overlay has the keyboard
4
+ * (Issue #3125).
5
+ *
6
+ * The detector already says THAT the overlay is up
7
+ * (`command_code_plan_review`, see `detect.ts`). Answering it needs one more
8
+ * fact, because the same keys mean different things depending on where the
9
+ * focus is — measured on 1.58.0 (`tests/fixtures/command-code-plan-review-2763/`)
10
+ * and unchanged in the 1.74.0 rows #3059 observed
11
+ * (`tests/fixtures/command-code-plan-review-3125/`):
12
+ *
13
+ * | phase | hint bar (last content row) | `Enter` does |
14
+ * |------------------|----------------------------------------------|-------------------------|
15
+ * | `body` | `type + enter to comment · …` | opens / pins a comment |
16
+ * | `comment-box` | `enter to pin · esc discard` | pins what is typed |
17
+ * | `action-focus` | `↑/↓ choose · enter to run` (a `❯` on a row) | RUNS the focused action |
18
+ * | `approve-choice` | `←/→ choose · enter confirm · esc back` | confirms the approval |
19
+ *
20
+ * The body cursor itself is drawn by background colour alone and cannot be read
21
+ * off a plain capture; the hint bar and the `❯` can, which is all this needs.
22
+ *
23
+ * Browser-safe and pure, like `selection-shape.ts` it builds on.
24
+ *
25
+ * @module lib/detection/tools/command-code/plan-review-state
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.readCommandCodePlanReviewState = readCommandCodePlanReviewState;
29
+ const ansi_1 = require("../../ansi");
30
+ const selection_shape_1 = require("../../selection-shape");
31
+ /** Rows read from the end of the frame — the same 15 the detector reads. */
32
+ const TAIL_CONTENT_ROWS = 15;
33
+ const BODY_HINT = /^\s*type \+ enter to comment\b/i;
34
+ const COMMENT_BOX_HINT = /^\s*enter to pin\s*·\s*esc discard\s*$/i;
35
+ const ACTION_FOCUS_HINT = /^\s*↑\/↓ choose\s*·\s*enter to run\s*$/i;
36
+ const FOCUSED_ACTION_ROW = /^\s*❯ +(?:Submit review\b|Approve\s+ctrl\+a\b|Cancel\s+esc\b)/im;
37
+ const PENDING_BADGE = /^\s*REVIEW\s+(\d+)\s+pending comments?\b/im;
38
+ const APPROVE_WITH_COMMENTS_SELECTED = /\(•\)\s+with\s+\d+\s+comments?\s+as\s+notes/i;
39
+ /**
40
+ * Read the plan review overlay's focus off a capture.
41
+ *
42
+ * @param frame - a raw `capture-pane` frame, ANSI intact or stripped
43
+ * @returns null when the overlay is not at the bottom of this frame
44
+ */
45
+ function readCommandCodePlanReviewState(frame) {
46
+ if (!frame)
47
+ return null;
48
+ const rows = (0, ansi_1.stripAnsi)(frame.replace(/\r\n/g, '\n'))
49
+ .split('\n')
50
+ .filter((row) => row.trim() !== '')
51
+ .slice(-TAIL_CONTENT_ROWS);
52
+ if (rows.length === 0)
53
+ return null;
54
+ const tail = rows.join('\n');
55
+ const pendingMatch = PENDING_BADGE.exec(tail);
56
+ const pendingComments = pendingMatch ? Number(pendingMatch[1]) : 0;
57
+ if ((0, selection_shape_1.isCommandCodePlanApproveChoice)(tail)) {
58
+ return {
59
+ phase: 'approve-choice',
60
+ pendingComments,
61
+ approveChoice: APPROVE_WITH_COMMENTS_SELECTED.test(tail) ? 'with-comments' : 'discard-comments',
62
+ };
63
+ }
64
+ if (!(0, selection_shape_1.hasCommandCodePlanReviewFooterAtBottom)(tail))
65
+ return null;
66
+ const hint = rows[rows.length - 1];
67
+ let phase = 'unknown';
68
+ if (FOCUSED_ACTION_ROW.test(tail) || ACTION_FOCUS_HINT.test(hint))
69
+ phase = 'action-focus';
70
+ else if (COMMENT_BOX_HINT.test(hint))
71
+ phase = 'comment-box';
72
+ else if (BODY_HINT.test(hint))
73
+ phase = 'body';
74
+ return { phase, pendingComments, approveChoice: null };
75
+ }
@@ -59,6 +59,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
59
59
  exports.CLAUDE_END_TURN_STOP_REASON = exports.CLAUDE_HUMAN_PROMPT_SOURCES = exports.CLAUDE_HUMAN_ORIGIN_KIND = exports.CLAUDE_SLASH_COMMAND_PREFIX = exports.CLAUDE_THINKING_LABEL = exports.MAX_CLAUDE_TOOL_DETAIL_LENGTH = exports.MAX_CLAUDE_TURN_BLOCKS = exports.CLAUDE_TURN_TRUNCATION_MARKER = exports.MAX_CLAUDE_TURN_BODY_LENGTH = exports.CLAUDE_PROJECTS_DIR_SEGMENTS = void 0;
60
60
  exports.claudeProjectSlug = claudeProjectSlug;
61
61
  exports.claudeSlashCommandPrompt = claudeSlashCommandPrompt;
62
+ exports.claudePastedContentPrompt = claudePastedContentPrompt;
62
63
  exports.readClaudeContentBlock = readClaudeContentBlock;
63
64
  exports.readClaudeTranscriptRecord = readClaudeTranscriptRecord;
64
65
  exports.parseClaudeTranscript = parseClaudeTranscript;
@@ -210,6 +211,37 @@ function claudeSlashCommandPrompt(text) {
210
211
  const args = CLAUDE_COMMAND_ARGS_PATTERN.exec(trimmed)?.[1].trim() ?? '';
211
212
  return args.length === 0 ? name : `${name} ${args}`;
212
213
  }
214
+ /**
215
+ * A paste's wrapper: `<pasted_content id="X">` … `</pasted_content id="X">`.
216
+ *
217
+ * The closing tag repeats the opening tag's id (`\1`), so a pair whose ids
218
+ * differ — or a tag only mentioned in prose — is not a wrapper and is left alone.
219
+ * One newline just inside each tag is the wrapper's own framing, not the body's.
220
+ */
221
+ const CLAUDE_PASTED_CONTENT_PATTERN = /<pasted_content id="([^"<>\s]+)">\n?([\s\S]*?)\n?<\/pasted_content id="\1">/g;
222
+ /**
223
+ * The text a person sent, with Claude Code's paste wrapper taken off (Issue #3102).
224
+ *
225
+ * Claude Code records a multi-line message that arrived as a paste — which is
226
+ * what CommandMate's tmux send looks like to it — with the body wrapped in
227
+ * `<pasted_content id="X">…</pasted_content id="X">`. `recordUserTurn` compares
228
+ * the transcript's text with the `/send` row (and a relay row) byte for byte, so
229
+ * the wrapper made every such prompt look like a different message and a second
230
+ * `user` row was written. Unwrapping here lets the existing adoption rules match.
231
+ *
232
+ * Every wrapper in the text is replaced by its body, including one inside a
233
+ * sentence the person typed around a paste. When the result is empty the original
234
+ * is returned, so this never turns a record into a blank prompt.
235
+ *
236
+ * @param text - The record's text, as {@link ClaudeTranscriptRecord.text} holds it
237
+ * @returns The text without wrappers, or `text` itself when there is none to remove
238
+ */
239
+ function claudePastedContentPrompt(text) {
240
+ if (!text.includes('<pasted_content id='))
241
+ return text;
242
+ const unwrapped = text.replace(CLAUDE_PASTED_CONTENT_PATTERN, (_match, _id, body) => body);
243
+ return unwrapped.trim().length === 0 ? text : unwrapped;
244
+ }
213
245
  /**
214
246
  * Read one `message.content` element.
215
247
  *
@@ -517,7 +549,7 @@ function createClaudeTurn(record, sessionId) {
517
549
  // A slash command's record is XML and the operator typed a line; #2265 puts
518
550
  // the line on the turn so that the `user` row reads `/release v0.30.1` and
519
551
  // the `/send` row holding those same bytes is adopted rather than doubled.
520
- promptText: claudeSlashCommandPrompt(record.text) ?? record.text,
552
+ promptText: claudeSlashCommandPrompt(record.text) ?? claudePastedContentPrompt(record.text),
521
553
  promptIsOperatorInput: isClaudeOperatorPromptRecord(record),
522
554
  blocks: [],
523
555
  assistantRecords: 0,
@@ -75,6 +75,9 @@ function snapshotFingerprint(payload) {
75
75
  // client, or the Esc card outlives the panel it dismisses.
76
76
  payload.isDismissablePanelActive ?? false,
77
77
  payload.isUnclassifiedActive ?? false,
78
+ // Issue #3179: the launch ending is a change the client has to see even
79
+ // when the frame and every flag above are unchanged.
80
+ payload.startingSince ?? null,
78
81
  ]);
79
82
  }
80
83
  async function captureFreshPayload(worktreeId, cliToolId, instanceId) {
@@ -111,6 +114,8 @@ function emitTerminalSnapshot(worktreeId, cliToolId, payload, instanceId) {
111
114
  isPagerActive: payload.isPagerActive ?? false,
112
115
  isDismissablePanelActive: payload.isDismissablePanelActive ?? false,
113
116
  isUnclassifiedActive: payload.isUnclassifiedActive ?? false,
117
+ // Issue #3179: so the push and the poll agree on "still starting".
118
+ startingSince: payload.startingSince ?? null,
114
119
  version: nextVersion(key),
115
120
  });
116
121
  }
@@ -43,6 +43,7 @@ exports.buildAgentLaunchCommandLine = buildAgentLaunchCommandLine;
43
43
  const sources_1 = require("../../lib/hooks/sources");
44
44
  const agent_event_state_1 = require("../../lib/session/agent-event-state");
45
45
  const session_generation_archive_1 = require("../../lib/session/session-generation-archive");
46
+ const session_starting_state_1 = require("../../lib/session/session-starting-state");
46
47
  const logger_1 = require("../../lib/logger");
47
48
  const logger = (0, logger_1.createLogger)('lib/session/agent-session-lifecycle');
48
49
  /**
@@ -66,6 +67,16 @@ const logger = (0, logger_1.createLogger)('lib/session/agent-session-lifecycle')
66
67
  * @param at - Epoch ms; defaults to now
67
68
  */
68
69
  function beginAgentSession(target, at = Date.now()) {
70
+ // Issue #3179: the launch is in progress from here until
71
+ // `BaseCLITool.startSession` returns or throws (it clears the record in a
72
+ // `finally`). First, so the screen stops reading the about-to-be-created pane
73
+ // as a running agent before anything else here can fail.
74
+ // Issue #3195: the record is written under the token `startSession` is
75
+ // running the launch with (an `AsyncLocalStorage`, read inside
76
+ // `markSessionStarting`), which is how that `finally` knows the record is
77
+ // its own. A second call from the same launch (codex's
78
+ // `relaunchIntoSamePane`) rewrites the same launch's record.
79
+ (0, session_starting_state_1.markSessionStarting)(target.worktreeId, target.cliToolId, target.instanceId, at);
69
80
  const before = (0, agent_event_state_1.getAgentEventDropCounts)(target.worktreeId, target.cliToolId, target.instanceId).decisionEvicted;
70
81
  (0, agent_event_state_1.beginAgentEventGeneration)(target.worktreeId, target.cliToolId, target.instanceId, at);
71
82
  const after = (0, agent_event_state_1.getAgentEventDropCounts)(target.worktreeId, target.cliToolId, target.instanceId).decisionEvicted;
@@ -50,8 +50,8 @@ const opencode_executable_1 = require("../../lib/cli-tools/opencode-executable")
50
50
  exports.MAX_OUTPUT_SIZE = 10 * 1024 * 1024;
51
51
  /** Maximum output size stored in DB (100KB) */
52
52
  exports.MAX_STORED_OUTPUT_SIZE = 100 * 1024;
53
- /** Execution timeout in milliseconds (15 minutes) */
54
- exports.EXECUTION_TIMEOUT_MS = 15 * 60 * 1000;
53
+ /** Execution timeout in milliseconds (30 minutes, Issue #3107; was 15) */
54
+ exports.EXECUTION_TIMEOUT_MS = 30 * 60 * 1000;
55
55
  /** Maximum message length sent to claude -p */
56
56
  exports.MAX_MESSAGE_LENGTH = 10000;
57
57
  /** Allowed CLI tool identifiers for scheduled execution [DR2-002] derived from CLI_TOOL_IDS */