commandmate 0.44.2 → 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 (581) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +149 -149
  3. package/.next/app-path-routes-manifest.json +21 -21
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  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 -1
  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 -1
  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 +2 -2
  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 +21 -21
  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 -1
  294. package/.next/server/chunks/2710.js +1 -1
  295. package/.next/server/chunks/2908.js +1 -1
  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 -1
  308. package/.next/server/chunks/5625.js +25 -0
  309. package/.next/server/chunks/611.js +1 -1
  310. package/.next/server/chunks/6130.js +1 -1
  311. package/.next/server/chunks/6401.js +1 -1
  312. package/.next/server/chunks/6781.js +1 -1
  313. package/.next/server/chunks/6793.js +3 -3
  314. package/.next/server/chunks/7491.js +2 -2
  315. package/.next/server/chunks/7905.js +1 -1
  316. package/.next/server/chunks/850.js +1 -1
  317. package/.next/server/chunks/8728.js +3 -3
  318. package/.next/server/chunks/8791.js +1 -1
  319. package/.next/server/chunks/8800.js +1 -1
  320. package/.next/server/chunks/8918.js +7 -7
  321. package/.next/server/chunks/9130.js +1 -1
  322. package/.next/server/chunks/9390.js +2 -2
  323. package/.next/server/chunks/9584.js +1 -1
  324. package/.next/server/chunks/9627.js +6 -6
  325. package/.next/server/chunks/9731.js +3 -3
  326. package/.next/server/middleware-manifest.json +5 -5
  327. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  328. package/.next/server/pages/500.html +1 -1
  329. package/.next/server/server-reference-manifest.json +1 -1
  330. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  331. package/.next/static/chunks/{2407-051f6f84226a9f2c.js → 2407-06d35bb1aa02de80.js} +1 -1
  332. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  333. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  334. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  335. package/.next/static/chunks/app/{layout-9da1ab602bcb3051.js → layout-0d1750b833f5cc3e.js} +1 -1
  336. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  337. package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
  338. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  339. package/.next/static/css/057f64a65726c439.css +1 -0
  340. package/.next/trace +13 -13
  341. package/dist/cli/commands/ask.d.ts.map +1 -1
  342. package/dist/cli/commands/ask.js +120 -119
  343. package/dist/cli/commands/attach.d.ts +94 -0
  344. package/dist/cli/commands/attach.d.ts.map +1 -1
  345. package/dist/cli/commands/attach.js +145 -7
  346. package/dist/cli/commands/auto-yes.js +1 -1
  347. package/dist/cli/commands/capture.d.ts.map +1 -1
  348. package/dist/cli/commands/capture.js +3 -5
  349. package/dist/cli/commands/command-target.d.ts +23 -0
  350. package/dist/cli/commands/command-target.d.ts.map +1 -0
  351. package/dist/cli/commands/command-target.js +25 -0
  352. package/dist/cli/commands/instances.d.ts.map +1 -1
  353. package/dist/cli/commands/instances.js +41 -2
  354. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  355. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  356. package/dist/cli/commands/message-dispatch.js +63 -0
  357. package/dist/cli/commands/reply.d.ts.map +1 -1
  358. package/dist/cli/commands/reply.js +2 -5
  359. package/dist/cli/commands/respond.d.ts.map +1 -1
  360. package/dist/cli/commands/respond.js +3 -6
  361. package/dist/cli/commands/send.d.ts.map +1 -1
  362. package/dist/cli/commands/send.js +149 -146
  363. package/dist/cli/commands/wait.d.ts.map +1 -1
  364. package/dist/cli/commands/wait.js +589 -431
  365. package/dist/cli/types/api-responses.d.ts +159 -27
  366. package/dist/cli/types/api-responses.d.ts.map +1 -1
  367. package/dist/cli/types/api-responses.js +4 -2
  368. package/dist/cli/utils/api-client.d.ts +25 -5
  369. package/dist/cli/utils/api-client.d.ts.map +1 -1
  370. package/dist/cli/utils/api-client.js +87 -55
  371. package/dist/cli/utils/server-url.d.ts +1 -0
  372. package/dist/cli/utils/server-url.d.ts.map +1 -1
  373. package/dist/cli/utils/server-url.js +7 -0
  374. package/dist/config/uat-isolation.d.ts +140 -0
  375. package/dist/config/uat-isolation.d.ts.map +1 -0
  376. package/dist/config/uat-isolation.js +246 -0
  377. package/dist/lib/global-state.d.ts +12 -0
  378. package/dist/lib/global-state.d.ts.map +1 -0
  379. package/dist/lib/global-state.js +16 -0
  380. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  381. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  382. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  383. package/dist/lib/session/prompt-view.d.ts +26 -3
  384. package/dist/lib/session/prompt-view.d.ts.map +1 -1
  385. package/dist/lib/session/prompt-view.js +26 -3
  386. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  387. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  388. package/dist/lib/session/status-evidence-type.js +2 -0
  389. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  390. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  391. package/dist/server/locales/en/worktree.json +3 -1
  392. package/dist/server/locales/ja/worktree.json +3 -1
  393. package/dist/server/src/cli/types/api-responses.js +4 -2
  394. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  395. package/dist/server/src/config/uat-isolation.js +246 -0
  396. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  397. package/dist/server/src/lib/auto-yes-lifecycle.js +6 -0
  398. package/dist/server/src/lib/auto-yes-poller.js +450 -160
  399. package/dist/server/src/lib/auto-yes-state.js +2 -2
  400. package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
  401. package/dist/server/src/lib/cli-tools/base.js +151 -0
  402. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  403. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  404. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  405. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  406. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  407. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  408. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  409. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  410. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  411. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  412. package/dist/server/src/lib/detection/cli-patterns.js +374 -3065
  413. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  414. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  415. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  416. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  417. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  418. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  419. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  420. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  421. package/dist/server/src/lib/detection/tools/antigravity/detect.js +5 -29
  422. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  423. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  424. package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
  425. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  426. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  427. package/dist/server/src/lib/detection/tools/codex/detect.js +46 -85
  428. package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
  429. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  430. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  431. package/dist/server/src/lib/detection/tools/command-code/detect.js +8 -50
  432. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  433. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  434. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  435. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  436. package/dist/server/src/lib/detection/tools/copilot/detect.js +10 -35
  437. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  438. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  439. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  440. package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
  441. package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
  442. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  443. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
  444. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  445. package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
  446. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  447. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  448. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  449. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  450. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  451. package/dist/server/src/lib/global-state.js +16 -0
  452. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  453. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  454. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  455. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  456. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  457. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  458. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  459. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  460. package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
  461. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  462. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  463. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  464. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  465. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  466. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  467. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  468. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  469. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  470. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  471. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  472. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  473. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  474. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  475. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  476. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  477. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  478. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  479. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  480. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  481. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  482. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  483. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  484. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  485. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  486. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  487. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  488. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  489. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  490. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  491. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  492. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  493. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  494. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  495. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  496. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  497. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  498. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  499. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  500. package/dist/server/src/lib/polling/response-checker.js +641 -1142
  501. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  502. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  503. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  504. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  505. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  506. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  507. package/dist/server/src/lib/prompt-answer-sender.js +5 -4
  508. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  509. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  510. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  511. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  512. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  513. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -5
  514. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  515. package/dist/server/src/lib/relay/relay-delivery.js +3 -2
  516. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  517. package/dist/server/src/lib/response-cleaner.js +24 -1
  518. package/dist/server/src/lib/response-extractor.js +16 -0
  519. package/dist/server/src/lib/schedule-manager.js +8 -10
  520. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  521. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  522. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  523. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  524. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  525. package/dist/server/src/lib/session/agent-event-state.js +106 -1854
  526. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  527. package/dist/server/src/lib/session/agent-event-turn.js +811 -0
  528. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  529. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  530. package/dist/server/src/lib/session/claude-executor.js +45 -5
  531. package/dist/server/src/lib/session/claude-session.js +21 -65
  532. package/dist/server/src/lib/session/cli-session.js +17 -0
  533. package/dist/server/src/lib/session/current-output-builder.js +450 -1103
  534. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  535. package/dist/server/src/lib/session/current-output-types.js +9 -0
  536. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  537. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  538. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  539. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  540. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  541. package/dist/server/src/lib/session/prompt-view.js +26 -3
  542. package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
  543. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  544. package/dist/server/src/lib/session/send-user-message.js +1 -1
  545. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  546. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  547. package/dist/server/src/lib/session/status-evidence.js +2 -2
  548. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  549. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  550. package/dist/server/src/lib/session-cleanup.js +1 -5
  551. package/dist/server/src/lib/skills/install-plan.js +2 -1
  552. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  553. package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
  554. package/dist/server/src/lib/timer-manager.js +6 -8
  555. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  556. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  557. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  558. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  559. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  560. package/dist/server/src/lib/tmux/tmux.js +33 -59
  561. package/dist/server/src/lib/tui-accumulator.js +2 -2
  562. package/dist/server/src/lib/version-checker.js +6 -6
  563. package/dist/server/src/lib/ws-server.js +47 -11
  564. package/docs/en/user-guide/webapp-guide.md +27 -3
  565. package/package.json +1 -1
  566. package/release-notes/0.44.3.json +82 -0
  567. package/scripts/hooks/cmate-agent-event.sh +18 -0
  568. package/.next/server/chunks/1068.js +0 -1
  569. package/.next/server/chunks/4372.js +0 -5
  570. package/.next/server/chunks/6474.js +0 -14
  571. package/.next/server/chunks/967.js +0 -1
  572. package/.next/server/chunks/9798.js +0 -2
  573. package/.next/server/chunks/9882.js +0 -25
  574. package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
  575. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  576. package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +0 -1
  577. package/.next/static/css/38070d879efa1371.css +0 -1
  578. package/dist/server/src/lib/cli-tools/index.js +0 -41
  579. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  580. /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
  581. /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
@@ -35,6 +35,7 @@ const auto_yes_config_1 = require("../config/auto-yes-config");
35
35
  const path_validator_1 = require("./security/path-validator");
36
36
  const types_1 = require("./cli-tools/types");
37
37
  const logger_1 = require("../lib/logger");
38
+ const global_state_1 = require("./global-state");
38
39
  const logger = (0, logger_1.createLogger)('auto-yes-state');
39
40
  // =============================================================================
40
41
  // Composite Key Helpers (Issue #525: per-agent auto-yes)
@@ -117,8 +118,7 @@ function extractInstanceId(compositeKey) {
117
118
  return parts[2] ?? parts[1] ?? null;
118
119
  }
119
120
  /** In-memory storage for auto-yes states (globalThis for hot reload persistence) */
120
- const autoYesStates = globalThis.__autoYesStates ??
121
- (globalThis.__autoYesStates = new Map());
121
+ const autoYesStates = (0, global_state_1.getOrInitGlobal)('__autoYesStates', () => new Map());
122
122
  // =============================================================================
123
123
  // Utility Functions
124
124
  // =============================================================================
@@ -25,16 +25,9 @@ const sources_1 = require("../../lib/hooks/sources");
25
25
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
26
26
  const logger_1 = require("../../lib/logger");
27
27
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
28
- const install_hints_1 = require("./install-hints");
29
28
  const launch_screen_1 = require("../../lib/session/launch-screen");
29
+ const errors_1 = require("../../lib/errors");
30
30
  const logger = (0, logger_1.createLogger)('cli-tools/antigravity');
31
- /**
32
- * Extract error message from unknown error type (DRY).
33
- * Same pattern as codex.ts / claude-session.ts getErrorMessage().
34
- */
35
- function getErrorMessage(error) {
36
- return error instanceof Error ? error.message : String(error);
37
- }
38
31
  /**
39
32
  * Single-quote a value for safe embedding in a shell command typed into a
40
33
  * tmux pane (Issue #989). Unlike other CLI tools, agy's `--model` is a
@@ -170,16 +163,6 @@ class AntigravityTool extends base_1.BaseCLITool {
170
163
  id = 'antigravity';
171
164
  name = 'Antigravity CLI';
172
165
  command = 'agy';
173
- /**
174
- * Check if an Antigravity session is running for a worktree.
175
- *
176
- * @param worktreeId - Worktree ID
177
- * @returns True if session is running
178
- */
179
- async isRunning(worktreeId, instanceId) {
180
- const sessionName = this.getSessionName(worktreeId, instanceId);
181
- return await (0, tmux_1.hasSession)(sessionName);
182
- }
183
166
  /**
184
167
  * Start a new Antigravity session for a worktree.
185
168
  *
@@ -193,27 +176,14 @@ class AntigravityTool extends base_1.BaseCLITool {
193
176
  */
194
177
  async launchSession(worktreeId, worktreePath, instanceId, model) {
195
178
  // Check if agy is installed
196
- const available = await this.isInstalled();
197
- if (!available) {
198
- throw (0, install_hints_1.missingToolError)(this);
199
- }
200
- const sessionName = this.getSessionName(worktreeId, instanceId);
201
- // Check if session already exists
202
- const exists = await (0, tmux_1.hasSession)(sessionName);
203
- if (exists) {
204
- await this.reconcileExistingSession(sessionName, worktreePath);
205
- // Issue #2070: this branch used to return unconditionally. A tmux session
206
- // outlives the agent that was launched into it — a quit, a self-update, a
207
- // crash — and the launch was then skipped for a pane holding nothing but a
208
- // shell prompt, which left `kill-session` by hand as the only recovery.
209
- // When the tool is gone we fall THROUGH and re-send the launch command
210
- // into the same pane.
211
- if (await this.isToolLive(sessionName, { confirm: true })) {
212
- logger.info('antigravity-session-exists');
213
- return;
214
- }
215
- logger.warn('antigravity-session-relaunch', { sessionName });
216
- }
179
+ await this.requireInstalled();
180
+ const { sessionName, exists, live } = await this.resolveLaunchPane(worktreeId, worktreePath, instanceId, {
181
+ logger,
182
+ liveAction: 'antigravity-session-exists',
183
+ relaunchAction: 'antigravity-session-relaunch',
184
+ });
185
+ if (live)
186
+ return;
217
187
  // Issue #1762: fence this instance's structured events off from the process
218
188
  // that used to hold the same (worktree, tool, instance) key. Creation path
219
189
  // only — the reuse branch above has already returned — and before the pane
@@ -224,21 +194,6 @@ class AntigravityTool extends base_1.BaseCLITool {
224
194
  // the new one's.
225
195
  (0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: sources_1.ANTIGRAVITY_CLI_TOOL_ID, instanceId });
226
196
  try {
227
- // Issue #2070: creation only. On the relaunch path the pane already
228
- // exists and holds the transcript of the process that died in it; the
229
- // launch command is re-sent into that same pane.
230
- if (!exists) {
231
- // Create tmux session with large history buffer for agy output
232
- // (agy is inline-rendered and retains scrollback, like Codex)
233
- // Scrollback depth comes from the shared TMUX_HISTORY_LIMIT default
234
- // (Issue #1624) — do not re-hardcode it here.
235
- await (0, tmux_1.createSession)({
236
- sessionName,
237
- workingDirectory: worktreePath,
238
- });
239
- // Wait a moment for the session to be created
240
- await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
241
- }
242
197
  // Start agy in interactive mode, optionally pinned to a model.
243
198
  //
244
199
  // Issue #1762: the launch merges CommandMate's named hook into
@@ -249,12 +204,28 @@ class AntigravityTool extends base_1.BaseCLITool {
249
204
  // one file serves every worktree on the machine. `--model` is appended
250
205
  // after the rendered line, so the env assignments stay in front of the
251
206
  // command. `CM_AGENT_HOOKS_INJECT=0` returns bare `agy`, unchanged.
207
+ // Under UAT isolation (Issue #3360) a shared file this build did not
208
+ // produce makes the plan throw.
252
209
  const base = (0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({
253
210
  target: { worktreeId, cliToolId: sources_1.ANTIGRAVITY_CLI_TOOL_ID, instanceId },
254
211
  executablePath: this.command,
255
212
  worktreePath,
256
213
  });
257
214
  const launchCommand = model ? `${base} --model ${shellSingleQuote(model)}` : base;
215
+ // Issue #3360: the plan above is built BEFORE the tmux session, because
216
+ // under UAT isolation it throws instead of launching — and a refused
217
+ // launch must not leave an empty pane that `isRunning()` reports as a
218
+ // started agy (the next send would then be refused a model change).
219
+ // Issue #2070: creation only. On the relaunch path the pane already
220
+ // exists and holds the transcript of the process that died in it; the
221
+ // launch command is re-sent into that same pane.
222
+ if (!exists) {
223
+ // Create tmux session with large history buffer for agy output
224
+ // (agy is inline-rendered and retains scrollback, like Codex)
225
+ // Scrollback depth comes from the shared TMUX_HISTORY_LIMIT default
226
+ // (Issue #1624) — do not re-hardcode it here.
227
+ await this.createLaunchPane(sessionName, worktreePath);
228
+ }
258
229
  await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
259
230
  // Wait for agy to initialize
260
231
  await new Promise((resolve) => setTimeout(resolve, ANTIGRAVITY_INIT_WAIT_MS));
@@ -263,7 +234,7 @@ class AntigravityTool extends base_1.BaseCLITool {
263
234
  logger.info('started-antigravity-session');
264
235
  }
265
236
  catch (error) {
266
- const errorMessage = getErrorMessage(error);
237
+ const errorMessage = (0, errors_1.getErrorMessage)(error);
267
238
  throw new Error(`Failed to start Antigravity session: ${errorMessage}`);
268
239
  }
269
240
  }
@@ -336,17 +307,12 @@ class AntigravityTool extends base_1.BaseCLITool {
336
307
  */
337
308
  async sendMessage(worktreeId, message, instanceId) {
338
309
  const sessionName = this.getSessionName(worktreeId, instanceId);
339
- // Check if session exists
340
- const exists = await (0, tmux_1.hasSession)(sessionName);
341
- if (!exists) {
342
- throw new Error(`Antigravity session ${sessionName} does not exist. Start the session first.`);
343
- }
344
310
  // Issue #2070: the pane exists, but does the AGENT? An agent that quit,
345
311
  // updated itself or crashed leaves its tmux session behind, and the send
346
312
  // that followed used to sit in the readiness wait until it timed out —
347
313
  // leaving `kill-session` by hand as the only recovery. Relaunches into the
348
314
  // same pane when the tool is gone; costs one `capture-pane` when it is not.
349
- await this.relaunchIfToolExited(worktreeId, instanceId);
315
+ await this.requireSession('Antigravity', worktreeId, instanceId, { relaunch: true });
350
316
  try {
351
317
  // Verify agy is at a ready prompt before sending
352
318
  await this.waitForPrompt(sessionName);
@@ -363,7 +329,7 @@ class AntigravityTool extends base_1.BaseCLITool {
363
329
  logger.info('sent-message-to-antigravity-session');
364
330
  }
365
331
  catch (error) {
366
- const errorMessage = getErrorMessage(error);
332
+ const errorMessage = (0, errors_1.getErrorMessage)(error);
367
333
  throw new Error(`Failed to send message to Antigravity: ${errorMessage}`);
368
334
  }
369
335
  }
@@ -373,27 +339,20 @@ class AntigravityTool extends base_1.BaseCLITool {
373
339
  * @param worktreeId - Worktree ID
374
340
  */
375
341
  async killSession(worktreeId, instanceId) {
376
- const sessionName = this.getSessionName(worktreeId, instanceId);
377
- try {
378
- const exists = await (0, tmux_1.hasSession)(sessionName);
379
- if (exists) {
342
+ await this.requestExitAndKill(worktreeId, instanceId, {
343
+ logger,
344
+ stoppedAction: 'stopped-antigravity-session',
345
+ requestExit: async (sessionName) => {
380
346
  // Send Ctrl+D to exit agy gracefully
381
347
  await (0, tmux_1.sendSpecialKey)(sessionName, 'C-d');
382
348
  // Wait a moment for agy to exit
383
349
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_EXIT_WAIT_MS));
384
- }
385
- // Kill the tmux session
386
- const killed = await (0, tmux_1.killSession)(sessionName);
387
- // Invalidate cache so a later session reusing the name starts clean
388
- (0, tmux_capture_cache_1.invalidateCache)(sessionName);
389
- if (killed) {
390
- logger.info('stopped-antigravity-session');
391
- }
392
- }
393
- catch (error) {
394
- logger.error('session:stop-failed', { error: getErrorMessage(error) });
395
- throw error;
396
- }
350
+ },
351
+ afterKill: (sessionName) => {
352
+ // Invalidate cache so a later session reusing the name starts clean
353
+ (0, tmux_capture_cache_1.invalidateCache)(sessionName);
354
+ },
355
+ });
397
356
  }
398
357
  }
399
358
  exports.AntigravityTool = AntigravityTool;
@@ -21,10 +21,12 @@ const graceful_exit_1 = require("./graceful-exit");
21
21
  const liveness_spec_1 = require("./liveness-spec");
22
22
  const session_liveness_1 = require("./session-liveness");
23
23
  const start_availability_1 = require("./start-availability");
24
+ const install_hints_1 = require("./install-hints");
24
25
  const ansi_1 = require("../detection/ansi");
25
26
  const env_1 = require("../env");
26
27
  const launch_command_1 = require("../hooks/sources/launch-command");
27
28
  const logger_1 = require("../logger");
29
+ const errors_1 = require("../errors");
28
30
  const terminal_keys_1 = require("../../types/terminal-keys");
29
31
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
30
32
  const tmux_pane_config_1 = require("../../config/tmux-pane-config");
@@ -177,6 +179,11 @@ class BaseCLITool {
177
179
  getSessionName(worktreeId, instanceId) {
178
180
  return (0, session_name_1.resolveSessionName)(this.id, worktreeId, instanceId);
179
181
  }
182
+ // Abstract methods that must be implemented by subclasses
183
+ async isRunning(worktreeId, instanceId) {
184
+ const sessionName = this.getSessionName(worktreeId, instanceId);
185
+ return await (0, tmux_1.hasSession)(sessionName);
186
+ }
180
187
  /**
181
188
  * Start this tool's session, reporting a failure exactly once (Issue #2009).
182
189
  *
@@ -595,6 +602,150 @@ class BaseCLITool {
595
602
  logger.info('session:relaunch-before-send', { cliToolId: this.id, sessionName });
596
603
  await this.startSession(worktreeId, worktreePath, instanceId);
597
604
  }
605
+ /**
606
+ * The pre-send guard every driver's `sendMessage` opened with: the session
607
+ * must exist, else throw `<label> session <name> does not exist. Start the
608
+ * session first.`; with `relaunch`, a pane whose tool has exited is then
609
+ * relaunched ({@link relaunchIfToolExited}) before the caller goes on.
610
+ *
611
+ * @param label - Tool name as it appears in the error text (e.g. `Command Code`)
612
+ * @param worktreeId - Worktree ID
613
+ * @param instanceId - Agent instance ID (defaults to the primary instance)
614
+ * @param options.relaunch - Also relaunch a tool that exited inside a live pane
615
+ */
616
+ async requireSession(label, worktreeId, instanceId, options) {
617
+ const sessionName = this.getSessionName(worktreeId, instanceId);
618
+ const exists = await (0, tmux_1.hasSession)(sessionName);
619
+ if (!exists) {
620
+ throw new Error(`${label} session ${sessionName} does not exist. Start the session first.`);
621
+ }
622
+ if (options.relaunch) {
623
+ await this.relaunchIfToolExited(worktreeId, instanceId);
624
+ }
625
+ }
626
+ /**
627
+ * The install check a driver's `launchSession` opens with: a tool that is not
628
+ * installed stops the launch with {@link missingToolError}.
629
+ *
630
+ * copilot, opencode and OpenCode V2 do not call this. Each resolves the
631
+ * executable its launch line then names, so there the check and the line come
632
+ * from one measurement.
633
+ *
634
+ * @throws SessionStartUnavailableError when {@link isInstalled} answers false
635
+ */
636
+ async requireInstalled() {
637
+ const available = await this.isInstalled();
638
+ if (!available) {
639
+ throw (0, install_hints_1.missingToolError)(this);
640
+ }
641
+ }
642
+ /**
643
+ * The reuse decision a driver's `launchSession` makes before it types
644
+ * anything: name the session and, when its pane already exists, reconcile it
645
+ * ({@link reconcileExistingSession}) and ask whether the tool is still the
646
+ * thing drawing it ({@link isToolLive}, confirmed).
647
+ *
648
+ * Both log lines go through the caller's logger under the caller's action
649
+ * names, so each driver's log reads as it did when this sequence was written
650
+ * out in every one of them.
651
+ *
652
+ * opencode and OpenCode V2 keep their own copy: they hand the reconcile their
653
+ * pane geometry, resume their event stream on the live branch and release it
654
+ * on the relaunch branch.
655
+ *
656
+ * @param worktreeId - Worktree ID
657
+ * @param worktreePath - Worktree path
658
+ * @param instanceId - Agent instance ID (defaults to the primary instance)
659
+ * @param log.logger - The driver's logger
660
+ * @param log.liveAction - Logged when a live tool already holds the pane
661
+ * @param log.relaunchAction - Logged when the pane exists and its tool has exited
662
+ * @returns The session name; `exists` when its pane was already there; `live`
663
+ * when the tool is still in it, so the caller has nothing to launch
664
+ * @throws {ForeignSessionError} From {@link reconcileExistingSession}
665
+ */
666
+ async resolveLaunchPane(worktreeId, worktreePath, instanceId, log) {
667
+ const sessionName = this.getSessionName(worktreeId, instanceId);
668
+ // Check if session already exists
669
+ const exists = await (0, tmux_1.hasSession)(sessionName);
670
+ if (exists) {
671
+ await this.reconcileExistingSession(sessionName, worktreePath);
672
+ // Issue #2070: this branch used to return unconditionally. A tmux session
673
+ // outlives the agent that was launched into it — a quit, a self-update, a
674
+ // crash — and the launch was then skipped for a pane holding nothing but a
675
+ // shell prompt, which left `kill-session` by hand as the only recovery.
676
+ // When the tool is gone we fall THROUGH and re-send the launch command
677
+ // into the same pane.
678
+ if (await this.isToolLive(sessionName, { confirm: true })) {
679
+ log.logger.info(log.liveAction);
680
+ return { sessionName, exists, live: true };
681
+ }
682
+ log.logger.warn(log.relaunchAction, { sessionName });
683
+ }
684
+ return { sessionName, exists, live: false };
685
+ }
686
+ /**
687
+ * Create the tmux session a launch types into, then wait
688
+ * {@link TUI_SESSION_CREATE_WAIT_MS} for it. Creation path only: on the #2070
689
+ * relaunch path the pane already exists and the caller does not come here.
690
+ *
691
+ * @param sessionName - tmux session name
692
+ * @param worktreePath - Worktree path, the session's working directory
693
+ */
694
+ async createLaunchPane(sessionName, worktreePath) {
695
+ // Create tmux session. Scrollback depth comes from the shared
696
+ // TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
697
+ await (0, tmux_1.createSession)({
698
+ sessionName,
699
+ workingDirectory: worktreePath,
700
+ });
701
+ // Wait a moment for the session to be created
702
+ await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
703
+ }
704
+ /**
705
+ * The stop sequence a driver's `killSession` runs: name the session, ask the
706
+ * tool to quit when its pane exists, kill the tmux session, run the driver's
707
+ * cleanup and log.
708
+ *
709
+ * The keys and waits that ask the tool to quit stay in each driver, as
710
+ * `requestExit`: they are measured per tool, and {@link gracefulExitSequence}
711
+ * describes them without sending them. Both log lines go through the caller's
712
+ * logger, the stop line under the caller's action name, so each driver's log
713
+ * reads as it did when this sequence was written out in every one of them.
714
+ *
715
+ * `afterKill` runs after the tmux kill and before the stop line, inside the
716
+ * same `try`, whether or not tmux had a session to kill.
717
+ *
718
+ * claude, opencode and OpenCode V2 keep their own `killSession`: claude hands
719
+ * the stop to `stopClaudeSession`, and the other two check the exit's
720
+ * postcondition and release what the instance held.
721
+ *
722
+ * @param worktreeId - Worktree ID
723
+ * @param instanceId - Agent instance ID (defaults to the primary instance)
724
+ * @param stop.logger - The driver's logger
725
+ * @param stop.stoppedAction - Logged when tmux reports it killed the session
726
+ * @param stop.requestExit - The driver's exit keys and the waits between them
727
+ * @param stop.afterKill - The driver's cleanup once the tmux kill has run
728
+ * @throws Whatever the sequence threw, unchanged, after logging `session:stop-failed`
729
+ */
730
+ async requestExitAndKill(worktreeId, instanceId, stop) {
731
+ const sessionName = this.getSessionName(worktreeId, instanceId);
732
+ try {
733
+ const exists = await (0, tmux_1.hasSession)(sessionName);
734
+ if (exists) {
735
+ await stop.requestExit(sessionName);
736
+ }
737
+ // Kill the tmux session
738
+ const killed = await (0, tmux_1.killSession)(sessionName);
739
+ stop.afterKill?.(sessionName);
740
+ if (killed) {
741
+ stop.logger.info(stop.stoppedAction);
742
+ }
743
+ }
744
+ catch (error) {
745
+ stop.logger.error('session:stop-failed', { error: (0, errors_1.getErrorMessage)(error) });
746
+ throw error;
747
+ }
748
+ }
598
749
  /**
599
750
  * Declare the keys this tool's terminal UI may send (Issue #2046).
600
751
  *
@@ -19,16 +19,9 @@ const sources_1 = require("../../lib/hooks/sources");
19
19
  const hooks_config_1 = require("../../lib/hooks/sources/codex/hooks-config");
20
20
  const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
21
21
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
22
- const install_hints_1 = require("./install-hints");
23
22
  const launch_screen_1 = require("../../lib/session/launch-screen");
23
+ const errors_1 = require("../../lib/errors");
24
24
  const logger = (0, logger_1.createLogger)('cli-tools/codex');
25
- /**
26
- * Extract error message from unknown error type (DRY)
27
- * Same pattern as claude-session.ts getErrorMessage()
28
- */
29
- function getErrorMessage(error) {
30
- return error instanceof Error ? error.message : String(error);
31
- }
32
25
  /** Wait for Codex CLI to initialize after launch */
33
26
  const CODEX_INIT_WAIT_MS = 3000;
34
27
  /** Interval for polling trust dialog / prompt detection */
@@ -179,16 +172,6 @@ class CodexTool extends base_1.BaseCLITool {
179
172
  id = 'codex';
180
173
  name = 'Codex CLI';
181
174
  command = 'codex';
182
- /**
183
- * Check if Codex session is running for a worktree
184
- *
185
- * @param worktreeId - Worktree ID
186
- * @returns True if session is running
187
- */
188
- async isRunning(worktreeId, instanceId) {
189
- const sessionName = this.getSessionName(worktreeId, instanceId);
190
- return await (0, tmux_1.hasSession)(sessionName);
191
- }
192
175
  /**
193
176
  * Start a new Codex session for a worktree
194
177
  *
@@ -197,29 +180,22 @@ class CodexTool extends base_1.BaseCLITool {
197
180
  */
198
181
  async launchSession(worktreeId, worktreePath, instanceId) {
199
182
  // Check if Codex is installed
200
- const codexAvailable = await this.isInstalled();
201
- if (!codexAvailable) {
202
- throw (0, install_hints_1.missingToolError)(this);
203
- }
204
- const sessionName = this.getSessionName(worktreeId, instanceId);
205
- // Check if session already exists
206
- const exists = await (0, tmux_1.hasSession)(sessionName);
207
- if (exists) {
208
- await this.reconcileExistingSession(sessionName, worktreePath);
209
- // Issue #2070: this branch used to return unconditionally, and that is
210
- // the second half of the reported bug. codex's own "1. Update now"
211
- // replaces codex with `npm install` and exits; `Ctrl+C` twice quits it; a
212
- // crash does the same. The tmux session survives all three, so `exists`
213
- // stays true and the launch was skipped for a pane that had nothing but a
214
- // shell prompt in it — leaving `kill-session` by hand as the only
215
- // recovery. When the tool is gone we fall THROUGH and re-send the launch
216
- // command into the same pane.
217
- if (await this.isToolLive(sessionName, { confirm: true })) {
218
- logger.info('codex-session-sessionname');
219
- return;
220
- }
221
- logger.warn('codex-session-relaunch', { sessionName });
222
- }
183
+ await this.requireInstalled();
184
+ // Issue #2070: this branch used to return unconditionally, and that is
185
+ // the second half of the reported bug. codex's own "1. Update now"
186
+ // replaces codex with `npm install` and exits; `Ctrl+C` twice quits it; a
187
+ // crash does the same. The tmux session survives all three, so `exists`
188
+ // stays true and the launch was skipped for a pane that had nothing but a
189
+ // shell prompt in it — leaving `kill-session` by hand as the only
190
+ // recovery. When the tool is gone we fall THROUGH and re-send the launch
191
+ // command into the same pane.
192
+ const { sessionName, exists, live } = await this.resolveLaunchPane(worktreeId, worktreePath, instanceId, {
193
+ logger,
194
+ liveAction: 'codex-session-exists',
195
+ relaunchAction: 'codex-session-relaunch',
196
+ });
197
+ if (live)
198
+ return;
223
199
  // Issue #1760: everything the previous codex process reported through this
224
200
  // (worktreeId, instanceId) belongs to a session that no longer exists, and
225
201
  // the key is reused verbatim by the one about to be created. Without this
@@ -234,17 +210,6 @@ class CodexTool extends base_1.BaseCLITool {
234
210
  // NOT fence: there the process is the same one.)
235
211
  (0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: sources_1.CODEX_CLI_TOOL_ID, instanceId });
236
212
  try {
237
- if (!exists) {
238
- // Create tmux session. Codex is inline-rendered, so its transcript lives in
239
- // the pane scrollback — depth comes from the shared TMUX_HISTORY_LIMIT
240
- // default (Issue #1624), do not re-hardcode it here.
241
- await (0, tmux_1.createSession)({
242
- sessionName,
243
- workingDirectory: worktreePath,
244
- });
245
- // Wait a moment for the session to be created
246
- await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
247
- }
248
213
  // Issue #1760: hand this session its correlation keys, writing codex's
249
214
  // hooks config first if it is not already there. codex has no
250
215
  // `--settings`, so the keys ride in environment assignments on the launch
@@ -253,12 +218,21 @@ class CodexTool extends base_1.BaseCLITool {
253
218
  //
254
219
  // Falls back to the bare command on any failure and when
255
220
  // `CM_AGENT_HOOKS_INJECT=0`; a session that starts without hooks is the
256
- // pre-#1760 status quo, and a session that fails to start is not.
221
+ // pre-#1760 status quo, and a session that fails to start is not. The one
222
+ // exception is UAT isolation (Issue #3360), where the plan throws instead —
223
+ // which is why it is built BEFORE the tmux session: a refused launch must
224
+ // not leave an empty pane that `isRunning()` reports as a started codex.
257
225
  const launchCommand = (0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({
258
226
  target: { worktreeId, cliToolId: sources_1.CODEX_CLI_TOOL_ID, instanceId },
259
227
  executablePath: this.command,
260
228
  worktreePath,
261
229
  });
230
+ if (!exists) {
231
+ // Create tmux session. Codex is inline-rendered, so its transcript lives in
232
+ // the pane scrollback — depth comes from the shared TMUX_HISTORY_LIMIT
233
+ // default (Issue #1624), do not re-hardcode it here.
234
+ await this.createLaunchPane(sessionName, worktreePath);
235
+ }
262
236
  // Issue #2068: re-send the SAME launch line into the SAME pane, for the
263
237
  // one case where a launch legitimately has to happen twice — codex's own
264
238
  // `1. Update now` replaces codex with `npm install -g @openai/codex` and
@@ -286,10 +260,10 @@ class CodexTool extends base_1.BaseCLITool {
286
260
  relaunch: relaunchIntoSamePane,
287
261
  trustHooks: (0, hooks_config_1.shouldTrustCodexHooks)(worktreePath),
288
262
  });
289
- logger.info('started-codex-session:sessionname');
263
+ logger.info('started-codex-session');
290
264
  }
291
265
  catch (error) {
292
- const errorMessage = getErrorMessage(error);
266
+ const errorMessage = (0, errors_1.getErrorMessage)(error);
293
267
  throw new Error(`Failed to start Codex session: ${errorMessage}`);
294
268
  }
295
269
  }
@@ -556,7 +530,7 @@ class CodexTool extends base_1.BaseCLITool {
556
530
  // Issue #890: number-key selection confirms instantly; no trailing Enter.
557
531
  await (0, tmux_1.sendKeys)(sessionName, '1', false);
558
532
  trustDialogHandled = true;
559
- logger.info('auto-trusted-folder-for');
533
+ logger.info('auto-trusted-folder-for-codex');
560
534
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.CODEX_DIALOG_SETTLE_MS));
561
535
  continue;
562
536
  }
@@ -707,7 +681,7 @@ class CodexTool extends base_1.BaseCLITool {
707
681
  }
708
682
  await new Promise((resolve) => setTimeout(resolve, pollInterval));
709
683
  }
710
- logger.info('codex-prompt-not');
684
+ logger.info('codex-prompt-not-detected');
711
685
  throw new Error('Codex prompt not ready: timed out waiting for the input prompt before sending');
712
686
  }
713
687
  /**
@@ -718,18 +692,13 @@ class CodexTool extends base_1.BaseCLITool {
718
692
  */
719
693
  async sendMessage(worktreeId, message, instanceId) {
720
694
  const sessionName = this.getSessionName(worktreeId, instanceId);
721
- // Check if session exists
722
- const exists = await (0, tmux_1.hasSession)(sessionName);
723
- if (!exists) {
724
- throw new Error(`Codex session ${sessionName} does not exist. Start the session first.`);
725
- }
726
695
  // Issue #2070: the pane exists, but does the AGENT? codex's "1. Update now"
727
696
  // replaces it with `npm install` and exits, `Ctrl+C` twice quits it, a crash
728
697
  // does the same — and the send that follows used to sit in the readiness
729
698
  // wait until it timed out, leaving `kill-session` by hand as the only
730
699
  // recovery. Relaunches into the same pane when the tool is gone; costs one
731
700
  // `capture-pane` when it is not.
732
- await this.relaunchIfToolExited(worktreeId, instanceId);
701
+ await this.requireSession('Codex', worktreeId, instanceId, { relaunch: true });
733
702
  try {
734
703
  // Verify Codex is at prompt state before sending
735
704
  await this.waitForPrompt(sessionName);
@@ -742,13 +711,17 @@ class CodexTool extends base_1.BaseCLITool {
742
711
  // Issue #1933: the tool describes its own composer; the sender no
743
712
  // longer keys three module-level tables on the id.
744
713
  composer: this.describeComposer(),
714
+ // Issue #3366: codex draws fast keystrokes only when the burst ends and
715
+ // turns an Enter that arrives before that into a newline, so Enter
716
+ // waits until the composer shows the body.
717
+ awaitTypedBody: true,
745
718
  });
746
719
  // Issue #405: Invalidate cache after sending message
747
720
  (0, tmux_capture_cache_1.invalidateCache)(sessionName);
748
- logger.info('sent-message-to-codex-session:sessionnam');
721
+ logger.info('sent-message-to-codex-session');
749
722
  }
750
723
  catch (error) {
751
- const errorMessage = getErrorMessage(error);
724
+ const errorMessage = (0, errors_1.getErrorMessage)(error);
752
725
  throw new Error(`Failed to send message to Codex: ${errorMessage}`);
753
726
  }
754
727
  }
@@ -758,26 +731,17 @@ class CodexTool extends base_1.BaseCLITool {
758
731
  * @param worktreeId - Worktree ID
759
732
  */
760
733
  async killSession(worktreeId, instanceId) {
761
- const sessionName = this.getSessionName(worktreeId, instanceId);
762
- try {
734
+ await this.requestExitAndKill(worktreeId, instanceId, {
735
+ logger,
736
+ stoppedAction: 'stopped-codex-session',
763
737
  // Send Ctrl+D to exit Codex gracefully
764
- const exists = await (0, tmux_1.hasSession)(sessionName);
765
- if (exists) {
738
+ requestExit: async (sessionName) => {
766
739
  // Send Ctrl+D (ASCII 4)
767
740
  await (0, tmux_1.sendSpecialKey)(sessionName, 'C-d');
768
741
  // Wait a moment for Codex to exit
769
742
  await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_EXIT_WAIT_MS));
770
- }
771
- // Kill the tmux session
772
- const killed = await (0, tmux_1.killSession)(sessionName);
773
- if (killed) {
774
- logger.info('stopped-codex-session:sessionname');
775
- }
776
- }
777
- catch (error) {
778
- logger.error('session:stop-failed', { error: getErrorMessage(error) });
779
- throw error;
780
- }
743
+ },
744
+ });
781
745
  }
782
746
  }
783
747
  exports.CodexTool = CodexTool;