commandmate 0.44.1 → 0.44.3

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 (604) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +169 -169
  3. package/.next/app-path-routes-manifest.json +35 -35
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +0 -6
  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 +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 +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_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/login/route.js +1 -1
  18. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/capabilities/route.js +1 -1
  22. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/route.js +1 -1
  24. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  25. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/daily-summary/status/route.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_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/external-apps/route.js +1 -1
  33. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  37. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  40. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  41. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  43. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  44. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/push/escalation/route.js +1 -1
  48. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/push/subscriptions/route.js +2 -2
  50. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/push/vapid/route.js +1 -1
  52. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  54. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  55. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/relays/route.js +1 -1
  57. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  58. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/clone/route.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/restore/route.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  71. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/route.js +1 -1
  73. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/scan/route.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/sync/route.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  83. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  84. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/skills/[id]/route.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/route.js +1 -1
  94. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/templates/[id]/route.js +2 -2
  99. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/templates/route.js +2 -2
  101. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  106. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -2
  192. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -2
  195. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  208. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  211. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  214. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/route.js +1 -1
  264. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  267. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  273. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/sessions/page.js +1 -1
  275. package/.next/server/app/sessions/page.js.nft.json +1 -1
  276. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/worktrees/[id]/page.js +11 -11
  282. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  283. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  285. package/.next/server/app-paths-manifest.json +35 -35
  286. package/.next/server/chunks/1191.js +2 -2
  287. package/.next/server/chunks/1210.js +1 -1
  288. package/.next/server/chunks/1559.js +2 -0
  289. package/.next/server/chunks/1789.js +1 -0
  290. package/.next/server/chunks/2119.js +1 -1
  291. package/.next/server/chunks/2404.js +1 -1
  292. package/.next/server/chunks/2445.js +1 -1
  293. package/.next/server/chunks/2460.js +1 -0
  294. package/.next/server/chunks/2710.js +1 -1
  295. package/.next/server/chunks/2908.js +1 -0
  296. package/.next/server/chunks/2980.js +1 -1
  297. package/.next/server/chunks/3241.js +1 -1
  298. package/.next/server/chunks/3480.js +1 -1
  299. package/.next/server/chunks/3718.js +1 -1
  300. package/.next/server/chunks/4207.js +2 -2
  301. package/.next/server/chunks/450.js +1 -1
  302. package/.next/server/chunks/4672.js +5 -0
  303. package/.next/server/chunks/{9353.js → 4718.js} +2 -2
  304. package/.next/server/chunks/4837.js +14 -0
  305. package/.next/server/chunks/5048.js +1 -1
  306. package/.next/server/chunks/5209.js +1 -0
  307. package/.next/server/chunks/5595.js +1 -0
  308. package/.next/server/chunks/5625.js +25 -0
  309. package/.next/server/chunks/5845.js +1 -0
  310. package/.next/server/chunks/611.js +1 -1
  311. package/.next/server/chunks/6130.js +1 -1
  312. package/.next/server/chunks/6401.js +1 -1
  313. package/.next/server/chunks/6781.js +1 -1
  314. package/.next/server/chunks/6793.js +3 -3
  315. package/.next/server/chunks/7491.js +2 -2
  316. package/.next/server/chunks/7905.js +1 -1
  317. package/.next/server/chunks/850.js +1 -0
  318. package/.next/server/chunks/8543.js +1 -1
  319. package/.next/server/chunks/8728.js +3 -3
  320. package/.next/server/chunks/8791.js +1 -1
  321. package/.next/server/chunks/8800.js +1 -1
  322. package/.next/server/chunks/8918.js +7 -7
  323. package/.next/server/chunks/9130.js +1 -5
  324. package/.next/server/chunks/9390.js +2 -3
  325. package/.next/server/chunks/9584.js +1 -1
  326. package/.next/server/chunks/9627.js +6 -6
  327. package/.next/server/chunks/9731.js +3 -3
  328. package/.next/server/middleware-manifest.json +5 -5
  329. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  330. package/.next/server/pages/500.html +1 -1
  331. package/.next/server/server-reference-manifest.json +1 -1
  332. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  333. package/.next/static/chunks/{2407-f1f258d4a1d92620.js → 2407-06d35bb1aa02de80.js} +1 -1
  334. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  335. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  336. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  337. package/.next/static/chunks/app/{layout-da66300cc20244ed.js → layout-0d1750b833f5cc3e.js} +1 -1
  338. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  339. package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
  340. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  341. package/.next/static/css/057f64a65726c439.css +1 -0
  342. package/.next/trace +13 -13
  343. package/dist/cli/commands/ask.d.ts.map +1 -1
  344. package/dist/cli/commands/ask.js +120 -119
  345. package/dist/cli/commands/attach.d.ts +94 -0
  346. package/dist/cli/commands/attach.d.ts.map +1 -1
  347. package/dist/cli/commands/attach.js +145 -7
  348. package/dist/cli/commands/auto-yes.js +1 -1
  349. package/dist/cli/commands/capture.d.ts.map +1 -1
  350. package/dist/cli/commands/capture.js +10 -13
  351. package/dist/cli/commands/command-target.d.ts +23 -0
  352. package/dist/cli/commands/command-target.d.ts.map +1 -0
  353. package/dist/cli/commands/command-target.js +25 -0
  354. package/dist/cli/commands/instances.d.ts.map +1 -1
  355. package/dist/cli/commands/instances.js +41 -2
  356. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  357. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  358. package/dist/cli/commands/message-dispatch.js +63 -0
  359. package/dist/cli/commands/reply.d.ts.map +1 -1
  360. package/dist/cli/commands/reply.js +2 -5
  361. package/dist/cli/commands/respond.d.ts.map +1 -1
  362. package/dist/cli/commands/respond.js +3 -6
  363. package/dist/cli/commands/send.d.ts.map +1 -1
  364. package/dist/cli/commands/send.js +149 -146
  365. package/dist/cli/commands/wait.d.ts.map +1 -1
  366. package/dist/cli/commands/wait.js +608 -416
  367. package/dist/cli/types/api-responses.d.ts +174 -27
  368. package/dist/cli/types/api-responses.d.ts.map +1 -1
  369. package/dist/cli/types/api-responses.js +4 -2
  370. package/dist/cli/utils/api-client.d.ts +25 -5
  371. package/dist/cli/utils/api-client.d.ts.map +1 -1
  372. package/dist/cli/utils/api-client.js +87 -55
  373. package/dist/cli/utils/server-url.d.ts +1 -0
  374. package/dist/cli/utils/server-url.d.ts.map +1 -1
  375. package/dist/cli/utils/server-url.js +7 -0
  376. package/dist/config/uat-isolation.d.ts +140 -0
  377. package/dist/config/uat-isolation.d.ts.map +1 -0
  378. package/dist/config/uat-isolation.js +246 -0
  379. package/dist/lib/global-state.d.ts +12 -0
  380. package/dist/lib/global-state.d.ts.map +1 -0
  381. package/dist/lib/global-state.js +16 -0
  382. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  383. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  384. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  385. package/dist/lib/session/prompt-view.d.ts +228 -0
  386. package/dist/lib/session/prompt-view.d.ts.map +1 -0
  387. package/dist/lib/session/prompt-view.js +290 -0
  388. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  389. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  390. package/dist/lib/session/status-evidence-type.js +2 -0
  391. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  392. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  393. package/dist/server/locales/en/worktree.json +3 -1
  394. package/dist/server/locales/ja/worktree.json +3 -1
  395. package/dist/server/server.js +5 -3
  396. package/dist/server/src/cli/types/api-responses.js +4 -2
  397. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  398. package/dist/server/src/config/uat-isolation.js +246 -0
  399. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  400. package/dist/server/src/lib/auto-yes-lifecycle.js +139 -0
  401. package/dist/server/src/lib/auto-yes-poller.js +465 -160
  402. package/dist/server/src/lib/auto-yes-state.js +2 -2
  403. package/dist/server/src/lib/cli-tools/antigravity.js +39 -80
  404. package/dist/server/src/lib/cli-tools/base.js +151 -0
  405. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  406. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  407. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  408. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  409. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  410. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  411. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  412. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  413. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  414. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  415. package/dist/server/src/lib/detection/cli-patterns.js +374 -3047
  416. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  417. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  418. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  419. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  420. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  421. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  422. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  423. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  424. package/dist/server/src/lib/detection/status-detector.js +1 -1
  425. package/dist/server/src/lib/detection/tools/antigravity/detect.js +12 -60
  426. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  427. package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
  428. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  429. package/dist/server/src/lib/detection/tools/claude/detect.js +11 -17
  430. package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
  431. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  432. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  433. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +1 -1
  434. package/dist/server/src/lib/detection/tools/codex/detect.js +71 -130
  435. package/dist/server/src/lib/detection/tools/codex/live-region.js +104 -0
  436. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  437. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  438. package/dist/server/src/lib/detection/tools/command-code/detect.js +19 -50
  439. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  440. package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
  441. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  442. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  443. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  444. package/dist/server/src/lib/detection/tools/copilot/detect.js +13 -35
  445. package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
  446. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  447. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  448. package/dist/server/src/lib/detection/tools/frame.js +36 -2
  449. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  450. package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
  451. package/dist/server/src/lib/detection/tools/live-region.js +204 -0
  452. package/dist/server/src/lib/detection/tools/opencode/detect.js +11 -49
  453. package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
  454. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  455. package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
  456. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +10 -42
  457. package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
  458. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  459. package/dist/server/src/lib/detection/tools/run-detection.js +31 -50
  460. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  461. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  462. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  463. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  464. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  465. package/dist/server/src/lib/global-state.js +16 -0
  466. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  467. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  468. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  469. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  470. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  471. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  472. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  473. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  474. package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
  475. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  476. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  477. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  478. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  479. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  480. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  481. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  482. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  483. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  484. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  485. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  486. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  487. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  488. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  489. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  490. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  491. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  492. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  493. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  494. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  495. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  496. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  497. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  498. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  499. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  500. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  501. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  502. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  503. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +16 -4
  504. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  505. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  506. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  507. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  508. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  509. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  510. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  511. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  512. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  513. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  514. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  515. package/dist/server/src/lib/polling/response-checker.js +666 -1162
  516. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  517. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  518. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  519. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  520. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  521. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  522. package/dist/server/src/lib/prompt-answer-sender.js +6 -5
  523. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  524. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  525. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  526. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  527. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  528. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -2
  529. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  530. package/dist/server/src/lib/relay/relay-delivery.js +6 -2
  531. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  532. package/dist/server/src/lib/relay/relay-triggers.js +9 -0
  533. package/dist/server/src/lib/resource-cleanup.js +6 -4
  534. package/dist/server/src/lib/response-cleaner.js +24 -1
  535. package/dist/server/src/lib/response-extractor.js +16 -0
  536. package/dist/server/src/lib/schedule-manager.js +8 -10
  537. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  538. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  539. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  540. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  541. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  542. package/dist/server/src/lib/session/agent-event-state.js +106 -1854
  543. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  544. package/dist/server/src/lib/session/agent-event-turn.js +811 -0
  545. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  546. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  547. package/dist/server/src/lib/session/claude-executor.js +45 -5
  548. package/dist/server/src/lib/session/claude-session.js +21 -65
  549. package/dist/server/src/lib/session/cli-session.js +17 -0
  550. package/dist/server/src/lib/session/current-output-builder.js +454 -1103
  551. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  552. package/dist/server/src/lib/session/current-output-types.js +9 -0
  553. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  554. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  555. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  556. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  557. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  558. package/dist/server/src/lib/session/prompt-view.js +290 -0
  559. package/dist/server/src/lib/session/prompt-waiting-composition.js +35 -0
  560. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  561. package/dist/server/src/lib/session/send-user-message.js +1 -1
  562. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  563. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  564. package/dist/server/src/lib/session/status-evidence.js +2 -2
  565. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  566. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  567. package/dist/server/src/lib/session/waiting-kind.js +3 -0
  568. package/dist/server/src/lib/session-cleanup.js +6 -8
  569. package/dist/server/src/lib/skills/install-plan.js +2 -1
  570. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  571. package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
  572. package/dist/server/src/lib/timer-manager.js +6 -8
  573. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  574. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  575. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  576. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  577. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  578. package/dist/server/src/lib/tmux/tmux.js +33 -59
  579. package/dist/server/src/lib/tui-accumulator.js +2 -2
  580. package/dist/server/src/lib/version-checker.js +6 -6
  581. package/dist/server/src/lib/ws-server.js +47 -11
  582. package/docs/en/user-guide/webapp-guide.md +27 -3
  583. package/package.json +1 -1
  584. package/release-notes/0.44.2.json +33 -0
  585. package/release-notes/0.44.3.json +82 -0
  586. package/scripts/hooks/cmate-agent-event.sh +18 -0
  587. package/.next/server/chunks/1068.js +0 -1
  588. package/.next/server/chunks/434.js +0 -1
  589. package/.next/server/chunks/5775.js +0 -1
  590. package/.next/server/chunks/6474.js +0 -14
  591. package/.next/server/chunks/650.js +0 -1
  592. package/.next/server/chunks/6661.js +0 -1
  593. package/.next/server/chunks/8583.js +0 -1
  594. package/.next/server/chunks/964.js +0 -1
  595. package/.next/server/chunks/967.js +0 -1
  596. package/.next/server/chunks/9882.js +0 -25
  597. package/.next/static/chunks/591-308072f285c34787.js +0 -1
  598. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  599. package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +0 -1
  600. package/.next/static/css/38070d879efa1371.css +0 -1
  601. package/dist/server/src/lib/cli-tools/index.js +0 -41
  602. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  603. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
  604. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
@@ -50,7 +50,6 @@ const logger_1 = require("../../lib/logger");
50
50
  const tool_id_1 = require("../../lib/hooks/sources/command-code/tool-id");
51
51
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
52
52
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
53
- const install_hints_1 = require("./install-hints");
54
53
  const plan_review_state_1 = require("../detection/tools/command-code/plan-review-state");
55
54
  const session_start_error_1 = require("../../lib/session/session-start-error");
56
55
  const launch_screen_1 = require("../../lib/session/launch-screen");
@@ -202,17 +201,6 @@ class CommandCodeTool extends base_1.BaseCLITool {
202
201
  navigationKeys() {
203
202
  return { keys: terminal_keys_1.COMMAND_CODE_NAVIGATION_KEY_VALUES, leaderKey: null };
204
203
  }
205
- /**
206
- * Check if a Command Code session is running for a worktree.
207
- *
208
- * @param worktreeId - Worktree ID
209
- * @param instanceId - Agent instance ID (defaults to the primary instance)
210
- * @returns True if session is running
211
- */
212
- async isRunning(worktreeId, instanceId) {
213
- const sessionName = this.getSessionName(worktreeId, instanceId);
214
- return await (0, tmux_1.hasSession)(sessionName);
215
- }
216
204
  /**
217
205
  * Start a new Command Code session for a worktree.
218
206
  *
@@ -221,23 +209,17 @@ class CommandCodeTool extends base_1.BaseCLITool {
221
209
  * @param instanceId - Agent instance ID (defaults to the primary instance)
222
210
  */
223
211
  async launchSession(worktreeId, worktreePath, instanceId) {
224
- const available = await this.isInstalled();
225
- if (!available) {
226
- throw (0, install_hints_1.missingToolError)(this);
227
- }
228
- const sessionName = this.getSessionName(worktreeId, instanceId);
229
- const exists = await (0, tmux_1.hasSession)(sessionName);
230
- if (exists) {
231
- await this.reconcileExistingSession(sessionName, worktreePath);
232
- // Issue #2070's shape: a tmux session outlives the agent that was launched
233
- // into it, and skipping the launch for a pane holding nothing but a shell
234
- // prompt leaves `kill-session` by hand as the only recovery.
235
- if (await this.isToolLive(sessionName, { confirm: true })) {
236
- logger.info('command-code-session-exists');
237
- return;
238
- }
239
- logger.warn('command-code-session-relaunch', { sessionName });
240
- }
212
+ await this.requireInstalled();
213
+ // Issue #2070's shape: a tmux session outlives the agent that was launched
214
+ // into it, and skipping the launch for a pane holding nothing but a shell
215
+ // prompt leaves `kill-session` by hand as the only recovery.
216
+ const { sessionName, exists, live } = await this.resolveLaunchPane(worktreeId, worktreePath, instanceId, {
217
+ logger,
218
+ liveAction: 'command-code-session-exists',
219
+ relaunchAction: 'command-code-session-relaunch',
220
+ });
221
+ if (live)
222
+ return;
241
223
  // Issue #2251, seam S8: fence this instance's structured events off from the
242
224
  // process that used to hold the same (worktree, tool, instance) key. On the
243
225
  // creation path and on #2070's relaunch path — the reuse branch above has
@@ -253,11 +235,7 @@ class CommandCodeTool extends base_1.BaseCLITool {
253
235
  if (!exists) {
254
236
  // Inline-rendered, so the pane keeps scrollback; depth comes from the
255
237
  // shared TMUX_HISTORY_LIMIT default (Issue #1624).
256
- await (0, tmux_1.createSession)({
257
- sessionName,
258
- workingDirectory: worktreePath,
259
- });
260
- await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
238
+ await this.createLaunchPane(sessionName, worktreePath);
261
239
  }
262
240
  await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(buildCommandCodeLaunchCommand({
263
241
  target: { worktreeId, cliToolId: tool_id_1.COMMAND_CODE_CLI_TOOL_ID, instanceId },
@@ -367,13 +345,9 @@ class CommandCodeTool extends base_1.BaseCLITool {
367
345
  */
368
346
  async sendMessage(worktreeId, message, instanceId) {
369
347
  const sessionName = this.getSessionName(worktreeId, instanceId);
370
- const exists = await (0, tmux_1.hasSession)(sessionName);
371
- if (!exists) {
372
- throw new Error(`Command Code session ${sessionName} does not exist. Start the session first.`);
373
- }
374
348
  // Issue #2070: the pane exists, but does the AGENT? Relaunches into the same
375
349
  // pane when the tool is gone; costs one `capture-pane` when it is not.
376
- await this.relaunchIfToolExited(worktreeId, instanceId);
350
+ await this.requireSession('Command Code', worktreeId, instanceId, { relaunch: true });
377
351
  try {
378
352
  await this.waitForPrompt(sessionName);
379
353
  // Issue #1471: body/Enter separation + read-back submit verification.
@@ -407,27 +381,21 @@ class CommandCodeTool extends base_1.BaseCLITool {
407
381
  * @param instanceId - Agent instance ID (defaults to the primary instance)
408
382
  */
409
383
  async killSession(worktreeId, instanceId) {
410
- const sessionName = this.getSessionName(worktreeId, instanceId);
411
- try {
412
- const exists = await (0, tmux_1.hasSession)(sessionName);
413
- if (exists) {
384
+ await this.requestExitAndKill(worktreeId, instanceId, {
385
+ logger,
386
+ stoppedAction: 'stopped-command-code-session',
387
+ requestExit: async (sessionName) => {
414
388
  await (0, tmux_1.sendKeys)(sessionName, exports.COMMAND_CODE_EXIT_COMMAND, false);
415
389
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_TEXT_INPUT_WAIT_MS));
416
390
  await (0, tmux_1.sendSpecialKeys)(sessionName, ['Enter']);
417
391
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_EXIT_WAIT_MS));
418
- }
419
- const killed = await (0, tmux_1.killSession)(sessionName);
420
- this.composerPendingSince.delete(sessionName);
421
- // So a later session reusing the name starts clean.
422
- (0, tmux_capture_cache_1.invalidateCache)(sessionName);
423
- if (killed) {
424
- logger.info('stopped-command-code-session');
425
- }
426
- }
427
- catch (error) {
428
- logger.error('session:stop-failed', { error: (0, errors_1.getErrorMessage)(error) });
429
- throw error;
430
- }
392
+ },
393
+ afterKill: (sessionName) => {
394
+ this.composerPendingSince.delete(sessionName);
395
+ // So a later session reusing the name starts clean.
396
+ (0, tmux_capture_cache_1.invalidateCache)(sessionName);
397
+ },
398
+ });
431
399
  }
432
400
  }
433
401
  exports.CommandCodeTool = CommandCodeTool;
@@ -278,16 +278,6 @@ class CopilotTool extends base_1.BaseCLITool {
278
278
  launchExecutable(resolved) {
279
279
  return resolved.source === 'path' ? this.command : hook_settings_1.COPILOT_LAUNCH_COMMAND;
280
280
  }
281
- /**
282
- * Check if Copilot session is running for a worktree
283
- *
284
- * @param worktreeId - Worktree ID
285
- * @returns True if session is running
286
- */
287
- async isRunning(worktreeId, instanceId) {
288
- const sessionName = this.getSessionName(worktreeId, instanceId);
289
- return await (0, tmux_1.hasSession)(sessionName);
290
- }
291
281
  /**
292
282
  * Start a new Copilot session for a worktree
293
283
  * Launches copilot in interactive mode within tmux
@@ -304,23 +294,13 @@ class CopilotTool extends base_1.BaseCLITool {
304
294
  if (!resolved) {
305
295
  throw (0, install_hints_1.missingToolError)(this);
306
296
  }
307
- const sessionName = this.getSessionName(worktreeId, instanceId);
308
- // Check if session already exists
309
- const exists = await (0, tmux_1.hasSession)(sessionName);
310
- if (exists) {
311
- await this.reconcileExistingSession(sessionName, worktreePath);
312
- // Issue #2070: this branch used to return unconditionally. A tmux session
313
- // outlives the agent that was launched into it — a quit, a self-update, a
314
- // crash — and the launch was then skipped for a pane holding nothing but a
315
- // shell prompt, which left `kill-session` by hand as the only recovery.
316
- // When the tool is gone we fall THROUGH and re-send the launch command
317
- // into the same pane.
318
- if (await this.isToolLive(sessionName, { confirm: true })) {
319
- logger.info('copilot-session-exists');
320
- return;
321
- }
322
- logger.warn('copilot-session-relaunch', { sessionName });
323
- }
297
+ const { sessionName, exists, live } = await this.resolveLaunchPane(worktreeId, worktreePath, instanceId, {
298
+ logger,
299
+ liveAction: 'copilot-session-exists',
300
+ relaunchAction: 'copilot-session-relaunch',
301
+ });
302
+ if (live)
303
+ return;
324
304
  // Issue #1761: fence this session off from the previous copilot process's
325
305
  // events. The state is keyed by (worktree, tool, instance), a key the new
326
306
  // session reuses verbatim, so without this the old process's last
@@ -338,19 +318,6 @@ class CopilotTool extends base_1.BaseCLITool {
338
318
  // the new one's.
339
319
  (0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: tool_id_1.COPILOT_CLI_TOOL_ID, instanceId });
340
320
  try {
341
- // Issue #2070: creation only. On the relaunch path the pane already
342
- // exists and holds the transcript of the process that died in it; the
343
- // launch command is re-sent into that same pane.
344
- if (!exists) {
345
- // Create tmux session. Scrollback depth comes from the shared
346
- // TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
347
- await (0, tmux_1.createSession)({
348
- sessionName,
349
- workingDirectory: worktreePath,
350
- });
351
- // Wait a moment for the session to be created
352
- await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
353
- }
354
321
  // Issue #1761: hand this session its hook configuration, so structured
355
322
  // lifecycle events and Auto-Yes adjudication exist without the operator
356
323
  // having edited ~/.copilot/settings.json by hand.
@@ -363,12 +330,21 @@ class CopilotTool extends base_1.BaseCLITool {
363
330
  //
364
331
  // Fails open in every branch: with `CM_AGENT_HOOKS_INJECT=0`, or with a
365
332
  // settings file that cannot be read or written, this is the bare launch
366
- // command and nothing else.
333
+ // command and nothing else. The one exception is UAT isolation (Issue
334
+ // #3391), where the plan throws instead — which is why it is built BEFORE
335
+ // the tmux session: a refused launch must not leave an empty pane that
336
+ // `isRunning()` reports as a started copilot.
367
337
  const launchCommand = (0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({
368
338
  target: { worktreeId, cliToolId: tool_id_1.COPILOT_CLI_TOOL_ID, instanceId },
369
339
  executablePath: this.launchExecutable(resolved),
370
340
  worktreePath,
371
341
  });
342
+ // Issue #2070: creation only. On the relaunch path the pane already
343
+ // exists and holds the transcript of the process that died in it; the
344
+ // launch command is re-sent into that same pane.
345
+ if (!exists) {
346
+ await this.createLaunchPane(sessionName, worktreePath);
347
+ }
372
348
  // Start Copilot CLI in interactive mode
373
349
  await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
374
350
  // Issue #1907: no blind sleep before this. The 4-second one that used to
@@ -647,17 +623,12 @@ class CopilotTool extends base_1.BaseCLITool {
647
623
  */
648
624
  async sendMessage(worktreeId, message, instanceId) {
649
625
  const sessionName = this.getSessionName(worktreeId, instanceId);
650
- // Check if session exists
651
- const exists = await (0, tmux_1.hasSession)(sessionName);
652
- if (!exists) {
653
- throw new Error(`Copilot session ${sessionName} does not exist. Start the session first.`);
654
- }
655
626
  // Issue #2070: the pane exists, but does the AGENT? An agent that quit,
656
627
  // updated itself or crashed leaves its tmux session behind, and the send
657
628
  // that followed used to sit in the readiness wait until it timed out —
658
629
  // leaving `kill-session` by hand as the only recovery. Relaunches into the
659
630
  // same pane when the tool is gone; costs one `capture-pane` when it is not.
660
- await this.relaunchIfToolExited(worktreeId, instanceId);
631
+ await this.requireSession('Copilot', worktreeId, instanceId, { relaunch: true });
661
632
  try {
662
633
  // Verify Copilot is at prompt state before sending
663
634
  await this.waitForPrompt(sessionName);
@@ -747,11 +718,7 @@ class CopilotTool extends base_1.BaseCLITool {
747
718
  */
748
719
  async sendModelCommand(worktreeId, modelName, instanceId) {
749
720
  const sessionName = this.getSessionName(worktreeId, instanceId);
750
- // Check if session exists
751
- const exists = await (0, tmux_1.hasSession)(sessionName);
752
- if (!exists) {
753
- throw new Error(`Copilot session ${sessionName} does not exist. Start the session first.`);
754
- }
721
+ await this.requireSession('Copilot', worktreeId, instanceId, { relaunch: false });
755
722
  try {
756
723
  const idle = await this.waitForPrompt(sessionName, copilot_constants_1.COPILOT_MODEL_SWITCH_TIMEOUT_MS, 'idle');
757
724
  if (!idle.ready) {
@@ -828,10 +795,10 @@ class CopilotTool extends base_1.BaseCLITool {
828
795
  * @param instanceId - Optional agent instance ID (defaults to primary)
829
796
  */
830
797
  async killSession(worktreeId, instanceId) {
831
- const sessionName = this.getSessionName(worktreeId, instanceId);
832
- try {
833
- const exists = await (0, tmux_1.hasSession)(sessionName);
834
- if (exists) {
798
+ await this.requestExitAndKill(worktreeId, instanceId, {
799
+ logger,
800
+ stoppedAction: 'stopped-copilot-session',
801
+ requestExit: async (sessionName) => {
835
802
  // Send Ctrl+C to interrupt any running operation
836
803
  await (0, tmux_1.sendSpecialKey)(sessionName, 'C-c');
837
804
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_INTERRUPT_SETTLE_MS));
@@ -840,17 +807,8 @@ class CopilotTool extends base_1.BaseCLITool {
840
807
  await new Promise((resolve) => setTimeout(resolve, copilot_constants_1.COPILOT_TEXT_INPUT_DELAY_MS));
841
808
  await (0, tmux_1.sendSpecialKeys)(sessionName, ['Enter']);
842
809
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.COPILOT_EXIT_WAIT_MS));
843
- }
844
- // Kill the tmux session
845
- const killed = await (0, tmux_1.killSession)(sessionName);
846
- if (killed) {
847
- logger.info('stopped-copilot-session');
848
- }
849
- }
850
- catch (error) {
851
- logger.error('session:stop-failed', { error: (0, errors_1.getErrorMessage)(error) });
852
- throw error;
853
- }
810
+ },
811
+ });
854
812
  }
855
813
  }
856
814
  exports.CopilotTool = CopilotTool;
@@ -7,6 +7,14 @@
7
7
  * grow `ICLITool` either — every hand-written `ICLITool` in the test suite would
8
8
  * stop type-checking. So the route calls this one function, which lives inside
9
9
  * the CLITool gateway and is therefore allowed to reach the transport.
10
+ *
11
+ * Issue #3290: this function finds the session by NAME and sends. Whether the
12
+ * session is this server's is not decided here — it takes no worktree path to
13
+ * compare `#{session_path}` with — so the caller has to have asked
14
+ * `checkSessionOwnership` first, as the route does. A caller that skips it types
15
+ * into whichever server owns the name;
16
+ * `tests/unit/guards/worktree-route-session-ownership-3290.test.ts` fails a
17
+ * worktree route that does.
10
18
  */
11
19
  Object.defineProperty(exports, "__esModule", { value: true });
12
20
  exports.sendDirectInput = sendDirectInput;
@@ -21,15 +21,9 @@ const sources_1 = require("../../lib/hooks/sources");
21
21
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
22
22
  const logger_1 = require("../../lib/logger");
23
23
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
24
- const install_hints_1 = require("./install-hints");
25
24
  const launch_screen_1 = require("../../lib/session/launch-screen");
25
+ const errors_1 = require("../../lib/errors");
26
26
  const logger = (0, logger_1.createLogger)('cli-tools/gemini');
27
- /**
28
- * Extract error message from unknown error type (DRY)
29
- */
30
- function getErrorMessage(error) {
31
- return error instanceof Error ? error.message : String(error);
32
- }
33
27
  /** Wait for Gemini CLI to initialize after launch (banner + auth + dialog) */
34
28
  const GEMINI_INIT_WAIT_MS = 6000;
35
29
  /** Interval for polling trust dialog / prompt detection */
@@ -46,16 +40,6 @@ class GeminiTool extends base_1.BaseCLITool {
46
40
  id = 'gemini';
47
41
  name = 'Gemini CLI';
48
42
  command = 'gemini';
49
- /**
50
- * Check if Gemini session is running for a worktree
51
- *
52
- * @param worktreeId - Worktree ID
53
- * @returns True if session is running
54
- */
55
- async isRunning(worktreeId, instanceId) {
56
- const sessionName = this.getSessionName(worktreeId, instanceId);
57
- return await (0, tmux_1.hasSession)(sessionName);
58
- }
59
43
  /**
60
44
  * Start a new Gemini session for a worktree
61
45
  * Launches `gemini` in interactive REPL mode within tmux
@@ -65,27 +49,14 @@ class GeminiTool extends base_1.BaseCLITool {
65
49
  */
66
50
  async launchSession(worktreeId, worktreePath, instanceId) {
67
51
  // Check if Gemini is installed
68
- const geminiAvailable = await this.isInstalled();
69
- if (!geminiAvailable) {
70
- throw (0, install_hints_1.missingToolError)(this);
71
- }
72
- const sessionName = this.getSessionName(worktreeId, instanceId);
73
- // Check if session already exists
74
- const exists = await (0, tmux_1.hasSession)(sessionName);
75
- if (exists) {
76
- await this.reconcileExistingSession(sessionName, worktreePath);
77
- // Issue #2070: this branch used to return unconditionally. A tmux session
78
- // outlives the agent that was launched into it — a quit, a self-update, a
79
- // crash — and the launch was then skipped for a pane holding nothing but a
80
- // shell prompt, which left `kill-session` by hand as the only recovery.
81
- // When the tool is gone we fall THROUGH and re-send the launch command
82
- // into the same pane.
83
- if (await this.isToolLive(sessionName, { confirm: true })) {
84
- logger.info('gemini-session-sessionname');
85
- return;
86
- }
87
- logger.warn('gemini-session-relaunch', { sessionName });
88
- }
52
+ await this.requireInstalled();
53
+ const { sessionName, exists, live } = await this.resolveLaunchPane(worktreeId, worktreePath, instanceId, {
54
+ logger,
55
+ liveAction: 'gemini-session-exists',
56
+ relaunchAction: 'gemini-session-relaunch',
57
+ });
58
+ if (live)
59
+ return;
89
60
  // Issue #1762: fence this instance's structured events off from the process
90
61
  // that used to hold the same (worktree, tool, instance) key. On the creation
91
62
  // path only — the reuse branch above has already returned — and before the
@@ -102,14 +73,7 @@ class GeminiTool extends base_1.BaseCLITool {
102
73
  // exists and holds the transcript of the process that died in it; the
103
74
  // launch command is re-sent into that same pane.
104
75
  if (!exists) {
105
- // Create tmux session. Scrollback depth comes from the shared
106
- // TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
107
- await (0, tmux_1.createSession)({
108
- sessionName,
109
- workingDirectory: worktreePath,
110
- });
111
- // Wait a moment for the session to be created
112
- await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
76
+ await this.createLaunchPane(sessionName, worktreePath);
113
77
  }
114
78
  // Start Gemini CLI in interactive mode (no flags = interactive REPL).
115
79
  //
@@ -135,10 +99,10 @@ class GeminiTool extends base_1.BaseCLITool {
135
99
  // Poll until Gemini interactive prompt is ready
136
100
  // Handles trust dialog automatically if encountered
137
101
  await this.waitForReady(sessionName);
138
- logger.info('started-gemini-session:sessionname');
102
+ logger.info('started-gemini-session');
139
103
  }
140
104
  catch (error) {
141
- const errorMessage = getErrorMessage(error);
105
+ const errorMessage = (0, errors_1.getErrorMessage)(error);
142
106
  throw new Error(`Failed to start Gemini session: ${errorMessage}`);
143
107
  }
144
108
  }
@@ -164,7 +128,7 @@ class GeminiTool extends base_1.BaseCLITool {
164
128
  if (!trustDialogHandled && output.includes('Do you trust this folder?')) {
165
129
  await (0, tmux_1.sendSpecialKey)(sessionName, 'Enter');
166
130
  trustDialogHandled = true;
167
- logger.info('auto-trusted-folder-for');
131
+ logger.info('auto-trusted-folder-for-gemini');
168
132
  // Continue polling for prompt after trust dialog
169
133
  }
170
134
  }
@@ -195,7 +159,7 @@ class GeminiTool extends base_1.BaseCLITool {
195
159
  }
196
160
  await new Promise((resolve) => setTimeout(resolve, pollInterval));
197
161
  }
198
- logger.info('gemini-prompt-not');
162
+ logger.info('gemini-prompt-not-detected');
199
163
  }
200
164
  /**
201
165
  * Send a message to Gemini interactive session
@@ -205,17 +169,12 @@ class GeminiTool extends base_1.BaseCLITool {
205
169
  */
206
170
  async sendMessage(worktreeId, message, instanceId) {
207
171
  const sessionName = this.getSessionName(worktreeId, instanceId);
208
- // Check if session exists
209
- const exists = await (0, tmux_1.hasSession)(sessionName);
210
- if (!exists) {
211
- throw new Error(`Gemini session ${sessionName} does not exist. Start the session first.`);
212
- }
213
172
  // Issue #2070: the pane exists, but does the AGENT? An agent that quit,
214
173
  // updated itself or crashed leaves its tmux session behind, and the send
215
174
  // that followed used to sit in the readiness wait until it timed out —
216
175
  // leaving `kill-session` by hand as the only recovery. Relaunches into the
217
176
  // same pane when the tool is gone; costs one `capture-pane` when it is not.
218
- await this.relaunchIfToolExited(worktreeId, instanceId);
177
+ await this.requireSession('Gemini', worktreeId, instanceId, { relaunch: true });
219
178
  try {
220
179
  // Verify Gemini is at prompt state before sending
221
180
  await this.waitForPrompt(sessionName);
@@ -229,10 +188,10 @@ class GeminiTool extends base_1.BaseCLITool {
229
188
  });
230
189
  // Issue #405: Invalidate cache after sending message
231
190
  (0, tmux_capture_cache_1.invalidateCache)(sessionName);
232
- logger.info('sent-message-to-gemini-session:sessionna');
191
+ logger.info('sent-message-to-gemini-session');
233
192
  }
234
193
  catch (error) {
235
- const errorMessage = getErrorMessage(error);
194
+ const errorMessage = (0, errors_1.getErrorMessage)(error);
236
195
  throw new Error(`Failed to send message to Gemini: ${errorMessage}`);
237
196
  }
238
197
  }
@@ -242,27 +201,18 @@ class GeminiTool extends base_1.BaseCLITool {
242
201
  * @param worktreeId - Worktree ID
243
202
  */
244
203
  async killSession(worktreeId, instanceId) {
245
- const sessionName = this.getSessionName(worktreeId, instanceId);
246
- try {
247
- const exists = await (0, tmux_1.hasSession)(sessionName);
248
- if (exists) {
204
+ await this.requestExitAndKill(worktreeId, instanceId, {
205
+ logger,
206
+ stoppedAction: 'stopped-gemini-session',
207
+ requestExit: async (sessionName) => {
249
208
  // Send Ctrl+C to interrupt any running operation
250
209
  await (0, tmux_1.sendSpecialKey)(sessionName, 'C-c');
251
210
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_INTERRUPT_SETTLE_MS));
252
211
  // Send /quit to exit Gemini gracefully
253
212
  await (0, tmux_1.sendKeys)(sessionName, '/quit', true);
254
213
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_EXIT_WAIT_MS));
255
- }
256
- // Kill the tmux session
257
- const killed = await (0, tmux_1.killSession)(sessionName);
258
- if (killed) {
259
- logger.info('stopped-gemini-session:sessionname');
260
- }
261
- }
262
- catch (error) {
263
- logger.error('session:stop-failed', { error: getErrorMessage(error) });
264
- throw error;
265
- }
214
+ },
215
+ });
266
216
  }
267
217
  }
268
218
  exports.GeminiTool = GeminiTool;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveOpencodePaneWidthChecked = resolveOpencodePaneWidthChecked;
4
+ const tmux_pane_config_1 = require("../../config/tmux-pane-config");
5
+ const logger_1 = require("../../lib/logger");
6
+ const logger = (0, logger_1.createLogger)('cli-tools/opencode-pane-width');
7
+ /**
8
+ * {@link resolveOpencodePaneWidth}, plus the one-line operator feedback the
9
+ * pure config module deliberately cannot emit (Issue #2047).
10
+ *
11
+ * `tmux-pane-config.ts` has no imports at all — that is a documented property
12
+ * (#1906), and pulling the logger in there would make every consumer of a
13
+ * constant depend on the logging stack. So the resolver stays silent and the
14
+ * warning lives here, at the two call sites that actually resize a pane.
15
+ *
16
+ * Two things are worth telling the operator, and neither is an error:
17
+ *
18
+ * - the value was DROPPED (not an integer, or outside the accepted bounds), so
19
+ * the pane they are about to look at is the 80-column default rather than
20
+ * what they asked for;
21
+ * - the value was ACCEPTED but lands at or above
22
+ * {@link OPENCODE_SIDEBAR_MIN_WIDTH}, where opencode 1.18.22 paints its
23
+ * right-hand sidebar into the same rows as the transcript. #2047 measured
24
+ * what that does to this repo's own readers — a saved "reply" made entirely
25
+ * of sidebar chrome, a status flip on an aborted turn, and a false idle
26
+ * composer off the session title. It is still allowed, because an operator
27
+ * who only ever reads the pane in the browser may want it; it is not silent.
28
+ *
29
+ * @returns Pane width in columns, ready to hand to `resize-window`.
30
+ */
31
+ function resolveOpencodePaneWidthChecked(options) {
32
+ const requested = process.env[tmux_pane_config_1.OPENCODE_PANE_WIDTH_ENV];
33
+ const width = (0, tmux_pane_config_1.resolveOpencodePaneWidth)();
34
+ // "Dropped" means the resolver fell back to the default. Compare the number
35
+ // the operator wrote, not its text: `0120` is applied as 120 (#3338).
36
+ const trimmed = requested?.trim();
37
+ const dropped = trimmed !== undefined && (!/^\d+$/.test(trimmed) || Number.parseInt(trimmed, 10) !== width);
38
+ if (requested !== undefined && dropped) {
39
+ logger.warn('opencode-pane-width-rejected', {
40
+ requested,
41
+ applied: width,
42
+ });
43
+ }
44
+ else if (options.warnSidebar && width >= tmux_pane_config_1.OPENCODE_SIDEBAR_MIN_WIDTH) {
45
+ // v1 only: the width at which opencode-v2 starts painting a sidebar has not
46
+ // been measured, so v2 passes `warnSidebar: false` (Issue #3296).
47
+ logger.warn('opencode-pane-width-sidebar-visible', {
48
+ width,
49
+ sidebarMinWidth: tmux_pane_config_1.OPENCODE_SIDEBAR_MIN_WIDTH,
50
+ });
51
+ }
52
+ return width;
53
+ }
@@ -45,6 +45,7 @@ const cli_patterns_1 = require("../detection/cli-patterns");
45
45
  const submit_verified_sender_1 = require("./submit-verified-sender");
46
46
  const tmux_capture_cache_1 = require("../tmux/tmux-capture-cache");
47
47
  const tmux_pane_config_1 = require("../../config/tmux-pane-config");
48
+ const opencode_pane_width_1 = require("./opencode-pane-width");
48
49
  const logger_1 = require("../../lib/logger");
49
50
  const errors_1 = require("../../lib/errors");
50
51
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
@@ -200,7 +201,9 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
200
201
  }
201
202
  const sessionName = this.getSessionName(worktreeId, instanceId);
202
203
  const target = (0, runtime_1.opencodeV2Target)(worktreeId, instanceId);
203
- const geometry = { windowWidth: (0, tmux_pane_config_1.resolveOpencodePaneWidth)(), windowHeight: tmux_pane_config_1.OPENCODE_PANE_HEIGHT };
204
+ // Issue #3296: the "sidebar visible" warn is off for v2 (see opencode-pane-width.ts).
205
+ const paneWidth = (0, opencode_pane_width_1.resolveOpencodePaneWidthChecked)({ warnSidebar: false });
206
+ const geometry = { windowWidth: paneWidth, windowHeight: tmux_pane_config_1.OPENCODE_PANE_HEIGHT };
204
207
  const exists = await (0, tmux_1.hasSession)(sessionName);
205
208
  if (exists) {
206
209
  await this.reconcileExistingSession(sessionName, worktreePath, geometry);
@@ -216,8 +219,7 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
216
219
  (0, agent_session_lifecycle_1.beginAgentSession)(target);
217
220
  try {
218
221
  if (!exists) {
219
- await (0, tmux_1.createSession)({ sessionName, workingDirectory: worktreePath });
220
- await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
222
+ await this.createLaunchPane(sessionName, worktreePath);
221
223
  }
222
224
  try {
223
225
  await execFileAsync('tmux', [
@@ -298,10 +300,7 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
298
300
  }
299
301
  async sendMessage(worktreeId, message, instanceId) {
300
302
  const sessionName = this.getSessionName(worktreeId, instanceId);
301
- if (!(await (0, tmux_1.hasSession)(sessionName))) {
302
- throw new Error(`OpenCode V2 session ${sessionName} does not exist. Start the session first.`);
303
- }
304
- await this.relaunchIfToolExited(worktreeId, instanceId);
303
+ await this.requireSession('OpenCode V2', worktreeId, instanceId, { relaunch: true });
305
304
  try {
306
305
  await this.waitForComposer(sessionName);
307
306
  await (0, submit_verified_sender_1.sendMessageWithSubmitVerification)({
@@ -356,6 +355,9 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
356
355
  }
357
356
  (0, tmux_capture_cache_1.invalidateCache)(sessionName);
358
357
  this.resumeAttemptedAt.delete(sessionName);
358
+ // Logged unconditionally: after a successful `/exit` no tmux kill runs, so
359
+ // there is no `killed` value to test, unlike `requestExitAndKill` in
360
+ // base.ts (logs only when the kill returned true) (#3232).
359
361
  logger.info('stopped-opencode-v2-session');
360
362
  }
361
363
  catch (error) {