commandmate 0.49.0 → 0.49.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (721) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +238 -231
  3. package/.next/app-path-routes-manifest.json +19 -18
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +8 -0
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/capabilities/route.js +1 -1
  18. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  27. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  28. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  30. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  31. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  33. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  34. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  39. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  42. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  43. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/relays/[relayId]/route.js +1 -0
  45. package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -0
  46. package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -0
  47. package/.next/server/app/api/relays/route.js +1 -1
  48. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  49. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  53. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  54. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/repositories/clone/route.js +1 -1
  56. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  57. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/repositories/restore/route.js +1 -1
  60. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  61. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/route.js +1 -1
  63. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/scan/route.js +1 -1
  66. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/sync/route.js +1 -1
  69. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  70. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  73. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  74. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  85. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  89. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/verification/runs/route.js +1 -1
  91. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  94. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  97. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  100. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.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_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.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.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  169. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  175. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  205. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/send/route.js +144 -1
  214. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  217. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
  235. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/route.js +1 -1
  263. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  264. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  266. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  268. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  272. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  273. package/.next/server/app/sessions/page.js +1 -1
  274. package/.next/server/app/sessions/page.js.nft.json +1 -1
  275. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  276. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/worktrees/[id]/page.js +11 -11
  281. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  282. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app-paths-manifest.json +19 -18
  285. package/.next/server/chunks/1656.js +2 -2
  286. package/.next/server/chunks/2119.js +1 -1
  287. package/.next/server/chunks/2404.js +1 -1
  288. package/.next/server/chunks/2445.js +1 -1
  289. package/.next/server/chunks/3773.js +1 -0
  290. package/.next/server/chunks/3801.js +31 -0
  291. package/.next/server/chunks/5209.js +1 -1
  292. package/.next/server/chunks/5354.js +1 -1
  293. package/.next/server/chunks/{9130.js → 5630.js} +1 -1
  294. package/.next/server/chunks/5775.js +1 -0
  295. package/.next/server/chunks/610.js +1 -0
  296. package/.next/server/chunks/6119.js +1 -1
  297. package/.next/server/chunks/6130.js +1 -1
  298. package/.next/server/chunks/6401.js +1 -1
  299. package/.next/server/chunks/6486.js +1 -1
  300. package/.next/server/chunks/6781.js +1 -1
  301. package/.next/server/chunks/6808.js +4 -0
  302. package/.next/server/chunks/7023.js +14 -0
  303. package/.next/server/chunks/7604.js +1 -1
  304. package/.next/server/chunks/7905.js +1 -1
  305. package/.next/server/chunks/8581.js +15 -15
  306. package/.next/server/chunks/8728.js +2 -2
  307. package/.next/server/chunks/8782.js +1 -1
  308. package/.next/server/chunks/8807.js +63 -53
  309. package/.next/server/chunks/8918.js +103 -1
  310. package/.next/server/chunks/9198.js +144 -0
  311. package/.next/server/chunks/9390.js +1 -1
  312. package/.next/server/chunks/9584.js +1 -1
  313. package/.next/server/chunks/9627.js +1 -1
  314. package/.next/server/chunks/9731.js +3 -3
  315. package/.next/server/middleware-manifest.json +5 -5
  316. package/.next/server/pages/500.html +1 -1
  317. package/.next/server/server-reference-manifest.json +1 -1
  318. package/.next/static/chunks/{2407-ab92ae9837c39dce.js → 2407-675ba6b21844dc3b.js} +1 -1
  319. package/.next/static/chunks/3931-1a1abab16248f14d.js +1 -0
  320. package/.next/static/chunks/8606-ce17ffa77f39608e.js +1 -0
  321. package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +1 -0
  322. package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +1 -0
  323. package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +1 -0
  324. package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +1 -0
  325. package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +1 -0
  326. package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +1 -0
  327. package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +1 -0
  328. package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +1 -0
  329. package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +1 -0
  330. package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +1 -0
  331. package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +1 -0
  332. package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +1 -0
  333. package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +1 -0
  334. package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +1 -0
  335. package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +1 -0
  336. package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +1 -0
  337. package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +1 -0
  338. package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +1 -0
  339. package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +1 -0
  340. package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +1 -0
  341. package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +1 -0
  342. package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +1 -0
  343. package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +1 -0
  344. package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +1 -0
  345. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +1 -0
  346. package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +1 -0
  347. package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +1 -0
  348. package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +1 -0
  349. package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +1 -0
  350. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +1 -0
  351. package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +1 -0
  352. package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +1 -0
  353. package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +1 -0
  354. package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +1 -0
  355. package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +1 -0
  356. package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +1 -0
  357. package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +1 -0
  358. package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +1 -0
  359. package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +1 -0
  360. package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +1 -0
  361. package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +1 -0
  362. package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +1 -0
  363. package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +1 -0
  364. package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +1 -0
  365. package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +1 -0
  366. package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +1 -0
  367. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +1 -0
  368. package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +1 -0
  369. package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +1 -0
  370. package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +1 -0
  371. package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +1 -0
  372. package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +1 -0
  373. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +1 -0
  374. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +1 -0
  375. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +1 -0
  376. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +1 -0
  377. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +1 -0
  378. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +1 -0
  379. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +1 -0
  380. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +1 -0
  381. package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +1 -0
  382. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +1 -0
  383. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +1 -0
  384. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +1 -0
  385. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +1 -0
  386. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +1 -0
  387. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +1 -0
  388. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +1 -0
  389. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +1 -0
  390. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +1 -0
  391. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +1 -0
  392. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +1 -0
  393. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +1 -0
  394. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +1 -0
  396. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +1 -0
  397. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +1 -0
  398. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +1 -0
  399. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +1 -0
  400. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +1 -0
  401. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +1 -0
  402. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +1 -0
  403. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +1 -0
  404. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +1 -0
  405. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +1 -0
  458. package/.next/static/chunks/app/layout-8bfac4724277b47f.js +1 -0
  459. package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +1 -0
  460. package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +1 -0
  461. package/.next/static/chunks/app/sessions/page-890fd50ec9739973.js +1 -0
  462. package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +1 -0
  463. package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +1 -0
  464. package/.next/static/css/c1e307d05daf93b6.css +1 -0
  465. package/.next/trace +13 -13
  466. package/.next/types/app/api/relays/[relayId]/route.ts +347 -0
  467. package/.next/types/routes.d.ts +2 -1
  468. package/.next/types/validator.ts +9 -0
  469. package/dist/cli/commands/ask.d.ts.map +1 -1
  470. package/dist/cli/commands/ask.js +178 -13
  471. package/dist/cli/commands/message-dispatch.d.ts +25 -5
  472. package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
  473. package/dist/cli/commands/message-dispatch.js +92 -6
  474. package/dist/cli/commands/relays.d.ts +25 -2
  475. package/dist/cli/commands/relays.d.ts.map +1 -1
  476. package/dist/cli/commands/relays.js +69 -5
  477. package/dist/cli/commands/respond.d.ts +12 -0
  478. package/dist/cli/commands/respond.d.ts.map +1 -1
  479. package/dist/cli/commands/respond.js +63 -1
  480. package/dist/cli/commands/send.d.ts.map +1 -1
  481. package/dist/cli/commands/send.js +6 -4
  482. package/dist/cli/commands/wait-hook-stop-settle.d.ts +66 -0
  483. package/dist/cli/commands/wait-hook-stop-settle.d.ts.map +1 -0
  484. package/dist/cli/commands/wait-hook-stop-settle.js +150 -0
  485. package/dist/cli/commands/wait-instance.d.ts +21 -0
  486. package/dist/cli/commands/wait-instance.d.ts.map +1 -0
  487. package/dist/cli/commands/wait-instance.js +41 -0
  488. package/dist/cli/commands/wait-notices.d.ts +87 -0
  489. package/dist/cli/commands/wait-notices.d.ts.map +1 -0
  490. package/dist/cli/commands/wait-notices.js +301 -0
  491. package/dist/cli/commands/wait-poll-bookkeeping.d.ts +15 -0
  492. package/dist/cli/commands/wait-poll-bookkeeping.d.ts.map +1 -0
  493. package/dist/cli/commands/wait-poll-bookkeeping.js +57 -0
  494. package/dist/cli/commands/wait-poll-state.d.ts +118 -0
  495. package/dist/cli/commands/wait-poll-state.d.ts.map +1 -0
  496. package/dist/cli/commands/wait-poll-state.js +6 -0
  497. package/dist/cli/commands/wait-timing.d.ts +46 -0
  498. package/dist/cli/commands/wait-timing.d.ts.map +1 -0
  499. package/dist/cli/commands/wait-timing.js +99 -0
  500. package/dist/cli/commands/wait-turn-boundary.d.ts +284 -0
  501. package/dist/cli/commands/wait-turn-boundary.d.ts.map +1 -0
  502. package/dist/cli/commands/wait-turn-boundary.js +427 -0
  503. package/dist/cli/commands/wait-verify.d.ts +50 -0
  504. package/dist/cli/commands/wait-verify.d.ts.map +1 -0
  505. package/dist/cli/commands/wait-verify.js +124 -0
  506. package/dist/cli/commands/wait.d.ts +6 -105
  507. package/dist/cli/commands/wait.d.ts.map +1 -1
  508. package/dist/cli/commands/wait.js +207 -959
  509. package/dist/cli/docs/agent-operations.d.ts +2 -2
  510. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  511. package/dist/cli/docs/agent-operations.js +23 -1
  512. package/dist/cli/types/api-responses.d.ts +47 -3
  513. package/dist/cli/types/api-responses.d.ts.map +1 -1
  514. package/dist/cli/utils/api-client.d.ts +15 -1
  515. package/dist/cli/utils/api-client.d.ts.map +1 -1
  516. package/dist/cli/utils/api-client.js +7 -1
  517. package/dist/cli/utils/reply-ledger.d.ts +79 -0
  518. package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
  519. package/dist/cli/utils/reply-ledger.js +141 -1
  520. package/dist/lib/session/send-attempt-types.d.ts +23 -1
  521. package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
  522. package/dist/lib/session/send-attempt-types.js +9 -1
  523. package/dist/server/locales/en/worktree.json +18 -3
  524. package/dist/server/locales/ja/worktree.json +18 -3
  525. package/dist/server/src/lib/auto-yes-poller.js +49 -10
  526. package/dist/server/src/lib/cli-tools/antigravity.js +40 -7
  527. package/dist/server/src/lib/cli-tools/codex.js +60 -11
  528. package/dist/server/src/lib/cli-tools/command-code-plan-review.js +24 -2
  529. package/dist/server/src/lib/cli-tools/copilot.js +120 -30
  530. package/dist/server/src/lib/cli-tools/gemini.js +28 -9
  531. package/dist/server/src/lib/cli-tools/opencode.js +55 -13
  532. package/dist/server/src/lib/cli-tools/submit-composer-read.js +580 -0
  533. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +356 -621
  534. package/dist/server/src/lib/db/migrations/index.js +2 -0
  535. package/dist/server/src/lib/db/migrations/pre-migration-backup.js +266 -0
  536. package/dist/server/src/lib/db/migrations/runner.js +37 -4
  537. package/dist/server/src/lib/db/migrations/v62-session-relays-bind.js +102 -0
  538. package/dist/server/src/lib/db/relay-bind-db.js +437 -0
  539. package/dist/server/src/lib/db/relay-db.js +59 -96
  540. package/dist/server/src/lib/detection/upstream-faults.js +40 -6
  541. package/dist/server/src/lib/hooks/sources/opencode/client.js +12 -6
  542. package/dist/server/src/lib/polling/response-checker.js +7 -5
  543. package/dist/server/src/lib/prompt-answer-errors.js +288 -0
  544. package/dist/server/src/lib/prompt-answer-sender.js +264 -288
  545. package/dist/server/src/lib/push/failure-episode-state.js +4 -1
  546. package/dist/server/src/lib/realtime/terminal-broadcast.js +1 -4
  547. package/dist/server/src/lib/realtime-snippet.js +54 -0
  548. package/dist/server/src/lib/relay/relay-bind.js +294 -0
  549. package/dist/server/src/lib/relay/relay-boot.js +51 -0
  550. package/dist/server/src/lib/relay/relay-bound-reply.js +519 -0
  551. package/dist/server/src/lib/relay/relay-delivery.js +134 -220
  552. package/dist/server/src/lib/relay/relay-messages.js +39 -4
  553. package/dist/server/src/lib/relay/relay-overlap.js +92 -0
  554. package/dist/server/src/lib/relay/relay-system-line.js +3 -2
  555. package/dist/server/src/lib/relay/types.js +12 -1
  556. package/dist/server/src/lib/session/agent-session-lifecycle.js +18 -0
  557. package/dist/server/src/lib/session/claude-session.js +41 -6
  558. package/dist/server/src/lib/session/composer-clear.js +54 -1
  559. package/dist/server/src/lib/session/current-output-builder.js +21 -5
  560. package/dist/server/src/lib/session/instance-input-lock.js +664 -0
  561. package/dist/server/src/lib/session/send-attempt-state.js +17 -0
  562. package/dist/server/src/lib/session/send-attempt-types.js +9 -1
  563. package/dist/server/src/lib/session/send-user-message.js +82 -13
  564. package/package.json +1 -1
  565. package/release-notes/0.49.1.json +66 -0
  566. package/.next/server/chunks/1210.js +0 -1
  567. package/.next/server/chunks/1945.js +0 -14
  568. package/.next/server/chunks/1990.js +0 -103
  569. package/.next/server/chunks/4194.js +0 -67
  570. package/.next/server/chunks/4280.js +0 -1
  571. package/.next/server/chunks/5845.js +0 -1
  572. package/.next/server/chunks/720.js +0 -103
  573. package/.next/server/chunks/936.js +0 -1
  574. package/.next/server/chunks/9540.js +0 -1
  575. package/.next/static/chunks/8606-cf6bdbff44a764cf.js +0 -1
  576. package/.next/static/chunks/9079-987939d231704218.js +0 -1
  577. package/.next/static/chunks/app/api/agents/update/route-c81284a9d8b35304.js +0 -1
  578. package/.next/static/chunks/app/api/agents/versions/route-c81284a9d8b35304.js +0 -1
  579. package/.next/static/chunks/app/api/app/release-notes/route-c81284a9d8b35304.js +0 -1
  580. package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +0 -1
  581. package/.next/static/chunks/app/api/app/update-check/route-c81284a9d8b35304.js +0 -1
  582. package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +0 -1
  583. package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +0 -1
  584. package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +0 -1
  585. package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +0 -1
  586. package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +0 -1
  587. package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +0 -1
  588. package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +0 -1
  589. package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +0 -1
  590. package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +0 -1
  591. package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +0 -1
  592. package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +0 -1
  593. package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +0 -1
  594. package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +0 -1
  595. package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +0 -1
  596. package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +0 -1
  597. package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +0 -1
  598. package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +0 -1
  599. package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +0 -1
  600. package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +0 -1
  601. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +0 -1
  602. package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +0 -1
  603. package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +0 -1
  604. package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +0 -1
  605. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +0 -1
  606. package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +0 -1
  607. package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +0 -1
  608. package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +0 -1
  609. package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +0 -1
  610. package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +0 -1
  611. package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +0 -1
  612. package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +0 -1
  613. package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +0 -1
  614. package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +0 -1
  615. package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +0 -1
  616. package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +0 -1
  617. package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +0 -1
  618. package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +0 -1
  619. package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +0 -1
  620. package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +0 -1
  621. package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +0 -1
  622. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +0 -1
  623. package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +0 -1
  624. package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +0 -1
  625. package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +0 -1
  626. package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +0 -1
  627. package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +0 -1
  628. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +0 -1
  629. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +0 -1
  630. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +0 -1
  631. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +0 -1
  632. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +0 -1
  633. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +0 -1
  634. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +0 -1
  635. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +0 -1
  636. package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +0 -1
  637. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +0 -1
  638. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +0 -1
  639. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +0 -1
  640. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +0 -1
  641. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +0 -1
  642. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +0 -1
  643. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +0 -1
  644. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +0 -1
  645. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +0 -1
  646. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +0 -1
  647. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +0 -1
  648. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +0 -1
  649. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +0 -1
  650. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +0 -1
  651. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +0 -1
  652. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +0 -1
  653. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +0 -1
  654. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +0 -1
  655. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +0 -1
  656. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +0 -1
  657. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +0 -1
  658. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +0 -1
  659. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +0 -1
  660. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +0 -1
  661. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +0 -1
  662. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +0 -1
  663. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +0 -1
  664. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +0 -1
  665. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +0 -1
  666. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +0 -1
  667. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +0 -1
  668. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +0 -1
  669. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +0 -1
  670. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +0 -1
  671. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +0 -1
  672. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +0 -1
  673. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +0 -1
  674. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +0 -1
  675. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +0 -1
  676. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +0 -1
  677. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +0 -1
  678. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +0 -1
  679. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +0 -1
  680. package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +0 -1
  681. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +0 -1
  682. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +0 -1
  683. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +0 -1
  684. package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +0 -1
  685. package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +0 -1
  686. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +0 -1
  687. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +0 -1
  688. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +0 -1
  689. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +0 -1
  690. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +0 -1
  691. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +0 -1
  692. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +0 -1
  693. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +0 -1
  694. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +0 -1
  695. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +0 -1
  696. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +0 -1
  697. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +0 -1
  698. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +0 -1
  699. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +0 -1
  700. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +0 -1
  701. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +0 -1
  702. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +0 -1
  703. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +0 -1
  704. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +0 -1
  705. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +0 -1
  706. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +0 -1
  707. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +0 -1
  708. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +0 -1
  709. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +0 -1
  710. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +0 -1
  711. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +0 -1
  712. package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +0 -1
  713. package/.next/static/chunks/app/layout-aa8e66164a4367af.js +0 -1
  714. package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +0 -1
  715. package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +0 -1
  716. package/.next/static/chunks/app/sessions/page-cfd645305e25fd33.js +0 -1
  717. package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +0 -1
  718. package/.next/static/chunks/app/worktrees/[id]/page-a8d7886703ffc7b4.js +0 -1
  719. package/.next/static/css/db8959555c3d9c96.css +0 -1
  720. /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → fqfSDqQMweROeHUzOt_m1}/_buildManifest.js +0 -0
  721. /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → fqfSDqQMweROeHUzOt_m1}/_ssgManifest.js +0 -0
@@ -45,6 +45,7 @@ const v58_agent_session_costs_1 = require("./v58-agent-session-costs");
45
45
  const v59_opencode_instance_settings_1 = require("./v59-opencode-instance-settings");
46
46
  const v60_session_relays_1 = require("./v60-session-relays");
47
47
  const v61_session_notes_1 = require("./v61-session-notes");
48
+ const v62_session_relays_bind_1 = require("./v62-session-relays-bind");
48
49
  /**
49
50
  * Complete ordered list of all migrations.
50
51
  * Used internally by the barrel file (db-migrations.ts); NOT exported from the barrel (DR2-004).
@@ -93,4 +94,5 @@ exports.migrations = [
93
94
  ...v59_opencode_instance_settings_1.v59_migrations,
94
95
  ...v60_session_relays_1.v60_migrations,
95
96
  ...v61_session_notes_1.v61_migrations,
97
+ ...v62_session_relays_bind_1.v62_migrations,
96
98
  ];
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ /**
3
+ * Pre-migration backup (Issue #3985).
4
+ *
5
+ * An older build refuses a database whose schema is newer than it knows
6
+ * (runner.ts, Issue #1353), so rolling back the executable alone never
7
+ * recovers from a bad migration — the database from before the migration is
8
+ * needed too. This module takes that copy, right before the first pending
9
+ * migration runs.
10
+ *
11
+ * The copy is made with `VACUUM INTO`, not by copying files: the connection is
12
+ * in WAL mode, so committed updates may still live in `-wal` only, and copying
13
+ * the main file (or the main file and `-wal` separately) gives no single point
14
+ * in time. `VACUUM INTO` reads inside one read transaction and writes a
15
+ * self-contained rollback-journal database. `db.backup()` is async and cannot
16
+ * run inside the synchronous startup path.
17
+ */
18
+ var __importDefault = (this && this.__importDefault) || function (mod) {
19
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.SKIP_MIGRATION_BACKUP_ENV = exports.MIGRATION_BACKUP_GENERATIONS = exports.MIGRATION_BACKUP_DIR_NAME = void 0;
23
+ exports.isMigrationBackupSkipped = isMigrationBackupSkipped;
24
+ exports.needsPreMigrationBackup = needsPreMigrationBackup;
25
+ exports.listMigrationBackups = listMigrationBackups;
26
+ exports.selectBackupsToPrune = selectBackupsToPrune;
27
+ exports.readLastCompleteVersion = readLastCompleteVersion;
28
+ exports.recordLastCompleteVersion = recordLastCompleteVersion;
29
+ exports.createPreMigrationBackup = createPreMigrationBackup;
30
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
31
+ const crypto_1 = __importDefault(require("crypto"));
32
+ const fs_1 = __importDefault(require("fs"));
33
+ const path_1 = __importDefault(require("path"));
34
+ /** Directory (next to the database file) that holds the copies. */
35
+ exports.MIGRATION_BACKUP_DIR_NAME = 'db-backups';
36
+ /** Completed copies kept per database file. */
37
+ exports.MIGRATION_BACKUP_GENERATIONS = 3;
38
+ /** Set to `1` to start without the copy (e.g. not enough free disk space). */
39
+ exports.SKIP_MIGRATION_BACKUP_ENV = 'CM_DB_SKIP_MIGRATION_BACKUP';
40
+ const TEMP_SUFFIX = '.partial';
41
+ /** `<db file name><suffix>` in the copy directory holds the last fully migrated version. */
42
+ const LAST_COMPLETE_VERSION_SUFFIX = '.last-complete-version';
43
+ /** True when the operator asked to start without the pre-migration copy. */
44
+ function isMigrationBackupSkipped(env = process.env) {
45
+ return (env[exports.SKIP_MIGRATION_BACKUP_ENV] ?? '').trim() === '1';
46
+ }
47
+ /**
48
+ * Whether there is anything worth copying.
49
+ *
50
+ * An in-memory database has no file to restore into. A brand-new database
51
+ * (version 0 and no table besides `schema_version`, which the runner has just
52
+ * created) has nothing to lose, and is what every test database looks like.
53
+ */
54
+ function needsPreMigrationBackup(db, currentVersion) {
55
+ // `typeof` covers adapters without a file name (scripts/spike's node:sqlite wrapper).
56
+ if (db.memory || typeof db.name !== 'string' || db.name === '' || db.name === ':memory:')
57
+ return false;
58
+ if (currentVersion > 0)
59
+ return true;
60
+ const row = db.prepare(`
61
+ SELECT COUNT(*) AS count FROM sqlite_master
62
+ WHERE type = 'table' AND name NOT LIKE 'sqlite_%' AND name != 'schema_version'
63
+ `).get();
64
+ return row.count > 0;
65
+ }
66
+ function utcStamp(date) {
67
+ // 2026-10-29T01:02:03.456Z -> 20261029T010203456Z (sortable, filename-safe)
68
+ return date.toISOString().replace(/[-:]/g, '').replace('.', '');
69
+ }
70
+ function escapeRegExp(value) {
71
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
72
+ }
73
+ /** Completed copies of `dbFileName` in `dir`, oldest first. */
74
+ function listMigrationBackups(dir, dbFileName) {
75
+ let entries;
76
+ try {
77
+ entries = fs_1.default.readdirSync(dir);
78
+ }
79
+ catch {
80
+ return [];
81
+ }
82
+ const pattern = new RegExp(`^${escapeRegExp(dbFileName)}\\.v\\d+-to-v\\d+\\.(\\d{8}T\\d{9}Z)\\.[0-9a-f]+\\.sqlite$`);
83
+ return entries
84
+ .map((name) => ({ name, stamp: pattern.exec(name)?.[1] }))
85
+ .filter((entry) => entry.stamp !== undefined)
86
+ .sort((a, b) => (a.stamp === b.stamp ? a.name.localeCompare(b.name) : a.stamp.localeCompare(b.stamp)))
87
+ .map((entry) => path_1.default.join(dir, entry.name));
88
+ }
89
+ function parseVersions(copyPath) {
90
+ const match = /\.v(\d+)-to-v(\d+)\.\d{8}T\d{9}Z\.[0-9a-f]+\.sqlite$/.exec(path_1.default.basename(copyPath));
91
+ return match ? { from: Number(match[1]), to: Number(match[2]) } : null;
92
+ }
93
+ /**
94
+ * Completed copies to delete, given all of them oldest first.
95
+ *
96
+ * Keeps the newest {@link MIGRATION_BACKUP_GENERATIONS}, except that the
97
+ * original restore point always survives: the newest copy whose source version
98
+ * is `lastCompleteVersion`, whatever its target. A migration that half-succeeds
99
+ * (v59 -> v60 applied, v61 fails) leaves the next attempt starting from v60,
100
+ * possibly from another build aiming at v62; retrying it three times must not
101
+ * push out the v59 copy, which is the only one the last working build can open.
102
+ * That copy then takes one of the slots, so the total stays at the limit.
103
+ *
104
+ * With no usable record (`null`: never recorded, or older than a restored
105
+ * database), the copy with the lowest source version (newest on a tie) is the
106
+ * restore point — an intermediate version left by a half-applied run is never
107
+ * taken for a completed one.
108
+ */
109
+ function selectBackupsToPrune(completed, lastCompleteVersion) {
110
+ let original;
111
+ let originalFrom = Infinity;
112
+ for (const copy of completed) {
113
+ const from = parseVersions(copy)?.from;
114
+ if (from === undefined)
115
+ continue;
116
+ if (lastCompleteVersion === null ? from <= originalFrom : from === lastCompleteVersion) {
117
+ original = copy;
118
+ originalFrom = from;
119
+ }
120
+ }
121
+ const newest = completed.slice(-exports.MIGRATION_BACKUP_GENERATIONS);
122
+ const keep = original === undefined || newest.includes(original)
123
+ ? newest
124
+ : [original, ...completed.slice(-(exports.MIGRATION_BACKUP_GENERATIONS - 1))];
125
+ return completed.filter((copy) => !keep.includes(copy));
126
+ }
127
+ function backupDirFor(dbName) {
128
+ const dbPath = path_1.default.resolve(dbName);
129
+ return { dir: path_1.default.join(path_1.default.dirname(dbPath), exports.MIGRATION_BACKUP_DIR_NAME), dbFileName: path_1.default.basename(dbPath) };
130
+ }
131
+ function lastCompleteVersionPath(dir, dbFileName) {
132
+ return path_1.default.join(dir, `${dbFileName}${LAST_COMPLETE_VERSION_SUFFIX}`);
133
+ }
134
+ /** The schema version the last fully successful migration run ended at, or null when unrecorded. */
135
+ function readLastCompleteVersion(dir, dbFileName) {
136
+ try {
137
+ const text = fs_1.default.readFileSync(lastCompleteVersionPath(dir, dbFileName), 'utf8').trim();
138
+ return /^\d+$/.test(text) ? Number(text) : null;
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ function writeLastCompleteVersion(dir, dbFileName, version) {
145
+ const target = lastCompleteVersionPath(dir, dbFileName);
146
+ const temp = `${target}.${crypto_1.default.randomBytes(4).toString('hex')}${TEMP_SUFFIX}`;
147
+ try {
148
+ fs_1.default.writeFileSync(temp, `${version}\n`, { mode: 0o600, flag: 'wx' });
149
+ fs_1.default.chmodSync(temp, 0o600);
150
+ fs_1.default.renameSync(temp, target);
151
+ }
152
+ catch (error) {
153
+ try {
154
+ fs_1.default.rmSync(temp, { force: true });
155
+ }
156
+ catch {
157
+ // best effort
158
+ }
159
+ throw error;
160
+ }
161
+ }
162
+ /**
163
+ * Record that every migration up to `version` completed (Issue #3985).
164
+ *
165
+ * Only once a copy directory exists: a database that never needed a copy has no
166
+ * restore point to protect. A failure is logged and never stops startup; the
167
+ * next copy then protects the copy with the lowest source version instead.
168
+ */
169
+ function recordLastCompleteVersion(db, version) {
170
+ if (db.memory || typeof db.name !== 'string' || db.name === '' || db.name === ':memory:')
171
+ return;
172
+ const { dir, dbFileName } = backupDirFor(db.name);
173
+ if (!fs_1.default.existsSync(dir))
174
+ return;
175
+ try {
176
+ writeLastCompleteVersion(dir, dbFileName, version);
177
+ }
178
+ catch (error) {
179
+ const reason = error instanceof Error ? error.message : String(error);
180
+ console.warn(`Could not record the last completed schema version in ${dir}: ${reason}`);
181
+ }
182
+ }
183
+ function verifyCopy(copyPath, expectedVersion) {
184
+ const copy = new better_sqlite3_1.default(copyPath, { readonly: true, fileMustExist: true });
185
+ try {
186
+ const integrity = copy.pragma('integrity_check', { simple: true });
187
+ if (integrity !== 'ok') {
188
+ throw new Error(`integrity_check returned ${String(integrity)}`);
189
+ }
190
+ let version = 0;
191
+ try {
192
+ const row = copy.prepare('SELECT MAX(version) AS version FROM schema_version').get();
193
+ version = row?.version ?? 0;
194
+ }
195
+ catch {
196
+ version = 0;
197
+ }
198
+ if (version !== expectedVersion) {
199
+ // Another process migrated between our version read and the copy (#1360).
200
+ throw new Error(`copy is at schema v${version}, expected v${expectedVersion}`);
201
+ }
202
+ }
203
+ finally {
204
+ copy.close();
205
+ }
206
+ }
207
+ /**
208
+ * Take and verify the pre-migration copy, then prune old generations.
209
+ *
210
+ * @throws Error when the copy cannot be made or verified. The caller must not
211
+ * start migrating then; the message names the directory, the reason and the
212
+ * `CM_DB_SKIP_MIGRATION_BACKUP=1` escape hatch.
213
+ */
214
+ function createPreMigrationBackup(db, fromVersion, toVersion, now = new Date()) {
215
+ const { dir, dbFileName } = backupDirFor(db.name);
216
+ const id = crypto_1.default.randomBytes(4).toString('hex');
217
+ const finalPath = path_1.default.join(dir, `${dbFileName}.v${fromVersion}-to-v${toVersion}.${utcStamp(now)}.${id}.sqlite`);
218
+ const tempPath = `${finalPath}${TEMP_SUFFIX}`;
219
+ try {
220
+ if (!fs_1.default.existsSync(dir)) {
221
+ fs_1.default.mkdirSync(dir, { recursive: true, mode: 0o700 });
222
+ fs_1.default.chmodSync(dir, 0o700);
223
+ }
224
+ // VACUUM INTO accepts an empty existing file; creating it first fixes the mode.
225
+ fs_1.default.closeSync(fs_1.default.openSync(tempPath, 'wx', 0o600));
226
+ db.prepare('VACUUM INTO ?').run(tempPath);
227
+ fs_1.default.chmodSync(tempPath, 0o600);
228
+ verifyCopy(tempPath, fromVersion);
229
+ fs_1.default.renameSync(tempPath, finalPath);
230
+ }
231
+ catch (error) {
232
+ try {
233
+ fs_1.default.rmSync(tempPath, { force: true });
234
+ }
235
+ catch {
236
+ // best effort: a leftover *.partial is never counted as a completed copy
237
+ }
238
+ const reason = error instanceof Error ? error.message : String(error);
239
+ throw new Error(`Could not back up the database before migrating it (v${fromVersion} -> v${toVersion}). ` +
240
+ `No migration was run. Backup directory: ${dir}. Reason: ${reason}. ` +
241
+ `To start without the backup (e.g. when disk space is short), set ${exports.SKIP_MIGRATION_BACKUP_ENV}=1.`);
242
+ }
243
+ // Prune only after the new copy is verified and in place.
244
+ const removed = [];
245
+ // Unrecorded (first copy, or a directory from an older build) stays unrecorded:
246
+ // the record is written only when every migration succeeds. A record newer
247
+ // than the database means an older copy was restored by hand; it is ignored
248
+ // (not deleted) until the next completed run overwrites it.
249
+ let lastCompleteVersion = readLastCompleteVersion(dir, dbFileName);
250
+ if (lastCompleteVersion !== null && lastCompleteVersion > fromVersion) {
251
+ console.warn(`Ignoring the recorded last completed schema version v${lastCompleteVersion}: ` +
252
+ `the database is at v${fromVersion} (restored from an older copy?)`);
253
+ lastCompleteVersion = null;
254
+ }
255
+ const completed = listMigrationBackups(dir, dbFileName);
256
+ for (const old of selectBackupsToPrune(completed, lastCompleteVersion)) {
257
+ try {
258
+ fs_1.default.rmSync(old, { force: true });
259
+ removed.push(old);
260
+ }
261
+ catch {
262
+ // a copy we could not delete is extra disk use, not a reason to stop startup
263
+ }
264
+ }
265
+ return { path: finalPath, removed };
266
+ }
@@ -13,11 +13,12 @@ exports.getMigrationHistory = getMigrationHistory;
13
13
  exports.validateSchema = validateSchema;
14
14
  exports.findRepositoryRoot = findRepositoryRoot;
15
15
  const path_1 = __importDefault(require("path"));
16
+ const pre_migration_backup_1 = require("./pre-migration-backup");
16
17
  /**
17
18
  * Current schema version
18
19
  * Increment this when adding new migrations
19
20
  */
20
- exports.CURRENT_SCHEMA_VERSION = 61;
21
+ exports.CURRENT_SCHEMA_VERSION = 62;
21
22
  /**
22
23
  * Get current schema version from database
23
24
  */
@@ -73,12 +74,34 @@ function runMigrations(db, migrations) {
73
74
  return;
74
75
  }
75
76
  console.log(`Found ${pendingMigrations.length} pending migration(s)`);
77
+ // Issue #3985: a restore point before the first migration. An older build
78
+ // refuses the migrated schema (#1353 above), so rolling back the executable
79
+ // needs this copy. Failing to take it stops startup before any migration.
80
+ const targetVersion = pendingMigrations[pendingMigrations.length - 1].version;
81
+ if ((0, pre_migration_backup_1.needsPreMigrationBackup)(db, currentVersion)) {
82
+ if ((0, pre_migration_backup_1.isMigrationBackupSkipped)()) {
83
+ console.warn(`${pre_migration_backup_1.SKIP_MIGRATION_BACKUP_ENV}=1: migrating without a pre-migration backup`);
84
+ }
85
+ else {
86
+ const backup = (0, pre_migration_backup_1.createPreMigrationBackup)(db, currentVersion, targetVersion);
87
+ console.log(`Pre-migration backup: ${backup.path}`);
88
+ }
89
+ }
76
90
  // Run each pending migration in a transaction
91
+ let isFirstMigration = true;
77
92
  for (const migration of pendingMigrations) {
78
93
  console.log(`Applying migration ${migration.version}: ${migration.name}...`);
79
94
  try {
80
95
  // Run migration in transaction
81
- db.transaction(() => {
96
+ const apply = db.transaction(() => {
97
+ // Issue #3985: VACUUM INTO cannot run inside a transaction, so the copy
98
+ // and the first migration cannot share one lock. Take the write lock
99
+ // (IMMEDIATE) for the first migration and confirm nobody migrated
100
+ // since the version read the copy was checked against (#1360).
101
+ if (isFirstMigration && getCurrentVersion(db) !== currentVersion) {
102
+ throw new Error(`schema version changed from v${currentVersion} to v${getCurrentVersion(db)} ` +
103
+ `while starting migrations (another process migrated this database)`);
104
+ }
82
105
  // Execute migration
83
106
  migration.up(db);
84
107
  // Record migration in schema_version table
@@ -86,7 +109,14 @@ function runMigrations(db, migrations) {
86
109
  INSERT INTO schema_version (version, name, applied_at)
87
110
  VALUES (?, ?, ?)
88
111
  `).run(migration.version, migration.name, Date.now());
89
- })();
112
+ });
113
+ if (isFirstMigration) {
114
+ apply.immediate();
115
+ }
116
+ else {
117
+ apply();
118
+ }
119
+ isFirstMigration = false;
90
120
  console.log(`Migration ${migration.version} applied successfully`);
91
121
  }
92
122
  catch (error) {
@@ -95,7 +125,10 @@ function runMigrations(db, migrations) {
95
125
  throw new Error(`Migration ${migration.version} (${migration.name}) failed: ${errorMessage}`);
96
126
  }
97
127
  }
98
- console.log(`All migrations completed. Current version: ${getCurrentVersion(db)}`);
128
+ const completedVersion = getCurrentVersion(db);
129
+ // Issue #3985: the next upgrade's original restore point is a copy taken from here.
130
+ (0, pre_migration_backup_1.recordLastCompleteVersion)(db, completedVersion);
131
+ console.log(`All migrations completed. Current version: ${completedVersion}`);
99
132
  }
100
133
  /**
101
134
  * Rollback migrations to a specific version
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * Migration v62: tie a relay to the send that asked for it (Issue #3957).
4
+ *
5
+ * Until now a relay row knew when it was OPENED (`created_at`, before the CLI
6
+ * sent anything) and nothing about the send itself. The delivery therefore took
7
+ * the newest reply written after `created_at` — which, when the send queued for
8
+ * the input lock or failed, was somebody else's reply (S3 / S5 of the Issue).
9
+ *
10
+ * The columns below record the send: which attempt reserved the relay, when
11
+ * its body started going in, whether a turn was already open then, and how the
12
+ * send ended. `bind_mode` says whether a row takes part at all — every row that
13
+ * existed before this migration, and every row an older CLI opens, is `legacy`
14
+ * and is delivered exactly as before.
15
+ *
16
+ * ## Columns
17
+ *
18
+ * - `bind_mode` — `legacy` | `bound`. NOT NULL with a default, so existing rows
19
+ * read as legacy without a backfill.
20
+ * - `send_state` — `awaiting` → `input_started` → `sent`, or `failed` /
21
+ * `unknown`. NULL for legacy (never "sent" by pretence).
22
+ * - `bind_attempt_id` / `bind_owner` — the reservation and the server boot that
23
+ * holds it, so a reservation orphaned by a restart can be told apart.
24
+ * - `input_boundary_at` / `boundary_kind` — the delivery's lower bound (ms) and
25
+ * where it was taken: `input_start` (right before the first key) or
26
+ * `dispatch` (right before an HTTP send that reports no input start).
27
+ * - `turn_open_at_send` — 1 / 0 / NULL (not known).
28
+ * - `obs_state` / `obs_source` — whether the observation can still be trusted
29
+ * (`valid`, `invalid`, `turn_unknown`) and where it was made (boot id and
30
+ * session generation).
31
+ * - `input_message_id` — the send's own user row, so it is not counted as
32
+ * somebody else's input.
33
+ * - `hold_reason` — why the relay is held, published as is.
34
+ * - `held_candidates` — JSON list of completions seen before the send settled.
35
+ * - `overlap` — `none` | `later` | `earlier` | `both` | `unknown`.
36
+ * - `pending_reply` — JSON: a reply finished while a prompt notice was being
37
+ * delivered (the second slot).
38
+ * - `payload_id` — the id of the payload now in `pending_*`, so a stale
39
+ * delivery cannot clear a newer one.
40
+ *
41
+ * The rollback drops exactly these columns. None is indexed, part of a foreign
42
+ * key or named in another column's CHECK, so `DROP COLUMN` (SQLite 3.35+) keeps
43
+ * the rows, the pending payloads, the indexes and the foreign keys as they were.
44
+ */
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.v62_migrations = exports.V62_SESSION_RELAY_COLUMNS = void 0;
47
+ /** The v62 columns, in the order the rollback drops them. */
48
+ exports.V62_SESSION_RELAY_COLUMNS = [
49
+ 'bind_mode',
50
+ 'send_state',
51
+ 'bind_attempt_id',
52
+ 'bind_owner',
53
+ 'input_boundary_at',
54
+ 'boundary_kind',
55
+ 'turn_open_at_send',
56
+ 'obs_state',
57
+ 'obs_source',
58
+ 'input_message_id',
59
+ 'hold_reason',
60
+ 'held_candidates',
61
+ 'overlap',
62
+ 'pending_reply',
63
+ 'payload_id',
64
+ ];
65
+ exports.v62_migrations = [
66
+ {
67
+ version: 62,
68
+ name: 'session-relays-bind',
69
+ up: (db) => {
70
+ const statements = [
71
+ `ALTER TABLE session_relays ADD COLUMN bind_mode TEXT NOT NULL DEFAULT 'legacy'
72
+ CHECK (bind_mode IN ('legacy','bound'))`,
73
+ `ALTER TABLE session_relays ADD COLUMN send_state TEXT
74
+ CHECK (send_state IN ('awaiting','input_started','sent','failed','unknown'))`,
75
+ 'ALTER TABLE session_relays ADD COLUMN bind_attempt_id TEXT',
76
+ 'ALTER TABLE session_relays ADD COLUMN bind_owner TEXT',
77
+ 'ALTER TABLE session_relays ADD COLUMN input_boundary_at INTEGER',
78
+ `ALTER TABLE session_relays ADD COLUMN boundary_kind TEXT
79
+ CHECK (boundary_kind IN ('input_start','dispatch'))`,
80
+ `ALTER TABLE session_relays ADD COLUMN turn_open_at_send INTEGER
81
+ CHECK (turn_open_at_send IN (0,1))`,
82
+ `ALTER TABLE session_relays ADD COLUMN obs_state TEXT
83
+ CHECK (obs_state IN ('valid','invalid','turn_unknown'))`,
84
+ 'ALTER TABLE session_relays ADD COLUMN obs_source TEXT',
85
+ 'ALTER TABLE session_relays ADD COLUMN input_message_id TEXT',
86
+ 'ALTER TABLE session_relays ADD COLUMN hold_reason TEXT',
87
+ 'ALTER TABLE session_relays ADD COLUMN held_candidates TEXT',
88
+ `ALTER TABLE session_relays ADD COLUMN overlap TEXT
89
+ CHECK (overlap IN ('none','later','earlier','both','unknown'))`,
90
+ 'ALTER TABLE session_relays ADD COLUMN pending_reply TEXT',
91
+ 'ALTER TABLE session_relays ADD COLUMN payload_id TEXT',
92
+ ];
93
+ for (const statement of statements)
94
+ db.exec(statement);
95
+ },
96
+ down: (db) => {
97
+ for (const column of [...exports.V62_SESSION_RELAY_COLUMNS].reverse()) {
98
+ db.exec(`ALTER TABLE session_relays DROP COLUMN ${column}`);
99
+ }
100
+ },
101
+ },
102
+ ];