commandmate 0.48.0 → 0.49.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (780) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +292 -285
  3. package/.next/app-path-routes-manifest.json +35 -34
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +8 -0
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/capabilities/route.js +1 -1
  18. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  27. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  28. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  30. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  31. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  33. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  34. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/push/escalation/route.js +1 -1
  38. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  40. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/push/vapid/route.js +1 -1
  42. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  44. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  45. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/relays/[relayId]/route.js +1 -0
  47. package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -0
  48. package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -0
  49. package/.next/server/app/api/relays/route.js +1 -1
  50. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  51. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  55. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  56. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/repositories/clone/route.js +1 -1
  58. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  59. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/repositories/restore/route.js +1 -1
  62. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  63. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/repositories/route.js +1 -1
  65. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  66. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/repositories/scan/route.js +1 -1
  68. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  69. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/sync/route.js +1 -1
  71. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  72. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  75. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  76. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  87. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  91. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/verification/runs/route.js +1 -1
  93. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  96. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  99. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  102. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  111. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  114. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  171. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/route.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.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  204. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +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 +1 -1
  211. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/send/route.js +144 -1
  216. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  219. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
  237. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  238. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/runs/route.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.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/route.js +1 -1
  265. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  268. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/page_client-reference-manifest.js +1 -1
  272. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  275. package/.next/server/app/sessions/page.js +1 -1
  276. package/.next/server/app/sessions/page.js.nft.json +1 -1
  277. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/skills/[skillId]/page.js +1 -1
  279. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  280. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  284. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  285. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/worktrees/[id]/page.js +11 -11
  287. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  288. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  289. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  290. package/.next/server/app-paths-manifest.json +35 -34
  291. package/.next/server/chunks/1601.js +2 -2
  292. package/.next/server/chunks/1656.js +2 -2
  293. package/.next/server/chunks/2069.js +1 -0
  294. package/.next/server/chunks/2119.js +1 -1
  295. package/.next/server/chunks/2404.js +1 -1
  296. package/.next/server/chunks/2422.js +1 -1
  297. package/.next/server/chunks/2445.js +1 -1
  298. package/.next/server/chunks/2534.js +1 -1
  299. package/.next/server/chunks/3241.js +1 -1
  300. package/.next/server/chunks/3773.js +1 -0
  301. package/.next/server/chunks/3801.js +31 -0
  302. package/.next/server/chunks/4243.js +1 -1
  303. package/.next/server/chunks/4248.js +1 -1
  304. package/.next/server/chunks/5209.js +1 -1
  305. package/.next/server/chunks/5354.js +1 -1
  306. package/.next/server/chunks/{9130.js → 5630.js} +1 -1
  307. package/.next/server/chunks/5775.js +1 -0
  308. package/.next/server/chunks/610.js +1 -0
  309. package/.next/server/chunks/6119.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/6486.js +1 -1
  313. package/.next/server/chunks/6781.js +1 -1
  314. package/.next/server/chunks/6808.js +4 -0
  315. package/.next/server/chunks/7023.js +14 -0
  316. package/.next/server/chunks/7604.js +2 -2
  317. package/.next/server/chunks/7905.js +1 -1
  318. package/.next/server/chunks/8581.js +16 -16
  319. package/.next/server/chunks/8728.js +3 -3
  320. package/.next/server/chunks/8782.js +1 -1
  321. package/.next/server/chunks/8791.js +1 -1
  322. package/.next/server/chunks/8807.js +63 -53
  323. package/.next/server/chunks/8918.js +103 -1
  324. package/.next/server/chunks/9198.js +144 -0
  325. package/.next/server/chunks/9390.js +1 -1
  326. package/.next/server/chunks/9584.js +1 -1
  327. package/.next/server/chunks/9627.js +4 -4
  328. package/.next/server/chunks/9731.js +3 -3
  329. package/.next/server/middleware-manifest.json +5 -5
  330. package/.next/server/pages/500.html +1 -1
  331. package/.next/server/server-reference-manifest.json +1 -1
  332. package/.next/static/chunks/1128-914c559913546bbc.js +1 -0
  333. package/.next/static/chunks/{2407-26139a8a2f1adbe8.js → 2407-675ba6b21844dc3b.js} +1 -1
  334. package/.next/static/chunks/{2619-a305ad4810f1393a.js → 2619-04bc32f026a0d946.js} +1 -1
  335. package/.next/static/chunks/{2863-f0121af1cbbedb3b.js → 2863-7173dc305dffc4f6.js} +1 -1
  336. package/.next/static/chunks/3931-1a1abab16248f14d.js +1 -0
  337. package/.next/static/chunks/6288-6fadbba6e84393b2.js +1 -0
  338. package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +1 -0
  339. package/.next/static/chunks/{8165-c68b3dc844210e6a.js → 8165-263172c17ae8e8c3.js} +1 -1
  340. package/.next/static/chunks/8606-ce17ffa77f39608e.js +1 -0
  341. package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +1 -0
  342. package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +1 -0
  343. package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +1 -0
  344. package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +1 -0
  345. package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +1 -0
  346. package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +1 -0
  347. package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +1 -0
  348. package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +1 -0
  349. package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +1 -0
  350. package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +1 -0
  351. package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +1 -0
  352. package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +1 -0
  353. package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +1 -0
  354. package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +1 -0
  355. package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +1 -0
  356. package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +1 -0
  357. package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +1 -0
  358. package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +1 -0
  359. package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +1 -0
  360. package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +1 -0
  361. package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +1 -0
  362. package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +1 -0
  363. package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +1 -0
  364. package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +1 -0
  365. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +1 -0
  366. package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +1 -0
  367. package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +1 -0
  368. package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +1 -0
  369. package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +1 -0
  370. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +1 -0
  371. package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +1 -0
  372. package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +1 -0
  373. package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +1 -0
  374. package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +1 -0
  375. package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +1 -0
  376. package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +1 -0
  377. package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +1 -0
  378. package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +1 -0
  379. package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +1 -0
  380. package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +1 -0
  381. package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +1 -0
  382. package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +1 -0
  383. package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +1 -0
  384. package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +1 -0
  385. package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +1 -0
  386. package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +1 -0
  387. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +1 -0
  388. package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +1 -0
  389. package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +1 -0
  390. package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +1 -0
  391. package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +1 -0
  392. package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +1 -0
  393. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +1 -0
  394. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +1 -0
  396. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +1 -0
  397. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +1 -0
  398. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +1 -0
  399. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +1 -0
  400. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +1 -0
  401. package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +1 -0
  402. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +1 -0
  403. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +1 -0
  404. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +1 -0
  405. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +1 -0
  478. package/.next/static/chunks/app/layout-8bfac4724277b47f.js +1 -0
  479. package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +1 -0
  480. package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +1 -0
  481. package/.next/static/chunks/app/sessions/page-890fd50ec9739973.js +1 -0
  482. package/.next/static/chunks/app/skills/[skillId]/{page-52ba58712faf3378.js → page-cb6e74fd9a6a571d.js} +1 -1
  483. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-704086656fb45699.js +1 -0
  484. package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +1 -0
  485. package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +1 -0
  486. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-c601f3b3ece6557e.js → page-373ea37b16d930c7.js} +1 -1
  487. package/.next/static/css/c1e307d05daf93b6.css +1 -0
  488. package/.next/trace +13 -13
  489. package/.next/types/app/api/relays/[relayId]/route.ts +347 -0
  490. package/.next/types/routes.d.ts +2 -1
  491. package/.next/types/validator.ts +9 -0
  492. package/dist/cli/commands/ask.d.ts.map +1 -1
  493. package/dist/cli/commands/ask.js +178 -13
  494. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  495. package/dist/cli/commands/auto-yes.js +3 -5
  496. package/dist/cli/commands/capture.d.ts.map +1 -1
  497. package/dist/cli/commands/capture.js +5 -0
  498. package/dist/cli/commands/message-dispatch.d.ts +25 -5
  499. package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
  500. package/dist/cli/commands/message-dispatch.js +92 -6
  501. package/dist/cli/commands/relays.d.ts +25 -2
  502. package/dist/cli/commands/relays.d.ts.map +1 -1
  503. package/dist/cli/commands/relays.js +69 -5
  504. package/dist/cli/commands/respond.d.ts +12 -0
  505. package/dist/cli/commands/respond.d.ts.map +1 -1
  506. package/dist/cli/commands/respond.js +63 -1
  507. package/dist/cli/commands/send.d.ts.map +1 -1
  508. package/dist/cli/commands/send.js +10 -10
  509. package/dist/cli/commands/verify.d.ts.map +1 -1
  510. package/dist/cli/commands/verify.js +8 -1
  511. package/dist/cli/commands/wait-hook-stop-settle.d.ts +66 -0
  512. package/dist/cli/commands/wait-hook-stop-settle.d.ts.map +1 -0
  513. package/dist/cli/commands/wait-hook-stop-settle.js +150 -0
  514. package/dist/cli/commands/wait-instance.d.ts +21 -0
  515. package/dist/cli/commands/wait-instance.d.ts.map +1 -0
  516. package/dist/cli/commands/wait-instance.js +41 -0
  517. package/dist/cli/commands/wait-notices.d.ts +87 -0
  518. package/dist/cli/commands/wait-notices.d.ts.map +1 -0
  519. package/dist/cli/commands/wait-notices.js +301 -0
  520. package/dist/cli/commands/wait-poll-bookkeeping.d.ts +15 -0
  521. package/dist/cli/commands/wait-poll-bookkeeping.d.ts.map +1 -0
  522. package/dist/cli/commands/wait-poll-bookkeeping.js +57 -0
  523. package/dist/cli/commands/wait-poll-state.d.ts +118 -0
  524. package/dist/cli/commands/wait-poll-state.d.ts.map +1 -0
  525. package/dist/cli/commands/wait-poll-state.js +6 -0
  526. package/dist/cli/commands/wait-timing.d.ts +46 -0
  527. package/dist/cli/commands/wait-timing.d.ts.map +1 -0
  528. package/dist/cli/commands/wait-timing.js +99 -0
  529. package/dist/cli/commands/wait-turn-boundary.d.ts +284 -0
  530. package/dist/cli/commands/wait-turn-boundary.d.ts.map +1 -0
  531. package/dist/cli/commands/wait-turn-boundary.js +427 -0
  532. package/dist/cli/commands/wait-verify.d.ts +50 -0
  533. package/dist/cli/commands/wait-verify.d.ts.map +1 -0
  534. package/dist/cli/commands/wait-verify.js +124 -0
  535. package/dist/cli/commands/wait.d.ts +6 -105
  536. package/dist/cli/commands/wait.d.ts.map +1 -1
  537. package/dist/cli/commands/wait.js +207 -959
  538. package/dist/cli/config/duration-constants.d.ts +16 -13
  539. package/dist/cli/config/duration-constants.d.ts.map +1 -1
  540. package/dist/cli/config/duration-constants.js +21 -21
  541. package/dist/cli/docs/agent-operations.d.ts +2 -2
  542. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  543. package/dist/cli/docs/agent-operations.js +25 -2
  544. package/dist/cli/types/api-responses.d.ts +76 -4
  545. package/dist/cli/types/api-responses.d.ts.map +1 -1
  546. package/dist/cli/utils/api-client.d.ts +15 -1
  547. package/dist/cli/utils/api-client.d.ts.map +1 -1
  548. package/dist/cli/utils/api-client.js +7 -1
  549. package/dist/cli/utils/reply-ledger.d.ts +79 -0
  550. package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
  551. package/dist/cli/utils/reply-ledger.js +141 -1
  552. package/dist/cli/utils/verify-runner.d.ts +24 -1
  553. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  554. package/dist/cli/utils/verify-runner.js +54 -1
  555. package/dist/config/auto-yes-duration.d.ts +56 -0
  556. package/dist/config/auto-yes-duration.d.ts.map +1 -0
  557. package/dist/config/auto-yes-duration.js +76 -0
  558. package/dist/lib/session/send-attempt-types.d.ts +23 -1
  559. package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
  560. package/dist/lib/session/send-attempt-types.js +9 -1
  561. package/dist/server/locales/en/worktree.json +18 -3
  562. package/dist/server/locales/ja/worktree.json +18 -3
  563. package/dist/server/src/config/auto-yes-config.js +14 -19
  564. package/dist/server/src/config/auto-yes-duration.js +76 -0
  565. package/dist/server/src/lib/auto-yes-poller.js +49 -10
  566. package/dist/server/src/lib/auto-yes-state.js +9 -2
  567. package/dist/server/src/lib/cli-tools/antigravity.js +40 -7
  568. package/dist/server/src/lib/cli-tools/codex.js +60 -11
  569. package/dist/server/src/lib/cli-tools/command-code-plan-review.js +24 -2
  570. package/dist/server/src/lib/cli-tools/copilot.js +120 -30
  571. package/dist/server/src/lib/cli-tools/gemini.js +28 -9
  572. package/dist/server/src/lib/cli-tools/opencode.js +55 -13
  573. package/dist/server/src/lib/cli-tools/submit-composer-read.js +580 -0
  574. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +374 -516
  575. package/dist/server/src/lib/db/migrations/index.js +2 -0
  576. package/dist/server/src/lib/db/migrations/pre-migration-backup.js +266 -0
  577. package/dist/server/src/lib/db/migrations/runner.js +37 -4
  578. package/dist/server/src/lib/db/migrations/v62-session-relays-bind.js +102 -0
  579. package/dist/server/src/lib/db/relay-bind-db.js +437 -0
  580. package/dist/server/src/lib/db/relay-db.js +59 -96
  581. package/dist/server/src/lib/detection/composer-text.js +215 -11
  582. package/dist/server/src/lib/detection/prompt-detect-multiple-choice-chrome.js +193 -0
  583. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +8 -191
  584. package/dist/server/src/lib/detection/upstream-faults.js +56 -5
  585. package/dist/server/src/lib/hooks/sources/opencode/client.js +12 -6
  586. package/dist/server/src/lib/hooks/structured-decision-response.js +1 -1
  587. package/dist/server/src/lib/polling/auto-yes-manual-answer.js +4 -2
  588. package/dist/server/src/lib/polling/response-checker.js +15 -16
  589. package/dist/server/src/lib/prompt-answer-errors.js +288 -0
  590. package/dist/server/src/lib/prompt-answer-sender.js +264 -288
  591. package/dist/server/src/lib/push/failure-episode-state.js +4 -1
  592. package/dist/server/src/lib/realtime/terminal-broadcast.js +1 -4
  593. package/dist/server/src/lib/realtime-snippet.js +54 -0
  594. package/dist/server/src/lib/relay/relay-bind.js +294 -0
  595. package/dist/server/src/lib/relay/relay-boot.js +51 -0
  596. package/dist/server/src/lib/relay/relay-bound-reply.js +519 -0
  597. package/dist/server/src/lib/relay/relay-delivery.js +134 -220
  598. package/dist/server/src/lib/relay/relay-messages.js +39 -4
  599. package/dist/server/src/lib/relay/relay-overlap.js +92 -0
  600. package/dist/server/src/lib/relay/relay-system-line.js +3 -2
  601. package/dist/server/src/lib/relay/types.js +12 -1
  602. package/dist/server/src/lib/session/agent-session-lifecycle.js +18 -0
  603. package/dist/server/src/lib/session/claude-session.js +41 -6
  604. package/dist/server/src/lib/session/composer-clear.js +109 -4
  605. package/dist/server/src/lib/session/current-output-builder.js +23 -6
  606. package/dist/server/src/lib/session/instance-input-lock.js +664 -0
  607. package/dist/server/src/lib/session/send-attempt-state.js +19 -1
  608. package/dist/server/src/lib/session/send-attempt-types.js +9 -1
  609. package/dist/server/src/lib/session/send-user-message.js +82 -13
  610. package/dist/server/src/lib/session/waiting-episode-state-ops.js +152 -0
  611. package/dist/server/src/lib/session/waiting-episode-state-store.js +202 -0
  612. package/dist/server/src/lib/session/waiting-episode-state-types.js +6 -0
  613. package/dist/server/src/lib/session/waiting-episode-state.js +26 -339
  614. package/dist/server/src/lib/tmux/tmux.js +25 -0
  615. package/dist/server/src/lib/verification/gate-runner.js +11 -4
  616. package/docs/en/user-guide/webapp-guide.md +15 -10
  617. package/package.json +1 -1
  618. package/release-notes/0.49.0.json +45 -0
  619. package/release-notes/0.49.1.json +66 -0
  620. package/.next/server/chunks/1210.js +0 -1
  621. package/.next/server/chunks/1945.js +0 -14
  622. package/.next/server/chunks/1990.js +0 -103
  623. package/.next/server/chunks/4194.js +0 -67
  624. package/.next/server/chunks/4280.js +0 -1
  625. package/.next/server/chunks/5845.js +0 -1
  626. package/.next/server/chunks/6722.js +0 -1
  627. package/.next/server/chunks/720.js +0 -103
  628. package/.next/server/chunks/936.js +0 -1
  629. package/.next/server/chunks/9540.js +0 -1
  630. package/.next/static/chunks/2099-c3e0ab70a1b95dd3.js +0 -1
  631. package/.next/static/chunks/5371-a549a0d2c2044d41.js +0 -1
  632. package/.next/static/chunks/6288-09feba367cc2c65e.js +0 -1
  633. package/.next/static/chunks/8606-cf6bdbff44a764cf.js +0 -1
  634. package/.next/static/chunks/9079-406b84d3cc891a87.js +0 -1
  635. package/.next/static/chunks/app/api/agents/update/route-c81284a9d8b35304.js +0 -1
  636. package/.next/static/chunks/app/api/agents/versions/route-c81284a9d8b35304.js +0 -1
  637. package/.next/static/chunks/app/api/app/release-notes/route-c81284a9d8b35304.js +0 -1
  638. package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +0 -1
  639. package/.next/static/chunks/app/api/app/update-check/route-c81284a9d8b35304.js +0 -1
  640. package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +0 -1
  641. package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +0 -1
  642. package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +0 -1
  643. package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +0 -1
  644. package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +0 -1
  645. package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +0 -1
  646. package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +0 -1
  647. package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +0 -1
  648. package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +0 -1
  649. package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +0 -1
  650. package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +0 -1
  651. package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +0 -1
  652. package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +0 -1
  653. package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +0 -1
  654. package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +0 -1
  655. package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +0 -1
  656. package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +0 -1
  657. package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +0 -1
  658. package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +0 -1
  659. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +0 -1
  660. package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +0 -1
  661. package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +0 -1
  662. package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +0 -1
  663. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +0 -1
  664. package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +0 -1
  665. package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +0 -1
  666. package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +0 -1
  667. package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +0 -1
  668. package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +0 -1
  669. package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +0 -1
  670. package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +0 -1
  671. package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +0 -1
  672. package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +0 -1
  673. package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +0 -1
  674. package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +0 -1
  675. package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +0 -1
  676. package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +0 -1
  677. package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +0 -1
  678. package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +0 -1
  679. package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +0 -1
  680. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +0 -1
  681. package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +0 -1
  682. package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +0 -1
  683. package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +0 -1
  684. package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +0 -1
  685. package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +0 -1
  686. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +0 -1
  687. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +0 -1
  688. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +0 -1
  689. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +0 -1
  690. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +0 -1
  691. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +0 -1
  692. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +0 -1
  693. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +0 -1
  694. package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +0 -1
  695. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +0 -1
  696. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +0 -1
  697. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +0 -1
  698. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +0 -1
  699. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +0 -1
  700. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +0 -1
  701. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +0 -1
  702. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +0 -1
  703. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +0 -1
  704. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +0 -1
  705. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +0 -1
  706. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +0 -1
  707. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +0 -1
  708. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +0 -1
  709. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +0 -1
  710. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +0 -1
  711. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +0 -1
  712. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +0 -1
  713. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +0 -1
  714. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +0 -1
  715. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +0 -1
  716. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +0 -1
  717. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +0 -1
  718. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +0 -1
  719. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +0 -1
  720. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +0 -1
  721. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +0 -1
  722. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +0 -1
  723. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +0 -1
  724. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +0 -1
  725. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +0 -1
  726. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +0 -1
  727. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +0 -1
  728. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +0 -1
  729. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +0 -1
  730. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +0 -1
  731. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +0 -1
  732. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +0 -1
  733. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +0 -1
  734. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +0 -1
  735. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +0 -1
  736. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +0 -1
  737. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +0 -1
  738. package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +0 -1
  739. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +0 -1
  740. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +0 -1
  741. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +0 -1
  742. package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +0 -1
  743. package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +0 -1
  744. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +0 -1
  745. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +0 -1
  746. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +0 -1
  747. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +0 -1
  748. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +0 -1
  749. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +0 -1
  750. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +0 -1
  751. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +0 -1
  752. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +0 -1
  753. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +0 -1
  754. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +0 -1
  755. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +0 -1
  756. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +0 -1
  757. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +0 -1
  758. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +0 -1
  759. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +0 -1
  760. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +0 -1
  761. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +0 -1
  771. package/.next/static/chunks/app/layout-46b4cbf07520d9b6.js +0 -1
  772. package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +0 -1
  773. package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +0 -1
  774. package/.next/static/chunks/app/sessions/page-fb241bed579c67aa.js +0 -1
  775. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9cf1ecc59e36a004.js +0 -1
  776. package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +0 -1
  777. package/.next/static/chunks/app/worktrees/[id]/page-cbc7749a33450cc5.js +0 -1
  778. package/.next/static/css/743f79ff19ab91e9.css +0 -1
  779. /package/.next/static/{PTlAswXLq8PAe2vUJ8dVP → fqfSDqQMweROeHUzOt_m1}/_buildManifest.js +0 -0
  780. /package/.next/static/{PTlAswXLq8PAe2vUJ8dVP → fqfSDqQMweROeHUzOt_m1}/_ssgManifest.js +0 -0
@@ -7,7 +7,7 @@
7
7
  * the promptType/defaultOptionNumber fallback introduced in Bug1).
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.PromptAnswerAbortedError = exports.MultiSelectAnswerRejectedError = exports.MULTI_SELECT_NOT_COMMITTED_REASON = exports.FreeTextAtChoiceOnlyPromptError = exports.FreeTextAnswerRejectedError = exports.FREE_TEXT_AT_MENU_ROW_REASON = exports.PromptAnswerRejectedError = exports.ANSWER_MODE_KEYS_REASON = void 0;
10
+ exports.PromptAnswerRejectedError = exports.PromptAnswerNotDeliveredError = exports.PromptAnswerInputLostError = exports.PromptAnswerAbortedError = exports.MultiSelectAnswerRejectedError = exports.MULTI_SELECT_NOT_COMMITTED_REASON = exports.FreeTextAtChoiceOnlyPromptError = exports.FreeTextAnswerRejectedError = exports.FREE_TEXT_AT_MENU_ROW_REASON = exports.ANSWER_NOT_DELIVERED_REASON = exports.ANSWER_MODE_KEYS_REASON = void 0;
11
11
  exports.sendPromptAnswer = sendPromptAnswer;
12
12
  const tmux_1 = require("./tmux/tmux");
13
13
  const frame_1 = require("../lib/detection/tools/frame");
@@ -19,6 +19,23 @@ const models_1 = require("../types/models");
19
19
  const tmux_capture_cache_1 = require("./tmux/tmux-capture-cache");
20
20
  const prompt_answer_semantic_1 = require("../lib/prompt-answer-semantic");
21
21
  const cli_tool_timing_config_1 = require("../config/cli-tool-timing-config");
22
+ const auto_yes_dialog_gate_1 = require("../lib/polling/auto-yes-dialog-gate");
23
+ const instance_input_lock_1 = require("../lib/session/instance-input-lock");
24
+ const prompt_answer_errors_1 = require("./prompt-answer-errors");
25
+ // Issue #3965: the refusals and their reason codes live in `prompt-answer-errors`
26
+ // and are re-exported here, so every caller keeps importing them from this module.
27
+ var prompt_answer_errors_2 = require("./prompt-answer-errors");
28
+ Object.defineProperty(exports, "ANSWER_MODE_KEYS_REASON", { enumerable: true, get: function () { return prompt_answer_errors_2.ANSWER_MODE_KEYS_REASON; } });
29
+ Object.defineProperty(exports, "ANSWER_NOT_DELIVERED_REASON", { enumerable: true, get: function () { return prompt_answer_errors_2.ANSWER_NOT_DELIVERED_REASON; } });
30
+ Object.defineProperty(exports, "FREE_TEXT_AT_MENU_ROW_REASON", { enumerable: true, get: function () { return prompt_answer_errors_2.FREE_TEXT_AT_MENU_ROW_REASON; } });
31
+ Object.defineProperty(exports, "FreeTextAnswerRejectedError", { enumerable: true, get: function () { return prompt_answer_errors_2.FreeTextAnswerRejectedError; } });
32
+ Object.defineProperty(exports, "FreeTextAtChoiceOnlyPromptError", { enumerable: true, get: function () { return prompt_answer_errors_2.FreeTextAtChoiceOnlyPromptError; } });
33
+ Object.defineProperty(exports, "MULTI_SELECT_NOT_COMMITTED_REASON", { enumerable: true, get: function () { return prompt_answer_errors_2.MULTI_SELECT_NOT_COMMITTED_REASON; } });
34
+ Object.defineProperty(exports, "MultiSelectAnswerRejectedError", { enumerable: true, get: function () { return prompt_answer_errors_2.MultiSelectAnswerRejectedError; } });
35
+ Object.defineProperty(exports, "PromptAnswerAbortedError", { enumerable: true, get: function () { return prompt_answer_errors_2.PromptAnswerAbortedError; } });
36
+ Object.defineProperty(exports, "PromptAnswerInputLostError", { enumerable: true, get: function () { return prompt_answer_errors_2.PromptAnswerInputLostError; } });
37
+ Object.defineProperty(exports, "PromptAnswerNotDeliveredError", { enumerable: true, get: function () { return prompt_answer_errors_2.PromptAnswerNotDeliveredError; } });
38
+ Object.defineProperty(exports, "PromptAnswerRejectedError", { enumerable: true, get: function () { return prompt_answer_errors_2.PromptAnswerRejectedError; } });
22
39
  // Issue #3397: the checkbox reading (`hasCheckboxOptions`) lives in
23
40
  // `prompt-answer-semantic`, shared with the semantic resolver and Auto-Yes.
24
41
  /**
@@ -37,14 +54,6 @@ const cli_tool_timing_config_1 = require("../config/cli-tool-timing-config");
37
54
  * has already range-checked against the option list on the FRESH frame.
38
55
  */
39
56
  const SELECTION_SET_PATTERN = /^\d+(?:,\d+)*$/;
40
- /**
41
- * The reason code a caller gets back when a digit meets a `keys`-mode dialog
42
- * (Issue #2033).
43
- *
44
- * Spelled as a constant because it crosses two boundaries: the API refusal body
45
- * `respond` reads (`/prompt-response`), and the assertions that pin it.
46
- */
47
- exports.ANSWER_MODE_KEYS_REASON = 'answer_mode_keys';
48
57
  /**
49
58
  * The only {@link DialogAnswerMode} a typed digit can actually drive.
50
59
  *
@@ -61,156 +70,6 @@ const TEXT_ANSWERABLE_ANSWER_MODE = 'numbered';
61
70
  * would otherwise take on a path that runs before every keystroke.
62
71
  */
63
72
  const GUARD_CAPTURE_LINES = 200;
64
- /**
65
- * A prompt answer that was refused BEFORE any key reached the pane.
66
- *
67
- * The distinction matters to every caller: a throw from `sendKeys` leaves the
68
- * terminal in an unknown state, whereas this one is a guarantee that nothing was
69
- * typed and the dialog is still exactly as the operator left it.
70
- */
71
- class PromptAnswerRejectedError extends Error {
72
- /** Machine-readable code, currently always {@link ANSWER_MODE_KEYS_REASON}. */
73
- reason;
74
- /** The dialog family the tool vouched for, e.g. `permission` / `picker`. */
75
- dialogKind;
76
- /** How that dialog actually takes its answer. */
77
- answerMode;
78
- constructor(cliToolId, answer, dialog) {
79
- super(`Refused to send "${answer}" to ${cliToolId}: its ${dialog.kind} dialog takes `
80
- + `'${dialog.answerMode}' input, not a typed number (${exports.ANSWER_MODE_KEYS_REASON}). `
81
- + 'The digit would be swallowed and the Enter after it would confirm whatever is '
82
- + 'highlighted. Nothing was sent.');
83
- this.name = 'PromptAnswerRejectedError';
84
- this.reason = exports.ANSWER_MODE_KEYS_REASON;
85
- this.dialogKind = dialog.kind;
86
- this.answerMode = dialog.answerMode;
87
- }
88
- }
89
- exports.PromptAnswerRejectedError = PromptAnswerRejectedError;
90
- /**
91
- * The reason code a caller gets back when free text meets a prompt whose
92
- * text-bearing options are all menu rows (Issue #2573).
93
- *
94
- * The code `/prompt-response` already answers "this answer cannot be mapped onto
95
- * a choice, and nothing was sent" with (#1681, #2522), so `respond` reports it
96
- * without a new branch.
97
- */
98
- exports.FREE_TEXT_AT_MENU_ROW_REASON = 'unresolvable_answer';
99
- /**
100
- * The sentence for each refusal, built from a tool id and option numbers only.
101
- *
102
- * Fixed text, a tool id and option numbers, never the answer (SEC-003, as in
103
- * `prompt-answer-semantic`): the answer is whatever the operator typed, and
104
- * `/prompt-response` returns this message to the client verbatim.
105
- *
106
- * The two sentences sit side by side on purpose. They differ in the one thing
107
- * the operator has to act on — what to do next — and that is only comparable
108
- * when both are readable at once.
109
- */
110
- function freeTextRefusalMessage(cliToolId, optionNumbers, detail) {
111
- const numbers = optionNumbers.join(', ');
112
- if (detail === undefined) {
113
- return `Refused to type free text at ${cliToolId}'s prompt: option ${numbers} `
114
- + 'reads as taking your own words, but on this screen it is a menu row, not a text field. '
115
- + 'The text would be ignored and the Enter after it would confirm whatever is highlighted. '
116
- + 'Nothing was sent. Answer with the option number, then send the instructions as a message.';
117
- }
118
- return `Refused to type free text at ${cliToolId}'s prompt: option ${numbers} is the text field `
119
- + `on this screen, but the cursor is on option ${detail.cursorOptionNumber}. The text would be `
120
- + `ignored and the Enter after it would confirm option ${detail.cursorOptionNumber}. Nothing `
121
- + 'was sent. Move the cursor onto the text field in the terminal and send the text again — '
122
- + 'sending its option number does not move the cursor, it selects nothing.';
123
- }
124
- /**
125
- * Free text refused BEFORE any key reached the pane (Issue #2573, #2584).
126
- *
127
- * A sibling of {@link PromptAnswerRejectedError}, not a use of it, because the
128
- * two cite different evidence. That one cites the dialog the tool's own rules
129
- * vouched for (`dialogKind` / `answerMode`), and no such verdict can decide this
130
- * case: Command Code has had rules since Issue #2574, and the permission dialog
131
- * this guard is first about is vouched `numbered` — the verdict that lets a
132
- * DIGIT through — while the `AskUserQuestion` screen whose free text must keep
133
- * working is deliberately not recognised by those rules at all
134
- * (`tools/command-code/permission.ts`). `answerMode` says how a CHOICE is
135
- * pressed; it says nothing about which row is a text field, nor about which row
136
- * the cursor is on. So what this one cites is the rows.
137
- *
138
- * One class rather than two because `/prompt-response` is out of reach of both
139
- * Issues' scope and matches this type by `instanceof` to report the refusal at
140
- * all; {@link FreeTextRefusalKind} is what tells the two cases apart.
141
- */
142
- class FreeTextAnswerRejectedError extends Error {
143
- /** Machine-readable code, always {@link FREE_TEXT_AT_MENU_ROW_REASON}. */
144
- reason;
145
- /**
146
- * The text-bearing options this refusal is about: the menu rows for
147
- * `menu_row`, the measured text field(s) for `cursor_elsewhere`.
148
- */
149
- optionNumbers;
150
- /** Which measurement refused (Issue #2584). */
151
- kind;
152
- /** The option the Enter would have confirmed, or null for `menu_row`. */
153
- cursorOptionNumber;
154
- constructor(cliToolId, optionNumbers, detail) {
155
- super(freeTextRefusalMessage(cliToolId, optionNumbers, detail));
156
- this.name = 'FreeTextAnswerRejectedError';
157
- this.reason = exports.FREE_TEXT_AT_MENU_ROW_REASON;
158
- this.optionNumbers = optionNumbers;
159
- this.kind = detail?.kind ?? 'menu_row';
160
- this.cursorOptionNumber = detail?.cursorOptionNumber ?? null;
161
- }
162
- }
163
- exports.FreeTextAnswerRejectedError = FreeTextAnswerRejectedError;
164
- /**
165
- * Free text refused because NO row on the screen takes typed text (Issue #2583).
166
- *
167
- * ## The hole #2573 left
168
- *
169
- * {@link FreeTextAnswerRejectedError} looks for rows that READ as taking the
170
- * operator's own words (`requiresTextInput`, i.e. `TEXT_INPUT_PATTERNS`) and
171
- * only judges the answer when it finds at least one. A permission dialog with
172
- * no such row was therefore never judged at all, and the text arm typed the
173
- * answer and pressed Enter. Measured on 2026-09-16 against develop `9f4b4e29`:
174
- *
175
- * | tool | dialog | rows | result |
176
- * |------|--------|------|--------|
177
- * | Claude Code 2.1.273 | Bash command | `1. Yes` / `2. Yes, and always allow access to …` / `3. Yes, and switch to auto mode` / `4. No` | `success: true`, the `mkdir` RAN |
178
- * | Antigravity 1.2.3 | Run this command? | `1. Yes, run command` / `2. Yes, and always allow …` / `3. Yes, … (Persist to settings.json)` / `4. No, cancel` | `success: true`, the `mkdir` RAN |
179
- *
180
- * Same screens, but with a path containing the word `custom`, `/custom/i`
181
- * flagged the quoting row and #2573's guard refused. So what was left decided
182
- * whether a refusal meaning "do not do this" approved instead: the SPELLING of
183
- * the command being approved.
184
- *
185
- * ## What the caller is told, and why the count rather than the rows
186
- *
187
- * There is no row to name here — that is the whole condition — so the message
188
- * cites how many options the screen has and points at the option number. It
189
- * never quotes the answer (SEC-003, as in `prompt-answer-semantic`): the answer
190
- * is whatever the operator typed and `/prompt-response` hands this message back
191
- * to the client verbatim.
192
- *
193
- * Shares {@link FREE_TEXT_AT_MENU_ROW_REASON} with its sibling deliberately:
194
- * the reason code is what `respond` and `/prompt-response` branch on, and both
195
- * cases are the same promise to the caller — the answer could not be mapped onto
196
- * a choice and NOTHING was sent.
197
- */
198
- class FreeTextAtChoiceOnlyPromptError extends Error {
199
- /** Machine-readable code, always {@link FREE_TEXT_AT_MENU_ROW_REASON}. */
200
- reason;
201
- /** How many options the screen offers, none of which is a text field. */
202
- optionCount;
203
- constructor(cliToolId, optionCount) {
204
- super(`Refused to type free text at ${cliToolId}'s prompt: none of its ${optionCount} options is a `
205
- + 'text field on this screen, so the text would be ignored and the Enter after it would '
206
- + 'confirm whatever is highlighted. Nothing was sent. Answer with the option number instead, '
207
- + 'then send your instructions as a separate message.');
208
- this.name = 'FreeTextAtChoiceOnlyPromptError';
209
- this.reason = exports.FREE_TEXT_AT_MENU_ROW_REASON;
210
- this.optionCount = optionCount;
211
- }
212
- }
213
- exports.FreeTextAtChoiceOnlyPromptError = FreeTextAtChoiceOnlyPromptError;
214
73
  /**
215
74
  * The pane to judge the tool's own dialog rules against.
216
75
  *
@@ -300,7 +159,7 @@ async function assertAnswerModeAcceptsNumber(params) {
300
159
  return null;
301
160
  if (dialog.answerMode === TEXT_ANSWERABLE_ANSWER_MODE)
302
161
  return dialog;
303
- throw new PromptAnswerRejectedError(params.cliToolId, params.answer, dialog);
162
+ throw new prompt_answer_errors_1.PromptAnswerRejectedError(params.cliToolId, params.answer, dialog);
304
163
  }
305
164
  /**
306
165
  * Resolve the effective SubmitMode from the dialog on screen, promptData, fallback, and default.
@@ -435,11 +294,11 @@ function assertFreeTextHasATextField(params) {
435
294
  // a screen that has at least one candidate, and this branch is the screen that
436
295
  // has none.
437
296
  if (textBearing.length === 0) {
438
- throw new FreeTextAtChoiceOnlyPromptError(params.cliToolId, promptData.options.length);
297
+ throw new prompt_answer_errors_1.FreeTextAtChoiceOnlyPromptError(params.cliToolId, promptData.options.length);
439
298
  }
440
299
  if (textBearing.some(prompt_detect_multiple_choice_1.isTypedTextFieldOption))
441
300
  return;
442
- throw new FreeTextAnswerRejectedError(params.cliToolId, textBearing.map((option) => option.number));
301
+ throw new prompt_answer_errors_1.FreeTextAnswerRejectedError(params.cliToolId, textBearing.map((option) => option.number));
443
302
  }
444
303
  /**
445
304
  * Refuse free text while the cursor is on another row (Issue #2584).
@@ -515,57 +374,8 @@ function assertFreeTextCursorIsOnTheField(params) {
515
374
  return;
516
375
  if ((0, prompt_detect_multiple_choice_1.isTypedTextFieldOption)(cursor))
517
376
  return;
518
- throw new FreeTextAnswerRejectedError(params.cliToolId, fields.map((option) => option.number), { kind: 'cursor_elsewhere', cursorOptionNumber: cursor.number });
377
+ throw new prompt_answer_errors_1.FreeTextAnswerRejectedError(params.cliToolId, fields.map((option) => option.number), { kind: 'cursor_elsewhere', cursorOptionNumber: cursor.number });
519
378
  }
520
- /**
521
- * The reason code every Command Code multi-select refusal carries
522
- * (Issue #2755).
523
- *
524
- * Shares the shape of {@link ANSWER_MODE_KEYS_REASON} and
525
- * {@link FREE_TEXT_AT_MENU_ROW_REASON} — a machine-readable code the API and
526
- * `respond` branch on — and means one thing: **the question was not
527
- * committed.** What varies is how far the arm got, which
528
- * {@link MultiSelectAnswerRejectedError.stage} says.
529
- */
530
- exports.MULTI_SELECT_NOT_COMMITTED_REASON = 'multi_select_not_committed';
531
- /**
532
- * A Command Code checkbox answer that did not reach the agent (Issue #2755).
533
- *
534
- * The sibling of {@link PromptAnswerRejectedError} for the two-stage confirm.
535
- * Unlike that one it does NOT always promise an untouched pane — ticking boxes
536
- * is the first half of this answer and it may already have happened — so
537
- * {@link keysSent} says which of the two the caller is looking at. What it does
538
- * promise in every case is that the question was **not submitted**: the arm
539
- * stops before the confirm row whenever the screen it re-read is not the one it
540
- * was asked to answer.
541
- *
542
- * Fixed text, a tool id and option numbers only (SEC-003, as in
543
- * `prompt-answer-semantic`): `/prompt-response` returns this message verbatim.
544
- */
545
- class MultiSelectAnswerRejectedError extends Error {
546
- /** Machine-readable code, always {@link MULTI_SELECT_NOT_COMMITTED_REASON}. */
547
- reason;
548
- stage;
549
- /** Whether any key reached the pane before the refusal. */
550
- keysSent;
551
- /** The set the caller asked for, ascending. */
552
- wanted;
553
- constructor(stage, keysSent, wanted) {
554
- super(`The question was not submitted (${stage}). `
555
- + (keysSent
556
- ? 'Some boxes may have been ticked, but the confirm row was not pressed, so the '
557
- + 'question is still on screen exactly as the pane shows it. '
558
- : 'No key was sent. ')
559
- + `Requested selection: ${wanted.join(', ')}. Check the terminal and answer it there, or `
560
- + 'retry once the screen has settled.');
561
- this.name = 'MultiSelectAnswerRejectedError';
562
- this.reason = exports.MULTI_SELECT_NOT_COMMITTED_REASON;
563
- this.stage = stage;
564
- this.keysSent = keysSent;
565
- this.wanted = wanted;
566
- }
567
- }
568
- exports.MultiSelectAnswerRejectedError = MultiSelectAnswerRejectedError;
569
379
  /**
570
380
  * Is this request a Command Code checkbox answer? (Issue #2755)
571
381
  *
@@ -665,10 +475,10 @@ async function recaptureAfterKeys(sessionName) {
665
475
  * @throws {MultiSelectAnswerRejectedError} whenever the question was not
666
476
  * committed; `keysSent` says whether the pane was touched.
667
477
  */
668
- async function sendCommandCodeMultiSelectAnswer(sessionName, promptData, wanted, stillCurrent, touch) {
478
+ async function sendCommandCodeMultiSelectAnswer(sessionName, promptData, wanted, stillCurrent, touch, assertOwned = () => { }) {
669
479
  const cursor = promptData.options.find((option) => option.isDefault === true);
670
480
  if (cursor === undefined) {
671
- throw new MultiSelectAnswerRejectedError('cursor-unknown', false, wanted);
481
+ throw new prompt_answer_errors_1.MultiSelectAnswerRejectedError('cursor-unknown', false, wanted);
672
482
  }
673
483
  // 1. The symmetric difference, ascending, one digit per press. An empty one
674
484
  // sends nothing at all — the set on screen is already the set asked for,
@@ -679,6 +489,7 @@ async function sendCommandCodeMultiSelectAnswer(sessionName, promptData, wanted,
679
489
  ...current.filter((n) => !wanted.includes(n)),
680
490
  ].sort((a, b) => a - b);
681
491
  if (toggles.length > 0) {
492
+ assertOwned(false);
682
493
  await sendSpecialKeysWhileCurrent(sessionName, toggles.map(String), stillCurrent, touch);
683
494
  }
684
495
  const keysSent = toggles.length > 0;
@@ -687,7 +498,7 @@ async function sendCommandCodeMultiSelectAnswer(sessionName, promptData, wanted,
687
498
  const afterToggle = await recaptureAfterKeys(sessionName);
688
499
  assertStillCurrent(stillCurrent, keysSent);
689
500
  if (afterToggle === null) {
690
- throw new MultiSelectAnswerRejectedError('recapture-failed', keysSent, wanted);
501
+ throw new prompt_answer_errors_1.MultiSelectAnswerRejectedError('recapture-failed', keysSent, wanted);
691
502
  }
692
503
  const reading = (0, dialog_1.readCommandCodeQuestionDialog)(afterToggle);
693
504
  if (reading.kind !== 'prompt' ||
@@ -695,11 +506,11 @@ async function sendCommandCodeMultiSelectAnswer(sessionName, promptData, wanted,
695
506
  reading.prompt.promptData.multiSelect !== true ||
696
507
  reading.prompt.promptData.question !== promptData.question ||
697
508
  reading.prompt.promptData.options.length !== promptData.options.length) {
698
- throw new MultiSelectAnswerRejectedError('screen-changed', keysSent, wanted);
509
+ throw new prompt_answer_errors_1.MultiSelectAnswerRejectedError('screen-changed', keysSent, wanted);
699
510
  }
700
511
  const verified = reading.prompt.promptData;
701
512
  if (!sameNumbers(tickedNumbers(verified), [...wanted])) {
702
- throw new MultiSelectAnswerRejectedError('toggle-mismatch', keysSent, wanted);
513
+ throw new prompt_answer_errors_1.MultiSelectAnswerRejectedError('toggle-mismatch', keysSent, wanted);
703
514
  }
704
515
  // 3. Walk to the confirm row and open it. `Down` is the only movement key
705
516
  // measured to be deterministic here: it steps one row at a time through
@@ -710,8 +521,10 @@ async function sendCommandCodeMultiSelectAnswer(sessionName, promptData, wanted,
710
521
  // been built from a slightly older frame.
711
522
  const cursorNow = verified.options.find((option) => option.isDefault === true);
712
523
  if (cursorNow === undefined) {
713
- throw new MultiSelectAnswerRejectedError('cursor-unknown', keysSent, wanted);
524
+ throw new prompt_answer_errors_1.MultiSelectAnswerRejectedError('cursor-unknown', keysSent, wanted);
714
525
  }
526
+ // Issue #3952 review P2: the input held since the toggles, across the re-read.
527
+ assertOwned(keysSent);
715
528
  await sendSpecialKeysWhileCurrent(sessionName, [...downKeys(verified.options.length - cursorNow.number + 1), 'Enter'], stillCurrent, touch);
716
529
  // 4. The second stage. `Submit` opens the Review page and the answer is sent
717
530
  // from there; `Next` advances to the following question, which IS the
@@ -719,15 +532,16 @@ async function sendCommandCodeMultiSelectAnswer(sessionName, promptData, wanted,
719
532
  const afterConfirm = await recaptureAfterKeys(sessionName);
720
533
  assertStillCurrent(stillCurrent, true);
721
534
  if (afterConfirm === null) {
722
- throw new MultiSelectAnswerRejectedError('recapture-failed', true, wanted);
535
+ throw new prompt_answer_errors_1.MultiSelectAnswerRejectedError('recapture-failed', true, wanted);
723
536
  }
724
537
  const review = (0, selection_shape_1.readCommandCodeReviewPage)(afterConfirm);
725
538
  if (review !== null) {
726
539
  // Reached with answers still missing — the `d` shape. Confirming it would
727
540
  // send `No answer` for questions nobody has been shown (Issue #2755 §7).
728
541
  if (review.hasUnansweredWarning) {
729
- throw new MultiSelectAnswerRejectedError('review-unanswered', true, wanted);
542
+ throw new prompt_answer_errors_1.MultiSelectAnswerRejectedError('review-unanswered', true, wanted);
730
543
  }
544
+ assertOwned(true);
731
545
  await sendSpecialKeysWhileCurrent(sessionName, ['Enter'], stillCurrent, touch);
732
546
  return;
733
547
  }
@@ -736,26 +550,125 @@ async function sendCommandCodeMultiSelectAnswer(sessionName, promptData, wanted,
736
550
  next.prompt.promptData?.type === 'multiple_choice' &&
737
551
  next.prompt.promptData.question !== promptData.question;
738
552
  if (!advanced) {
739
- throw new MultiSelectAnswerRejectedError('not-committed', true, wanted);
553
+ throw new prompt_answer_errors_1.MultiSelectAnswerRejectedError('not-committed', true, wanted);
740
554
  }
741
555
  }
556
+ /** The prompt a frame shows, read as `/prompt-response` verifies one; null when none is answerable. */
557
+ function readAnswerablePrompt(cliToolId, frame) {
558
+ const { promptCheck, refusal } = (0, auto_yes_dialog_gate_1.assessPromptAnswerability)(cliToolId, frame);
559
+ if (refusal || !promptCheck?.isPrompt)
560
+ return null;
561
+ return promptCheck.promptData ?? null;
562
+ }
563
+ /** A text as compared: runs of whitespace as one, and no cursor glyphs (`❯ 1. Yes` is `1. Yes`). */
564
+ function comparable(text) {
565
+ return (text ?? '').replace(/[❯›▶]/g, ' ').replace(/\s+/g, ' ').trim();
566
+ }
567
+ function sameText(a, b) {
568
+ return comparable(a) === comparable(b);
569
+ }
742
570
  /**
743
- * The caller's `stillCurrent` said no after one of the send's waits
744
- * (Issue #3706): the keys not yet sent were not sent. Keys already typed cannot
745
- * be taken back, so {@link keysSent} says whether the pane was touched; either
746
- * way the answer was NOT completed and must not be recorded as one.
571
+ * Whether two readings are the same prompt to answer: its kind, its wording,
572
+ * its options' labels and — when both readings have one — what it asks approval
573
+ * for. The cursor (`isDefault`, the `❯` in the approval block) is not compared:
574
+ * moving it does not make it another prompt.
747
575
  */
748
- class PromptAnswerAbortedError extends Error {
749
- keysSent;
750
- constructor(
751
- /** Whether any key reached the pane before the stop. */
752
- keysSent) {
753
- super(`Prompt answer stopped by its caller (${keysSent ? 'some keys were sent' : 'no key was sent'})`);
754
- this.keysSent = keysSent;
755
- this.name = 'PromptAnswerAbortedError';
576
+ function samePromptTarget(target, now) {
577
+ if (target.type !== now.type || !sameText(target.question, now.question))
578
+ return false;
579
+ if (target.approvalTarget !== undefined && now.approvalTarget !== undefined) {
580
+ if (!sameText(target.approvalTarget, now.approvalTarget))
581
+ return false;
582
+ }
583
+ if (target.type === 'multiple_choice' && now.type === 'multiple_choice') {
584
+ if (target.options.length !== now.options.length)
585
+ return false;
586
+ return target.options.every((option, i) => sameText(option.label, now.options[i].label));
756
587
  }
588
+ return true;
589
+ }
590
+ /**
591
+ * The re-check an answer makes once it owns the session's input after another
592
+ * writer (Issue #3952): the caller still acts (Auto-Yes's `stillCurrent`), and
593
+ * a fresh capture still shows the prompt the answer was decided for — the one
594
+ * read off the caller's frame, else the caller's `promptData`, else any
595
+ * answerable prompt. Returns that fresh reading, or null when it does not.
596
+ */
597
+ async function answerTargetStillOnScreen(params) {
598
+ if (params.stillCurrent && !params.stillCurrent())
599
+ return null;
600
+ const now = readAnswerablePrompt(params.cliToolId, await (0, tmux_1.capturePane)(params.sessionName, GUARD_CAPTURE_LINES));
601
+ if (now === null)
602
+ return null;
603
+ const target = (params.frame !== undefined ? readAnswerablePrompt(params.cliToolId, params.frame) : null)
604
+ ?? params.promptData
605
+ ?? null;
606
+ return target === null || samePromptTarget(target, now) ? now : null;
607
+ }
608
+ /**
609
+ * The caller's last look before the first key (review P1-2, P1-b): asked right
610
+ * before it, whether or not anything was read again — a guard's capture or the
611
+ * lock's admission is an await the contract can change across.
612
+ */
613
+ function stillAllowedNow(params) {
614
+ return params.stillAllowedAtSend === undefined || params.stillAllowedAtSend();
615
+ }
616
+ /**
617
+ * Run an answer's keys as the session's input writer (Issue #3952): a send in
618
+ * progress is waited out, and the prompt is read again after it. The keys are
619
+ * built from that fresh reading (review P1-1: the cursor may have moved), and
620
+ * the caller's `stillAllowedAtSend` is asked again right before the first key
621
+ * (review P1-2: the contract may have changed during the wait). Refused, the
622
+ * answer throws {@link PromptAnswerNotDeliveredError} with nothing typed.
623
+ */
624
+ async function sendAsInputWriter(params, readMark, send) {
625
+ let reread = null;
626
+ const outcome = await (0, instance_input_lock_1.answerUnderInstanceInputLock)(params.sessionName, readMark, async () => {
627
+ reread = await answerTargetStillOnScreen(params);
628
+ return reread !== null;
629
+ }, async (ticket) => {
630
+ // Review P1-b: always, wait or no wait — see `stillAllowedNow`.
631
+ if (!stillAllowedNow(params))
632
+ return 'answer-withheld';
633
+ // Review P2: every key of the answer goes out only while its ticket is
634
+ // current; a session replaced part-way gets none of the rest.
635
+ let lost = false;
636
+ const owned = () => {
637
+ if (ticket.isCurrent())
638
+ return true;
639
+ lost = true;
640
+ return false;
641
+ };
642
+ const callerStillCurrent = params.stillCurrent;
643
+ const keys = {
644
+ stillCurrent: () => owned() && (callerStillCurrent === undefined || callerStillCurrent()),
645
+ assertOwned: (keysSent) => {
646
+ if (owned())
647
+ return;
648
+ if (keysSent)
649
+ throw new prompt_answer_errors_1.PromptAnswerInputLostError(params.sessionName);
650
+ throw new prompt_answer_errors_1.PromptAnswerNotDeliveredError('input-lock-lost', params.sessionName);
651
+ },
652
+ };
653
+ try {
654
+ return await send(reread, keys);
655
+ }
656
+ catch (error) {
657
+ // The joined `stillCurrent` said no because of the ticket, not the
658
+ // caller: say which, as `assertOwned` does.
659
+ if (lost && error instanceof prompt_answer_errors_1.PromptAnswerAbortedError) {
660
+ if (error.keysSent)
661
+ throw new prompt_answer_errors_1.PromptAnswerInputLostError(params.sessionName);
662
+ throw new prompt_answer_errors_1.PromptAnswerNotDeliveredError('input-lock-lost', params.sessionName);
663
+ }
664
+ throw error;
665
+ }
666
+ });
667
+ if (!outcome.answered)
668
+ throw new prompt_answer_errors_1.PromptAnswerNotDeliveredError(outcome.reason, params.sessionName);
669
+ if (outcome.value !== undefined)
670
+ throw new prompt_answer_errors_1.PromptAnswerNotDeliveredError(outcome.value, params.sessionName);
757
671
  }
758
- exports.PromptAnswerAbortedError = PromptAnswerAbortedError;
759
672
  /**
760
673
  * What the tmux call that failed did (Issue #3880), when the error came from
761
674
  * the transport (`TmuxSendError`, by name: test doubles of `./tmux/tmux` need
@@ -803,12 +716,15 @@ function withKeysSent(error, touch) {
803
716
  /** Stop here when the caller's `stillCurrent` says no (Issue #3706). */
804
717
  function assertStillCurrent(stillCurrent, keysSent) {
805
718
  if (stillCurrent && !stillCurrent())
806
- throw new PromptAnswerAbortedError(keysSent);
719
+ throw new prompt_answer_errors_1.PromptAnswerAbortedError(keysSent);
807
720
  }
808
721
  /**
809
722
  * `sendSpecialKeys`, asking `stillCurrent` between the keys when the caller
810
723
  * gave one (Issue #3706). Without it the call is exactly the old two-argument
811
- * one, so manual answers and every other caller send as before.
724
+ * one. Issue #3952 (review P2, fourth contract): every answer typed as the
725
+ * session's input writer gives one — its ticket's check, joined with Auto-Yes's
726
+ * generation when there is one — so a manual answer's keys stop too when the
727
+ * session is replaced between them.
812
728
  */
813
729
  async function sendSpecialKeysWhileCurrent(sessionName, keys, stillCurrent, touch) {
814
730
  if (!stillCurrent) {
@@ -841,7 +757,7 @@ async function sendSpecialKeysWhileCurrent(sessionName, keys, stillCurrent, touc
841
757
  // By name rather than `instanceof`: test doubles of `./tmux/tmux` need not
842
758
  // export the class.
843
759
  if (error instanceof Error && error.name === 'SpecialKeysAbortedError') {
844
- throw new PromptAnswerAbortedError(true);
760
+ throw new prompt_answer_errors_1.PromptAnswerAbortedError(true);
845
761
  }
846
762
  if (touch && Math.max(delivered, keysDeliveredOf(error)) > 0)
847
763
  touch.touched = true;
@@ -872,6 +788,16 @@ function keysDeliveredOf(error) {
872
788
  * A failure after a key of the answer reached the pane carries `keysSent: true`
873
789
  * (Issue #3839), and a transport failure its `answerDelivery` (Issue #3880);
874
790
  * see {@link withKeysSent}.
791
+ *
792
+ * Issue #3952: every answer that sends an Enter — the cursor arms, the text arm
793
+ * with its Enter, the checkbox arm — types as the session's input writer
794
+ * (`instance-input-lock`), from its first key to its last, so a message send
795
+ * cannot type between the answer's text and its Enter, and an answer waits for
796
+ * a send in progress and is read again after it. An `answer_only` digit sends
797
+ * no Enter and is typed as before.
798
+ *
799
+ * @throws {PromptAnswerNotDeliveredError} when the answer waited for another
800
+ * writer and was then not typed
875
801
  */
876
802
  async function sendPromptAnswer(params) {
877
803
  const touch = { touched: false };
@@ -885,6 +811,7 @@ async function sendPromptAnswer(params) {
885
811
  /** {@link sendPromptAnswer}, noting in `touch` each key that reached the pane. */
886
812
  async function sendPromptAnswerKeys(params, touch) {
887
813
  const { sessionName, answer, cliToolId, promptData, fallbackPromptType, fallbackDefaultOptionNumber, stillCurrent } = params;
814
+ const readMark = params.readMark ?? (0, instance_input_lock_1.instanceInputReadMark)();
888
815
  // Issue #2755: Command Code's checkbox question, before every guard below.
889
816
  // Its answer is a SET (`"1,3"`), which none of them can read — `/^\d+$/` is
890
817
  // how all three ask "is this a number?", so a set would be judged as free
@@ -894,7 +821,14 @@ async function sendPromptAnswerKeys(params, touch) {
894
821
  // a two-stage confirm, not a digit and an Enter.
895
822
  const multiSelect = readMultiSelectRequest(params);
896
823
  if (multiSelect !== null) {
897
- await sendCommandCodeMultiSelectAnswer(sessionName, multiSelect.promptData, multiSelect.wanted, stillCurrent, touch);
824
+ await sendAsInputWriter(params, readMark, async (reread, keys) => {
825
+ // Review P1-1: the toggles come from the ticks on the screen they go
826
+ // to — read again after a wait — not from the reading the request saw.
827
+ const shown = reread === null ? multiSelect.promptData : reread;
828
+ if (shown.type !== 'multiple_choice' || shown.multiSelect !== true)
829
+ return 'target-changed';
830
+ await sendCommandCodeMultiSelectAnswer(sessionName, shown, multiSelect.wanted, keys.stillCurrent, touch, keys.assertOwned);
831
+ });
898
832
  (0, tmux_capture_cache_1.invalidateCache)(sessionName);
899
833
  return;
900
834
  }
@@ -935,39 +869,45 @@ async function sendPromptAnswerKeys(params, touch) {
935
869
  && /^\d+$/.test(answer);
936
870
  if (isCursorNavMultiChoice) {
937
871
  const targetNum = parseInt(answer, 10);
938
- let defaultNum;
939
- let mcOptions = null;
940
- if (promptData?.type === 'multiple_choice') {
941
- // Primary path: use fresh promptData
942
- mcOptions = promptData.options;
943
- const defaultOption = mcOptions.find(o => o.isDefault);
944
- defaultNum = defaultOption?.number ?? 1;
945
- }
946
- else {
947
- // Fallback path (Issue #287): promptData is undefined or type mismatch, use fallback fields
948
- defaultNum = fallbackDefaultOptionNumber ?? 1;
949
- }
950
- const offset = targetNum - defaultNum;
951
- // Detect multi-select (checkbox) prompts by checking for [ ] in option labels.
952
- // Multi-select prompts require: Space to toggle checkbox -> navigate to "Next" -> Enter.
953
- // Single-select prompts require: navigate to option -> Enter.
954
- // Note: multi-select detection is only possible when promptData succeeded (mcOptions available).
955
- const isMultiSelect = mcOptions !== null && (0, prompt_answer_semantic_1.hasCheckboxOptions)(mcOptions);
956
- if (isMultiSelect && mcOptions !== null) {
957
- // Multi-select: toggle checkbox, then navigate to "Next" and submit
958
- const checkboxCount = mcOptions.filter(o => (0, prompt_answer_semantic_1.hasCheckboxOptions)([o])).length;
959
- const keys = [
960
- ...buildNavigationKeys(offset), // 1. Navigate to target option
961
- 'Space', // 2. Toggle checkbox
962
- ];
963
- // 3. Navigate to "Next" button (positioned right after all checkbox options)
964
- const downToNext = checkboxCount - targetNum + 1;
965
- keys.push(...buildNavigationKeys(downToNext));
966
- // 4. Enter to submit
967
- keys.push('Enter');
968
- await sendSpecialKeysWhileCurrent(sessionName, keys, stillCurrent, touch);
969
- }
970
- else {
872
+ /**
873
+ * The keys for the answer on a screen read as `shown`. Issue #3952 review
874
+ * P1-1: called again with the prompt as read under the input lock after a
875
+ * wait, so the offset is from where the cursor IS — a cursor that moved
876
+ * while the answer waited would otherwise turn "2" into a bare Enter on 1.
877
+ */
878
+ const cursorKeys = (shown) => {
879
+ let defaultNum;
880
+ let mcOptions = null;
881
+ if (shown?.type === 'multiple_choice') {
882
+ // Primary path: use fresh promptData
883
+ mcOptions = shown.options;
884
+ const defaultOption = mcOptions.find(o => o.isDefault);
885
+ defaultNum = defaultOption?.number ?? 1;
886
+ }
887
+ else {
888
+ // Fallback path (Issue #287): promptData is undefined or type mismatch, use fallback fields
889
+ defaultNum = fallbackDefaultOptionNumber ?? 1;
890
+ }
891
+ const offset = targetNum - defaultNum;
892
+ // Detect multi-select (checkbox) prompts by checking for [ ] in option labels.
893
+ // Multi-select prompts require: Space to toggle checkbox -> navigate to "Next" -> Enter.
894
+ // Single-select prompts require: navigate to option -> Enter.
895
+ // Note: multi-select detection is only possible when promptData succeeded (mcOptions available).
896
+ const isMultiSelect = mcOptions !== null && (0, prompt_answer_semantic_1.hasCheckboxOptions)(mcOptions);
897
+ if (isMultiSelect && mcOptions !== null) {
898
+ // Multi-select: toggle checkbox, then navigate to "Next" and submit
899
+ const checkboxCount = mcOptions.filter(o => (0, prompt_answer_semantic_1.hasCheckboxOptions)([o])).length;
900
+ const keys = [
901
+ ...buildNavigationKeys(offset), // 1. Navigate to target option
902
+ 'Space', // 2. Toggle checkbox
903
+ ];
904
+ // 3. Navigate to "Next" button (positioned right after all checkbox options)
905
+ const downToNext = checkboxCount - targetNum + 1;
906
+ keys.push(...buildNavigationKeys(downToNext));
907
+ // 4. Enter to submit
908
+ keys.push('Enter');
909
+ return keys;
910
+ }
971
911
  // Single-select: navigate and Enter to select
972
912
  const navigationKeys = buildNavigationKeys(offset);
973
913
  // [Issue #807] Claude Code v2.x AskUserQuestion picker: when selecting the
@@ -978,29 +918,65 @@ async function sendPromptAnswerKeys(params, touch) {
978
918
  // the Up/Down navigation already engages the cursor, so no extra nudge is
979
919
  // needed. Old-format numbered prompts (isAskUserQuestion unset) keep their
980
920
  // exact prior key sequence, so their response behavior is unchanged.
981
- const isAskUserQuestionPicker = promptData?.type === 'multiple_choice'
982
- && promptData.isAskUserQuestion === true;
983
- const keys = (isAskUserQuestionPicker && offset === 0)
921
+ const isAskUserQuestionPicker = shown?.type === 'multiple_choice'
922
+ && shown.isAskUserQuestion === true;
923
+ return (isAskUserQuestionPicker && offset === 0)
984
924
  ? ['Down', 'Up', 'Enter']
985
925
  : [...navigationKeys, 'Enter'];
986
- await sendSpecialKeysWhileCurrent(sessionName, keys, stillCurrent, touch);
987
- }
926
+ };
927
+ await sendAsInputWriter(params, readMark, async (reread, writer) => {
928
+ // A re-read that is not a choice list says nothing about the cursor:
929
+ // the keys cannot be placed, so none are typed.
930
+ if (reread !== null && reread.type !== 'multiple_choice')
931
+ return 'target-changed';
932
+ const keys = cursorKeys(reread ?? promptData);
933
+ writer.assertOwned(false);
934
+ await sendSpecialKeysWhileCurrent(sessionName, keys, writer.stillCurrent, touch);
935
+ });
988
936
  }
989
937
  else {
990
- // Standard CLI prompt: send text + Enter (y/n, Approve?, etc.)
991
- await (0, tmux_1.sendKeys)(sessionName, answer, false);
992
- // Issue #3839: the text is on the pane; a failed Enter after it says so.
993
- if (answer !== '')
994
- touch.touched = true;
995
938
  // Issue #616: Resolve submitMode and determine whether to suppress Enter
996
939
  const resolvedSubmitMode = resolveSubmitMode(params, dialog);
997
- if (!shouldSuppressEnter(params, resolvedSubmitMode, dialog)) {
998
- // Wait a moment for the input to be processed
999
- await new Promise(resolve => setTimeout(resolve, cli_tool_timing_config_1.TUI_TEXT_INPUT_WAIT_MS));
1000
- // Issue #3706: the text is typed; the Enter that submits it is not.
1001
- assertStillCurrent(stillCurrent, true);
1002
- // Send Enter
1003
- await (0, tmux_1.sendKeys)(sessionName, '', true);
940
+ const typeText = async () => {
941
+ // Standard CLI prompt: send text + Enter (y/n, Approve?, etc.)
942
+ await (0, tmux_1.sendKeys)(sessionName, answer, false);
943
+ // Issue #3839: the text is on the pane; a failed Enter after it says so.
944
+ if (answer !== '')
945
+ touch.touched = true;
946
+ };
947
+ if (shouldSuppressEnter(params, resolvedSubmitMode, dialog)) {
948
+ // Issue #3952: one digit and no Enter — nothing a send could split, so
949
+ // not a writer of the session's input. Review P1-b: the caller's last
950
+ // look is still taken right before it (the guard above may have awaited
951
+ // a capture since the caller's own look).
952
+ if (!stillAllowedNow(params))
953
+ throw new prompt_answer_errors_1.PromptAnswerNotDeliveredError('answer-withheld', sessionName);
954
+ await typeText();
955
+ }
956
+ else {
957
+ // Issue #3952: text, wait and Enter as one writer, so no send's body can
958
+ // be typed in the wait and submitted by this Enter.
959
+ await sendAsInputWriter(params, readMark, async (reread, writer) => {
960
+ // Review P1-a: free text read again after a wait is judged on that
961
+ // reading — a field still there, and the cursor still on it (#2573 /
962
+ // #2584) — or the Enter after it confirms whatever row the cursor
963
+ // moved to. A refusal here types nothing, as the one before the wait.
964
+ if (reread !== null) {
965
+ const onScreen = { ...params, promptData: reread };
966
+ assertFreeTextHasATextField(onScreen);
967
+ assertFreeTextCursorIsOnTheField(onScreen);
968
+ }
969
+ writer.assertOwned(false);
970
+ await typeText();
971
+ // Wait a moment for the input to be processed
972
+ await new Promise(resolve => setTimeout(resolve, cli_tool_timing_config_1.TUI_TEXT_INPUT_WAIT_MS));
973
+ // Issue #3706: the text is typed; the Enter that submits it is not.
974
+ assertStillCurrent(stillCurrent, true);
975
+ // Review P2: nor by a session that replaced this one in the wait.
976
+ writer.assertOwned(answer !== '');
977
+ // Send Enter
978
+ await (0, tmux_1.sendKeys)(sessionName, '', true);
979
+ });
1004
980
  }
1005
981
  }
1006
982
  // Issue #405: Invalidate cache after sending prompt answer