commandmate 0.44.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 (277) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +348 -352
  3. package/.next/app-path-routes-manifest.json +40 -40
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +9 -9
  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_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  27. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  29. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  31. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  38. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/relays/route.js +1 -1
  40. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/remote/pair/route.js +2 -2
  42. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  45. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/repositories/clone/route.js +1 -1
  47. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/repositories/restore/route.js +1 -1
  50. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/repositories/route.js +1 -1
  52. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/repositories/scan/route.js +1 -1
  54. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/repositories/sync/route.js +1 -1
  56. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  59. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  75. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  77. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  79. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/route.js +1 -1
  174. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  176. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  178. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  179. package/.next/server/app/page_client-reference-manifest.js +1 -1
  180. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  182. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  183. package/.next/server/app/sessions/page.js +1 -1
  184. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  185. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  186. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  187. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  188. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  189. package/.next/server/app/worktrees/[id]/page.js +9 -9
  190. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  191. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  192. package/.next/server/app-paths-manifest.json +40 -40
  193. package/.next/server/chunks/1068.js +1 -1
  194. package/.next/server/chunks/2119.js +1 -1
  195. package/.next/server/chunks/2404.js +1 -1
  196. package/.next/server/chunks/2445.js +1 -1
  197. package/.next/server/chunks/2816.js +1 -1
  198. package/.next/server/chunks/6130.js +1 -1
  199. package/.next/server/chunks/6401.js +1 -1
  200. package/.next/server/chunks/6474.js +3 -3
  201. package/.next/server/chunks/650.js +1 -1
  202. package/.next/server/chunks/7685.js +1 -1
  203. package/.next/server/chunks/7905.js +1 -1
  204. package/.next/server/chunks/8581.js +2 -2
  205. package/.next/server/chunks/8728.js +2 -2
  206. package/.next/server/chunks/9390.js +1 -1
  207. package/.next/server/chunks/9731.js +3 -3
  208. package/.next/server/chunks/9882.js +2 -2
  209. package/.next/server/middleware-build-manifest.js +1 -1
  210. package/.next/server/middleware-manifest.json +5 -5
  211. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  212. package/.next/server/pages/500.html +1 -1
  213. package/.next/server/pages-manifest.json +1 -1
  214. package/.next/server/server-reference-manifest.json +1 -1
  215. package/.next/static/chunks/{2407-340774f1a24f2b45.js → 2407-f1f258d4a1d92620.js} +1 -1
  216. package/.next/static/chunks/344-e1cefd00787060e4.js +1 -0
  217. package/.next/static/chunks/3922.f45dcfc1e7da552a.js +1 -0
  218. package/.next/static/chunks/591-308072f285c34787.js +1 -0
  219. package/.next/static/chunks/6654-ac431270fac1a283.js +1 -0
  220. package/.next/static/chunks/{9619-84aced0846cbe3ac.js → 9619-6c17a271f7f98fbb.js} +1 -1
  221. package/.next/static/chunks/998-2eb5883186abd0bd.js +1 -0
  222. package/.next/static/chunks/app/layout-da66300cc20244ed.js +1 -0
  223. package/.next/static/chunks/app/more/{page-30057cf1e0762ad2.js → page-87c84987b2765213.js} +1 -1
  224. package/.next/static/chunks/app/{page-8483ba400af011f5.js → page-1b820c421db48c2c.js} +1 -1
  225. package/.next/static/chunks/app/review/page-95f749caae382f46.js +1 -0
  226. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +1 -0
  227. package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +1 -0
  228. package/.next/static/chunks/{webpack-49ade0526854dd4e.js → webpack-021f0741f22dd16a.js} +1 -1
  229. package/.next/trace +13 -13
  230. package/README.md +72 -25
  231. package/dist/cli/commands/remote.d.ts +10 -0
  232. package/dist/cli/commands/remote.d.ts.map +1 -1
  233. package/dist/cli/commands/remote.js +17 -1
  234. package/dist/cli/commands/wait.d.ts.map +1 -1
  235. package/dist/cli/commands/wait.js +11 -0
  236. package/dist/cli/docs/setup-guide.d.ts +1 -1
  237. package/dist/cli/docs/setup-guide.d.ts.map +1 -1
  238. package/dist/cli/docs/setup-guide.js +2 -0
  239. package/dist/cli/types/api-responses.d.ts +10 -0
  240. package/dist/cli/types/api-responses.d.ts.map +1 -1
  241. package/dist/lib/detection/status-reason.d.ts +17 -0
  242. package/dist/lib/detection/status-reason.d.ts.map +1 -1
  243. package/dist/lib/detection/status-reason.js +17 -0
  244. package/dist/server/locales/en/worktree.json +13 -1
  245. package/dist/server/locales/ja/worktree.json +13 -1
  246. package/dist/server/src/config/session-starting-config.js +75 -0
  247. package/dist/server/src/lib/cli-tools/antigravity.js +2 -1
  248. package/dist/server/src/lib/cli-tools/base.js +15 -1
  249. package/dist/server/src/lib/cli-tools/codex.js +3 -2
  250. package/dist/server/src/lib/cli-tools/command-code.js +3 -2
  251. package/dist/server/src/lib/cli-tools/copilot.js +2 -1
  252. package/dist/server/src/lib/cli-tools/gemini.js +2 -1
  253. package/dist/server/src/lib/cli-tools/liveness-spec.js +27 -9
  254. package/dist/server/src/lib/cli-tools/opencode-v2.js +2 -1
  255. package/dist/server/src/lib/cli-tools/opencode.js +2 -1
  256. package/dist/server/src/lib/cli-tools/vibe-local.js +2 -1
  257. package/dist/server/src/lib/detection/status-reason.js +17 -0
  258. package/dist/server/src/lib/detection/tool-liveness.js +3 -1
  259. package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
  260. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -0
  261. package/dist/server/src/lib/session/claude-session.js +7 -1
  262. package/dist/server/src/lib/session/current-output-builder.js +49 -21
  263. package/dist/server/src/lib/session/launch-screen.js +57 -0
  264. package/dist/server/src/lib/session/session-starting-state.js +236 -0
  265. package/package.json +1 -1
  266. package/release-notes/0.44.1.json +54 -0
  267. package/.next/static/chunks/344-6f9fc1f38f01a839.js +0 -1
  268. package/.next/static/chunks/3922.8e79fc89f593280b.js +0 -1
  269. package/.next/static/chunks/5449-6cb80bab2bd06b79.js +0 -1
  270. package/.next/static/chunks/591-0a45801e83f26f24.js +0 -1
  271. package/.next/static/chunks/6966-bb854d1145783a64.js +0 -1
  272. package/.next/static/chunks/app/layout-0fc249fb7de75a27.js +0 -1
  273. package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +0 -1
  274. package/.next/static/chunks/app/sessions/page-55297155e7bf01b9.js +0 -1
  275. package/.next/static/chunks/app/worktrees/[id]/page-d2103e0c25be83c8.js +0 -1
  276. /package/.next/static/{wu7SUiHTirFcrpo5teyZ3 → 57lOiz8zSEHdw97XIm0af}/_buildManifest.js +0 -0
  277. /package/.next/static/{wu7SUiHTirFcrpo5teyZ3 → 57lOiz8zSEHdw97XIm0af}/_ssgManifest.js +0 -0
@@ -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
  *
@@ -410,7 +410,12 @@
410
410
  "stats": "Show usage statistics",
411
411
  "thinking": "Switch the model variant",
412
412
  "web": "Pair another device with this OpenCode",
413
- "worktrees": "Manage workspaces"
413
+ "worktrees": "Manage workspaces",
414
+ "artifact-capabilities": "Load the reference for what a published artifact can use, such as connectors and file downloads",
415
+ "artifact-diagramming": "Load guidance for drawing diagrams in artifacts that stay legible in light and dark themes",
416
+ "claude-in-chrome": "Have Claude carry out a task in your browser through Claude in Chrome",
417
+ "plugin-authoring": "Load the reference Claude uses to write a mod",
418
+ "slides": "Make a new Claude Slides presentation from your brief"
414
419
  }
415
420
  },
416
421
  "session": {
@@ -556,6 +561,13 @@
556
561
  "dialogCardLabel": "Terminal screen",
557
562
  "unreadableHint": "Answer with the number shown on screen (1-9) or y/n. Enter confirms whatever the CLI has highlighted."
558
563
  },
564
+ "sessionStarting": {
565
+ "title": "Starting {agent}…",
566
+ "titleWithElapsed": "Starting {agent}… {elapsed}",
567
+ "hint": "The terminal will appear once the agent is ready.",
568
+ "showTerminal": "Show terminal",
569
+ "label": "Agent starting"
570
+ },
559
571
  "chatTranscript": {
560
572
  "regionLabel": "Chat transcript",
561
573
  "loading": "Loading messages",
@@ -410,7 +410,12 @@
410
410
  "stats": "使用量の統計を表示",
411
411
  "thinking": "モデルのバリアントを切り替え",
412
412
  "web": "この OpenCode に別のデバイスをペアリング",
413
- "worktrees": "ワークスペースを管理"
413
+ "worktrees": "ワークスペースを管理",
414
+ "artifact-capabilities": "公開アーティファクトで使える機能(コネクタ・ファイルのダウンロードなど)のリファレンスを読み込み",
415
+ "artifact-diagramming": "アーティファクトにライト・ダーク両方で読める図を描くためのガイダンスを読み込み",
416
+ "claude-in-chrome": "Claude in Chrome 経由でブラウザ上の作業を Claude に依頼",
417
+ "plugin-authoring": "mod を書くときに Claude が使うリファレンスを読み込み",
418
+ "slides": "指示から Claude Slides のプレゼンテーションを作成"
414
419
  }
415
420
  },
416
421
  "session": {
@@ -556,6 +561,13 @@
556
561
  "dialogCardLabel": "ターミナルの画面",
557
562
  "unreadableHint": "画面に出ている番号(1〜9)か y/n で答えてください。Enter は選択中の項目をそのまま確定します。"
558
563
  },
564
+ "sessionStarting": {
565
+ "title": "{agent} を起動中…",
566
+ "titleWithElapsed": "{agent} を起動中… {elapsed}",
567
+ "hint": "起動が終わるとターミナルを表示します。",
568
+ "showTerminal": "ターミナルを見る",
569
+ "label": "エージェントの起動中"
570
+ },
559
571
  "chatTranscript": {
560
572
  "regionLabel": "チャット履歴",
561
573
  "loading": "メッセージを読み込み中",
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * How long a session may be shown as "starting" (Issue #3179).
4
+ *
5
+ * `lib/session/session-starting-state` records when an agent's launch began and
6
+ * clears the record when `BaseCLITool.startSession` returns or throws. These
7
+ * bounds are the escape hatches for the launches that do neither in time:
8
+ * several tools (antigravity, codex, gemini, copilot, Command Code) only LOG
9
+ * when their readiness wait runs out and carry on, so a launch that never
10
+ * became ready would otherwise be shown as starting for as long as the request
11
+ * lingered. Past the bound the screen falls back to what it showed before
12
+ * #3179 — the raw pane — so a human notices the stuck start.
13
+ *
14
+ * @module config/session-starting-config
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SESSION_STARTING_ELAPSED_THRESHOLD_MS = exports.SESSION_STARTING_PROMPT_GRACE_MS = exports.SESSION_STARTING_DEFAULT_WAIT_MS = exports.SESSION_STARTING_GRACE_MS = void 0;
18
+ exports.getSessionStartingMaxMs = getSessionStartingMaxMs;
19
+ exports.getSessionStartingMaxMsAcrossTools = getSessionStartingMaxMsAcrossTools;
20
+ const types_1 = require("../lib/cli-tools/types");
21
+ /**
22
+ * Slack added on top of a tool's own readiness wait, so the starting display
23
+ * outlives the wait it describes by a little rather than ending a beat before
24
+ * the launch reports.
25
+ */
26
+ exports.SESSION_STARTING_GRACE_MS = 5_000;
27
+ /**
28
+ * The default readiness wait a launch performs (antigravity / codex / gemini /
29
+ * copilot / opencode / Command Code are all measured at about 30 s, counting
30
+ * their initial settle delay and their prompt wait).
31
+ */
32
+ exports.SESSION_STARTING_DEFAULT_WAIT_MS = 30_000;
33
+ /**
34
+ * Per-tool readiness waits that differ from the default. Claude waits for its
35
+ * composer for up to `CLAUDE_INIT_TIMEOUT` (60 s); the literal is restated here
36
+ * rather than imported so this config module stays free of the session graph.
37
+ */
38
+ const SESSION_STARTING_WAIT_MS = {
39
+ claude: 60_000,
40
+ };
41
+ /**
42
+ * The longest a launch of `cliToolId` is shown as starting, in ms.
43
+ *
44
+ * @param cliToolId - The tool being launched
45
+ * @returns Its readiness wait plus {@link SESSION_STARTING_GRACE_MS}
46
+ */
47
+ function getSessionStartingMaxMs(cliToolId) {
48
+ return (SESSION_STARTING_WAIT_MS[cliToolId] ?? exports.SESSION_STARTING_DEFAULT_WAIT_MS)
49
+ + exports.SESSION_STARTING_GRACE_MS;
50
+ }
51
+ /**
52
+ * The longest {@link getSessionStartingMaxMs} over every tool, in ms.
53
+ *
54
+ * A send to a worktree with no session launches the agent inside the request,
55
+ * so the client must wait at least this long (Issue #3194).
56
+ */
57
+ function getSessionStartingMaxMsAcrossTools() {
58
+ return Math.max(...types_1.CLI_TOOL_IDS.map(getSessionStartingMaxMs));
59
+ }
60
+ /**
61
+ * How long a dialog may stay on screen during a launch before it is treated as
62
+ * one the server will NOT answer (a login, an unknown dialog) and the starting
63
+ * display gives way to the raw pane.
64
+ *
65
+ * The dialogs the launch answers itself — the folder-trust screens of
66
+ * antigravity / codex / copilot / claude — are answered within one poll of the
67
+ * launch's readiness loop (≤ 1 s) plus the settle wait after the key, so they
68
+ * never reach this bound.
69
+ */
70
+ exports.SESSION_STARTING_PROMPT_GRACE_MS = 5_000;
71
+ /**
72
+ * After how long the client starts printing the elapsed time next to
73
+ * "<agent> を起動中…".
74
+ */
75
+ exports.SESSION_STARTING_ELAPSED_THRESHOLD_MS = 5_000;
@@ -26,6 +26,7 @@ const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifec
26
26
  const logger_1 = require("../../lib/logger");
27
27
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
28
28
  const install_hints_1 = require("./install-hints");
29
+ const launch_screen_1 = require("../../lib/session/launch-screen");
29
30
  const logger = (0, logger_1.createLogger)('cli-tools/antigravity');
30
31
  /**
31
32
  * Extract error message from unknown error type (DRY).
@@ -254,7 +255,7 @@ class AntigravityTool extends base_1.BaseCLITool {
254
255
  worktreePath,
255
256
  });
256
257
  const launchCommand = model ? `${base} --model ${shellSingleQuote(model)}` : base;
257
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
258
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
258
259
  // Wait for agy to initialize
259
260
  await new Promise((resolve) => setTimeout(resolve, ANTIGRAVITY_INIT_WAIT_MS));
260
261
  // Poll until the interactive prompt is ready (handles the trust dialog)
@@ -28,6 +28,7 @@ const logger_1 = require("../logger");
28
28
  const terminal_keys_1 = require("../../types/terminal-keys");
29
29
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
30
30
  const tmux_pane_config_1 = require("../../config/tmux-pane-config");
31
+ const session_starting_state_1 = require("../session/session-starting-state");
31
32
  const execAsync = (0, util_1.promisify)(child_process_1.exec);
32
33
  const logger = (0, logger_1.createLogger)('cli-tools/base');
33
34
  /**
@@ -213,8 +214,12 @@ class BaseCLITool {
213
214
  * @throws Whatever {@link launchSession} threw — unchanged, after reporting
214
215
  */
215
216
  async startSession(worktreeId, worktreePath, instanceId, model) {
217
+ // Issue #3195: this launch's "starting" record is written under this token
218
+ // (see `session-starting-state`), so the `finally` below clears this
219
+ // launch's record and never a later launch's of the same instance.
220
+ const startingToken = (0, session_starting_state_1.issueSessionStartingToken)();
216
221
  try {
217
- await this.launchSession(worktreeId, worktreePath, instanceId, model);
222
+ await (0, session_starting_state_1.runWithSessionStartingToken)(startingToken, () => this.launchSession(worktreeId, worktreePath, instanceId, model));
218
223
  }
219
224
  catch (error) {
220
225
  // Issue #2429: a launch that threw is reported as a failed start and as
@@ -229,6 +234,15 @@ class BaseCLITool {
229
234
  }, error);
230
235
  throw error;
231
236
  }
237
+ finally {
238
+ // Issue #3179: the launch is over, returned or thrown, so the screen
239
+ // stops showing it as starting. `beginAgentSession` wrote the record on
240
+ // the creation path; a reused pane never had one, and this is a no-op for
241
+ // it. `relaunchIfToolExited` comes through here too. Issue #3195: only
242
+ // under this launch's token — a launch killed and started again has a
243
+ // newer record under this key, and it is not this launch's to end.
244
+ (0, session_starting_state_1.clearSessionStarting)(worktreeId, this.id, instanceId, startingToken);
245
+ }
232
246
  const adopted = this.takeAdoptionMark(worktreeId, instanceId);
233
247
  if (adopted !== null)
234
248
  await this.warnIfHookUrlIsStale(worktreeId, adopted, instanceId);
@@ -20,6 +20,7 @@ const hooks_config_1 = require("../../lib/hooks/sources/codex/hooks-config");
20
20
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
21
21
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
22
22
  const install_hints_1 = require("./install-hints");
23
+ const launch_screen_1 = require("../../lib/session/launch-screen");
23
24
  const logger = (0, logger_1.createLogger)('cli-tools/codex');
24
25
  /**
25
26
  * Extract error message from unknown error type (DRY)
@@ -268,11 +269,11 @@ class CodexTool extends base_1.BaseCLITool {
268
269
  // as the new one's.
269
270
  const relaunchIntoSamePane = async () => {
270
271
  (0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: sources_1.CODEX_CLI_TOOL_ID, instanceId });
271
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
272
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
272
273
  await new Promise((resolve) => setTimeout(resolve, CODEX_INIT_WAIT_MS));
273
274
  };
274
275
  // Start Codex CLI in interactive mode
275
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
276
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
276
277
  // Wait for Codex to initialize
277
278
  await new Promise((resolve) => setTimeout(resolve, CODEX_INIT_WAIT_MS));
278
279
  // Poll until Codex interactive prompt is ready
@@ -53,6 +53,7 @@ const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
53
53
  const install_hints_1 = require("./install-hints");
54
54
  const plan_review_state_1 = require("../detection/tools/command-code/plan-review-state");
55
55
  const session_start_error_1 = require("../../lib/session/session-start-error");
56
+ const launch_screen_1 = require("../../lib/session/launch-screen");
56
57
  const logger = (0, logger_1.createLogger)('cli-tools/command-code');
57
58
  /** The executable CommandMate launches. See the module docblock for why not `cmd`. */
58
59
  exports.COMMAND_CODE_COMMAND = 'commandcode';
@@ -258,11 +259,11 @@ class CommandCodeTool extends base_1.BaseCLITool {
258
259
  });
259
260
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
260
261
  }
261
- await (0, tmux_1.sendKeys)(sessionName, buildCommandCodeLaunchCommand({
262
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(buildCommandCodeLaunchCommand({
262
263
  target: { worktreeId, cliToolId: tool_id_1.COMMAND_CODE_CLI_TOOL_ID, instanceId },
263
264
  executablePath: this.command,
264
265
  worktreePath,
265
- }), true);
266
+ })), true);
266
267
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.COMMAND_CODE_INIT_WAIT_MS));
267
268
  await this.waitForReady(sessionName);
268
269
  logger.info('started-command-code-session');
@@ -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');
@@ -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
  /**
@@ -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;
@@ -36,6 +36,7 @@ const cmate_cli_tool_parser_1 = require("../../lib/cmate-cli-tool-parser");
36
36
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
37
37
  const agent_event_state_1 = require("../../lib/session/agent-event-state");
38
38
  const session_start_error_1 = require("../../lib/session/session-start-error");
39
+ const launch_screen_1 = require("../../lib/session/launch-screen");
39
40
  const logger = (0, logger_1.createLogger)('claude-session');
40
41
  const execAsync = (0, util_1.promisify)(child_process_1.exec);
41
42
  // ----- Helper Functions -----
@@ -429,6 +430,11 @@ function findSessionErrorPattern(cleanOutput) {
429
430
  * reading as a zsh prompt. What changed is that six other tools can now be
430
431
  * asked the same question; see `lib/cli-tools/liveness-spec`.
431
432
  *
433
+ * Issue #3191: a `user@host …` prompt of 40 characters or more is now read as
434
+ * the shell too (claude's spec takes `SHELL_PROMPT_LINE_PATTERNS`), so a claude
435
+ * that was `/exit`ed into a long zsh / bash prompt is reported unhealthy and
436
+ * relaunched instead of timing out the next send.
437
+ *
432
438
  * @param sessionName - tmux session name
433
439
  * @returns HealthCheckResult with healthy status and optional reason
434
440
  */
@@ -674,7 +680,7 @@ async function startClaudeSession(options) {
674
680
  // and the operator's `~/.claude/settings.json` (measured on 2.1.278).
675
681
  const launchCommand = model === undefined ? baseLaunchCommand : `${baseLaunchCommand} --model ${(0, hook_settings_generator_1.shellQuote)(model)}`;
676
682
  // Start Claude CLI in interactive mode using dynamically resolved path
677
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
683
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
678
684
  // Wait for Claude to initialize with dynamic detection (OCP-001)
679
685
  // Use constants instead of hardcoded values
680
686
  const maxWaitTime = exports.CLAUDE_INIT_TIMEOUT;