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
@@ -4,7 +4,7 @@
4
4
  * Manages Claude CLI sessions within tmux for each worktree
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.CLAUDE_PROMPT_POLL_INTERVAL = exports.CLAUDE_SEND_PROMPT_WAIT_TIMEOUT = exports.CLAUDE_PROMPT_WAIT_TIMEOUT = exports.CLAUDE_POST_PROMPT_DELAY = exports.CLAUDE_INIT_POLL_INTERVAL = exports.CLAUDE_INIT_TIMEOUT = void 0;
7
+ exports.CLAUDE_PROMPT_POLL_INTERVAL = exports.CLAUDE_SEND_PROMPT_WAIT_TIMEOUT = exports.CLAUDE_PROMPT_WAIT_TIMEOUT = exports.CLAUDE_TRUST_DIALOG_EXITED = exports.CLAUDE_TRUST_DIALOG_CURSOR_STUCK = exports.CLAUDE_POST_PROMPT_DELAY = exports.CLAUDE_INIT_POLL_INTERVAL = exports.CLAUDE_INIT_TIMEOUT = void 0;
8
8
  exports.clearCachedClaudePath = clearCachedClaudePath;
9
9
  exports.isSessionHealthy = isSessionHealthy;
10
10
  exports.getSessionName = getSessionName;
@@ -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 -----
@@ -130,6 +131,122 @@ exports.CLAUDE_INIT_POLL_INTERVAL = 300;
130
131
  * @see Issue #152 - First message not being sent after session start
131
132
  */
132
133
  exports.CLAUDE_POST_PROMPT_DELAY = 500;
134
+ /**
135
+ * Polls (of CLAUDE_INIT_POLL_INTERVAL) a still-open trust dialog is given to
136
+ * close after being answered before it is answered again (Issue #3078). The
137
+ * measured close is ~950 ms (Issue #1637), so 10 polls = 3 s is not a race.
138
+ */
139
+ const TRUST_DIALOG_REANSWER_POLLS = 10;
140
+ /** Upper bound on trust dialog answers per session start (Issue #3078). */
141
+ const TRUST_DIALOG_MAX_ANSWERS = 3;
142
+ /**
143
+ * Polls a cursor move is given to show up on screen before the next one is
144
+ * sent (Issue #3089). 3 polls = ~900 ms: a TUI that is not taking keys yet
145
+ * swallows the move, and the next one goes in once the screen still shows the
146
+ * cursor off `Yes`.
147
+ */
148
+ const TRUST_DIALOG_MOVE_SETTLE_POLLS = 3;
149
+ /**
150
+ * Upper bound on single cursor moves per session start (Issue #3089). 20 moves
151
+ * at TRUST_DIALOG_MOVE_SETTLE_POLLS apart is ~18 s of a TUI that will not move its
152
+ * cursor; past that the start fails without ever pressing Enter.
153
+ */
154
+ const TRUST_DIALOG_MAX_MOVES = 20;
155
+ /** Reported when the cursor never reached `Yes` (Issue #3089). A fixed string, never captured output. */
156
+ exports.CLAUDE_TRUST_DIALOG_CURSOR_STUCK = 'trust dialog: cursor did not reach "Yes, I trust this folder"';
157
+ /** Reported when Claude Code quit from the trust dialog (Issue #3089). A fixed string, never captured output. */
158
+ exports.CLAUDE_TRUST_DIALOG_EXITED = 'trust dialog: Claude Code exited to the shell';
159
+ /**
160
+ * One poll's answer to the folder-trust dialog (Issue #201 / #3078 / #3089).
161
+ *
162
+ * Enter confirms whichever option the cursor is on, and since 2.1.259 that is
163
+ * `No, exit` by default (which quits Claude Code). So Enter is sent only when
164
+ * THIS screen shows the cursor on `Yes, I trust this folder`. Otherwise one
165
+ * move key goes in, and the screen is read again on a later poll: sending
166
+ * `Down Enter` together lost the `Down` to a TUI that was not taking keys yet
167
+ * and confirmed `No, exit` (Issue #3089). Both are bounded: Enter is repeated
168
+ * TRUST_DIALOG_REANSWER_POLLS apart up to TRUST_DIALOG_MAX_ANSWERS times for a
169
+ * dialog that outlives it, and a cursor that has not reached Yes after
170
+ * TRUST_DIALOG_MAX_MOVES moves fails the start without Enter.
171
+ *
172
+ * @param sessionName - tmux session name
173
+ * @param dialogScreen - ANSI-stripped pane output when the dialog is open, else null
174
+ * @param state - Mutated in place
175
+ * @throws {SessionStartFailedError} When the move budget is spent
176
+ */
177
+ async function answerTrustDialog(sessionName, dialogScreen, state) {
178
+ if (state.pollsSinceAnswer !== null)
179
+ state.pollsSinceAnswer++;
180
+ if (state.pollsSinceMove !== null)
181
+ state.pollsSinceMove++;
182
+ if (dialogScreen === null)
183
+ return;
184
+ if (!state.seen) {
185
+ state.seen = true;
186
+ state.shellTellsExit = await paneCommandIsAgent(sessionName);
187
+ }
188
+ const keys = (0, cli_patterns_1.resolveClaudeTrustDialogKeys)(dialogScreen);
189
+ if (keys === null)
190
+ return;
191
+ if (keys.length === 1) {
192
+ // Cursor on Yes, on this very screen: the Issue #201 Enter.
193
+ const due = state.pollsSinceAnswer === null ||
194
+ (state.pollsSinceAnswer >= TRUST_DIALOG_REANSWER_POLLS && state.answers < TRUST_DIALOG_MAX_ANSWERS);
195
+ if (!due)
196
+ return;
197
+ try {
198
+ await (0, tmux_1.sendKeys)(sessionName, '', true);
199
+ state.pollsSinceAnswer = 0;
200
+ state.answers++;
201
+ logger.info('trust-dialog-detected', { keys: 'Enter', attempt: state.answers });
202
+ }
203
+ catch {
204
+ // Left unhandled so a later poll answers the dialog again
205
+ }
206
+ return;
207
+ }
208
+ // Cursor off Yes: one move, then look again before anything else.
209
+ if (state.pollsSinceMove !== null && state.pollsSinceMove < TRUST_DIALOG_MOVE_SETTLE_POLLS)
210
+ return;
211
+ if (state.moves >= TRUST_DIALOG_MAX_MOVES) {
212
+ throw new session_start_error_1.SessionStartFailedError('Claude Code', sessionName, exports.CLAUDE_TRUST_DIALOG_CURSOR_STUCK);
213
+ }
214
+ try {
215
+ await (0, tmux_1.sendSpecialKeys)(sessionName, [keys[0]]);
216
+ state.pollsSinceMove = 0;
217
+ state.moves++;
218
+ logger.info('trust-dialog-cursor-move', { key: keys[0], attempt: state.moves });
219
+ }
220
+ catch {
221
+ // Left unhandled so a later poll moves the cursor again
222
+ }
223
+ }
224
+ /**
225
+ * Whether the pane's foreground process is a shell again (Issue #3089). A
226
+ * pane tmux cannot describe is not called exited; the start budget still
227
+ * bounds that case. Only asked when {@link TrustDialogState.shellTellsExit}.
228
+ *
229
+ * @param sessionName - tmux session name
230
+ */
231
+ async function hasReturnedToShell(sessionName) {
232
+ const command = await readPaneCommand(sessionName);
233
+ return command !== null && (0, cli_patterns_1.isShellPaneCommand)(command);
234
+ }
235
+ /** Whether the pane's foreground command is known and is not a shell (Issue #3089). */
236
+ async function paneCommandIsAgent(sessionName) {
237
+ const command = await readPaneCommand(sessionName);
238
+ return command !== null && !(0, cli_patterns_1.isShellPaneCommand)(command);
239
+ }
240
+ /** `#{pane_current_command}`, or null when it cannot be read. */
241
+ async function readPaneCommand(sessionName) {
242
+ try {
243
+ const command = await (0, tmux_1.getPaneCurrentCommand)(sessionName);
244
+ return typeof command === 'string' ? command : null;
245
+ }
246
+ catch {
247
+ return null;
248
+ }
249
+ }
133
250
  /**
134
251
  * Prompt wait timeout before message send (milliseconds)
135
252
  *
@@ -313,6 +430,11 @@ function findSessionErrorPattern(cleanOutput) {
313
430
  * reading as a zsh prompt. What changed is that six other tools can now be
314
431
  * asked the same question; see `lib/cli-tools/liveness-spec`.
315
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
+ *
316
438
  * @param sessionName - tmux session name
317
439
  * @returns HealthCheckResult with healthy status and optional reason
318
440
  */
@@ -558,14 +680,15 @@ async function startClaudeSession(options) {
558
680
  // and the operator's `~/.claude/settings.json` (measured on 2.1.278).
559
681
  const launchCommand = model === undefined ? baseLaunchCommand : `${baseLaunchCommand} --model ${(0, hook_settings_generator_1.shellQuote)(model)}`;
560
682
  // Start Claude CLI in interactive mode using dynamically resolved path
561
- await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
683
+ await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
562
684
  // Wait for Claude to initialize with dynamic detection (OCP-001)
563
685
  // Use constants instead of hardcoded values
564
686
  const maxWaitTime = exports.CLAUDE_INIT_TIMEOUT;
565
687
  const pollInterval = exports.CLAUDE_INIT_POLL_INTERVAL;
566
688
  const startTime = Date.now();
567
689
  let initialized = false;
568
- let trustDialogHandled = false;
690
+ // Issue #3078 / #3089: the trust dialog's progress this start.
691
+ const trust = { pollsSinceAnswer: null, pollsSinceMove: null, answers: 0, moves: 0, seen: false, shellTellsExit: false };
569
692
  while (Date.now() - startTime < maxWaitTime) {
570
693
  await new Promise((resolve) => setTimeout(resolve, pollInterval));
571
694
  // SF-001: Use getCleanPaneOutput helper (DRY)
@@ -579,28 +702,27 @@ async function startClaudeSession(options) {
579
702
  if (cleanOutput === null) {
580
703
  continue;
581
704
  }
705
+ // Issue #201 / #3078 / #3089: answer the folder-trust dialog. Checked
706
+ // BEFORE the prompt: the dialog's cursor row (`❯ No, exit`) wears the
707
+ // prompt glyph, so an open dialog is never read as a ready prompt.
708
+ const trustDialogOpen = (0, cli_patterns_1.isClaudeTrustDialogOpen)(cleanOutput);
709
+ await answerTrustDialog(sessionName, trustDialogOpen ? cleanOutput : null, trust);
582
710
  // Claude is ready when we see the prompt (DRY-001)
583
711
  // Use CLAUDE_PROMPT_PATTERN from cli-patterns.ts for consistency
584
712
  // Note: CLAUDE_SEPARATOR_PATTERN was removed from initialization check (Issue #187, P1-1)
585
- if (cli_patterns_1.CLAUDE_PROMPT_PATTERN.test(cleanOutput)) {
713
+ if (!trustDialogOpen && cli_patterns_1.CLAUDE_PROMPT_PATTERN.test(cleanOutput)) {
586
714
  // Wait for stability after prompt detection (CONS-007, DOC-001)
587
715
  await new Promise((resolve) => setTimeout(resolve, exports.CLAUDE_POST_PROMPT_DELAY));
588
716
  logger.info('claude-initialized-in');
589
717
  initialized = true;
590
718
  break;
591
719
  }
592
- // Issue #201: Detect trust dialog and auto-respond with Enter
593
- // Condition order: CLAUDE_PROMPT_PATTERN (above) is checked first for shortest path
594
- if (!trustDialogHandled && cli_patterns_1.CLAUDE_TRUST_DIALOG_PATTERN.test(cleanOutput)) {
595
- try {
596
- await (0, tmux_1.sendKeys)(sessionName, '', true);
597
- trustDialogHandled = true;
598
- logger.info('trust-dialog-detected');
599
- }
600
- catch {
601
- // Left unhandled so the next poll answers the dialog again
602
- }
603
- // Continue polling to wait for prompt detection
720
+ // Issue #3089: the dialog is gone and no prompt came up. If the pane is
721
+ // back at its shell, Claude Code quit (an Enter that landed on
722
+ // `No, exit`); nothing will ever draw a prompt, so fail now instead of
723
+ // spending the rest of the budget (and answering the shell).
724
+ if (!trustDialogOpen && trust.shellTellsExit && (await hasReturnedToShell(sessionName))) {
725
+ throw new session_start_error_1.SessionStartFailedError('Claude Code', sessionName, exports.CLAUDE_TRUST_DIALOG_EXITED);
604
726
  }
605
727
  // Issue #1637: fail fast on a start that cannot succeed. The budget is
606
728
  // 60s of patience for a *slow* start; a session already showing a
@@ -55,6 +55,7 @@ const db_1 = require("../../lib/db");
55
55
  // when this instance was last handed a prompt.
56
56
  const chat_db_1 = require("../../lib/db/chat-db");
57
57
  const unclassified_frame_tracker_1 = require("../../lib/detection/unclassified-frame-tracker");
58
+ const session_starting_state_1 = require("../../lib/session/session-starting-state");
58
59
  const composer_text_1 = require("../../lib/detection/composer-text");
59
60
  const upstream_faults_1 = require("../../lib/detection/upstream-faults");
60
61
  const opencode_pane_obstruction_1 = require("../../lib/detection/opencode-pane-obstruction");
@@ -608,7 +609,8 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId, resolut
608
609
  // surface is actually being watched at, which is exactly the property the
609
610
  // terminal snapshot already has. Gated on the merged verdict (`'running'`, not
610
611
  // the tmux-session-exists `isRunning`) so an idle pane reads no transcript.
611
- if (payload.isRunning && payload.sessionStatus === 'running') {
612
+ // Issue #3179: not during a launch — there is no turn to publish yet.
613
+ if (payload.isRunning && payload.sessionStatus === 'running' && payload.startingSince == null) {
612
614
  // Issue #2248 made this an `await`, and it buys less than it looks like: the
613
615
  // expensive half — the transcript read and the broadcast — is detached
614
616
  // inside, so what is waited for is a worktree row and a Map lookup. What it
@@ -750,6 +752,10 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
750
752
  (0, status_evidence_1.forgetLastKnownStatus)((0, auto_yes_manager_1.buildCompositeKey)(worktreeId, cliToolId, instanceId));
751
753
  return {
752
754
  isRunning: false,
755
+ // Issue #3179: `beginAgentSession` runs before the pane is created, so a
756
+ // launch can be in progress with no tmux session yet. Read-only here —
757
+ // there is no frame to judge a dialog on.
758
+ startingSince: (0, session_starting_state_1.getSessionStartingSince)(worktreeId, cliToolId, instanceId),
753
759
  sessionName,
754
760
  content: '',
755
761
  lineCount: 0,
@@ -828,7 +834,17 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
828
834
  const compositeKey = (0, auto_yes_manager_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
829
835
  const lastServerResponseTimestamp = (0, auto_yes_manager_1.getLastServerResponseTimestamp)(compositeKey);
830
836
  const lastOutputTimestamp = lastServerResponseTimestamp ? new Date(lastServerResponseTimestamp) : undefined;
831
- const statusResult = (0, status_detector_1.detectSessionStatus)(output, cliToolId, lastOutputTimestamp);
837
+ const rawStatusResult = (0, status_detector_1.detectSessionStatus)(output, cliToolId, lastOutputTimestamp);
838
+ // Issue #3179: a launch in progress. The frame is a shell prompt and the
839
+ // launch line, or a dialog the launch is about to answer, and none of the
840
+ // flags below may be read off it: the floor verdict raised the Navigate pad,
841
+ // the trust dialog raised the selection list / prompt sheet. A dialog that
842
+ // outstays the launch's own answer releases the record (a login, an unknown
843
+ // dialog), and from then on this is the ordinary verdict again.
844
+ const startingSince = (0, session_starting_state_1.observeSessionStartingFrame)(worktreeId, cliToolId, instanceId, rawStatusResult.status === 'waiting' || rawStatusResult.hasActivePrompt);
845
+ const statusResult = startingSince === null
846
+ ? rawStatusResult
847
+ : (0, session_starting_state_1.startingStatusResult)(rawStatusResult);
832
848
  // Issue #1912: every `running` reason that means "the agent is producing
833
849
  // output", not just `thinking_indicator`. opencode answers
834
850
  // `opencode_processing_indicator` for its `esc interrupt` footer, which is
@@ -946,7 +962,9 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
946
962
  // the guard cannot disagree about whether a prompt is open. What they are
947
963
  // still allowed to differ on is what to DO about it — see `blocksSend`, which
948
964
  // bounds the structured layer's veto over sends and leaves this flag alone.
949
- const isPromptWaiting = promptResolution.waiting;
965
+ // Issue #3179: not while a launch is in progress. The scraper half is already
966
+ // neutralised above; this also drops a structured wait the launch inherited.
967
+ const isPromptWaiting = startingSince === null && promptResolution.waiting;
950
968
  // Issue #1726: the agent's own account of what it asked. It contributes only
951
969
  // where some other layer has already established that a dialog is on screen —
952
970
  // this record decides no status of its own, because Claude emits nothing at
@@ -1033,13 +1051,15 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
1033
1051
  // instead of by coincidence.)
1034
1052
  patterns: decisionOptions !== null ? promptWaiting.patterns : null,
1035
1053
  };
1036
- const promptData = scraperPromptWaiting
1037
- ? correctedPromptData ??
1038
- scraperPromptData ??
1039
- (structuredFacts ? (0, structured_prompt_1.buildStructuredPromptData)(worktreeId, structuredFacts) : null)
1040
- : structuredFacts
1041
- ? (0, structured_prompt_1.buildStructuredPromptData)(worktreeId, structuredFacts)
1042
- : null;
1054
+ const promptData = startingSince !== null
1055
+ ? null
1056
+ : scraperPromptWaiting
1057
+ ? correctedPromptData ??
1058
+ scraperPromptData ??
1059
+ (structuredFacts ? (0, structured_prompt_1.buildStructuredPromptData)(worktreeId, structuredFacts) : null)
1060
+ : structuredFacts
1061
+ ? (0, structured_prompt_1.buildStructuredPromptData)(worktreeId, structuredFacts)
1062
+ : null;
1043
1063
  // Issue #2870: whether `/prompt-response` would answer the prompt published
1044
1064
  // above, read by the SAME function it re-verifies with. In #2868 `promptData`
1045
1065
  // came off the generic parser alone, the route refused it, and the UI's Send
@@ -1111,7 +1131,9 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
1111
1131
  // and the 60 seconds — start afresh if the frame is still unreadable once the
1112
1132
  // decision is gone (answered, expired, or the source dropped).
1113
1133
  const answerableOverAgentApi = (0, structured_prompt_1.hasApiAnswerableDecision)(eventSource.capabilities.eventIdentity, structuredEvents.pendingDecisions ?? []);
1114
- const unclassifiedVerdict = (0, unclassified_frame_tracker_1.observeUnclassifiedFrame)(compositeKey, merged.isUnclassifiedActive && !answerableOverAgentApi);
1134
+ // Issue #3179: a launch in progress is not a detection failure — its frame is
1135
+ // the shell and the launch line — so no row, and the run starts afresh after.
1136
+ const unclassifiedVerdict = (0, unclassified_frame_tracker_1.observeUnclassifiedFrame)(compositeKey, merged.isUnclassifiedActive && !answerableOverAgentApi && startingSince === null);
1115
1137
  if (unclassifiedVerdict.shouldRecord) {
1116
1138
  recordUnclassifiedFrame(db, {
1117
1139
  worktreeId,
@@ -1197,29 +1219,34 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
1197
1219
  // `sessionStatus` it sat next to one poll earlier. Observed before it is read
1198
1220
  // so a positive poll reports itself, which is what keeps the field from
1199
1221
  // looking stale on a healthy session.
1222
+ // Issue #3179: the structured layer cannot override a launch in progress
1223
+ // either — a `waiting` it inherited would put the answer sheet back.
1224
+ const published = startingSince === null
1225
+ ? merged
1226
+ : { ...merged, status: 'running', reason: status_detector_1.STATUS_REASON.STARTING, thinking: false };
1200
1227
  (0, status_evidence_1.observeStatusEvidence)(compositeKey, {
1201
- status: merged.status,
1202
- reason: merged.reason,
1203
- evidence: merged.evidence,
1228
+ status: published.status,
1229
+ reason: published.reason,
1230
+ evidence: published.evidence,
1204
1231
  });
1205
1232
  const lastKnown = (0, status_evidence_1.getLastKnownStatus)(compositeKey);
1206
1233
  return {
1207
1234
  isRunning: true,
1208
1235
  sessionName,
1209
1236
  cliToolId,
1210
- sessionStatus: merged.status,
1211
- sessionStatusReason: merged.reason,
1237
+ sessionStatus: published.status,
1238
+ sessionStatusReason: published.reason,
1212
1239
  content: newContent,
1213
1240
  fullOutput: output,
1214
1241
  realtimeSnippet,
1215
1242
  lineCount: totalLines,
1216
1243
  lastCapturedLine,
1217
1244
  isComplete: isPromptWaiting,
1218
- isGenerating: merged.thinking,
1219
- thinking: merged.thinking,
1245
+ isGenerating: published.thinking,
1246
+ thinking: published.thinking,
1220
1247
  // Issue #2607: named after the tool actually running. A fixed "Claude" was
1221
1248
  // published for every agent, and `capture --json` readers took it at its word.
1222
- thinkingMessage: merged.thinking ? `${(0, types_2.getCliToolDisplayName)(cliToolId)} is thinking...` : null,
1249
+ thinkingMessage: published.thinking ? `${(0, types_2.getCliToolDisplayName)(cliToolId)} is thinking...` : null,
1223
1250
  isPromptWaiting,
1224
1251
  promptData,
1225
1252
  ...(promptAnswerable !== undefined ? { promptAnswerable } : {}),
@@ -1235,11 +1262,12 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
1235
1262
  isSelectionListActive,
1236
1263
  isPagerActive,
1237
1264
  isDismissablePanelActive,
1238
- isUnclassifiedActive: merged.isUnclassifiedActive,
1265
+ isUnclassifiedActive: startingSince === null && merged.isUnclassifiedActive,
1266
+ startingSince,
1239
1267
  // Issue #1926: the same fact `isUnclassifiedActive` carries, named the way
1240
1268
  // §4 D1 names it. Published from the merged verdict so the two cannot
1241
1269
  // disagree on the wire.
1242
- statusEvidence: merged.evidence,
1270
+ statusEvidence: published.evidence,
1243
1271
  lastKnownStatus: lastKnown?.status ?? null,
1244
1272
  lastKnownStatusAt: lastKnown?.at ?? null,
1245
1273
  lastServerResponseTimestamp,
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * Keep the launch line off the pane (Issue #3180).
4
+ *
5
+ * Every `startSession` types its launch line into the pane's login shell —
6
+ * `CM_HOOK_URL='…' CM_PERMISSION_HOOK_URL='…' CM_PORT='3000' 'agy'` — and the
7
+ * shell echoes it. A tool that repaints the whole screen hides the echo once it
8
+ * draws; agy and codex draw inline, so the line, with its internal URL, port
9
+ * and worktree ID, stayed in the scrollback for the life of the session.
10
+ *
11
+ * `clear` runs in the same shell, before the agent, so the echo is wiped before
12
+ * the agent paints. The shell stays the agent's parent exactly as before, which
13
+ * is what keeps exit detection (`judgeToolLiveness`, `relaunchIfToolExited`)
14
+ * unchanged: when the agent quits, the pane falls back to the same shell prompt.
15
+ *
16
+ * `clear` alone only empties the visible screen. tmux 3.4+ defaults to
17
+ * `scroll-on-clear on`, which moves what `clear` wiped INTO the scrollback, and
18
+ * CommandMate's capture reads the scrollback: in the 2026-10-04 UAT (tmux 3.5a)
19
+ * codex, antigravity, Command Code and gemini still had the launch line twice in
20
+ * `tmux capture-pane -p -J -S -` (two `CM_HOOK_URL` hits), and it surfaced in the
21
+ * UI terminal and in codex's trust-dialog sheet. So `printf '\033[3J'` follows
22
+ * `clear`: ESC [3J (Erase Saved Lines) drops the scrollback, the echo included.
23
+ * `tmux clear-history` would also work but depends on the pane having a tmux
24
+ * binary and `TMUX` set, so it is not used. `printf` is a builtin in zsh, bash,
25
+ * dash and fish, and each reads `\033` in the format as octal ESC; the single
26
+ * quotes keep the backslash for printf in all of them.
27
+ *
28
+ * Joined with `;`, not `&&`, and with `clear`'s stderr dropped: a pane whose
29
+ * `clear` is missing or fails (unknown `TERM`, no ncurses), or whose `printf`
30
+ * fails, must still start the agent — a launch line left on screen is a
31
+ * cosmetic leak, a session that never starts is not — and must not print the
32
+ * failure in the line's place.
33
+ *
34
+ * Applied at the `sendKeys` call site, AFTER any flags a tool appends
35
+ * (`--model`, `-s <id>`, Command Code's launch flags): `buildAgentLaunchCommandLine`
36
+ * stays `NAME='value' … command`, and an appended flag lands on the agent, not
37
+ * on `clear`.
38
+ *
39
+ * Deliberately not in a module the session suites mock wholesale
40
+ * (`agent-session-lifecycle`, `tmux`), so those suites see the real prefix.
41
+ *
42
+ * @module lib/session/launch-screen
43
+ */
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.LAUNCH_SCREEN_CLEAR_PREFIX = void 0;
46
+ exports.withLaunchScreenCleared = withLaunchScreenCleared;
47
+ /** The prefix every launch line is typed with. */
48
+ exports.LAUNCH_SCREEN_CLEAR_PREFIX = "clear 2>/dev/null; printf '\\033[3J'; ";
49
+ /**
50
+ * The line to type into the pane: clear the screen and the scrollback, then launch.
51
+ *
52
+ * @param launchCommand - The rendered launch line, flags included
53
+ * @returns `clear 2>/dev/null; printf '\033[3J'; <launchCommand>`
54
+ */
55
+ function withLaunchScreenCleared(launchCommand) {
56
+ return `${exports.LAUNCH_SCREEN_CLEAR_PREFIX}${launchCommand}`;
57
+ }
@@ -30,6 +30,7 @@
30
30
  */
31
31
  Object.defineProperty(exports, "__esModule", { value: true });
32
32
  exports.SessionStartUnavailableError = exports.SessionStartFailedError = exports.SessionStartTimeoutError = exports.SESSION_START_UNAVAILABLE_CODE = exports.SESSION_START_FAILED_CODE = exports.SESSION_STARTING_CODE = void 0;
33
+ exports.buildSessionExitedToShellMessage = buildSessionExitedToShellMessage;
33
34
  exports.isSessionStartTimeoutError = isSessionStartTimeoutError;
34
35
  exports.isSafeSessionStartError = isSafeSessionStartError;
35
36
  exports.isSessionStartUnavailableError = isSessionStartUnavailableError;
@@ -81,6 +82,25 @@ class SessionStartTimeoutError extends Error {
81
82
  }
82
83
  }
83
84
  exports.SessionStartTimeoutError = SessionStartTimeoutError;
85
+ /**
86
+ * The message for a start timeout whose pane is back at a shell (Issue #3093).
87
+ *
88
+ * {@link SessionStartTimeoutError} says "the process is still running, so this
89
+ * is a slow start … nothing needs repairing" — true for a slow cold start, and
90
+ * exactly wrong when the agent quit during startup (e.g. a trust dialog that
91
+ * was answered with "No, exit"): the reader was told to wait for a process that
92
+ * no longer exists. Built from the tool's display name and the session name
93
+ * only, for the same SEC-SF-002 reason as the classes in this module.
94
+ *
95
+ * @param toolName - Display name of the CLI tool (e.g. `Claude Code`)
96
+ * @param sessionName - tmux session whose pane is back at a shell
97
+ */
98
+ function buildSessionExitedToShellMessage(toolName, sessionName) {
99
+ return (`${toolName} exited before reaching its input prompt: the tmux session '${sessionName}' ` +
100
+ 'is back at a shell, so this is not a slow start and waiting will not help. The message ' +
101
+ 'was not delivered. Run `commandmate capture <worktree-id>` to see why it exited (for ' +
102
+ 'example a startup dialog answered with exit, or a missing login), fix that, then send again.');
103
+ }
84
104
  /**
85
105
  * The CLI tool printed an error that startup cannot recover from.
86
106
  *