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
@@ -71,7 +71,7 @@ const ws_server_1 = require("./src/lib/ws-server");
71
71
  const worktrees_1 = require("./src/lib/git/worktrees");
72
72
  const db_instance_1 = require("./src/lib/db/db-instance");
73
73
  const response_poller_1 = require("./src/lib/polling/response-poller");
74
- const auto_yes_manager_1 = require("./src/lib/polling/auto-yes-manager");
74
+ const auto_yes_lifecycle_1 = require("./src/lib/auto-yes-lifecycle");
75
75
  const schedule_manager_1 = require("./src/lib/schedule-manager");
76
76
  const timer_manager_1 = require("./src/lib/timer-manager");
77
77
  const resource_cleanup_1 = require("./src/lib/resource-cleanup");
@@ -825,8 +825,10 @@ app.prepare().then(() => {
825
825
  }
826
826
  // Stop polling first
827
827
  (0, response_poller_1.stopAllPolling)();
828
- // Issue #138: Stop all auto-yes pollers
829
- (0, auto_yes_manager_1.stopAllAutoYesPolling)();
828
+ // Issue #138: Stop all auto-yes pollers. Issue #3184: the `server-shutdown`
829
+ // row of the Auto-Yes lifecycle table — the state itself is in memory and
830
+ // goes with the process; nothing is persisted for the next start.
831
+ (0, auto_yes_lifecycle_1.releaseAutoYes)('server-shutdown', { scope: 'all' });
830
832
  // Issue #294: Stop all scheduled executions (SIGKILL fire-and-forget)
831
833
  (0, schedule_manager_1.stopAllSchedules)();
832
834
  // Issue #534: Stop all timer-based delayed messages
@@ -3,7 +3,9 @@
3
3
  * CLI-side API Response Type Definitions
4
4
  * Issue #518: [DR1-06] All types include Mirrors comments for server-side traceability
5
5
  *
6
- * These types mirror server-side response shapes. Phase 2 will migrate to
7
- * shared types in src/types/api-contracts.ts.
6
+ * These types mirror server-side response shapes. Where a server module has no
7
+ * imports of its own (e.g. `lib/session/prompt-view`), it is imported here by
8
+ * relative path instead of restated, so the CLI build compiles it and there is
9
+ * no second definition to drift (see `promptView` below).
8
10
  */
9
11
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -20,7 +20,7 @@
20
20
  * All values are preserved from the original literals (no behavior change).
21
21
  */
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.LIVENESS_CONFIRM_DELAY_MS = exports.CLAUDE_RESTART_DELAY_MS = exports.CLAUDE_ENV_SANITIZE_WAIT_MS = exports.OPENCODE_V2_COMPOSER_WAIT_MS = exports.OPENCODE_V2_EXIT_WAIT_MS = exports.COMMAND_CODE_INIT_WAIT_MS = exports.VIBE_LOCAL_DOUBLE_ENTER_WAIT_MS = exports.COPILOT_EXIT_WAIT_MS = exports.OPENCODE_INTERRUPT_SECOND_ESCAPE_DELAY_MS = exports.OPENCODE_EXIT_WAIT_MS = exports.CODEX_DIALOG_SETTLE_MS = exports.TUI_EXIT_WAIT_MS = exports.TUI_INTERRUPT_SETTLE_MS = exports.TUI_MESSAGE_PROCESSED_WAIT_MS = exports.TUI_TEXT_INPUT_WAIT_MS = exports.TUI_SESSION_CREATE_WAIT_MS = void 0;
23
+ exports.LIVENESS_CONFIRM_DELAY_MS = exports.CLAUDE_ENV_SANITIZE_WAIT_MS = exports.OPENCODE_V2_COMPOSER_WAIT_MS = exports.OPENCODE_V2_EXIT_WAIT_MS = exports.COMMAND_CODE_INIT_WAIT_MS = exports.VIBE_LOCAL_DOUBLE_ENTER_WAIT_MS = exports.COPILOT_EXIT_WAIT_MS = exports.OPENCODE_INTERRUPT_SECOND_ESCAPE_DELAY_MS = exports.OPENCODE_EXIT_WAIT_MS = exports.CODEX_DIALOG_SETTLE_MS = exports.TUI_EXIT_WAIT_MS = exports.TUI_INTERRUPT_SETTLE_MS = exports.TUI_MESSAGE_PROCESSED_WAIT_MS = exports.TUI_TEXT_INPUT_WAIT_MS = exports.TUI_SESSION_CREATE_WAIT_MS = void 0;
24
24
  /**
25
25
  * Wait (ms) after `createSession()` before sending the first keys, giving tmux
26
26
  * time to spin up the session.
@@ -162,11 +162,6 @@ exports.OPENCODE_V2_COMPOSER_WAIT_MS = 15000;
162
162
  * Site: session-key-sender sanitizeSessionEnvironment().
163
163
  */
164
164
  exports.CLAUDE_ENV_SANITIZE_WAIT_MS = 100;
165
- /**
166
- * Wait (ms) before restarting a Claude session, after the old session is stopped.
167
- * Site: claude-session restartClaudeSession().
168
- */
169
- exports.CLAUDE_RESTART_DELAY_MS = 1000;
170
165
  /**
171
166
  * Wait (ms) between the two liveness readings that must agree before a reuse
172
167
  * path re-sends a launch command (Issue #2070).
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ /**
3
+ * `CM_UAT_ISOLATION=1` — the mode a UAT / daily-check server and its CLI run in
4
+ * (Issue #3360).
5
+ *
6
+ * A UAT server is isolated from production by its own port, DB, tmux socket and
7
+ * state directories (`.commandmate/uat.yaml`). Three paths were left that those
8
+ * do not cover, because they are keyed by the user's login rather than by
9
+ * anything the UAT can move:
10
+ *
11
+ * 1. **codex's shared files.** `$CODEX_HOME/hooks.json`, the relay under
12
+ * `$CODEX_HOME/commandmate/` and the hook trust in `config.toml` live beside
13
+ * codex's login (`auth.json`), so moving `CODEX_HOME` logs codex out. In this
14
+ * mode the server writes none of them: it reuses the shared file only when it
15
+ * is already byte-identical to what this build would write (the per-session
16
+ * URL travels in the environment, so the hooks then reach THIS server), and
17
+ * otherwise refuses the launch ({@link UatIsolationLaunchRefusedError}) —
18
+ * a bare codex would still read the shared file and run production's hooks.
19
+ * antigravity's `~/.gemini/config/hooks.json` and copilot's
20
+ * `~/.copilot/settings.json` (Issue #3391) are handled the same way. It
21
+ * also never answers the hook review with *trust*, which is codex writing
22
+ * `config.toml`.
23
+ * 2. **claude's user-level hooks.** `--settings` is added to
24
+ * `~/.claude/settings.json`, not substituted for it, so the user's own hooks
25
+ * (which post to production) would run in a UAT session too. Moving
26
+ * `CLAUDE_CONFIG_DIR` logs claude out (measured, `-p` and interactive). In
27
+ * this mode claude is launched with `--setting-sources project,local`, which
28
+ * drops the user source and keeps `--settings` (measured on 2.1.289) — the
29
+ * interactive launch and `claude -p` (Schedules, daily summary) alike.
30
+ * 3. **the CLI's `.env`.** A client in this mode reads no `.env` file at all and
31
+ * refuses to fall back to port 3000: it dials only the `CM_PORT` the caller
32
+ * exported.
33
+ *
34
+ * Unset (or any value other than `1` / `own-home`) changes nothing anywhere.
35
+ *
36
+ * ## `CM_UAT_ISOLATION=own-home` (Issue #3312)
37
+ *
38
+ * For a run under a dedicated OS user (the daily product-path check), whose
39
+ * HOME holds nobody else's CLI config. Everything above still holds — the
40
+ * launch is refused rather than started bare when hook setup fails, the
41
+ * receiver URL travels in the launch environment, headless `codex exec` /
42
+ * `agy -p` are refused, claude reads no user-level settings, the CLI reads no
43
+ * `.env` and never falls back to 3000 — with one difference: the shared hook
44
+ * files (codex's `hooks.json`, relay and trust, antigravity's and copilot's
45
+ * hook files, the claude settings under `CM_AGENT_HOOKS_DIR`) are WRITTEN by
46
+ * this build, instead of being reused read-only. Only after
47
+ * {@link assertUatOwnHomeWriteTargets} has checked, before each launch, that
48
+ * this process runs as `CM_UAT_DEDICATED_USER`, that HOME is that user's, and
49
+ * that every file it is about to write resolves (symlinks followed) to a place
50
+ * inside that HOME owned by that user. {@link sharedHookWritePolicy} is the one
51
+ * rule each tool's launch path calls.
52
+ *
53
+ * `docs/user-guide/uat-isolation.md` has the measurement table and the skip
54
+ * conditions for what cannot be isolated.
55
+ *
56
+ * @module config/uat-isolation
57
+ */
58
+ var __importDefault = (this && this.__importDefault) || function (mod) {
59
+ return (mod && mod.__esModule) ? mod : { "default": mod };
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.UAT_OWN_HOME_FIX = exports.UAT_SAME_BUILD_FIX = exports.UatIsolationLaunchRefusedError = exports.CLAUDE_UAT_SETTING_SOURCES = exports.UAT_DEDICATED_USER_ENV_VAR = exports.UAT_ISOLATION_OWN_HOME = exports.UAT_ISOLATION_ENV_VAR = void 0;
63
+ exports.getUatIsolationMode = getUatIsolationMode;
64
+ exports.isUatIsolationEnabled = isUatIsolationEnabled;
65
+ exports.checkUatOwnHomeWriteTargets = checkUatOwnHomeWriteTargets;
66
+ exports.assertUatOwnHomeWriteTargets = assertUatOwnHomeWriteTargets;
67
+ exports.sharedHookWritePolicy = sharedHookWritePolicy;
68
+ const fs_1 = __importDefault(require("fs"));
69
+ const os_1 = __importDefault(require("os"));
70
+ const path_1 = __importDefault(require("path"));
71
+ /** The switch. Only the exact values `1` and `own-home` turn it on. */
72
+ exports.UAT_ISOLATION_ENV_VAR = 'CM_UAT_ISOLATION';
73
+ /** The value of {@link UAT_ISOLATION_ENV_VAR} for a run under a dedicated OS user (Issue #3312). */
74
+ exports.UAT_ISOLATION_OWN_HOME = 'own-home';
75
+ /** The login name `own-home` must run as (Issue #3312). Compared with `os.userInfo().username`. */
76
+ exports.UAT_DEDICATED_USER_ENV_VAR = 'CM_UAT_DEDICATED_USER';
77
+ /**
78
+ * `--setting-sources` for a claude session in this mode: the user source
79
+ * (`$CLAUDE_CONFIG_DIR/settings.json`, hooks and plugins included) is dropped;
80
+ * the repository's own `project` / `local` settings and `--settings` stay.
81
+ */
82
+ exports.CLAUDE_UAT_SETTING_SOURCES = 'project,local';
83
+ /** Which isolation mode this process runs in. */
84
+ function getUatIsolationMode(env = process.env) {
85
+ const value = env[exports.UAT_ISOLATION_ENV_VAR];
86
+ if (value === '1')
87
+ return 'shared-read-only';
88
+ if (value === exports.UAT_ISOLATION_OWN_HOME)
89
+ return 'own-home';
90
+ return 'off';
91
+ }
92
+ /**
93
+ * Whether this process runs in UAT isolation mode — `1` or `own-home`. Every
94
+ * protection except "never write the shared hook files" keys off this.
95
+ */
96
+ function isUatIsolationEnabled(env = process.env) {
97
+ return getUatIsolationMode(env) !== 'off';
98
+ }
99
+ /**
100
+ * Thrown by a launch that would otherwise start an agent which reads a shared
101
+ * hook config this server did not (and in this mode may not) write.
102
+ *
103
+ * Starting the agent "without hooks" is not an option for codex, antigravity
104
+ * or copilot: the shared file is read regardless of what this server passes,
105
+ * so the production server's hooks — already trusted — would run in the UAT
106
+ * session and post to production. So the launch is refused, and the message says what
107
+ * makes it start.
108
+ */
109
+ class UatIsolationLaunchRefusedError extends Error {
110
+ constructor(tool, reason, fix) {
111
+ super(getUatIsolationMode() === 'own-home'
112
+ ? `${exports.UAT_ISOLATION_ENV_VAR}=${exports.UAT_ISOLATION_OWN_HOME}: refusing to start ${tool}: ${reason}. ` +
113
+ `This server writes the hook config only inside the dedicated user's own HOME, and ${tool} ` +
114
+ `would otherwise start with hooks this server did not prepare. ${fix}`
115
+ : `${exports.UAT_ISOLATION_ENV_VAR}=1: refusing to start ${tool}: ${reason}. ` +
116
+ `This server does not write the shared hook config in UAT isolation, and ${tool} ` +
117
+ `would read it anyway and run the production hooks. ${fix}`);
118
+ this.name = 'UatIsolationLaunchRefusedError';
119
+ }
120
+ }
121
+ exports.UatIsolationLaunchRefusedError = UatIsolationLaunchRefusedError;
122
+ /** The fix for a shared hook config that does not match this build. */
123
+ exports.UAT_SAME_BUILD_FIX = 'Run the UAT with the same CommandMate build as the production server, so the shared file already matches what this build writes.';
124
+ /** The fix for an `own-home` launch whose user, HOME or write targets did not check out. */
125
+ exports.UAT_OWN_HOME_FIX = `Run ${exports.UAT_ISOLATION_ENV_VAR}=${exports.UAT_ISOLATION_OWN_HOME} as the user named by ${exports.UAT_DEDICATED_USER_ENV_VAR}, ` +
126
+ 'with HOME set to that user\'s home and every hook config path (CODEX_HOME, CM_AGENT_HOOKS_DIR, ...) inside it.';
127
+ function currentIdentity() {
128
+ const info = os_1.default.userInfo();
129
+ return { username: info.username, uid: info.uid, homedir: info.homedir };
130
+ }
131
+ /**
132
+ * Where a write to `target` would land, symlinks followed, and whose entry
133
+ * decides who may write there: the target itself when it exists, else its
134
+ * nearest existing ancestor (a file not yet created is judged by the directory
135
+ * it would be created in). A dangling symlink is refused: writing through it
136
+ * would create a file wherever it points.
137
+ */
138
+ function resolveWriteTarget(target) {
139
+ const absolute = path_1.default.resolve(target);
140
+ let existing = absolute;
141
+ const rest = [];
142
+ for (;;) {
143
+ let entryExists = false;
144
+ try {
145
+ fs_1.default.lstatSync(existing);
146
+ entryExists = true;
147
+ }
148
+ catch {
149
+ entryExists = false;
150
+ }
151
+ if (entryExists)
152
+ break;
153
+ const parent = path_1.default.dirname(existing);
154
+ if (parent === existing)
155
+ return `${target} has no existing ancestor`;
156
+ rest.unshift(path_1.default.basename(existing));
157
+ existing = parent;
158
+ }
159
+ let real;
160
+ try {
161
+ real = fs_1.default.realpathSync(existing);
162
+ }
163
+ catch {
164
+ return `${existing} is a symlink that points nowhere`;
165
+ }
166
+ return { real: path_1.default.join(real, ...rest), owner: fs_1.default.statSync(real).uid };
167
+ }
168
+ /**
169
+ * Why an `own-home` launch may not write `writeTargets`, or null when it may
170
+ * (Issue #3312). Checks, in this order: `CM_UAT_DEDICATED_USER` is set and is
171
+ * the user this process runs as; `HOME` resolves to that user's home directory
172
+ * (from the account database) and is owned by them; each target resolves —
173
+ * every symlink on the way followed — to a path inside that home, and the entry
174
+ * that decides the write (the target, or its nearest existing ancestor) is
175
+ * owned by that user.
176
+ */
177
+ function checkUatOwnHomeWriteTargets(writeTargets, env = process.env, identity = currentIdentity()) {
178
+ const dedicated = env[exports.UAT_DEDICATED_USER_ENV_VAR];
179
+ if (!dedicated)
180
+ return `${exports.UAT_DEDICATED_USER_ENV_VAR} is not set`;
181
+ if (identity.username !== dedicated) {
182
+ return `this process runs as ${identity.username}, not as the dedicated user ${dedicated}`;
183
+ }
184
+ const home = env.HOME;
185
+ if (!home || !path_1.default.isAbsolute(home))
186
+ return 'HOME is not set to an absolute path';
187
+ let homeReal;
188
+ let accountHomeReal;
189
+ try {
190
+ homeReal = fs_1.default.realpathSync(home);
191
+ accountHomeReal = fs_1.default.realpathSync(identity.homedir);
192
+ }
193
+ catch {
194
+ return `HOME (${home}) or ${dedicated}'s home directory (${identity.homedir}) does not exist`;
195
+ }
196
+ if (homeReal !== accountHomeReal) {
197
+ return `HOME (${home}) is not ${dedicated}'s home directory (${identity.homedir})`;
198
+ }
199
+ if (fs_1.default.statSync(homeReal).uid !== identity.uid)
200
+ return `HOME (${home}) is not owned by ${dedicated}`;
201
+ for (const target of writeTargets) {
202
+ const resolved = resolveWriteTarget(target);
203
+ if (typeof resolved === 'string')
204
+ return resolved;
205
+ if (resolved.real !== homeReal && !resolved.real.startsWith(`${homeReal}${path_1.default.sep}`)) {
206
+ return `${target} resolves to ${resolved.real}, outside ${dedicated}'s HOME (${homeReal})`;
207
+ }
208
+ if (resolved.owner !== identity.uid) {
209
+ return `${target} (${resolved.real}) is not owned by ${dedicated}`;
210
+ }
211
+ }
212
+ return null;
213
+ }
214
+ /**
215
+ * Under `own-home`, refuse the launch of `tool` unless
216
+ * {@link checkUatOwnHomeWriteTargets} passes for `writeTargets`. A no-op in
217
+ * every other mode.
218
+ *
219
+ * @throws {UatIsolationLaunchRefusedError}
220
+ */
221
+ function assertUatOwnHomeWriteTargets(tool, writeTargets, env = process.env) {
222
+ if (getUatIsolationMode(env) !== 'own-home')
223
+ return;
224
+ const problem = checkUatOwnHomeWriteTargets(writeTargets, env);
225
+ if (problem)
226
+ throw new UatIsolationLaunchRefusedError(tool, problem, exports.UAT_OWN_HOME_FIX);
227
+ }
228
+ /**
229
+ * The one rule for a hook file shared with the user's other CommandMate
230
+ * servers (codex, antigravity and copilot call it; Issue #3312):
231
+ *
232
+ * - not isolated: `write`
233
+ * - `CM_UAT_ISOLATION=1`: `read-only` — reuse it only when it already matches
234
+ * - `CM_UAT_ISOLATION=own-home`: `write`, once
235
+ * {@link assertUatOwnHomeWriteTargets} has passed for every path the write
236
+ * touches; otherwise the launch is refused
237
+ *
238
+ * @throws {UatIsolationLaunchRefusedError} Under `own-home` only
239
+ */
240
+ function sharedHookWritePolicy(tool, writeTargets, env = process.env) {
241
+ const mode = getUatIsolationMode(env);
242
+ if (mode === 'shared-read-only')
243
+ return 'read-only';
244
+ assertUatOwnHomeWriteTargets(tool, writeTargets, env);
245
+ return 'write';
246
+ }
@@ -53,6 +53,7 @@ var __importStar = (this && this.__importStar) || (function () {
53
53
  })();
54
54
  Object.defineProperty(exports, "__esModule", { value: true });
55
55
  exports.detectBufferReset = detectBufferReset;
56
+ exports.isCodexCursorAtOrBelowComposer = isCodexCursorAtOrBelowComposer;
56
57
  exports.cleanCliResponse = cleanCliResponse;
57
58
  exports.advanceCapturedLineForTranscriptTurn = advanceCapturedLineForTranscriptTurn;
58
59
  exports.savePendingAssistantResponse = savePendingAssistantResponse;
@@ -62,6 +63,7 @@ const ws_server_1 = require("./ws-server");
62
63
  // Issue #571 [DR1-05]: Import directly from response-cleaner instead of barrel re-export
63
64
  const response_cleaner_1 = require("./response-cleaner");
64
65
  const types_1 = require("./cli-tools/types");
66
+ const cli_patterns_1 = require("./detection/cli-patterns");
65
67
  const logger_1 = require("../lib/logger");
66
68
  const logger = (0, logger_1.createLogger)('assistant-response-saver');
67
69
  /**
@@ -141,6 +143,36 @@ function countCapturedLines(output) {
141
143
  }
142
144
  return trimmedLength;
143
145
  }
146
+ /**
147
+ * Does a codex cursor start at or below the composer? (Issue #3335)
148
+ *
149
+ * Nothing at or below codex's composer is a reply: it is the composer, the
150
+ * status bar and `? for shortcuts`. On the inline layout (0.15x) a cursor
151
+ * rarely lands there, because the next turn is printed over the composer band
152
+ * and the composer moves down. On 0.160.0 it is where the cursor always is.
153
+ *
154
+ * codex 0.160.0 draws in the alternate screen: the capture is the pane, 1000
155
+ * rows, whatever the transcript holds, with the composer pinned to row 996.
156
+ * The row count this module stores is therefore NOT a read cursor for it — it
157
+ * settles at 999 or 1000 after the first read (here, or in
158
+ * {@link advanceCapturedLineForTranscriptTurn}) and never grows again, and
159
+ * the reply is drawn above it. The screen read does not take codex's reply
160
+ * from such a pane; the reply reaches History from codex's own transcript
161
+ * (`hooks/sources/codex/history.ts`). What this rule stops is the flush
162
+ * saving the chrome past the parked cursor as the reply — before #3335 a
163
+ * cursor of 999 saved `? for shortcuts`, and 997 or 998 the status bar.
164
+ *
165
+ * The composer is located by its SGR attributes (#2310), on the whole pane.
166
+ * A pane it cannot be found on keeps the reading it had.
167
+ *
168
+ * @param lines - The whole capture, ANSI intact
169
+ * @param cursor - The row the flush would start reading at
170
+ * @returns True when the rows from `cursor` down are all codex chrome
171
+ */
172
+ function isCodexCursorAtOrBelowComposer(lines, cursor) {
173
+ const chromeStart = (0, cli_patterns_1.findCodexChromeStart)(lines);
174
+ return chromeStart >= 0 && cursor >= chromeStart;
175
+ }
144
176
  /**
145
177
  * Time offset (in milliseconds) for assistant message timestamp
146
178
  * Ensures assistant response appears before user message in chronological order
@@ -167,9 +199,12 @@ const ASSISTANT_TIMESTAMP_OFFSET_MS = 1;
167
199
  *
168
200
  * @param output - Raw output from CLI tool
169
201
  * @param cliToolId - CLI tool identifier
202
+ * @param paneLines - The whole capture `output` was sliced from, for the
203
+ * startup-screen rule of {@link cleanScrollbackResponse} (Issue #3293). Only
204
+ * that cleaner reads it; omitted, no tool's cleaning changes
170
205
  * @returns Cleaned response content
171
206
  */
172
- function cleanCliResponse(output, cliToolId) {
207
+ function cleanCliResponse(output, cliToolId, paneLines) {
173
208
  switch (cliToolId) {
174
209
  case 'claude':
175
210
  return (0, response_cleaner_1.cleanClaudeResponse)(output);
@@ -183,7 +218,7 @@ function cleanCliResponse(output, cliToolId) {
183
218
  case 'command-code':
184
219
  case 'antigravity':
185
220
  case 'vibe-local':
186
- return (0, response_cleaner_1.cleanScrollbackResponse)(output, cliToolId);
221
+ return (0, response_cleaner_1.cleanScrollbackResponse)(output, cliToolId, paneLines);
187
222
  default:
188
223
  return output.trim();
189
224
  }
@@ -362,7 +397,31 @@ async function savePendingAssistantResponse(db, worktreeId, cliToolId, userMessa
362
397
  // 8. Clean the response.
363
398
  // Only scrollback-rendering tools reach this point (Issue #1292), so the
364
399
  // tool-specific cleaners in cleanCliResponse cover every remaining case.
365
- const cleanedResponse = cleanCliResponse(newOutput, cliToolId);
400
+ //
401
+ // Issue #3293: the pane goes with the rows. On the first send of a session
402
+ // the cursor is 0 and "everything past it" is the tool's startup screen —
403
+ // measured on vibe-local as `response:saved {"fromLine":0,"toLine":1001}`
404
+ // 30 ms after `started-vibe-local-session`, and on codex as an assistant
405
+ // row holding the version, the cwd and the logo. A pane no message has been
406
+ // echoed on yet holds no reply, and that is a fact about the pane: the rows
407
+ // past the cursor ordinarily carry no echo either. It cleans to '', so the
408
+ // branch below moves the cursor exactly as the banner save used to.
409
+ //
410
+ // Not on a capture that came back at the size it was asked for: the window
411
+ // has clipped it, and the echo of a turn longer than the window is no longer
412
+ // in it. This is `isCaptureWindowSaturated` (#1670) against this module's
413
+ // own window, written out because `lib/tmux` is not imported from here
414
+ // (#1922).
415
+ const captureClipped = lines.length >= SESSION_OUTPUT_BUFFER_SIZE;
416
+ //
417
+ // Issue #3335: on codex, rows from the composer down are chrome, never a
418
+ // reply — and on 0.160.0 (alternate screen) that is where the cursor
419
+ // parks for the life of the session. Read as nothing, so the branch below
420
+ // moves the cursor as an empty clean would. See isCodexCursorAtOrBelowComposer.
421
+ const pastCodexComposer = cliToolId === 'codex' && isCodexCursorAtOrBelowComposer(lines, effectiveLastCapturedLine);
422
+ const cleanedResponse = pastCodexComposer
423
+ ? ''
424
+ : cleanCliResponse(newOutput, cliToolId, captureClipped ? undefined : lines);
366
425
  // 9. Check if cleaned response is empty
367
426
  if (!cleanedResponse || cleanedResponse.trim() === '') {
368
427
  // Output exists but cleaned to empty - update position but don't save
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * When Auto-Yes state is released, decided in one table (Issue #3184).
4
+ *
5
+ * Auto-Yes lives per worktree x instance with its own expiry, independent of
6
+ * the session it answers for. Every path that ends that relationship — a killed
7
+ * session (#3182), a removed instance, a deleted worktree, the orphan sweep,
8
+ * a poller giving up on errors, server shutdown — used to decide for itself
9
+ * what to do with the state, and one of them (instance removal) decided
10
+ * nothing at all, leaving a grant that silently approved the next session to
11
+ * claim the id. {@link AUTO_YES_LIFECYCLE} is the decision; each path calls
12
+ * {@link releaseAutoYes} (or its two halves) with the event it is.
13
+ *
14
+ * ## disable vs delete
15
+ *
16
+ * - `disable` keeps the entry with `enabled: false` (and the `stopReason`), for
17
+ * an instance that still exists — the UI can say why Auto-Yes went off.
18
+ * - `delete` drops the entry, for an instance or worktree that no longer
19
+ * exists. Kept, it would never be swept: the orphan sweep works per worktree.
20
+ *
21
+ * ## Not in the table
22
+ *
23
+ * Manual disable, expiry and the stop pattern are Auto-Yes's own conditions,
24
+ * not lifecycle events, and stay in `auto-yes-state` / the auto-yes route. A
25
+ * worktree ID rename MOVES the state (`worktree-session-reconcile`) rather than
26
+ * releasing it. The "starting" record (#3179) is cleared by kill-session beside
27
+ * this call, not by it: it has its own token rules (#3195).
28
+ *
29
+ * ## Imports go through the auto-yes-manager barrel
30
+ *
31
+ * The cleanup modules' tests mock `@/lib/polling/auto-yes-manager`, and so must
32
+ * this module's imports resolve to it. That barrel re-exports the poller, so
33
+ * `auto-yes-poller` must NOT import this module (it would be a cycle); its
34
+ * consecutive-errors path applies the same row directly, and
35
+ * `tests/unit/lib/auto-yes-lifecycle-3184.test.ts` holds the two equal.
36
+ *
37
+ * @module lib/auto-yes-lifecycle
38
+ */
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.AUTO_YES_LIFECYCLE = void 0;
41
+ exports.stopAutoYesPollersFor = stopAutoYesPollersFor;
42
+ exports.applyAutoYesStateRule = applyAutoYesStateRule;
43
+ exports.releaseAutoYes = releaseAutoYes;
44
+ const auto_yes_manager_1 = require("./polling/auto-yes-manager");
45
+ /**
46
+ * The table (design §8.2).
47
+ *
48
+ * `session-killed` is #3182's decision as #3188 shipped it: disable with no
49
+ * reason (no new reason was added), for the instance only. `server-shutdown`
50
+ * deliberately does not persist anything: the state lives in memory, and a
51
+ * restarted server starting with every grant off is the safe side.
52
+ *
53
+ * `consecutive-errors` is for real capture failures only: a session that
54
+ * exists but cannot be read. A session that does not exist (not started yet,
55
+ * or not started at all) is not one — the poller waits for it until
56
+ * `expiresAt`, at the backoff cap (Issue #3329), since the grant is
57
+ * independent of the session.
58
+ */
59
+ exports.AUTO_YES_LIFECYCLE = {
60
+ 'session-killed': { state: 'disable', poller: 'stop' },
61
+ 'instance-removed': { state: 'delete', poller: 'stop' },
62
+ 'worktree-deleted': { state: 'delete', poller: 'stop' },
63
+ 'orphan-swept': { state: 'delete', poller: 'stop' },
64
+ 'consecutive-errors': { state: 'disable', stopReason: 'consecutive_errors', poller: 'stop' },
65
+ 'server-shutdown': { state: 'none', poller: 'stop' },
66
+ };
67
+ /**
68
+ * Stop the pollers the event's target names (the poller half of the table).
69
+ * Separate from {@link applyAutoYesStateRule} so a caller that reports the two
70
+ * failures apart (`session-cleanup`) can keep doing so.
71
+ */
72
+ function stopAutoYesPollersFor(event, target) {
73
+ if (exports.AUTO_YES_LIFECYCLE[event].poller !== 'stop')
74
+ return;
75
+ switch (target.scope) {
76
+ case 'instance':
77
+ (0, auto_yes_manager_1.stopAutoYesPolling)((0, auto_yes_manager_1.buildCompositeKey)(target.worktreeId, target.cliToolId, target.instanceId));
78
+ return;
79
+ case 'worktree':
80
+ (0, auto_yes_manager_1.stopAutoYesPollingByWorktree)(target.worktreeId);
81
+ return;
82
+ case 'key':
83
+ (0, auto_yes_manager_1.stopAutoYesPolling)(target.compositeKey);
84
+ return;
85
+ case 'all':
86
+ (0, auto_yes_manager_1.stopAllAutoYesPolling)();
87
+ return;
88
+ }
89
+ }
90
+ function disableKey(compositeKey, stopReason) {
91
+ const cliToolId = (0, auto_yes_manager_1.extractCliToolId)(compositeKey);
92
+ if (!cliToolId)
93
+ return;
94
+ (0, auto_yes_manager_1.disableAutoYes)((0, auto_yes_manager_1.extractWorktreeId)(compositeKey), cliToolId, stopReason, (0, auto_yes_manager_1.extractInstanceId)(compositeKey) ?? undefined);
95
+ }
96
+ /** Apply the event's state rule to its target (the state half of the table). */
97
+ function applyAutoYesStateRule(event, target) {
98
+ const rule = exports.AUTO_YES_LIFECYCLE[event];
99
+ if (rule.state === 'none')
100
+ return;
101
+ switch (target.scope) {
102
+ case 'instance':
103
+ if (rule.state === 'disable') {
104
+ (0, auto_yes_manager_1.disableAutoYes)(target.worktreeId, target.cliToolId, rule.stopReason, target.instanceId);
105
+ }
106
+ else {
107
+ (0, auto_yes_manager_1.deleteAutoYesState)((0, auto_yes_manager_1.buildCompositeKey)(target.worktreeId, target.cliToolId, target.instanceId));
108
+ }
109
+ return;
110
+ case 'worktree':
111
+ if (rule.state === 'disable') {
112
+ (0, auto_yes_manager_1.getCompositeKeysByWorktree)(target.worktreeId).forEach((key) => disableKey(key, rule.stopReason));
113
+ }
114
+ else {
115
+ (0, auto_yes_manager_1.deleteAutoYesStateByWorktree)(target.worktreeId);
116
+ }
117
+ return;
118
+ case 'key':
119
+ if (rule.state === 'disable') {
120
+ disableKey(target.compositeKey, rule.stopReason);
121
+ }
122
+ else {
123
+ (0, auto_yes_manager_1.deleteAutoYesState)(target.compositeKey);
124
+ }
125
+ return;
126
+ case 'all':
127
+ (0, auto_yes_manager_1.getAutoYesStateCompositeKeys)().forEach((key) => rule.state === 'disable' ? disableKey(key, rule.stopReason) : (0, auto_yes_manager_1.deleteAutoYesState)(key));
128
+ return;
129
+ }
130
+ }
131
+ /**
132
+ * Release Auto-Yes for an event: stop the pollers first, then apply the state
133
+ * rule — the order `session-cleanup` has kept since #404. Both halves are
134
+ * synchronous, so no poll can run between them.
135
+ */
136
+ function releaseAutoYes(event, target) {
137
+ stopAutoYesPollersFor(event, target);
138
+ applyAutoYesStateRule(event, target);
139
+ }