commandmate 0.49.2 → 0.50.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 (927) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +476 -423
  3. package/.next/app-path-routes-manifest.json +28 -21
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/react-loadable-manifest.json +1 -1
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +40 -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_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/capabilities/route.js +1 -1
  19. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/daily-summary/route.js +1 -1
  21. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  22. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  24. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  25. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/hooks/agent-event/route.js +1 -103
  32. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  33. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  35. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  36. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  38. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  39. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/push/escalation/route.js +1 -1
  43. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  44. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/push/subscriptions/route.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 -1
  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 +4 -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/[relayId]/resolve/route.js +1 -0
  54. package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
  55. package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
  56. package/.next/server/app/api/relays/[relayId]/route.js +1 -1
  57. package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
  58. package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/relays/route.js +4 -1
  60. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  61. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/remote/pair/route.js +2 -2
  63. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/repositories/[id]/role-defaults/route.js +1 -0
  65. package/.next/server/app/api/repositories/[id]/role-defaults/route.js.nft.json +1 -0
  66. package/.next/server/app/api/repositories/[id]/role-defaults/route_client-reference-manifest.js +1 -0
  67. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  69. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  70. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/clone/route.js +1 -1
  72. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  73. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/restore/route.js +1 -1
  76. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/route.js +1 -1
  79. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/scan/route.js +1 -1
  82. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  83. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/repositories/sync/route.js +1 -1
  85. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  86. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  88. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/roles/[id]/route.js +1 -0
  90. package/.next/server/app/api/roles/[id]/route.js.nft.json +1 -0
  91. package/.next/server/app/api/roles/[id]/route_client-reference-manifest.js +1 -0
  92. package/.next/server/app/api/roles/route.js +1 -0
  93. package/.next/server/app/api/roles/route.js.nft.json +1 -0
  94. package/.next/server/app/api/roles/route_client-reference-manifest.js +1 -0
  95. package/.next/server/app/api/settings/agent-role-defaults/route.js +1 -0
  96. package/.next/server/app/api/settings/agent-role-defaults/route.js.nft.json +1 -0
  97. package/.next/server/app/api/settings/agent-role-defaults/route_client-reference-manifest.js +1 -0
  98. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  99. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  100. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/slash-commands/route.js +1 -1
  109. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  112. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  116. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/verification/runs/route.js +1 -1
  118. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  127. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
  133. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  134. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  137. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  140. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  146. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  147. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/instances/roles/route.js +1 -0
  201. package/.next/server/app/api/worktrees/[id]/instances/roles/route.js.nft.json +1 -0
  202. package/.next/server/app/api/worktrees/[id]/instances/roles/route_client-reference-manifest.js +1 -0
  203. package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js +1 -0
  204. package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js.nft.json +1 -0
  205. package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route_client-reference-manifest.js +1 -0
  206. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -2
  210. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  225. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  228. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  244. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  247. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  248. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  250. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -144
  254. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -104
  257. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  258. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  261. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  264. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  267. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  270. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  273. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  276. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  284. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
  286. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  287. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -103
  289. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  290. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  295. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  296. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  304. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  305. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  308. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  311. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  314. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  316. package/.next/server/app/api/worktrees/route.js +1 -1
  317. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  318. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  319. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  320. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/more/page.js +1 -1
  322. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  323. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  324. package/.next/server/app/page_client-reference-manifest.js +1 -1
  325. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  326. package/.next/server/app/repositories/page.js +2 -2
  327. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  328. package/.next/server/app/review/page.js +1 -1
  329. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  330. package/.next/server/app/sessions/page.js +1 -1
  331. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  332. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  333. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  334. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  335. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  336. package/.next/server/app/worktrees/[id]/page.js +10 -10
  337. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  338. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  339. package/.next/server/app-paths-manifest.json +28 -21
  340. package/.next/server/chunks/1184.js +5 -0
  341. package/.next/server/chunks/1501.js +5 -5
  342. package/.next/server/chunks/1656.js +2 -2
  343. package/.next/server/chunks/1957.js +2 -2
  344. package/.next/server/chunks/1990.js +103 -0
  345. package/.next/server/chunks/2119.js +1 -1
  346. package/.next/server/chunks/2404.js +1 -1
  347. package/.next/server/chunks/2445.js +1 -1
  348. package/.next/server/chunks/2819.js +1 -0
  349. package/.next/server/chunks/2897.js +1 -1
  350. package/.next/server/chunks/3042.js +2 -0
  351. package/.next/server/chunks/3241.js +1 -1
  352. package/.next/server/chunks/3294.js +3 -0
  353. package/.next/server/chunks/3417.js +1 -1
  354. package/.next/server/chunks/3480.js +1 -1
  355. package/.next/server/chunks/3505.js +2 -6
  356. package/.next/server/chunks/3543.js +1 -1
  357. package/.next/server/chunks/3801.js +7 -7
  358. package/.next/server/chunks/3945.js +1 -1
  359. package/.next/server/chunks/4207.js +1 -1
  360. package/.next/server/chunks/454.js +1 -0
  361. package/.next/server/chunks/4645.js +1 -0
  362. package/.next/server/chunks/4911.js +1 -1
  363. package/.next/server/chunks/5209.js +2 -2
  364. package/.next/server/chunks/5350.js +216 -0
  365. package/.next/server/chunks/5354.js +1 -1
  366. package/.next/server/chunks/5571.js +1 -1
  367. package/.next/server/chunks/6009.js +12 -0
  368. package/.next/server/chunks/6130.js +1 -1
  369. package/.next/server/chunks/6285.js +1 -1
  370. package/.next/server/chunks/6401.js +1 -1
  371. package/.next/server/chunks/6486.js +2 -2
  372. package/.next/server/chunks/6569.js +1 -0
  373. package/.next/server/chunks/6781.js +1 -1
  374. package/.next/server/chunks/6793.js +4 -4
  375. package/.next/server/chunks/696.js +3 -0
  376. package/.next/server/chunks/7023.js +3 -3
  377. package/.next/server/chunks/7083.js +1 -0
  378. package/.next/server/chunks/741.js +1 -0
  379. package/.next/server/chunks/7662.js +1 -0
  380. package/.next/server/chunks/7905.js +1 -1
  381. package/.next/server/chunks/8143.js +33 -0
  382. package/.next/server/chunks/8581.js +6 -6
  383. package/.next/server/chunks/8728.js +2 -2
  384. package/.next/server/chunks/8782.js +1 -1
  385. package/.next/server/chunks/8807.js +181 -93
  386. package/.next/server/chunks/8918.js +3 -105
  387. package/.next/server/chunks/8955.js +1 -0
  388. package/.next/server/chunks/9169.js +1 -0
  389. package/.next/server/chunks/923.js +1 -0
  390. package/.next/server/chunks/9390.js +2 -2
  391. package/.next/server/chunks/9627.js +9 -9
  392. package/.next/server/chunks/973.js +1 -0
  393. package/.next/server/chunks/9731.js +3 -3
  394. package/.next/server/middleware-build-manifest.js +1 -1
  395. package/.next/server/middleware-manifest.json +5 -5
  396. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  397. package/.next/server/pages/500.html +1 -1
  398. package/.next/server/server-reference-manifest.json +1 -1
  399. package/.next/static/chunks/2314-2c9d587a27e8f731.js +1 -0
  400. package/.next/static/chunks/2407-ee881c99e218975b.js +1 -0
  401. package/.next/static/chunks/3931-24d7e245a93feb25.js +1 -0
  402. package/.next/static/chunks/4548-9afa02fd18afa6c7.js +1 -0
  403. package/.next/static/chunks/{5794-7975b8e51e731b19.js → 5794-38b3b504b3d97e04.js} +1 -1
  404. package/.next/static/chunks/{6966-d8dc6032410ffaba.js → 6966-dbfa4a43397f8c6d.js} +1 -1
  405. package/.next/static/chunks/7090-28e83f5a0efdb3b4.js +1 -0
  406. package/.next/static/chunks/7229.016d007c467a3600.js +1 -0
  407. package/.next/static/chunks/{8407-35bbfc84793d7004.js → 8407-dd6a8062fc449899.js} +1 -1
  408. package/.next/static/chunks/app/api/agents/update/route-476063c3571b81dd.js +1 -0
  409. package/.next/static/chunks/app/api/agents/versions/route-476063c3571b81dd.js +1 -0
  410. package/.next/static/chunks/app/api/app/release-notes/route-476063c3571b81dd.js +1 -0
  411. package/.next/static/chunks/app/api/app/update/route-476063c3571b81dd.js +1 -0
  412. package/.next/static/chunks/app/api/app/update-check/route-476063c3571b81dd.js +1 -0
  413. package/.next/static/chunks/app/api/auth/login/route-476063c3571b81dd.js +1 -0
  414. package/.next/static/chunks/app/api/auth/logout/route-476063c3571b81dd.js +1 -0
  415. package/.next/static/chunks/app/api/auth/status/route-476063c3571b81dd.js +1 -0
  416. package/.next/static/chunks/app/api/capabilities/route-476063c3571b81dd.js +1 -0
  417. package/.next/static/chunks/app/api/daily-summary/route-476063c3571b81dd.js +1 -0
  418. package/.next/static/chunks/app/api/daily-summary/status/route-476063c3571b81dd.js +1 -0
  419. package/.next/static/chunks/app/api/external-apps/[id]/health/route-476063c3571b81dd.js +1 -0
  420. package/.next/static/chunks/app/api/external-apps/[id]/route-476063c3571b81dd.js +1 -0
  421. package/.next/static/chunks/app/api/external-apps/route-476063c3571b81dd.js +1 -0
  422. package/.next/static/chunks/app/api/fs/browse/route-476063c3571b81dd.js +1 -0
  423. package/.next/static/chunks/app/api/fs/recent-paths/route-476063c3571b81dd.js +1 -0
  424. package/.next/static/chunks/app/api/hooks/agent-event/route-476063c3571b81dd.js +1 -0
  425. package/.next/static/chunks/app/api/hooks/claude-done/route-476063c3571b81dd.js +1 -0
  426. package/.next/static/chunks/app/api/hooks/permission-request/route-476063c3571b81dd.js +1 -0
  427. package/.next/static/chunks/app/api/metrics/vibe/route-476063c3571b81dd.js +1 -0
  428. package/.next/static/chunks/app/api/ollama/models/route-476063c3571b81dd.js +1 -0
  429. package/.next/static/chunks/app/api/push/escalation/route-476063c3571b81dd.js +1 -0
  430. package/.next/static/chunks/app/api/push/subscriptions/route-476063c3571b81dd.js +1 -0
  431. package/.next/static/chunks/app/api/push/vapid/route-476063c3571b81dd.js +1 -0
  432. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-476063c3571b81dd.js +1 -0
  433. package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-476063c3571b81dd.js +1 -0
  434. package/.next/static/chunks/app/api/relays/[relayId]/route-476063c3571b81dd.js +1 -0
  435. package/.next/static/chunks/app/api/relays/route-476063c3571b81dd.js +1 -0
  436. package/.next/static/chunks/app/api/remote/pair/route-476063c3571b81dd.js +1 -0
  437. package/.next/static/chunks/app/api/repositories/[id]/role-defaults/route-476063c3571b81dd.js +1 -0
  438. package/.next/static/chunks/app/api/repositories/[id]/route-476063c3571b81dd.js +1 -0
  439. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-476063c3571b81dd.js +1 -0
  440. package/.next/static/chunks/app/api/repositories/clone/route-476063c3571b81dd.js +1 -0
  441. package/.next/static/chunks/app/api/repositories/excluded/route-476063c3571b81dd.js +1 -0
  442. package/.next/static/chunks/app/api/repositories/restore/route-476063c3571b81dd.js +1 -0
  443. package/.next/static/chunks/app/api/repositories/route-476063c3571b81dd.js +1 -0
  444. package/.next/static/chunks/app/api/repositories/scan/route-476063c3571b81dd.js +1 -0
  445. package/.next/static/chunks/app/api/repositories/sync/route-476063c3571b81dd.js +1 -0
  446. package/.next/static/chunks/app/api/repositories/validate-path/route-476063c3571b81dd.js +1 -0
  447. package/.next/static/chunks/app/api/roles/[id]/route-476063c3571b81dd.js +1 -0
  448. package/.next/static/chunks/app/api/roles/route-476063c3571b81dd.js +1 -0
  449. package/.next/static/chunks/app/api/settings/agent-role-defaults/route-476063c3571b81dd.js +1 -0
  450. package/.next/static/chunks/app/api/settings/default-agents/route-476063c3571b81dd.js +1 -0
  451. package/.next/static/chunks/app/api/settings/default-surface-mode/route-476063c3571b81dd.js +1 -0
  452. package/.next/static/chunks/app/api/sidebar/group-order/route-476063c3571b81dd.js +1 -0
  453. package/.next/static/chunks/app/api/skills/[id]/route-476063c3571b81dd.js +1 -0
  454. package/.next/static/chunks/app/api/skills/installations/route-476063c3571b81dd.js +1 -0
  455. package/.next/static/chunks/app/api/skills/operations/route-476063c3571b81dd.js +1 -0
  456. package/.next/static/chunks/app/api/skills/reindex/route-476063c3571b81dd.js +1 -0
  457. package/.next/static/chunks/app/api/skills/route-476063c3571b81dd.js +1 -0
  458. package/.next/static/chunks/app/api/slash-commands/route-476063c3571b81dd.js +1 -0
  459. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-476063c3571b81dd.js +1 -0
  460. package/.next/static/chunks/app/api/tasks/[taskId]/route-476063c3571b81dd.js +1 -0
  461. package/.next/static/chunks/app/api/templates/[id]/route-476063c3571b81dd.js +1 -0
  462. package/.next/static/chunks/app/api/templates/route-476063c3571b81dd.js +1 -0
  463. package/.next/static/chunks/app/api/verification/runs/[runId]/route-476063c3571b81dd.js +1 -0
  464. package/.next/static/chunks/app/api/verification/runs/route-476063c3571b81dd.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-476063c3571b81dd.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-476063c3571b81dd.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-476063c3571b81dd.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-476063c3571b81dd.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-476063c3571b81dd.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-476063c3571b81dd.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-476063c3571b81dd.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-476063c3571b81dd.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/env/route-476063c3571b81dd.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-476063c3571b81dd.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-476063c3571b81dd.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-476063c3571b81dd.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-476063c3571b81dd.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-476063c3571b81dd.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-476063c3571b81dd.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-476063c3571b81dd.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-476063c3571b81dd.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-476063c3571b81dd.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-476063c3571b81dd.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-476063c3571b81dd.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-476063c3571b81dd.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-476063c3571b81dd.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-476063c3571b81dd.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-476063c3571b81dd.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-476063c3571b81dd.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-476063c3571b81dd.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-476063c3571b81dd.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-476063c3571b81dd.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-476063c3571b81dd.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-476063c3571b81dd.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-476063c3571b81dd.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-476063c3571b81dd.js +1 -0
  497. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-476063c3571b81dd.js +1 -0
  498. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-476063c3571b81dd.js +1 -0
  499. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-476063c3571b81dd.js +1 -0
  500. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-476063c3571b81dd.js +1 -0
  501. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-476063c3571b81dd.js +1 -0
  502. package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/route-476063c3571b81dd.js +1 -0
  503. package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/settle/route-476063c3571b81dd.js +1 -0
  504. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-476063c3571b81dd.js +1 -0
  505. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-476063c3571b81dd.js +1 -0
  506. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-476063c3571b81dd.js +1 -0
  507. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-476063c3571b81dd.js +1 -0
  508. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-476063c3571b81dd.js +1 -0
  509. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-476063c3571b81dd.js +1 -0
  510. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-476063c3571b81dd.js +1 -0
  511. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-476063c3571b81dd.js +1 -0
  512. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-476063c3571b81dd.js +1 -0
  513. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-476063c3571b81dd.js +1 -0
  514. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-476063c3571b81dd.js +1 -0
  515. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-476063c3571b81dd.js +1 -0
  516. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-476063c3571b81dd.js +1 -0
  517. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-476063c3571b81dd.js +1 -0
  518. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-476063c3571b81dd.js +1 -0
  519. package/.next/static/chunks/app/api/worktrees/[id]/route-476063c3571b81dd.js +1 -0
  520. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-476063c3571b81dd.js +1 -0
  521. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-476063c3571b81dd.js +1 -0
  522. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-476063c3571b81dd.js +1 -0
  523. package/.next/static/chunks/app/api/worktrees/[id]/search/route-476063c3571b81dd.js +1 -0
  524. package/.next/static/chunks/app/api/worktrees/[id]/send/route-476063c3571b81dd.js +1 -0
  525. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-476063c3571b81dd.js +1 -0
  526. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-476063c3571b81dd.js +1 -0
  527. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-476063c3571b81dd.js +1 -0
  528. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-476063c3571b81dd.js +1 -0
  529. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-476063c3571b81dd.js +1 -0
  530. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-476063c3571b81dd.js +1 -0
  531. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-476063c3571b81dd.js +1 -0
  532. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-476063c3571b81dd.js +1 -0
  533. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-476063c3571b81dd.js +1 -0
  534. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-476063c3571b81dd.js +1 -0
  535. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-476063c3571b81dd.js +1 -0
  536. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-476063c3571b81dd.js +1 -0
  537. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-476063c3571b81dd.js +1 -0
  538. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-476063c3571b81dd.js +1 -0
  539. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-476063c3571b81dd.js +1 -0
  540. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-476063c3571b81dd.js +1 -0
  541. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-476063c3571b81dd.js +1 -0
  542. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-476063c3571b81dd.js +1 -0
  543. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-476063c3571b81dd.js +1 -0
  544. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-476063c3571b81dd.js +1 -0
  545. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-476063c3571b81dd.js +1 -0
  546. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-476063c3571b81dd.js +1 -0
  547. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-476063c3571b81dd.js +1 -0
  548. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-476063c3571b81dd.js +1 -0
  549. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-476063c3571b81dd.js +1 -0
  550. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-476063c3571b81dd.js +1 -0
  551. package/.next/static/chunks/app/api/worktrees/route-476063c3571b81dd.js +1 -0
  552. package/.next/static/chunks/app/layout-7bf800fcc5e025b1.js +1 -0
  553. package/.next/static/chunks/app/manifest.webmanifest/route-476063c3571b81dd.js +1 -0
  554. package/.next/static/chunks/app/more/{page-ff5af5ca48774c89.js → page-e8f5780f6e4fb657.js} +1 -1
  555. package/.next/static/chunks/app/{page-b4863bfe0452e09d.js → page-869f353a4ac4e15b.js} +1 -1
  556. package/.next/static/chunks/app/proxy/[...path]/route-476063c3571b81dd.js +1 -0
  557. package/.next/static/chunks/app/repositories/page-bedb505687010f18.js +1 -0
  558. package/.next/static/chunks/app/review/page-87c4a9b0de50fa80.js +1 -0
  559. package/.next/static/chunks/app/sessions/{page-c6eb7c02db2f4c80.js → page-82ca46793789fce4.js} +1 -1
  560. package/.next/static/chunks/app/worktrees/[id]/layout-476063c3571b81dd.js +1 -0
  561. package/.next/static/chunks/app/worktrees/[id]/page-570eb79fbbd1a934.js +1 -0
  562. package/.next/static/chunks/{webpack-838df0273b03af19.js → webpack-16b1a3143fa42ca0.js} +1 -1
  563. package/.next/static/css/d4f2c9522cf1b449.css +1 -0
  564. package/.next/static/z4d8-5MaLkoD-4EhueZwk/_buildManifest.js +1 -0
  565. package/.next/trace +14 -13
  566. package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
  567. package/.next/types/app/api/repositories/[id]/role-defaults/route.ts +347 -0
  568. package/.next/types/app/api/roles/[id]/route.ts +347 -0
  569. package/.next/types/app/api/roles/route.ts +347 -0
  570. package/.next/types/app/api/settings/agent-role-defaults/route.ts +347 -0
  571. package/.next/types/app/api/worktrees/[id]/instances/roles/route.ts +347 -0
  572. package/.next/types/app/api/worktrees/[id]/instances/roles/settle/route.ts +347 -0
  573. package/.next/types/routes.d.ts +8 -1
  574. package/.next/types/validator.ts +63 -0
  575. package/dist/cli/commands/instances.d.ts +1 -0
  576. package/dist/cli/commands/instances.d.ts.map +1 -1
  577. package/dist/cli/commands/instances.js +290 -33
  578. package/dist/cli/commands/message-dispatch.d.ts +25 -3
  579. package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
  580. package/dist/cli/commands/message-dispatch.js +26 -6
  581. package/dist/cli/commands/prompt.d.ts.map +1 -1
  582. package/dist/cli/commands/prompt.js +2 -1
  583. package/dist/cli/commands/relays.d.ts +7 -0
  584. package/dist/cli/commands/relays.d.ts.map +1 -1
  585. package/dist/cli/commands/relays.js +179 -6
  586. package/dist/cli/commands/report.d.ts +7 -2
  587. package/dist/cli/commands/report.d.ts.map +1 -1
  588. package/dist/cli/commands/report.js +19 -6
  589. package/dist/cli/commands/respond-strict.d.ts.map +1 -1
  590. package/dist/cli/commands/respond-strict.js +9 -2
  591. package/dist/cli/commands/roles.d.ts +11 -0
  592. package/dist/cli/commands/roles.d.ts.map +1 -0
  593. package/dist/cli/commands/roles.js +392 -0
  594. package/dist/cli/commands/send.d.ts.map +1 -1
  595. package/dist/cli/commands/send.js +526 -38
  596. package/dist/cli/commands/task.d.ts +22 -0
  597. package/dist/cli/commands/task.d.ts.map +1 -1
  598. package/dist/cli/commands/task.js +26 -18
  599. package/dist/cli/docs/agent-operations.d.ts +1 -1
  600. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  601. package/dist/cli/docs/agent-operations.js +91 -3
  602. package/dist/cli/index.d.ts +4 -0
  603. package/dist/cli/index.d.ts.map +1 -1
  604. package/dist/cli/index.js +6 -0
  605. package/dist/cli/types/api-responses.d.ts +106 -0
  606. package/dist/cli/types/api-responses.d.ts.map +1 -1
  607. package/dist/cli/types/index.d.ts +38 -0
  608. package/dist/cli/types/index.d.ts.map +1 -1
  609. package/dist/cli/types/index.js +15 -1
  610. package/dist/cli/utils/agent-instances.d.ts +29 -1
  611. package/dist/cli/utils/agent-instances.d.ts.map +1 -1
  612. package/dist/cli/utils/agent-instances.js +67 -7
  613. package/dist/cli/utils/agent-roles.d.ts +75 -0
  614. package/dist/cli/utils/agent-roles.d.ts.map +1 -0
  615. package/dist/cli/utils/agent-roles.js +238 -0
  616. package/dist/cli/utils/api-client-deadline.d.ts +28 -0
  617. package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
  618. package/dist/cli/utils/api-client-deadline.js +46 -0
  619. package/dist/cli/utils/api-client-errors.d.ts +140 -0
  620. package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
  621. package/dist/cli/utils/api-client-errors.js +222 -0
  622. package/dist/cli/utils/api-client.d.ts +9 -131
  623. package/dist/cli/utils/api-client.d.ts.map +1 -1
  624. package/dist/cli/utils/api-client.js +43 -258
  625. package/dist/cli/utils/role-failure.d.ts +31 -0
  626. package/dist/cli/utils/role-failure.d.ts.map +1 -0
  627. package/dist/cli/utils/role-failure.js +90 -0
  628. package/dist/cli/utils/role-input.d.ts +16 -0
  629. package/dist/cli/utils/role-input.d.ts.map +1 -0
  630. package/dist/cli/utils/role-input.js +78 -0
  631. package/dist/cli/utils/security-logger.d.ts +17 -0
  632. package/dist/cli/utils/security-logger.d.ts.map +1 -1
  633. package/dist/cli/utils/security-logger.js +44 -5
  634. package/dist/lib/cli-tools/types.d.ts +6 -0
  635. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  636. package/dist/lib/detection/tools/verified-against.d.ts +16 -0
  637. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  638. package/dist/lib/detection/tools/verified-against.js +16 -0
  639. package/dist/lib/session/send-attempt-types.d.ts +4 -0
  640. package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
  641. package/dist/lib/verification/verify-config.d.ts +22 -0
  642. package/dist/lib/verification/verify-config.d.ts.map +1 -1
  643. package/dist/lib/verification/verify-config.js +32 -2
  644. package/dist/server/locales/en/worktree.json +30 -4
  645. package/dist/server/locales/ja/worktree.json +30 -4
  646. package/dist/server/src/config/safe-directory.js +30 -0
  647. package/dist/server/src/lib/agent-roles/adapters.js +174 -0
  648. package/dist/server/src/lib/agent-roles/artifacts.js +638 -0
  649. package/dist/server/src/lib/agent-roles/composition.js +222 -0
  650. package/dist/server/src/lib/agent-roles/fingerprint.js +21 -0
  651. package/dist/server/src/lib/agent-roles/jsonc.js +85 -0
  652. package/dist/server/src/lib/agent-roles/launch-errors.js +58 -0
  653. package/dist/server/src/lib/agent-roles/pane-env.js +63 -0
  654. package/dist/server/src/lib/agent-roles/resolve.js +375 -0
  655. package/dist/server/src/lib/agent-roles/toml-basic.js +140 -0
  656. package/dist/server/src/lib/agent-roles/unicode.js +16 -0
  657. package/dist/server/src/lib/agent-roles/validation.js +61 -0
  658. package/dist/server/src/lib/cli-tools/antigravity.js +39 -6
  659. package/dist/server/src/lib/cli-tools/base.js +63 -5
  660. package/dist/server/src/lib/cli-tools/claude-auto-default-nudge.js +141 -0
  661. package/dist/server/src/lib/cli-tools/claude.js +15 -3
  662. package/dist/server/src/lib/cli-tools/codex.js +134 -21
  663. package/dist/server/src/lib/cli-tools/command-code.js +28 -13
  664. package/dist/server/src/lib/cli-tools/copilot.js +189 -31
  665. package/dist/server/src/lib/cli-tools/gemini.js +37 -3
  666. package/dist/server/src/lib/cli-tools/launch-answer-skips.js +76 -0
  667. package/dist/server/src/lib/cli-tools/opencode-v2.js +10 -0
  668. package/dist/server/src/lib/cli-tools/opencode.js +214 -12
  669. package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
  670. package/dist/server/src/lib/cli-tools/submit-composer-read.js +65 -12
  671. package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
  672. package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
  673. package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
  674. package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
  675. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +94 -295
  676. package/dist/server/src/lib/cli-tools/vibe-local.js +111 -0
  677. package/dist/server/src/lib/db/agent-instances-db.js +53 -0
  678. package/dist/server/src/lib/db/agent-roles-db.js +409 -0
  679. package/dist/server/src/lib/db/agent-session-cost-sampler.js +3 -2
  680. package/dist/server/src/lib/db/chat-db.js +14 -1
  681. package/dist/server/src/lib/db/db-instance.js +84 -2
  682. package/dist/server/src/lib/db/migrations/index.js +6 -0
  683. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  684. package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -0
  685. package/dist/server/src/lib/db/migrations/v64-agent-roles.js +123 -0
  686. package/dist/server/src/lib/db/migrations/v65-agent-instance-creation-keys.js +42 -0
  687. package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
  688. package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
  689. package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
  690. package/dist/server/src/lib/db/relay-bind-db.js +88 -167
  691. package/dist/server/src/lib/db/relay-db-base.js +20 -0
  692. package/dist/server/src/lib/db/relay-db-count.js +49 -0
  693. package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
  694. package/dist/server/src/lib/db/relay-db-hold.js +250 -0
  695. package/dist/server/src/lib/db/relay-db.js +68 -92
  696. package/dist/server/src/lib/detection/cli-patterns.js +13 -3
  697. package/dist/server/src/lib/detection/model-info-extractor.js +1 -1
  698. package/dist/server/src/lib/detection/tools/claude/patterns.js +76 -0
  699. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +5 -0
  700. package/dist/server/src/lib/detection/tools/codex/detect.js +5 -1
  701. package/dist/server/src/lib/detection/tools/codex/patterns.js +52 -2
  702. package/dist/server/src/lib/detection/tools/codex/prompt.js +23 -3
  703. package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
  704. package/dist/server/src/lib/detection/tools/opencode/detect.js +30 -15
  705. package/dist/server/src/lib/detection/tools/opencode/patterns.js +268 -7
  706. package/dist/server/src/lib/detection/tools/opencode/readiness.js +71 -0
  707. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +51 -15
  708. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +195 -11
  709. package/dist/server/src/lib/detection/tools/run-detection.js +5 -2
  710. package/dist/server/src/lib/detection/tools/verified-against.js +16 -0
  711. package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +92 -0
  712. package/dist/server/src/lib/git/git-common-dir.js +192 -0
  713. package/dist/server/src/lib/hooks/hook-settings-generator.js +8 -2
  714. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +31 -1
  715. package/dist/server/src/lib/hooks/sources/launch-command.js +31 -8
  716. package/dist/server/src/lib/hooks/sources/opencode/client.js +20 -0
  717. package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +24 -0
  718. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +208 -35
  719. package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +7 -1
  720. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +117 -2
  721. package/dist/server/src/lib/job-executor.js +18 -1
  722. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +58 -4
  723. package/dist/server/src/lib/polling/response-checker.js +32 -7
  724. package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
  725. package/dist/server/src/lib/relay/relay-delivery-block.js +150 -0
  726. package/dist/server/src/lib/relay/relay-delivery.js +416 -79
  727. package/dist/server/src/lib/relay/relay-messages.js +13 -0
  728. package/dist/server/src/lib/relay/relay-system-line.js +28 -15
  729. package/dist/server/src/lib/relay/types.js +14 -2
  730. package/dist/server/src/lib/response-cleaner.js +13 -3
  731. package/dist/server/src/lib/response-extractor.js +38 -3
  732. package/dist/server/src/lib/session/agent-session-lifecycle.js +9 -1
  733. package/dist/server/src/lib/session/claude-executor.js +13 -1
  734. package/dist/server/src/lib/session/claude-session.js +113 -14
  735. package/dist/server/src/lib/session/current-output-builder.js +7 -5
  736. package/dist/server/src/lib/session/instance-input-lock.js +140 -6
  737. package/dist/server/src/lib/session/prompt-submit-receipt.js +87 -18
  738. package/dist/server/src/lib/session/prompt-waiting-guard.js +8 -2
  739. package/dist/server/src/lib/session/respond-target.js +82 -0
  740. package/dist/server/src/lib/session/role-launch.js +722 -0
  741. package/dist/server/src/lib/session/send-attempt-state.js +137 -3
  742. package/dist/server/src/lib/session/send-user-message.js +84 -7
  743. package/dist/server/src/lib/session/session-generation-archive.js +7 -8
  744. package/dist/server/src/lib/session/session-launch-flight.js +33 -1
  745. package/dist/server/src/lib/session/structured-prompt.js +12 -7
  746. package/dist/server/src/lib/session/worktree-session-reconcile.js +15 -0
  747. package/dist/server/src/lib/session-key-sender.js +6 -1
  748. package/dist/server/src/lib/test-run-detection.js +53 -0
  749. package/dist/server/src/lib/tmux/read-mode.js +4 -0
  750. package/dist/server/src/lib/tmux/session-hook-scripts.js +36 -4
  751. package/dist/server/src/lib/tui-accumulator.js +14 -5
  752. package/dist/server/src/lib/verification/env-clean-gate.js +117 -12
  753. package/dist/server/src/lib/verification/gate-runner.js +9 -8
  754. package/dist/server/src/lib/verification/verify-config.js +32 -2
  755. package/dist/server/src/types/agent-roles.js +56 -0
  756. package/dist/types/agent-roles.d.ts +351 -0
  757. package/dist/types/agent-roles.d.ts.map +1 -0
  758. package/dist/types/agent-roles.js +56 -0
  759. package/docs/en/user-guide/webapp-guide.md +16 -0
  760. package/package.json +2 -1
  761. package/release-notes/0.49.3.json +52 -0
  762. package/release-notes/0.50.0.json +113 -0
  763. package/.next/server/chunks/1062.js +0 -1
  764. package/.next/server/chunks/110.js +0 -1
  765. package/.next/server/chunks/2422.js +0 -1
  766. package/.next/server/chunks/3756.js +0 -1
  767. package/.next/server/chunks/4936.js +0 -1
  768. package/.next/server/chunks/5630.js +0 -1
  769. package/.next/server/chunks/610.js +0 -1
  770. package/.next/server/chunks/6119.js +0 -1
  771. package/.next/server/chunks/6808.js +0 -4
  772. package/.next/server/chunks/7491.js +0 -3
  773. package/.next/server/chunks/9198.js +0 -144
  774. package/.next/server/chunks/9360.js +0 -2
  775. package/.next/server/chunks/9584.js +0 -1
  776. package/.next/static/chunks/2407-07a237575e1ceb9e.js +0 -1
  777. package/.next/static/chunks/344-e1cefd00787060e4.js +0 -1
  778. package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +0 -1
  779. package/.next/static/chunks/7229.7f0f5a7032b612b4.js +0 -1
  780. package/.next/static/chunks/8165-263172c17ae8e8c3.js +0 -1
  781. package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
  782. package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
  783. package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
  784. package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
  785. package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
  786. package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
  787. package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
  788. package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
  789. package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
  790. package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
  791. package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
  792. package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
  793. package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
  794. package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
  795. package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
  796. package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
  797. package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
  798. package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
  799. package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
  800. package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
  801. package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
  802. package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
  803. package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
  804. package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
  805. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
  806. package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
  807. package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
  808. package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
  809. package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
  810. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
  811. package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
  812. package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
  813. package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
  814. package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
  815. package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
  816. package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
  817. package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
  818. package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
  819. package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
  820. package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
  821. package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
  822. package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
  823. package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
  824. package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
  825. package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
  826. package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
  827. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
  828. package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
  829. package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
  830. package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
  831. package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
  832. package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
  833. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
  834. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
  835. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
  836. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
  837. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
  838. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
  839. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
  840. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
  841. package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
  842. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
  843. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
  844. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
  845. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
  846. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
  847. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
  848. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
  849. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
  850. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
  851. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
  852. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
  853. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
  854. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
  855. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
  856. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
  857. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
  858. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
  859. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
  860. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
  861. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
  862. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
  863. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
  864. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
  865. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
  866. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
  867. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
  868. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
  869. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
  870. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
  871. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
  872. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
  873. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
  874. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
  875. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
  876. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
  877. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
  878. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
  879. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
  880. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
  881. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
  882. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
  883. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
  884. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
  885. package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
  886. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
  887. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
  888. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
  889. package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
  890. package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
  891. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
  892. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
  893. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
  894. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
  895. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
  896. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
  897. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
  898. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
  899. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
  900. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
  901. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
  902. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
  903. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
  904. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
  905. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
  906. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
  907. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
  908. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
  909. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
  910. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
  911. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
  912. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
  913. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
  914. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
  915. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
  916. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
  917. package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
  918. package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +0 -1
  919. package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
  920. package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
  921. package/.next/static/chunks/app/repositories/page-71f5a5ac29b0370d.js +0 -1
  922. package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +0 -1
  923. package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
  924. package/.next/static/chunks/app/worktrees/[id]/page-33afc6aa96289fb0.js +0 -1
  925. package/.next/static/css/c1e307d05daf93b6.css +0 -1
  926. package/.next/static/yGatWDsS532awSs51kXyd/_buildManifest.js +0 -1
  927. /package/.next/static/{yGatWDsS532awSs51kXyd → z4d8-5MaLkoD-4EhueZwk}/_ssgManifest.js +0 -0
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ /**
3
+ * Resolving an `uncertain` delivery hold on a relay (Issue #4082).
4
+ *
5
+ * Split out of `relay-db` (Issue #4096); `relay-db` re-exports every name here,
6
+ * so callers (and every `vi.mock`) keep importing from `@/lib/db/relay-db`.
7
+ * This module must not import `relay-db` (no cycle).
8
+ *
9
+ * @module lib/db/relay-db-hold
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.resolveRelayDeliveryHold = resolveRelayDeliveryHold;
13
+ const types_1 = require("../../lib/relay/types");
14
+ const logger_1 = require("../../lib/logger");
15
+ const relay_db_base_1 = require("../../lib/db/relay-db-base");
16
+ const logger = (0, logger_1.createLogger)('relay-db');
17
+ /** The second slot's reply, or null when it cannot be read. */
18
+ function readPendingReply(text) {
19
+ let parsed;
20
+ try {
21
+ parsed = JSON.parse(text);
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ if (typeof parsed !== 'object' || parsed === null)
27
+ return null;
28
+ const { body, payloadId, overlap } = parsed;
29
+ if (typeof body !== 'string' || typeof payloadId !== 'string')
30
+ return null;
31
+ return { body, payloadId, overlap: typeof overlap === 'string' ? overlap : null };
32
+ }
33
+ /** Thrown inside the transaction when a guarded write lost; rolls everything back. */
34
+ class RelayHoldConflict extends Error {
35
+ }
36
+ /** `SET` assignments that drop the delivery hold. */
37
+ const DROP_HOLD_SET = `
38
+ delivery_state = NULL, delivery_attempt_id = NULL, delivery_owner = NULL,
39
+ delivery_reason = NULL, delivery_at = NULL
40
+ `;
41
+ /** The guard every resolve write carries: the hold the caller named, unchanged. */
42
+ const HELD_GUARD = `
43
+ id = ? AND payload_id = ? AND delivery_attempt_id = ? AND delivery_state = 'uncertain' AND state = ?
44
+ `;
45
+ const EMPTY_SLOT_SET = `pending_kind = NULL, pending_body = NULL, payload_id = NULL, ${DROP_HOLD_SET}`;
46
+ function refuseHold(refusal, message) {
47
+ return { ok: false, refusal, message };
48
+ }
49
+ /** Read the held row and refuse it unless it is an `uncertain` hold the caller named. */
50
+ function readResolvableHold(db, input) {
51
+ const refuse = refuseHold;
52
+ const row = db
53
+ .prepare(`
54
+ SELECT state, expires_at, pending_kind, payload_id, pending_reply, delivery_state, delivery_attempt_id
55
+ FROM session_relays WHERE id = ?
56
+ `)
57
+ .get(input.relayId);
58
+ if (!row)
59
+ return refuse('not_found', `Relay '${input.relayId}' not found`);
60
+ if (row.delivery_state === null)
61
+ return refuse('no_hold', 'The relay has no delivery hold (resolved, delivered or queued)');
62
+ if (row.delivery_state === 'attempting') {
63
+ return refuse('attempting', 'The payload is being delivered right now; only that delivery settles it');
64
+ }
65
+ if (row.delivery_state !== 'uncertain')
66
+ return refuse('not_allowed', `Unknown delivery state '${row.delivery_state}'`);
67
+ if (row.delivery_attempt_id === null || row.payload_id === null || input.attemptId === null) {
68
+ return refuse('not_allowed', 'The hold carries no attempt id and cannot be resolved');
69
+ }
70
+ if (row.payload_id !== input.payloadId || row.delivery_attempt_id !== input.attemptId) {
71
+ return refuse('stale', 'The hold names another payload or attempt (read the relay again)');
72
+ }
73
+ const kind = row.pending_kind;
74
+ if (kind !== 'reply' && kind !== 'prompt' && kind !== 'expired') {
75
+ return refuse('not_allowed', 'The held slot carries no payload');
76
+ }
77
+ return { ok: true, row, kind };
78
+ }
79
+ /** `retry`: queue the held payload again (not sent here). */
80
+ function retryHold({ row, kind, open, now, guarded }) {
81
+ if (kind !== 'expired') {
82
+ if (!open)
83
+ return refuseHold('not_allowed', `Relay is already ${row.state}; a closed relay's ${kind} is not sent again`);
84
+ if (row.expires_at <= now)
85
+ return refuseHold('not_allowed', 'Relay has passed its deadline; its payload is not sent again');
86
+ }
87
+ guarded(DROP_HOLD_SET);
88
+ return { ok: true, requeued: true, promoted: false };
89
+ }
90
+ /** `confirm` / `discard`: empty the held slot (and close or promote as the table says). */
91
+ function settleHold(ctx) {
92
+ const { db, input, now, row, kind, open, guarded } = ctx;
93
+ const emptySlot = EMPTY_SLOT_SET;
94
+ if (kind === 'reply' && open)
95
+ return settleOpenReply(ctx);
96
+ if (kind === 'prompt' && open && row.expires_at <= now) {
97
+ // Issue #4082: the deadline passed and the sweep has not run yet. The
98
+ // relay ends here exactly as if the sweep had found the notice held:
99
+ // closed as `expired`, no expiry notice queued for the composer, and a
100
+ // waiting reply dropped explicitly (the requester is told) rather than
101
+ // promoted — promoting it would only have let the sweep erase it
102
+ // silently and queue a fresh expiry notice after the settle.
103
+ guarded(`state = 'expired', ${emptySlot}, pending_reply = NULL`);
104
+ const dropped = row.pending_reply === null ? null : readPendingReply(row.pending_reply);
105
+ return {
106
+ ok: true,
107
+ requeued: false,
108
+ promoted: false,
109
+ expired: true,
110
+ discardedReply: row.pending_reply === null ? null : { payloadId: dropped?.payloadId ?? null },
111
+ };
112
+ }
113
+ if (!open && row.pending_reply !== null) {
114
+ // Issue #4082: a closed relay delivers nothing more. The reply the
115
+ // expiry sweep kept behind the held notice is dropped here, with the
116
+ // slot, in this transaction — explicitly, so the requester is told.
117
+ guarded(`${emptySlot}, pending_reply = NULL`);
118
+ const dropped = readPendingReply(row.pending_reply);
119
+ return { ok: true, requeued: false, promoted: false, discardedReply: { payloadId: dropped?.payloadId ?? null } };
120
+ }
121
+ guarded(emptySlot);
122
+ if (kind !== 'prompt' || !open || row.pending_reply === null) {
123
+ return { ok: true, requeued: false, promoted: false };
124
+ }
125
+ return promotePendingReplyAfterSettle(db, input, now, row, row.pending_reply);
126
+ }
127
+ /** `confirm` closes an open relay's held reply `delivered`; `discard` closes it `cancelled`. */
128
+ function settleOpenReply({ input, now, guarded }) {
129
+ const emptySlot = EMPTY_SLOT_SET;
130
+ if (input.action === 'confirm') {
131
+ guarded(`state = 'delivered', sent_request_id = COALESCE(sent_request_id, ?), delivered_at = ?,
132
+ ${emptySlot}, pending_reply = NULL`, input.sentRequestId, now);
133
+ }
134
+ else {
135
+ guarded(`state = 'cancelled', ${emptySlot}, pending_reply = NULL`);
136
+ }
137
+ return { ok: true, requeued: false, promoted: false };
138
+ }
139
+ function promotePendingReplyAfterSettle(db, input, now, row, pendingReply) {
140
+ // The reply that finished while the notice was held takes the slot now,
141
+ // in this same transaction: nothing can stash in between.
142
+ const reply = readPendingReply(pendingReply);
143
+ if (!reply) {
144
+ // Unreadable: dropped, exactly as `promoteRelayPendingReply` drops it.
145
+ logger.warn('relay-hold-resolve-unreadable-pending-reply', { relayId: input.relayId });
146
+ db.prepare('UPDATE session_relays SET pending_reply = NULL WHERE id = ?').run(input.relayId);
147
+ return { ok: true, requeued: false, promoted: false };
148
+ }
149
+ const promoted = db
150
+ .prepare(`
151
+ UPDATE session_relays
152
+ SET pending_kind = 'reply', pending_body = ?, payload_id = ?, overlap = ?,
153
+ pending_reply = NULL, updated_at = ?
154
+ WHERE id = ? AND pending_kind IS NULL AND delivery_state IS NULL AND state = ?
155
+ `)
156
+ .run(reply.body, reply.payloadId, reply.overlap, now, input.relayId, row.state);
157
+ if (promoted.changes !== 1)
158
+ throw new RelayHoldConflict('pending reply could not be promoted');
159
+ return { ok: true, requeued: false, promoted: true };
160
+ }
161
+ /**
162
+ * Settle an `uncertain` delivery hold, once (Issue #4082).
163
+ *
164
+ * Keyed on the relay, the payload AND the attempt the caller read, and on the
165
+ * hold still being `uncertain`: an operation from an older screen (the payload
166
+ * was retried since, and a new attempt took it), a second operation on the
167
+ * same hold, and a hold whose delivery is typing (`attempting`) are refused,
168
+ * and nothing is written. Every write — the close, the emptied slots, the
169
+ * promoted reply — commits in ONE transaction; a database error rolls all of
170
+ * it back and is thrown (the caller answers 500).
171
+ *
172
+ * | payload | relay | confirm | retry | discard |
173
+ * |---|---|---|---|---|
174
+ * | reply | open | close `delivered`, slots emptied | queued again (deadline not passed) | close `cancelled`, both slots emptied |
175
+ * | prompt | open | slot emptied, the waiting reply promoted | queued again (deadline not passed) | as confirm |
176
+ * | expired | (closed) | slot emptied | queued again | slot emptied |
177
+ * | reply / prompt | closed | slot emptied, state kept | refused | slot emptied, state kept |
178
+ *
179
+ * Issue #4082: a closed relay's reply waiting in the second slot (the expiry
180
+ * sweep keeps it while the notice in front of it is held) is dropped by the
181
+ * confirm / discard that empties the slot, and reported as `discardedReply`.
182
+ * A prompt notice on an OPEN relay whose deadline has passed (the sweep has
183
+ * not run yet) is settled the same way, and the relay is closed `expired`
184
+ * in the same write (`expired: true`) with no expiry notice queued — so
185
+ * resolve-then-sweep ends where sweep-then-resolve does.
186
+ *
187
+ * `prompt_signature` is kept, so the same dialog is not told again; the send
188
+ * binding's `send_state` / `hold_reason` / observation are not touched.
189
+ * Nothing here types: a retried payload goes out through the pump.
190
+ */
191
+ function resolveRelayDeliveryHold(db, input) {
192
+ const now = input.now ?? Date.now();
193
+ const refuse = (refusal, message) => ({ ok: false, refusal, message });
194
+ const decide = () => {
195
+ const checked = readResolvableHold(db, input);
196
+ if (!checked.ok)
197
+ return checked;
198
+ const { row, kind } = checked;
199
+ const open = (0, types_1.isOpenRelayState)(row.state);
200
+ // A guarded write that does not take exactly one row rolls the whole
201
+ // transaction back; `false` is never read as success.
202
+ const guarded = (setClause, ...setParams) => {
203
+ const result = db
204
+ .prepare(`UPDATE session_relays SET ${setClause}, updated_at = ? WHERE ${HELD_GUARD}`)
205
+ .run(...setParams, now, input.relayId, input.payloadId, input.attemptId, row.state);
206
+ if (result.changes !== 1)
207
+ throw new RelayHoldConflict('hold changed underneath the resolve');
208
+ };
209
+ const ctx = { db, input, now, row, kind, open, guarded };
210
+ if (input.action === 'retry')
211
+ return retryHold(ctx);
212
+ return settleHold(ctx);
213
+ };
214
+ // The relay the answer carries is read INSIDE the transaction, before it
215
+ // commits: a read that fails after the commit would answer 500 for a hold
216
+ // already settled (and, for a retry, before the pump was asked to send it).
217
+ // Failing here rolls the settle back with it, so a 500 still means
218
+ // "nothing was committed".
219
+ const decideAndRead = () => {
220
+ const decided = decide();
221
+ const relay = (0, relay_db_base_1.getRelayById)(db, input.relayId);
222
+ if (decided.ok && !relay)
223
+ throw new Error(`Relay '${input.relayId}' vanished while its hold was resolved`);
224
+ return { decided, relay };
225
+ };
226
+ let settled;
227
+ try {
228
+ settled = db.transaction(decideAndRead).immediate();
229
+ }
230
+ catch (error) {
231
+ if (!(error instanceof RelayHoldConflict))
232
+ throw error;
233
+ // Rolled back: nothing was written, so a failing read here commits nothing either.
234
+ settled = {
235
+ decided: refuse('stale', 'The hold changed while it was being resolved (read the relay again)'),
236
+ relay: (0, relay_db_base_1.getRelayById)(db, input.relayId),
237
+ };
238
+ }
239
+ const { decided, relay } = settled;
240
+ if (!decided.ok)
241
+ return { ...decided, relay };
242
+ return {
243
+ ok: true,
244
+ relay: relay,
245
+ requeued: decided.requeued,
246
+ promoted: decided.promoted,
247
+ discardedReply: decided.discardedReply ?? null,
248
+ expired: decided.expired === true,
249
+ };
250
+ }
@@ -17,40 +17,50 @@
17
17
  * @module lib/db/relay-db
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.stashRelayPayload = exports.settleRelaySendState = exports.setRelayPendingReply = exports.setRelayHold = exports.reserveRelayBind = exports.replaceRelayPromptWithReply = exports.replaceRelayPromptWithPendingReply = exports.recordRelayInputBoundary = exports.promoteRelayPendingReply = exports.listRelaysWithPendingPayload = exports.listOpenBoundRelays = exports.getRelayPendingPayload = exports.getRelayBinding = exports.failOrphanedRelayBind = exports.explainRelayBindRefusal = exports.clearRelayPendingReply = exports.clearRelayPending = exports.clearRelayHeldCandidates = exports.appendRelayHeldCandidate = void 0;
20
+ exports.countRelays = exports.resolveRelayDeliveryHold = exports.markRelayDelivered = exports.completeRelayReplyDelivery = exports.getRelayById = exports.stashRelayPayload = exports.settleRelaySendState = exports.setRelayPendingReply = exports.setRelayHold = exports.reserveRelayBind = exports.replaceRelayPromptWithReply = exports.replaceRelayPromptWithPendingReply = exports.RELAY_DELIVERY_SERVER_RESTARTED = exports.releaseRelayPayloadDelivery = exports.recoverInterruptedRelayDeliveryRefs = exports.recoverInterruptedRelayDeliveries = exports.recordRelayInputBoundary = exports.promoteRelayPendingReply = exports.listRelaysWithPendingPayload = exports.listRelaysWithDeliveryHold = exports.listOpenBoundRelays = exports.listDeliverableRelayPayloads = exports.isCurrentRelayPayloadAttempt = exports.holdRelayPayloadDelivery = exports.getRelayPendingPayload = exports.getRelayBinding = exports.failOrphanedRelayBind = exports.explainRelayBindRefusal = exports.completeRelayPromptDelivery = exports.countHeldRelays = exports.completeRelayPayloadDelivery = exports.clearRelayPendingReplyUnlessHeld = exports.clearRelayPendingReply = exports.clearRelayPending = exports.clearRelayHeldCandidates = exports.claimRelayPayloadDelivery = exports.appendRelayHeldCandidate = void 0;
21
21
  exports.createRelay = createRelay;
22
- exports.getRelayById = getRelayById;
23
22
  exports.listOpenRelaysTo = listOpenRelaysTo;
24
23
  exports.listOpenRelaysFrom = listOpenRelaysFrom;
25
24
  exports.getSessionRelaySummary = getSessionRelaySummary;
26
25
  exports.listOpenRelaysForWorktree = listOpenRelaysForWorktree;
27
26
  exports.countOpenRelaysBetween = countOpenRelaysBetween;
28
- exports.markRelayDelivered = markRelayDelivered;
29
27
  exports.markRelayPromptNotified = markRelayPromptNotified;
30
28
  exports.getRelayPromptSignature = getRelayPromptSignature;
31
29
  exports.markRelayExpired = markRelayExpired;
32
30
  exports.listExpiredOpenRelays = listExpiredOpenRelays;
31
+ exports.listClosedRelaysWithPendingPayload = listClosedRelaysWithPendingPayload;
33
32
  exports.cancelRelay = cancelRelay;
34
- exports.countRelays = countRelays;
35
33
  const crypto_1 = require("crypto");
36
34
  const types_1 = require("../../lib/relay/types");
37
- const logger_1 = require("../../lib/logger");
38
35
  const relay_bind_db_1 = require("../../lib/db/relay-bind-db");
39
36
  // Issue #3995: the send binding and the pending slots live in `relay-bind-db`;
40
37
  // re-exported so every caller (and every `vi.mock`) keeps this module's surface.
41
38
  var relay_bind_db_2 = require("../../lib/db/relay-bind-db");
42
39
  Object.defineProperty(exports, "appendRelayHeldCandidate", { enumerable: true, get: function () { return relay_bind_db_2.appendRelayHeldCandidate; } });
40
+ Object.defineProperty(exports, "claimRelayPayloadDelivery", { enumerable: true, get: function () { return relay_bind_db_2.claimRelayPayloadDelivery; } });
43
41
  Object.defineProperty(exports, "clearRelayHeldCandidates", { enumerable: true, get: function () { return relay_bind_db_2.clearRelayHeldCandidates; } });
44
42
  Object.defineProperty(exports, "clearRelayPending", { enumerable: true, get: function () { return relay_bind_db_2.clearRelayPending; } });
45
43
  Object.defineProperty(exports, "clearRelayPendingReply", { enumerable: true, get: function () { return relay_bind_db_2.clearRelayPendingReply; } });
44
+ Object.defineProperty(exports, "clearRelayPendingReplyUnlessHeld", { enumerable: true, get: function () { return relay_bind_db_2.clearRelayPendingReplyUnlessHeld; } });
45
+ Object.defineProperty(exports, "completeRelayPayloadDelivery", { enumerable: true, get: function () { return relay_bind_db_2.completeRelayPayloadDelivery; } });
46
+ Object.defineProperty(exports, "countHeldRelays", { enumerable: true, get: function () { return relay_bind_db_2.countHeldRelays; } });
47
+ Object.defineProperty(exports, "completeRelayPromptDelivery", { enumerable: true, get: function () { return relay_bind_db_2.completeRelayPromptDelivery; } });
46
48
  Object.defineProperty(exports, "explainRelayBindRefusal", { enumerable: true, get: function () { return relay_bind_db_2.explainRelayBindRefusal; } });
47
49
  Object.defineProperty(exports, "failOrphanedRelayBind", { enumerable: true, get: function () { return relay_bind_db_2.failOrphanedRelayBind; } });
48
50
  Object.defineProperty(exports, "getRelayBinding", { enumerable: true, get: function () { return relay_bind_db_2.getRelayBinding; } });
49
51
  Object.defineProperty(exports, "getRelayPendingPayload", { enumerable: true, get: function () { return relay_bind_db_2.getRelayPendingPayload; } });
52
+ Object.defineProperty(exports, "holdRelayPayloadDelivery", { enumerable: true, get: function () { return relay_bind_db_2.holdRelayPayloadDelivery; } });
53
+ Object.defineProperty(exports, "isCurrentRelayPayloadAttempt", { enumerable: true, get: function () { return relay_bind_db_2.isCurrentRelayPayloadAttempt; } });
54
+ Object.defineProperty(exports, "listDeliverableRelayPayloads", { enumerable: true, get: function () { return relay_bind_db_2.listDeliverableRelayPayloads; } });
50
55
  Object.defineProperty(exports, "listOpenBoundRelays", { enumerable: true, get: function () { return relay_bind_db_2.listOpenBoundRelays; } });
56
+ Object.defineProperty(exports, "listRelaysWithDeliveryHold", { enumerable: true, get: function () { return relay_bind_db_2.listRelaysWithDeliveryHold; } });
51
57
  Object.defineProperty(exports, "listRelaysWithPendingPayload", { enumerable: true, get: function () { return relay_bind_db_2.listRelaysWithPendingPayload; } });
52
58
  Object.defineProperty(exports, "promoteRelayPendingReply", { enumerable: true, get: function () { return relay_bind_db_2.promoteRelayPendingReply; } });
53
59
  Object.defineProperty(exports, "recordRelayInputBoundary", { enumerable: true, get: function () { return relay_bind_db_2.recordRelayInputBoundary; } });
60
+ Object.defineProperty(exports, "recoverInterruptedRelayDeliveries", { enumerable: true, get: function () { return relay_bind_db_2.recoverInterruptedRelayDeliveries; } });
61
+ Object.defineProperty(exports, "recoverInterruptedRelayDeliveryRefs", { enumerable: true, get: function () { return relay_bind_db_2.recoverInterruptedRelayDeliveryRefs; } });
62
+ Object.defineProperty(exports, "releaseRelayPayloadDelivery", { enumerable: true, get: function () { return relay_bind_db_2.releaseRelayPayloadDelivery; } });
63
+ Object.defineProperty(exports, "RELAY_DELIVERY_SERVER_RESTARTED", { enumerable: true, get: function () { return relay_bind_db_2.RELAY_DELIVERY_SERVER_RESTARTED; } });
54
64
  Object.defineProperty(exports, "replaceRelayPromptWithPendingReply", { enumerable: true, get: function () { return relay_bind_db_2.replaceRelayPromptWithPendingReply; } });
55
65
  Object.defineProperty(exports, "replaceRelayPromptWithReply", { enumerable: true, get: function () { return relay_bind_db_2.replaceRelayPromptWithReply; } });
56
66
  Object.defineProperty(exports, "reserveRelayBind", { enumerable: true, get: function () { return relay_bind_db_2.reserveRelayBind; } });
@@ -58,7 +68,17 @@ Object.defineProperty(exports, "setRelayHold", { enumerable: true, get: function
58
68
  Object.defineProperty(exports, "setRelayPendingReply", { enumerable: true, get: function () { return relay_bind_db_2.setRelayPendingReply; } });
59
69
  Object.defineProperty(exports, "settleRelaySendState", { enumerable: true, get: function () { return relay_bind_db_2.settleRelaySendState; } });
60
70
  Object.defineProperty(exports, "stashRelayPayload", { enumerable: true, get: function () { return relay_bind_db_2.stashRelayPayload; } });
61
- const logger = (0, logger_1.createLogger)('relay-db');
71
+ // Issue #4096: split out of this file; re-exported so every caller (and every
72
+ // `vi.mock`) keeps this module's surface.
73
+ var relay_db_base_1 = require("../../lib/db/relay-db-base");
74
+ Object.defineProperty(exports, "getRelayById", { enumerable: true, get: function () { return relay_db_base_1.getRelayById; } });
75
+ var relay_db_delivery_1 = require("../../lib/db/relay-db-delivery");
76
+ Object.defineProperty(exports, "completeRelayReplyDelivery", { enumerable: true, get: function () { return relay_db_delivery_1.completeRelayReplyDelivery; } });
77
+ Object.defineProperty(exports, "markRelayDelivered", { enumerable: true, get: function () { return relay_db_delivery_1.markRelayDelivered; } });
78
+ var relay_db_hold_1 = require("../../lib/db/relay-db-hold");
79
+ Object.defineProperty(exports, "resolveRelayDeliveryHold", { enumerable: true, get: function () { return relay_db_hold_1.resolveRelayDeliveryHold; } });
80
+ var relay_db_count_1 = require("../../lib/db/relay-db-count");
81
+ Object.defineProperty(exports, "countRelays", { enumerable: true, get: function () { return relay_db_count_1.countRelays; } });
62
82
  /** Insert a new `pending` relay and hand it back. */
63
83
  function createRelay(db, input) {
64
84
  const id = (0, crypto_1.randomUUID)();
@@ -93,15 +113,9 @@ function createRelay(db, input) {
93
113
  obsState: null,
94
114
  holdReason: null,
95
115
  overlap: null,
116
+ deliveryHold: null,
96
117
  };
97
118
  }
98
- /** One relay by id, or null. */
99
- function getRelayById(db, id) {
100
- const row = db
101
- .prepare(`SELECT ${relay_bind_db_1.RELAY_COLUMNS} FROM session_relays WHERE id = ?`)
102
- .get(id);
103
- return row ? (0, relay_bind_db_1.mapRelay)(row) : null;
104
- }
105
119
  /** Every still-open relay this session must answer (it is the `to` end). */
106
120
  function listOpenRelaysTo(db, endpoint) {
107
121
  const rows = db
@@ -163,47 +177,6 @@ function countOpenRelaysBetween(db, from, to) {
163
177
  .get(from.worktreeId, from.instanceId, to.worktreeId, to.instanceId, ...types_1.OPEN_RELAY_STATES);
164
178
  return row.n;
165
179
  }
166
- /**
167
- * Close the relay as delivered, exactly once.
168
- *
169
- * Two clauses, and they guard different things — worth separating, because a
170
- * later reader who notices that the second is redundant *for one relay id* will
171
- * otherwise delete the one that is not.
172
- *
173
- * - `state IN (open)` is what makes a SECOND call for the same relay answer
174
- * false: the first call left it `delivered`, which is not an open state.
175
- * - `sent_request_id IS NULL`, together with the column's UNIQUE index, is what
176
- * makes the delivery id itself unrepeatable ACROSS relays and across
177
- * processes. It is the idempotency key the Issue names, and it is why this
178
- * function catches: the index refusing a write is the answer "somebody else
179
- * got there first", and that answer must not arrive as an exception inside a
180
- * delivery path.
181
- *
182
- * @returns Whether this call is the one that closed it
183
- */
184
- function markRelayDelivered(db, id, sentRequestId, now = Date.now()) {
185
- try {
186
- const result = db
187
- .prepare(`
188
- UPDATE session_relays
189
- SET state = 'delivered', sent_request_id = ?, delivered_at = ?,
190
- pending_kind = NULL, pending_body = NULL, payload_id = NULL, updated_at = ?
191
- WHERE id = ? AND sent_request_id IS NULL
192
- AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
193
- `)
194
- .run(sentRequestId, now, now, id, ...types_1.OPEN_RELAY_STATES);
195
- return result.changes === 1;
196
- }
197
- catch (error) {
198
- // The UNIQUE index refusing the write IS the answer "somebody else got
199
- // there first", and it must not become an exception in a delivery path.
200
- logger.warn('relay-deliver-conflict', {
201
- relayId: id,
202
- error: error instanceof Error ? error.message : String(error),
203
- });
204
- return false;
205
- }
206
- }
207
180
  /**
208
181
  * Note that A is being told B is waiting on a confirmation.
209
182
  *
@@ -256,51 +229,54 @@ function listExpiredOpenRelays(db, now = Date.now()) {
256
229
  .all(...types_1.OPEN_RELAY_STATES, now);
257
230
  return rows.map(relay_bind_db_1.mapRelay);
258
231
  }
259
- /** Withdraw a relay. Returns false when it was already closed or absent. */
232
+ /**
233
+ * Closed relays whose payload is still waiting to be typed into the requester
234
+ * (Issue #4193): in practice the expiry notice (`pending_kind = 'expired'`),
235
+ * which outlives the relay it closes. Not under a delivery hold (those are
236
+ * listed by `listRelaysWithDeliveryHold`), oldest first.
237
+ *
238
+ * Scoped by the REQUESTER (`from`) — the payload is going to it: with an
239
+ * endpoint, that session; with a worktree only, that worktree's sessions.
240
+ * Read-only, and not one of the counts.
241
+ */
242
+ function listClosedRelaysWithPendingPayload(db, scope = {}) {
243
+ const clauses = [
244
+ `state NOT IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})`,
245
+ 'pending_kind IS NOT NULL',
246
+ 'delivery_state IS NULL',
247
+ ];
248
+ const params = [...types_1.OPEN_RELAY_STATES];
249
+ if (scope.requester) {
250
+ clauses.push('from_worktree_id = ? AND from_instance_id = ?');
251
+ params.push(scope.requester.worktreeId, scope.requester.instanceId);
252
+ }
253
+ else if (scope.worktreeId) {
254
+ clauses.push('from_worktree_id = ?');
255
+ params.push(scope.worktreeId);
256
+ }
257
+ const rows = db
258
+ .prepare(`
259
+ SELECT ${relay_bind_db_1.RELAY_COLUMNS} FROM session_relays
260
+ WHERE ${clauses.join(' AND ')}
261
+ ORDER BY created_at ASC
262
+ `)
263
+ .all(...params);
264
+ return rows.map(relay_bind_db_1.mapRelay);
265
+ }
266
+ /**
267
+ * Withdraw a relay. Returns false when it was already closed or absent.
268
+ *
269
+ * Issue #4064: stops later deliveries only. A payload under a delivery hold
270
+ * (it may already be in A's composer) keeps its body, id and reason.
271
+ */
260
272
  function cancelRelay(db, id, now = Date.now()) {
261
273
  const result = db
262
274
  .prepare(`
263
275
  UPDATE session_relays
264
- SET state = 'cancelled', pending_kind = NULL, pending_body = NULL, payload_id = NULL,
276
+ SET state = 'cancelled', ${relay_bind_db_1.KEEP_HELD_PAYLOAD_SET},
265
277
  pending_reply = NULL, updated_at = ?
266
278
  WHERE id = ? AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
267
279
  `)
268
280
  .run(now, id, ...types_1.OPEN_RELAY_STATES);
269
281
  return result.changes === 1;
270
282
  }
271
- /**
272
- * Count relays per state.
273
- *
274
- * The shape `commandmate task show` and `report metrics` print. Counting in SQL
275
- * rather than reading rows because a long-lived server accumulates thousands
276
- * and both callers want five integers.
277
- */
278
- function countRelays(db, filter = {}) {
279
- const clauses = [];
280
- const params = [];
281
- if (filter.worktreeId) {
282
- if (filter.instanceId) {
283
- clauses.push('((from_worktree_id = ? AND from_instance_id = ?) OR (to_worktree_id = ? AND to_instance_id = ?))');
284
- params.push(filter.worktreeId, filter.instanceId, filter.worktreeId, filter.instanceId);
285
- }
286
- else {
287
- clauses.push('(from_worktree_id = ? OR to_worktree_id = ?)');
288
- params.push(filter.worktreeId, filter.worktreeId);
289
- }
290
- }
291
- if (filter.since !== undefined) {
292
- clauses.push('created_at >= ?');
293
- params.push(filter.since);
294
- }
295
- const where = clauses.length > 0 ? `WHERE ${clauses.join(' AND ')}` : '';
296
- const rows = db
297
- .prepare(`SELECT state, COUNT(*) AS n FROM session_relays ${where} GROUP BY state`)
298
- .all(...params);
299
- const counts = (0, types_1.emptyRelayCounts)();
300
- for (const row of rows) {
301
- if (row.state in counts) {
302
- counts[row.state] = row.n;
303
- }
304
- }
305
- return counts;
306
- }
@@ -4,9 +4,9 @@
4
4
  * Shared between response-poller.ts and API routes
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.CLAUDE_SPINNER_CHARS = exports.OPENCODE_V2_SKIP_PATTERNS = exports.isOpencodeV2ComposerVisible = exports.OPENCODE_V2_THINKING_PATTERN = exports.OPENCODE_V2_FOOTER_PATTERN = exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.stripOpenCodeGutter = exports.findOpenCodeComposerRows = exports.findOpenCodeUserEchoEnd = exports.findOpenCodeChromeStart = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.findCodexUserEchoIndex = exports.CODEX_USER_ECHO_PATTERN = exports.findCodexChromeStart = exports.CODEX_TRAILED_STATUS_BAR_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_EFFORT_PICKER_FOOTER_PATTERN = exports.CODEX_PICKER_FOOTER_PATTERN = exports.CODEX_FORM_SUBMIT_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.getCodexLifecycleDialog = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.getCodexActiveDialog = exports.findCodexComposerRow = exports.isCodexPromptReady = exports.CODEX_GENUINE_PROMPT_LINE = exports.CODEX_DIALOG_PATTERN = exports.CODEX_TRUST_QUESTION_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.isCodexTurnActive = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = void 0;
8
- exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.COPILOT_SKIP_PATTERNS = exports.isCopilotFolderTrustDialog = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.isCopilotSelectionFrame = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.findCopilotChromeStart = exports.COPILOT_SEPARATOR_PATTERN = exports.readCopilotStatusBar = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.isClaudeTrustDialogOpen = exports.resolveClaudeTrustDialogKeys = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.findClaudeChromeStart = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = void 0;
9
- exports.stripBoxDrawing = exports.extractAnsiSequences = exports.stripAnsi = exports.findOpencodeV2DialogTitle = exports.OPENCODE_V2_DIALOG_TITLE_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.isShellPaneCommand = exports.COMMAND_CODE_SKIP_PATTERNS = exports.findCommandCodeChromeStart = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.isAntigravityNumberedDialog = exports.locateAntigravityDialogRegion = void 0;
7
+ exports.isOpencodeProcessingFooter = exports.OPENCODE_MODEL_ROW_PATTERN = exports.OPENCODE_TRANSCRIPT_SKIP_PATTERNS = exports.OPENCODE_CHROME_ROW_PATTERNS = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.stripOpenCodeGutter = exports.findOpenCodeComposerRows = exports.findOpenCodeUserEchoEnd = exports.findOpenCodeChromeStart = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PROGRESS_ROW = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.findCodexUserEchoIndex = exports.CODEX_USER_ECHO_PATTERN = exports.findCodexChromeStart = exports.CODEX_TRAILED_STATUS_BAR_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_EFFORT_PICKER_FOOTER_PATTERN = exports.CODEX_PICKER_FOOTER_PATTERN = exports.CODEX_FORM_SUBMIT_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.readCodexEnterConfirmedCursor = exports.getCodexLifecycleDialog = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.getCodexActiveDialog = exports.findCodexComposerRow = exports.isCodexPromptReady = exports.CODEX_GENUINE_PROMPT_LINE = exports.CODEX_DIALOG_PATTERN = exports.CODEX_TRUST_QUESTION_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.isCodexTurnActive = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = void 0;
8
+ exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.COPILOT_SKIP_PATTERNS = exports.isCopilotFolderTrustDialog = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.isCopilotSelectionFrame = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.findCopilotChromeStart = exports.COPILOT_SEPARATOR_PATTERN = exports.readCopilotStatusBar = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.isClaudeAutoDefaultNudgeOpen = exports.resolveClaudeAutoDefaultNudgeKey = exports.isClaudeTrustDialogOpen = exports.resolveClaudeTrustDialogKeys = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.findClaudeChromeStart = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = exports.OPENCODE_V2_SKIP_PATTERNS = exports.isOpencodeV2ComposerVisible = exports.OPENCODE_V2_THINKING_PATTERN = exports.OPENCODE_V2_FOOTER_PATTERN = exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN = exports.findOpenCodeIdleComposer = exports.isOpenCodeProgressBelowComposer = void 0;
9
+ exports.stripBoxDrawing = exports.extractAnsiSequences = exports.stripAnsi = exports.findOpencodeV2DialogTitle = exports.OPENCODE_V2_DIALOG_TITLE_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.isShellPaneCommand = exports.COMMAND_CODE_SKIP_PATTERNS = exports.findCommandCodeChromeStart = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.isAntigravityNumberedDialog = exports.locateAntigravityDialogRegion = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = void 0;
10
10
  exports.detectThinking = detectThinking;
11
11
  exports.getCliToolPatterns = getCliToolPatterns;
12
12
  exports.buildDetectPromptOptions = buildDetectPromptOptions;
@@ -34,6 +34,7 @@ Object.defineProperty(exports, "findCodexComposerRow", { enumerable: true, get:
34
34
  Object.defineProperty(exports, "getCodexActiveDialog", { enumerable: true, get: function () { return patterns_2.getCodexActiveDialog; } });
35
35
  Object.defineProperty(exports, "CODEX_HOOKS_REVIEW_ANCHORS", { enumerable: true, get: function () { return patterns_2.CODEX_HOOKS_REVIEW_ANCHORS; } });
36
36
  Object.defineProperty(exports, "getCodexLifecycleDialog", { enumerable: true, get: function () { return patterns_2.getCodexLifecycleDialog; } });
37
+ Object.defineProperty(exports, "readCodexEnterConfirmedCursor", { enumerable: true, get: function () { return patterns_2.readCodexEnterConfirmedCursor; } });
37
38
  Object.defineProperty(exports, "CODEX_SEPARATOR_PATTERN", { enumerable: true, get: function () { return patterns_2.CODEX_SEPARATOR_PATTERN; } });
38
39
  Object.defineProperty(exports, "CODEX_SELECTION_LIST_PATTERN", { enumerable: true, get: function () { return patterns_2.CODEX_SELECTION_LIST_PATTERN; } });
39
40
  Object.defineProperty(exports, "CODEX_APPROVAL_FOOTER_PATTERN", { enumerable: true, get: function () { return patterns_2.CODEX_APPROVAL_FOOTER_PATTERN; } });
@@ -52,6 +53,7 @@ Object.defineProperty(exports, "OPENCODE_PROMPT_PATTERN", { enumerable: true, ge
52
53
  Object.defineProperty(exports, "OPENCODE_IDLE_COMPOSER_PATTERN", { enumerable: true, get: function () { return patterns_4.OPENCODE_IDLE_COMPOSER_PATTERN; } });
53
54
  Object.defineProperty(exports, "OPENCODE_PROMPT_AFTER_RESPONSE", { enumerable: true, get: function () { return patterns_4.OPENCODE_PROMPT_AFTER_RESPONSE; } });
54
55
  Object.defineProperty(exports, "OPENCODE_THINKING_PATTERN", { enumerable: true, get: function () { return patterns_4.OPENCODE_THINKING_PATTERN; } });
56
+ Object.defineProperty(exports, "OPENCODE_THINKING_PROGRESS_ROW", { enumerable: true, get: function () { return patterns_4.OPENCODE_THINKING_PROGRESS_ROW; } });
55
57
  Object.defineProperty(exports, "OPENCODE_LOADING_PATTERN", { enumerable: true, get: function () { return patterns_4.OPENCODE_LOADING_PATTERN; } });
56
58
  Object.defineProperty(exports, "OPENCODE_RESPONSE_COMPLETE", { enumerable: true, get: function () { return patterns_4.OPENCODE_RESPONSE_COMPLETE; } });
57
59
  Object.defineProperty(exports, "OPENCODE_TURN_COMPLETE_PATTERN", { enumerable: true, get: function () { return patterns_4.OPENCODE_TURN_COMPLETE_PATTERN; } });
@@ -68,6 +70,12 @@ Object.defineProperty(exports, "stripOpenCodeGutter", { enumerable: true, get: f
68
70
  Object.defineProperty(exports, "OPENCODE_SELECTION_LIST_PATTERN", { enumerable: true, get: function () { return patterns_4.OPENCODE_SELECTION_LIST_PATTERN; } });
69
71
  Object.defineProperty(exports, "OPENCODE_SEPARATOR_PATTERN", { enumerable: true, get: function () { return patterns_4.OPENCODE_SEPARATOR_PATTERN; } });
70
72
  Object.defineProperty(exports, "OPENCODE_SKIP_PATTERNS", { enumerable: true, get: function () { return patterns_4.OPENCODE_SKIP_PATTERNS; } });
73
+ Object.defineProperty(exports, "OPENCODE_CHROME_ROW_PATTERNS", { enumerable: true, get: function () { return patterns_4.OPENCODE_CHROME_ROW_PATTERNS; } });
74
+ Object.defineProperty(exports, "OPENCODE_TRANSCRIPT_SKIP_PATTERNS", { enumerable: true, get: function () { return patterns_4.OPENCODE_TRANSCRIPT_SKIP_PATTERNS; } });
75
+ Object.defineProperty(exports, "OPENCODE_MODEL_ROW_PATTERN", { enumerable: true, get: function () { return patterns_4.OPENCODE_MODEL_ROW_PATTERN; } });
76
+ Object.defineProperty(exports, "isOpencodeProcessingFooter", { enumerable: true, get: function () { return patterns_4.isOpencodeProcessingFooter; } });
77
+ Object.defineProperty(exports, "isOpenCodeProgressBelowComposer", { enumerable: true, get: function () { return patterns_4.isOpenCodeProgressBelowComposer; } });
78
+ Object.defineProperty(exports, "findOpenCodeIdleComposer", { enumerable: true, get: function () { return patterns_4.findOpenCodeIdleComposer; } });
71
79
  const patterns_5 = require("./tools/opencode-v2/patterns");
72
80
  var patterns_6 = require("./tools/opencode-v2/patterns");
73
81
  Object.defineProperty(exports, "OPENCODE_V2_IDLE_COMPOSER_PATTERN", { enumerable: true, get: function () { return patterns_6.OPENCODE_V2_IDLE_COMPOSER_PATTERN; } });
@@ -86,6 +94,8 @@ Object.defineProperty(exports, "findClaudeChromeStart", { enumerable: true, get:
86
94
  Object.defineProperty(exports, "CLAUDE_TRUST_DIALOG_PATTERN", { enumerable: true, get: function () { return patterns_8.CLAUDE_TRUST_DIALOG_PATTERN; } });
87
95
  Object.defineProperty(exports, "resolveClaudeTrustDialogKeys", { enumerable: true, get: function () { return patterns_8.resolveClaudeTrustDialogKeys; } });
88
96
  Object.defineProperty(exports, "isClaudeTrustDialogOpen", { enumerable: true, get: function () { return patterns_8.isClaudeTrustDialogOpen; } });
97
+ Object.defineProperty(exports, "resolveClaudeAutoDefaultNudgeKey", { enumerable: true, get: function () { return patterns_8.resolveClaudeAutoDefaultNudgeKey; } });
98
+ Object.defineProperty(exports, "isClaudeAutoDefaultNudgeOpen", { enumerable: true, get: function () { return patterns_8.isClaudeAutoDefaultNudgeOpen; } });
89
99
  Object.defineProperty(exports, "CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN", { enumerable: true, get: function () { return patterns_8.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN; } });
90
100
  Object.defineProperty(exports, "CLAUDE_SELECTION_LIST_FOOTER", { enumerable: true, get: function () { return patterns_8.CLAUDE_SELECTION_LIST_FOOTER; } });
91
101
  Object.defineProperty(exports, "CLAUDE_SESSION_ERROR_PATTERNS", { enumerable: true, get: function () { return patterns_8.CLAUDE_SESSION_ERROR_PATTERNS; } });
@@ -677,7 +677,7 @@ function sameModel(a, b) {
677
677
  *
678
678
  * No /g. No nested quantifiers: `[^·]+?` is bounded by literal `·`/end.
679
679
  */
680
- exports.OPENCODE_STEP_MODEL_PATTERN = /^\s*▣\s+[A-Za-z][A-Za-z0-9-]*\s+·\s+([^·]+?)(?:\s+·\s+[\d.]+\s?m?s)?\s*$/;
680
+ exports.OPENCODE_STEP_MODEL_PATTERN = /^\s*▣\s+[A-Za-z][A-Za-z0-9-]*\s+·\s+([^·]+?)(?:\s+·\s+(?:[\d.]+\s?m?s|\d+m\s+\d+s|\d+h\s+\d+m|\d+d\s+\d+h))?\s*$/;
681
681
  function readOpencodeStepMarker(line) {
682
682
  const match = exports.OPENCODE_STEP_MODEL_PATTERN.exec(line);
683
683
  if (!match)