commandmate 0.46.0 → 0.47.0

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 (743) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +417 -410
  3. package/.next/app-path-routes-manifest.json +22 -21
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/react-loadable-manifest.json +2 -2
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +8 -0
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update/route.js +4 -2
  14. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/capabilities/route.js +1 -1
  20. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/daily-summary/route.js +1 -1
  22. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  23. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  25. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  26. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  33. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  34. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/hooks/claude-done/route.js +9 -9
  36. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  37. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  39. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  40. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/push/escalation/route.js +1 -7
  44. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  45. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/push/vapid/route.js +1 -7
  48. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  49. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  51. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  52. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/relays/route.js +1 -1
  54. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  55. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  59. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  60. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/repositories/clone/route.js +1 -1
  62. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  63. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/restore/route.js +1 -1
  66. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/route.js +1 -1
  69. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  70. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/scan/route.js +1 -1
  72. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  73. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/sync/route.js +1 -1
  75. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  79. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  80. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  97. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  100. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  103. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +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_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  119. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  147. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  150. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  153. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/logs/route.js +9 -9
  156. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  167. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -0
  172. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -0
  173. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -0
  174. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
  195. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  210. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/route.js +1 -1
  233. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  236. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  239. package/.next/server/app/page_client-reference-manifest.js +1 -1
  240. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  243. package/.next/server/app/sessions/page.js +1 -1
  244. package/.next/server/app/sessions/page.js.nft.json +1 -1
  245. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  246. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  247. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  249. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  250. package/.next/server/app/worktrees/[id]/page.js +11 -11
  251. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  252. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  253. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  254. package/.next/server/app-paths-manifest.json +22 -21
  255. package/.next/server/chunks/1210.js +1 -1
  256. package/.next/server/chunks/1501.js +2 -2
  257. package/.next/server/chunks/1559.js +1 -1
  258. package/.next/server/chunks/1601.js +7 -0
  259. package/.next/server/chunks/1836.js +1 -0
  260. package/.next/server/chunks/1945.js +14 -0
  261. package/.next/server/chunks/2119.js +1 -1
  262. package/.next/server/chunks/2404.js +1 -1
  263. package/.next/server/chunks/2422.js +1 -0
  264. package/.next/server/chunks/2445.js +1 -1
  265. package/.next/server/chunks/2460.js +1 -1
  266. package/.next/server/chunks/2534.js +1 -1
  267. package/.next/server/chunks/3241.js +1 -1
  268. package/.next/server/chunks/{3077.js → 4194.js} +12 -12
  269. package/.next/server/chunks/4207.js +1 -1
  270. package/.next/server/chunks/4248.js +1 -1
  271. package/.next/server/chunks/5209.js +1 -1
  272. package/.next/server/chunks/5292.js +3 -3
  273. package/.next/server/chunks/5595.js +1 -1
  274. package/.next/server/chunks/5845.js +1 -1
  275. package/.next/server/chunks/6130.js +1 -1
  276. package/.next/server/chunks/6401.js +1 -1
  277. package/.next/server/chunks/{2283.js → 6486.js} +7 -7
  278. package/.next/server/chunks/6722.js +1 -1
  279. package/.next/server/chunks/6781.js +1 -1
  280. package/.next/server/chunks/6793.js +2 -2
  281. package/.next/server/chunks/7166.js +19 -0
  282. package/.next/server/chunks/7905.js +1 -1
  283. package/.next/server/chunks/8581.js +12 -12
  284. package/.next/server/chunks/8728.js +2 -2
  285. package/.next/server/chunks/8791.js +1 -1
  286. package/.next/server/chunks/8918.js +6 -6
  287. package/.next/server/chunks/9199.js +1 -0
  288. package/.next/server/chunks/936.js +1 -0
  289. package/.next/server/chunks/9390.js +1 -1
  290. package/.next/server/chunks/9540.js +1 -0
  291. package/.next/server/chunks/9627.js +3 -2
  292. package/.next/server/chunks/9731.js +3 -3
  293. package/.next/server/middleware-build-manifest.js +1 -1
  294. package/.next/server/middleware-manifest.json +5 -5
  295. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  296. package/.next/server/pages/500.html +1 -1
  297. package/.next/server/server-reference-manifest.json +1 -1
  298. package/.next/static/chunks/{2407-acb644c5487e1720.js → 2407-b2f524f99f7fc353.js} +1 -1
  299. package/.next/static/chunks/{2717.21abf5b6bbd45520.js → 2717.1583400c272dc1d9.js} +1 -1
  300. package/.next/static/chunks/5371-a549a0d2c2044d41.js +1 -0
  301. package/.next/static/chunks/5794-80ac3f06f098ea29.js +1 -0
  302. package/.next/static/chunks/602-1c1488959215e140.js +1 -0
  303. package/.next/static/chunks/{8407-9a72e6f07c5d5458.js → 8407-155f84e5ba05f1d5.js} +1 -1
  304. package/.next/static/chunks/9079-24f9fa549ed298f1.js +1 -0
  305. package/.next/static/chunks/app/api/agents/update/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
  306. package/.next/static/chunks/app/api/agents/versions/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
  307. package/.next/static/chunks/app/api/app/release-notes/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
  308. package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +1 -0
  309. package/.next/static/chunks/app/api/app/update-check/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
  310. package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +1 -0
  311. package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +1 -0
  312. package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +1 -0
  313. package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +1 -0
  314. package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +1 -0
  315. package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +1 -0
  316. package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +1 -0
  317. package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +1 -0
  318. package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +1 -0
  319. package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +1 -0
  320. package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +1 -0
  321. package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +1 -0
  322. package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +1 -0
  323. package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +1 -0
  324. package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +1 -0
  325. package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +1 -0
  326. package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +1 -0
  327. package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +1 -0
  328. package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +1 -0
  329. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +1 -0
  330. package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +1 -0
  331. package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +1 -0
  332. package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +1 -0
  333. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +1 -0
  334. package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +1 -0
  335. package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +1 -0
  336. package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +1 -0
  337. package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +1 -0
  338. package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +1 -0
  339. package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +1 -0
  340. package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +1 -0
  341. package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +1 -0
  342. package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +1 -0
  343. package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +1 -0
  344. package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +1 -0
  345. package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +1 -0
  346. package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +1 -0
  347. package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +1 -0
  348. package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +1 -0
  349. package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +1 -0
  350. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +1 -0
  351. package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +1 -0
  352. package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +1 -0
  353. package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +1 -0
  354. package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +1 -0
  355. package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +1 -0
  356. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +1 -0
  357. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +1 -0
  358. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +1 -0
  359. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +1 -0
  360. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +1 -0
  361. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +1 -0
  362. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +1 -0
  363. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +1 -0
  364. package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +1 -0
  365. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +1 -0
  366. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +1 -0
  367. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +1 -0
  368. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +1 -0
  369. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +1 -0
  370. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +1 -0
  371. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +1 -0
  372. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +1 -0
  373. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +1 -0
  374. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +1 -0
  375. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +1 -0
  376. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +1 -0
  377. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +1 -0
  378. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +1 -0
  379. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +1 -0
  380. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +1 -0
  381. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +1 -0
  382. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +1 -0
  383. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +1 -0
  384. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +1 -0
  385. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +1 -0
  386. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +1 -0
  387. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +1 -0
  388. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +1 -0
  389. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +1 -0
  390. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +1 -0
  391. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +1 -0
  392. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +1 -0
  393. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +1 -0
  394. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +1 -0
  396. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +1 -0
  397. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +1 -0
  398. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +1 -0
  399. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +1 -0
  400. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +1 -0
  401. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +1 -0
  402. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +1 -0
  403. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +1 -0
  404. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +1 -0
  405. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +1 -0
  441. package/.next/static/chunks/app/layout-419eaf7de340f4ab.js +1 -0
  442. package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +1 -0
  443. package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +1 -0
  444. package/.next/static/chunks/app/sessions/page-e02f1adb1d1c1ccc.js +1 -0
  445. package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +1 -0
  446. package/.next/static/chunks/app/worktrees/[id]/page-45294052ee3032f1.js +1 -0
  447. package/.next/static/chunks/{webpack-c0b821f340afdebf.js → webpack-468b7b33030234b3.js} +1 -1
  448. package/.next/trace +13 -13
  449. package/.next/types/app/api/worktrees/[id]/prompt-response/strict/route.ts +347 -0
  450. package/.next/types/routes.d.ts +2 -1
  451. package/.next/types/validator.ts +9 -0
  452. package/dist/cli/commands/auto-yes.d.ts +19 -0
  453. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  454. package/dist/cli/commands/auto-yes.js +45 -0
  455. package/dist/cli/commands/instances.d.ts.map +1 -1
  456. package/dist/cli/commands/instances.js +23 -18
  457. package/dist/cli/commands/ls.d.ts +15 -1
  458. package/dist/cli/commands/ls.d.ts.map +1 -1
  459. package/dist/cli/commands/ls.js +39 -3
  460. package/dist/cli/commands/prompt.d.ts +42 -0
  461. package/dist/cli/commands/prompt.d.ts.map +1 -0
  462. package/dist/cli/commands/prompt.js +211 -0
  463. package/dist/cli/commands/relays.d.ts.map +1 -1
  464. package/dist/cli/commands/relays.js +13 -1
  465. package/dist/cli/commands/respond-strict.d.ts +31 -0
  466. package/dist/cli/commands/respond-strict.d.ts.map +1 -0
  467. package/dist/cli/commands/respond-strict.js +214 -0
  468. package/dist/cli/commands/respond.d.ts.map +1 -1
  469. package/dist/cli/commands/respond.js +38 -0
  470. package/dist/cli/commands/send.d.ts.map +1 -1
  471. package/dist/cli/commands/send.js +41 -5
  472. package/dist/cli/commands/start.d.ts.map +1 -1
  473. package/dist/cli/commands/start.js +2 -1
  474. package/dist/cli/commands/status.d.ts.map +1 -1
  475. package/dist/cli/commands/status.js +18 -0
  476. package/dist/cli/commands/wait.d.ts +21 -1
  477. package/dist/cli/commands/wait.d.ts.map +1 -1
  478. package/dist/cli/commands/wait.js +113 -12
  479. package/dist/cli/docs/agent-operations.d.ts +1 -1
  480. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  481. package/dist/cli/docs/agent-operations.js +63 -1
  482. package/dist/cli/program.d.ts.map +1 -1
  483. package/dist/cli/program.js +6 -2
  484. package/dist/cli/types/api-responses.d.ts +62 -6
  485. package/dist/cli/types/api-responses.d.ts.map +1 -1
  486. package/dist/cli/types/index.d.ts +30 -0
  487. package/dist/cli/types/index.d.ts.map +1 -1
  488. package/dist/cli/types/index.js +12 -1
  489. package/dist/cli/utils/api-client.d.ts +13 -1
  490. package/dist/cli/utils/api-client.d.ts.map +1 -1
  491. package/dist/cli/utils/api-client.js +10 -2
  492. package/dist/cli/utils/daemon-factory.d.ts.map +1 -1
  493. package/dist/cli/utils/daemon-factory.js +3 -1
  494. package/dist/cli/utils/daemon.d.ts +38 -1
  495. package/dist/cli/utils/daemon.d.ts.map +1 -1
  496. package/dist/cli/utils/daemon.js +161 -8
  497. package/dist/cli/utils/paths.d.ts +12 -0
  498. package/dist/cli/utils/paths.d.ts.map +1 -1
  499. package/dist/cli/utils/paths.js +17 -0
  500. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +55 -1
  501. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
  502. package/dist/lib/polling/auto-yes-suppression-reason.js +20 -0
  503. package/dist/lib/prompt-observation/kinds.d.ts +101 -0
  504. package/dist/lib/prompt-observation/kinds.d.ts.map +1 -0
  505. package/dist/lib/prompt-observation/kinds.js +123 -0
  506. package/dist/lib/prompt-observation/types.d.ts +271 -0
  507. package/dist/lib/prompt-observation/types.d.ts.map +1 -0
  508. package/dist/lib/prompt-observation/types.js +14 -0
  509. package/dist/lib/session/send-attempt-types.d.ts +66 -0
  510. package/dist/lib/session/send-attempt-types.d.ts.map +1 -0
  511. package/dist/lib/session/send-attempt-types.js +17 -0
  512. package/dist/server/locales/en/worktree.json +4 -0
  513. package/dist/server/locales/ja/worktree.json +4 -0
  514. package/dist/server/server.js +20 -1
  515. package/dist/server/src/config/auto-yes-config.js +11 -0
  516. package/dist/server/src/lib/assistant-response-saver.js +13 -0
  517. package/dist/server/src/lib/auto-yes-lifecycle.js +28 -2
  518. package/dist/server/src/lib/auto-yes-poller.js +593 -78
  519. package/dist/server/src/lib/auto-yes-shutdown-record.js +257 -0
  520. package/dist/server/src/lib/auto-yes-state.js +197 -4
  521. package/dist/server/src/lib/cli-tools/antigravity-startup-trust.js +135 -0
  522. package/dist/server/src/lib/cli-tools/antigravity.js +162 -29
  523. package/dist/server/src/lib/cli-tools/command-code.js +10 -2
  524. package/dist/server/src/lib/cli-tools/copilot.js +21 -10
  525. package/dist/server/src/lib/cli-tools/gemini.js +60 -13
  526. package/dist/server/src/lib/cli-tools/launch-dialog.js +203 -0
  527. package/dist/server/src/lib/cli-tools/launch-window.js +96 -0
  528. package/dist/server/src/lib/conversation-logger.js +14 -2
  529. package/dist/server/src/lib/db/chat-db.js +2 -1
  530. package/dist/server/src/lib/detection/selection-shape.js +35 -1
  531. package/dist/server/src/lib/detection/tools/antigravity/detect.js +38 -9
  532. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +88 -1
  533. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +41 -1
  534. package/dist/server/src/lib/detection/tools/claude/detect.js +60 -0
  535. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +63 -13
  536. package/dist/server/src/lib/detection/tools/copilot/patterns.js +7 -1
  537. package/dist/server/src/lib/history/user-turn-recorder.js +14 -0
  538. package/dist/server/src/lib/hooks/sources/antigravity/history.js +28 -0
  539. package/dist/server/src/lib/hooks/sources/claude/history.js +7 -0
  540. package/dist/server/src/lib/hooks/sources/codex/history.js +7 -0
  541. package/dist/server/src/lib/hooks/sources/command-code/history.js +7 -0
  542. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +11 -2
  543. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +5 -3
  544. package/dist/server/src/lib/hooks/sources/transcript-history.js +34 -0
  545. package/dist/server/src/lib/log-manager.js +7 -2
  546. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +15 -0
  547. package/dist/server/src/lib/polling/antigravity-receipt-episodes.js +281 -0
  548. package/dist/server/src/lib/polling/auto-yes-confirm-page.js +56 -0
  549. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +8 -1
  550. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +22 -3
  551. package/dist/server/src/lib/polling/auto-yes-policy.js +61 -7
  552. package/dist/server/src/lib/polling/auto-yes-poller-state.js +234 -0
  553. package/dist/server/src/lib/polling/auto-yes-poller-stop-reason.js +50 -0
  554. package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +220 -5
  555. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +20 -0
  556. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +10 -0
  557. package/dist/server/src/lib/polling/pending-scraped-response.js +119 -3
  558. package/dist/server/src/lib/polling/poller-owner.js +110 -0
  559. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +2 -2
  560. package/dist/server/src/lib/polling/response-checker.js +211 -39
  561. package/dist/server/src/lib/polling/response-dedup.js +8 -0
  562. package/dist/server/src/lib/polling/response-poller-core.js +226 -75
  563. package/dist/server/src/lib/polling/structured-history-gate.js +20 -1
  564. package/dist/server/src/lib/prompt-answer-sender.js +59 -12
  565. package/dist/server/src/lib/prompt-observation/kinds.js +123 -0
  566. package/dist/server/src/lib/prompt-observation/types.js +14 -0
  567. package/dist/server/src/lib/push/prompt-push-gate.js +195 -3
  568. package/dist/server/src/lib/push/waiting-push-notifier.js +74 -7
  569. package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -0
  570. package/dist/server/src/lib/relay/relay-delivery-claims.js +46 -0
  571. package/dist/server/src/lib/relay/relay-delivery.js +76 -30
  572. package/dist/server/src/lib/schedule-manager.js +28 -0
  573. package/dist/server/src/lib/session/chat-turn-progress.js +57 -6
  574. package/dist/server/src/lib/session/cli-session.js +38 -3
  575. package/dist/server/src/lib/session/current-output-builder.js +19 -0
  576. package/dist/server/src/lib/session/send-attempt-state.js +155 -0
  577. package/dist/server/src/lib/session/send-attempt-types.js +17 -0
  578. package/dist/server/src/lib/session/send-user-message.js +46 -0
  579. package/dist/server/src/lib/session/worktree-session-reconcile.js +85 -11
  580. package/dist/server/src/lib/timer-manager.js +7 -0
  581. package/dist/server/src/lib/tmux/session-created-signal.js +76 -0
  582. package/dist/server/src/lib/tmux/tmux-capture-cache.js +58 -6
  583. package/dist/server/src/lib/tmux/tmux.js +28 -2
  584. package/dist/server/src/lib/verification/env-clean-gate.js +30 -2
  585. package/dist/server/src/lib/verification/scope-gate-format.js +100 -0
  586. package/dist/server/src/lib/verification/scope-gate-glob.js +185 -0
  587. package/dist/server/src/lib/verification/scope-gate.js +19 -271
  588. package/dist/server/src/lib/ws-server.js +48 -6
  589. package/docs/en/user-guide/cli-setup-guide.md +12 -1
  590. package/docs/en/user-guide/webapp-guide.md +2 -0
  591. package/package.json +1 -1
  592. package/release-notes/0.46.1.json +40 -0
  593. package/release-notes/0.47.0.json +118 -0
  594. package/.next/server/chunks/1789.js +0 -1
  595. package/.next/server/chunks/2908.js +0 -1
  596. package/.next/server/chunks/3718.js +0 -1
  597. package/.next/server/chunks/4837.js +0 -14
  598. package/.next/server/chunks/5625.js +0 -25
  599. package/.next/server/chunks/611.js +0 -1
  600. package/.next/server/chunks/850.js +0 -1
  601. package/.next/static/chunks/3201-c01f1feed69020e6.js +0 -1
  602. package/.next/static/chunks/5371-a94ed618148287a0.js +0 -1
  603. package/.next/static/chunks/5794-947fb4934d8be193.js +0 -1
  604. package/.next/static/chunks/602-25e45a2422d2a3ea.js +0 -1
  605. package/.next/static/chunks/app/api/app/update/route-0468c3c4baa46028.js +0 -1
  606. package/.next/static/chunks/app/api/auth/login/route-0468c3c4baa46028.js +0 -1
  607. package/.next/static/chunks/app/api/auth/logout/route-0468c3c4baa46028.js +0 -1
  608. package/.next/static/chunks/app/api/auth/status/route-0468c3c4baa46028.js +0 -1
  609. package/.next/static/chunks/app/api/capabilities/route-0468c3c4baa46028.js +0 -1
  610. package/.next/static/chunks/app/api/daily-summary/route-0468c3c4baa46028.js +0 -1
  611. package/.next/static/chunks/app/api/daily-summary/status/route-0468c3c4baa46028.js +0 -1
  612. package/.next/static/chunks/app/api/external-apps/[id]/health/route-0468c3c4baa46028.js +0 -1
  613. package/.next/static/chunks/app/api/external-apps/[id]/route-0468c3c4baa46028.js +0 -1
  614. package/.next/static/chunks/app/api/external-apps/route-0468c3c4baa46028.js +0 -1
  615. package/.next/static/chunks/app/api/fs/browse/route-0468c3c4baa46028.js +0 -1
  616. package/.next/static/chunks/app/api/fs/recent-paths/route-0468c3c4baa46028.js +0 -1
  617. package/.next/static/chunks/app/api/hooks/agent-event/route-0468c3c4baa46028.js +0 -1
  618. package/.next/static/chunks/app/api/hooks/claude-done/route-0468c3c4baa46028.js +0 -1
  619. package/.next/static/chunks/app/api/hooks/permission-request/route-0468c3c4baa46028.js +0 -1
  620. package/.next/static/chunks/app/api/metrics/vibe/route-0468c3c4baa46028.js +0 -1
  621. package/.next/static/chunks/app/api/ollama/models/route-0468c3c4baa46028.js +0 -1
  622. package/.next/static/chunks/app/api/push/escalation/route-0468c3c4baa46028.js +0 -1
  623. package/.next/static/chunks/app/api/push/subscriptions/route-0468c3c4baa46028.js +0 -1
  624. package/.next/static/chunks/app/api/push/vapid/route-0468c3c4baa46028.js +0 -1
  625. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-0468c3c4baa46028.js +0 -1
  626. package/.next/static/chunks/app/api/relays/route-0468c3c4baa46028.js +0 -1
  627. package/.next/static/chunks/app/api/remote/pair/route-0468c3c4baa46028.js +0 -1
  628. package/.next/static/chunks/app/api/repositories/[id]/route-0468c3c4baa46028.js +0 -1
  629. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-0468c3c4baa46028.js +0 -1
  630. package/.next/static/chunks/app/api/repositories/clone/route-0468c3c4baa46028.js +0 -1
  631. package/.next/static/chunks/app/api/repositories/excluded/route-0468c3c4baa46028.js +0 -1
  632. package/.next/static/chunks/app/api/repositories/restore/route-0468c3c4baa46028.js +0 -1
  633. package/.next/static/chunks/app/api/repositories/route-0468c3c4baa46028.js +0 -1
  634. package/.next/static/chunks/app/api/repositories/scan/route-0468c3c4baa46028.js +0 -1
  635. package/.next/static/chunks/app/api/repositories/sync/route-0468c3c4baa46028.js +0 -1
  636. package/.next/static/chunks/app/api/repositories/validate-path/route-0468c3c4baa46028.js +0 -1
  637. package/.next/static/chunks/app/api/settings/default-agents/route-0468c3c4baa46028.js +0 -1
  638. package/.next/static/chunks/app/api/settings/default-surface-mode/route-0468c3c4baa46028.js +0 -1
  639. package/.next/static/chunks/app/api/sidebar/group-order/route-0468c3c4baa46028.js +0 -1
  640. package/.next/static/chunks/app/api/skills/[id]/route-0468c3c4baa46028.js +0 -1
  641. package/.next/static/chunks/app/api/skills/installations/route-0468c3c4baa46028.js +0 -1
  642. package/.next/static/chunks/app/api/skills/operations/route-0468c3c4baa46028.js +0 -1
  643. package/.next/static/chunks/app/api/skills/reindex/route-0468c3c4baa46028.js +0 -1
  644. package/.next/static/chunks/app/api/skills/route-0468c3c4baa46028.js +0 -1
  645. package/.next/static/chunks/app/api/slash-commands/route-0468c3c4baa46028.js +0 -1
  646. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-0468c3c4baa46028.js +0 -1
  647. package/.next/static/chunks/app/api/tasks/[taskId]/route-0468c3c4baa46028.js +0 -1
  648. package/.next/static/chunks/app/api/templates/[id]/route-0468c3c4baa46028.js +0 -1
  649. package/.next/static/chunks/app/api/templates/route-0468c3c4baa46028.js +0 -1
  650. package/.next/static/chunks/app/api/verification/runs/[runId]/route-0468c3c4baa46028.js +0 -1
  651. package/.next/static/chunks/app/api/verification/runs/route-0468c3c4baa46028.js +0 -1
  652. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-0468c3c4baa46028.js +0 -1
  653. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-0468c3c4baa46028.js +0 -1
  654. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-0468c3c4baa46028.js +0 -1
  655. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-0468c3c4baa46028.js +0 -1
  656. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-0468c3c4baa46028.js +0 -1
  657. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-0468c3c4baa46028.js +0 -1
  658. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-0468c3c4baa46028.js +0 -1
  659. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-0468c3c4baa46028.js +0 -1
  660. package/.next/static/chunks/app/api/worktrees/[id]/env/route-0468c3c4baa46028.js +0 -1
  661. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-0468c3c4baa46028.js +0 -1
  662. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-0468c3c4baa46028.js +0 -1
  663. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-0468c3c4baa46028.js +0 -1
  664. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-0468c3c4baa46028.js +0 -1
  665. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-0468c3c4baa46028.js +0 -1
  666. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-0468c3c4baa46028.js +0 -1
  667. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-0468c3c4baa46028.js +0 -1
  668. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-0468c3c4baa46028.js +0 -1
  669. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-0468c3c4baa46028.js +0 -1
  670. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-0468c3c4baa46028.js +0 -1
  671. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-0468c3c4baa46028.js +0 -1
  672. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-0468c3c4baa46028.js +0 -1
  673. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-0468c3c4baa46028.js +0 -1
  674. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-0468c3c4baa46028.js +0 -1
  675. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-0468c3c4baa46028.js +0 -1
  676. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-0468c3c4baa46028.js +0 -1
  677. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-0468c3c4baa46028.js +0 -1
  678. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-0468c3c4baa46028.js +0 -1
  679. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-0468c3c4baa46028.js +0 -1
  680. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-0468c3c4baa46028.js +0 -1
  681. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-0468c3c4baa46028.js +0 -1
  682. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-0468c3c4baa46028.js +0 -1
  683. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-0468c3c4baa46028.js +0 -1
  684. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-0468c3c4baa46028.js +0 -1
  685. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-0468c3c4baa46028.js +0 -1
  686. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-0468c3c4baa46028.js +0 -1
  687. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-0468c3c4baa46028.js +0 -1
  688. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-0468c3c4baa46028.js +0 -1
  689. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-0468c3c4baa46028.js +0 -1
  690. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-0468c3c4baa46028.js +0 -1
  691. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-0468c3c4baa46028.js +0 -1
  692. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-0468c3c4baa46028.js +0 -1
  693. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-0468c3c4baa46028.js +0 -1
  694. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-0468c3c4baa46028.js +0 -1
  695. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-0468c3c4baa46028.js +0 -1
  696. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-0468c3c4baa46028.js +0 -1
  697. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-0468c3c4baa46028.js +0 -1
  698. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-0468c3c4baa46028.js +0 -1
  699. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-0468c3c4baa46028.js +0 -1
  700. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-0468c3c4baa46028.js +0 -1
  701. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-0468c3c4baa46028.js +0 -1
  702. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-0468c3c4baa46028.js +0 -1
  703. package/.next/static/chunks/app/api/worktrees/[id]/route-0468c3c4baa46028.js +0 -1
  704. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-0468c3c4baa46028.js +0 -1
  705. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-0468c3c4baa46028.js +0 -1
  706. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-0468c3c4baa46028.js +0 -1
  707. package/.next/static/chunks/app/api/worktrees/[id]/search/route-0468c3c4baa46028.js +0 -1
  708. package/.next/static/chunks/app/api/worktrees/[id]/send/route-0468c3c4baa46028.js +0 -1
  709. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-0468c3c4baa46028.js +0 -1
  710. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-0468c3c4baa46028.js +0 -1
  711. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-0468c3c4baa46028.js +0 -1
  712. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-0468c3c4baa46028.js +0 -1
  713. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-0468c3c4baa46028.js +0 -1
  714. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-0468c3c4baa46028.js +0 -1
  715. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-0468c3c4baa46028.js +0 -1
  716. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-0468c3c4baa46028.js +0 -1
  717. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-0468c3c4baa46028.js +0 -1
  718. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-0468c3c4baa46028.js +0 -1
  719. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-0468c3c4baa46028.js +0 -1
  720. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-0468c3c4baa46028.js +0 -1
  721. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-0468c3c4baa46028.js +0 -1
  722. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-0468c3c4baa46028.js +0 -1
  723. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-0468c3c4baa46028.js +0 -1
  724. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-0468c3c4baa46028.js +0 -1
  725. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-0468c3c4baa46028.js +0 -1
  726. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-0468c3c4baa46028.js +0 -1
  727. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-0468c3c4baa46028.js +0 -1
  728. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-0468c3c4baa46028.js +0 -1
  729. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-0468c3c4baa46028.js +0 -1
  730. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-0468c3c4baa46028.js +0 -1
  731. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-0468c3c4baa46028.js +0 -1
  732. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-0468c3c4baa46028.js +0 -1
  733. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-0468c3c4baa46028.js +0 -1
  734. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-0468c3c4baa46028.js +0 -1
  735. package/.next/static/chunks/app/api/worktrees/route-0468c3c4baa46028.js +0 -1
  736. package/.next/static/chunks/app/layout-ae30ce63569c22be.js +0 -1
  737. package/.next/static/chunks/app/manifest.webmanifest/route-0468c3c4baa46028.js +0 -1
  738. package/.next/static/chunks/app/proxy/[...path]/route-0468c3c4baa46028.js +0 -1
  739. package/.next/static/chunks/app/sessions/page-9859ed61e93e6890.js +0 -1
  740. package/.next/static/chunks/app/worktrees/[id]/layout-0468c3c4baa46028.js +0 -1
  741. package/.next/static/chunks/app/worktrees/[id]/page-2eb1d0fd0a077b7e.js +0 -1
  742. /package/.next/static/{zI2nQ6WKboSbFbMF4EtrJ → b5BiQC9F6r_XFPdA9cuSj}/_buildManifest.js +0 -0
  743. /package/.next/static/{zI2nQ6WKboSbFbMF4EtrJ → b5BiQC9F6r_XFPdA9cuSj}/_ssgManifest.js +0 -0
@@ -29,6 +29,10 @@
29
29
  * 8. clearInProgressMessageId
30
30
  * 9. startPolling — record the assistant response afterwards
31
31
  *
32
+ * Every attempt that reaches the ownership check also records how it ended —
33
+ * not-sent / sent / indeterminate — for `prompt --json`'s `lastSend` (Issue
34
+ * #3759, `./send-attempt-state`). Nothing is resent on any outcome.
35
+ *
32
36
  * Out of scope (kept in the HTTP layer / caller): request/body validation,
33
37
  * content trimming/size limits, imagePath validation, CLI-tool availability
34
38
  * and session-start (running) checks. The caller passes already-validated input.
@@ -48,6 +52,10 @@ const worktree_session_ownership_1 = require("../../lib/cli-tools/worktree-sessi
48
52
  const session_name_1 = require("../../lib/cli-tools/session-name");
49
53
  const prompt_waiting_guard_1 = require("../../lib/session/prompt-waiting-guard");
50
54
  const session_start_error_1 = require("../../lib/session/session-start-error");
55
+ const cli_session_1 = require("../../lib/session/cli-session");
56
+ const send_attempt_state_1 = require("../../lib/session/send-attempt-state");
57
+ const composer_text_1 = require("../../lib/detection/composer-text");
58
+ const status_capture_config_1 = require("../../config/status-capture-config");
51
59
  const opencode_1 = require("../../lib/cli-tools/opencode");
52
60
  const logger = (0, logger_1.createLogger)('session/send-user-message');
53
61
  function getErrorMessage(error) {
@@ -92,6 +100,28 @@ async function waitForPreviousTurnRecorded(worktreeId, resolvedInstanceId) {
92
100
  }
93
101
  return true;
94
102
  }
103
+ /**
104
+ * Whether the composer still shows the message after a send whose submit was
105
+ * never confirmed (Issue #3759) — evidence that it is typed but unsent.
106
+ *
107
+ * Only for the composers `extractComposerText` has measured; any other tool,
108
+ * and any read that fails, answers false and the state stays
109
+ * `submit-unconfirmed`. Either way the state is `indeterminate`: a message in
110
+ * the composer is not one to type again.
111
+ */
112
+ async function composerStillHolds(worktreeId, cliToolId, instanceId, content) {
113
+ if (!composer_text_1.SUPPORTED_COMPOSER_TOOLS.has(cliToolId))
114
+ return false;
115
+ try {
116
+ const output = await (0, cli_session_1.captureSessionOutputFresh)(worktreeId, cliToolId, status_capture_config_1.STATUS_CAPTURE_LINES, instanceId);
117
+ const read = (0, composer_text_1.extractComposerText)(output, cliToolId);
118
+ return read.state === 'content' && (0, send_attempt_state_1.composerHoldsMessage)(read.text, content);
119
+ }
120
+ catch (error) {
121
+ logger.warn('send-composer-residue-read-failed', { error: getErrorMessage(error) });
122
+ return false;
123
+ }
124
+ }
95
125
  /**
96
126
  * Send a validated user message to the CLI tool and record it in history.
97
127
  *
@@ -111,6 +141,12 @@ async function sendUserMessage(db, params) {
111
141
  */
112
142
  const resolvedInstanceId = instanceId ?? cliToolId;
113
143
  const cliTool = manager_1.CLIToolManager.getInstance().getTool(cliToolId);
144
+ // Issue #3759: how this attempt left the message, kept for `lastSend` (and
145
+ // read back by the send route for its error). The result's shape is
146
+ // unchanged; recording never throws.
147
+ const settle = (state, reason) => {
148
+ (0, send_attempt_state_1.recordSendAttempt)({ worktreeId, cliToolId, instanceId: resolvedInstanceId }, { state, reason, content });
149
+ };
114
150
  // Issue #2865: the send route checks ownership itself, but the timer manager
115
151
  // and relay delivery reach tmux only through here. A session under this
116
152
  // worktree's name that was created in another directory belongs to another
@@ -119,6 +155,7 @@ async function sendUserMessage(db, params) {
119
155
  const sessionName = (0, session_name_1.resolveSessionName)(cliToolId, worktreeId, instanceId);
120
156
  const ownership = await (0, worktree_session_ownership_1.checkWorktreeSessionOwnership)(worktreeId, sessionName, db);
121
157
  if (ownership === null || ownership.verdict === 'foreign') {
158
+ settle('not-sent', 'foreign-session');
122
159
  logger.warn('send-refused-foreign-session', {
123
160
  worktreeId,
124
161
  cliToolId,
@@ -157,6 +194,7 @@ async function sendUserMessage(db, params) {
157
194
  ignoreStructured: params.ignoreStructuredPromptGuard,
158
195
  });
159
196
  if (promptGuard.waiting) {
197
+ settle('not-sent', 'prompt-waiting');
160
198
  logger.info('send-refused-prompt-waiting', {
161
199
  worktreeId,
162
200
  cliToolId,
@@ -194,6 +232,7 @@ async function sendUserMessage(db, params) {
194
232
  }
195
233
  catch (error) {
196
234
  logger.error('failed-to-send-model-command:', { error: getErrorMessage(error) });
235
+ settle('not-sent', 'model-switch-failed');
197
236
  return { ok: false, stage: 'model', error: getErrorMessage(error) };
198
237
  }
199
238
  // Issue #2630: copilot is idle now, and if the previous turn ended during the
@@ -314,11 +353,18 @@ async function sendUserMessage(db, params) {
314
353
  }
315
354
  catch (error) {
316
355
  logger.error('failed-to-send-message-to:', { error: getErrorMessage(error) });
356
+ // Issue #3759: not-sent only when the error says the body was never typed.
357
+ let failure = (0, send_attempt_state_1.classifySendFailure)(error);
358
+ if (failure.reason === 'submit-unconfirmed' && (await composerStillHolds(worktreeId, cliToolId, instanceId, content))) {
359
+ failure = { state: 'indeterminate', reason: 'composer-residue' };
360
+ }
361
+ settle(failure.state, failure.reason);
317
362
  if ((0, session_start_error_1.isSessionStartTimeoutError)(error)) {
318
363
  return { ok: false, stage: 'send', error: error.message, code: session_start_error_1.SESSION_STARTING_CODE };
319
364
  }
320
365
  return { ok: false, stage: 'send', error: getErrorMessage(error) };
321
366
  }
367
+ settle('sent', 'submitted');
322
368
  // 5. Create user message in database (History source: chat_messages).
323
369
  const message = (0, db_1.createMessage)(db, {
324
370
  worktreeId,
@@ -86,6 +86,8 @@ const session_ownership_1 = require("../../lib/tmux/session-ownership");
86
86
  const control_mode_tmux_transport_1 = require("../../lib/tmux/control-mode-tmux-transport");
87
87
  const auto_yes_manager_1 = require("../../lib/polling/auto-yes-manager");
88
88
  const response_poller_1 = require("../../lib/polling/response-poller");
89
+ const auto_yes_poller_state_1 = require("../../lib/polling/auto-yes-poller-state");
90
+ const auto_yes_enter_fallback_1 = require("../../lib/polling/auto-yes-enter-fallback");
89
91
  const ws_server_1 = require("../../lib/ws-server");
90
92
  const logger_1 = require("../../lib/logger");
91
93
  const logger = (0, logger_1.createLogger)('worktree-session-reconcile');
@@ -152,8 +154,9 @@ function planSessionRenames(db, rename, errors) {
152
154
  // getSessionName validates already; assert it explicitly so the guarantee
153
155
  // is stated where the name is about to be handed to tmux (Issue #1621).
154
156
  (0, validation_1.validateSessionName)(newName);
155
- if (oldName !== newName)
156
- plans.push({ oldName, newName, rename, source: 'roster' });
157
+ if (oldName !== newName) {
158
+ plans.push({ oldName, newName, rename, cliToolId, instanceId, source: 'roster' });
159
+ }
157
160
  }
158
161
  catch (error) {
159
162
  errors.push(`session name for ${rename.oldId}/${instanceId}: ${error instanceof Error ? error.message : String(error)}`);
@@ -284,8 +287,16 @@ function discoverSessionRenames(renames, liveNames, knownIds, result) {
284
287
  : attributed.cliToolId;
285
288
  const newName = tool.getSessionName(rename.newId, instanceId);
286
289
  (0, validation_1.validateSessionName)(newName);
287
- if (name !== newName)
288
- plans.push({ oldName: name, newName, rename, source: 'live' });
290
+ if (name !== newName) {
291
+ plans.push({
292
+ oldName: name,
293
+ newName,
294
+ rename,
295
+ cliToolId: attributed.cliToolId,
296
+ instanceId,
297
+ source: 'live',
298
+ });
299
+ }
289
300
  }
290
301
  catch (error) {
291
302
  result.errors.push(`attribute session ${name}: ${error instanceof Error ? error.message : String(error)}`);
@@ -374,6 +385,10 @@ function allocateTempName(taken, ordinal) {
374
385
  }
375
386
  /**
376
387
  * Rename the live tmux sessions in two stages so no intermediate state collides.
388
+ *
389
+ * @returns The plans whose session was renamed in BOTH stages (Issue #3713: a
390
+ * stage-2 `false` — the session vanished from its temporary name — is not
391
+ * one; it is reported as skipped).
377
392
  */
378
393
  async function renameSessionsTwoStage(plans, live, deps, result) {
379
394
  if (plans.length === 0)
@@ -426,7 +441,14 @@ async function renameSessionsTwoStage(plans, live, deps, result) {
426
441
  const completed = [];
427
442
  for (const { plan, tempName } of staged) {
428
443
  try {
429
- await deps.renameSession(tempName, plan.newName);
444
+ if (!(await deps.renameSession(tempName, plan.newName))) {
445
+ result.skippedSessions.push({
446
+ oldName: plan.oldName,
447
+ newName: plan.newName,
448
+ reason: 'session no longer exists',
449
+ });
450
+ continue;
451
+ }
430
452
  result.renamedSessions.push({ oldName: plan.oldName, newName: plan.newName });
431
453
  completed.push(plan);
432
454
  // The control-mode attach survived the rename; only the registry key is
@@ -453,6 +475,37 @@ async function renameSessionsTwoStage(plans, live, deps, result) {
453
475
  }
454
476
  return completed;
455
477
  }
478
+ /** The Auto-Yes composite key of a plan's instance under `worktreeId`. */
479
+ function autoYesKeyOf(plan, worktreeId) {
480
+ return (0, auto_yes_manager_1.buildCompositeKey)(worktreeId, plan.cliToolId, plan.instanceId);
481
+ }
482
+ /**
483
+ * Carry Auto-Yes's memory of an answer stopped part-way, and of a send still in
484
+ * flight, to the new key of each session that moved (Issue #3713).
485
+ *
486
+ * Only for the renames that succeeded in both stages: a refused, failed or
487
+ * vanished rename leaves the destination's live session — and its memory —
488
+ * alone. Not part of {@link migrateRuntimeState}, which still runs for every
489
+ * requested pair: a grant, a response poller or a WebSocket room is about the
490
+ * worktree, this memory is about one process.
491
+ */
492
+ function moveAutoYesPartialAnswers(completed, sourceEpochs) {
493
+ const moves = [];
494
+ for (const plan of completed) {
495
+ const sourceEpoch = sourceEpochs.get(plan);
496
+ if (sourceEpoch === undefined)
497
+ continue;
498
+ moves.push({
499
+ oldKey: autoYesKeyOf(plan, plan.rename.oldId),
500
+ newKey: autoYesKeyOf(plan, plan.rename.newId),
501
+ sourceEpoch,
502
+ });
503
+ }
504
+ const received = (0, auto_yes_poller_state_1.movePartialAnswers)(moves);
505
+ if (received.length > 0) {
506
+ logger.info('reconcile:auto-yes-partial-answers-moved', { keys: received });
507
+ }
508
+ }
456
509
  /**
457
510
  * Move the in-process state that is keyed on a worktree ID.
458
511
  *
@@ -468,15 +521,28 @@ function migrateRuntimeState(db, renames, result) {
468
521
  const runningAutoYesPollers = new Set((0, auto_yes_manager_1.getAutoYesPollerCompositeKeys)());
469
522
  const movedAutoYes = (0, auto_yes_manager_1.migrateAutoYesStateWorktreeIds)(renames);
470
523
  result.movedAutoYesKeys = movedAutoYes.map((move) => move.newKey);
524
+ // The poller's timer chain captures the worktree ID, so re-keying its map
525
+ // would leave it polling the old session. Stop and restart instead — the
526
+ // Auto-Yes *state* (deadline, stop pattern) is what must survive, and it
527
+ // already has. Every old poller is stopped before any successor starts
528
+ // (Issue #3713): in a swap (A↔B) with both running, stop A → start B would
529
+ // find B's own poller still there ("already_running"), and the stop B that
530
+ // follows would leave the B side with none.
531
+ const restarts = [];
471
532
  for (const move of movedAutoYes) {
472
533
  if (!runningAutoYesPollers.has(move.oldKey))
473
534
  continue;
474
535
  try {
475
- // The poller's timer chain captures the worktree ID, so re-keying its map
476
- // would leave it polling the old session. Stop and restart instead — the
477
- // Auto-Yes *state* (deadline, stop pattern) is what must survive, and it
478
- // already has.
479
- (0, auto_yes_manager_1.stopAutoYesPolling)(move.oldKey);
536
+ // Issue #3730: a move, not a release — the grant goes on under newKey.
537
+ (0, auto_yes_manager_1.stopAutoYesPolling)(move.oldKey, 'worktree-id-migrated');
538
+ restarts.push(move);
539
+ }
540
+ catch (error) {
541
+ result.errors.push(`auto-yes poller ${move.newKey}: ${error instanceof Error ? error.message : String(error)}`);
542
+ }
543
+ }
544
+ for (const move of restarts) {
545
+ try {
480
546
  const started = (0, auto_yes_manager_1.startAutoYesPolling)(move.newWorktreeId, move.cliToolId, move.instanceId);
481
547
  if (started.started) {
482
548
  result.restartedAutoYesPollers.push(move.newKey);
@@ -572,7 +638,15 @@ async function reconcileWorktreeSessions(db, renamesOrOldId, newIdOrOptions, may
572
638
  result.planSources.discovered++;
573
639
  }
574
640
  const ownedPlans = excludeForeignSessionPlans(db, plans, live, livePaths, deps, result);
575
- await renameSessionsTwoStage(ownedPlans, live, deps, result);
641
+ // Issue #3713: each source session's epoch, read before the first rename's
642
+ // await — a session begun under the old key while the renames run is not the
643
+ // one that moves, and its memory stays where it is.
644
+ const sourceEpochs = new Map(ownedPlans.map((plan) => [plan, (0, auto_yes_enter_fallback_1.getEnterFallbackSessionEpoch)(autoYesKeyOf(plan, plan.rename.oldId))]));
645
+ const completed = await renameSessionsTwoStage(ownedPlans, live, deps, result);
646
+ // No await between the renames and this: Auto-Yes's memory of an answer
647
+ // stopped part-way (and of a send still in flight) follows exactly the
648
+ // sessions that moved, before any poller restarts below.
649
+ moveAutoYesPartialAnswers(completed, sourceEpochs);
576
650
  }
577
651
  // Runtime state moves after the sessions: a poller that ticks in between
578
652
  // fails one capture against a name that is briefly gone, which is a logged
@@ -53,6 +53,13 @@ async function executeTimer(timerId) {
53
53
  const instanceId = timer.instanceId;
54
54
  // [Issue #539] Check if session is running before sending
55
55
  const isRunning = await cliTool.isRunning(timer.worktreeId, instanceId);
56
+ // [Issue #3707] A cancel can succeed while the await above is pending.
57
+ // Re-read synchronously (no await between this read and the update below,
58
+ // so better-sqlite3 makes read+update atomic) and bail out unless the
59
+ // timer is still pending; otherwise 'cancelled' would be overwritten.
60
+ const current = (0, timer_db_1.getTimerById)(db, timerId);
61
+ if (!current || current.status !== 'pending')
62
+ return;
56
63
  if (!isRunning) {
57
64
  logger.warn('timer:no-session', { timerId, worktreeId: timer.worktreeId, instanceId });
58
65
  (0, timer_db_1.updateTimerStatus)(db, timerId, timer_constants_1.TIMER_STATUS.NO_SESSION);
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ /**
3
+ * "A tmux session of this name was just created" (Issue #3796).
4
+ *
5
+ * The Auto-Yes poller that found no session waits `MAX_BACKOFF_MS` for its next
6
+ * tick, and the push gate holds a prompt wait until that tick (#3791), so a
7
+ * session created right after the poller looked was answered — or its human
8
+ * notified — up to about 64 s late. {@link createSession} reports every session
9
+ * it creates here, and a waiting poller listens for its own session's name and
10
+ * ticks early.
11
+ *
12
+ * Synchronous and dependency-free on purpose: `tmux.ts` is the lowest layer and
13
+ * must not import the poller (it would be a cycle). A listener that throws is
14
+ * isolated from the others and from the session creation that fired it.
15
+ *
16
+ * @module lib/tmux/session-created-signal
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.onTmuxSessionCreated = onTmuxSessionCreated;
20
+ exports.notifyTmuxSessionCreated = notifyTmuxSessionCreated;
21
+ exports.countTmuxSessionCreatedListeners = countTmuxSessionCreatedListeners;
22
+ exports.clearTmuxSessionCreatedListeners = clearTmuxSessionCreatedListeners;
23
+ const global_state_1 = require("../global-state");
24
+ /**
25
+ * sessionName -> listeners. globalThis for the reason every shared in-memory
26
+ * state is (#1736): the creator (a route bundle) and the poller (the server's)
27
+ * can hold separate copies of this module.
28
+ */
29
+ const listeners = (0, global_state_1.getOrInitGlobal)('__tmuxSessionCreatedListeners', () => new Map());
30
+ /**
31
+ * Call `listener` the next time a session named `sessionName` is created.
32
+ *
33
+ * @returns Unsubscribe; calling it more than once does nothing
34
+ */
35
+ function onTmuxSessionCreated(sessionName, listener) {
36
+ let set = listeners.get(sessionName);
37
+ if (set === undefined) {
38
+ set = new Set();
39
+ listeners.set(sessionName, set);
40
+ }
41
+ set.add(listener);
42
+ return () => {
43
+ const current = listeners.get(sessionName);
44
+ if (current === undefined)
45
+ return;
46
+ current.delete(listener);
47
+ if (current.size === 0)
48
+ listeners.delete(sessionName);
49
+ };
50
+ }
51
+ /** Tell the listeners of `sessionName` that it was created. Each one is called once and dropped. */
52
+ function notifyTmuxSessionCreated(sessionName) {
53
+ const set = listeners.get(sessionName);
54
+ if (set === undefined)
55
+ return;
56
+ listeners.delete(sessionName);
57
+ for (const listener of set) {
58
+ try {
59
+ listener();
60
+ }
61
+ catch {
62
+ // A listener's failure must not fail the session creation that fired it.
63
+ }
64
+ }
65
+ }
66
+ /** Number of sessions someone is waiting for. Test seam. */
67
+ function countTmuxSessionCreatedListeners() {
68
+ let n = 0;
69
+ for (const set of listeners.values())
70
+ n += set.size;
71
+ return n;
72
+ }
73
+ /** Drop every listener. Test seam. */
74
+ function clearTmuxSessionCreatedListeners() {
75
+ listeners.clear();
76
+ }
@@ -21,6 +21,8 @@
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
22
  exports.CACHE_MAX_CAPTURE_LINES = exports.CACHE_MAX_ENTRIES = exports.CACHE_TTL_MS = void 0;
23
23
  exports.isCaptureWindowSaturated = isCaptureWindowSaturated;
24
+ exports.getCaptureGeneration = getCaptureGeneration;
25
+ exports.isCaptureGenerationCurrent = isCaptureGenerationCurrent;
24
26
  exports.sliceOutput = sliceOutput;
25
27
  exports.getCachedCapture = getCachedCapture;
26
28
  exports.setCachedCapture = setCachedCapture;
@@ -85,6 +87,37 @@ function getCache() {
85
87
  function getInflight() {
86
88
  return (0, global_state_1.getOrInitGlobal)('__tmuxCaptureCacheInflight', () => new Map());
87
89
  }
90
+ function getGenerationState() {
91
+ return (0, global_state_1.getOrInitGlobal)('__tmuxCaptureCacheGeneration', () => ({ global: 0, sessions: new Map() }));
92
+ }
93
+ // =========================================================================
94
+ // getCaptureGeneration() / isCaptureGenerationCurrent()
95
+ // =========================================================================
96
+ /**
97
+ * Take the invalidation generation for a session before starting a capture
98
+ * (Issue #3734). Pass it to isCaptureGenerationCurrent() after the await.
99
+ *
100
+ * @param sessionName - tmux session name
101
+ * @returns Generation snapshot
102
+ */
103
+ function getCaptureGeneration(sessionName) {
104
+ const state = getGenerationState();
105
+ return { global: state.global, session: state.sessions.get(sessionName) ?? 0 };
106
+ }
107
+ /**
108
+ * Whether no invalidateCache(sessionName) / clearAllCache() ran since the
109
+ * snapshot was taken (Issue #3734). A capture that started before the
110
+ * invalidation may show the screen from before a send, so it must not be
111
+ * written back to the cache.
112
+ *
113
+ * @param sessionName - tmux session name
114
+ * @param generation - Snapshot from getCaptureGeneration()
115
+ * @returns True when the capture may be written back
116
+ */
117
+ function isCaptureGenerationCurrent(sessionName, generation) {
118
+ const current = getCaptureGeneration(sessionName);
119
+ return current.global === generation.global && current.session === generation.session;
120
+ }
88
121
  // =========================================================================
89
122
  // sliceOutput()
90
123
  // =========================================================================
@@ -183,6 +216,9 @@ function setCachedCapture(sessionName, output, capturedLines) {
183
216
  // =========================================================================
184
217
  /**
185
218
  * Invalidate cache for a specific session.
219
+ * Issue #3734: also advances the session's generation and drops its inflight
220
+ * entry, so a capture started before the invalidation is neither written back
221
+ * nor joined by callers that arrive after it (they start a fresh capture).
186
222
  * [SEC4-006] Logs debug message with session name for troubleshooting.
187
223
  *
188
224
  * @param sessionName - tmux session name to invalidate
@@ -190,6 +226,9 @@ function setCachedCapture(sessionName, output, capturedLines) {
190
226
  function invalidateCache(sessionName) {
191
227
  const cache = getCache();
192
228
  cache.delete(sessionName);
229
+ const generations = getGenerationState().sessions;
230
+ generations.set(sessionName, (generations.get(sessionName) ?? 0) + 1);
231
+ getInflight().delete(sessionName);
193
232
  // [SEC4-006] Debug log for cache invalidation chain tracking
194
233
  logger.debug('cache:invalidate', { sessionName });
195
234
  }
@@ -197,14 +236,20 @@ function invalidateCache(sessionName) {
197
236
  // clearAllCache()
198
237
  // =========================================================================
199
238
  /**
200
- * Clear all cache entries and inflight requests.
201
- * Used for graceful shutdown.
239
+ * Clear all cache entries and inflight requests for every session.
240
+ * Called at the start of a worktree's session cleanup (session-cleanup.ts).
241
+ * Issue #3734: advances the global generation so captures started before the
242
+ * clear are not written back. Per-session counts are dropped here because the
243
+ * global generation alone already tells every older snapshot apart.
202
244
  */
203
245
  function clearAllCache() {
204
246
  const cache = getCache();
205
247
  cache.clear();
206
248
  const inflight = getInflight();
207
249
  inflight.clear();
250
+ const state = getGenerationState();
251
+ state.global += 1;
252
+ state.sessions.clear();
208
253
  }
209
254
  // =========================================================================
210
255
  // resetCacheForTesting()
@@ -216,6 +261,7 @@ function clearAllCache() {
216
261
  function resetCacheForTesting() {
217
262
  globalThis.__tmuxCaptureCache = undefined;
218
263
  globalThis.__tmuxCaptureCacheInflight = undefined;
264
+ globalThis.__tmuxCaptureCacheGeneration = undefined;
219
265
  }
220
266
  // =========================================================================
221
267
  // getOrFetchCapture() - singleflight pattern
@@ -247,18 +293,24 @@ async function getOrFetchCapture(sessionName, requestedLines, fetchFn) {
247
293
  return sliceOutput(result, requestedLines);
248
294
  }
249
295
  // 3. Create new fetch promise
296
+ // Issue #3734: snapshot the generation before fetchFn() starts
297
+ const generation = getCaptureGeneration(sessionName);
250
298
  const fetchPromise = fetchFn();
251
299
  inflight.set(sessionName, fetchPromise);
252
300
  try {
253
301
  const output = await fetchPromise;
254
- // Cache non-empty results only [SEC4-007]
255
- if (output.length > 0) {
302
+ // Cache non-empty results only [SEC4-007], and only when no invalidation
303
+ // happened while waiting (Issue #3734)
304
+ if (output.length > 0 && isCaptureGenerationCurrent(sessionName, generation)) {
256
305
  setCachedCapture(sessionName, output, exports.CACHE_MAX_CAPTURE_LINES);
257
306
  }
258
307
  return sliceOutput(output, requestedLines);
259
308
  }
260
309
  finally {
261
- // Clean up inflight entry
262
- inflight.delete(sessionName);
310
+ // Clean up inflight entry, unless an invalidation already replaced it
311
+ // with a newer fetch (Issue #3734)
312
+ if (inflight.get(sessionName) === fetchPromise) {
313
+ inflight.delete(sessionName);
314
+ }
263
315
  }
264
316
  }
@@ -4,7 +4,7 @@
4
4
  * Provides functions to manage tmux sessions for Claude CLI integration
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DIRECT_INPUT_TEXT_CHUNK_BYTES = exports.REPAINT_INVALIDATE_DELAY_MS = exports.NAVIGATION_KEY_VALUES = exports.SPECIAL_KEY_VALUES = void 0;
7
+ exports.DIRECT_INPUT_TEXT_CHUNK_BYTES = exports.REPAINT_INVALIDATE_DELAY_MS = exports.NAVIGATION_KEY_VALUES = exports.SPECIAL_KEY_VALUES = exports.SpecialKeysAbortedError = void 0;
8
8
  exports.exactTarget = exactTarget;
9
9
  exports.reconcileSessionGeometry = reconcileSessionGeometry;
10
10
  exports.hasSession = hasSession;
@@ -31,6 +31,7 @@ const util_1 = require("util");
31
31
  const tmux_capture_cache_1 = require("./tmux-capture-cache");
32
32
  const geometry_delegation_1 = require("./geometry-delegation");
33
33
  const legacy_session_alias_1 = require("./legacy-session-alias");
34
+ const session_created_signal_1 = require("./session-created-signal");
34
35
  const validation_1 = require("../../lib/cli-tools/validation");
35
36
  const tmux_pane_config_1 = require("../../config/tmux-pane-config");
36
37
  const logger_1 = require("../../lib/logger");
@@ -449,6 +450,9 @@ async function createSession(sessionNameOrOptions, cwd) {
449
450
  const errorMessage = error instanceof Error ? error.message : String(error);
450
451
  throw new Error(`Failed to create tmux session: ${errorMessage}`);
451
452
  }
453
+ // Issue #3796: an Auto-Yes poller waiting for this session ticks now rather
454
+ // than a backoff later. Outside the try: a listener cannot fail the creation.
455
+ (0, session_created_signal_1.notifyTmuxSessionCreated)(sessionName);
452
456
  }
453
457
  /**
454
458
  * Send keys to a tmux session
@@ -577,6 +581,21 @@ function isSendableSpecialKey(key) {
577
581
  }
578
582
  /** Delay between individual key presses for TUI apps that need processing time (ms). */
579
583
  const SPECIAL_KEY_DELAY_MS = 100;
584
+ /**
585
+ * {@link sendSpecialKeys} stopped between two keys because its
586
+ * `shouldContinue` said so (Issue #3706). Not wrapped in the transport error.
587
+ */
588
+ class SpecialKeysAbortedError extends Error {
589
+ keysSent;
590
+ constructor(
591
+ /** How many keys reached tmux before the stop (always at least one). */
592
+ keysSent) {
593
+ super(`Special key sequence stopped after ${keysSent} key(s)`);
594
+ this.keysSent = keysSent;
595
+ this.name = 'SpecialKeysAbortedError';
596
+ }
597
+ }
598
+ exports.SpecialKeysAbortedError = SpecialKeysAbortedError;
580
599
  /**
581
600
  * Send tmux special keys (unquoted key names like Down, Up, Enter, Space).
582
601
  * Used for cursor-based navigation in CLI tool prompts (e.g., Claude Code AskUserQuestion).
@@ -587,9 +606,11 @@ const SPECIAL_KEY_DELAY_MS = 100;
587
606
  *
588
607
  * @param sessionName - Target session name
589
608
  * @param keys - Array of tmux special key names (e.g., ['Down', 'Down', 'Space', 'Enter'])
609
+ * @param options - Optional `shouldContinue`, asked after each delay (Issue #3706)
590
610
  * @throws {Error} If any key name is not in the allowed set, or if tmux command fails
611
+ * @throws {SpecialKeysAbortedError} If `shouldContinue` returned false between two keys
591
612
  */
592
- async function sendSpecialKeys(sessionName, keys) {
613
+ async function sendSpecialKeys(sessionName, keys, options) {
593
614
  if (keys.length === 0)
594
615
  return;
595
616
  // Validate all keys are in the allowed set (command injection prevention)
@@ -604,10 +625,15 @@ async function sendSpecialKeys(sessionName, keys) {
604
625
  // Delay between key presses (skip after the last key)
605
626
  if (i < keys.length - 1) {
606
627
  await new Promise(resolve => setTimeout(resolve, SPECIAL_KEY_DELAY_MS));
628
+ if (options?.shouldContinue && !options.shouldContinue()) {
629
+ throw new SpecialKeysAbortedError(i + 1);
630
+ }
607
631
  }
608
632
  }
609
633
  }
610
634
  catch (error) {
635
+ if (error instanceof SpecialKeysAbortedError)
636
+ throw error;
611
637
  const errorMessage = error instanceof Error ? error.message : String(error);
612
638
  throw new Error(`Failed to send special keys to tmux session: ${errorMessage}`);
613
639
  }
@@ -572,6 +572,7 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
572
572
  removedByOtherRepository: [],
573
573
  removedStaleDemoVitest: [],
574
574
  ignoredByConfig: [],
575
+ ignoredBuiltIn: [],
575
576
  };
576
577
  }
577
578
  if (!after || after.status !== 'ok') {
@@ -587,18 +588,20 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
587
588
  removedByOtherRepository: [],
588
589
  removedStaleDemoVitest: [],
589
590
  ignoredByConfig: [],
591
+ ignoredBuiltIn: [],
590
592
  };
591
593
  }
592
594
  const beforeKeys = new Set(before.entries.map((entry) => entry.key));
593
595
  const afterKeys = new Set(after.entries.map((entry) => entry.key));
594
596
  // Only `home-entries`, and only by the whole name: the same string under
595
597
  // `~/.commandmate` is a different directory and stays counted.
596
- const isIgnoredByConfig = (entry) => probeId === 'home-entries' &&
597
- (ignoredHomeEntries.has(entry.key) || isZcompdumpEntry(entry.key));
598
+ const isIgnoredByConfig = (entry) => probeId === 'home-entries' && ignoredHomeEntries.has(entry.key);
599
+ const isIgnoredBuiltIn = (entry) => probeId === 'home-entries' && isZcompdumpEntry(entry.key);
598
600
  const added = [];
599
601
  const ignoredAdded = [];
600
602
  const taskSessionAdded = [];
601
603
  const ignoredByConfig = [];
604
+ const ignoredBuiltIn = [];
602
605
  for (const entry of after.entries) {
603
606
  if (beforeKeys.has(entry.key))
604
607
  continue;
@@ -607,6 +610,10 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
607
610
  ignoredByConfig.push(toChange(entry, owner));
608
611
  continue;
609
612
  }
613
+ if (isIgnoredBuiltIn(entry)) {
614
+ ignoredBuiltIn.push(toChange(entry, owner));
615
+ continue;
616
+ }
610
617
  if (probeId === 'tmux-sessions' && taskSession && entry.key === taskSession) {
611
618
  // Additions only: a task session that existed at task start and is gone
612
619
  // falls through to `removed` below like everything else (#1624).
@@ -632,6 +639,9 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
632
639
  if (isIgnoredByConfig(entry)) {
633
640
  ignoredByConfig.push(change);
634
641
  }
642
+ else if (isIgnoredBuiltIn(entry)) {
643
+ ignoredBuiltIn.push(change);
644
+ }
635
645
  else if (tmuxServerSurvived &&
636
646
  change.owner !== 'self' &&
637
647
  otherServerSessions.has(entry.key)) {
@@ -661,6 +671,7 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
661
671
  removedByOtherRepository,
662
672
  removedStaleDemoVitest,
663
673
  ignoredByConfig,
674
+ ignoredBuiltIn,
664
675
  };
665
676
  });
666
677
  // A measured violation is a verdict and outranks an unmeasured probe; an
@@ -735,6 +746,20 @@ function formatIgnoredByConfig(changes) {
735
746
  const names = changes.map((change) => change.key).join(', ');
736
747
  return [` ignored (options.envCleanIgnoreHomeEntries): ${names}`];
737
748
  }
749
+ /** Built-in `home-entries` exclusions (zsh compinit cache), on their own line (#3672). */
750
+ function formatIgnoredBuiltIn(changes) {
751
+ if (changes.length === 0)
752
+ return [];
753
+ const names = changes.map((change) => change.key).join(', ');
754
+ return [` ignored (built-in): ${names}`];
755
+ }
756
+ /** Additions excused as another worktree's, named on a clean report (#3683). */
757
+ function formatIgnoredAttributed(changes) {
758
+ if (changes.length === 0)
759
+ return [];
760
+ const names = changes.map((change) => change.key).join(', ');
761
+ return [` ignored (attributed to another worktree): ${names}`];
762
+ }
738
763
  /**
739
764
  * The header's account of what could be excused, so a report judged against a
740
765
  * baseline written before #2472 says why the task's own session was not.
@@ -765,6 +790,8 @@ function formatEnvCleanReport(diff) {
765
790
  lines.push(...formatRemovedByOtherRepository(probe.removedByOtherRepository));
766
791
  lines.push(...formatRemovedStaleDemoVitest(probe.removedStaleDemoVitest));
767
792
  lines.push(...formatIgnoredByConfig(probe.ignoredByConfig));
793
+ lines.push(...formatIgnoredBuiltIn(probe.ignoredBuiltIn));
794
+ lines.push(...formatIgnoredAttributed(probe.ignoredAdded));
768
795
  continue;
769
796
  }
770
797
  lines.push(` ${probe.probeId} VIOLATED (${label}): +${probe.added.length} -${probe.removed.length}`);
@@ -775,6 +802,7 @@ function formatEnvCleanReport(diff) {
775
802
  lines.push(...formatRemovedByOtherRepository(probe.removedByOtherRepository));
776
803
  lines.push(...formatRemovedStaleDemoVitest(probe.removedStaleDemoVitest));
777
804
  lines.push(...formatIgnoredByConfig(probe.ignoredByConfig));
805
+ lines.push(...formatIgnoredBuiltIn(probe.ignoredBuiltIn));
778
806
  for (const excused of probe.ignoredAdded) {
779
807
  lines.push(` · ${excused.key} (ignored: belongs to another worktree)`);
780
808
  }