commandmate 0.49.1 → 0.49.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (819) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +246 -243
  3. package/.next/app-path-routes-manifest.json +18 -17
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +8 -0
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/capabilities/route.js +1 -1
  18. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/daily-summary/route.js +1 -1
  20. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  21. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  24. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  31. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  32. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  34. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  35. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  37. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/push/escalation/route.js +1 -1
  42. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  43. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  45. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/push/vapid/route.js +1 -1
  47. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  48. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/relays/[relayId]/cancel/route.js +4 -1
  50. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  51. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -0
  53. package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
  54. package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
  55. package/.next/server/app/api/relays/[relayId]/route.js +1 -1
  56. package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/relays/route.js +4 -1
  59. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  60. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  65. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js +1 -1
  67. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  68. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js +1 -1
  71. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  72. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/route.js +1 -1
  74. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  75. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js +1 -1
  77. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  78. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js +1 -1
  80. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  81. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  84. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  85. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  96. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  100. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/verification/runs/route.js +1 -1
  102. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  130. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  131. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -1
  188. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  194. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  195. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  228. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  229. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  231. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  234. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  235. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -144
  238. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  241. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  259. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  268. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  271. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  279. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  282. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/api/worktrees/route.js +1 -1
  291. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  292. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  294. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  295. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  296. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/page_client-reference-manifest.js +1 -1
  298. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/review/page.js +1 -1
  301. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  302. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  303. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  304. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  305. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  306. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  307. package/.next/server/app/worktrees/[id]/page.js +10 -10
  308. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  309. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  310. package/.next/server/app-paths-manifest.json +18 -17
  311. package/.next/server/chunks/1308.js +1 -0
  312. package/.next/server/chunks/1501.js +5 -4
  313. package/.next/server/chunks/1656.js +2 -2
  314. package/.next/server/chunks/1957.js +2 -0
  315. package/.next/server/chunks/2119.js +1 -1
  316. package/.next/server/chunks/2445.js +1 -1
  317. package/.next/server/chunks/2897.js +1 -0
  318. package/.next/server/chunks/3417.js +1 -0
  319. package/.next/server/chunks/3505.js +1 -1
  320. package/.next/server/chunks/3801.js +8 -8
  321. package/.next/server/chunks/4207.js +1 -1
  322. package/.next/server/chunks/4490.js +1 -0
  323. package/.next/server/chunks/4911.js +1 -0
  324. package/.next/server/chunks/4936.js +1 -0
  325. package/.next/server/chunks/5209.js +2 -1
  326. package/.next/server/chunks/5350.js +212 -0
  327. package/.next/server/chunks/5354.js +1 -1
  328. package/.next/server/chunks/6130.js +1 -1
  329. package/.next/server/chunks/6401.js +1 -1
  330. package/.next/server/chunks/7023.js +3 -3
  331. package/.next/server/chunks/7905.js +1 -1
  332. package/.next/server/chunks/7926.js +1 -0
  333. package/.next/server/chunks/8581.js +15 -15
  334. package/.next/server/chunks/8728.js +2 -2
  335. package/.next/server/chunks/8782.js +1 -1
  336. package/.next/server/chunks/8807.js +89 -88
  337. package/.next/server/chunks/8918.js +3 -3
  338. package/.next/server/chunks/9169.js +1 -0
  339. package/.next/server/chunks/9390.js +1 -1
  340. package/.next/server/chunks/9584.js +1 -1
  341. package/.next/server/chunks/9627.js +5 -5
  342. package/.next/server/chunks/9702.js +1 -0
  343. package/.next/server/chunks/9731.js +3 -3
  344. package/.next/server/middleware-manifest.json +5 -5
  345. package/.next/server/pages/500.html +1 -1
  346. package/.next/server/server-reference-manifest.json +1 -1
  347. package/.next/static/chunks/{2407-675ba6b21844dc3b.js → 2407-87ec01332344ec2b.js} +1 -1
  348. package/.next/static/chunks/3931-3ef48b8d97357282.js +1 -0
  349. package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
  350. package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
  351. package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
  352. package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
  353. package/.next/static/chunks/app/api/agents/update/route-96fc12d400b49b13.js +1 -0
  354. package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +1 -0
  355. package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +1 -0
  356. package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +1 -0
  357. package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +1 -0
  358. package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +1 -0
  359. package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +1 -0
  360. package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +1 -0
  361. package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +1 -0
  362. package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +1 -0
  363. package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +1 -0
  364. package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +1 -0
  365. package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +1 -0
  366. package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +1 -0
  367. package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +1 -0
  368. package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +1 -0
  369. package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +1 -0
  370. package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +1 -0
  371. package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +1 -0
  372. package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +1 -0
  373. package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +1 -0
  374. package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +1 -0
  375. package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +1 -0
  376. package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +1 -0
  377. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +1 -0
  378. package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +1 -0
  379. package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +1 -0
  380. package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +1 -0
  381. package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +1 -0
  382. package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +1 -0
  383. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +1 -0
  384. package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +1 -0
  385. package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +1 -0
  386. package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +1 -0
  387. package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +1 -0
  388. package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +1 -0
  389. package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +1 -0
  390. package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +1 -0
  391. package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +1 -0
  392. package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +1 -0
  393. package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +1 -0
  394. package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +1 -0
  395. package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +1 -0
  396. package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +1 -0
  397. package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +1 -0
  398. package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +1 -0
  399. package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +1 -0
  400. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +1 -0
  401. package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +1 -0
  402. package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +1 -0
  403. package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +1 -0
  404. package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +1 -0
  405. package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +1 -0
  491. package/.next/static/chunks/app/layout-b9d8aef70e4f17b2.js +1 -0
  492. package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +1 -0
  493. package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
  494. package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
  495. package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.js +1 -0
  496. package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
  497. package/.next/static/chunks/app/sessions/{page-890fd50ec9739973.js → page-c6eb7c02db2f4c80.js} +1 -1
  498. package/.next/static/chunks/app/worktrees/[id]/layout-96fc12d400b49b13.js +1 -0
  499. package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +1 -0
  500. package/.next/trace +13 -13
  501. package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
  502. package/.next/types/routes.d.ts +2 -1
  503. package/.next/types/validator.ts +9 -0
  504. package/dist/cli/commands/ask.d.ts.map +1 -1
  505. package/dist/cli/commands/ask.js +56 -5
  506. package/dist/cli/commands/attach.d.ts +4 -1
  507. package/dist/cli/commands/attach.d.ts.map +1 -1
  508. package/dist/cli/commands/attach.js +19 -7
  509. package/dist/cli/commands/command-target.d.ts +7 -0
  510. package/dist/cli/commands/command-target.d.ts.map +1 -1
  511. package/dist/cli/commands/command-target.js +10 -0
  512. package/dist/cli/commands/instances.d.ts.map +1 -1
  513. package/dist/cli/commands/instances.js +38 -2
  514. package/dist/cli/commands/message-dispatch.d.ts +17 -3
  515. package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
  516. package/dist/cli/commands/message-dispatch.js +14 -8
  517. package/dist/cli/commands/prompt.d.ts.map +1 -1
  518. package/dist/cli/commands/prompt.js +2 -1
  519. package/dist/cli/commands/relays.d.ts +4 -1
  520. package/dist/cli/commands/relays.d.ts.map +1 -1
  521. package/dist/cli/commands/relays.js +146 -8
  522. package/dist/cli/commands/report.d.ts +7 -2
  523. package/dist/cli/commands/report.d.ts.map +1 -1
  524. package/dist/cli/commands/report.js +19 -6
  525. package/dist/cli/commands/respond-strict.d.ts.map +1 -1
  526. package/dist/cli/commands/respond-strict.js +29 -5
  527. package/dist/cli/commands/respond.d.ts +2 -2
  528. package/dist/cli/commands/respond.d.ts.map +1 -1
  529. package/dist/cli/commands/respond.js +40 -37
  530. package/dist/cli/commands/send.d.ts.map +1 -1
  531. package/dist/cli/commands/send.js +8 -4
  532. package/dist/cli/commands/task.d.ts +22 -0
  533. package/dist/cli/commands/task.d.ts.map +1 -1
  534. package/dist/cli/commands/task.js +26 -18
  535. package/dist/cli/commands/wait-instance.d.ts +9 -1
  536. package/dist/cli/commands/wait-instance.d.ts.map +1 -1
  537. package/dist/cli/commands/wait-instance.js +15 -0
  538. package/dist/cli/commands/wait-poll-state.d.ts +18 -0
  539. package/dist/cli/commands/wait-poll-state.d.ts.map +1 -1
  540. package/dist/cli/commands/wait-verify.d.ts +2 -1
  541. package/dist/cli/commands/wait-verify.d.ts.map +1 -1
  542. package/dist/cli/commands/wait-verify.js +5 -1
  543. package/dist/cli/commands/wait.d.ts.map +1 -1
  544. package/dist/cli/commands/wait.js +37 -13
  545. package/dist/cli/commands/whoami.d.ts.map +1 -1
  546. package/dist/cli/commands/whoami.js +3 -1
  547. package/dist/cli/docs/agent-operations.d.ts +1 -1
  548. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  549. package/dist/cli/docs/agent-operations.js +1 -0
  550. package/dist/cli/types/api-responses.d.ts +55 -1
  551. package/dist/cli/types/api-responses.d.ts.map +1 -1
  552. package/dist/cli/utils/api-client-deadline.d.ts +28 -0
  553. package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
  554. package/dist/cli/utils/api-client-deadline.js +46 -0
  555. package/dist/cli/utils/api-client-errors.d.ts +118 -0
  556. package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
  557. package/dist/cli/utils/api-client-errors.js +210 -0
  558. package/dist/cli/utils/api-client.d.ts +33 -109
  559. package/dist/cli/utils/api-client.d.ts.map +1 -1
  560. package/dist/cli/utils/api-client.js +202 -227
  561. package/dist/cli/utils/follow-up-command.d.ts +38 -0
  562. package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
  563. package/dist/cli/utils/follow-up-command.js +57 -0
  564. package/dist/cli/utils/reply-ledger.d.ts +1 -1
  565. package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
  566. package/dist/cli/utils/reply-ledger.js +7 -2
  567. package/dist/cli/utils/server-capabilities.d.ts +18 -0
  568. package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
  569. package/dist/cli/utils/server-capabilities.js +36 -3
  570. package/dist/cli/utils/session-target.d.ts +1 -1
  571. package/dist/cli/utils/session-target.d.ts.map +1 -1
  572. package/dist/cli/utils/session-target.js +3 -0
  573. package/dist/cli/utils/verify-runner.d.ts +7 -0
  574. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  575. package/dist/cli/utils/verify-runner.js +51 -15
  576. package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
  577. package/dist/lib/cli-tools/session-name.js +11 -3
  578. package/dist/lib/cli-tools/types.d.ts +6 -0
  579. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  580. package/dist/lib/session/send-attempt-types.d.ts +25 -0
  581. package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
  582. package/dist/lib/session/send-attempt-types.js +10 -1
  583. package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
  584. package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
  585. package/dist/lib/verification/session-kill-ledger.js +174 -0
  586. package/dist/server/locales/en/worktree.json +9 -0
  587. package/dist/server/locales/ja/worktree.json +9 -0
  588. package/dist/server/src/config/cli-tool-timing-config.js +1 -7
  589. package/dist/server/src/lib/auto-yes-poller.js +5 -1
  590. package/dist/server/src/lib/cli-tools/antigravity.js +5 -2
  591. package/dist/server/src/lib/cli-tools/base.js +39 -0
  592. package/dist/server/src/lib/cli-tools/claude.js +8 -2
  593. package/dist/server/src/lib/cli-tools/codex.js +7 -4
  594. package/dist/server/src/lib/cli-tools/command-code.js +14 -18
  595. package/dist/server/src/lib/cli-tools/copilot.js +159 -28
  596. package/dist/server/src/lib/cli-tools/gemini.js +10 -2
  597. package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
  598. package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
  599. package/dist/server/src/lib/cli-tools/opencode.js +162 -8
  600. package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
  601. package/dist/server/src/lib/cli-tools/session-name.js +11 -3
  602. package/dist/server/src/lib/cli-tools/submit-composer-read.js +57 -14
  603. package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
  604. package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
  605. package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
  606. package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
  607. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +143 -187
  608. package/dist/server/src/lib/cli-tools/vibe-local.js +91 -2
  609. package/dist/server/src/lib/db/chat-db.js +14 -1
  610. package/dist/server/src/lib/db/db-instance.js +114 -2
  611. package/dist/server/src/lib/db/db-migration-path.js +63 -2
  612. package/dist/server/src/lib/db/migrations/index.js +2 -0
  613. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  614. package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -0
  615. package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
  616. package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
  617. package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
  618. package/dist/server/src/lib/db/relay-bind-db.js +88 -167
  619. package/dist/server/src/lib/db/relay-db-base.js +20 -0
  620. package/dist/server/src/lib/db/relay-db-count.js +49 -0
  621. package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
  622. package/dist/server/src/lib/db/relay-db-hold.js +250 -0
  623. package/dist/server/src/lib/db/relay-db.js +33 -92
  624. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
  625. package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
  626. package/dist/server/src/lib/detection/tools/opencode/readiness.js +62 -0
  627. package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +70 -0
  628. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
  629. package/dist/server/src/lib/prompt-answer-errors.js +76 -2
  630. package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
  631. package/dist/server/src/lib/relay/relay-delivery.js +359 -79
  632. package/dist/server/src/lib/relay/relay-messages.js +13 -0
  633. package/dist/server/src/lib/relay/relay-system-line.js +28 -15
  634. package/dist/server/src/lib/relay/types.js +14 -2
  635. package/dist/server/src/lib/session/agent-event-state.js +4 -0
  636. package/dist/server/src/lib/session/agent-session-lifecycle.js +6 -1
  637. package/dist/server/src/lib/session/claude-session.js +26 -7
  638. package/dist/server/src/lib/session/current-output-builder.js +7 -3
  639. package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
  640. package/dist/server/src/lib/session/instance-input-lock.js +47 -2
  641. package/dist/server/src/lib/session/prompt-submit-receipt.js +224 -0
  642. package/dist/server/src/lib/session/prompt-waiting-guard.js +16 -3
  643. package/dist/server/src/lib/session/respond-target.js +82 -0
  644. package/dist/server/src/lib/session/send-attempt-state.js +177 -2
  645. package/dist/server/src/lib/session/send-attempt-types.js +10 -1
  646. package/dist/server/src/lib/session/send-user-message.js +80 -8
  647. package/dist/server/src/lib/session/session-launch-flight.js +243 -0
  648. package/dist/server/src/lib/session/session-starting-state.js +40 -4
  649. package/dist/server/src/lib/session/structured-prompt.js +17 -9
  650. package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
  651. package/dist/server/src/lib/session/worktree-session-reconcile.js +10 -0
  652. package/dist/server/src/lib/session-cleanup.js +32 -0
  653. package/dist/server/src/lib/session-key-sender.js +6 -28
  654. package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
  655. package/dist/server/src/lib/verification/env-snapshot.js +11 -2
  656. package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
  657. package/package.json +5 -1
  658. package/release-notes/0.49.2.json +49 -0
  659. package/release-notes/0.49.3.json +52 -0
  660. package/.next/server/chunks/2422.js +0 -1
  661. package/.next/server/chunks/3773.js +0 -1
  662. package/.next/server/chunks/5630.js +0 -1
  663. package/.next/server/chunks/5775.js +0 -1
  664. package/.next/server/chunks/6808.js +0 -4
  665. package/.next/server/chunks/7604.js +0 -2
  666. package/.next/server/chunks/9198.js +0 -144
  667. package/.next/static/chunks/3931-1a1abab16248f14d.js +0 -1
  668. package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
  669. package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
  670. package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
  671. package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
  672. package/.next/static/chunks/8606-ce17ffa77f39608e.js +0 -1
  673. package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
  674. package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
  675. package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
  676. package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
  677. package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
  678. package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
  679. package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
  680. package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
  681. package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
  682. package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
  683. package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
  684. package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
  685. package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
  686. package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
  687. package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
  688. package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
  689. package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
  690. package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
  691. package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
  692. package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
  693. package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
  694. package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
  695. package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
  696. package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
  697. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
  698. package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
  699. package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
  700. package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
  701. package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
  702. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
  703. package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
  704. package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
  705. package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
  706. package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
  707. package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
  708. package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
  709. package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
  710. package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
  711. package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
  712. package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
  713. package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
  714. package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
  715. package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
  716. package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
  717. package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
  718. package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
  719. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
  720. package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
  721. package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
  722. package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
  723. package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
  724. package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
  725. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
  726. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
  727. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
  728. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
  729. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
  730. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
  731. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
  732. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
  733. package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
  734. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
  735. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
  736. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
  737. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
  738. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
  739. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
  740. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
  741. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
  742. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
  743. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
  744. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
  745. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
  746. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
  747. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
  748. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
  749. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
  750. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
  751. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
  752. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
  753. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
  754. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
  755. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
  756. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
  757. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
  758. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
  759. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
  760. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
  761. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
  796. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
  797. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
  798. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
  799. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
  800. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
  801. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
  802. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
  803. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
  804. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
  805. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
  806. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
  807. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
  808. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
  809. package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
  810. package/.next/static/chunks/app/layout-8bfac4724277b47f.js +0 -1
  811. package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
  812. package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
  813. package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
  814. package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
  815. package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
  816. package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
  817. package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +0 -1
  818. /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_buildManifest.js +0 -0
  819. /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=9731,exports.ids=[9731],exports.modules={8360:(a,b,c)=>{c.r(b),c.d(b,{CLIToolManager:()=>a6});var d=c(89731),e=c(8953),f=c(57905);class g extends d.Mj{navigationKeys(){return{keys:e.pU,leaderKey:null}}async isInstalled(){return await (0,f.zw)()}async isRunning(a,b){return await (0,f.Yq)(a,b)}async launchSession(a,b,c,d){await (0,f.R7)({worktreeId:a,worktreePath:b,instanceId:c,model:d})}async sendMessage(a,b,c){await (0,f.pU)(a,b,c)}supportsImage(){return!0}async sendMessageWithImage(a,b,c,d){let e=`
2
- ![](${c})`,f=b?`${b}${e}`:e;await this.sendMessage(a,f,d)}async killSession(a,b){await (0,f.VU)(a,b)}constructor(...a){super(...a),this.id="claude",this.name="Claude Code",this.command="claude"}}var h=c(79892),i=c(381),j=c(93997),k=c(42422),l=c(11472);let m=["skip","skip-until-next-version","update","ask"],n=Object.freeze({update:"1",skip:"2","skip-until-next-version":"3",ask:null});function o(a){if("string"!=typeof a)return null;let b=a.trim().toLowerCase();return"string"==typeof b&&m.includes(b)?b:null}c(68847);var p=c(61260);c(48800);var q=c(72626),r=c(22354),s=c(99432),t=c(1305),u=c(20610),v=c(69130),w=c(77093),x=c(49973);let y=(0,q.h)("cli-tools/codex"),z="codex";function A(){return{screen:null,attempts:0}}class B extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:y,liveAction:"codex-session-exists",relaunchAction:"codex-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:r.c1,instanceId:c});try{let f=(0,t.wK)({target:{worktreeId:a,cliToolId:r.c1,instanceId:c},executablePath:this.command,worktreePath:b});e||await this.createLaunchPane(d,b);let g=async()=>{(0,t.Fq)({worktreeId:a,cliToolId:r.c1,instanceId:c}),await (0,h.V1)(d,(0,v.Y)(f),!0),await new Promise(a=>setTimeout(a,3e3))};await (0,h.V1)(d,(0,v.Y)(f),!0),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(d,{relaunch:g,trustHooks:(0,s.dO)(b)}),y.info("started-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Codex session: ${a}`)}}}async waitForReady(a,b){let c=b?.trustHooks??!1,d=!1,e=!1,f=A(),g=function(a){let b=o(void 0);if(null!==b)return b;let c=o(((void 0)??process.env).CM_CODEX_UPDATE_DIALOG);return null!==c?c:"skip-until-next-version"}(),i=n[g],j=!1,m=!1,q=!1,r=30;try{for(let o=0;o<r;o++){try{let s=(0,x.TO)(),t=await (0,h.Xg)(a,50),v=(0,k.aJ)(t),w=(0,k.E6)(v);if(("hooks-review"===w||"hooks-list"===w||"hooks-detail"===w)&&await this.answerCodexHooksScreen(a,w,f,c,s)){await new Promise(a=>setTimeout(a,u.CV));continue}if((0,k.zZ)(v))return void y.info("codex-prompt-detected");if(j&&!m&&b?.relaunch&&null!==(0,l.GE)(v,this.livenessSpec())){m=!0,r=Math.max(r,o+1+30),e=!1,f.screen=null,f.attempts=0,q&&(q=!1,(0,p.lM)(z),y.info("codex-update-lock-released",{sessionName:a})),y.info("codex-relaunched-after-update",{sessionName:a,policy:g}),await b.relaunch();continue}let A=(0,k.Qh)(v);if("update"===A){if(j=!0,null===i){await new Promise(a=>setTimeout(a,1e3));continue}if(!d){let b=i;b!==n.update||(0,p.mf)(z)?b===n.update&&(q=!0):(b=n["skip-until-next-version"],y.warn("codex-update-dialog-yielded-to-running-update",{sessionName:a,policy:g,requestedKey:i,key:b}));let c=b,e=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"update"),()=>(0,h.V1)(a,c,!1));if(!e.answered){q&&(q=!1,(0,p.lM)(z)),y.info("codex-update-dialog-answer-skipped",{sessionName:a,reason:e.reason});continue}d=!0,b===n.update&&(r=Math.max(r,o+1+120)),y.info("codex-update-dialog-answered",{sessionName:a,policy:g,key:b}),await new Promise(a=>setTimeout(a,u.CV));continue}}if("press-enter"===A){let b=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"press-enter"),()=>(0,h.ds)(a,"Enter"));if(!b.answered){y.info("codex-notification-answer-skipped",{sessionName:a,reason:b.reason});continue}y.info("dismissed-codex-notification"),await new Promise(a=>setTimeout(a,u.CV));continue}if("trust"===A&&!e){let b=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"trust"),()=>(0,h.V1)(a,"1",!1));if(!b.answered){y.info("codex-trust-dialog-answer-skipped",{sessionName:a,reason:b.reason});continue}e=!0,y.info("auto-trusted-folder-for-codex"),await new Promise(a=>setTimeout(a,u.CV));continue}}catch{}await new Promise(a=>setTimeout(a,1e3))}y.info("codex-prompt-detection")}finally{q&&(q=!1,(0,p.lM)(z),y.warn("codex-update-lock-released-unfinished",{sessionName:a}))}}async isActiveDialogStill(a,b){return(0,k.Qh)((0,k.aJ)(await (0,h.Xg)(a,50)))===b}async answerCodexHooksScreen(a,b,c,d,e){if(c.screen!==b&&(c.screen=b,c.attempts=0),c.attempts>=3)return y.warn("codex-hooks-screen-unresponsive",{sessionName:a,screen:b,trust:d}),!1;let f=c.attempts+1,g=await (0,x.x7)(a,e,async()=>(0,k.E6)((0,k.aJ)(await (0,h.Xg)(a,50)))===b,()=>this.sendCodexHooksScreenKey(a,b,f,d));return g.answered?c.attempts=f:y.info("codex-hooks-screen-answer-skipped",{sessionName:a,screen:b,reason:g.reason}),!0}async sendCodexHooksScreenKey(a,b,c,d){if("hooks-review"===b){let b=1===c?d?"2":"3":"1";await (0,h.V1)(a,b,!1),y.info("codex-hooks-review-answered",{sessionName:a,key:b,attempt:c,trust:d});return}if(d){await (0,h.V1)(a,"t",!1,{literal:!0}),y.info("codex-hooks-screen-trusted",{sessionName:a,screen:b,attempt:c});return}await (0,h.ds)(a,"Escape"),y.info("codex-hooks-screen-escaped",{sessionName:a,screen:b,attempt:c})}async waitForPrompt(a){let b=Date.now(),c=A(),d=null;for(;Date.now()-b<15e3;){try{let b=(0,x.TO)(),e=await (0,h.Xg)(a,50),f=(0,k.aJ)(e),g=(0,k.E6)(f);if("hooks-review"===g||"hooks-list"===g||"hooks-detail"===g){if(null===d){let b=await (0,h.nS)(a);d=null!==b&&(0,s.dO)(b)}await this.answerCodexHooksScreen(a,g,c,d,b)}else if((0,k.zZ)(f))return}catch{}await new Promise(a=>setTimeout(a,500))}throw y.info("codex-prompt-not-detected"),Error("Codex prompt not ready: timed out waiting for the input prompt before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Codex",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"codex",composer:this.describeComposer(),awaitTypedBody:!0}),(0,j.gm)(d),y.info("sent-message-to-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Codex: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:y,stoppedAction:"stopped-codex-session",requestExit:async a=>{await (0,h.ds)(a,"C-d"),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="codex",this.name="Codex CLI",this.command="codex"}}var C=c(23365),D=c(76877),E=c(48217);let F=(0,q.h)("cli-tools/gemini");class G extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:F,liveAction:"gemini-session-exists",relaunchAction:"gemini-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:r.o,instanceId:c});try{e||await this.createLaunchPane(d,b);let f=(0,t.wK)({target:{worktreeId:a,cliToolId:r.o,instanceId:c},executablePath:this.command,worktreePath:b});(0,E.du)(d);try{await (0,x.hC)(d,()=>(0,h.V1)(d,(0,v.Y)(f),!0)),await new Promise(a=>setTimeout(a,6e3)),await this.waitForReady(d)}finally{(0,E.FG)(d)}F.info("started-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Gemini session: ${a}`)}}}async waitForReady(a){let b=!1,c=null,d=new Set;for(let e=0;e<30;e++){try{let e=(0,x.KC)(),f=await (0,h.Xg)(a,C.H),g=(0,k.aJ)(f);if(k.wN.test(g))return void F.info("gemini-prompt-detected");if(!b){let f=(0,D.CZ)(D.g1,g);if("press"===f.action){let d=await (0,x.x7)(a,e,async()=>{let b=(0,D.CZ)(D.g1,(0,k.aJ)(await (0,h.Xg)(a,C.H)));return"press"===b.action&&b.key===f.key},()=>(0,h.ds)(a,f.key),{mode:"exclusive"});d.answered?(b=!0,c=Date.now(),(0,E._F)(a,c),F.info("auto-trusted-folder-for-gemini")):F.info("gemini-trust-answer-skipped",{sessionName:a,reason:d.reason})}else{let b=(0,D.oy)(D.g1,f);b&&"absent"!==f.action&&!d.has(f.reason)&&(d.add(f.reason),F.warn(b.event,{sessionName:a,...b.fields}))}}}catch(b){F.debug("gemini-ready-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}await new Promise(a=>setTimeout(a,1e3))}if(null!==c){let a=5e3-(Date.now()-c);a>0&&await new Promise(b=>setTimeout(b,a))}F.info("gemini-prompt-detection")}async waitForPrompt(a){let b=Date.now();for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,C.H),c=(0,k.aJ)(b);if(k.wN.test(c))return}catch(b){F.debug("gemini-prompt-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}await new Promise(a=>setTimeout(a,500))}F.info("gemini-prompt-not-detected")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Gemini",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"gemini",composer:this.describeComposer()}),(0,j.gm)(d),F.info("sent-message-to-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Gemini: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:F,stoppedAction:"stopped-gemini-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.V1)(a,"/quit",!0),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}var H=c(15194),I=c(88807),J=c(56791);let K=(0,q.h)("cli-tools/vibe-local");class L extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:K,liveAction:"vibe-local-session-exists",relaunchAction:"vibe-local-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:this.id,instanceId:c});try{e||await this.createLaunchPane(d,b);let c="vibe-local -y";try{let b=(0,I.getDbInstance)(),d=(0,J.getWorktreeById)(b,a);d?.vibeLocalModel&&H.QP.test(d.vibeLocalModel)&&(c+=` -m ${d.vibeLocalModel}`);let e=d?.vibeLocalContextWindow;(0,H.FV)(e)&&(c+=` --context-window ${Number(e)}`)}catch{}await (0,h.V1)(d,(0,v.Y)(c),!0),await new Promise(a=>setTimeout(a,5e3)),K.info("started-vibe-local-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Vibe Local session: ${a}`)}}}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Vibe Local",a,c,{relaunch:!0});try{await (0,i.FW)({sessionName:d,message:b,cliToolId:"vibe-local",composer:this.describeComposer(),interEnterWaitMs:u.PY}),(0,j.gm)(d),K.info("sent-message-to-vibe-local-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Vibe Local: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:K,stoppedAction:"stopped-vibe-local-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="vibe-local",this.name="Vibe Local",this.command="vibe-local"}}var M=c(49319),N=c(87673),O=c(81776),P=c(56263),Q=c(21758),R=c(54633),S=c(78099);let T=(0,q.h)("cli-tools/copilot"),U=new Set(["model","agent","theme","permissions","skills","mcp","settings","statusline","subagents","resume","session"]),V=/^[>❯](?:\s|$)/,W=/^\s*\S\s+Loading:/;function X(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=[RegExp(`^\\s*●\\s+Model changed from .+ to ${c}(?=\\s|$)`),RegExp(`^\\s*●\\s+Switched model to:\\s*${c}\\s*$`)],e=RegExp(`^\\s*✗\\s+Model "${c}" is \\S`),f={switched:0,rejected:[]};for(let b of(0,k.aJ)(a).split("\n"))d.some(a=>a.test(b))?f.switched++:e.test(b)&&f.rejected.push(b.trim().replace(/^✗\s+/,""));return f}function Y(a,b){if(!a.isCurrent())throw Error(`Session ${a.sessionName} was handed to another writer before ${b}; input lock lost, nothing was typed (Issue #3945).`)}async function Z(a,b,c){try{await (0,h.V1)(a,b,!0)}catch(a){throw a?.delivery!=="not-started"&&(0,x.kJ)(c),a}}function $(a){let b=(0,k.aJ)(a).split("\n");for(let a=b.length-1;a>=0;a--){let c=b[a].trim().replace(/\s{2,}/g," ");if(""!==c)return JSON.stringify(c.length>80?`${c.slice(0,80)}…`:c)}return"an empty pane"}class _ extends d.Mj{async isInstalled(){return await (0,O.B0)()!==null}launchExecutable(a){return"path"===a.source?this.command:Q.nL}async launchSession(a,b,c){let d=await (0,O.B0)();if(!d)throw(0,S.Tl)(this);let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:T,liveAction:"copilot-session-exists",relaunchAction:"copilot-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:R.V,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:R.V,instanceId:c},executablePath:this.launchExecutable(d),worktreePath:b});f||await this.createLaunchPane(e,b),(0,E.du)(e);try{await (0,h.V1)(e,(0,v.Y)(g),!0),await this.waitForReady(e)}finally{(0,E.FG)(e)}T.info("started-copilot-session",{executableSource:d.source,version:d.version})}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Copilot session: ${a}`)}}}async answerFolderTrustDialog(a,b,c){if(!(0,k.Rx)(b))return!1;let d=await (0,x.x7)(a,c,async()=>(0,k.Rx)((0,k.aJ)(await (0,h.Xg)(a,50))),()=>(0,h.V1)(a,k.oD,!1));return d.answered?((0,E._F)(a),(0,j.gm)(a),T.info("copilot-folder-trust-answered"),!0):(T.info("copilot-folder-trust-answer-skipped",{reason:d.reason}),!1)}isComposerDrawn(a){let b=a.split("\n");for(let a=1;a<b.length-1;a++)if(V.test(b[a])&&k.A.test(b[a-1].trimEnd())&&k.A.test(b[a+1].trimEnd()))return!0;return!1}async waitForReady(a){let b=!1;for(let c=0;c<30;c++){try{let c=(0,x.TO)(),d=await (0,h.Xg)(a,50),e=(0,k.aJ)(d);if(this.isComposerDrawn(e))return void T.info("copilot-prompt-detected");!b&&await this.answerFolderTrustDialog(a,e,c)&&(b=!0)}catch{}await new Promise(a=>setTimeout(a,1e3))}T.info("copilot-prompt-detection-timeout")}async waitForPrompt(a,b=15e3,c="composer"){let d=Date.now(),e=!1,f="";for(;Date.now()-d<b;){try{let b=(0,x.TO)(),d=await (0,h.Xg)(a,50);if(f=(0,k.aJ)(d),this.isReadyFor(c,f))return{ready:!0,output:f};!e&&await this.answerFolderTrustDialog(a,f,b)&&(e=!0)}catch{}await new Promise(a=>setTimeout(a,500))}return T.info("copilot-prompt-not-detected",{until:c,bottomRow:$(f)}),{ready:!1,output:f}}isReadyFor(a,b){if(!k.Du.test(b))return!1;let c=b.split("\n");return!function(a){for(let b=a.length-1;b>=0;b--)if(""!==a[b].trim())return W.test(a[b]);return!1}(c)&&("composer"===a||"idle"===(0,k.Wn)(c))}extractSlashCommand(a){let b=a.trim();if(!b.startsWith("/"))return null;let c=b.match(/^\/(\S+)/);return c?c[1]:null}async waitForSelectionList(a){let b=Date.now();for(;Date.now()-b<5e3;){await new Promise(a=>setTimeout(a,300));try{let b=await (0,h.Xg)(a,50),c=(0,k.aJ)(b);if((0,k.gT)(c.split("\n")))return T.info("copilot-selection-list-detected"),!0}catch{}}return T.info("copilot-selection-list-not-detected-timeout"),!1}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!0});try{let a=this.extractSlashCommand(b);if(a&&U.has(a)){await (0,x.hC)(d,async c=>{await (0,x.KA)(c);let e=await this.waitForPrompt(d);if(await (0,N.H0)(d,"copilot"),!e.ready)throw T.warn("copilot-selection-list-not-sent:prompt-not-ready",{command:a,bottomRow:$(e.output)}),Error("copilot prompt not ready within 15000ms, so the selection-list command was not sent; nothing was typed");Y(c,"the selection-list command"),(0,x.dy)(),await Z(d,b,c),await this.waitForSelectionList(d)}),(0,j.gm)(d),T.info("sent-selection-list-command-to-copilot",{command:a});return}await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"copilot",composer:this.describeComposer(),textInputWaitMs:P.L1,verifyDelayMs:P.wp}),(0,j.gm)(d),T.info("sent-message-to-copilot-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Copilot: ${a}`)}}async sendModelCommand(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!1});try{await (0,x.hC)(d,a=>this.switchModelUnderInputLock(d,b,a))}catch(d){let a=(0,w.u1)(d),c=d?.code;throw Object.assign(Error(`Failed to switch Copilot model to ${b}: ${a}`),"string"==typeof c?{code:c}:{})}}async switchModelUnderInputLock(a,b,c){await (0,x.KA)(c);let d=await this.waitForPrompt(a,P.pL,"idle");if(!d.ready)throw T.warn("copilot-model-switch-not-idle",{model:b,bottomRow:$(d.output)}),Error(`copilot did not become idle within ${P.pL}ms, so /model was not sent`);let e=X(d.output,b);await (0,N.H0)(a,"copilot"),Y(c,"/model"),await Z(a,`/model ${b}`,c);let f=await this.waitForModelSwitchOutcome(a,b,e);if((0,j.gm)(a),"rejected"===f.kind)throw T.warn("copilot-model-rejected",{model:b,reason:f.reason}),Error(`copilot refused it: ${f.reason}`);if("pending"===f.kind)throw T.warn("copilot-model-switch-unconfirmed",{model:b,bottomRow:f.bottomRow}),Error(`copilot printed no answer to /model within ${P.pL}ms; the switch may still take effect, and nothing further was typed`);T.info("copilot-model-switched",{model:b})}async waitForModelSwitchOutcome(a,b,c){let d=Date.now(),e="";for(;Date.now()-d<P.pL;){await new Promise(a=>setTimeout(a,250));try{e=await (0,h.Xg)(a,50)}catch{continue}let d=function(a,b,c){let d=X(b,c);return d.rejected.length>a.rejected.length?{kind:"rejected",reason:d.rejected[d.rejected.length-1]}:d.switched>a.switched?{kind:"switched"}:{kind:"pending"}}(c,e,b);if("pending"!==d.kind)return d}return{kind:"pending",bottomRow:$(e)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:T,stoppedAction:"stopped-copilot-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.V1)(a,"/exit",!1),await new Promise(a=>setTimeout(a,P.L1)),await (0,h.KB)(a,["Enter"]),await new Promise(a=>setTimeout(a,u.Rk))}})}constructor(...a){super(...a),this.id="copilot",this.name="Copilot",this.command="copilot"}}var aa=c(61878),ab=c(69082),ac=c(83406);let ad=(0,q.h)("cli-tools/antigravity"),ae=/\?\s+for\s+shortcuts/;function af(a){if(null===a)return{screen:"no-capture",screenTail:[]};let b=(0,k.aJ)(a).split("\n").map(a=>a.trimEnd()).filter(a=>""!==a.trim()),c=(0,aa.zJ)(a,"antigravity").lastLines;return{screen:0===b.length?"blank":(0,ab.VI)(c)?"trust-dialog":ah(a)?"ready":"other",screenTail:b.slice(-5).map(a=>a.slice(0,160))}}function ag(a,b,c){let d=(0,D.oy)(D.z0,b);!d||"absent"===b.action||"press"===b.action||c.has(b.reason)||(c.add(b.reason),ad.warn(d.event,{sessionName:a,...d.fields}))}function ah(a){let b=(0,aa.zJ)(a,"antigravity");if(k.kT.test(b.lastLines)||ab.wf.test(b.lastLines))return!1;let c=function(a){let b=a.map(a=>a.trim()),c=a=>a>=0&&k.kn.test(b[a]),d=a=>{let c=a;for(;c>=0&&""===b[c];)c--;return c},e=b.length-1,f="";return(e>=0&&!c(e)&&(f=b[e],e=d(e-1)),!c(e)||(e=d(e-1))<0||!k.lE.test(b[e]))?null:c(d(e-1))?f:null}(b.contentLines);return null!==c&&(!!ae.test(c)||!(0,k.ut)("antigravity",b.lastLines))}class ai extends d.Mj{async launchSession(a,b,c,d){await this.requireInstalled();let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:ad,liveAction:"antigravity-session-exists",relaunchAction:"antigravity-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:r.F0,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:r.F0,instanceId:c},executablePath:this.command,worktreePath:b}),i=d?`${g} --model '${d.replace(/'/g,"'\\''")}'`:g;f||await this.createLaunchPane(e,b),(0,ac.zu)(e);try{await (0,h.V1)(e,(0,v.Y)(i),!0),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(e)}finally{(0,ac.F1)(e)}ad.info("started-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Antigravity session: ${a}`)}}}async waitForReady(a){let b;(0,ac.R6)(a);let c=!1,d=new Set,e=null,f=0;for(let g=0;g<30;g++){try{let b=(0,x.TO)(),f=await (0,h.Xg)(a,50),g=(0,k.aJ)(f);if(e=f,ah(g))return void ad.info("antigravity-prompt-detected");if(!c){let e=(0,D.CZ)(D.z0,g);if("press"===e.action&&!(0,ac.jI)(a)){let d=e.key,f=await (0,x.x7)(a,b,()=>this.isTrustPressStill(a,d),()=>(0,h.ds)(a,d));if(f.answered){c=!0,ad.info("auto-trusted-folder-for-antigravity"),await new Promise(a=>setTimeout(a,500));continue}ad.info("antigravity-trust-answer-skipped",{sessionName:a,reason:f.reason})}ag(a,e,d)}}catch(a){f++,b=(0,w.u1)(a)}await new Promise(a=>setTimeout(a,1e3))}c||(0,ac.Qn)(a),ad.info("antigravity-prompt-detection-timeout",{sessionName:a,attempts:30,trustDialogHandled:c,...c?{}:{reason:"startup-trust-unhandled"},...af(e),captureErrors:f,...void 0!==b?{lastCaptureError:b}:{}})}async isTrustPressStill(a,b){let c=(0,k.aJ)(await (0,h.Xg)(a,50)),d=(0,D.CZ)(D.z0,c);return"press"===d.action&&d.key===b}async waitForPrompt(a){let b,c=Date.now(),d=c+((0,ac.Dc)(a)?6e4:15e3),e=new Set,f=null,g=0;for(;Date.now()<d;){try{let b=(0,x.TO)(),c=await (0,h.Xg)(a,50),g=(0,k.aJ)(c);if(f=c,ah(g))return void(0,ac.R6)(a);let i=(0,ab.VI)((0,aa.zJ)(g,"antigravity").lastLines)?(0,D.CZ)(D.z0,g):null;null!==i&&"press"!==i.action&&(0,ac.Dc)(a)&&ag(a,i,e);let j=i?.action==="press"?i.key:null,l=null!==j&&(0,ac.Dc)(a)?await (0,x.x7)(a,b,()=>this.isTrustPressStill(a,j),async()=>!!(0,ac.qT)(a)&&(await (0,h.ds)(a,j),!0)):null;if(null===l||l.answered||ad.info("antigravity-trust-answer-skipped",{sessionName:a,reason:l.reason,afterLaunchWindow:!0}),l?.answered===!0&&l.value){ad.info("auto-trusted-folder-for-antigravity",{sessionName:a,afterLaunchWindow:!0}),d=Math.max(d,Date.now()+15e3),await new Promise(a=>setTimeout(a,500));continue}}catch(a){g++,b=(0,w.u1)(a)}await new Promise(a=>setTimeout(a,500))}let i=(0,ac.Dc)(a),j=af(f);ad.info("antigravity-prompt-not-ready",{sessionName:a,waitedMs:Date.now()-c,...i?{reason:"startup-trust-unhandled"}:{},...j,captureErrors:g,...void 0!==b?{lastCaptureError:b}:{}});let l="trust-dialog"===j.screen?' (the folder-trust confirmation "Do you trust the contents of this project?" is on screen and needs an answer)':i?" (startup-trust-unhandled: agy had not shown its folder-trust confirmation when the launch window ended, and it has not appeared since)":"";throw Error(`Antigravity prompt not ready: timed out waiting for the input prompt before sending${l}`)}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Antigravity",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"antigravity",composer:this.describeComposer()}),(0,j.gm)(d),ad.info("sent-message-to-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Antigravity: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:ad,stoppedAction:"stopped-antigravity-session",requestExit:async a=>{await (0,h.ds)(a,"C-d"),await new Promise(a=>setTimeout(a,u.Zf))},afterKill:a=>{(0,j.gm)(a),(0,ac.R6)(a)}})}constructor(...a){super(...a),this.id="antigravity",this.name="Antigravity CLI",this.command="agy"}}var aj=c(7321),ak=c(28862),al=c(35566),am=c(2669);let an=(0,q.h)("cli-tools/command-code"),ao=["--trust","--skip-onboarding","--no-auto-update"];function ap(a){let b=a.split("\n");return!(0>(0,k.I$)(b))&&!k.k0.test((0,k.aJ)(a))}class aq extends d.Mj{navigationKeys(){return{keys:e.G2,leaderKey:null}}async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:an,liveAction:"command-code-session-exists",relaunchAction:"command-code-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:ak.k,instanceId:c}),this.composerPendingSince.set(d,Date.now());try{var g;e||await this.createLaunchPane(d,b),await (0,h.V1)(d,(0,v.Y)((g={target:{worktreeId:a,cliToolId:ak.k,instanceId:c},executablePath:this.command,worktreePath:b},[(0,t.wK)(g),...ao].join(" "))),!0),await new Promise(a=>setTimeout(a,u.yO)),await this.waitForReady(d),an.info("started-command-code-session")}catch(a){throw this.composerPendingSince.delete(d),Error(`Failed to start Command Code session: ${(0,w.u1)(a)}`)}}}async waitForReady(a){for(let b=0;b<30;b++){try{let b=await (0,h.Xg)(a,50);if(ap(b)){this.composerPendingSince.delete(a),an.info("command-code-prompt-detected");return}}catch{}await new Promise(a=>setTimeout(a,1e3))}an.info("command-code-prompt-detection-timeout")}async waitForPrompt(a){let b=Date.now(),c=0;for(;Date.now()-b<15e3;){let b=!1;try{let c=await (0,h.Xg)(a,50);if(!(b=null!==(0,al.V)(c))&&ap(c))return void this.composerPendingSince.delete(a)}catch{}if((c=b?c+1:0)>=2)throw an.info("command-code-plan-review-blocks-send",{sessionName:a}),Object.assign(Error('Command Code is showing a plan review (REVIEW), which takes review comments, not messages. Comment with `commandmate respond <worktree-id> "<text>"`, then `--plan-review submit` (ctrl+r), `--plan-review approve` (ctrl+a) or `--plan-review cancel` (esc).'),{code:aj.Le});await new Promise(a=>setTimeout(a,500))}let d=this.composerPendingSince.get(a);if(void 0!==d){let b=Date.now()-d;if(b<=12e4)throw an.info("command-code-session-still-starting",{sessionName:a,sinceLaunchMs:b}),new am.Sr(this.name,a,b);this.composerPendingSince.delete(a)}throw an.info("command-code-prompt-not-ready"),Error("Command Code prompt not ready: timed out waiting for the composer before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Command Code",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"command-code",composer:this.describeComposer()}),(0,j.gm)(d),an.info("sent-message-to-command-code-session")}catch(b){if((0,am.wQ)(b))throw b;let a=Error(`Failed to send message to Command Code: ${(0,w.u1)(b)}`);if(b?.code===aj.Le)throw Object.assign(a,{code:aj.Le});throw a}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:an,stoppedAction:"stopped-command-code-session",requestExit:async a=>{await (0,h.V1)(a,"/exit",!1),await new Promise(a=>setTimeout(a,u.pL)),await (0,h.KB)(a,["Enter"]),await new Promise(a=>setTimeout(a,u.Zf))},afterKill:a=>{this.composerPendingSince.delete(a),(0,j.gm)(a)}})}constructor(...a){super(...a),this.id="command-code",this.name="Command Code CLI",this.command="commandcode",this.composerPendingSince=new Map}}var ar=c(79646),as=c(28354),at=c(16983),au=c(46684),av=c(34114),aw=c(62887),ax=c(72272),ay=c(49154),az=c(40255),aA=c(95375),aB=c(27870),aC=c(57510),aD=c(90488),aE=c(51719),aF=c(83738),aG=c(26945),aH=c(38892),aI=c(16100),aJ=c(71193);let aK=(0,q.h)("lib/hooks/sources/opencode-v2/ingest");async function aL(a,b){let[{getDbInstance:d},{getWorktreeById:e},{applyAgentStopEvent:f}]=await Promise.all([Promise.resolve().then(c.bind(c,88807)),Promise.resolve().then(c.bind(c,56791)),Promise.all([c.e(1356),c.e(6065),c.e(1191),c.e(3480),c.e(5456),c.e(2710),c.e(1501),c.e(6486),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void aK.info("opencode-v2-stop-unresolved-target",{worktreeId:a.worktreeId});await f(g,h,aJ.B,b)}async function aM(a,b,c){let d=(0,aG.bH)(a),e=(0,aH.X3)(a);if(null===d||null===e)return null;let f=await (0,av.$F)(d,e,b),g=f?.find(a=>(0,aC.Qd)(a)&&a.id===c);return(0,aC.Qd)(g)?g:null}async function aN(a,b,c){let d=(0,aF.hl)(b.raw,b.receivedAt);if(!d)return aK.info("opencode-v2-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let e=await (0,ax.t)(aI.Wp,a,d,aI.Wp.parsePermissionRequest(b.raw));return aK.info("opencode-v2-permission-decided",{worktreeId:a.worktreeId,instanceId:c,decisionId:d.id,behavior:e.behavior,reason:e.reason,delivered:e.delivered,settled:e.settled}),e.settled}async function aO(a,b,c){let d=(0,aF.rk)(b.raw);if(d)return d;let e=(0,aE.DH)(b.raw),f=(0,aE.lx)(b.raw);if(null===e||null===f)return null;let g=await c(a,f,e);return g?(0,aF.rk)(g):null}async function aP(a,b,c=aL,d=aM){let e=a.instanceId??aJ.B;try{let f=(0,aA.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:aJ.B,instanceId:e,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:aI.Wp.eventIdentityOf(b.raw),identityKind:aI.Wp.capabilities.eventIdentity});if(f.duplicate)return void aK.info("opencode-v2-event-duplicate-dropped",{worktreeId:a.worktreeId,instanceId:e,event:b.event,detail:b.detail,by:f.by});let g={event:b.event,at:b.receivedAt,detail:b.detail?.slice(0,aw.h9)??null,sessionId:b.conversationId,message:null,model:b.model},h={sessionStartMayArriveLate:!1};if("notification"===b.event&&b.detail===aE.xz){g.decisionId=(0,aE.DH)(b.raw);let c=(0,aF.vF)(b.raw);g.toolName=c?.toolName??(0,aE.Dg)(b.raw),g.decisionPatterns=c?.patterns??null,g.message=(0,aF.s8)(b.raw)?.slice(0,aB.lY)??null,g.promptSettled=await aN(a,b,e),(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h)}else if("notification"===b.event&&b.detail===aE.er)g.decisionId=(0,aE.DH)(b.raw),g.promptSettled=!0,(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),g.decisionId&&(0,az.L0)({worktreeId:a.worktreeId,cliToolId:aJ.B,instanceId:e},g.decisionId);else if("notification"===b.event&&b.detail===aE.Ai){let c=await aO(a,b,d);g.message=c?.questions[0]?.question.slice(0,aB.lY)??null,(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),c&&(0,aA.recordAskUserQuestion)(a.worktreeId,aJ.B,e,c,b.receivedAt),(0,aA.reportQuestionPending)(a.worktreeId,aJ.B,e,{toolName:ay.GF,decisionId:(0,aE.DH)(b.raw),detail:aE.Ai},b.receivedAt),aK.info("opencode-v2-question-recorded",{worktreeId:a.worktreeId,instanceId:e,decisionId:(0,aE.DH)(b.raw),parsed:null!==c,questionCount:c?.questions.length??0}),await (0,aD.Vo)(a,e,g.message,b.receivedAt)}else"stop"===b.event?(b.detail===aE.dA&&(g.message=(0,aE.ZL)(b.raw)?.slice(0,aB.lY)??null,aK.error("opencode-v2-turn-failed",{worktreeId:a.worktreeId,instanceId:e,sessionId:b.conversationId,message:g.message})),(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),await c(a,e)):(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h);aK.info("opencode-v2-event-received",{worktreeId:a.worktreeId,instanceId:e,type:(0,aE.Cr)(b.raw),event:b.event,detail:b.detail})}catch(c){aK.error("opencode-v2-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:e,event:b.event,error:c instanceof Error?c.message:String(c)})}}var aQ=c(32301);let aR=(0,q.h)("lib/hooks/sources/opencode-v2/runtime"),aS=[0,500,1e3,2e3];function aT(a,b){return{worktreeId:a,cliToolId:aJ.B,instanceId:b}}function aU(a){return a instanceof Error?a.message:String(a)}async function aV(a,b){try{let c=await (0,aG.ui)(a,b);if(null===c)return null;return(0,aH.OC)(a),c}catch(b){return aR.warn("opencode-v2-server-reserve-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),null}}async function aW(a,b){let c=(0,aH.X3)(a);return null!==c&&"healthy"===(await (0,av.tJ)(b,c)).kind}async function aX(a){try{let b=(0,aG.bH)(a);if(null===b)return!1;if((0,aQ.yw)(a))return!0;let c=!1;for(let d of aS)if(d>0&&await new Promise(a=>setTimeout(a,d)),await aW(a,b)){c=!0;break}if(!c)return aR.info("opencode-v2-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!1;return await aI.Wp.subscribe(a,b=>{aP(a,b)}),aR.info("opencode-v2-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!0}catch(b){return aR.warn("opencode-v2-event-stream-attach-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),!1}}async function aY(a,b){try{if((0,aQ.yw)(a))return!0;let c=await (0,aG.Lv)(a,b,b=>aW(a,b));if(null===c)return!1;return await aX(a)}catch(b){return aR.warn("opencode-v2-event-stream-resume-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),!1}}async function aZ(a){try{await (0,aQ.VV)(a)}catch(b){aR.warn("opencode-v2-subscription-close-failed",{worktreeId:a.worktreeId,error:aU(b)})}try{(0,aG.OZ)(a)}catch(b){aR.warn("opencode-v2-port-forget-failed",{worktreeId:a.worktreeId,error:aU(b)})}try{(0,aH.Nc)(a)}catch(b){aR.warn("opencode-v2-password-remove-failed",{worktreeId:a.worktreeId,error:aU(b)})}}var a$=c(93949),a_=c(18140);let a0=(0,q.h)("cli-tools/opencode-v2"),a1=(0,as.promisify)(ar.execFile),a2=at.xT,a3=/^\/\S+$/,a4=[...e.qD,e.Mx,...e.TM,"a","l","m"];class a5 extends d.Mj{navigationKeys(){return{keys:a4,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,a_.Qq)()).executable}async isRunning(a,b){let c=this.getSessionName(a,b),d=await (0,h.N)(c);return d&&this.resumeInBackground(a,c,b),d}resumeInBackground(a,b,c){let d=aT(a,c);if((0,aQ.yw)(d))return;let e=Date.now(),f=this.resumeAttemptedAt.get(b);void 0!==f&&e-f<3e4||(this.resumeAttemptedAt.set(b,e),(async()=>{try{let a=await (0,h.nS)(b);if(null===a)return;await aY(d,a)}catch(a){a0.debug("opencode-v2-lazy-resume-failed",{error:(0,w.u1)(a)})}})())}async launchSession(a,b,c){let d=(await (0,a_.Qq)()).executable;if(!d)throw(0,S.Tl)(this);let e=this.getSessionName(a,c),f=aT(a,c),g={windowWidth:(0,au.r)({warnSidebar:!1}),windowHeight:at.xT},i=await (0,h.N)(e);if(i){if(await this.reconcileExistingSession(e,b,g),await this.isToolLive(e,{confirm:!0})){await aY(f,b),a0.info("opencode-v2-session-exists");return}a0.warn("opencode-v2-session-relaunch",{sessionName:e}),await aZ(f)}(0,t.Fq)(f);try{i||await this.createLaunchPane(e,b);try{await a1("tmux",["resize-window","-t",(0,h.lA)(e),"-x",String(g.windowWidth),"-y",String(g.windowHeight)])}catch{}let j=await aV(f,b);null===j&&a0.warn("opencode-v2-launch-without-server",{worktreeId:a,instanceId:c}),await (0,h.V1)(e,(0,v.Y)((0,t.wK)({target:f,executablePath:d.path,worktreePath:b})),!0),await this.waitForReady(e),await aX(f),a0.info("started-opencode-v2-session")}catch(a){throw Error(`Failed to start OpenCode V2 session: ${(0,w.u1)(a)}`)}}async waitForReady(a){for(let b=0;b<60;b++){try{let c=(0,k.aJ)(await (0,h.Xg)(a,a2));if((0,k.Ok)(c))return a0.info("opencode-v2-composer-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return a0.info("opencode-v2-ready-detection-timeout"),!1}async waitForComposer(a){let b=Date.now()+u.D1;for(;;){let c=null;try{let b=(0,k.aJ)(await (0,h.Xg)(a,a2));if(c=(0,k.dF)(b),null===c&&(0,k.Ok)(b))return}catch{}if(null!==c)throw Error(`OpenCode V2 composer not available: the "${c}" dialog is open. Close it (esc) or finish the choice, then send again`);if(Date.now()>=b)break;await new Promise(a=>setTimeout(a,500))}throw Error("OpenCode V2 composer not ready: timed out waiting for it before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("OpenCode V2",a,c,{relaunch:!0});try{await this.waitForComposer(d),await (0,i.FW)({sessionName:d,message:a3.test(b)?`${b} `:b,cliToolId:aJ.B,composer:this.describeComposer()}),(0,j.gm)(d),a0.info("sent-message-to-opencode-v2-session")}catch(a){throw Error(`Failed to send message to OpenCode V2: ${(0,w.u1)(a)}`)}}async killSession(a,b){let c=this.getSessionName(a,b),d=aT(a,b),e=(0,aG.bH)(d);try{if(await (0,h.N)(c)){await (0,h.V1)(c,a$.M0,!1),await new Promise(a=>setTimeout(a,u.pL)),await (0,h.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,u.Lw));let a=await (0,a$.rY)({sessionAlive:()=>(0,h.N)(c),portAnswering:null===e?null:async()=>"unreachable"!==(await (0,av.tJ)(e,"")).kind});a.ok||(a0.info("opencode-v2-graceful-exit-postcondition-unmet",{sessionName:c,reason:a.reason,...null!==e?{port:e}:{}}),await (0,h.fY)(c))}else await (0,h.fY)(c);(0,j.gm)(c),this.resumeAttemptedAt.delete(c),a0.info("stopped-opencode-v2-session")}catch(a){throw a0.error("session:stop-failed",{error:(0,w.u1)(a)}),a}finally{await aZ(d)}}constructor(...a){super(...a),this.id=aJ.B,this.name="OpenCode V2",this.command=aJ.V,this.resumeAttemptedAt=new Map}}class a6{constructor(){this.tools=new Map,this.tools.set("claude",new g),this.tools.set("codex",new B),this.tools.set("gemini",new G),this.tools.set("vibe-local",new L),this.tools.set("opencode",new M.Ui),this.tools.set("copilot",new _),this.tools.set("antigravity",new ai),this.tools.set("command-code",new aq),this.tools.set("opencode-v2",new a5)}static getInstance(){return a6.instance||(a6.instance=new a6),a6.instance}getTool(a){let b=this.tools.get(a);if(!b)throw Error(`CLI tool '${a}' not found`);return b}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(a){let b=this.getTool(a),c=await b.isInstalled();return{id:b.id,name:b.name,command:b.command,installed:c}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async a=>{let b=await a.isInstalled();return{id:a.id,name:a.name,command:a.command,installed:b}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(a=>a.installed)}async stopPollers(a,b,d){let{stopPolling:e}=await Promise.all([c.e(1356),c.e(1503),c.e(1634),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(3480),c.e(8728),c.e(1601),c.e(8918),c.e(610),c.e(1656),c.e(5220)]).then(c.bind(c,95220));e(a,b,d)}}},17287:(a,b,c)=>{c.d(b,{CD:()=>g,nL:()=>f});var d=c(24455);let e=(0,c(36925).v)("__permissionDecisions",()=>new Map);function f(a,b,c,f){e.set((0,d.v7)(a,b,c),f)}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??null}},23365:(a,b,c)=>{c.d(b,{H:()=>g,y:()=>h});var d=c(16983),e=c(34405),f=c(15194);let g=200;function h(a){var b;return{statusLines:"opencode"===(b=a)?d.xT:"gemini"===b?g:e.G,usesAlternateScreen:(0,f.VA)(a)}}},34405:(a,b,c)=>{c.d(b,{G:()=>e,_:()=>d});let d=1e4,e=1e3},35566:(a,b,c)=>{c.d(b,{V:()=>l});var d=c(51297),e=c(91478);let f=/^\s*type \+ enter to comment\b/i,g=/^\s*enter to pin\s*·\s*esc discard\s*$/i,h=/^\s*↑\/↓ choose\s*·\s*enter to run\s*$/i,i=/^\s*❯ +(?:Submit review\b|Approve\s+ctrl\+a\b|Cancel\s+esc\b)/im,j=/^\s*REVIEW\s+(\d+)\s+pending comments?\b/im,k=/\(•\)\s+with\s+\d+\s+comments?\s+as\s+notes/i;function l(a){if(!a)return null;let b=(0,d.aJ)(a.replace(/\r\n/g,"\n")).split("\n").filter(a=>""!==a.trim()).slice(-15);if(0===b.length)return null;let c=b.join("\n"),l=j.exec(c),m=l?Number(l[1]):0;if((0,e.a9)(c))return{phase:"approve-choice",pendingComments:m,approveChoice:k.test(c)?"with-comments":"discard-comments"};if(!(0,e.tH)(c))return null;let n=b[b.length-1],o="unknown";return i.test(c)||h.test(n)?o="action-focus":g.test(n)?o="comment-box":f.test(n)&&(o="body"),{phase:o,pendingComments:m,approveChoice:null}}},39333:(a,b,c)=>{c.d(b,{$Y:()=>h,Bg:()=>j,Fg:()=>e,HB:()=>g,df:()=>i,f9:()=>d});let d=[".png",".jpg",".jpeg",".gif",".webp",".svg"],e=0x1400000,f=[{extension:".png",mimeType:"image/png",magicBytes:[137,80,78,71]},{extension:".jpg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".jpeg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".gif",mimeType:"image/gif",magicBytes:[71,73,70,56]},{extension:".webp",mimeType:"image/webp",magicBytes:[82,73,70,70]},{extension:".svg",mimeType:"image/svg+xml"}];function g(a){return a?a.startsWith(".")?a.toLowerCase():"."+a.toLowerCase():""}function h(a){let b=g(a),c=f.find(a=>a.extension===b);return c?.mimeType||"application/octet-stream"}function i(a){if(!a)return!1;let b=g(a);return d.includes(b)}function j(a,b){if(b.length>e)return{valid:!1,error:`File size exceeds ${e/1024/1024}MB limit`,reason:"too-large"};if(".svg"===g(a)){var c;return(c=b.toString("utf-8")).includes("<svg")||c.startsWith("<?xml")?/<script[\s>]/i.test(c)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(c)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(c)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(c)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(a,b){let c=g(a),d=f.find(a=>a.extension===c);if(!d?.magicBytes)return".svg"===c;let e=d.magicBytesOffset||0;return!(b.length<e+d.magicBytes.length)&&d.magicBytes.every((a,c)=>b[e+c]===a)}(a,b)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}d.filter(a=>".svg"!==a).map(a=>h(a)).filter(a=>"application/octet-stream"!==a).join(",")},46684:(a,b,c)=>{c.d(b,{r:()=>f});var d=c(16983);let e=(0,c(72626).h)("cli-tools/opencode-pane-width");function f(a){let b=process.env[d.ao],c=(0,d._u)(),f=b?.trim(),g=void 0!==f&&(!/^\d+$/.test(f)||Number.parseInt(f,10)!==c);return void 0!==b&&g?e.warn("opencode-pane-width-rejected",{requested:b,applied:c}):a.warnSidebar&&c>=d.Lg&&e.warn("opencode-pane-width-sidebar-visible",{width:c,sidebarMinWidth:d.Lg}),c}},48217:(a,b,c)=>{c.d(b,{FG:()=>h,_F:()=>j,du:()=>g,mN:()=>i,to:()=>k});var d=c(36925);let e=(0,d.v)("__launchWindows",()=>new Map),f=(0,d.v)("__launchDialogPresses",()=>new Map);function g(a){e.set(a,(e.get(a)??0)+1),f.delete(a)}function h(a){let b=e.get(a)??0;b<=1?e.delete(a):e.set(a,b-1)}function i(a){return e.has(a)}function j(a,b=Date.now()){f.set(a,b)}function k(a,b=Date.now()){let c=f.get(a);return void 0!==c&&b-c<3e4}},49319:(a,b,c)=>{c.d(b,{Ui:()=>aB,TZ:()=>aA});var d=c(89731),e=c(8953),f=c(79892),g=c(42422),h=c(381),i=c(93997),j=c(29021),k=c(21820),l=c(33873),m=c(8004),n=c(72626);let o=(0,n.h)("cli-tools/opencode-config"),p=/^[a-zA-Z0-9._:/-]{1,100}$/,q=/^[a-zA-Z0-9._:/@-]{1,200}$/,r="CM_OPENCODE_LOCAL_PROVIDER_CONFIG",s="OPENCODE_CONFIG",t=["opencode.json","opencode.jsonc",l.join(".opencode","opencode.json"),l.join(".opencode","opencode.jsonc")],u=["opencode.json","opencode.jsonc"];async function v(){let a={};try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch("http://localhost:11434/api/tags",{signal:b.signal}).finally(()=>{clearTimeout(c)});if(!d.ok)return o.warn("ollama-api-returned"),{};let e=await d.text();if(e.length>1048576)return o.warn("ollama-api-response"),{};let f=JSON.parse(e);if(!f||!Array.isArray(f.models))return o.warn("invalid-ollama-api"),{};for(let b of f.models.slice(0,100))"string"==typeof b?.name&&p.test(b.name)&&(a[b.name]={name:function(a){let b=String(a.name),c=a.details;if(!c)return b;let d=[b];return"string"==typeof c.parameter_size&&/^[\d.]+[BKMGT]?B?$/i.test(c.parameter_size)&&d.push(c.parameter_size),"string"==typeof c.quantization_level&&/^[A-Z0-9_]{1,20}$/i.test(c.quantization_level)&&d.push(c.quantization_level),d.length>1?`${b} (${d.slice(1).join(", ")})`:b}(b)})}catch(a){a instanceof Error&&"AbortError"===a.name?o.warn("ollama-api-timeout"):o.warn("failed-to-fetch")}return a}async function w(){let a={};try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch("http://localhost:1234/v1/models",{signal:b.signal}).finally(()=>{clearTimeout(c)});if(!d.ok)return o.warn("lm-studio-api"),{};let e=await d.text();if(e.length>1048576)return o.warn("lm-studio-api"),{};let f=JSON.parse(e);if(!f||!Array.isArray(f.data))return o.warn("invalid-lm-studio"),{};for(let b of f.data.slice(0,100))"string"==typeof b?.id&&q.test(b.id)&&(a[b.id]={name:b.id})}catch(a){a instanceof Error&&"AbortError"===a.name?o.warn("lm-studio-api"):o.warn("failed-to-fetch")}return a}function x(a=process.env){let b=l.join(k.homedir(),".config");return l.join((0,m.T)(a.XDG_CONFIG_HOME,b,"XDG_CONFIG_HOME"),"opencode")}async function y(){let[a,b]=await Promise.all([v(),w()]),c={};return Object.keys(a).length>0&&(c.ollama={npm:"@ai-sdk/openai-compatible",name:"Ollama (local)",options:{baseURL:"http://localhost:11434/v1"},models:a}),Object.keys(b).length>0&&(c.lmstudio={npm:"@ai-sdk/openai-compatible",name:"LM Studio (local)",options:{baseURL:"http://localhost:1234/v1"},models:b}),c}async function z(a){let b=function(a=process.env){let b=(a[r]??"").trim().toLowerCase();return"worktree"===b||"project"===b?"worktree":"global"===b||"user"===b?"global":(""!==b&&"off"!==b&&"0"!==b&&"false"!==b&&"none"!==b&&o.warn("opencode-config-mode-unrecognised",{variable:r,value:b}),"off")}();if("off"===b)return{written:!1,configPath:null,reason:"disabled"};let c="worktree"===b?function(a){let b=l.resolve(a);try{if(!j.lstatSync(b).isDirectory())throw Error(`Path is not a directory: ${b}`)}catch(a){if("ENOENT"===a.code)throw Error(`Path does not exist: ${b}`);throw a}return j.realpathSync(b)}(a):null,d=function(a,b=process.env){if(""!==(b[s]??"").trim())return`env:${s}`;if(null!==a)for(let b of t){let c=l.join(a,b);if(j.existsSync(c))return c}let c=x(b);for(let a of u){let b=l.join(c,a);if(j.existsSync(b))return b}return null}(c);if(null!==d)return o.info("opencode-config-generation-skipped",{mode:b,owned:d}),{written:!1,configPath:null,reason:"existing-config"};let e=c??x(),f=l.join(e,"opencode.json"),g=await y();if(0===Object.keys(g).length)return{written:!1,configPath:null,reason:"no-providers"};try{"global"===b&&j.mkdirSync(e,{recursive:!0}),j.writeFileSync(f,JSON.stringify({$schema:"https://opencode.ai/config.json",provider:g},null,2),{encoding:"utf-8",flag:"wx"})}catch(a){if("EEXIST"===a.code)return{written:!1,configPath:null,reason:"existing-config"};return o.warn("failed-to-write-opencodejson:error-insta"),{written:!1,configPath:null,reason:"write-failed"}}return o.info("opencode-config-generated",{mode:b,configPath:f}),{written:!0,configPath:f,reason:"written"}}var A=c(16983),B=c(46684),C=c(79646),D=c(28354),E=c(39333),F=c(1305),G=c(49791),H=c(62887),I=c(72272),J=c(49154),K=c(40255),L=c(95375),M=c(27870),N=c(57510),O=c(70096),P=c(75356),Q=c(98211),R=c(90488),S=c(85322);let T=(0,n.h)("lib/hooks/sources/opencode/ingest");async function U(a,b,c){let d=(0,O.VM)(S.k),e=(0,Q.Lu)(b.raw,b.receivedAt);if(!e)return T.info("opencode-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let f=await (0,I.t)(d,a,e,d.parsePermissionRequest(b.raw));return T.info("opencode-permission-decided",{worktreeId:a.worktreeId,instanceId:c,decisionId:e.id,behavior:f.behavior,reason:f.reason,delivered:f.delivered,settled:f.settled}),f.settled}async function V(a,b){let[{getDbInstance:d},{getWorktreeById:e},{applyAgentStopEvent:f}]=await Promise.all([Promise.resolve().then(c.bind(c,88807)),Promise.resolve().then(c.bind(c,56791)),Promise.all([c.e(1356),c.e(6065),c.e(1191),c.e(3480),c.e(5456),c.e(2710),c.e(1501),c.e(6486),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void T.info("opencode-stop-unresolved-target",{worktreeId:a.worktreeId});let i=await f(g,h,S.k,b);T.info("opencode-stop-applied",{worktreeId:a.worktreeId,instanceId:b,taskId:i.taskId,taskEventApplied:i.taskEventApplied,verificationRunId:i.verificationRunId})}async function W(a,b){let c=a.instanceId??S.k;try{let d=(0,O.VM)(S.k),e=(0,L.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:S.k,instanceId:c,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:d.eventIdentityOf(b.raw),identityKind:d.capabilities.eventIdentity});if(e.duplicate)return void T.info("opencode-event-duplicate-dropped",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail,by:e.by});let f={event:b.event,at:b.receivedAt,detail:b.detail?.slice(0,H.h9)??null,sessionId:b.conversationId,message:(function(a){let b=(0,N.Qd)(a.raw.properties)?a.raw.properties:{};if(a.detail===P.aF)return(0,N.NZ)(b,["metadata","command"])??(0,N.O2)(b,"permission");if(a.detail===P.Tm){let a=b.questions;return Array.isArray(a)&&(0,N.Qd)(a[0])?(0,N.O2)(a[0],"question"):null}return a.detail===P.vE?(0,N.NZ)(b,["error","data","message"])??(0,N.NZ)(b,["error","name"]):null})(b)?.slice(0,M.lY)??null,model:b.model},g={sessionStartMayArriveLate:d.capabilities.sessionStartMayArriveLate};if("notification"===b.event&&b.detail===P.aF){f.decisionId=(0,N.O2)((0,N.Qd)(b.raw.properties)?b.raw.properties:{},"id");let d=(0,Q.LF)(b.raw,b.receivedAt);f.toolName=d?.toolName??null,f.decisionPatterns=d?.patterns??null,f.promptSettled=await U(a,b,c),(0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g);return}if("notification"===b.event&&b.detail===P.C8){f.decisionId=(0,P.Mn)(b.raw),f.promptSettled=!!(0,O.VM)(S.k).capabilities.permissionReplyReleasesPrompt||(T.info("opencode-permission-reply-not-releasing",{worktreeId:a.worktreeId,instanceId:c,reason:"capability-permissionReplyReleasesPrompt-false"}),!1),(0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g),f.decisionId&&(0,K.L0)({worktreeId:a.worktreeId,cliToolId:S.k,instanceId:c},f.decisionId),T.info("opencode-permission-reply-observed",{worktreeId:a.worktreeId,instanceId:c,decisionId:f.decisionId,released:f.promptSettled});return}if((0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g),"notification"===b.event&&b.detail===P.Tm){let d=(0,O.VM)(S.k).parseQuestion(b.raw);d&&((0,L.recordAskUserQuestion)(a.worktreeId,S.k,c,d,b.receivedAt),(0,L.reportQuestionPending)(a.worktreeId,S.k,c,{toolName:J.GF,decisionId:d.promptId,detail:P.Tm},b.receivedAt),T.info("opencode-question-recorded",{worktreeId:a.worktreeId,instanceId:c,decisionId:d.promptId,questionCount:d.questions.length,optionCounts:d.questions.map(a=>a.choices.length)})),await (0,R.Vo)(a,c,f.message??null,b.receivedAt);return}if("stop"===b.event)return void await V(a,c);"notification"===b.event&&b.detail===P.vE&&await (0,R.dJ)(a,c,(0,N.NZ)((0,N.Qd)(b.raw.properties)?b.raw.properties:{},["error","name"]),f.message??null,b.conversationId,b.receivedAt),T.info("opencode-event-received",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail})}catch(d){T.error("opencode-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:c,event:b.event,error:d instanceof Error?d.message:String(d)})}}var X=c(84574),Y=c(85965),Z=c(33198);let $=(0,n.h)("lib/hooks/sources/opencode/runtime");function _(a,b){return{worktreeId:a,cliToolId:"opencode",instanceId:b}}async function aa(a,b){try{return await (0,X.CU)(a,b)}catch(b){return $.warn("opencode-port-reserve-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),null}}let ab=[0,500,1e3,2e3,4e3];async function ac(a,b){for(let[c,d]of ab.entries()){d>0&&await new Promise(a=>setTimeout(a,d));let e=await (0,G.sc)(b);if("healthy"===e.kind)return c>0&&$.info("opencode-server-reachable-after-retry",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempt:c}),e.health;if("rejected"===e.kind){$.warn("opencode-server-refused-commandmate",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,status:e.status,consequence:"structured events are off for this session; the scraper decides"});break}}return null}async function ad(a){try{let b=(0,X.hC)(a);if(null===b)return!1;if((0,Z.wb)(a))return!0;let c=await ac(a,b);if(!c)return $.info("opencode-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempts:ab.length}),!1;await Y.cC.subscribe(a,b=>{W(a,b)});let d=await ae(a);return $.info("opencode-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,version:c.version,activity:d}),!0}catch(b){return $.warn("opencode-event-stream-attach-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ae(a){let b=null;try{b=await Y.cC.probeActivity(a)}catch(b){$.debug("opencode-activity-probe-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:b instanceof Error?b.message:String(b)})}return(0,Z.yn)(a,b,Date.now()),b}async function af(a,b){try{if((0,Z.wb)(a))return!0;let c=await (0,X.jp)(a,b);if(null===c)return!1;return await ad(a)}catch(b){return $.warn("opencode-event-stream-resume-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ag(a){let b=a.instanceId??a.cliToolId;try{let c=(0,X.hC)(a);if(null===c)return!1;let d=(0,Z.lf)(a);if("live"!==d.state)return $.info("opencode-abort-skipped-not-live",{worktreeId:a.worktreeId,instanceId:b,port:c,liveness:d.state}),!1;let e=(0,Z.ym)(a);if(null===e)return $.info("opencode-abort-skipped-no-session",{worktreeId:a.worktreeId,instanceId:b,port:c}),!1;let f=(0,Z.H1)(a,e,2e3);if(!await (0,G.UR)(c,e))return f.cancel(),$.warn("opencode-abort-rejected",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!1;if(!await f.seen)return $.warn("opencode-abort-unconfirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e,timeoutMs:2e3}),!1;return $.info("opencode-abort-confirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!0}catch(c){return $.warn("opencode-abort-failed",{worktreeId:a.worktreeId,instanceId:b,error:c instanceof Error?c.message:String(c)}),!1}}async function ah(a){try{await (0,Z.FN)(a),(0,X.kE)(a)}catch(b){$.warn("opencode-event-stream-release-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)})}}var ai=c(18529),aj=c(70849),ak=c(27939),al=c(93949),am=c(20610),an=c(78099),ao=c(18140),ap=c(79748);let aq=/^timestamp=(\S+)/,ar=/no such column: ?[A-Za-z0-9_.]*/;async function as(a,b){let c;try{c=await (0,ap.open)(a,"r");let{size:d}=await c.stat(),e=Math.min(d,b),f=d-e,g=Buffer.alloc(e);await c.read(g,0,e,f);let h=g.toString("utf8");return f>0&&(h=h.slice(h.indexOf("\n")+1)),h}catch{return null}finally{await c?.close().catch(()=>{})}}async function at(a,b=function(){let a=process.env.XDG_DATA_HOME||(0,l.join)((0,k.homedir)(),".local","share");return(0,l.join)(a,"opencode","log","opencode.log")}()){let c=await as(b,262144);if(null===c)return null;let d=a-1e3;for(let a of c.split("\n")){let b=aq.exec(a);if(!b)continue;let c=Date.parse(b[1]);if(Number.isNaN(c)||c<d)continue;let e=ar.exec(a);if(e)return e[0]}return null}var au=c(69130),av=c(77093),aw=c(49973);let ax=(0,n.h)("cli-tools/opencode"),ay=(0,D.promisify)(C.execFile),az=[0,50,100,200];function aA(a,b){return a?`${a}
1
+ "use strict";exports.id=9731,exports.ids=[9731],exports.modules={12693:(a,b,c)=>{c.r(b),c.d(b,{CLIToolManager:()=>bh});var d=c(89731),e=c(8953),f=c(57905);class g extends d.Mj{navigationKeys(){return{keys:e.pU,leaderKey:null}}async isInstalled(){return await (0,f.zw)()}async isRunning(a,b){return await (0,f.Yq)(a,b)}async launchSession(a,b,c,d){await (0,f.R7)({worktreeId:a,worktreePath:b,instanceId:c,model:d})}async sendMessage(a,b,c){await (0,f.pU)(a,b,c)}supportsImage(){return!0}async sendMessageWithImage(a,b,c,d){await this.sendMessage(a,this.imageMessageBody(b,c),d)}imageMessageBody(a,b){let c=`
2
+ ![](${b})`;return a?`${a}${c}`:c}async killSession(a,b){await (0,f.VU)(a,b)}constructor(...a){super(...a),this.id="claude",this.name="Claude Code",this.command="claude"}}var h=c(79892),i=c(4405),j=c(93997),k=c(54490),l=c(11472);let m=["skip","skip-until-next-version","update","ask"],n=Object.freeze({update:"1",skip:"2","skip-until-next-version":"3",ask:null});function o(a){if("string"!=typeof a)return null;let b=a.trim().toLowerCase();return"string"==typeof b&&m.includes(b)?b:null}c(68847);var p=c(61260);c(48800);var q=c(72626),r=c(22354),s=c(99432),t=c(1305),u=c(20610),v=c(69130),w=c(77093),x=c(49973);let y=(0,q.h)("cli-tools/codex"),z="codex";function A(){return{screen:null,attempts:0}}class B extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:y,liveAction:"codex-session-exists",relaunchAction:"codex-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:r.c1,instanceId:c});try{let f=(0,t.wK)({target:{worktreeId:a,cliToolId:r.c1,instanceId:c},executablePath:this.command,worktreePath:b});e||await this.createLaunchPane(d,b);let g=async()=>{(0,t.Fq)({worktreeId:a,cliToolId:r.c1,instanceId:c}),await this.typeLaunchLines(d,[(0,v.Y)(f)]),await new Promise(a=>setTimeout(a,3e3))};await this.typeLaunchLines(d,[(0,v.Y)(f)]),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(d,{relaunch:g,trustHooks:(0,s.dO)(b)}),y.info("started-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Codex session: ${a}`)}}}async waitForReady(a,b){let c=b?.trustHooks??!1,d=!1,e=!1,f=A(),g=function(a){let b=o(void 0);if(null!==b)return b;let c=o(((void 0)??process.env).CM_CODEX_UPDATE_DIALOG);return null!==c?c:"skip-until-next-version"}(),i=n[g],j=!1,m=!1,q=!1,r=30;try{for(let o=0;o<r;o++){try{let s=(0,x.TO)(),t=await (0,h.Xg)(a,50),v=(0,k.aJ)(t),w=(0,k.E6)(v);if(("hooks-review"===w||"hooks-list"===w||"hooks-detail"===w)&&await this.answerCodexHooksScreen(a,w,f,c,s)){await new Promise(a=>setTimeout(a,u.CV));continue}if((0,k.zZ)(v))return void y.info("codex-prompt-detected");if(j&&!m&&b?.relaunch&&null!==(0,l.GE)(v,this.livenessSpec())){m=!0,r=Math.max(r,o+1+30),e=!1,f.screen=null,f.attempts=0,q&&(q=!1,(0,p.lM)(z),y.info("codex-update-lock-released",{sessionName:a})),y.info("codex-relaunched-after-update",{sessionName:a,policy:g}),await b.relaunch();continue}let A=(0,k.Qh)(v);if("update"===A){if(j=!0,null===i){await new Promise(a=>setTimeout(a,1e3));continue}if(!d){let b=i;b!==n.update||(0,p.mf)(z)?b===n.update&&(q=!0):(b=n["skip-until-next-version"],y.warn("codex-update-dialog-yielded-to-running-update",{sessionName:a,policy:g,requestedKey:i,key:b}));let c=b,e=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"update"),()=>(0,h.V1)(a,c,!1));if(!e.answered){q&&(q=!1,(0,p.lM)(z)),y.info("codex-update-dialog-answer-skipped",{sessionName:a,reason:e.reason});continue}d=!0,b===n.update&&(r=Math.max(r,o+1+120)),y.info("codex-update-dialog-answered",{sessionName:a,policy:g,key:b}),await new Promise(a=>setTimeout(a,u.CV));continue}}if("press-enter"===A){let b=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"press-enter"),()=>(0,h.ds)(a,"Enter"));if(!b.answered){y.info("codex-notification-answer-skipped",{sessionName:a,reason:b.reason});continue}y.info("dismissed-codex-notification"),await new Promise(a=>setTimeout(a,u.CV));continue}if("trust"===A&&!e){let b=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"trust"),()=>(0,h.V1)(a,"1",!1));if(!b.answered){y.info("codex-trust-dialog-answer-skipped",{sessionName:a,reason:b.reason});continue}e=!0,y.info("auto-trusted-folder-for-codex"),await new Promise(a=>setTimeout(a,u.CV));continue}}catch{}await new Promise(a=>setTimeout(a,1e3))}y.info("codex-prompt-detection")}finally{q&&(q=!1,(0,p.lM)(z),y.warn("codex-update-lock-released-unfinished",{sessionName:a}))}}async isActiveDialogStill(a,b){return(0,k.Qh)((0,k.aJ)(await (0,h.Xg)(a,50)))===b}async answerCodexHooksScreen(a,b,c,d,e){if(c.screen!==b&&(c.screen=b,c.attempts=0),c.attempts>=3)return y.warn("codex-hooks-screen-unresponsive",{sessionName:a,screen:b,trust:d}),!1;let f=c.attempts+1,g=await (0,x.x7)(a,e,async()=>(0,k.E6)((0,k.aJ)(await (0,h.Xg)(a,50)))===b,()=>this.sendCodexHooksScreenKey(a,b,f,d));return g.answered?c.attempts=f:y.info("codex-hooks-screen-answer-skipped",{sessionName:a,screen:b,reason:g.reason}),!0}async sendCodexHooksScreenKey(a,b,c,d){if("hooks-review"===b){let b=1===c?d?"2":"3":"1";await (0,h.V1)(a,b,!1),y.info("codex-hooks-review-answered",{sessionName:a,key:b,attempt:c,trust:d});return}if(d){await (0,h.V1)(a,"t",!1,{literal:!0}),y.info("codex-hooks-screen-trusted",{sessionName:a,screen:b,attempt:c});return}await (0,h.ds)(a,"Escape"),y.info("codex-hooks-screen-escaped",{sessionName:a,screen:b,attempt:c})}async waitForPrompt(a){let b=Date.now(),c=A(),d=null;for(;Date.now()-b<15e3;){try{let b=(0,x.TO)(),e=await (0,h.Xg)(a,50),f=(0,k.aJ)(e),g=(0,k.E6)(f);if("hooks-review"===g||"hooks-list"===g||"hooks-detail"===g){if(null===d){let b=await (0,h.nS)(a);d=null!==b&&(0,s.dO)(b)}await this.answerCodexHooksScreen(a,g,c,d,b)}else if((0,k.zZ)(f))return}catch{}await new Promise(a=>setTimeout(a,500))}throw y.info("codex-prompt-not-detected"),Error("Codex prompt not ready: timed out waiting for the input prompt before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Codex",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"codex",composer:this.describeComposer(),awaitTypedBody:!0}),(0,j.gm)(d),y.info("sent-message-to-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Codex: ${a}`,{cause:b})}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:y,stoppedAction:"stopped-codex-session",requestExit:async a=>{await (0,h.ds)(a,"C-d"),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="codex",this.name="Codex CLI",this.command="codex"}}var C=c(23365),D=c(76877),E=c(48217);let F=(0,q.h)("cli-tools/gemini");class G extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:F,liveAction:"gemini-session-exists",relaunchAction:"gemini-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:r.o,instanceId:c});try{e||await this.createLaunchPane(d,b);let f=(0,t.wK)({target:{worktreeId:a,cliToolId:r.o,instanceId:c},executablePath:this.command,worktreePath:b});(0,E.du)(d);try{await this.typeLaunchLines(d,[(0,v.Y)(f)]),await new Promise(a=>setTimeout(a,6e3)),await this.waitForReady(d)}finally{(0,E.FG)(d)}F.info("started-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Gemini session: ${a}`)}}}async waitForReady(a){let b=!1,c=null,d=new Set;for(let e=0;e<30;e++){try{let e=(0,x.KC)(),f=await (0,h.Xg)(a,C.H),g=(0,k.aJ)(f);if(k.wN.test(g))return void F.info("gemini-prompt-detected");if(!b){let f=(0,D.CZ)(D.g1,g);if("press"===f.action){let d=await (0,x.x7)(a,e,async()=>{let b=(0,D.CZ)(D.g1,(0,k.aJ)(await (0,h.Xg)(a,C.H)));return"press"===b.action&&b.key===f.key},()=>(0,h.ds)(a,f.key),{mode:"exclusive"});d.answered?(b=!0,c=Date.now(),(0,E._F)(a,c),F.info("auto-trusted-folder-for-gemini")):F.info("gemini-trust-answer-skipped",{sessionName:a,reason:d.reason})}else{let b=(0,D.oy)(D.g1,f);b&&"absent"!==f.action&&!d.has(f.reason)&&(d.add(f.reason),F.warn(b.event,{sessionName:a,...b.fields}))}}}catch(b){F.debug("gemini-ready-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}await new Promise(a=>setTimeout(a,1e3))}if(null!==c){let a=5e3-(Date.now()-c);a>0&&await new Promise(b=>setTimeout(b,a))}F.info("gemini-prompt-detection")}async waitForPrompt(a){let b=Date.now();for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,C.H),c=(0,k.aJ)(b);if(k.wN.test(c))return}catch(b){F.debug("gemini-prompt-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}await new Promise(a=>setTimeout(a,500))}throw F.info("gemini-prompt-not-detected"),Error("Gemini prompt not ready: timed out waiting for the input prompt before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Gemini",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"gemini",composer:this.describeComposer()}),(0,j.gm)(d),F.info("sent-message-to-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Gemini: ${a}`,{cause:b})}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:F,stoppedAction:"stopped-gemini-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.V1)(a,"/quit",!0),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}var H=c(15194),I=c(51297),J=c(95595);let K=/^ctx:\d+%\s*[>❯]/,L=/^ctx:\d+%\s*[>❯]\s*$/,M=[/^\s*─{3,}\s*$/,/^\s*✦\s.*│/,/^\s*ESC: stop\s*$/];function N(a){let b=(0,I.aJ)(a).split("\n"),c=-1;for(let a=b.length-1;a>=0;a--)if(K.test(b[a])){c=a;break}if(c<0)return!1;let d=b.slice(c+1).filter(a=>""!==a.trim()).some(a=>!M.some(b=>b.test(a)));if(L.test(b[c])&&!d)return!0;if(!d)return!1;let e=(0,J.WC)(a,"vibe-local");return!e.hasActivePrompt&&(0,J.f8)(e)}var O=c(72312),P=c(88807),Q=c(56791);let R=(0,q.h)("cli-tools/vibe-local");class S extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:R,liveAction:"vibe-local-session-exists",relaunchAction:"vibe-local-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:this.id,instanceId:c});try{e||await this.createLaunchPane(d,b);let c="vibe-local -y";try{let b=(0,P.getDbInstance)(),d=(0,Q.getWorktreeById)(b,a);d?.vibeLocalModel&&H.QP.test(d.vibeLocalModel)&&(c+=` -m ${d.vibeLocalModel}`);let e=d?.vibeLocalContextWindow;(0,H.FV)(e)&&(c+=` --context-window ${Number(e)}`)}catch{}await this.typeLaunchLines(d,[(0,v.Y)(c)]),await new Promise(a=>setTimeout(a,5e3)),R.info("started-vibe-local-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Vibe Local session: ${a}`)}}}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Vibe Local",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"vibe-local",composer:this.describeComposer(),interEnterWaitMs:u.PY,readiness:{label:"Vibe Local",isReady:N}}),(0,j.gm)(d),R.info("sent-message-to-vibe-local-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Vibe Local: ${a}`,{cause:b})}}async waitForPrompt(a){let b=Date.now()+15e3,c=(0,O.uo)();for(;Date.now()<b;){let d=!1;try{let e=await (0,O.IS)(()=>(0,h.Xg)(a,200),b);if(null===e)break;if(N(e))return;d=c.observe(function(a){let b=(0,J.WC)(a,"vibe-local");return b.hasActivePrompt&&!(0,J.f8)(b)}(e))}catch(b){c.reset(),R.debug("vibe-local-prompt-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}if(d)throw R.warn("vibe-local-prompt-wait-dialog",{sessionName:a,reads:c.reads}),(0,O.cA)(a,"Vibe Local");let e=b-Date.now();if(e<=0)break;await new Promise(a=>setTimeout(a,Math.min(500,e)))}throw R.info("vibe-local-prompt-not-detected"),Error("Vibe Local prompt not ready: timed out waiting for the input prompt before sending")}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:R,stoppedAction:"stopped-vibe-local-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="vibe-local",this.name="Vibe Local",this.command="vibe-local"}}var T=c(90580),U=c(87673),V=c(7321),W=c(81776),X=c(56263),Y=c(21758),Z=c(54633),$=c(78099);let _=(0,q.h)("cli-tools/copilot"),aa=O.yp,ab=new Set(["model","agent","theme","permissions","skills","mcp","settings","statusline","subagents","resume","session"]),ac=/^[>❯](?:\s|$)/,ad=/^\s*\S\s+Loading:/;function ae(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=[RegExp(`^\\s*●\\s+Model changed from .+ to ${c}(?=\\s|$)`),RegExp(`^\\s*●\\s+Switched model to:\\s*${c}\\s*$`)],e=RegExp(`^\\s*✗\\s+Model "${c}" is \\S`),f={switched:0,rejected:[]};for(let b of(0,k.aJ)(a).split("\n"))d.some(a=>a.test(b))?f.switched++:e.test(b)&&f.rejected.push(b.trim().replace(/^✗\s+/,""));return f}function af(a,b){if(!a.isCurrent())throw Error(`Session ${a.sessionName} was handed to another writer before ${b}; input lock lost, nothing was typed (Issue #3945).`)}async function ag(a,b,c){try{await (0,h.V1)(a,b,!0)}catch(a){throw a?.delivery!=="not-started"&&(0,x.kJ)(c),a}}function ah(a){let b=(0,k.aJ)(a).split("\n");for(let a=b.length-1;a>=0;a--){let c=b[a].trim().replace(/\s{2,}/g," ");if(""!==c)return JSON.stringify(c.length>80?`${c.slice(0,80)}…`:c)}return"an empty pane"}async function ai(a){try{await (0,U.H0)(a,"copilot")}catch(a){if(a.code===V.a9)throw a}}function aj(a){throw _.warn("input-recheck-prompt-waiting",{sessionName:a,cliToolId:"copilot",confirmedMs:aa}),Object.assign(Error(`A prompt dialog stayed open in session ${a} for ${aa}ms while the copilot composer was awaited (re-checked under the input lock); nothing was typed (Issue #4067).`),{code:V.a9})}class ak extends d.Mj{async isInstalled(){return await (0,W.B0)()!==null}launchExecutable(a){return"path"===a.source?this.command:Y.nL}async launchSession(a,b,c){let d=await (0,W.B0)();if(!d)throw(0,$.Tl)(this);let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:_,liveAction:"copilot-session-exists",relaunchAction:"copilot-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:Z.V,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:Z.V,instanceId:c},executablePath:this.launchExecutable(d),worktreePath:b});f||await this.createLaunchPane(e,b),(0,E.du)(e);try{await this.typeLaunchLines(e,[(0,v.Y)(g)]),await this.waitForReady(e)}finally{(0,E.FG)(e)}_.info("started-copilot-session",{executableSource:d.source,version:d.version})}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Copilot session: ${a}`)}}}async answerFolderTrustDialog(a,b,c){if(!(0,k.Rx)(b))return!1;let d=await (0,x.x7)(a,c,async()=>(0,k.Rx)((0,k.aJ)(await (0,h.Xg)(a,50))),()=>(0,h.V1)(a,k.oD,!1));return d.answered?((0,E._F)(a),(0,j.gm)(a),_.info("copilot-folder-trust-answered"),!0):(_.info("copilot-folder-trust-answer-skipped",{reason:d.reason}),!1)}isComposerDrawn(a){let b=a.split("\n");for(let a=1;a<b.length-1;a++)if(ac.test(b[a])&&k.A.test(b[a-1].trimEnd())&&k.A.test(b[a+1].trimEnd()))return!0;return!1}async waitForReady(a){let b=!1;for(let c=0;c<30;c++){try{let c=(0,x.TO)(),d=await (0,h.Xg)(a,50),e=(0,k.aJ)(d);if(this.isComposerDrawn(e))return void _.info("copilot-prompt-detected");!b&&await this.answerFolderTrustDialog(a,e,c)&&(b=!0)}catch{}await new Promise(a=>setTimeout(a,1e3))}_.info("copilot-prompt-detection-timeout")}async waitForPrompt(a,b=15e3,c="composer"){let d=Date.now()+b,e=!1,f="",g=(0,O.uo)();for(;Date.now()<d;){try{let b=(0,x.TO)(),i=await (0,O.IS)(()=>(0,h.Xg)(a,50),d);if(null===i)break;if(f=(0,k.aJ)(i),this.isReadyFor(c,f))return{ready:!0,output:f};if(!e&&await this.answerFolderTrustDialog(a,f,b)&&(e=!0),g.observe(this.isRefusableDialog(i,f)))return _.info("copilot-prompt-wait-dialog",{until:c,reads:g.reads,bottomRow:ah(f)}),{ready:!1,output:f,dialog:!0}}catch{g.reset()}let b=d-Date.now();if(b<=0)break;await new Promise(a=>setTimeout(a,Math.min(500,b)))}return _.info("copilot-prompt-not-detected",{until:c,bottomRow:ah(f)}),{ready:!1,output:f}}isRefusableDialog(a,b){return!((0,k.Rx)(b)||this.isReadyFor("composer",b))&&(0,J.WC)(a,"copilot").hasActivePrompt}isReadyFor(a,b){if(!k.Du.test(b))return!1;let c=b.split("\n");return!function(a){for(let b=a.length-1;b>=0;b--)if(""!==a[b].trim())return ad.test(a[b]);return!1}(c)&&("composer"===a||"idle"===(0,k.Wn)(c))}extractSlashCommand(a){let b=a.trim();if(!b.startsWith("/"))return null;let c=b.match(/^\/(\S+)/);return c?c[1]:null}async waitForSelectionList(a){let b=Date.now();for(;Date.now()-b<5e3;){await new Promise(a=>setTimeout(a,300));try{let b=await (0,h.Xg)(a,50),c=(0,k.aJ)(b);if((0,k.gT)(c.split("\n")))return _.info("copilot-selection-list-detected"),!0}catch{}}return _.info("copilot-selection-list-not-detected-timeout"),!1}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!0});try{let a=this.extractSlashCommand(b);if(a&&ab.has(a)){await (0,x.hC)(d,async c=>{await (0,x.KA)(c);let e=await this.waitForPrompt(d);if(e.dialog&&aj(d),await (0,U.H0)(d,"copilot"),!e.ready)throw _.warn("copilot-selection-list-not-sent:prompt-not-ready",{command:a,bottomRow:ah(e.output)}),Error("copilot prompt not ready within 15000ms, so the selection-list command was not sent; nothing was typed");af(c,"the selection-list command"),(0,x.dy)(),await ag(d,b,c),await this.waitForSelectionList(d)}),(0,j.gm)(d),_.info("sent-selection-list-command-to-copilot",{command:a});return}let c=await this.waitForPrompt(d);if(!c.ready)throw c.dialog&&aj(d),await ai(d),_.warn("copilot-message-not-sent:prompt-not-ready",{bottomRow:ah(c.output)}),Error("copilot prompt not ready within 15000ms, so the message was not sent; nothing was typed");await (0,i.FW)({sessionName:d,message:b,cliToolId:"copilot",composer:this.describeComposer(),textInputWaitMs:X.L1,verifyDelayMs:X.wp,readiness:this.inputReadiness}),(0,j.gm)(d),_.info("sent-message-to-copilot-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Copilot: ${a}`,{cause:b})}}async sendModelCommand(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!1});try{await (0,x.hC)(d,a=>this.switchModelUnderInputLock(d,b,a))}catch(d){let a=(0,w.u1)(d),c=d?.code;throw Object.assign(Error(`Failed to switch Copilot model to ${b}: ${a}`),"string"==typeof c?{code:c}:{})}}async switchModelUnderInputLock(a,b,c){await (0,x.KA)(c);let d=await this.waitForPrompt(a,X.pL,"idle");if(!d.ready)throw d.dialog&&aj(a),_.warn("copilot-model-switch-not-idle",{model:b,bottomRow:ah(d.output)}),Error(`copilot did not become idle within ${X.pL}ms, so /model was not sent`);let e=ae(d.output,b);await (0,U.H0)(a,"copilot"),af(c,"/model"),await ag(a,`/model ${b}`,c);let f=await this.waitForModelSwitchOutcome(a,b,e);if((0,j.gm)(a),"rejected"===f.kind)throw _.warn("copilot-model-rejected",{model:b,reason:f.reason}),Error(`copilot refused it: ${f.reason}`);if("pending"===f.kind)throw _.warn("copilot-model-switch-unconfirmed",{model:b,bottomRow:f.bottomRow}),Error(`copilot printed no answer to /model within ${X.pL}ms; the switch may still take effect, and nothing further was typed`);_.info("copilot-model-switched",{model:b})}async waitForModelSwitchOutcome(a,b,c){let d=Date.now(),e="";for(;Date.now()-d<X.pL;){await new Promise(a=>setTimeout(a,250));try{e=await (0,h.Xg)(a,50)}catch{continue}let d=function(a,b,c){let d=ae(b,c);return d.rejected.length>a.rejected.length?{kind:"rejected",reason:d.rejected[d.rejected.length-1]}:d.switched>a.switched?{kind:"switched"}:{kind:"pending"}}(c,e,b);if("pending"!==d.kind)return d}return{kind:"pending",bottomRow:ah(e)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:_,stoppedAction:"stopped-copilot-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.V1)(a,"/exit",!1),await new Promise(a=>setTimeout(a,X.L1)),await (0,h.KB)(a,["Enter"]),await new Promise(a=>setTimeout(a,u.Rk))}})}constructor(...a){super(...a),this.id="copilot",this.name="Copilot",this.command="copilot",this.inputReadiness={label:"copilot",isReady:a=>this.isReadyFor("composer",(0,k.aJ)(a))}}}var al=c(61878),am=c(69082),an=c(83406);let ao=(0,q.h)("cli-tools/antigravity"),ap=/\?\s+for\s+shortcuts/;function aq(a){if(null===a)return{screen:"no-capture",screenTail:[]};let b=(0,k.aJ)(a).split("\n").map(a=>a.trimEnd()).filter(a=>""!==a.trim()),c=(0,al.zJ)(a,"antigravity").lastLines;return{screen:0===b.length?"blank":(0,am.VI)(c)?"trust-dialog":as(a)?"ready":"other",screenTail:b.slice(-5).map(a=>a.slice(0,160))}}function ar(a,b,c){let d=(0,D.oy)(D.z0,b);!d||"absent"===b.action||"press"===b.action||c.has(b.reason)||(c.add(b.reason),ao.warn(d.event,{sessionName:a,...d.fields}))}function as(a){let b=(0,al.zJ)(a,"antigravity");if(k.kT.test(b.lastLines)||am.wf.test(b.lastLines))return!1;let c=function(a){let b=a.map(a=>a.trim()),c=a=>a>=0&&k.kn.test(b[a]),d=a=>{let c=a;for(;c>=0&&""===b[c];)c--;return c},e=b.length-1,f="";return(e>=0&&!c(e)&&(f=b[e],e=d(e-1)),!c(e)||(e=d(e-1))<0||!k.lE.test(b[e]))?null:c(d(e-1))?f:null}(b.contentLines);return null!==c&&(!!ap.test(c)||!(0,k.ut)("antigravity",b.lastLines))}class at extends d.Mj{async launchSession(a,b,c,d){await this.requireInstalled();let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:ao,liveAction:"antigravity-session-exists",relaunchAction:"antigravity-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:r.F0,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:r.F0,instanceId:c},executablePath:this.command,worktreePath:b}),h=d?`${g} --model '${d.replace(/'/g,"'\\''")}'`:g;f||await this.createLaunchPane(e,b),(0,an.zu)(e);try{await this.typeLaunchLines(e,[(0,v.Y)(h)]),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(e)}finally{(0,an.F1)(e)}ao.info("started-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Antigravity session: ${a}`)}}}async waitForReady(a){let b;(0,an.R6)(a);let c=!1,d=new Set,e=null,f=0;for(let g=0;g<30;g++){try{let b=(0,x.TO)(),f=await (0,h.Xg)(a,50),g=(0,k.aJ)(f);if(e=f,as(g))return void ao.info("antigravity-prompt-detected");if(!c){let e=(0,D.CZ)(D.z0,g);if("press"===e.action&&!(0,an.jI)(a)){let d=e.key,f=await (0,x.x7)(a,b,()=>this.isTrustPressStill(a,d),()=>(0,h.ds)(a,d));if(f.answered){c=!0,ao.info("auto-trusted-folder-for-antigravity"),await new Promise(a=>setTimeout(a,500));continue}ao.info("antigravity-trust-answer-skipped",{sessionName:a,reason:f.reason})}ar(a,e,d)}}catch(a){f++,b=(0,w.u1)(a)}await new Promise(a=>setTimeout(a,1e3))}c||(0,an.Qn)(a),ao.info("antigravity-prompt-detection-timeout",{sessionName:a,attempts:30,trustDialogHandled:c,...c?{}:{reason:"startup-trust-unhandled"},...aq(e),captureErrors:f,...void 0!==b?{lastCaptureError:b}:{}})}async isTrustPressStill(a,b){let c=(0,k.aJ)(await (0,h.Xg)(a,50)),d=(0,D.CZ)(D.z0,c);return"press"===d.action&&d.key===b}async waitForPrompt(a){let b,c=Date.now(),d=c+((0,an.Dc)(a)?6e4:15e3),e=new Set,f=null,g=0;for(;Date.now()<d;){try{let b=(0,x.TO)(),c=await (0,h.Xg)(a,50),g=(0,k.aJ)(c);if(f=c,as(g))return void(0,an.R6)(a);let i=(0,am.VI)((0,al.zJ)(g,"antigravity").lastLines)?(0,D.CZ)(D.z0,g):null;null!==i&&"press"!==i.action&&(0,an.Dc)(a)&&ar(a,i,e);let j=i?.action==="press"?i.key:null,l=null!==j&&(0,an.Dc)(a)?await (0,x.x7)(a,b,()=>this.isTrustPressStill(a,j),async()=>!!(0,an.qT)(a)&&(await (0,h.ds)(a,j),!0)):null;if(null===l||l.answered||ao.info("antigravity-trust-answer-skipped",{sessionName:a,reason:l.reason,afterLaunchWindow:!0}),l?.answered===!0&&l.value){ao.info("auto-trusted-folder-for-antigravity",{sessionName:a,afterLaunchWindow:!0}),d=Math.max(d,Date.now()+15e3),await new Promise(a=>setTimeout(a,500));continue}}catch(a){g++,b=(0,w.u1)(a)}await new Promise(a=>setTimeout(a,500))}let i=(0,an.Dc)(a),j=aq(f);ao.info("antigravity-prompt-not-ready",{sessionName:a,waitedMs:Date.now()-c,...i?{reason:"startup-trust-unhandled"}:{},...j,captureErrors:g,...void 0!==b?{lastCaptureError:b}:{}});let l="trust-dialog"===j.screen?' (the folder-trust confirmation "Do you trust the contents of this project?" is on screen and needs an answer)':i?" (startup-trust-unhandled: agy had not shown its folder-trust confirmation when the launch window ended, and it has not appeared since)":"";throw Error(`Antigravity prompt not ready: timed out waiting for the input prompt before sending${l}`)}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Antigravity",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"antigravity",composer:this.describeComposer()}),(0,j.gm)(d),ao.info("sent-message-to-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Antigravity: ${a}`,{cause:b})}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:ao,stoppedAction:"stopped-antigravity-session",requestExit:async a=>{await (0,h.ds)(a,"C-d"),await new Promise(a=>setTimeout(a,u.Zf))},afterKill:a=>{(0,j.gm)(a),(0,an.R6)(a)}})}constructor(...a){super(...a),this.id="antigravity",this.name="Antigravity CLI",this.command="agy"}}var au=c(99702),av=c(28862),aw=c(35566),ax=c(2669);let ay=(0,q.h)("cli-tools/command-code"),az=["--trust","--skip-onboarding","--no-auto-update"];function aA(a){let b=a.split("\n");return!(0>(0,k.I$)(b))&&!k.k0.test((0,k.aJ)(a))}class aB extends d.Mj{navigationKeys(){return{keys:e.G2,leaderKey:null}}async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:ay,liveAction:"command-code-session-exists",relaunchAction:"command-code-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:av.k,instanceId:c}),this.composerPendingSince.set(d,Date.now());try{var g;e||await this.createLaunchPane(d,b);let f=(g={target:{worktreeId:a,cliToolId:av.k,instanceId:c},executablePath:this.command,worktreePath:b},[(0,t.wK)(g),...az].join(" "));await this.typeLaunchLines(d,[(0,v.Y)(f)]),await new Promise(a=>setTimeout(a,u.yO)),await this.waitForReady(d),ay.info("started-command-code-session")}catch(a){throw this.composerPendingSince.delete(d),Error(`Failed to start Command Code session: ${(0,w.u1)(a)}`)}}}async waitForReady(a){for(let b=0;b<30;b++){try{let b=await (0,h.Xg)(a,50);if(aA(b)){this.composerPendingSince.delete(a),ay.info("command-code-prompt-detected");return}}catch{}await new Promise(a=>setTimeout(a,1e3))}ay.info("command-code-prompt-detection-timeout")}async waitForPrompt(a,b,c){let d=Date.now(),e=0;for(;Date.now()-d<15e3;){let d=!1;try{let b=await (0,h.Xg)(a,50);if(!(d=null!==(0,aw.V)(b))&&aA(b))return void this.composerPendingSince.delete(a)}catch{}if((e=d?e+1:0)>=2)throw ay.info("command-code-plan-review-blocks-send",{sessionName:a}),Object.assign(Error((0,au.VY)(b,c)),{code:V.Le});await new Promise(a=>setTimeout(a,500))}let f=this.composerPendingSince.get(a);if(void 0!==f){let b=Date.now()-f;if(b<=12e4)throw ay.info("command-code-session-still-starting",{sessionName:a,sinceLaunchMs:b}),new ax.Sr(this.name,a,b);this.composerPendingSince.delete(a)}throw ay.info("command-code-prompt-not-ready"),Error("Command Code prompt not ready: timed out waiting for the composer before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Command Code",a,c,{relaunch:!0});try{await this.waitForPrompt(d,a,c),await (0,i.FW)({sessionName:d,message:b,cliToolId:"command-code",composer:this.describeComposer()}),(0,j.gm)(d),ay.info("sent-message-to-command-code-session")}catch(b){if((0,ax.wQ)(b))throw b;let a=Error(`Failed to send message to Command Code: ${(0,w.u1)(b)}`,{cause:b});if(b?.code===V.Le)throw Object.assign(a,{code:V.Le});throw a}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:ay,stoppedAction:"stopped-command-code-session",requestExit:async a=>{await (0,h.V1)(a,"/exit",!1),await new Promise(a=>setTimeout(a,u.pL)),await (0,h.KB)(a,["Enter"]),await new Promise(a=>setTimeout(a,u.Zf))},afterKill:a=>{this.composerPendingSince.delete(a),(0,j.gm)(a)}})}constructor(...a){super(...a),this.id="command-code",this.name="Command Code CLI",this.command="commandcode",this.composerPendingSince=new Map}}var aC=c(79646),aD=c(28354),aE=c(16983),aF=c(46684),aG=c(34114),aH=c(62887),aI=c(72272),aJ=c(49154),aK=c(40255),aL=c(95375),aM=c(27870),aN=c(57510),aO=c(90488),aP=c(51719),aQ=c(83738),aR=c(26945),aS=c(38892),aT=c(16100),aU=c(71193);let aV=(0,q.h)("lib/hooks/sources/opencode-v2/ingest");async function aW(a,b){let[{getDbInstance:d},{getWorktreeById:e},{applyAgentStopEvent:f}]=await Promise.all([Promise.resolve().then(c.bind(c,88807)),Promise.resolve().then(c.bind(c,56791)),Promise.all([c.e(1356),c.e(6065),c.e(1191),c.e(3480),c.e(5456),c.e(2710),c.e(1501),c.e(6486),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void aV.info("opencode-v2-stop-unresolved-target",{worktreeId:a.worktreeId});await f(g,h,aU.B,b)}async function aX(a,b,c){let d=(0,aR.bH)(a),e=(0,aS.X3)(a);if(null===d||null===e)return null;let f=await (0,aG.$F)(d,e,b),g=f?.find(a=>(0,aN.Qd)(a)&&a.id===c);return(0,aN.Qd)(g)?g:null}async function aY(a,b,c){let d=(0,aQ.hl)(b.raw,b.receivedAt);if(!d)return aV.info("opencode-v2-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let e=await (0,aI.t)(aT.Wp,a,d,aT.Wp.parsePermissionRequest(b.raw));return aV.info("opencode-v2-permission-decided",{worktreeId:a.worktreeId,instanceId:c,decisionId:d.id,behavior:e.behavior,reason:e.reason,delivered:e.delivered,settled:e.settled}),e.settled}async function aZ(a,b,c){let d=(0,aQ.rk)(b.raw);if(d)return d;let e=(0,aP.DH)(b.raw),f=(0,aP.lx)(b.raw);if(null===e||null===f)return null;let g=await c(a,f,e);return g?(0,aQ.rk)(g):null}async function a$(a,b,c=aW,d=aX){let e=a.instanceId??aU.B;try{let f=(0,aL.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:aU.B,instanceId:e,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:aT.Wp.eventIdentityOf(b.raw),identityKind:aT.Wp.capabilities.eventIdentity});if(f.duplicate)return void aV.info("opencode-v2-event-duplicate-dropped",{worktreeId:a.worktreeId,instanceId:e,event:b.event,detail:b.detail,by:f.by});let g={event:b.event,at:b.receivedAt,detail:b.detail?.slice(0,aH.h9)??null,sessionId:b.conversationId,message:null,model:b.model},h={sessionStartMayArriveLate:!1};if("notification"===b.event&&b.detail===aP.xz){g.decisionId=(0,aP.DH)(b.raw);let c=(0,aQ.vF)(b.raw);g.toolName=c?.toolName??(0,aP.Dg)(b.raw),g.decisionPatterns=c?.patterns??null,g.message=(0,aQ.s8)(b.raw)?.slice(0,aM.lY)??null,g.promptSettled=await aY(a,b,e),(0,aL.recordAgentEvent)(a.worktreeId,aU.B,e,g,h)}else if("notification"===b.event&&b.detail===aP.er)g.decisionId=(0,aP.DH)(b.raw),g.promptSettled=!0,(0,aL.recordAgentEvent)(a.worktreeId,aU.B,e,g,h),g.decisionId&&(0,aK.L0)({worktreeId:a.worktreeId,cliToolId:aU.B,instanceId:e},g.decisionId);else if("notification"===b.event&&b.detail===aP.Ai){let c=await aZ(a,b,d);g.message=c?.questions[0]?.question.slice(0,aM.lY)??null,(0,aL.recordAgentEvent)(a.worktreeId,aU.B,e,g,h),c&&(0,aL.recordAskUserQuestion)(a.worktreeId,aU.B,e,c,b.receivedAt),(0,aL.reportQuestionPending)(a.worktreeId,aU.B,e,{toolName:aJ.GF,decisionId:(0,aP.DH)(b.raw),detail:aP.Ai},b.receivedAt),aV.info("opencode-v2-question-recorded",{worktreeId:a.worktreeId,instanceId:e,decisionId:(0,aP.DH)(b.raw),parsed:null!==c,questionCount:c?.questions.length??0}),await (0,aO.Vo)(a,e,g.message,b.receivedAt)}else"stop"===b.event?(b.detail===aP.dA&&(g.message=(0,aP.ZL)(b.raw)?.slice(0,aM.lY)??null,aV.error("opencode-v2-turn-failed",{worktreeId:a.worktreeId,instanceId:e,sessionId:b.conversationId,message:g.message})),(0,aL.recordAgentEvent)(a.worktreeId,aU.B,e,g,h),await c(a,e)):(0,aL.recordAgentEvent)(a.worktreeId,aU.B,e,g,h);aV.info("opencode-v2-event-received",{worktreeId:a.worktreeId,instanceId:e,type:(0,aP.Cr)(b.raw),event:b.event,detail:b.detail})}catch(c){aV.error("opencode-v2-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:e,event:b.event,error:c instanceof Error?c.message:String(c)})}}var a_=c(32301);let a0=(0,q.h)("lib/hooks/sources/opencode-v2/runtime"),a1=[0,500,1e3,2e3];function a2(a,b){return{worktreeId:a,cliToolId:aU.B,instanceId:b}}function a3(a){return a instanceof Error?a.message:String(a)}async function a4(a,b){try{let c=await (0,aR.ui)(a,b);if(null===c)return null;return(0,aS.OC)(a),c}catch(b){return a0.warn("opencode-v2-server-reserve-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:a3(b)}),null}}async function a5(a,b){let c=(0,aS.X3)(a);return null!==c&&"healthy"===(await (0,aG.tJ)(b,c)).kind}async function a6(a){try{let b=(0,aR.bH)(a);if(null===b)return!1;if((0,a_.yw)(a))return!0;let c=!1;for(let d of a1)if(d>0&&await new Promise(a=>setTimeout(a,d)),await a5(a,b)){c=!0;break}if(!c)return a0.info("opencode-v2-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!1;return await aT.Wp.subscribe(a,b=>{a$(a,b)}),a0.info("opencode-v2-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!0}catch(b){return a0.warn("opencode-v2-event-stream-attach-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:a3(b)}),!1}}async function a7(a,b){try{if((0,a_.yw)(a))return!0;let c=await (0,aR.Lv)(a,b,b=>a5(a,b));if(null===c)return!1;return await a6(a)}catch(b){return a0.warn("opencode-v2-event-stream-resume-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:a3(b)}),!1}}async function a8(a){try{await (0,a_.VV)(a)}catch(b){a0.warn("opencode-v2-subscription-close-failed",{worktreeId:a.worktreeId,error:a3(b)})}try{(0,aR.OZ)(a)}catch(b){a0.warn("opencode-v2-port-forget-failed",{worktreeId:a.worktreeId,error:a3(b)})}try{(0,aS.Nc)(a)}catch(b){a0.warn("opencode-v2-password-remove-failed",{worktreeId:a.worktreeId,error:a3(b)})}}var a9=c(93949),ba=c(18140);let bb=(0,q.h)("cli-tools/opencode-v2"),bc=(0,aD.promisify)(aC.execFile),bd=aE.xT,be=/^\/\S+$/,bf=[...e.qD,e.Mx,...e.TM,"a","l","m"];class bg extends d.Mj{navigationKeys(){return{keys:bf,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,ba.Qq)()).executable}async isRunning(a,b){let c=this.getSessionName(a,b),d=await (0,h.N)(c);return d&&this.resumeInBackground(a,c,b),d}resumeInBackground(a,b,c){let d=a2(a,c);if((0,a_.yw)(d))return;let e=Date.now(),f=this.resumeAttemptedAt.get(b);void 0!==f&&e-f<3e4||(this.resumeAttemptedAt.set(b,e),(async()=>{try{let a=await (0,h.nS)(b);if(null===a)return;await a7(d,a)}catch(a){bb.debug("opencode-v2-lazy-resume-failed",{error:(0,w.u1)(a)})}})())}async launchSession(a,b,c){let d=(await (0,ba.Qq)()).executable;if(!d)throw(0,$.Tl)(this);let e=this.getSessionName(a,c),f=a2(a,c),g={windowWidth:(0,aF.r)({warnSidebar:!1}),windowHeight:aE.xT},i=await (0,h.N)(e);if(i){if(await this.reconcileExistingSession(e,b,g),await this.isToolLive(e,{confirm:!0})){await a7(f,b),bb.info("opencode-v2-session-exists");return}bb.warn("opencode-v2-session-relaunch",{sessionName:e}),await a8(f)}(0,t.Fq)(f);try{i||await this.createLaunchPane(e,b);try{await bc("tmux",["resize-window","-t",(0,h.lA)(e),"-x",String(g.windowWidth),"-y",String(g.windowHeight)])}catch{}let j=await a4(f,b);null===j&&bb.warn("opencode-v2-launch-without-server",{worktreeId:a,instanceId:c});let k=(0,t.wK)({target:f,executablePath:d.path,worktreePath:b});await this.typeLaunchLines(e,[(0,v.Y)(k)]),await this.waitForReady(e),await a6(f),bb.info("started-opencode-v2-session")}catch(a){throw Error(`Failed to start OpenCode V2 session: ${(0,w.u1)(a)}`)}}async waitForReady(a){for(let b=0;b<60;b++){try{let c=(0,k.aJ)(await (0,h.Xg)(a,bd));if((0,k.Ok)(c))return bb.info("opencode-v2-composer-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return bb.info("opencode-v2-ready-detection-timeout"),!1}async waitForComposer(a){let b=Date.now()+u.D1;for(;;){let c=null;try{let b=(0,k.aJ)(await (0,h.Xg)(a,bd));if(c=(0,k.dF)(b),null===c&&(0,k.Ok)(b))return}catch{}if(null!==c)throw Error(`OpenCode V2 composer not available: the "${c}" dialog is open. Close it (esc) or finish the choice, then send again`);if(Date.now()>=b)break;await new Promise(a=>setTimeout(a,500))}throw Error("OpenCode V2 composer not ready: timed out waiting for it before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("OpenCode V2",a,c,{relaunch:!0});try{await this.waitForComposer(d),await (0,i.FW)({sessionName:d,message:be.test(b)?`${b} `:b,cliToolId:aU.B,composer:this.describeComposer()}),(0,j.gm)(d),bb.info("sent-message-to-opencode-v2-session")}catch(a){throw Error(`Failed to send message to OpenCode V2: ${(0,w.u1)(a)}`,{cause:a})}}async killSession(a,b){let c=this.getSessionName(a,b),d=a2(a,b),e=(0,aR.bH)(d);try{if(await (0,h.N)(c)){await (0,h.V1)(c,a9.M0,!1),await new Promise(a=>setTimeout(a,u.pL)),await (0,h.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,u.Lw));let a=await (0,a9.rY)({sessionAlive:()=>(0,h.N)(c),portAnswering:null===e?null:async()=>"unreachable"!==(await (0,aG.tJ)(e,"")).kind});a.ok||(bb.info("opencode-v2-graceful-exit-postcondition-unmet",{sessionName:c,reason:a.reason,...null!==e?{port:e}:{}}),await (0,h.fY)(c))}else await (0,h.fY)(c);(0,j.gm)(c),this.resumeAttemptedAt.delete(c),bb.info("stopped-opencode-v2-session")}catch(a){throw bb.error("session:stop-failed",{error:(0,w.u1)(a)}),a}finally{await a8(d)}}constructor(...a){super(...a),this.id=aU.B,this.name="OpenCode V2",this.command=aU.V,this.resumeAttemptedAt=new Map}}class bh{constructor(){this.tools=new Map,this.tools.set("claude",new g),this.tools.set("codex",new B),this.tools.set("gemini",new G),this.tools.set("vibe-local",new S),this.tools.set("opencode",new T.Ui),this.tools.set("copilot",new ak),this.tools.set("antigravity",new at),this.tools.set("command-code",new aB),this.tools.set("opencode-v2",new bg)}static getInstance(){return bh.instance||(bh.instance=new bh),bh.instance}getTool(a){let b=this.tools.get(a);if(!b)throw Error(`CLI tool '${a}' not found`);return b}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(a){let b=this.getTool(a),c=await b.isInstalled();return{id:b.id,name:b.name,command:b.command,installed:c}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async a=>{let b=await a.isInstalled();return{id:a.id,name:a.name,command:a.command,installed:b}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(a=>a.installed)}async stopPollers(a,b,d){let{stopPolling:e}=await Promise.all([c.e(1356),c.e(1503),c.e(1634),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(3480),c.e(8728),c.e(1601),c.e(8918),c.e(610),c.e(1656),c.e(5220)]).then(c.bind(c,95220));e(a,b,d)}}},17287:(a,b,c)=>{c.d(b,{CD:()=>g,nL:()=>f});var d=c(24455);let e=(0,c(36925).v)("__permissionDecisions",()=>new Map);function f(a,b,c,f){e.set((0,d.v7)(a,b,c),f)}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??null}},23365:(a,b,c)=>{c.d(b,{H:()=>g,y:()=>h});var d=c(16983),e=c(34405),f=c(15194);let g=200;function h(a){var b;return{statusLines:"opencode"===(b=a)?d.xT:"gemini"===b?g:e.G,usesAlternateScreen:(0,f.VA)(a)}}},34405:(a,b,c)=>{c.d(b,{G:()=>e,_:()=>d});let d=1e4,e=1e3},35566:(a,b,c)=>{c.d(b,{V:()=>l});var d=c(51297),e=c(91478);let f=/^\s*type \+ enter to comment\b/i,g=/^\s*enter to pin\s*·\s*esc discard\s*$/i,h=/^\s*↑\/↓ choose\s*·\s*enter to run\s*$/i,i=/^\s*❯ +(?:Submit review\b|Approve\s+ctrl\+a\b|Cancel\s+esc\b)/im,j=/^\s*REVIEW\s+(\d+)\s+pending comments?\b/im,k=/\(•\)\s+with\s+\d+\s+comments?\s+as\s+notes/i;function l(a){if(!a)return null;let b=(0,d.aJ)(a.replace(/\r\n/g,"\n")).split("\n").filter(a=>""!==a.trim()).slice(-15);if(0===b.length)return null;let c=b.join("\n"),l=j.exec(c),m=l?Number(l[1]):0;if((0,e.a9)(c))return{phase:"approve-choice",pendingComments:m,approveChoice:k.test(c)?"with-comments":"discard-comments"};if(!(0,e.tH)(c))return null;let n=b[b.length-1],o="unknown";return i.test(c)||h.test(n)?o="action-focus":g.test(n)?o="comment-box":f.test(n)&&(o="body"),{phase:o,pendingComments:m,approveChoice:null}}},39333:(a,b,c)=>{c.d(b,{$Y:()=>h,Bg:()=>j,Fg:()=>e,HB:()=>g,df:()=>i,f9:()=>d});let d=[".png",".jpg",".jpeg",".gif",".webp",".svg"],e=0x1400000,f=[{extension:".png",mimeType:"image/png",magicBytes:[137,80,78,71]},{extension:".jpg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".jpeg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".gif",mimeType:"image/gif",magicBytes:[71,73,70,56]},{extension:".webp",mimeType:"image/webp",magicBytes:[82,73,70,70]},{extension:".svg",mimeType:"image/svg+xml"}];function g(a){return a?a.startsWith(".")?a.toLowerCase():"."+a.toLowerCase():""}function h(a){let b=g(a),c=f.find(a=>a.extension===b);return c?.mimeType||"application/octet-stream"}function i(a){if(!a)return!1;let b=g(a);return d.includes(b)}function j(a,b){if(b.length>e)return{valid:!1,error:`File size exceeds ${e/1024/1024}MB limit`,reason:"too-large"};if(".svg"===g(a)){var c;return(c=b.toString("utf-8")).includes("<svg")||c.startsWith("<?xml")?/<script[\s>]/i.test(c)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(c)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(c)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(c)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(a,b){let c=g(a),d=f.find(a=>a.extension===c);if(!d?.magicBytes)return".svg"===c;let e=d.magicBytesOffset||0;return!(b.length<e+d.magicBytes.length)&&d.magicBytes.every((a,c)=>b[e+c]===a)}(a,b)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}d.filter(a=>".svg"!==a).map(a=>h(a)).filter(a=>"application/octet-stream"!==a).join(",")},46684:(a,b,c)=>{c.d(b,{r:()=>f});var d=c(16983);let e=(0,c(72626).h)("cli-tools/opencode-pane-width");function f(a){let b=process.env[d.ao],c=(0,d._u)(),f=b?.trim(),g=void 0!==f&&(!/^\d+$/.test(f)||Number.parseInt(f,10)!==c);return void 0!==b&&g?e.warn("opencode-pane-width-rejected",{requested:b,applied:c}):a.warnSidebar&&c>=d.Lg&&e.warn("opencode-pane-width-sidebar-visible",{width:c,sidebarMinWidth:d.Lg}),c}},48217:(a,b,c)=>{c.d(b,{FG:()=>h,_F:()=>j,du:()=>g,mN:()=>i,to:()=>k});var d=c(36925);let e=(0,d.v)("__launchWindows",()=>new Map),f=(0,d.v)("__launchDialogPresses",()=>new Map);function g(a){e.set(a,(e.get(a)??0)+1),f.delete(a)}function h(a){let b=e.get(a)??0;b<=1?e.delete(a):e.set(a,b-1)}function i(a){return e.has(a)}function j(a,b=Date.now()){f.set(a,b)}function k(a,b=Date.now()){let c=f.get(a);return void 0!==c&&b-c<3e4}},53554:(a,b,c)=>{function d(a){let b="[^\\S\\n]";return RegExp(`(?:^${b}*|\xb7${b}*|${b}{2})${a}(?:${b}\\([^()\\n]{1,32}\\))?(?:${b}*\xb7|${b}{2}|${b}*$)`,"i")}c.d(b,{h:()=>g});let e={key:"BTab",cycle:["default","plan","autopilot"],indicators:[{mode:"autopilot",pattern:d("autopilot")},{mode:"plan",pattern:d("plan(?:[^\\S\\n]mode)?")}],tailRows:2,noteId:null},f={claude:{key:"BTab",cycle:["auto","manual","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:/⏵⏵\s*accept edits on\b/},{mode:"auto",pattern:/⏵⏵\s*auto mode on\b/},{mode:"plan",pattern:/⏸\s*plan mode on\b/},{mode:"manual",pattern:/⏸\s*manual mode on\b/}],tailRows:3,noteId:null},"command-code":{key:"BTab",cycle:["default","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:/»\s*accept edits on\b/},{mode:"bypass",pattern:/»\s*permission bypass on\b/},{mode:"dont-ask",pattern:/»\s*don't-ask on\b/},{mode:"plan",pattern:/^[^\S\n]*plan mode\b/},{mode:"default",pattern:/\?\s+for\s+shortcuts\b/}],tailRows:4,noteId:null},codex:{key:"BTab",cycle:["default","plan"],indicators:[{mode:"plan",pattern:/\bPlan mode\s*\(shift\+tab to cycle\)/i}],tailRows:3,noteId:"codexModelCoupled"},copilot:e,antigravity:{key:"BTab",cycle:["default","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:d("accept-edits")},{mode:"plan",pattern:d("plan(?:[^\\S\\n]mode)?")}],tailRows:2,noteId:null},"opencode-v2":{key:"BTab",cycle:["build","plan"],indicators:[{mode:"build",pattern:/^[^\S\n]*┃[^\S\n]+Build[^\S\n]·[^\S\n]/},{mode:"plan",pattern:/^[^\S\n]*┃[^\S\n]+Plan[^\S\n]·[^\S\n]/}],tailRows:4,noteId:"opencodeAgentSwitch"}};function g(a){return f[a]??null}Object.keys(f)},70849:(a,b,c)=>{c.d(b,{LQ:()=>k,SW:()=>l});var d=c(72626),e=c(84574),f=c(95375),g=c(77634),h=c(27939);let i=(0,d.h)("lib/session/opencode-session-recall");async function j(a,b){let c=new Set,d=await (0,g.GP)(a,b);for(let b=0;b<3;b+=1){if(null===d)return null;if(null===d.parentId||c.has(d.parentId))break;c.add(d.parentId),i.debug("opencode-session-parent-hop",{from:d.id,to:d.parentId}),d=await (0,g.GP)(a,d.parentId)}return d}async function k(a){let b=a.instanceId??a.cliToolId,c=(0,e.hC)(a);if(null===c)return{captured:!1,skipped:"no-port"};let d=(0,f.getLastAgentEvent)(a.worktreeId,"opencode",a.instanceId)?.sessionId;if(!(0,h.jp)(d))return{captured:!1,skipped:"no-session-observed"};let g=await j(c,d);if(null===g)return{captured:!1,skipped:"session-unreadable"};if(null===g.directory)return{captured:!1,skipped:"no-directory"};let k=(0,e.U9)(a);return null!==k&&k!==g.directory?(i.warn("opencode-session-capture-directory-mismatch",{worktreeId:a.worktreeId,instanceId:b,expected:k,reported:g.directory}),{captured:!1,skipped:"directory-mismatch"}):(0,h.F_)(a,{sessionId:g.id,title:g.title,worktreePath:g.directory})?(i.info("opencode-session-captured",{worktreeId:a.worktreeId,instanceId:b,sessionId:g.id,viaParentOf:g.id===d?null:d}),{captured:!0,memory:{sessionId:g.id,title:g.title,worktreePath:g.directory,updatedAt:Date.now()}}):{captured:!1,skipped:"not-persisted"}}async function l(a){let b=(0,e.hC)(a),c=(0,f.getLastAgentEvent)(a.worktreeId,"opencode",a.instanceId)?.sessionId;if(null!==b&&(0,h.jp)(c)){let a=await j(b,c);if(null!==a)return a.id}return(0,h.KA)(a)?.sessionId??null}},72272:(a,b,c)=>{c.d(b,{t:()=>j});var d=c(72626),e=c(40255),f=c(50474),g=c(25071),h=c(17287);let i=(0,d.h)("lib/hooks/permission-adjudication");async function j(a,b,d,k,l="event"){let m=b.instanceId??b.cliToolId,n={worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m},{resolvePermissionRequest:o}=await Promise.all([c.e(3241),c.e(6119)]).then(c.bind(c,43241)),p=o(n,k),q="allow"===p.behavior?{kind:"allowOnce"}:{kind:"abstain"};if("abstain"===q.kind){let c=(0,f.y_)(a);c.safe||i.warn("permission-request-abstain-blocks-agent",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m,toolName:k?.toolName??null,decisionId:d.id,reason:p.reason,consequence:c.summary,blocksForMs:c.blocksForMs})}let r=(0,e.qu)(n,d.id,{outcome:"allow"===p.behavior?"allow":"abstained",..."policy-suppressed"===p.reason&&p.suppressedBy?{withholdReason:p.suppressedBy}:{},promptType:"multiple_choice"}),{delivery:s}=await (0,g.GW)(a,b,d,q),t=s?.delivered===!0,u=t&&a.capabilities.permissionReplyReleasesPrompt;return(0,h.nL)(b.worktreeId,b.cliToolId,b.instanceId,{decisionId:d.id,toolName:k?.toolName??null,behavior:"allow"===p.behavior?"allow":null,reason:p.reason,delivered:t,releasedPrompt:u,trigger:l,at:d.askedAt}),(0,e.YF)(r,{delivered:t,settled:u}),i.info("permission-decision-adjudicated",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m,decisionId:d.id,toolName:k?.toolName??null,behavior:p.behavior,reason:p.reason,suppressedBy:p.suppressedBy,delivered:t,settled:u,trigger:l}),{decisionId:d.id,behavior:"allow"===p.behavior?"allow":null,reason:p.reason,delivered:t,settled:u}}},72312:(a,b,c)=>{c.d(b,{IS:()=>g,cA:()=>h,uo:()=>f,yp:()=>e});var d=c(7321);let e=2e3;function f(){let a=null,b=0;return{observe:(c,d=Date.now())=>c?(a??=d,++b>=2&&d-a>=e):(a=null,b=0,!1),reset(){a=null,b=0},get reads(){return b}}}async function g(a,b){let c,d,e=b-Date.now();if(e<=0)return null;let f=a();f.catch(()=>void 0);try{d=await Promise.race([f,new Promise(a=>{c=setTimeout(()=>a(null),e)})])}catch(a){if(Date.now()>b)return null;throw a}finally{void 0!==c&&clearTimeout(c)}return Date.now()>b?null:d}function h(a,b){return Object.assign(Error(`A prompt dialog stayed open in session ${a} for ${e}ms while the ${b} input prompt was awaited (re-checked under the input lock); nothing was typed (Issue #4084).`),{code:d.a9})}},76877:(a,b,c)=>{c.d(b,{CZ:()=>k,O5:()=>m,g1:()=>f,oy:()=>n,yN:()=>l,z0:()=>g});var d=c(54490),e=c(69082);let f={id:"gemini-folder-trust",question:/Do you trust (?:the files in )?this folder\?/,signature:/\bTrust folder\b|\bDon't trust\b/,cursorRow:/^[\s│]*●\s*(\S.*?)[\s│]*$/,optionRow:/^[\s│]*(?:\S\s+)?\d\.\s+(?:Trust folder|Trust parent folder|Don't trust)\b/,minOptionRows:2,optionsWithin:8,dismissedRow:/restarting to apply the trust changes/,safeRow:/^1\.\s+Trust folder\b/,key:"Enter",liveRows:30,declaredIn:"src/lib/cli-tools/launch-dialog.ts (GEMINI_TRUST_LAUNCH_DIALOG)"},g={id:"antigravity-folder-trust",question:e.wf,signature:/\bYes, I trust this folder\b/,optionRow:/^\s*(?:\S\s+)?(?:Yes, I trust this folder|No, exit)\s*$/,minOptionRows:2,optionsWithin:4,cursorRow:/^\s*>\s+(\S.*?)\s*$/,safeRow:/^Yes, I trust this folder$/,key:"Enter",liveRows:12,declaredIn:"src/lib/cli-tools/launch-dialog.ts (ANTIGRAVITY_TRUST_LAUNCH_DIALOG)"};function h(a,b){return(0,d.aJ)(a).split("\n").map(a=>a.trimEnd()).filter(a=>""!==a.trim()).slice(-b)}function i(a,b){if(!a.dismissedRow)return b;for(let c=b.length-1;c>=0;c--)if(a.dismissedRow.test(b[c]))return b.slice(c+1);return b}function j(a,b){for(let c=b.length-1;c>=0;c--){if(!a.question.test(b[c]))continue;let d=function(a,b,c){let d=Math.min(b.length-1,c+a.optionsWithin);for(let e=c+1;e<=d;e++){if(!a.optionRow.test(b[e]))continue;let c=[];for(let d=e;d<b.length&&a.optionRow.test(b[d]);d++)c.push(b[d]);return c.length>=a.minOptionRows?c:null}return null}(a,b,c);if(d)return d}return null}function k(a,b){let c=i(a,h(b,a.liveRows)),d=j(a,c);if(!d)return c.some(b=>a.signature.test(b))?{action:"unrecognized",reason:"question-not-found"}:{action:"absent"};let e=[];for(let b of d){let c=a.cursorRow.exec(b);c&&e.push(c[1])}if(0===e.length)return{action:"unrecognized",reason:"cursor-not-found"};if(e.length>1)return{action:"unrecognized",reason:"multiple-cursors"};let f=e[0];return a.safeRow.test(f)?{action:"press",key:a.key}:{action:"hold",reason:"cursor-off-safe-row",cursorLabel:f.slice(0,80)}}function l(a,b){return null!==j(a,i(a,h(b,a.liveRows)))}function m(a,b){return null!==j(a,h(b,a.liveRows))}function n(a,b){return"absent"===b.action||"press"===b.action?null:"hold"===b.action?{event:"launch-dialog-held",fields:{dialog:a.id,...b}}:{event:"launch-dialog-unrecognized",fields:{dialog:a.id,...b,hint:`the dialog's wording or cursor drawing may have changed; compare the screen with ${a.declaredIn}`}}}},77634:(a,b,c)=>{c.d(b,{GP:()=>l,Hv:()=>h,eJ:()=>n,mf:()=>o,y4:()=>m,yg:()=>p});var d=c(72626),e=c(49791),f=c(27939);let g=(0,d.h)("lib/session/opencode-session-api"),h="session_new";function i(a,b){let c=a[b];return"string"==typeof c&&c.length>0?c:null}async function j(a,b){try{let c=await fetch(a,{...b,redirect:e.uS,signal:AbortSignal.timeout(e.T0)});if(!c.ok)return null;if(!function(a){let b=a.headers?.get?.("content-type");return"string"==typeof b&&b.split(";",1)[0]?.trim().toLowerCase()===e._t}(c))return g.debug("opencode-session-request-content-type",{url:a,contentType:c.headers?.get?.("content-type")??null}),null;return await c.json()}catch(b){return g.debug("opencode-session-request-failed",{url:a,error:b instanceof Error?b.message:String(b)}),null}}function k(a){if(!("object"==typeof a&&null!==a&&!Array.isArray(a)))return null;let b=i(a,"id");if(!(0,f.jp)(b))return null;let c=i(a,"title");return{id:b,title:null===c?null:c.slice(0,f.Y2),directory:i(a,"directory"),parentId:i(a,"parentID")}}async function l(a,b){return(0,f.jp)(b)?k(await j(`${(0,e.M2)(a)}/session/${encodeURIComponent(b)}`)):null}async function m(a,b){return(0,f.jp)(b)?k(await j(`${(0,e.M2)(a)}/session/${encodeURIComponent(b)}/fork`,{method:"POST",headers:{"content-type":e._t},body:"{}"})):null}async function n(a){return!0===await j(`${(0,e.M2)(a)}/tui/open-sessions`,{method:"POST",headers:{"content-type":e._t},body:"{}"})}async function o(a,b){return!0===await j(`${(0,e.M2)(a)}/tui/execute-command`,{method:"POST",headers:{"content-type":e._t},body:JSON.stringify({command:b})})}async function p(a,b){return!!(0,f.jp)(b)&&!0===await j(`${(0,e.M2)(a)}/tui/select-session`,{method:"POST",headers:{"content-type":e._t},body:JSON.stringify({sessionID:b})})}},78099:(a,b,c)=>{c.d(b,{Tl:()=>g});var d=c(56263),e=c(2669);let f={claude:"Install with: npm install -g @anthropic-ai/claude-code",codex:"Install with: npm install -g @openai/codex",gemini:"Install with: npm install -g @google/gemini-cli",opencode:"Install with: npm install -g opencode-ai",copilot:d.zt,"command-code":"Install with: npm install -g command-code","opencode-v2":"Install with: npm install -g @opencode/cli",antigravity:"Install the Antigravity CLI: https://antigravity.google/docs/cli/reference","vibe-local":"vibe-local is a local script rather than a published package: put your own `vibe-local` executable on PATH."};function g(a,b){var c,d;return new e.lU(a.name,(c=a,d=b,`${c.name} (${c.command}) is not installed or not in PATH. `+(d?`${d} `:"")+`${f[c.id]}`))}},83406:(a,b,c)=>{c.d(b,{Dc:()=>m,F1:()=>j,Qn:()=>l,R6:()=>r,Ug:()=>k,bO:()=>p,jI:()=>o,qT:()=>n,vj:()=>q,zu:()=>i});var d=c(36925);let e=(0,d.v)("__antigravityStartupTrustPending",()=>new Map),f=(0,d.v)("__antigravityStartupWindows",()=>new Map),g=(0,d.v)("__antigravityStartupTrustHolds",()=>new Set),h=(0,d.v)("__antigravityStartupTrustClaims",()=>new Map);function i(a){f.set(a,(f.get(a)??0)+1)}function j(a){let b=f.get(a)??0;b<=1?f.delete(a):f.set(a,b-1)}function k(a){return f.has(a)}function l(a,b=Date.now()){e.set(a,b)}function m(a){return e.has(a)}function n(a,b=Date.now()){if(g.has(a))return!1;let c=e.delete(a);return c&&h.set(a,b),c}function o(a){return g.has(a)}function p(a,b,c=Date.now()){let d=h.get(a);return void 0!==d&&c-d<b}function q(a){return g.add(a),()=>{g.delete(a)}}function r(a){e.delete(a)}},89731:(a,b,c)=>{c.d(b,{Mj:()=>G,Km:()=>H});var d=c(79646),e=c(28354),f=c(40964),g=c(79892),h=c(96463),i=c(56717),j=c(23365),k=c(53554),l=c(93949),m=c(91536),n=c(50945),o=c(78099);let p=new Set;var q=c(51297),r=c(87447),s=c(45567),t=c(72626),u=c(77093),v=c(8953),w=c(20610),x=c(16983),y=c(56588),z=c(77662),A=c(46689);let B=(0,e.promisify)(d.exec),C=(0,t.h)("cli-tools/base"),D=RegExp(`${s.ZM}=(?:'([^']*)'|"([^"]*)"|(\\S+))`,"g"),E=new Set,F=new Set;class G{async isInstalled(){try{return await B(`which ${this.command}`,{timeout:5e3}),!0}catch{return!1}}getSessionName(a,b){return(0,f.mf)(this.id,a,b)}async isRunning(a,b){let c=this.getSessionName(a,b);return await (0,g.N)(c)}async startSession(a,b,c,d){let e=null;try{e=this.getSessionName(a,c)}catch{}let f=()=>this.startSessionOnce(a,b,c,d);return null===e?f():(0,z.fb)(e,this.name,f,{cliToolId:this.id,model:d})}async startSessionOnce(a,b,d,e){let f=(0,y.Hb)();try{await (0,y.PS)(f,()=>this.launchSession(a,b,d,e))}catch(b){var g;throw this.takeAdoptionMark(a,d),g={worktreeId:a,cliToolId:this.id,instanceId:d,toolName:this.name},Promise.all([c.e(1356),c.e(1191),c.e(3480)]).then(c.bind(c,81099)).then(({notifySessionStartFailurePush:a})=>a({...g,error:b})).catch(()=>{}),b}finally{(0,y.O5)(a,this.id,d,f)}let h=this.takeAdoptionMark(a,d);null!==h&&await this.warnIfHookUrlIsStale(a,h,d)}async reconcileExistingSession(a,b,c){await (0,h.St)(a,b),E.add(a),await (0,g.zT)(a,c)}takeAdoptionMark(a,b){try{let c=this.getSessionName(a,b);return E.delete(c)?c:null}catch{return null}}async warnIfHookUrlIsStale(a,b,d){if(!F.has(b))try{let f=await (0,g.Xg)(b,{startLine:-x.eu});F.add(b);let h=function(a){let b=null;for(let c of(0,q.aJ)(a).matchAll(D)){let a=c[1]??c[2]??c[3]??null;a&&(b=a)}return b}(f);if(null===h)return;let i=function(a){try{let b=new URL(a);if(""!==b.port)return Number(b.port);return"https:"===b.protocol?443:80}catch{return null}}(h),j=(0,r.D0)();if(null===i||i===j)return;C.warn("session:hook-url-stale",{cliToolId:this.id,sessionName:b,sessionPort:i,serverPort:j});var e={worktreeId:a,cliToolId:this.id,instanceId:d,toolName:this.name,sessionPort:i,serverPort:j};let k=[e.worktreeId,e.instanceId??e.cliToolId,e.sessionPort,e.serverPort].join(":");p.has(k)||(p.add(k),Promise.all([c.e(1356),c.e(1191),c.e(3480)]).then(c.bind(c,81099)).then(({notifyStaleHookUrlPush:a})=>a(e)).catch(()=>{}))}catch(b){C.debug("session:hook-url-probe-failed",{cliToolId:this.id,worktreeId:a,error:b instanceof Error?b.message:String(b)})}}async warnIfRunningSessionHookUrlIsStale(a,b){let c;try{c=this.getSessionName(a,b)}catch{return}await this.warnIfHookUrlIsStale(a,c,b)}async interrupt(a,b){let c=this.getSessionName(a,b);await (0,g.ds)(c,"Escape")}describeComposer(){return(0,i.gc)(this.id)}gracefulExitSequence(){return(0,l.JV)(this.id)}captureSpec(){return(0,j.y)(this.id)}livenessSpec(){return(0,m.H7)(this.id)}async isToolLive(a,b){let c=this.livenessSpec(),d=await (0,n.Q)(a,c);if(d.alive)return!0;if(!b?.confirm)return!1;await new Promise(a=>setTimeout(a,w.kZ));let e=await (0,n.Q)(a,c);return e.alive?(C.info("session:liveness-confirm-recovered",{cliToolId:this.id,firstReason:d.reason}),!0):(C.warn("session:tool-exited",{cliToolId:this.id,reason:e.reason}),!1)}async relaunchIfToolExited(a,b){let c=this.getSessionName(a,b);if(await this.isToolLive(c))return;let d=await (0,g.nS)(c);if(null===d)return void C.warn("session:relaunch-skipped-no-path",{cliToolId:this.id,worktreeId:a});C.info("session:relaunch-before-send",{cliToolId:this.id,sessionName:c}),await this.startSession(a,d,b)}async requireSession(a,b,c,d){let e=this.getSessionName(b,c);if(await (0,z.Vk)(e,this.name),!await (0,g.N)(e))throw Error(`${a} session ${e} does not exist. Start the session first.`);d.relaunch&&await this.relaunchIfToolExited(b,c)}async requireInstalled(){if(!await this.isInstalled())throw(0,o.Tl)(this)}async resolveLaunchPane(a,b,c,d){let e=this.getSessionName(a,c),f=await (0,g.N)(e);if(f){if(await this.reconcileExistingSession(e,b),await this.isToolLive(e,{confirm:!0}))return d.logger.info(d.liveAction),{sessionName:e,exists:f,live:!0};d.logger.warn(d.relaunchAction,{sessionName:e})}return{sessionName:e,exists:f,live:!1}}async typeLaunchLines(a,b){await (0,A.$)(a,b)}async createLaunchPane(a,b){await (0,g.jw)({sessionName:a,workingDirectory:b}),await new Promise(a=>setTimeout(a,w.Uc))}async requestExitAndKill(a,b,c){let d=this.getSessionName(a,b);try{await (0,g.N)(d)&&await c.requestExit(d);let a=await (0,g.fY)(d);c.afterKill?.(d),a&&c.logger.info(c.stoppedAction)}catch(a){throw c.logger.error("session:stop-failed",{error:(0,u.u1)(a)}),a}}navigationKeys(){return{keys:v.qD,leaderKey:null}}agentModeSpec(){return(0,k.h)(this.id)}}function H(a,b,c){a instanceof G&&a.warnIfRunningSessionHookUrlIsStale(b,c).catch(()=>{})}},90580:(a,b,c)=>{c.d(b,{Ui:()=>aJ,TZ:()=>aI});var d=c(89731),e=c(8953),f=c(79892),g=c(54490),h=c(4405),i=c(51297),j=c(95595),k=c(47893),l=c(14453);let m=/^Ask anything(?:\.\.\.|…)(?:[^\S\n]+"[^"\n]*")?$/;function n(a){let b=(0,i.aJ)(a);if(k.LO.test(b))return!1;let c=(0,j.WC)(a,"opencode");if(c.hasActivePrompt||"waiting"===c.status)return!1;let d=(0,l.$O)(b.split("\n"));return null!==d&&0!==d.length&&d.every(a=>""===a||m.test(a))}var o=c(72312),p=c(20029),q=c(93997),r=c(29021),s=c(21820),t=c(33873),u=c(8004),v=c(72626);let w=(0,v.h)("cli-tools/opencode-config"),x=/^[a-zA-Z0-9._:/-]{1,100}$/,y=/^[a-zA-Z0-9._:/@-]{1,200}$/,z="CM_OPENCODE_LOCAL_PROVIDER_CONFIG",A="OPENCODE_CONFIG",B=["opencode.json","opencode.jsonc",t.join(".opencode","opencode.json"),t.join(".opencode","opencode.jsonc")],C=["opencode.json","opencode.jsonc"];async function D(){let a={};try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch("http://localhost:11434/api/tags",{signal:b.signal}).finally(()=>{clearTimeout(c)});if(!d.ok)return w.warn("ollama-api-returned"),{};let e=await d.text();if(e.length>1048576)return w.warn("ollama-api-response"),{};let f=JSON.parse(e);if(!f||!Array.isArray(f.models))return w.warn("invalid-ollama-api"),{};for(let b of f.models.slice(0,100))"string"==typeof b?.name&&x.test(b.name)&&(a[b.name]={name:function(a){let b=String(a.name),c=a.details;if(!c)return b;let d=[b];return"string"==typeof c.parameter_size&&/^[\d.]+[BKMGT]?B?$/i.test(c.parameter_size)&&d.push(c.parameter_size),"string"==typeof c.quantization_level&&/^[A-Z0-9_]{1,20}$/i.test(c.quantization_level)&&d.push(c.quantization_level),d.length>1?`${b} (${d.slice(1).join(", ")})`:b}(b)})}catch(a){a instanceof Error&&"AbortError"===a.name?w.warn("ollama-api-timeout"):w.warn("failed-to-fetch")}return a}async function E(){let a={};try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch("http://localhost:1234/v1/models",{signal:b.signal}).finally(()=>{clearTimeout(c)});if(!d.ok)return w.warn("lm-studio-api"),{};let e=await d.text();if(e.length>1048576)return w.warn("lm-studio-api"),{};let f=JSON.parse(e);if(!f||!Array.isArray(f.data))return w.warn("invalid-lm-studio"),{};for(let b of f.data.slice(0,100))"string"==typeof b?.id&&y.test(b.id)&&(a[b.id]={name:b.id})}catch(a){a instanceof Error&&"AbortError"===a.name?w.warn("lm-studio-api"):w.warn("failed-to-fetch")}return a}function F(a=process.env){let b=t.join(s.homedir(),".config");return t.join((0,u.T)(a.XDG_CONFIG_HOME,b,"XDG_CONFIG_HOME"),"opencode")}async function G(){let[a,b]=await Promise.all([D(),E()]),c={};return Object.keys(a).length>0&&(c.ollama={npm:"@ai-sdk/openai-compatible",name:"Ollama (local)",options:{baseURL:"http://localhost:11434/v1"},models:a}),Object.keys(b).length>0&&(c.lmstudio={npm:"@ai-sdk/openai-compatible",name:"LM Studio (local)",options:{baseURL:"http://localhost:1234/v1"},models:b}),c}async function H(a){let b=function(a=process.env){let b=(a[z]??"").trim().toLowerCase();return"worktree"===b||"project"===b?"worktree":"global"===b||"user"===b?"global":(""!==b&&"off"!==b&&"0"!==b&&"false"!==b&&"none"!==b&&w.warn("opencode-config-mode-unrecognised",{variable:z,value:b}),"off")}();if("off"===b)return{written:!1,configPath:null,reason:"disabled"};let c="worktree"===b?function(a){let b=t.resolve(a);try{if(!r.lstatSync(b).isDirectory())throw Error(`Path is not a directory: ${b}`)}catch(a){if("ENOENT"===a.code)throw Error(`Path does not exist: ${b}`);throw a}return r.realpathSync(b)}(a):null,d=function(a,b=process.env){if(""!==(b[A]??"").trim())return`env:${A}`;if(null!==a)for(let b of B){let c=t.join(a,b);if(r.existsSync(c))return c}let c=F(b);for(let a of C){let b=t.join(c,a);if(r.existsSync(b))return b}return null}(c);if(null!==d)return w.info("opencode-config-generation-skipped",{mode:b,owned:d}),{written:!1,configPath:null,reason:"existing-config"};let e=c??F(),f=t.join(e,"opencode.json"),g=await G();if(0===Object.keys(g).length)return{written:!1,configPath:null,reason:"no-providers"};try{"global"===b&&r.mkdirSync(e,{recursive:!0}),r.writeFileSync(f,JSON.stringify({$schema:"https://opencode.ai/config.json",provider:g},null,2),{encoding:"utf-8",flag:"wx"})}catch(a){if("EEXIST"===a.code)return{written:!1,configPath:null,reason:"existing-config"};return w.warn("failed-to-write-opencodejson:error-insta"),{written:!1,configPath:null,reason:"write-failed"}}return w.info("opencode-config-generated",{mode:b,configPath:f}),{written:!0,configPath:f,reason:"written"}}var I=c(16983),J=c(46684),K=c(79646),L=c(28354),M=c(39333),N=c(1305),O=c(49791),P=c(62887),Q=c(72272),R=c(49154),S=c(40255),T=c(95375),U=c(27870),V=c(57510),W=c(70096),X=c(75356),Y=c(98211),Z=c(90488),$=c(85322);let _=(0,v.h)("lib/hooks/sources/opencode/ingest");async function aa(a,b,c){let d=(0,W.VM)($.k),e=(0,Y.Lu)(b.raw,b.receivedAt);if(!e)return _.info("opencode-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let f=await (0,Q.t)(d,a,e,d.parsePermissionRequest(b.raw));return _.info("opencode-permission-decided",{worktreeId:a.worktreeId,instanceId:c,decisionId:e.id,behavior:f.behavior,reason:f.reason,delivered:f.delivered,settled:f.settled}),f.settled}async function ab(a,b){let[{getDbInstance:d},{getWorktreeById:e},{applyAgentStopEvent:f}]=await Promise.all([Promise.resolve().then(c.bind(c,88807)),Promise.resolve().then(c.bind(c,56791)),Promise.all([c.e(1356),c.e(6065),c.e(1191),c.e(3480),c.e(5456),c.e(2710),c.e(1501),c.e(6486),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void _.info("opencode-stop-unresolved-target",{worktreeId:a.worktreeId});let i=await f(g,h,$.k,b);_.info("opencode-stop-applied",{worktreeId:a.worktreeId,instanceId:b,taskId:i.taskId,taskEventApplied:i.taskEventApplied,verificationRunId:i.verificationRunId})}async function ac(a,b){let c=a.instanceId??$.k;try{let d=(0,W.VM)($.k),e=(0,T.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:$.k,instanceId:c,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:d.eventIdentityOf(b.raw),identityKind:d.capabilities.eventIdentity});if(e.duplicate)return void _.info("opencode-event-duplicate-dropped",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail,by:e.by});let f={event:b.event,at:b.receivedAt,detail:b.detail?.slice(0,P.h9)??null,sessionId:b.conversationId,message:(function(a){let b=(0,V.Qd)(a.raw.properties)?a.raw.properties:{};if(a.detail===X.aF)return(0,V.NZ)(b,["metadata","command"])??(0,V.O2)(b,"permission");if(a.detail===X.Tm){let a=b.questions;return Array.isArray(a)&&(0,V.Qd)(a[0])?(0,V.O2)(a[0],"question"):null}return a.detail===X.vE?(0,V.NZ)(b,["error","data","message"])??(0,V.NZ)(b,["error","name"]):null})(b)?.slice(0,U.lY)??null,model:b.model},g={sessionStartMayArriveLate:d.capabilities.sessionStartMayArriveLate};if("notification"===b.event&&b.detail===X.aF){f.decisionId=(0,V.O2)((0,V.Qd)(b.raw.properties)?b.raw.properties:{},"id");let d=(0,Y.LF)(b.raw,b.receivedAt);f.toolName=d?.toolName??null,f.decisionPatterns=d?.patterns??null,f.promptSettled=await aa(a,b,c),(0,T.recordAgentEvent)(a.worktreeId,$.k,c,f,g);return}if("notification"===b.event&&b.detail===X.C8){f.decisionId=(0,X.Mn)(b.raw),f.promptSettled=!!(0,W.VM)($.k).capabilities.permissionReplyReleasesPrompt||(_.info("opencode-permission-reply-not-releasing",{worktreeId:a.worktreeId,instanceId:c,reason:"capability-permissionReplyReleasesPrompt-false"}),!1),(0,T.recordAgentEvent)(a.worktreeId,$.k,c,f,g),f.decisionId&&(0,S.L0)({worktreeId:a.worktreeId,cliToolId:$.k,instanceId:c},f.decisionId),_.info("opencode-permission-reply-observed",{worktreeId:a.worktreeId,instanceId:c,decisionId:f.decisionId,released:f.promptSettled});return}if((0,T.recordAgentEvent)(a.worktreeId,$.k,c,f,g),"notification"===b.event&&b.detail===X.Tm){let d=(0,W.VM)($.k).parseQuestion(b.raw);d&&((0,T.recordAskUserQuestion)(a.worktreeId,$.k,c,d,b.receivedAt),(0,T.reportQuestionPending)(a.worktreeId,$.k,c,{toolName:R.GF,decisionId:d.promptId,detail:X.Tm},b.receivedAt),_.info("opencode-question-recorded",{worktreeId:a.worktreeId,instanceId:c,decisionId:d.promptId,questionCount:d.questions.length,optionCounts:d.questions.map(a=>a.choices.length)})),await (0,Z.Vo)(a,c,f.message??null,b.receivedAt);return}if("stop"===b.event)return void await ab(a,c);"notification"===b.event&&b.detail===X.vE&&await (0,Z.dJ)(a,c,(0,V.NZ)((0,V.Qd)(b.raw.properties)?b.raw.properties:{},["error","name"]),f.message??null,b.conversationId,b.receivedAt),_.info("opencode-event-received",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail})}catch(d){_.error("opencode-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:c,event:b.event,error:d instanceof Error?d.message:String(d)})}}var ad=c(84574),ae=c(85965),af=c(33198);let ag=(0,v.h)("lib/hooks/sources/opencode/runtime");function ah(a,b){return{worktreeId:a,cliToolId:"opencode",instanceId:b}}async function ai(a,b){try{return await (0,ad.CU)(a,b)}catch(b){return ag.warn("opencode-port-reserve-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),null}}let aj=[0,500,1e3,2e3,4e3];async function ak(a,b){for(let[c,d]of aj.entries()){d>0&&await new Promise(a=>setTimeout(a,d));let e=await (0,O.sc)(b);if("healthy"===e.kind)return c>0&&ag.info("opencode-server-reachable-after-retry",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempt:c}),e.health;if("rejected"===e.kind){ag.warn("opencode-server-refused-commandmate",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,status:e.status,consequence:"structured events are off for this session; the scraper decides"});break}}return null}async function al(a){try{let b=(0,ad.hC)(a);if(null===b)return!1;if((0,af.wb)(a))return!0;let c=await ak(a,b);if(!c)return ag.info("opencode-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempts:aj.length}),!1;await ae.cC.subscribe(a,b=>{ac(a,b)});let d=await am(a);return ag.info("opencode-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,version:c.version,activity:d}),!0}catch(b){return ag.warn("opencode-event-stream-attach-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function am(a){let b=null;try{b=await ae.cC.probeActivity(a)}catch(b){ag.debug("opencode-activity-probe-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:b instanceof Error?b.message:String(b)})}return(0,af.yn)(a,b,Date.now()),b}async function an(a,b){try{if((0,af.wb)(a))return!0;let c=await (0,ad.jp)(a,b);if(null===c)return!1;return await al(a)}catch(b){return ag.warn("opencode-event-stream-resume-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ao(a){let b=a.instanceId??a.cliToolId;try{let c=(0,ad.hC)(a);if(null===c)return!1;let d=(0,af.lf)(a);if("live"!==d.state)return ag.info("opencode-abort-skipped-not-live",{worktreeId:a.worktreeId,instanceId:b,port:c,liveness:d.state}),!1;let e=(0,af.ym)(a);if(null===e)return ag.info("opencode-abort-skipped-no-session",{worktreeId:a.worktreeId,instanceId:b,port:c}),!1;let f=(0,af.H1)(a,e,2e3);if(!await (0,O.UR)(c,e))return f.cancel(),ag.warn("opencode-abort-rejected",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!1;if(!await f.seen)return ag.warn("opencode-abort-unconfirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e,timeoutMs:2e3}),!1;return ag.info("opencode-abort-confirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!0}catch(c){return ag.warn("opencode-abort-failed",{worktreeId:a.worktreeId,instanceId:b,error:c instanceof Error?c.message:String(c)}),!1}}async function ap(a){try{await (0,af.FN)(a),(0,ad.kE)(a)}catch(b){ag.warn("opencode-event-stream-release-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)})}}var aq=c(18529),ar=c(70849),as=c(27939),at=c(93949),au=c(20610),av=c(78099),aw=c(18140),ax=c(79748);let ay=/^timestamp=(\S+)/,az=/no such column: ?[A-Za-z0-9_.]*/;async function aA(a,b){let c;try{c=await (0,ax.open)(a,"r");let{size:d}=await c.stat(),e=Math.min(d,b),f=d-e,g=Buffer.alloc(e);await c.read(g,0,e,f);let h=g.toString("utf8");return f>0&&(h=h.slice(h.indexOf("\n")+1)),h}catch{return null}finally{await c?.close().catch(()=>{})}}async function aB(a,b=function(){let a=process.env.XDG_DATA_HOME||(0,t.join)((0,s.homedir)(),".local","share");return(0,t.join)(a,"opencode","log","opencode.log")}()){let c=await aA(b,262144);if(null===c)return null;let d=a-1e3;for(let a of c.split("\n")){let b=ay.exec(a);if(!b)continue;let c=Date.parse(b[1]);if(Number.isNaN(c)||c<d)continue;let e=az.exec(a);if(e)return e[0]}return null}var aC=c(69130),aD=c(77093),aE=c(49973);let aF=(0,v.h)("cli-tools/opencode"),aG=(0,L.promisify)(K.execFile),aH=[0,50,100,200];function aI(a,b){return a?`${a}
3
3
 
4
- [添付画像: ${b}]`:`[添付画像: ${b}]`}class aB extends d.Mj{navigationKeys(){return{keys:e.sM,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,ao.$s)()).executable}async launchSession(a,b,c){let d=await (0,ao.$s)(),e=d.executable;if(!e)throw(0,an.Tl)(this,(0,ao.mV)(d));let g=this.getSessionName(a,c),h=_(a,c),i=(0,B.r)({warnSidebar:!0}),j=await (0,f.N)(g);if(j){if(await this.reconcileExistingSession(g,b,{windowWidth:i,windowHeight:A.xT}),await this.isToolLive(g,{confirm:!0})){await af(h,b),ax.info("opencode-session-exists");return}ax.warn("opencode-session-relaunch",{sessionName:g}),await ah(h)}(0,F.Fq)(h);try{await z(b),j||await this.createLaunchPane(g,b);try{await ay("tmux",["resize-window","-t",(0,f.lA)(g),"-x",String(i),"-y",String(A.xT)])}catch{}await aa(h,b);let d=(0,F.wK)({target:h,executablePath:e.path,worktreePath:b}),k=(0,ak.pr)(h,b),l=null===k?d:(0,ak.XO)(d,k);null!==k&&ax.info("opencode-session-resumed",{worktreeId:a,instanceId:c??this.id,sessionId:k});let m=Date.now();if(await (0,f.V1)(g,(0,au.Y)(l),!0),await this.waitForReady(g),!await ad(h)&&null!==(0,X.hC)(h)){let b=await at(m);if(null!==b)throw ax.warn("opencode-shared-data-conflict",{worktreeId:a,finding:b}),Error(`OpenCode 1.x could not open its data (opencode log: "${b}"). OpenCode 1.x and OpenCode V2 share ~/.local/share/opencode/opencode.db, and V2 has changed tables 1.x still uses. Use only OpenCode V2, or give OpenCode 1.x a data directory of its own (docs/user-guide/cli-setup-guide.md, "OpenCode (1.x) and OpenCode V2").`)}ax.info("started-opencode-session")}catch(b){let a=(0,av.u1)(b);throw Error(`Failed to start OpenCode session: ${a}`)}}async waitForReady(a){for(let b=0;b<60;b++){try{let c=(0,g.aJ)(await (0,f.Xg)(a,50));if(g.vU.test(c))return ax.info("opencode-composer-detected",{attempt:b}),!0;if(g.LO.test(c))return ax.info("opencode-overlay-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return ax.info("opencode-ready-detection-timeout"),!1}async trySendViaServer(a,b,c){let d=await this.dispatchViaServer(a,b,c);return"delivered"===d||("skipped"!==d&&(0,aw.sK)(d),!1)}async dispatchViaServer(a,b,c){let d=a.instanceId??a.cliToolId,e=!1;try{let f=(0,X.hC)(a);if(null===f)return"skipped";let g=(0,Z.lf)(a);if("live"!==g.state)return ax.info("opencode-send-skipped-not-live",{worktreeId:a.worktreeId,instanceId:d,port:f,liveness:g.state}),"skipped";let h=(0,Z.ym)(a);if(null===h)return ax.info("opencode-send-skipped-no-session",{worktreeId:a.worktreeId,instanceId:d,port:f}),"skipped";let i=[{type:"text",text:b}];void 0!==c&&i.push({type:"file",mime:(0,E.$Y)((0,l.extname)(c)),filename:(0,l.basename)(c),url:(0,G.fy)(c)});let j=(0,G.CH)(),k=(0,ai.QH)((0,ai.Q1)(a));(0,aw.FU)(),e=!0;let m=await (0,G.wZ)(f,h,j,i,k);if("rejected"===m)return"not_sent";if("unknown"===m)return"unknown";let n=await this.verifyPostedMessage(f,h,j,b);if("found"!==n)return ax.warn("opencode-send-unverified",{worktreeId:a.worktreeId,instanceId:d,port:f,sessionId:h,messageId:j,hasImage:void 0!==c}),"missing"===n?"not_sent":"unknown";return ax.info("opencode-send-delivered-via-api",{worktreeId:a.worktreeId,instanceId:d,port:f,sessionId:h,messageId:j,hasImage:void 0!==c}),"delivered"}catch(b){if((0,aw.fi)(b))throw b;return ax.warn("opencode-send-api-failed",{worktreeId:a.worktreeId,instanceId:d,error:(0,av.u1)(b)}),e?"unknown":"skipped"}}async verifyPostedMessage(a,b,c,d){for(let e of az){e>0&&await new Promise(a=>setTimeout(a,e));let f=await (0,G.ep)(a,b,c);if("found"===f.kind)return f.texts.includes(d)?"found":"mismatch";if("missing"===f.kind)return"missing"}return"unknown"}async sendMessage(a,b,c){let d=this.getSessionName(a,c);if(await this.requireSession("OpenCode",a,c,{relaunch:!0}),await this.trySendViaServer(_(a,c),b))return void(0,i.gm)(d);try{await (0,h.FW)({sessionName:d,message:b,cliToolId:"opencode",composer:this.describeComposer()}),(0,i.gm)(d),ax.info("sent-message-to-opencode-session")}catch(b){let a=(0,av.u1)(b);throw Error(`Failed to send message to OpenCode: ${a}`)}}supportsImage(){return!0}async sendMessageWithImage(a,b,c,d){let e=this.getSessionName(a,d);await this.requireSession("OpenCode",a,d,{relaunch:!1});let f=_(a,d);if(await this.trySendViaServer(f,b,c))return void(0,i.gm)(e);ax.info("opencode-image-degraded-to-path",{worktreeId:a,instanceId:d??this.id}),await this.sendMessage(a,aA(b,c),d)}async killSession(a,b){let c=this.getSessionName(a,b),d=_(a,b),e=(0,X.hC)(d),g=await (0,aj.LQ)(d).catch(()=>null);g&&!g.captured&&ax.info("opencode-session-capture-skipped",{sessionName:c,reason:g.skipped}),await ah(d);try{if(await (0,f.N)(c)){await (0,f.V1)(c,"/exit",!1),await new Promise(a=>setTimeout(a,am.pL)),await (0,f.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,am.KI));let a=await (0,al.rY)({sessionAlive:()=>(0,f.N)(c),portAnswering:null===e?null:async()=>await (0,G.Ok)(e)!==null});a.ok||(ax.warn("opencode-graceful-exit-postcondition-failed",{sessionName:c,reason:a.reason,...null!==e?{port:e}:{}}),await (0,f.fY)(c))}else await (0,f.fY)(c);(0,i.gm)(c),ax.info("stopped-opencode-session")}catch(a){throw ax.error("session:stop-failed",{error:(0,av.u1)(a)}),a}}async interrupt(a,b){let c=this.getSessionName(a,b);if(await ag(_(a,b))){(0,i.gm)(c),ax.info("opencode-interrupt-aborted-via-api");return}await (0,f.ds)(c,"Escape"),await new Promise(a=>setTimeout(a,am.os)),await (0,f.ds)(c,"Escape"),(0,i.gm)(c),ax.info("opencode-interrupt-sent")}constructor(...a){super(...a),this.id="opencode",this.name="OpenCode",this.command="opencode"}}},53554:(a,b,c)=>{function d(a){let b="[^\\S\\n]";return RegExp(`(?:^${b}*|\xb7${b}*|${b}{2})${a}(?:${b}\\([^()\\n]{1,32}\\))?(?:${b}*\xb7|${b}{2}|${b}*$)`,"i")}c.d(b,{h:()=>g});let e={key:"BTab",cycle:["default","plan","autopilot"],indicators:[{mode:"autopilot",pattern:d("autopilot")},{mode:"plan",pattern:d("plan(?:[^\\S\\n]mode)?")}],tailRows:2,noteId:null},f={claude:{key:"BTab",cycle:["auto","manual","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:/⏵⏵\s*accept edits on\b/},{mode:"auto",pattern:/⏵⏵\s*auto mode on\b/},{mode:"plan",pattern:/⏸\s*plan mode on\b/},{mode:"manual",pattern:/⏸\s*manual mode on\b/}],tailRows:3,noteId:null},"command-code":{key:"BTab",cycle:["default","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:/»\s*accept edits on\b/},{mode:"bypass",pattern:/»\s*permission bypass on\b/},{mode:"dont-ask",pattern:/»\s*don't-ask on\b/},{mode:"plan",pattern:/^[^\S\n]*plan mode\b/},{mode:"default",pattern:/\?\s+for\s+shortcuts\b/}],tailRows:4,noteId:null},codex:{key:"BTab",cycle:["default","plan"],indicators:[{mode:"plan",pattern:/\bPlan mode\s*\(shift\+tab to cycle\)/i}],tailRows:3,noteId:"codexModelCoupled"},copilot:e,antigravity:{key:"BTab",cycle:["default","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:d("accept-edits")},{mode:"plan",pattern:d("plan(?:[^\\S\\n]mode)?")}],tailRows:2,noteId:null},"opencode-v2":{key:"BTab",cycle:["build","plan"],indicators:[{mode:"build",pattern:/^[^\S\n]*┃[^\S\n]+Build[^\S\n]·[^\S\n]/},{mode:"plan",pattern:/^[^\S\n]*┃[^\S\n]+Plan[^\S\n]·[^\S\n]/}],tailRows:4,noteId:"opencodeAgentSwitch"}};function g(a){return f[a]??null}Object.keys(f)},70849:(a,b,c)=>{c.d(b,{LQ:()=>k,SW:()=>l});var d=c(72626),e=c(84574),f=c(95375),g=c(77634),h=c(27939);let i=(0,d.h)("lib/session/opencode-session-recall");async function j(a,b){let c=new Set,d=await (0,g.GP)(a,b);for(let b=0;b<3;b+=1){if(null===d)return null;if(null===d.parentId||c.has(d.parentId))break;c.add(d.parentId),i.debug("opencode-session-parent-hop",{from:d.id,to:d.parentId}),d=await (0,g.GP)(a,d.parentId)}return d}async function k(a){let b=a.instanceId??a.cliToolId,c=(0,e.hC)(a);if(null===c)return{captured:!1,skipped:"no-port"};let d=(0,f.getLastAgentEvent)(a.worktreeId,"opencode",a.instanceId)?.sessionId;if(!(0,h.jp)(d))return{captured:!1,skipped:"no-session-observed"};let g=await j(c,d);if(null===g)return{captured:!1,skipped:"session-unreadable"};if(null===g.directory)return{captured:!1,skipped:"no-directory"};let k=(0,e.U9)(a);return null!==k&&k!==g.directory?(i.warn("opencode-session-capture-directory-mismatch",{worktreeId:a.worktreeId,instanceId:b,expected:k,reported:g.directory}),{captured:!1,skipped:"directory-mismatch"}):(0,h.F_)(a,{sessionId:g.id,title:g.title,worktreePath:g.directory})?(i.info("opencode-session-captured",{worktreeId:a.worktreeId,instanceId:b,sessionId:g.id,viaParentOf:g.id===d?null:d}),{captured:!0,memory:{sessionId:g.id,title:g.title,worktreePath:g.directory,updatedAt:Date.now()}}):{captured:!1,skipped:"not-persisted"}}async function l(a){let b=(0,e.hC)(a),c=(0,f.getLastAgentEvent)(a.worktreeId,"opencode",a.instanceId)?.sessionId;if(null!==b&&(0,h.jp)(c)){let a=await j(b,c);if(null!==a)return a.id}return(0,h.KA)(a)?.sessionId??null}},72272:(a,b,c)=>{c.d(b,{t:()=>j});var d=c(72626),e=c(40255),f=c(50474),g=c(25071),h=c(17287);let i=(0,d.h)("lib/hooks/permission-adjudication");async function j(a,b,d,k,l="event"){let m=b.instanceId??b.cliToolId,n={worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m},{resolvePermissionRequest:o}=await Promise.all([c.e(3241),c.e(6119)]).then(c.bind(c,43241)),p=o(n,k),q="allow"===p.behavior?{kind:"allowOnce"}:{kind:"abstain"};if("abstain"===q.kind){let c=(0,f.y_)(a);c.safe||i.warn("permission-request-abstain-blocks-agent",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m,toolName:k?.toolName??null,decisionId:d.id,reason:p.reason,consequence:c.summary,blocksForMs:c.blocksForMs})}let r=(0,e.qu)(n,d.id,{outcome:"allow"===p.behavior?"allow":"abstained",..."policy-suppressed"===p.reason&&p.suppressedBy?{withholdReason:p.suppressedBy}:{},promptType:"multiple_choice"}),{delivery:s}=await (0,g.GW)(a,b,d,q),t=s?.delivered===!0,u=t&&a.capabilities.permissionReplyReleasesPrompt;return(0,h.nL)(b.worktreeId,b.cliToolId,b.instanceId,{decisionId:d.id,toolName:k?.toolName??null,behavior:"allow"===p.behavior?"allow":null,reason:p.reason,delivered:t,releasedPrompt:u,trigger:l,at:d.askedAt}),(0,e.YF)(r,{delivered:t,settled:u}),i.info("permission-decision-adjudicated",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m,decisionId:d.id,toolName:k?.toolName??null,behavior:p.behavior,reason:p.reason,suppressedBy:p.suppressedBy,delivered:t,settled:u,trigger:l}),{decisionId:d.id,behavior:"allow"===p.behavior?"allow":null,reason:p.reason,delivered:t,settled:u}}},76877:(a,b,c)=>{c.d(b,{CZ:()=>k,O5:()=>m,g1:()=>f,oy:()=>n,yN:()=>l,z0:()=>g});var d=c(42422),e=c(69082);let f={id:"gemini-folder-trust",question:/Do you trust (?:the files in )?this folder\?/,signature:/\bTrust folder\b|\bDon't trust\b/,cursorRow:/^[\s│]*●\s*(\S.*?)[\s│]*$/,optionRow:/^[\s│]*(?:\S\s+)?\d\.\s+(?:Trust folder|Trust parent folder|Don't trust)\b/,minOptionRows:2,optionsWithin:8,dismissedRow:/restarting to apply the trust changes/,safeRow:/^1\.\s+Trust folder\b/,key:"Enter",liveRows:30,declaredIn:"src/lib/cli-tools/launch-dialog.ts (GEMINI_TRUST_LAUNCH_DIALOG)"},g={id:"antigravity-folder-trust",question:e.wf,signature:/\bYes, I trust this folder\b/,optionRow:/^\s*(?:\S\s+)?(?:Yes, I trust this folder|No, exit)\s*$/,minOptionRows:2,optionsWithin:4,cursorRow:/^\s*>\s+(\S.*?)\s*$/,safeRow:/^Yes, I trust this folder$/,key:"Enter",liveRows:12,declaredIn:"src/lib/cli-tools/launch-dialog.ts (ANTIGRAVITY_TRUST_LAUNCH_DIALOG)"};function h(a,b){return(0,d.aJ)(a).split("\n").map(a=>a.trimEnd()).filter(a=>""!==a.trim()).slice(-b)}function i(a,b){if(!a.dismissedRow)return b;for(let c=b.length-1;c>=0;c--)if(a.dismissedRow.test(b[c]))return b.slice(c+1);return b}function j(a,b){for(let c=b.length-1;c>=0;c--){if(!a.question.test(b[c]))continue;let d=function(a,b,c){let d=Math.min(b.length-1,c+a.optionsWithin);for(let e=c+1;e<=d;e++){if(!a.optionRow.test(b[e]))continue;let c=[];for(let d=e;d<b.length&&a.optionRow.test(b[d]);d++)c.push(b[d]);return c.length>=a.minOptionRows?c:null}return null}(a,b,c);if(d)return d}return null}function k(a,b){let c=i(a,h(b,a.liveRows)),d=j(a,c);if(!d)return c.some(b=>a.signature.test(b))?{action:"unrecognized",reason:"question-not-found"}:{action:"absent"};let e=[];for(let b of d){let c=a.cursorRow.exec(b);c&&e.push(c[1])}if(0===e.length)return{action:"unrecognized",reason:"cursor-not-found"};if(e.length>1)return{action:"unrecognized",reason:"multiple-cursors"};let f=e[0];return a.safeRow.test(f)?{action:"press",key:a.key}:{action:"hold",reason:"cursor-off-safe-row",cursorLabel:f.slice(0,80)}}function l(a,b){return null!==j(a,i(a,h(b,a.liveRows)))}function m(a,b){return null!==j(a,h(b,a.liveRows))}function n(a,b){return"absent"===b.action||"press"===b.action?null:"hold"===b.action?{event:"launch-dialog-held",fields:{dialog:a.id,...b}}:{event:"launch-dialog-unrecognized",fields:{dialog:a.id,...b,hint:`the dialog's wording or cursor drawing may have changed; compare the screen with ${a.declaredIn}`}}}},77634:(a,b,c)=>{c.d(b,{GP:()=>l,Hv:()=>h,eJ:()=>n,mf:()=>o,y4:()=>m,yg:()=>p});var d=c(72626),e=c(49791),f=c(27939);let g=(0,d.h)("lib/session/opencode-session-api"),h="session_new";function i(a,b){let c=a[b];return"string"==typeof c&&c.length>0?c:null}async function j(a,b){try{let c=await fetch(a,{...b,redirect:e.uS,signal:AbortSignal.timeout(e.T0)});if(!c.ok)return null;if(!function(a){let b=a.headers?.get?.("content-type");return"string"==typeof b&&b.split(";",1)[0]?.trim().toLowerCase()===e._t}(c))return g.debug("opencode-session-request-content-type",{url:a,contentType:c.headers?.get?.("content-type")??null}),null;return await c.json()}catch(b){return g.debug("opencode-session-request-failed",{url:a,error:b instanceof Error?b.message:String(b)}),null}}function k(a){if(!("object"==typeof a&&null!==a&&!Array.isArray(a)))return null;let b=i(a,"id");if(!(0,f.jp)(b))return null;let c=i(a,"title");return{id:b,title:null===c?null:c.slice(0,f.Y2),directory:i(a,"directory"),parentId:i(a,"parentID")}}async function l(a,b){return(0,f.jp)(b)?k(await j(`${(0,e.M2)(a)}/session/${encodeURIComponent(b)}`)):null}async function m(a,b){return(0,f.jp)(b)?k(await j(`${(0,e.M2)(a)}/session/${encodeURIComponent(b)}/fork`,{method:"POST",headers:{"content-type":e._t},body:"{}"})):null}async function n(a){return!0===await j(`${(0,e.M2)(a)}/tui/open-sessions`,{method:"POST",headers:{"content-type":e._t},body:"{}"})}async function o(a,b){return!0===await j(`${(0,e.M2)(a)}/tui/execute-command`,{method:"POST",headers:{"content-type":e._t},body:JSON.stringify({command:b})})}async function p(a,b){return!!(0,f.jp)(b)&&!0===await j(`${(0,e.M2)(a)}/tui/select-session`,{method:"POST",headers:{"content-type":e._t},body:JSON.stringify({sessionID:b})})}},78099:(a,b,c)=>{c.d(b,{Tl:()=>g});var d=c(56263),e=c(2669);let f={claude:"Install with: npm install -g @anthropic-ai/claude-code",codex:"Install with: npm install -g @openai/codex",gemini:"Install with: npm install -g @google/gemini-cli",opencode:"Install with: npm install -g opencode-ai",copilot:d.zt,"command-code":"Install with: npm install -g command-code","opencode-v2":"Install with: npm install -g @opencode/cli",antigravity:"Install the Antigravity CLI: https://antigravity.google/docs/cli/reference","vibe-local":"vibe-local is a local script rather than a published package: put your own `vibe-local` executable on PATH."};function g(a,b){var c,d;return new e.lU(a.name,(c=a,d=b,`${c.name} (${c.command}) is not installed or not in PATH. `+(d?`${d} `:"")+`${f[c.id]}`))}},83406:(a,b,c)=>{c.d(b,{Dc:()=>m,F1:()=>j,Qn:()=>l,R6:()=>r,Ug:()=>k,bO:()=>p,jI:()=>o,qT:()=>n,vj:()=>q,zu:()=>i});var d=c(36925);let e=(0,d.v)("__antigravityStartupTrustPending",()=>new Map),f=(0,d.v)("__antigravityStartupWindows",()=>new Map),g=(0,d.v)("__antigravityStartupTrustHolds",()=>new Set),h=(0,d.v)("__antigravityStartupTrustClaims",()=>new Map);function i(a){f.set(a,(f.get(a)??0)+1)}function j(a){let b=f.get(a)??0;b<=1?f.delete(a):f.set(a,b-1)}function k(a){return f.has(a)}function l(a,b=Date.now()){e.set(a,b)}function m(a){return e.has(a)}function n(a,b=Date.now()){if(g.has(a))return!1;let c=e.delete(a);return c&&h.set(a,b),c}function o(a){return g.has(a)}function p(a,b,c=Date.now()){let d=h.get(a);return void 0!==d&&c-d<b}function q(a){return g.add(a),()=>{g.delete(a)}}function r(a){e.delete(a)}},89731:(a,b,c)=>{c.d(b,{Mj:()=>E,Km:()=>F});var d=c(79646),e=c(28354),f=c(40964),g=c(79892),h=c(96463),i=c(56717),j=c(23365),k=c(53554),l=c(93949),m=c(91536),n=c(50945),o=c(78099);let p=new Set;var q=c(51297),r=c(87447),s=c(45567),t=c(72626),u=c(77093),v=c(8953),w=c(20610),x=c(16983),y=c(35583);let z=(0,e.promisify)(d.exec),A=(0,t.h)("cli-tools/base"),B=RegExp(`${s.ZM}=(?:'([^']*)'|"([^"]*)"|(\\S+))`,"g"),C=new Set,D=new Set;class E{async isInstalled(){try{return await z(`which ${this.command}`,{timeout:5e3}),!0}catch{return!1}}getSessionName(a,b){return(0,f.mf)(this.id,a,b)}async isRunning(a,b){let c=this.getSessionName(a,b);return await (0,g.N)(c)}async startSession(a,b,d,e){let f=(0,y.Hb)();try{await (0,y.PS)(f,()=>this.launchSession(a,b,d,e))}catch(b){var g;throw this.takeAdoptionMark(a,d),g={worktreeId:a,cliToolId:this.id,instanceId:d,toolName:this.name},Promise.all([c.e(1356),c.e(1191),c.e(3480)]).then(c.bind(c,81099)).then(({notifySessionStartFailurePush:a})=>a({...g,error:b})).catch(()=>{}),b}finally{(0,y.O5)(a,this.id,d,f)}let h=this.takeAdoptionMark(a,d);null!==h&&await this.warnIfHookUrlIsStale(a,h,d)}async reconcileExistingSession(a,b,c){await (0,h.St)(a,b),C.add(a),await (0,g.zT)(a,c)}takeAdoptionMark(a,b){try{let c=this.getSessionName(a,b);return C.delete(c)?c:null}catch{return null}}async warnIfHookUrlIsStale(a,b,d){if(!D.has(b))try{let f=await (0,g.Xg)(b,{startLine:-x.eu});D.add(b);let h=function(a){let b=null;for(let c of(0,q.aJ)(a).matchAll(B)){let a=c[1]??c[2]??c[3]??null;a&&(b=a)}return b}(f);if(null===h)return;let i=function(a){try{let b=new URL(a);if(""!==b.port)return Number(b.port);return"https:"===b.protocol?443:80}catch{return null}}(h),j=(0,r.D0)();if(null===i||i===j)return;A.warn("session:hook-url-stale",{cliToolId:this.id,sessionName:b,sessionPort:i,serverPort:j});var e={worktreeId:a,cliToolId:this.id,instanceId:d,toolName:this.name,sessionPort:i,serverPort:j};let k=[e.worktreeId,e.instanceId??e.cliToolId,e.sessionPort,e.serverPort].join(":");p.has(k)||(p.add(k),Promise.all([c.e(1356),c.e(1191),c.e(3480)]).then(c.bind(c,81099)).then(({notifyStaleHookUrlPush:a})=>a(e)).catch(()=>{}))}catch(b){A.debug("session:hook-url-probe-failed",{cliToolId:this.id,worktreeId:a,error:b instanceof Error?b.message:String(b)})}}async warnIfRunningSessionHookUrlIsStale(a,b){let c;try{c=this.getSessionName(a,b)}catch{return}await this.warnIfHookUrlIsStale(a,c,b)}async interrupt(a,b){let c=this.getSessionName(a,b);await (0,g.ds)(c,"Escape")}describeComposer(){return(0,i.gc)(this.id)}gracefulExitSequence(){return(0,l.JV)(this.id)}captureSpec(){return(0,j.y)(this.id)}livenessSpec(){return(0,m.H7)(this.id)}async isToolLive(a,b){let c=this.livenessSpec(),d=await (0,n.Q)(a,c);if(d.alive)return!0;if(!b?.confirm)return!1;await new Promise(a=>setTimeout(a,w.kZ));let e=await (0,n.Q)(a,c);return e.alive?(A.info("session:liveness-confirm-recovered",{cliToolId:this.id,firstReason:d.reason}),!0):(A.warn("session:tool-exited",{cliToolId:this.id,reason:e.reason}),!1)}async relaunchIfToolExited(a,b){let c=this.getSessionName(a,b);if(await this.isToolLive(c))return;let d=await (0,g.nS)(c);if(null===d)return void A.warn("session:relaunch-skipped-no-path",{cliToolId:this.id,worktreeId:a});A.info("session:relaunch-before-send",{cliToolId:this.id,sessionName:c}),await this.startSession(a,d,b)}async requireSession(a,b,c,d){let e=this.getSessionName(b,c);if(!await (0,g.N)(e))throw Error(`${a} session ${e} does not exist. Start the session first.`);d.relaunch&&await this.relaunchIfToolExited(b,c)}async requireInstalled(){if(!await this.isInstalled())throw(0,o.Tl)(this)}async resolveLaunchPane(a,b,c,d){let e=this.getSessionName(a,c),f=await (0,g.N)(e);if(f){if(await this.reconcileExistingSession(e,b),await this.isToolLive(e,{confirm:!0}))return d.logger.info(d.liveAction),{sessionName:e,exists:f,live:!0};d.logger.warn(d.relaunchAction,{sessionName:e})}return{sessionName:e,exists:f,live:!1}}async createLaunchPane(a,b){await (0,g.jw)({sessionName:a,workingDirectory:b}),await new Promise(a=>setTimeout(a,w.Uc))}async requestExitAndKill(a,b,c){let d=this.getSessionName(a,b);try{await (0,g.N)(d)&&await c.requestExit(d);let a=await (0,g.fY)(d);c.afterKill?.(d),a&&c.logger.info(c.stoppedAction)}catch(a){throw c.logger.error("session:stop-failed",{error:(0,u.u1)(a)}),a}}navigationKeys(){return{keys:v.qD,leaderKey:null}}agentModeSpec(){return(0,k.h)(this.id)}}function F(a,b,c){a instanceof E&&a.warnIfRunningSessionHookUrlIsStale(b,c).catch(()=>{})}},93949:(a,b,c)=>{c.d(b,{JV:()=>j,M0:()=>g,rY:()=>l});var d=c(56263),e=c(20610),f=c(86069);let g="/exit",h={keys:[(0,f.IS)("C-d")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},i={claude:h,codex:h,antigravity:h,gemini:{keys:[(0,f.IS)("C-c",e.Is),(0,f.iF)(`/quit\r`,void 0)],exitWaitMs:e.Zf,ownsLoopbackServer:!1},"vibe-local":{keys:[(0,f.IS)("C-c",e.Is),(0,f.IS)("C-c")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},copilot:{keys:[(0,f.IS)("C-c",e.Is),(0,f.iF)("/exit",d.L1),(0,f.IS)("Enter")],exitWaitMs:e.Rk,ownsLoopbackServer:!1},"command-code":{keys:[(0,f.iF)("/exit",e.pL),(0,f.IS)("Enter")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},opencode:{keys:[(0,f.iF)("/exit",e.pL),(0,f.IS)("Enter")],exitWaitMs:e.KI,ownsLoopbackServer:!0},"opencode-v2":{keys:[(0,f.iF)(g,e.pL),(0,f.IS)("Enter")],exitWaitMs:e.Lw,ownsLoopbackServer:!0}};function j(a){return i[a]??h}let k=a=>new Promise(b=>setTimeout(b,a));async function l(a){let b=Math.max(1,a.attempts??1),c=a.intervalMs??0,d=a.sleep??k,e=!0;for(let f=0;f<b&&(e=await a.sessionAlive());f+=1)f<b-1&&c>0&&await d(c);if(e)return{ok:!1,reason:"graceful_exit_timeout"};let f=a.portAnswering;if(!f)return{ok:!0};let g=!0;for(let a=0;a<b&&(g=await f());a+=1)a<b-1&&c>0&&await d(c);return g?{ok:!1,reason:"port_orphaned"}:{ok:!0}}}};
4
+ [添付画像: ${b}]`:`[添付画像: ${b}]`}class aJ extends d.Mj{navigationKeys(){return{keys:e.sM,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,aw.$s)()).executable}async launchSession(a,b,c){let d=await (0,aw.$s)(),e=d.executable;if(!e)throw(0,av.Tl)(this,(0,aw.mV)(d));let g=this.getSessionName(a,c),h=ah(a,c),i=(0,J.r)({warnSidebar:!0}),j=await (0,f.N)(g);if(j){if(await this.reconcileExistingSession(g,b,{windowWidth:i,windowHeight:I.xT}),await this.isToolLive(g,{confirm:!0})){await an(h,b),aF.info("opencode-session-exists");return}aF.warn("opencode-session-relaunch",{sessionName:g}),await ap(h)}(0,N.Fq)(h);try{await H(b),j||await this.createLaunchPane(g,b);try{await aG("tmux",["resize-window","-t",(0,f.lA)(g),"-x",String(i),"-y",String(I.xT)])}catch{}await ai(h,b);let d=(0,N.wK)({target:h,executablePath:e.path,worktreePath:b}),k=(0,as.pr)(h,b),l=null===k?d:(0,as.XO)(d,k);null!==k&&aF.info("opencode-session-resumed",{worktreeId:a,instanceId:c??this.id,sessionId:k});let m=Date.now();if(await this.typeLaunchLines(g,[(0,aC.Y)(l)]),await this.waitForReady(g),!await al(h)&&null!==(0,ad.hC)(h)){let b=await aB(m);if(null!==b)throw aF.warn("opencode-shared-data-conflict",{worktreeId:a,finding:b}),Error(`OpenCode 1.x could not open its data (opencode log: "${b}"). OpenCode 1.x and OpenCode V2 share ~/.local/share/opencode/opencode.db, and V2 has changed tables 1.x still uses. Use only OpenCode V2, or give OpenCode 1.x a data directory of its own (docs/user-guide/cli-setup-guide.md, "OpenCode (1.x) and OpenCode V2").`)}aF.info("started-opencode-session")}catch(b){let a=(0,aD.u1)(b);throw Error(`Failed to start OpenCode session: ${a}`)}}async waitForReady(a){for(let b=0;b<60;b++){try{let c=(0,g.aJ)(await (0,f.Xg)(a,50));if(g.vU.test(c))return aF.info("opencode-composer-detected",{attempt:b}),!0;if(g.LO.test(c))return aF.info("opencode-overlay-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return aF.info("opencode-ready-detection-timeout"),!1}async trySendViaServer(a,b,c,d){let e=await this.dispatchViaServer(a,b,c);return"delivered"===e||("skipped"!==e&&(0,aE.sK)(e),"unknown"===e&&void 0!==d&&(d.unknown=!0),!1)}async dispatchViaServer(a,b,c){let d=a.instanceId??a.cliToolId,e=!1;try{let f=(0,ad.hC)(a);if(null===f)return"skipped";let g=(0,af.lf)(a);if("live"!==g.state)return aF.info("opencode-send-skipped-not-live",{worktreeId:a.worktreeId,instanceId:d,port:f,liveness:g.state}),"skipped";let h=(0,af.ym)(a);if(null===h)return aF.info("opencode-send-skipped-no-session",{worktreeId:a.worktreeId,instanceId:d,port:f}),"skipped";let i=[{type:"text",text:b}];void 0!==c&&i.push({type:"file",mime:(0,M.$Y)((0,t.extname)(c)),filename:(0,t.basename)(c),url:(0,O.fy)(c)});let j=(0,O.CH)(),k=(0,aq.QH)((0,aq.Q1)(a));(0,aE.FU)(),e=!0;let l=await (0,O.wZ)(f,h,j,i,k);if("rejected"===l)return"not_sent";if("unknown"===l)return"unknown";let m=await this.verifyPostedMessage(f,h,j,b);if("found"!==m)return aF.warn("opencode-send-unverified",{worktreeId:a.worktreeId,instanceId:d,port:f,sessionId:h,messageId:j,hasImage:void 0!==c}),"missing"===m?"not_sent":"unknown";return aF.info("opencode-send-delivered-via-api",{worktreeId:a.worktreeId,instanceId:d,port:f,sessionId:h,messageId:j,hasImage:void 0!==c}),"delivered"}catch(b){if((0,aE.fi)(b))throw b;return aF.warn("opencode-send-api-failed",{worktreeId:a.worktreeId,instanceId:d,error:(0,aD.u1)(b)}),e?"unknown":"skipped"}}async verifyPostedMessage(a,b,c,d){for(let e of aH){e>0&&await new Promise(a=>setTimeout(a,e));let f=await (0,O.ep)(a,b,c);if("found"===f.kind)return f.texts.includes(d)?"found":"mismatch";if("missing"===f.kind)return"missing"}return"unknown"}async sendMessage(a,b,c){await this.sendMessageAfterDispatch(a,b,c,{unknown:!1})}async sendMessageAfterDispatch(a,b,c,d){let e=this.getSessionName(a,c);try{await this.requireSession("OpenCode",a,c,{relaunch:!0})}catch(a){throw this.keepUnknownDispatch(a,d,e)??a}if(await this.trySendViaServer(ah(a,c),b,void 0,d))return void(0,q.gm)(e);try{await this.waitForPrompt(e),await (0,h.FW)({sessionName:e,message:b,cliToolId:"opencode",composer:this.describeComposer(),readiness:{label:"OpenCode",isReady:n}}),(0,q.gm)(e),aF.info("sent-message-to-opencode-session")}catch(c){let a=(0,aD.u1)(c),b=this.keepUnknownDispatch(c,d,e);if(b)throw b;throw Error(`Failed to send message to OpenCode: ${a}`,{cause:c})}}keepUnknownDispatch(a,b,c){if(!b.unknown)return null;let d=(0,p.Nq)(a);return"not-sent"!==d.state?null:(aF.warn("opencode-send-not-typed-after-unknown-dispatch",{sessionName:c,reason:d.reason}),Error(`Failed to send message to OpenCode: the keyboard fallback typed nothing (${d.reason}), but an earlier server dispatch may have delivered the message (Issue #4040)`,{cause:a}))}async waitForPrompt(a){let b=Date.now()+15e3,c=(0,o.uo)();for(;Date.now()<b;){let d=null;try{let e=await (0,o.IS)(()=>(0,f.Xg)(a,50),b);if(null===e)break;if(n(e))return;let g=(0,j.WC)(e,"opencode");c.observe(!(0,j.f8)(g)&&(g.hasActivePrompt||"waiting"===g.status))&&(aF.warn("opencode-prompt-wait-dialog",{sessionName:a,reads:c.reads,reason:g.reason}),d=g.hasActivePrompt?(0,o.cA)(a,"OpenCode"):Error(`OpenCode prompt not ready: a dialog or overlay (${g.reason}) stayed up for ${o.yp}ms before sending; nothing was typed (Issue #4084)`))}catch(b){c.reset(),aF.debug("opencode-prompt-capture-failed",{sessionName:a,error:(0,aD.u1)(b)})}if(d)throw d;let e=b-Date.now();if(e<=0)break;await new Promise(a=>setTimeout(a,Math.min(500,e)))}throw aF.info("opencode-prompt-not-detected"),Error("OpenCode prompt not ready: timed out waiting for the input prompt before sending")}supportsImage(){return!0}async sendMessageWithImage(a,b,c,d){let e=this.getSessionName(a,d);await this.requireSession("OpenCode",a,d,{relaunch:!1});let f=ah(a,d),g={unknown:!1};if(await this.trySendViaServer(f,b,c,g))return void(0,q.gm)(e);aF.info("opencode-image-degraded-to-path",{worktreeId:a,instanceId:d??this.id}),await this.sendMessageAfterDispatch(a,aI(b,c),d,g)}async killSession(a,b){let c=this.getSessionName(a,b),d=ah(a,b),e=(0,ad.hC)(d),g=await (0,ar.LQ)(d).catch(()=>null);g&&!g.captured&&aF.info("opencode-session-capture-skipped",{sessionName:c,reason:g.skipped}),await ap(d);try{if(await (0,f.N)(c)){await (0,f.V1)(c,"/exit",!1),await new Promise(a=>setTimeout(a,au.pL)),await (0,f.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,au.KI));let a=await (0,at.rY)({sessionAlive:()=>(0,f.N)(c),portAnswering:null===e?null:async()=>await (0,O.Ok)(e)!==null});a.ok||(aF.warn("opencode-graceful-exit-postcondition-failed",{sessionName:c,reason:a.reason,...null!==e?{port:e}:{}}),await (0,f.fY)(c))}else await (0,f.fY)(c);(0,q.gm)(c),aF.info("stopped-opencode-session")}catch(a){throw aF.error("session:stop-failed",{error:(0,aD.u1)(a)}),a}}async interrupt(a,b){let c=this.getSessionName(a,b);if(await ao(ah(a,b))){(0,q.gm)(c),aF.info("opencode-interrupt-aborted-via-api");return}await (0,f.ds)(c,"Escape"),await new Promise(a=>setTimeout(a,au.os)),await (0,f.ds)(c,"Escape"),(0,q.gm)(c),aF.info("opencode-interrupt-sent")}constructor(...a){super(...a),this.id="opencode",this.name="OpenCode",this.command="opencode"}}},93949:(a,b,c)=>{c.d(b,{JV:()=>j,M0:()=>g,rY:()=>l});var d=c(56263),e=c(20610),f=c(86069);let g="/exit",h={keys:[(0,f.IS)("C-d")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},i={claude:h,codex:h,antigravity:h,gemini:{keys:[(0,f.IS)("C-c",e.Is),(0,f.iF)(`/quit\r`,void 0)],exitWaitMs:e.Zf,ownsLoopbackServer:!1},"vibe-local":{keys:[(0,f.IS)("C-c",e.Is),(0,f.IS)("C-c")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},copilot:{keys:[(0,f.IS)("C-c",e.Is),(0,f.iF)("/exit",d.L1),(0,f.IS)("Enter")],exitWaitMs:e.Rk,ownsLoopbackServer:!1},"command-code":{keys:[(0,f.iF)("/exit",e.pL),(0,f.IS)("Enter")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},opencode:{keys:[(0,f.iF)("/exit",e.pL),(0,f.IS)("Enter")],exitWaitMs:e.KI,ownsLoopbackServer:!0},"opencode-v2":{keys:[(0,f.iF)(g,e.pL),(0,f.IS)("Enter")],exitWaitMs:e.Lw,ownsLoopbackServer:!0}};function j(a){return i[a]??h}let k=a=>new Promise(b=>setTimeout(b,a));async function l(a){let b=Math.max(1,a.attempts??1),c=a.intervalMs??0,d=a.sleep??k,e=!0;for(let f=0;f<b&&(e=await a.sessionAlive());f+=1)f<b-1&&c>0&&await d(c);if(e)return{ok:!1,reason:"graceful_exit_timeout"};let f=a.portAnswering;if(!f)return{ok:!0};let g=!0;for(let a=0;a<b&&(g=await f());a+=1)a<b-1&&c>0&&await d(c);return g?{ok:!1,reason:"port_orphaned"}:{ok:!0}}}};
@@ -17,11 +17,11 @@
17
17
  "wasm": [],
18
18
  "assets": [],
19
19
  "env": {
20
- "__NEXT_BUILD_ID": "fqfSDqQMweROeHUzOt_m1",
21
- "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "Ygo0WkbtnkiyC4r41l+IqsZf0/4dB2LSuSDL0PXY6CM=",
22
- "__NEXT_PREVIEW_MODE_ID": "28c5a60e2b27fc4b43e2f5a3d49ab779",
23
- "__NEXT_PREVIEW_MODE_SIGNING_KEY": "5ac967b952d958a8df1c655d29555a637769e7ed3ff68b6a007bce71dffde16f",
24
- "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "e7c5dcc7d0ee7f4a3e0d72fc75f861ed610960389222dc99fde28d31748ff9ed"
20
+ "__NEXT_BUILD_ID": "LNfVZiq6FZwKsV7L9Mi6M",
21
+ "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "xEnixD5udDCOZNezIMo+XyN4QpYm7ow4f4oHHfxgDis=",
22
+ "__NEXT_PREVIEW_MODE_ID": "86359e476c251a6de6a645ab3730da04",
23
+ "__NEXT_PREVIEW_MODE_SIGNING_KEY": "a289416a0314a2d914317657ee20b52fca0675fbe002403fc400135904bacef2",
24
+ "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "77c757c0bea502915e69ab3c413116a61dca8a50e763af7e78cb52855b92046f"
25
25
  }
26
26
  }
27
27
  },
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-838df0273b03af19.js" defer=""></script><script src="/_next/static/chunks/framework-eaf13c96191cb608.js" defer=""></script><script src="/_next/static/chunks/main-37ca13e38030fe8b.js" defer=""></script><script src="/_next/static/chunks/pages/_app-4b3fb5e477a0267f.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c970d8b55ace1b48.js" defer=""></script><script src="/_next/static/fqfSDqQMweROeHUzOt_m1/_buildManifest.js" defer=""></script><script src="/_next/static/fqfSDqQMweROeHUzOt_m1/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"fqfSDqQMweROeHUzOt_m1","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-838df0273b03af19.js" defer=""></script><script src="/_next/static/chunks/framework-eaf13c96191cb608.js" defer=""></script><script src="/_next/static/chunks/main-37ca13e38030fe8b.js" defer=""></script><script src="/_next/static/chunks/pages/_app-4b3fb5e477a0267f.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c970d8b55ace1b48.js" defer=""></script><script src="/_next/static/LNfVZiq6FZwKsV7L9Mi6M/_buildManifest.js" defer=""></script><script src="/_next/static/LNfVZiq6FZwKsV7L9Mi6M/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"LNfVZiq6FZwKsV7L9Mi6M","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"Ygo0WkbtnkiyC4r41l+IqsZf0/4dB2LSuSDL0PXY6CM="}
1
+ {"node":{},"edge":{},"encryptionKey":"xEnixD5udDCOZNezIMo+XyN4QpYm7ow4f4oHHfxgDis="}
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2407],{52407:(e,t,n)=>{n.d(t,{Fx:()=>h,Rh:()=>b,_X:()=>c,fl:()=>s,nG:()=>d,sV:()=>o});var r=n(12115),u=n(60199);let l="/api/capabilities";function c(e){return!1!==e.browserOnline&&("connected"===e.realtimeStatus||!0===e.serverReachable)}function o(e){return!1===e.browserOnline||!1===e.serverReachable}let i=new Map;async function a(e,t){let n="function"==typeof AbortController?new AbortController:void 0,r=n?setTimeout(()=>n.abort(),t):void 0;try{return await fetch(e,{method:"GET",cache:"no-store",credentials:"same-origin",signal:null==n?void 0:n.signal}),!0}catch(e){return!1}finally{void 0!==r&&clearTimeout(r)}}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5e3;if("function"!=typeof fetch)return Promise.resolve(!1);let n=i.get(e);if(n)return n;let r=a(e,t).finally(()=>{i.delete(e)});return i.set(e,r),r}let f=new Set;function d(e){f.forEach(t=>{try{t(e)}catch(e){}})}function b(e){return f.add(e),()=>{f.delete(e)}}function h(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{probeUrl:t=l,probeDelayMs:n=1e3,probeIntervalMs:c=15e3,probeTimeoutMs:o=5e3,surfaceDelayMs:i=1500,probe:a=!0}=e,{status:f}=(0,u.xM)(),[d,h]=(0,r.useState)(!0),[v,y]=(0,r.useState)(null),[w,m]=(0,r.useState)(null),p=(0,r.useCallback)(e=>{y(t=>t===e?t:e),e&&m(Date.now())},[]);(0,r.useEffect)(()=>{if("undefined"==typeof navigator)return;h(!1!==navigator.onLine);let e=()=>{y(null),h(!0)},t=()=>{y(null),h(!1)};return window.addEventListener("online",e),window.addEventListener("offline",t),()=>{window.removeEventListener("online",e),window.removeEventListener("offline",t)}},[]),(0,r.useEffect)(()=>{"connected"===f&&p(!0)},[f,p]),(0,r.useEffect)(()=>b(p),[p]);let g=(0,r.useMemo)(()=>({browserOnline:d,realtimeStatus:f,serverReachable:v}),[d,f,v]),S=g.browserOnline?"connected"===g.realtimeStatus?"online":!1===g.serverReachable?"offline":!0===g.serverReachable||"connecting"===g.realtimeStatus?"reconnecting":"offline":"offline",E="online"!==S,k=(0,r.useRef)({url:t,timeoutMs:o});k.current={url:t,timeoutMs:o};let C=a&&E&&d;(0,r.useEffect)(()=>{let e;if(!C||"function"!=typeof fetch)return;let t=!1,r=async()=>{let{url:n,timeoutMs:u}=k.current,l=await s(n,u);t||(p(l),e=setTimeout(r,c))};return e=setTimeout(r,n),()=>{t=!0,void 0!==e&&clearTimeout(e)}},[C,n,c,p]);let[R,T]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(!E)return void T(!1);if(i<=0)return void T(!0);let e=setTimeout(()=>T(!0),i);return()=>clearTimeout(e)},[E,i]);let M=(0,r.useCallback)(()=>{if("function"!=typeof fetch)return;let{url:e,timeoutMs:t}=k.current;s(e,t).then(p)},[p]);return(0,r.useMemo)(()=>({status:S,isOnline:"online"===S,isReconnecting:"reconnecting"===S,isOffline:"offline"===S,shouldSurface:E&&R,signals:g,lastReachableAt:w,recheck:M}),[S,E,R,g,w,M])}},52703:(e,t,n)=>{n.d(t,{Oo:()=>u,ST:()=>r,T4:()=>o,dz:()=>c,rz:()=>l,zS:()=>i});let r="client_version",u="version_mismatch",l="chat_turn_progress",c="messages_invalidated",o="model_changed";function i(e){let t;try{t=JSON.parse(e)}catch(e){return null}if(!t||"object"!=typeof t)return null;let n=t;if("broadcast"===n.type){let e=n.data;return e&&"object"==typeof e?"string"!=typeof e.type?null:(void 0===e.worktreeId&&"string"==typeof n.worktreeId&&(e.worktreeId=n.worktreeId),e):null}return"string"==typeof n.type?n:null}},60199:(e,t,n)=>{n.d(t,{tS:()=>s,xM:()=>f,T3:()=>d});var r=n(95155),u=n(12115),l=n(52703);function c(){return"undefined"!=typeof globalThis&&"function"==typeof globalThis.WebSocket?globalThis.WebSocket:null}let o=()=>{},i={status:"disconnected",connected:!1,subscribe:o,unsubscribe:o,addListener:()=>o},a=(0,u.createContext)(null);function s(e){let{children:t,enabled:n=!0}=e,o=(0,u.useRef)(new Set),i=(0,u.useRef)(new Map),{status:s,subscribe:f,unsubscribe:d}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{onEvent:t,onStatusChange:n,autoReconnect:r=!0,reconnectBaseDelay:o=1e3,reconnectMaxDelay:i=3e4,livenessTimeout:a=75e3,livenessCheckInterval:s=5e3,enabled:f=!0}=e,[d,b]=(0,u.useState)("disconnected"),h=(0,u.useRef)(null),v=(0,u.useRef)(null),y=(0,u.useRef)(0),w=(0,u.useRef)(new Set),m=(0,u.useRef)(!1),p=(0,u.useRef)(0),g=(0,u.useRef)(()=>{}),S=(0,u.useRef)(t);S.current=t;let E=(0,u.useRef)(n);E.current=n;let k=(0,u.useCallback)(e=>{var t;b(e),null==(t=E.current)||t.call(E,e)},[]),C=(0,u.useCallback)(()=>{null!==v.current&&(clearTimeout(v.current),v.current=null)},[]),R=(0,u.useCallback)(()=>{if(m.current||!r||"undefined"!=typeof document&&"hidden"===document.visibilityState)return;C();let e=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Math.random;return Math.max(0,Math.round(Math.min(t*2**Math.max(0,e),n)*(1+(2*r()-1)*.2)))}(y.current,o,i);y.current+=1,v.current=setTimeout(()=>{v.current=null,g.current()},e)},[r,o,i,C]),T=(0,u.useCallback)(()=>{if(!f)return;let e=c();if(!e||h.current&&(h.current.readyState===e.OPEN||h.current.readyState===e.CONNECTING))return;C(),m.current=!1,p.current=Date.now(),k("connecting");let t="https:"===window.location.protocol?"wss:":"ws:",n=new e("".concat(t,"//").concat(window.location.host));h.current=n,n.onopen=()=>{y.current=0,p.current=Date.now(),k("connected");try{n.send(JSON.stringify({type:l.ST,version:"0.49.1"}))}catch(e){}w.current.forEach(e=>{try{n.send(JSON.stringify({type:"subscribe",worktreeId:e}))}catch(e){}})},n.onmessage=e=>{var t;p.current=Date.now();let n="string"==typeof e.data?e.data:String(e.data),r=(0,l.zS)(n);r&&"heartbeat"!==r.type&&(null==(t=S.current)||t.call(S,r))},n.onerror=()=>{k("error")},n.onclose=()=>{h.current=null,k("disconnected"),R()}},[f,k,C,R]);g.current=T;let M=(0,u.useCallback)(()=>{let e=h.current;if(e){e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,h.current=null;try{e.close(4001,"half-open")}catch(e){}k("disconnected"),R()}},[k,R]),O=(0,u.useCallback)(()=>{if(C(),m.current=!0,h.current){try{h.current.close(1e3,"Client disconnect")}catch(e){}h.current=null}},[C]),N=(0,u.useCallback)(e=>{let t=h.current,n=c();if(t&&n&&t.readyState===n.OPEN)try{t.send(JSON.stringify(e))}catch(e){}},[]),_=(0,u.useCallback)(e=>{w.current.has(e)||(w.current.add(e),N({type:"subscribe",worktreeId:e}))},[N]),L=(0,u.useCallback)(e=>{w.current.has(e)&&(w.current.delete(e),N({type:"unsubscribe",worktreeId:e}))},[N]);return(0,u.useEffect)(()=>{if(f)return T(),()=>{O()}},[f,T,O]),(0,u.useEffect)(()=>{if(!f)return;let e=setInterval(()=>{let e=h.current,t=c();e&&t&&e.readyState===t.OPEN&&(Date.now()-p.current<a||M())},s);return()=>clearInterval(e)},[f,a,s,M]),(0,u.useEffect)(()=>{if(!f||"undefined"==typeof document)return;let e=()=>{"visible"===document.visibilityState&&(h.current||(y.current=0,T()))};return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[f,T]),(0,u.useEffect)(()=>{if(!f)return;let e=()=>{h.current||(y.current=0,T())};return window.addEventListener("online",e),()=>window.removeEventListener("online",e)},[f,T]),{status:d,subscribe:_,unsubscribe:L,send:N}}({enabled:n,onEvent:(0,u.useCallback)(e=>{o.current.forEach(t=>{try{t(e)}catch(e){}})},[])}),b=(0,u.useCallback)(e=>{var t;let n=i.current,r=null!=(t=n.get(e))?t:0;n.set(e,r+1),0===r&&f(e)},[f]),h=(0,u.useCallback)(e=>{var t;let n=i.current,r=null!=(t=n.get(e))?t:0;r<=1?(n.delete(e),d(e)):n.set(e,r-1)},[d]),v=(0,u.useCallback)(e=>(o.current.add(e),()=>{o.current.delete(e)}),[]),y=(0,u.useMemo)(()=>({status:s,connected:"connected"===s,subscribe:b,unsubscribe:h,addListener:v}),[s,b,h,v]);return(0,r.jsx)(a.Provider,{value:y,children:t})}function f(){var e;return null!=(e=(0,u.useContext)(a))?e:i}function d(e){let{addListener:t}=f(),n=(0,u.useRef)(e);n.current=e,(0,u.useEffect)(()=>t(e=>n.current(e)),[t])}}}]);
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2407],{52407:(e,t,n)=>{n.d(t,{Fx:()=>h,Rh:()=>b,_X:()=>c,fl:()=>s,nG:()=>d,sV:()=>o});var r=n(12115),u=n(60199);let l="/api/capabilities";function c(e){return!1!==e.browserOnline&&("connected"===e.realtimeStatus||!0===e.serverReachable)}function o(e){return!1===e.browserOnline||!1===e.serverReachable}let i=new Map;async function a(e,t){let n="function"==typeof AbortController?new AbortController:void 0,r=n?setTimeout(()=>n.abort(),t):void 0;try{return await fetch(e,{method:"GET",cache:"no-store",credentials:"same-origin",signal:null==n?void 0:n.signal}),!0}catch(e){return!1}finally{void 0!==r&&clearTimeout(r)}}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5e3;if("function"!=typeof fetch)return Promise.resolve(!1);let n=i.get(e);if(n)return n;let r=a(e,t).finally(()=>{i.delete(e)});return i.set(e,r),r}let f=new Set;function d(e){f.forEach(t=>{try{t(e)}catch(e){}})}function b(e){return f.add(e),()=>{f.delete(e)}}function h(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{probeUrl:t=l,probeDelayMs:n=1e3,probeIntervalMs:c=15e3,probeTimeoutMs:o=5e3,surfaceDelayMs:i=1500,probe:a=!0}=e,{status:f}=(0,u.xM)(),[d,h]=(0,r.useState)(!0),[v,y]=(0,r.useState)(null),[w,m]=(0,r.useState)(null),p=(0,r.useCallback)(e=>{y(t=>t===e?t:e),e&&m(Date.now())},[]);(0,r.useEffect)(()=>{if("undefined"==typeof navigator)return;h(!1!==navigator.onLine);let e=()=>{y(null),h(!0)},t=()=>{y(null),h(!1)};return window.addEventListener("online",e),window.addEventListener("offline",t),()=>{window.removeEventListener("online",e),window.removeEventListener("offline",t)}},[]),(0,r.useEffect)(()=>{"connected"===f&&p(!0)},[f,p]),(0,r.useEffect)(()=>b(p),[p]);let g=(0,r.useMemo)(()=>({browserOnline:d,realtimeStatus:f,serverReachable:v}),[d,f,v]),S=g.browserOnline?"connected"===g.realtimeStatus?"online":!1===g.serverReachable?"offline":!0===g.serverReachable||"connecting"===g.realtimeStatus?"reconnecting":"offline":"offline",E="online"!==S,k=(0,r.useRef)({url:t,timeoutMs:o});k.current={url:t,timeoutMs:o};let C=a&&E&&d;(0,r.useEffect)(()=>{let e;if(!C||"function"!=typeof fetch)return;let t=!1,r=async()=>{let{url:n,timeoutMs:u}=k.current,l=await s(n,u);t||(p(l),e=setTimeout(r,c))};return e=setTimeout(r,n),()=>{t=!0,void 0!==e&&clearTimeout(e)}},[C,n,c,p]);let[R,T]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(!E)return void T(!1);if(i<=0)return void T(!0);let e=setTimeout(()=>T(!0),i);return()=>clearTimeout(e)},[E,i]);let M=(0,r.useCallback)(()=>{if("function"!=typeof fetch)return;let{url:e,timeoutMs:t}=k.current;s(e,t).then(p)},[p]);return(0,r.useMemo)(()=>({status:S,isOnline:"online"===S,isReconnecting:"reconnecting"===S,isOffline:"offline"===S,shouldSurface:E&&R,signals:g,lastReachableAt:w,recheck:M}),[S,E,R,g,w,M])}},52703:(e,t,n)=>{n.d(t,{Oo:()=>u,ST:()=>r,T4:()=>o,dz:()=>c,rz:()=>l,zS:()=>i});let r="client_version",u="version_mismatch",l="chat_turn_progress",c="messages_invalidated",o="model_changed";function i(e){let t;try{t=JSON.parse(e)}catch(e){return null}if(!t||"object"!=typeof t)return null;let n=t;if("broadcast"===n.type){let e=n.data;return e&&"object"==typeof e?"string"!=typeof e.type?null:(void 0===e.worktreeId&&"string"==typeof n.worktreeId&&(e.worktreeId=n.worktreeId),e):null}return"string"==typeof n.type?n:null}},60199:(e,t,n)=>{n.d(t,{tS:()=>s,xM:()=>f,T3:()=>d});var r=n(95155),u=n(12115),l=n(52703);function c(){return"undefined"!=typeof globalThis&&"function"==typeof globalThis.WebSocket?globalThis.WebSocket:null}let o=()=>{},i={status:"disconnected",connected:!1,subscribe:o,unsubscribe:o,addListener:()=>o},a=(0,u.createContext)(null);function s(e){let{children:t,enabled:n=!0}=e,o=(0,u.useRef)(new Set),i=(0,u.useRef)(new Map),{status:s,subscribe:f,unsubscribe:d}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{onEvent:t,onStatusChange:n,autoReconnect:r=!0,reconnectBaseDelay:o=1e3,reconnectMaxDelay:i=3e4,livenessTimeout:a=75e3,livenessCheckInterval:s=5e3,enabled:f=!0}=e,[d,b]=(0,u.useState)("disconnected"),h=(0,u.useRef)(null),v=(0,u.useRef)(null),y=(0,u.useRef)(0),w=(0,u.useRef)(new Set),m=(0,u.useRef)(!1),p=(0,u.useRef)(0),g=(0,u.useRef)(()=>{}),S=(0,u.useRef)(t);S.current=t;let E=(0,u.useRef)(n);E.current=n;let k=(0,u.useCallback)(e=>{var t;b(e),null==(t=E.current)||t.call(E,e)},[]),C=(0,u.useCallback)(()=>{null!==v.current&&(clearTimeout(v.current),v.current=null)},[]),R=(0,u.useCallback)(()=>{if(m.current||!r||"undefined"!=typeof document&&"hidden"===document.visibilityState)return;C();let e=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Math.random;return Math.max(0,Math.round(Math.min(t*2**Math.max(0,e),n)*(1+(2*r()-1)*.2)))}(y.current,o,i);y.current+=1,v.current=setTimeout(()=>{v.current=null,g.current()},e)},[r,o,i,C]),T=(0,u.useCallback)(()=>{if(!f)return;let e=c();if(!e||h.current&&(h.current.readyState===e.OPEN||h.current.readyState===e.CONNECTING))return;C(),m.current=!1,p.current=Date.now(),k("connecting");let t="https:"===window.location.protocol?"wss:":"ws:",n=new e("".concat(t,"//").concat(window.location.host));h.current=n,n.onopen=()=>{y.current=0,p.current=Date.now(),k("connected");try{n.send(JSON.stringify({type:l.ST,version:"0.49.3"}))}catch(e){}w.current.forEach(e=>{try{n.send(JSON.stringify({type:"subscribe",worktreeId:e}))}catch(e){}})},n.onmessage=e=>{var t;p.current=Date.now();let n="string"==typeof e.data?e.data:String(e.data),r=(0,l.zS)(n);r&&"heartbeat"!==r.type&&(null==(t=S.current)||t.call(S,r))},n.onerror=()=>{k("error")},n.onclose=()=>{h.current=null,k("disconnected"),R()}},[f,k,C,R]);g.current=T;let M=(0,u.useCallback)(()=>{let e=h.current;if(e){e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,h.current=null;try{e.close(4001,"half-open")}catch(e){}k("disconnected"),R()}},[k,R]),O=(0,u.useCallback)(()=>{if(C(),m.current=!0,h.current){try{h.current.close(1e3,"Client disconnect")}catch(e){}h.current=null}},[C]),N=(0,u.useCallback)(e=>{let t=h.current,n=c();if(t&&n&&t.readyState===n.OPEN)try{t.send(JSON.stringify(e))}catch(e){}},[]),_=(0,u.useCallback)(e=>{w.current.has(e)||(w.current.add(e),N({type:"subscribe",worktreeId:e}))},[N]),L=(0,u.useCallback)(e=>{w.current.has(e)&&(w.current.delete(e),N({type:"unsubscribe",worktreeId:e}))},[N]);return(0,u.useEffect)(()=>{if(f)return T(),()=>{O()}},[f,T,O]),(0,u.useEffect)(()=>{if(!f)return;let e=setInterval(()=>{let e=h.current,t=c();e&&t&&e.readyState===t.OPEN&&(Date.now()-p.current<a||M())},s);return()=>clearInterval(e)},[f,a,s,M]),(0,u.useEffect)(()=>{if(!f||"undefined"==typeof document)return;let e=()=>{"visible"===document.visibilityState&&(h.current||(y.current=0,T()))};return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[f,T]),(0,u.useEffect)(()=>{if(!f)return;let e=()=>{h.current||(y.current=0,T())};return window.addEventListener("online",e),()=>window.removeEventListener("online",e)},[f,T]),{status:d,subscribe:_,unsubscribe:L,send:N}}({enabled:n,onEvent:(0,u.useCallback)(e=>{o.current.forEach(t=>{try{t(e)}catch(e){}})},[])}),b=(0,u.useCallback)(e=>{var t;let n=i.current,r=null!=(t=n.get(e))?t:0;n.set(e,r+1),0===r&&f(e)},[f]),h=(0,u.useCallback)(e=>{var t;let n=i.current,r=null!=(t=n.get(e))?t:0;r<=1?(n.delete(e),d(e)):n.set(e,r-1)},[d]),v=(0,u.useCallback)(e=>(o.current.add(e),()=>{o.current.delete(e)}),[]),y=(0,u.useMemo)(()=>({status:s,connected:"connected"===s,subscribe:b,unsubscribe:h,addListener:v}),[s,b,h,v]);return(0,r.jsx)(a.Provider,{value:y,children:t})}function f(){var e;return null!=(e=(0,u.useContext)(a))?e:i}function d(e){let{addListener:t}=f(),n=(0,u.useRef)(e);n.current=e,(0,u.useEffect)(()=>t(e=>n.current(e)),[t])}}}]);