commandmate 0.31.3 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (802) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +487 -473
  3. package/.next/app-path-routes-manifest.json +37 -35
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/react-loadable-manifest.json +2 -2
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +8 -0
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route.js +1 -1
  14. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
  15. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  17. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  20. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/messages/route.js +1 -1
  23. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/session/route.js +1 -1
  26. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/start/route.js +1 -32
  29. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/terminal/route.js +2 -33
  32. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/assistant/tools/route.js +1 -1
  35. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  36. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/capabilities/route.js +1 -1
  41. package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
  42. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  51. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  52. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  54. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  55. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  57. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  58. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/push/escalation/route.js +1 -1
  62. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  64. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/push/vapid/route.js +1 -1
  66. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -0
  68. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -0
  69. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -0
  70. package/.next/server/app/api/relays/route.js +1 -0
  71. package/.next/server/app/api/relays/route.js.nft.json +1 -0
  72. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -0
  73. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  76. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  78. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  80. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  81. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/repositories/clone/route.js +1 -1
  83. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  84. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/repositories/restore/route.js +1 -1
  87. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  88. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/repositories/route.js +1 -1
  90. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  91. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/repositories/scan/route.js +1 -1
  93. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  94. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/repositories/sync/route.js +1 -1
  96. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  97. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  100. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  101. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/skills/[id]/route.js +1 -1
  105. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  106. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/skills/installations/route.js +1 -1
  108. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  109. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/skills/route.js +1 -1
  113. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  114. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  118. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/todos/route.js +1 -1
  122. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  124. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/verification/runs/route.js +1 -1
  126. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  132. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  135. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  144. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +2 -1
  222. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +2 -1
  225. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  229. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  237. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  247. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +103 -1
  249. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  250. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  267. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  277. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  296. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  298. package/.next/server/app/api/worktrees/route.js +1 -1
  299. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  300. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  301. package/.next/server/app/chat/page.js +2 -2
  302. package/.next/server/app/chat/page.js.nft.json +1 -1
  303. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  304. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  305. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/more/page.js +2 -2
  307. package/.next/server/app/more/page.js.nft.json +1 -1
  308. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  309. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  310. package/.next/server/app/page.js +1 -1
  311. package/.next/server/app/page.js.nft.json +1 -1
  312. package/.next/server/app/page_client-reference-manifest.js +1 -1
  313. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  314. package/.next/server/app/repositories/page.js +2 -2
  315. package/.next/server/app/repositories/page.js.nft.json +1 -1
  316. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  317. package/.next/server/app/review/page.js +1 -1
  318. package/.next/server/app/review/page.js.nft.json +1 -1
  319. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  320. package/.next/server/app/sessions/page.js +1 -1
  321. package/.next/server/app/sessions/page.js.nft.json +1 -1
  322. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  323. package/.next/server/app/skills/[skillId]/page.js +2 -2
  324. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  325. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  326. package/.next/server/app/skills/installed/page.js +2 -2
  327. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  328. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  329. package/.next/server/app/skills/page.js +1 -1
  330. package/.next/server/app/skills/page.js.nft.json +1 -1
  331. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  332. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  333. package/.next/server/app/worktrees/[id]/page.js +11 -11
  334. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  335. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  336. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  337. package/.next/server/app-paths-manifest.json +37 -35
  338. package/.next/server/chunks/1210.js +1 -0
  339. package/.next/server/chunks/153.js +1 -0
  340. package/.next/server/chunks/1886.js +1 -1
  341. package/.next/server/chunks/21.js +1 -0
  342. package/.next/server/chunks/2119.js +1 -1
  343. package/.next/server/chunks/2445.js +1 -1
  344. package/.next/server/chunks/3077.js +67 -0
  345. package/.next/server/chunks/3086.js +1 -0
  346. package/.next/server/chunks/3241.js +1 -1
  347. package/.next/server/chunks/3270.js +1 -0
  348. package/.next/server/chunks/3543.js +1 -1
  349. package/.next/server/chunks/3730.js +1 -0
  350. package/.next/server/chunks/3925.js +1 -0
  351. package/.next/server/chunks/3945.js +1 -1
  352. package/.next/server/chunks/4443.js +2 -1
  353. package/.next/server/chunks/5043.js +1 -1
  354. package/.next/server/chunks/5164.js +1 -1
  355. package/.next/server/chunks/5220.js +1 -1
  356. package/.next/server/chunks/5354.js +1 -1
  357. package/.next/server/chunks/595.js +3 -3
  358. package/.next/server/chunks/6286.js +48 -0
  359. package/.next/server/chunks/6306.js +1 -0
  360. package/.next/server/chunks/6363.js +1 -0
  361. package/.next/server/chunks/6401.js +1 -1
  362. package/.next/server/chunks/6491.js +103 -0
  363. package/.next/server/chunks/{9798.js → 6661.js} +1 -2
  364. package/.next/server/chunks/6838.js +1 -0
  365. package/.next/server/chunks/7875.js +25 -0
  366. package/.next/server/chunks/7890.js +1 -0
  367. package/.next/server/chunks/8063.js +32 -0
  368. package/.next/server/chunks/8118.js +1 -1
  369. package/.next/server/chunks/{7587.js → 8554.js} +1 -1
  370. package/.next/server/chunks/8687.js +1 -0
  371. package/.next/server/chunks/8807.js +37 -3
  372. package/.next/server/chunks/8918.js +6 -4
  373. package/.next/server/chunks/9123.js +2 -2
  374. package/.next/server/chunks/9584.js +1 -1
  375. package/.next/server/chunks/9627.js +21 -5
  376. package/.next/server/middleware-build-manifest.js +1 -1
  377. package/.next/server/middleware-manifest.json +5 -5
  378. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  379. package/.next/server/pages/500.html +1 -1
  380. package/.next/server/server-reference-manifest.json +1 -1
  381. package/.next/static/UIUPchtWvcEuQgcbGJv4g/_buildManifest.js +1 -0
  382. package/.next/static/chunks/{5694.dda65070757534df.js → 3313.53f7ff985c0c8852.js} +1 -1
  383. package/.next/static/chunks/4718-0053d42fb635e700.js +1 -0
  384. package/.next/static/chunks/{4974-35592ec312322124.js → 5694-498765336d0b8c2b.js} +1 -1
  385. package/.next/static/chunks/{7485.442b21101fca7257.js → 7485.52361bc061cc663a.js} +1 -1
  386. package/.next/static/chunks/8019-cbf130d0e6334d2d.js +1 -0
  387. package/.next/static/chunks/8361-9bb887203c456edb.js +1 -0
  388. package/.next/static/chunks/8772-9be53a530950d804.js +1 -0
  389. package/.next/static/chunks/998-ac0ded6d5eeb4dc0.js +1 -0
  390. package/.next/static/chunks/app/api/agents/update/route-8bc5b680c5f3eae4.js +1 -0
  391. package/.next/static/chunks/app/api/agents/versions/route-8bc5b680c5f3eae4.js +1 -0
  392. package/.next/static/chunks/app/api/app/update/route-8bc5b680c5f3eae4.js +1 -0
  393. package/.next/static/chunks/app/api/app/update-check/route-8bc5b680c5f3eae4.js +1 -0
  394. package/.next/static/chunks/app/api/assistant/conversation/route-8bc5b680c5f3eae4.js +1 -0
  395. package/.next/static/chunks/app/api/assistant/current-output/route-8bc5b680c5f3eae4.js +1 -0
  396. package/.next/static/chunks/app/api/assistant/messages/route-8bc5b680c5f3eae4.js +1 -0
  397. package/.next/static/chunks/app/api/assistant/session/route-8bc5b680c5f3eae4.js +1 -0
  398. package/.next/static/chunks/app/api/assistant/start/route-8bc5b680c5f3eae4.js +1 -0
  399. package/.next/static/chunks/app/api/assistant/terminal/route-8bc5b680c5f3eae4.js +1 -0
  400. package/.next/static/chunks/app/api/assistant/tools/route-8bc5b680c5f3eae4.js +1 -0
  401. package/.next/static/chunks/app/api/auth/login/route-8bc5b680c5f3eae4.js +1 -0
  402. package/.next/static/chunks/app/api/auth/logout/route-8bc5b680c5f3eae4.js +1 -0
  403. package/.next/static/chunks/app/api/auth/status/route-8bc5b680c5f3eae4.js +1 -0
  404. package/.next/static/chunks/app/api/capabilities/route-8bc5b680c5f3eae4.js +1 -0
  405. package/.next/static/chunks/app/api/daily-summary/route-8bc5b680c5f3eae4.js +1 -0
  406. package/.next/static/chunks/app/api/daily-summary/status/route-8bc5b680c5f3eae4.js +1 -0
  407. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8bc5b680c5f3eae4.js +1 -0
  408. package/.next/static/chunks/app/api/external-apps/[id]/route-8bc5b680c5f3eae4.js +1 -0
  409. package/.next/static/chunks/app/api/external-apps/route-8bc5b680c5f3eae4.js +1 -0
  410. package/.next/static/chunks/app/api/fs/browse/route-8bc5b680c5f3eae4.js +1 -0
  411. package/.next/static/chunks/app/api/fs/recent-paths/route-8bc5b680c5f3eae4.js +1 -0
  412. package/.next/static/chunks/app/api/hooks/agent-event/route-8bc5b680c5f3eae4.js +1 -0
  413. package/.next/static/chunks/app/api/hooks/claude-done/route-8bc5b680c5f3eae4.js +1 -0
  414. package/.next/static/chunks/app/api/hooks/permission-request/route-8bc5b680c5f3eae4.js +1 -0
  415. package/.next/static/chunks/app/api/metrics/vibe/route-8bc5b680c5f3eae4.js +1 -0
  416. package/.next/static/chunks/app/api/ollama/models/route-8bc5b680c5f3eae4.js +1 -0
  417. package/.next/static/chunks/app/api/push/escalation/route-8bc5b680c5f3eae4.js +1 -0
  418. package/.next/static/chunks/app/api/push/subscriptions/route-8bc5b680c5f3eae4.js +1 -0
  419. package/.next/static/chunks/app/api/push/vapid/route-8bc5b680c5f3eae4.js +1 -0
  420. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
  421. package/.next/static/chunks/app/api/relays/route-8bc5b680c5f3eae4.js +1 -0
  422. package/.next/static/chunks/app/api/remote/pair/route-8bc5b680c5f3eae4.js +1 -0
  423. package/.next/static/chunks/app/api/repositories/[id]/route-8bc5b680c5f3eae4.js +1 -0
  424. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +1 -0
  425. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8bc5b680c5f3eae4.js +1 -0
  426. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8bc5b680c5f3eae4.js +1 -0
  427. package/.next/static/chunks/app/api/repositories/clone/route-8bc5b680c5f3eae4.js +1 -0
  428. package/.next/static/chunks/app/api/repositories/excluded/route-8bc5b680c5f3eae4.js +1 -0
  429. package/.next/static/chunks/app/api/repositories/restore/route-8bc5b680c5f3eae4.js +1 -0
  430. package/.next/static/chunks/app/api/repositories/route-8bc5b680c5f3eae4.js +1 -0
  431. package/.next/static/chunks/app/api/repositories/scan/route-8bc5b680c5f3eae4.js +1 -0
  432. package/.next/static/chunks/app/api/repositories/sync/route-8bc5b680c5f3eae4.js +1 -0
  433. package/.next/static/chunks/app/api/repositories/validate-path/route-8bc5b680c5f3eae4.js +1 -0
  434. package/.next/static/chunks/app/api/settings/default-agents/route-8bc5b680c5f3eae4.js +1 -0
  435. package/.next/static/chunks/app/api/settings/default-surface-mode/route-8bc5b680c5f3eae4.js +1 -0
  436. package/.next/static/chunks/app/api/sidebar/group-order/route-8bc5b680c5f3eae4.js +1 -0
  437. package/.next/static/chunks/app/api/skills/[id]/route-8bc5b680c5f3eae4.js +1 -0
  438. package/.next/static/chunks/app/api/skills/installations/route-8bc5b680c5f3eae4.js +1 -0
  439. package/.next/static/chunks/app/api/skills/operations/route-8bc5b680c5f3eae4.js +1 -0
  440. package/.next/static/chunks/app/api/skills/reindex/route-8bc5b680c5f3eae4.js +1 -0
  441. package/.next/static/chunks/app/api/skills/route-8bc5b680c5f3eae4.js +1 -0
  442. package/.next/static/chunks/app/api/slash-commands/route-8bc5b680c5f3eae4.js +1 -0
  443. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
  444. package/.next/static/chunks/app/api/tasks/[taskId]/route-8bc5b680c5f3eae4.js +1 -0
  445. package/.next/static/chunks/app/api/templates/[id]/route-8bc5b680c5f3eae4.js +1 -0
  446. package/.next/static/chunks/app/api/templates/route-8bc5b680c5f3eae4.js +1 -0
  447. package/.next/static/chunks/app/api/todos/route-8bc5b680c5f3eae4.js +1 -0
  448. package/.next/static/chunks/app/api/verification/runs/[runId]/route-8bc5b680c5f3eae4.js +1 -0
  449. package/.next/static/chunks/app/api/verification/runs/route-8bc5b680c5f3eae4.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8bc5b680c5f3eae4.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8bc5b680c5f3eae4.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-8bc5b680c5f3eae4.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-8bc5b680c5f3eae4.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8bc5b680c5f3eae4.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8bc5b680c5f3eae4.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8bc5b680c5f3eae4.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/env/route-8bc5b680c5f3eae4.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8bc5b680c5f3eae4.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8bc5b680c5f3eae4.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8bc5b680c5f3eae4.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8bc5b680c5f3eae4.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8bc5b680c5f3eae4.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8bc5b680c5f3eae4.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8bc5b680c5f3eae4.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8bc5b680c5f3eae4.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8bc5b680c5f3eae4.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8bc5b680c5f3eae4.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8bc5b680c5f3eae4.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8bc5b680c5f3eae4.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8bc5b680c5f3eae4.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8bc5b680c5f3eae4.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8bc5b680c5f3eae4.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8bc5b680c5f3eae4.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8bc5b680c5f3eae4.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8bc5b680c5f3eae4.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8bc5b680c5f3eae4.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8bc5b680c5f3eae4.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8bc5b680c5f3eae4.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8bc5b680c5f3eae4.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8bc5b680c5f3eae4.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8bc5b680c5f3eae4.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8bc5b680c5f3eae4.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8bc5b680c5f3eae4.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-8bc5b680c5f3eae4.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8bc5b680c5f3eae4.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8bc5b680c5f3eae4.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8bc5b680c5f3eae4.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8bc5b680c5f3eae4.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8bc5b680c5f3eae4.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8bc5b680c5f3eae4.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8bc5b680c5f3eae4.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8bc5b680c5f3eae4.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-8bc5b680c5f3eae4.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-8bc5b680c5f3eae4.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-8bc5b680c5f3eae4.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8bc5b680c5f3eae4.js +1 -0
  497. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-8bc5b680c5f3eae4.js +1 -0
  498. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8bc5b680c5f3eae4.js +1 -0
  499. package/.next/static/chunks/app/api/worktrees/[id]/route-8bc5b680c5f3eae4.js +1 -0
  500. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8bc5b680c5f3eae4.js +1 -0
  501. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8bc5b680c5f3eae4.js +1 -0
  502. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8bc5b680c5f3eae4.js +1 -0
  503. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8bc5b680c5f3eae4.js +1 -0
  504. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8bc5b680c5f3eae4.js +1 -0
  505. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8bc5b680c5f3eae4.js +1 -0
  506. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8bc5b680c5f3eae4.js +1 -0
  507. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8bc5b680c5f3eae4.js +1 -0
  508. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8bc5b680c5f3eae4.js +1 -0
  509. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8bc5b680c5f3eae4.js +1 -0
  510. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-8bc5b680c5f3eae4.js +1 -0
  511. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-8bc5b680c5f3eae4.js +1 -0
  512. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8bc5b680c5f3eae4.js +1 -0
  513. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8bc5b680c5f3eae4.js +1 -0
  514. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8bc5b680c5f3eae4.js +1 -0
  515. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8bc5b680c5f3eae4.js +1 -0
  516. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8bc5b680c5f3eae4.js +1 -0
  517. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8bc5b680c5f3eae4.js +1 -0
  518. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8bc5b680c5f3eae4.js +1 -0
  519. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +1 -0
  520. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8bc5b680c5f3eae4.js +1 -0
  521. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8bc5b680c5f3eae4.js +1 -0
  522. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8bc5b680c5f3eae4.js +1 -0
  523. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8bc5b680c5f3eae4.js +1 -0
  524. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-8bc5b680c5f3eae4.js +1 -0
  525. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8bc5b680c5f3eae4.js +1 -0
  526. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
  527. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8bc5b680c5f3eae4.js +1 -0
  528. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8bc5b680c5f3eae4.js +1 -0
  529. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8bc5b680c5f3eae4.js +1 -0
  530. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-8bc5b680c5f3eae4.js +1 -0
  531. package/.next/static/chunks/app/api/worktrees/route-8bc5b680c5f3eae4.js +1 -0
  532. package/.next/static/chunks/app/chat/{page-37d7615d17d7e2a0.js → page-e60d07c4c79602f0.js} +1 -1
  533. package/.next/static/chunks/app/manifest.webmanifest/route-8bc5b680c5f3eae4.js +1 -0
  534. package/.next/static/chunks/app/more/{page-353a3924e6d7968e.js → page-fc94f86aa881489e.js} +1 -1
  535. package/.next/static/chunks/app/{page-c2bf871d953a1d6f.js → page-6871cca022b24807.js} +1 -1
  536. package/.next/static/chunks/app/proxy/[...path]/route-8bc5b680c5f3eae4.js +1 -0
  537. package/.next/static/chunks/app/repositories/{page-7d0f26df0537254c.js → page-788ded1b72963d94.js} +1 -1
  538. package/.next/static/chunks/app/review/{page-e3f141b2829973e9.js → page-35b99baaf3c93b38.js} +1 -1
  539. package/.next/static/chunks/app/sessions/{page-53f188ed9ca49e5f.js → page-fa2d62f3e8436c69.js} +1 -1
  540. package/.next/static/chunks/app/skills/[skillId]/{page-80569b720aea59cc.js → page-06799157652e8fa9.js} +1 -1
  541. package/.next/static/chunks/app/skills/installed/{page-dbd2690ad72da95b.js → page-2f3987e3a131c8d0.js} +1 -1
  542. package/.next/static/chunks/app/skills/{page-dacd36f9c11aa7da.js → page-e70bfcf5ed4e4865.js} +1 -1
  543. package/.next/static/chunks/app/worktrees/[id]/layout-8bc5b680c5f3eae4.js +1 -0
  544. package/.next/static/chunks/app/worktrees/[id]/page-06e1ff5ce2d126fd.js +1 -0
  545. package/.next/static/chunks/webpack-1dc9eb5ebb4fa5ff.js +1 -0
  546. package/.next/static/css/96d94a4ba771efc3.css +1 -0
  547. package/.next/trace +13 -13
  548. package/.next/types/app/api/relays/[relayId]/cancel/route.ts +347 -0
  549. package/.next/types/app/api/relays/route.ts +347 -0
  550. package/.next/types/routes.d.ts +3 -1
  551. package/.next/types/validator.ts +18 -0
  552. package/dist/cli/commands/ask.d.ts +34 -0
  553. package/dist/cli/commands/ask.d.ts.map +1 -0
  554. package/dist/cli/commands/ask.js +494 -0
  555. package/dist/cli/commands/capture.d.ts +20 -0
  556. package/dist/cli/commands/capture.d.ts.map +1 -1
  557. package/dist/cli/commands/capture.js +80 -30
  558. package/dist/cli/commands/docs.d.ts.map +1 -1
  559. package/dist/cli/commands/docs.js +47 -4
  560. package/dist/cli/commands/instances.d.ts +67 -0
  561. package/dist/cli/commands/instances.d.ts.map +1 -1
  562. package/dist/cli/commands/instances.js +103 -7
  563. package/dist/cli/commands/peers.d.ts +64 -0
  564. package/dist/cli/commands/peers.d.ts.map +1 -0
  565. package/dist/cli/commands/peers.js +196 -0
  566. package/dist/cli/commands/relays.d.ts +92 -0
  567. package/dist/cli/commands/relays.d.ts.map +1 -0
  568. package/dist/cli/commands/relays.js +293 -0
  569. package/dist/cli/commands/report.d.ts +3 -0
  570. package/dist/cli/commands/report.d.ts.map +1 -1
  571. package/dist/cli/commands/report.js +29 -1
  572. package/dist/cli/commands/respond.d.ts.map +1 -1
  573. package/dist/cli/commands/respond.js +13 -10
  574. package/dist/cli/commands/send.d.ts.map +1 -1
  575. package/dist/cli/commands/send.js +66 -20
  576. package/dist/cli/commands/task.d.ts.map +1 -1
  577. package/dist/cli/commands/task.js +30 -0
  578. package/dist/cli/commands/wait.d.ts +20 -0
  579. package/dist/cli/commands/wait.d.ts.map +1 -1
  580. package/dist/cli/commands/wait.js +55 -6
  581. package/dist/cli/commands/whoami.d.ts +109 -0
  582. package/dist/cli/commands/whoami.d.ts.map +1 -0
  583. package/dist/cli/commands/whoami.js +271 -0
  584. package/dist/cli/docs/agent-operations.d.ts +25 -1
  585. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  586. package/dist/cli/docs/agent-operations.js +184 -1
  587. package/dist/cli/index.d.ts +13 -0
  588. package/dist/cli/index.d.ts.map +1 -1
  589. package/dist/cli/index.js +25 -1
  590. package/dist/cli/types/api-responses.d.ts +93 -0
  591. package/dist/cli/types/api-responses.d.ts.map +1 -1
  592. package/dist/cli/types/index.d.ts +16 -0
  593. package/dist/cli/types/index.d.ts.map +1 -1
  594. package/dist/lib/cli/command-reference.d.ts +179 -0
  595. package/dist/lib/cli/command-reference.d.ts.map +1 -0
  596. package/dist/lib/cli/command-reference.js +210 -0
  597. package/dist/lib/detection/ansi.d.ts +14 -1
  598. package/dist/lib/detection/ansi.d.ts.map +1 -1
  599. package/dist/lib/detection/ansi.js +40 -3
  600. package/dist/lib/detection/status-reason.d.ts +28 -0
  601. package/dist/lib/detection/status-reason.d.ts.map +1 -1
  602. package/dist/lib/detection/status-reason.js +28 -0
  603. package/dist/server/locales/en/worktree.json +23 -0
  604. package/dist/server/locales/ja/worktree.json +23 -0
  605. package/dist/server/src/lib/auto-yes-poller.js +26 -11
  606. package/dist/server/src/lib/db/chat-db.js +161 -7
  607. package/dist/server/src/lib/db/migrations/index.js +2 -0
  608. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  609. package/dist/server/src/lib/db/migrations/v60-session-relays.js +110 -0
  610. package/dist/server/src/lib/db/relay-db.js +343 -0
  611. package/dist/server/src/lib/detection/ansi.js +40 -3
  612. package/dist/server/src/lib/detection/selection-shape.js +72 -1
  613. package/dist/server/src/lib/detection/status-reason.js +28 -0
  614. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +13 -7
  615. package/dist/server/src/lib/detection/tools/command-code/detect.js +33 -0
  616. package/dist/server/src/lib/history/user-turn-recorder.js +79 -16
  617. package/dist/server/src/lib/polling/response-checker.js +45 -8
  618. package/dist/server/src/lib/polling/structured-history-gate.js +14 -1
  619. package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
  620. package/dist/server/src/lib/realtime/waiting-broadcast.js +12 -0
  621. package/dist/server/src/lib/relay/relay-delivery.js +400 -0
  622. package/dist/server/src/lib/relay/relay-messages.js +144 -0
  623. package/dist/server/src/lib/relay/relay-policy.js +127 -0
  624. package/dist/server/src/lib/relay/relay-readiness.js +63 -0
  625. package/dist/server/src/lib/relay/relay-session-ref.js +72 -0
  626. package/dist/server/src/lib/relay/relay-system-line.js +79 -0
  627. package/dist/server/src/lib/relay/relay-triggers.js +177 -0
  628. package/dist/server/src/lib/relay/types.js +25 -0
  629. package/dist/server/src/lib/session/current-output-builder.js +18 -0
  630. package/dist/server/src/lib/session/send-user-message.js +1 -0
  631. package/package.json +1 -1
  632. package/.next/server/chunks/1058.js +0 -1
  633. package/.next/server/chunks/1068.js +0 -1
  634. package/.next/server/chunks/1990.js +0 -103
  635. package/.next/server/chunks/261.js +0 -1
  636. package/.next/server/chunks/2739.js +0 -1
  637. package/.next/server/chunks/2839.js +0 -1
  638. package/.next/server/chunks/3484.js +0 -1
  639. package/.next/server/chunks/358.js +0 -1
  640. package/.next/server/chunks/3869.js +0 -1
  641. package/.next/server/chunks/4325.js +0 -1
  642. package/.next/server/chunks/4393.js +0 -1
  643. package/.next/server/chunks/5017.js +0 -1
  644. package/.next/server/chunks/5120.js +0 -1
  645. package/.next/server/chunks/552.js +0 -25
  646. package/.next/server/chunks/6130.js +0 -1
  647. package/.next/server/chunks/7836.js +0 -1
  648. package/.next/server/chunks/7859.js +0 -21
  649. package/.next/server/chunks/9696.js +0 -3
  650. package/.next/static/0hTIackGXw6v7diXJS6yN/_buildManifest.js +0 -1
  651. package/.next/static/chunks/2813-de885de8a4b11910.js +0 -1
  652. package/.next/static/chunks/4718-07ec4e10186928db.js +0 -1
  653. package/.next/static/chunks/6170-951b9f5fe6b4b3b5.js +0 -1
  654. package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +0 -1
  655. package/.next/static/chunks/8593-fa0eb2802e0ce68a.js +0 -1
  656. package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +0 -1
  657. package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +0 -1
  658. package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +0 -1
  659. package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +0 -1
  660. package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +0 -1
  661. package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +0 -1
  662. package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +0 -1
  663. package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +0 -1
  664. package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +0 -1
  665. package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +0 -1
  666. package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +0 -1
  667. package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +0 -1
  668. package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +0 -1
  669. package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +0 -1
  670. package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +0 -1
  671. package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +0 -1
  672. package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +0 -1
  673. package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +0 -1
  674. package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +0 -1
  675. package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +0 -1
  676. package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +0 -1
  677. package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +0 -1
  678. package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +0 -1
  679. package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +0 -1
  680. package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +0 -1
  681. package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +0 -1
  682. package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +0 -1
  683. package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +0 -1
  684. package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +0 -1
  685. package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +0 -1
  686. package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +0 -1
  687. package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +0 -1
  688. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
  689. package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
  690. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +0 -1
  691. package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +0 -1
  692. package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +0 -1
  693. package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +0 -1
  694. package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +0 -1
  695. package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +0 -1
  696. package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +0 -1
  697. package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +0 -1
  698. package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +0 -1
  699. package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +0 -1
  700. package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +0 -1
  701. package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +0 -1
  702. package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +0 -1
  703. package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +0 -1
  704. package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +0 -1
  705. package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +0 -1
  706. package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
  707. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
  708. package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +0 -1
  709. package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +0 -1
  710. package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +0 -1
  711. package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +0 -1
  712. package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
  713. package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +0 -1
  714. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +0 -1
  715. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +0 -1
  716. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +0 -1
  717. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +0 -1
  718. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +0 -1
  719. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +0 -1
  720. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +0 -1
  721. package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +0 -1
  722. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +0 -1
  723. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +0 -1
  724. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +0 -1
  725. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +0 -1
  726. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +0 -1
  727. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +0 -1
  728. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +0 -1
  729. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +0 -1
  730. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +0 -1
  731. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +0 -1
  732. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +0 -1
  733. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +0 -1
  734. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +0 -1
  735. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +0 -1
  736. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +0 -1
  737. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +0 -1
  738. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +0 -1
  739. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +0 -1
  740. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +0 -1
  741. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +0 -1
  742. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +0 -1
  743. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +0 -1
  744. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +0 -1
  745. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +0 -1
  746. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +0 -1
  747. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +0 -1
  748. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +0 -1
  749. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +0 -1
  750. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +0 -1
  751. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +0 -1
  752. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +0 -1
  753. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +0 -1
  754. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +0 -1
  755. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +0 -1
  756. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +0 -1
  757. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +0 -1
  758. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +0 -1
  759. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +0 -1
  760. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +0 -1
  761. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +0 -1
  796. package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +0 -1
  797. package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +0 -1
  798. package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +0 -1
  799. package/.next/static/chunks/app/worktrees/[id]/page-91b639c90795baa9.js +0 -1
  800. package/.next/static/chunks/webpack-9f75198882fdaf08.js +0 -1
  801. package/.next/static/css/acc4b9c3feb04287.css +0 -1
  802. /package/.next/static/{0hTIackGXw6v7diXJS6yN → UIUPchtWvcEuQgcbGJv4g}/_ssgManifest.js +0 -0
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * "Can session A be typed into right now?" (Issue #2377).
4
+ *
5
+ * A relay's delivery is a message put into a composer that belongs to somebody
6
+ * else's turn, so it has to ask the question `send` asks and one more besides.
7
+ *
8
+ * - **Is the session alive?** A relay to a pane that was closed has nowhere to
9
+ * land; holding it until the deadline is the honest answer, not starting a
10
+ * session on the operator's behalf to receive an answer they may never read.
11
+ * - **Is it mid-turn?** This is the one `send` does NOT ask, and the Issue asks
12
+ * for it by name: typing into a `running` composer interrupts the turn that
13
+ * is running. The relay waits for `ready` instead — the ledger is durable, so
14
+ * waiting costs nothing but time.
15
+ *
16
+ * The prompt-dialog question is deliberately NOT asked here: `sendUserMessage`
17
+ * already refuses a send that would land in an open dialog (#1708/#1737), and
18
+ * duplicating that judgement would give the relay path its own second opinion
19
+ * about a state the send path is the authority on. A refusal there is a retry
20
+ * here.
21
+ *
22
+ * Fail-open on an unreadable pane, for the same reason `prompt-waiting-guard`
23
+ * fails open: the cost of a wrong "ready" is a message the send path refuses
24
+ * and the pump retries, while the cost of a wrong "not ready" is a relay that
25
+ * expires holding an answer somebody is waiting for.
26
+ *
27
+ * @module lib/relay/relay-readiness
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.findRelayHoldReason = findRelayHoldReason;
31
+ const manager_1 = require("../../lib/cli-tools/manager");
32
+ const cli_session_1 = require("../../lib/session/cli-session");
33
+ const status_detector_1 = require("../../lib/detection/status-detector");
34
+ const status_capture_config_1 = require("../../config/status-capture-config");
35
+ const logger_1 = require("../../lib/logger");
36
+ const logger = (0, logger_1.createLogger)('relay-readiness');
37
+ /**
38
+ * Whether a relay may be delivered into this session now.
39
+ *
40
+ * @returns `null` when the session can take the message, else why it cannot
41
+ */
42
+ async function findRelayHoldReason(worktreeId, cliToolId, instanceId) {
43
+ try {
44
+ const cliTool = manager_1.CLIToolManager.getInstance().getTool(cliToolId);
45
+ if (!(await cliTool.isRunning(worktreeId, instanceId)))
46
+ return 'session_stopped';
47
+ const output = await (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, status_capture_config_1.STATUS_CAPTURE_LINES, instanceId);
48
+ const status = (0, status_detector_1.detectSessionStatus)(output, cliToolId);
49
+ // Only `running` holds. `waiting` is a dialog, which is the send path's
50
+ // judgement to make (and its refusal is a retry); `idle` and `ready` both
51
+ // mean the composer is the thing on screen.
52
+ return status.status === 'running' ? 'generating' : null;
53
+ }
54
+ catch (error) {
55
+ logger.warn('relay-readiness-check-failed', {
56
+ worktreeId,
57
+ cliToolId,
58
+ instanceId,
59
+ error: error instanceof Error ? error.message : String(error),
60
+ });
61
+ return null;
62
+ }
63
+ }
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /**
3
+ * Turning "worktree + instance" into the three facts a relay needs (#2377).
4
+ *
5
+ * A ledger row stores two ids and nothing else, on purpose — an alias can be
6
+ * renamed and a roster row deleted, and a relay must survive both. Everything
7
+ * else a delivery needs (which CLI tool drives the session, what to call it in
8
+ * the attribution header) is therefore resolved at the moment it is needed, from
9
+ * the roster, with the id as the fallback for every field.
10
+ *
11
+ * Never throws. A relay whose roster cannot be read still delivers, attributed
12
+ * to the instance id — which is worse to read and strictly better than not
13
+ * delivering.
14
+ *
15
+ * @module lib/relay/relay-session-ref
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.resolveRelaySession = resolveRelaySession;
19
+ exports.relayWorktreeExists = relayWorktreeExists;
20
+ const agent_instances_db_1 = require("../../lib/db/agent-instances-db");
21
+ const worktree_db_1 = require("../../lib/db/worktree-db");
22
+ const logger_1 = require("../../lib/logger");
23
+ const logger = (0, logger_1.createLogger)('relay-session-ref');
24
+ /** The tool assumed when neither the roster nor the worktree declares one. */
25
+ const FALLBACK_CLI_TOOL = 'claude';
26
+ /**
27
+ * Resolve one end of a relay.
28
+ *
29
+ * The tool comes from `resolveInstanceCliTool` — the same authority
30
+ * `POST /api/worktrees/:id/send` uses, so a relay cannot address a session the
31
+ * send route would address differently (#1629 is the record of what two
32
+ * authorities on that cost) — falling back to the worktree's own tool and then
33
+ * to claude.
34
+ */
35
+ function resolveRelaySession(db, endpoint) {
36
+ let cliToolId = FALLBACK_CLI_TOOL;
37
+ let alias = endpoint.instanceId;
38
+ try {
39
+ const resolution = (0, agent_instances_db_1.resolveInstanceCliTool)(db, endpoint.worktreeId, endpoint.instanceId);
40
+ if (resolution.ok && resolution.cliToolId) {
41
+ cliToolId = resolution.cliToolId;
42
+ }
43
+ else {
44
+ cliToolId = (0, worktree_db_1.getWorktreeById)(db, endpoint.worktreeId)?.cliToolId ?? FALLBACK_CLI_TOOL;
45
+ }
46
+ const rosterRow = (0, agent_instances_db_1.getAgentInstance)(db, endpoint.worktreeId, endpoint.instanceId);
47
+ if (rosterRow?.alias)
48
+ alias = rosterRow.alias;
49
+ }
50
+ catch (error) {
51
+ logger.warn('relay-session-resolve-failed', {
52
+ worktreeId: endpoint.worktreeId,
53
+ instanceId: endpoint.instanceId,
54
+ error: error instanceof Error ? error.message : String(error),
55
+ });
56
+ }
57
+ return {
58
+ worktreeId: endpoint.worktreeId,
59
+ instanceId: endpoint.instanceId,
60
+ cliToolId,
61
+ alias,
62
+ };
63
+ }
64
+ /** Whether this worktree exists at all. The one check a create must make. */
65
+ function relayWorktreeExists(db, worktreeId) {
66
+ try {
67
+ return (0, worktree_db_1.getWorktreeById)(db, worktreeId) !== null;
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * The one-line system rows a relay leaves in the requester's transcript (#2377).
4
+ *
5
+ * Exactly the mechanism Issue #2357 built for "the model changed": a row in
6
+ * `chat_messages`, written in the readers' language, followed by the same
7
+ * `message` frame `sendUserMessage` publishes. One write therefore reaches the
8
+ * chat surface, the History tab and any transcript that happens to be open,
9
+ * without a fourth history surface being invented for four sentences.
10
+ *
11
+ * Idempotent: the request id is `relay-sys:<relayId>:<kind>` and each row is
12
+ * probed for before it is written, so a delivery that is retried — which the
13
+ * pump does by design — does not stack four "waiting for the reply" lines.
14
+ *
15
+ * Never throws. A transcript line is the least important of a relay's three
16
+ * effects, and it must not cost the delivery.
17
+ *
18
+ * @module lib/relay/relay-system-line
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.writeRelaySystemLine = writeRelaySystemLine;
22
+ const chat_db_1 = require("../../lib/db/chat-db");
23
+ const model_change_push_notifier_1 = require("../../lib/push/model-change-push-notifier");
24
+ const ws_server_1 = require("../../lib/ws-server");
25
+ const relay_messages_1 = require("../../lib/relay/relay-messages");
26
+ const logger_1 = require("../../lib/logger");
27
+ const logger = (0, logger_1.createLogger)('relay-system-line');
28
+ /**
29
+ * Write one system line into `target`'s transcript, once.
30
+ *
31
+ * @param db - Database
32
+ * @param relayId - The ledger row the line is about
33
+ * @param kind - Which of the four sentences
34
+ * @param target - Whose transcript the line goes in (always the requester, A)
35
+ * @param subject - Whose name the sentence carries (always the worker, B)
36
+ * @param at - Epoch ms
37
+ * @returns Whether a row was written by this call
38
+ */
39
+ function writeRelaySystemLine(db, relayId, kind, target, subject, at = Date.now()) {
40
+ const requestId = `${chat_db_1.RELAY_SYSTEM_REQUEST_ID_PREFIX}${relayId}:${kind}`;
41
+ try {
42
+ if ((0, chat_db_1.findMessageByRequestId)(db, target.worktreeId, requestId))
43
+ return false;
44
+ const locale = (0, model_change_push_notifier_1.resolveReadersLocale)(db);
45
+ const message = (0, chat_db_1.createRelaySystemMessage)(db, {
46
+ worktreeId: target.worktreeId,
47
+ cliToolId: target.cliToolId,
48
+ instanceId: target.instanceId,
49
+ content: (0, relay_messages_1.buildRelaySystemLine)(locale, kind, subject.alias),
50
+ relayId,
51
+ kind,
52
+ at,
53
+ });
54
+ try {
55
+ (0, ws_server_1.broadcastMessage)('message', {
56
+ worktreeId: target.worktreeId,
57
+ message: { ...message, cliToolId: target.cliToolId, instanceId: target.instanceId },
58
+ });
59
+ }
60
+ catch (error) {
61
+ // The row is already durable; a socket with no owner must not turn a
62
+ // written line into a failure the caller reports.
63
+ logger.warn('relay-system-line-broadcast-failed', {
64
+ relayId,
65
+ kind,
66
+ error: error instanceof Error ? error.message : String(error),
67
+ });
68
+ }
69
+ return true;
70
+ }
71
+ catch (error) {
72
+ logger.warn('relay-system-line-failed', {
73
+ relayId,
74
+ kind,
75
+ error: error instanceof Error ? error.message : String(error),
76
+ });
77
+ return false;
78
+ }
79
+ }
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ /**
3
+ * Where a relay is woken up (Issue #2377).
4
+ *
5
+ * Three edges matter, and this module is the seam each of them calls into. It
6
+ * exists as a seam rather than as three direct calls for one concrete reason:
7
+ * the delivery reaches `sendUserMessage`, which reaches `response-poller`, which
8
+ * reaches `response-checker` — one of the callers below. A static import would
9
+ * close that cycle, so every entry point here loads `relay-delivery` lazily and
10
+ * the poller's module graph stays what it was. It is the same move
11
+ * `stop-history-capture` makes for the transcript readers, and for the same
12
+ * reason.
13
+ *
14
+ * The three edges:
15
+ *
16
+ * 1. **A turn ended.** {@link onRelayTurnCompleted}, called from the two places
17
+ * that record a finished reply — the structured-history gate (the agent's
18
+ * own transcript; both the Stop hook and the poller reach it) and the
19
+ * poller's own scrape, for the tools that keep no transcript.
20
+ * 2. **A session stopped on a dialog.** The waiting edge, subscribed to here
21
+ * rather than polled: `waiting-episode-state` already makes the crossing
22
+ * observable exactly once, and a fourth surface keeping its own "was it
23
+ * waiting last time?" is precisely what #1786 exists to prevent.
24
+ * 3. **Time passed.** The maintenance tick — expire the deadlines, retry the
25
+ * deliveries a busy composer refused.
26
+ *
27
+ * Armed by `startWaitingStatusBroadcast`, which `ws-server` calls from
28
+ * `setupWebSocket`; disarmed with it. That is where #2357 put the model-change
29
+ * subscription for the same reason: it is the one place in the process that
30
+ * knows the server is up, and a suite that stands a server up and tears it down
31
+ * leaves nothing running.
32
+ *
33
+ * @module lib/relay/relay-triggers
34
+ */
35
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
36
+ if (k2 === undefined) k2 = k;
37
+ var desc = Object.getOwnPropertyDescriptor(m, k);
38
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
39
+ desc = { enumerable: true, get: function() { return m[k]; } };
40
+ }
41
+ Object.defineProperty(o, k2, desc);
42
+ }) : (function(o, m, k, k2) {
43
+ if (k2 === undefined) k2 = k;
44
+ o[k2] = m[k];
45
+ }));
46
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
47
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
48
+ }) : function(o, v) {
49
+ o["default"] = v;
50
+ });
51
+ var __importStar = (this && this.__importStar) || (function () {
52
+ var ownKeys = function(o) {
53
+ ownKeys = Object.getOwnPropertyNames || function (o) {
54
+ var ar = [];
55
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
56
+ return ar;
57
+ };
58
+ return ownKeys(o);
59
+ };
60
+ return function (mod) {
61
+ if (mod && mod.__esModule) return mod;
62
+ var result = {};
63
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
64
+ __setModuleDefault(result, mod);
65
+ return result;
66
+ };
67
+ })();
68
+ Object.defineProperty(exports, "__esModule", { value: true });
69
+ exports.onRelayTurnCompleted = onRelayTurnCompleted;
70
+ exports.onRelayPromptWaiting = onRelayPromptWaiting;
71
+ exports.runRelayMaintenance = runRelayMaintenance;
72
+ exports.startRelayTriggers = startRelayTriggers;
73
+ exports.stopRelayTriggers = stopRelayTriggers;
74
+ exports.areRelayTriggersActive = areRelayTriggersActive;
75
+ const waiting_episode_state_1 = require("../../lib/session/waiting-episode-state");
76
+ const relay_policy_1 = require("../../lib/relay/relay-policy");
77
+ const logger_1 = require("../../lib/logger");
78
+ const logger = (0, logger_1.createLogger)('relay-triggers');
79
+ /**
80
+ * Tell the relays that this instance finished a turn.
81
+ *
82
+ * `settled` distinguishes the two producers: `true` for a turn the agent's own
83
+ * transcript says is closed, `false` for one judged from the screen — which is
84
+ * what makes the quiet window in `relay-delivery` apply to exactly the tools
85
+ * that need it.
86
+ *
87
+ * Fire-and-forget and never throws: this is called from inside the poller's save
88
+ * path and from a hook receiver, and in both a relay failure must not cost the
89
+ * turn that was just recorded.
90
+ */
91
+ function onRelayTurnCompleted(worktreeId, cliToolId, instanceId, settled) {
92
+ const worker = { worktreeId, cliToolId, instanceId: instanceId ?? cliToolId };
93
+ void (async () => {
94
+ try {
95
+ const { notifyRelayTurnCompleted } = await Promise.resolve().then(() => __importStar(require('../../lib/relay/relay-delivery')));
96
+ await notifyRelayTurnCompleted(worker, { settled });
97
+ }
98
+ catch (error) {
99
+ logger.warn('relay-turn-trigger-failed', {
100
+ worktreeId,
101
+ cliToolId,
102
+ instanceId: worker.instanceId,
103
+ error: error instanceof Error ? error.message : String(error),
104
+ });
105
+ }
106
+ })();
107
+ }
108
+ /** Tell the relays that this instance is blocked on a confirmation. */
109
+ function onRelayPromptWaiting(worktreeId, cliToolId, instanceId) {
110
+ const worker = { worktreeId, cliToolId, instanceId: instanceId ?? cliToolId };
111
+ void (async () => {
112
+ try {
113
+ const { notifyRelayPromptWaiting } = await Promise.resolve().then(() => __importStar(require('../../lib/relay/relay-delivery')));
114
+ notifyRelayPromptWaiting(worker);
115
+ }
116
+ catch (error) {
117
+ logger.warn('relay-prompt-trigger-failed', {
118
+ worktreeId,
119
+ cliToolId,
120
+ instanceId: worker.instanceId,
121
+ error: error instanceof Error ? error.message : String(error),
122
+ });
123
+ }
124
+ })();
125
+ }
126
+ /** Run one maintenance tick now. Exported for the suite and for the timer. */
127
+ async function runRelayMaintenance() {
128
+ try {
129
+ const { runRelayMaintenanceTick } = await Promise.resolve().then(() => __importStar(require('../../lib/relay/relay-delivery')));
130
+ await runRelayMaintenanceTick();
131
+ }
132
+ catch (error) {
133
+ logger.warn('relay-maintenance-failed', {
134
+ error: error instanceof Error ? error.message : String(error),
135
+ });
136
+ }
137
+ }
138
+ /**
139
+ * Subscribe to the waiting edge and start the maintenance loop.
140
+ *
141
+ * Idempotent: calling it again replaces what is already armed rather than
142
+ * adding a second copy, so a re-entered `setupWebSocket` cannot notify twice or
143
+ * leave two timers running.
144
+ */
145
+ function startRelayTriggers() {
146
+ stopRelayTriggers();
147
+ globalThis.__relayTriggersUnsubscribe = (0, waiting_episode_state_1.onWaitingTransition)((transition) => {
148
+ // Only the OPENING edge, and only a real dialog. `menu` is a pager or a
149
+ // model picker — nobody is being asked anything — and `unclassified` is a
150
+ // frame the detectors failed on, which is not something to describe to
151
+ // another session as a question it might report to a human.
152
+ if (!transition.waiting || transition.kind !== 'prompt')
153
+ return;
154
+ onRelayPromptWaiting(transition.worktreeId, transition.cliToolId, transition.instanceId);
155
+ });
156
+ const timer = setInterval(() => void runRelayMaintenance(), relay_policy_1.RELAY_PUMP_INTERVAL_MS);
157
+ // The loop must not be the reason a process stays alive: a CLI that imported
158
+ // this graph for one call would otherwise never exit.
159
+ timer.unref?.();
160
+ globalThis.__relayMaintenanceTimer = timer;
161
+ }
162
+ /** Drop the subscription and the timer. Safe when nothing is armed. */
163
+ function stopRelayTriggers() {
164
+ const unsubscribe = globalThis.__relayTriggersUnsubscribe;
165
+ if (unsubscribe) {
166
+ unsubscribe();
167
+ globalThis.__relayTriggersUnsubscribe = undefined;
168
+ }
169
+ if (globalThis.__relayMaintenanceTimer) {
170
+ clearInterval(globalThis.__relayMaintenanceTimer);
171
+ globalThis.__relayMaintenanceTimer = undefined;
172
+ }
173
+ }
174
+ /** Whether the triggers are armed. Test seam. */
175
+ function areRelayTriggersActive() {
176
+ return globalThis.__relayTriggersUnsubscribe !== undefined;
177
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * The vocabulary of a session-to-session relay (Issue #2377).
4
+ *
5
+ * Kept in its own module because both halves of the process read it — the
6
+ * server modules that create, deliver and expire a relay, and the browser hook
7
+ * that draws the badges — and neither may pull the other's graph in. Nothing
8
+ * here touches a database, a socket or a DOM.
9
+ *
10
+ * @module lib/relay/types
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.OPEN_RELAY_STATES = void 0;
14
+ exports.isOpenRelayState = isOpenRelayState;
15
+ exports.emptyRelayCounts = emptyRelayCounts;
16
+ /** The states from which a relay can still produce a delivery. */
17
+ exports.OPEN_RELAY_STATES = ['pending', 'prompt'];
18
+ /** Whether this state can still produce a delivery. */
19
+ function isOpenRelayState(state) {
20
+ return exports.OPEN_RELAY_STATES.includes(state);
21
+ }
22
+ /** An empty {@link RelayCounts}. */
23
+ function emptyRelayCounts() {
24
+ return { pending: 0, delivered: 0, prompt: 0, expired: 0, cancelled: 0 };
25
+ }
@@ -686,6 +686,23 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
686
686
  const scraperPromptWaiting = statusResult.hasActivePrompt;
687
687
  const isSelectionListActive = statusResult.status === 'waiting' && status_detector_1.SELECTION_LIST_REASONS.has(statusResult.reason);
688
688
  const isPagerActive = statusResult.reason === status_detector_1.STATUS_REASON.CODEX_PAGER;
689
+ // Issue #2369: an overlay whose ONLY exit is the dismiss — Command Code's
690
+ // `/usage` panel, whose last row is `Press Esc to close`.
691
+ //
692
+ // A THIRD flag rather than a member of `SELECTION_LIST_REASONS`, and the
693
+ // separation is the fix rather than a nicety: `isSelectionListActive` is what
694
+ // the arrow pad is drawn from, and this screen has no highlight to move. Nor
695
+ // is it `isUnclassifiedActive` any more — the detector answers `waiting` for
696
+ // it, and `isUnclassifiedFrame` only ever says yes to `running` — which is
697
+ // exactly what stops the chat surface offering the eighteen-button
698
+ // hatch + answer-key card to a panel that accepts one key.
699
+ //
700
+ // `status === 'waiting'` is checked as well as the reason, the same shape
701
+ // `isSelectionListActive` above uses, so a future producer that publishes the
702
+ // token with some other status cannot silently turn the card into an Esc
703
+ // button.
704
+ const isDismissablePanelActive = statusResult.status === 'waiting'
705
+ && statusResult.reason === status_detector_1.STATUS_REASON.COMMAND_CODE_DISMISSABLE_PANEL;
689
706
  // Issue #1497: the detection-independent nav hatch (#1017/#1494) is gated on
690
707
  // isUnclassifiedActive. A static, unrecognized TUI overlay (e.g. Claude `/help`)
691
708
  // whose frame stops changing degrades from `running`/`default` to
@@ -993,6 +1010,7 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
993
1010
  },
994
1011
  isSelectionListActive,
995
1012
  isPagerActive,
1013
+ isDismissablePanelActive,
996
1014
  isUnclassifiedActive: merged.isUnclassifiedActive,
997
1015
  // Issue #1926: the same fact `isUnclassifiedActive` carries, named the way
998
1016
  // §4 D1 names it. Published from the merged verdict so the two cannot
@@ -203,6 +203,7 @@ async function sendUserMessage(db, params) {
203
203
  timestamp: userMessageTimestamp,
204
204
  cliToolId,
205
205
  instanceId,
206
+ requestId: params.requestId,
206
207
  });
207
208
  // 5b. Broadcast the user row (Issue #2195).
208
209
  //
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.31.3",
3
+ "version": "0.32.0",
4
4
  "description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -1 +0,0 @@
1
- "use strict";exports.id=1058,exports.ids=[1058,4325],exports.modules={1058:(a,b,c)=>{c.d(b,{$v:()=>P,emitChatTurnProgress:()=>W});var d=c(56791);let e=globalThis.__unclassifiedFrameRuns??(globalThis.__unclassifiedFrameRuns=new Map);var f=c(94154),g=c(63209),h=c(51297),i=c(76777),j=c(50524);let k=/^([^\S\n]*)╹(▀{4,})/,l=/^([^\S\n]*)[│┃]/;var m=c(54325),n=c(81254),o=c(72626),p=c(43234),q=c(15194),r=c(129),s=c(66101),t=c(53163),u=c(17287),v=c(15388),w=c(3161),x=c(49154),y=c(62171),z=c(97751),A=c(31990),B=c(95595),C=c(45017),D=c(52277),E=c(44321),F=c(34405),G=c(93997),H=c(48083),I=c(30008),J=c(24581),K=c(40043),L=c(9516),M=c(36051);let N=(0,o.h)("current-output-builder");function O(a,b){Promise.all([c.e(1356),c.e(1503),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(595),c.e(7836)]).then(c.bind(c,49640)).then(({broadcastMessage:c})=>{c("message",{worktreeId:a,message:b})}).catch(b=>{N.warn("history-row-broadcast-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)})})}async function P(a,b,c,d,e){let f=await Q(a,b,c,d);return(f.isRunning&&"running"===f.sessionStatus&&await X(a,b,c,d),e)?{...f,resolvedBy:e.resolvedBy,conflict:e.conflict??null}:f}async function Q(a,b,c,m){let o=m??c,P=p.CLIToolManager.getInstance().getTool(c),Q=(0,H.CE)(b,c,m),R=(0,H.getLastAgentEvent)(b,c,m),S=(0,r.VM)(c),T=Date.now(),U=(0,H.NW)(b,c,m,T),V=(0,H.BJ)(b,c,m,T),W=(0,w.Jl)(b,c,m),X={lastEventType:R?.event??null,lastEventAt:R?.at??null,lastEventDetail:R?.detail??null,...(0,H.fY)(b,c,m,T),pendingDecisions:U.map(a=>{let b=(0,x.Wk)(a.toolName);return{id:a.decisionId,at:a.at,source:a.source,toolName:a.toolName,confirmedAt:a.confirmedAt,scraperCorroborated:a.scraperCorroborated,deliveryExpired:(0,J.qX)(a,S.capabilities.decisionTimeoutSeconds,T),kind:b,questionOptions:"question"===b&&V?(0,z.dZ)(V.spec).map(a=>({number:a.number,label:a.label})):null}}),dedupDropped:(0,H.n5)(b,c,m),dialogPendingMaxMs:{...J.h_},promptWaitingSince:null,promptWaitingSource:null,toolInputNormalization:(0,v.SQ)(b,c,m),permissionDecision:(0,u.CD)(b,c,m),source:{cliToolId:S.cliToolId,capabilities:S.capabilities,...(0,s.Kf)(S,S.liveness({worktreeId:b,cliToolId:c,instanceId:o}),T),probedActivity:(0,t.hS)({worktreeId:b,cliToolId:c,instanceId:o})},session:W,sessionContext:(0,w.sc)({worktreeId:b,cliToolId:c,instanceId:m},W),sessionDiff:(0,y.rn)({worktreeId:b,cliToolId:c,instanceId:m})};if(!await P.isRunning(b,m))return(0,K.xG)((0,C.v7)(b,c,m)),{isRunning:!1,content:"",lineCount:0,cliToolId:c,sessionStatus:"idle",sessionStatusReason:"session_not_running",statusEvidence:"positive",lastKnownStatus:null,lastKnownStatusAt:null,lastStopEventAt:Q,structuredEvents:X,model:null,reasoningEffort:null,promptDedup:(0,E.XH)(b,c,m),upstreamFault:null,paneObstruction:null,composerText:null,composerState:"no_composer"};let Y=(0,d.getSessionState)(a,b,o),Z=Y?.lastCapturedLine||0,$=await (0,A.Wh)(b,c,F._,m),_=$.split("\n"),aa=_.length,ab=(0,G.sl)(aa,Math.min(F._,G.xE)),ac=((0,q.qR)(c,ab)?_.slice(Math.max(0,Z)):_).join("\n"),ad=(0,C.v7)(b,c,m),ae=(0,C.xU)(ad),af=ae?new Date(ae):void 0,ag=(0,B.WC)($,c,af),ah=(0,B.f8)(ag),ai=ag.hasActivePrompt,aj="waiting"===ag.status&&B.ug.has(ag.reason),ak=ag.reason===B.gv.CODEX_PAGER,al=ag.evidence,am=(0,K.Q4)(ag.status,ag.reason);(0,H._i)(b,c,m,"ready"===ag.status&&"positive"===al);let an=(0,H.R4)(b,c,m),ao=(0,I._G)({worktreeId:b,cliToolId:c,instanceId:m,scraper:{status:ag.status,reason:ag.reason,hasActivePrompt:ai}}),ap=ao.structured;null!==ap&&(X.promptWaitingSince=ap.at,X.promptWaitingSource=ap.source);let aq=function(a,b,c=null,d=null){if("waiting"===a.status)return{...a,structuredApplied:!1};if(null!==c)return{status:"waiting",reason:(0,I.rB)(c),thinking:!1,evidence:a.evidence,isUnclassifiedActive:a.isUnclassifiedActive,structuredApplied:!0};if(null===b||"waiting"===b.status)return{...a,structuredApplied:!1};let e="running"===b.status,f="ready"===b.status&&function(a){if(null===a)return!1;let{closedBy:b,closedAt:c,openedAt:d}=a;return"stop"===b&&null!==c&&null!==d&&c>d}(d)?"positive":a.evidence;return{status:b.status,reason:b.reason,thinking:e,evidence:f,isUnclassifiedActive:a.isUnclassifiedActive,structuredApplied:!0}}({status:ag.status,reason:ag.reason,thinking:ah,evidence:al,isUnclassifiedActive:am},an,ap,X),ar=ao.waiting,as=ag.promptDetection.promptData,at=as&&V?(0,L.Hu)(as,V.spec):null,au=null!==ap&&"notification"===ap.source&&"permission-id"===S.capabilities.eventIdentity&&(0,M.PP)(ap.decisionId)?ap.decisionId:null,av=null!==ap&&"question"===(0,x.Wk)(ap.toolName),aw=null===au||av?null:M.QB,ax=null===ap?null:{...ap,askUserQuestion:function(a){let b=a?.spec.questions[0];return b?{question:b.question,labels:b.choices.map(a=>a.label),questionCount:a.spec.questions.length}:null}(V),decisionOptions:aw,decisionId:au,patterns:null!==aw?ap.patterns:null},ay=ai?at??as??(ax?(0,M.Yo)(b,ax):null):ax?(0,M.Yo)(b,ax):null;null!==an&&an.status!==ag.status&&N.info("detection-divergence",{worktreeId:b,cliToolId:c,instanceId:o,scraperStatus:ag.status,scraperReason:ag.reason,structuredStatus:an.status,structuredReason:an.reason,structuredEvent:an.event,structuredEventAt:an.at,applied:aq.structuredApplied});let az=_.slice(-100).join("\n"),aA="opencode"===c?function(a){let b=(0,h.aJ)(a).split("\n"),c=-1,d=-1,e=-1;for(let a=0;a<b.length;a++){let f=k.exec(b[a]);f&&(c=a,e=(d=f[1].length)+1+f[2].length)}if(-1===c)return null;let f=0,g="";for(let a=0;a<b.length;a++){let h=b[a];if(a!==c){let a=l.exec(h);if(!a||a[1].length!==d)continue}let k=h.slice((0,j.sh)(h,e)).trim();""!==k&&(f+=1,""===g&&(g=(0,i.D)(k,200,"…[truncated]")))}return f<2?null:{id:"opencode_sidebar",matchedText:g,boxRight:e,rows:f}}(az):null,aB=function(a,b,c=Date.now()){for(let[a,b]of e)c-b.lastSeen>36e5&&e.delete(a);if(!b)return e.delete(a),{dwellMs:0,shouldRecord:!1};let d=e.get(a);if(!d)return e.set(a,{since:c,lastSeen:c,recorded:!1}),{dwellMs:0,shouldRecord:!1};d.lastSeen=c;let f=Math.max(0,c-d.since);return d.recorded||f<6e4?{dwellMs:f,shouldRecord:!1}:(d.recorded=!0,{dwellMs:f,shouldRecord:!0})}(ad,aq.isUnclassifiedActive);if(aB.shouldRecord&&function(a,b){var c;let e=Math.round(b.dwellMs/1e3),f=`${b.sessionStatus}/${b.sessionStatusReason}`,g=`Unclassified interactive frame (${f}) held for ${e}s. The detection layer could not parse it, so no prompt was published and nothing could answer it. Inspect the raw pane with \`commandmate capture ${b.worktreeId} --pane\`.`+((c=b.obstruction)?` Cause: opencode's sidebar is sharing rows with the transcript (paneObstruction=${c.id}, second column reads ${JSON.stringify(c.matchedText)}), which covers the marker that ends a turn. Press \`ctrl+x b\` in the pane to close it.`:""),h={type:n.LT,status:"unclassified",question:g,options:[],dwellSeconds:e,sessionStatusReason:f};try{let c=(0,d.createMessage)(a,{worktreeId:b.worktreeId,role:"assistant",content:g,messageType:"prompt",promptData:h,timestamp:new Date,cliToolId:b.cliToolId,instanceId:b.instanceId});N.info("unclassified-frame-recorded",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,dwellSeconds:e,statusReason:f}),O(b.worktreeId,c)}catch(a){N.warn("unclassified-frame-record-failed",{worktreeId:b.worktreeId,error:a instanceof Error?a.message:String(a)})}}(a,{worktreeId:b,cliToolId:c,instanceId:o,dwellMs:aB.dwellMs,sessionStatus:aq.status,sessionStatusReason:aq.reason,obstruction:aA}),null!==ap&&null!==ax&&!ai&&!ap.recorded){(0,H.HR)(b,c,m);var aC=b,aD=c,aE=o,aF=ap,aG=ax;let e=(0,M.fO)(aC,aG);try{let b=(0,d.createMessage)(a,{worktreeId:aC,role:"assistant",content:e.question,summary:`structured prompt \xb7 source=${aF.source}${aF.toolName?` \xb7 tool=${aF.toolName}`:""}`,messageType:"prompt",promptData:e,timestamp:new Date,cliToolId:aD,instanceId:aE});N.info("structured-prompt-recorded",{worktreeId:aC,cliToolId:aD,instanceId:aE,source:aF.source,toolName:aF.toolName}),O(aC,b)}catch(a){N.warn("structured-prompt-record-failed",{worktreeId:aC,error:a instanceof Error?a.message:String(a)})}}let aH=(0,f.ji)($,c),aI=(0,g.bT)(az),aJ=(0,C.aq)(b,c,m),{model:aK,effort:aL}=(0,H.jl)(b,c,m);(0,K.ox)(ad,{status:aq.status,reason:aq.reason,evidence:aq.evidence});let aM=(0,K.AD)(ad);return{isRunning:!0,cliToolId:c,sessionStatus:aq.status,sessionStatusReason:aq.reason,content:ac,fullOutput:$,realtimeSnippet:az,lineCount:aa,lastCapturedLine:Z,isComplete:ar,isGenerating:aq.thinking,thinking:aq.thinking,thinkingMessage:aq.thinking?"Claude is thinking...":null,isPromptWaiting:ar,promptData:ay,autoYes:{enabled:aJ?.enabled??!1,expiresAt:aJ?.enabled?aJ.expiresAt:null,stopReason:aJ?.stopReason,lastSuppression:(0,D.gb)(b,c,m),stopMatchedText:aJ?.stopMatchedText},isSelectionListActive:aj,isPagerActive:ak,isUnclassifiedActive:aq.isUnclassifiedActive,statusEvidence:aq.evidence,lastKnownStatus:aM?.status??null,lastKnownStatusAt:aM?.at??null,lastServerResponseTimestamp:ae,serverPollerActive:(0,C.bZ)(ad),lastStopEventAt:Q,structuredEvents:X,model:aK,reasoningEffort:aL,promptDedup:(0,E.XH)(b,c,m),upstreamFault:aI?{id:aI.fault.id,matchedText:aI.matchedText,at:Date.now()}:null,paneObstruction:aA?{id:aA.id,matchedText:aA.matchedText,at:Date.now()}:null,composerText:"content"===aH.state?aH.text:null,composerState:aH.state}}function R(){return{version:0,askedAt:-1/0,turnKey:null,body:null,loggedOutcome:null,loggedTurnKey:null}}let S=globalThis.__chatTurnProgressState??=new Map;function T(a){return`${a.worktreeId}:${a.cliToolId}:${a.instanceId??a.cliToolId}`}function U(a,b,c,d={}){let e=T(a),f=S.get(e)??R();S.set(e,f),(f.loggedOutcome!==b||f.loggedTurnKey!==c)&&(f.loggedOutcome=b,f.loggedTurnKey=c,N.info("published"===b?"chat-turn-progress-published":"no-subscribers"===b?"chat-turn-progress-no-subscribers":"chat-turn-progress-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,turnKey:c,...d}))}async function V(a,b,c=Date.now()){let d,e=T(a),f=S.get(e)??R();if(c-f.askedAt<m.r9)return null;f.askedAt=c,S.set(e,f);try{d=await b()}catch{return null}if(!d||0===d.body.length)return null;let g=(0,m.rx)(d.body);return d.turnKey===f.turnKey&&g.body===f.body?null:(f.turnKey=d.turnKey,f.body=g.body,f.version+=1,{type:m.rz,worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,turnKey:d.turnKey,body:g.body,partial:g.truncated||!0===d.partial,version:f.version,done:!1})}async function W(a,b,d=Date.now()){try{let{broadcast:e,hasRoomSubscribers:f}=await Promise.all([c.e(1356),c.e(1503),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(595),c.e(7836)]).then(c.bind(c,49640));if(!f(a.worktreeId))return U(a,"no-subscribers",null),!1;let g=await V(a,b,d);if(!g)return!1;return e(a.worktreeId,g),U(a,"published",g.turnKey,{version:g.version,bodyLength:g.body.length,partial:g.partial}),!0}catch(b){return U(a,"failed",null,{error:b instanceof Error?b.message:String(b)}),!1}}async function X(a,b,d,e){if("claude"!==d)return;let f={worktreeId:b,cliToolId:d,instanceId:e};try{let{getWorktreeById:g}=await Promise.resolve().then(c.bind(c,73753)),h=g(a,b)?.path;if(!h)return;let{hasRoomSubscribers:i}=await Promise.all([c.e(1356),c.e(1503),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(595),c.e(7836)]).then(c.bind(c,49640));if(!i(b))return void U(f,"no-subscribers",null);W(f,async()=>{let{readClaudeTurnProgress:a}=await c.e(9696).then(c.bind(c,79696));return a({worktreeId:b,cliToolId:d,instanceId:e??d},{worktreePath:h})})}catch(a){U(f,"failed",null,{error:a instanceof Error?a.message:String(a)})}}},9516:(a,b,c)=>{c.d(b,{Hu:()=>i,Ll:()=>j});let d=["type something","chat about this"],e=/^\s*\[[ xX]\]\s*/,f=/(?:…|\.\.\.)\s*$/,g=new Set(["yes","y","no","n"]);function h(a){return a.replace(e,"").replace(f,"").replace(/\s+/g," ").trim().toLowerCase()}function i(a,b){if("multiple_choice"!==a.type)return null;let c=function(a,b){let c=h(b);if(""===c)return null;let d=a.questions.map((a,b)=>({entry:a,index:b})).filter(({entry:a})=>(function(a,b){let[c,d]=a.length<=b.length?[a,b]:[b,a];return c.length<8?c===d:d.includes(c)})(h(a.question),c));return 1===d.length?d[0]:null}(b,a.question);if(null===c)return null;let{entry:f,index:g}=c,i=new Map(a.options.map(a=>[a.number,a])),j=[];for(let[a,b]of f.choices.entries()){var k;let c=a+1,d=i.get(c);if(!d||!function(a,b){if(""===a||""===b)return!1;if(a===b)return!0;let[c,d]=a.length<=b.length?[a,b]:[b,a];return!(c.length<8)&&d.startsWith(c)}(h(d.label),h(b.label)))return null;j.push({...d,label:`${(k=d.label,e.exec(k)?.[0]??"")}${b.label}`,...b.description?{description:b.description}:{}})}let l=[];for(let b of a.options)!(b.number<=f.choices.length)&&function(a){let b=h(a);return d.some(a=>b===a||b.startsWith(a))}(b.label)&&(j.push(b),l.push(b.number));return j.sort((a,b)=>a.number-b.number),{...a,question:f.question,options:j,isAskUserQuestion:!0,askUserQuestion:{...f.header?{header:f.header}:{},multiSelect:f.multiSelect,questionIndex:g,questionCount:b.questions.length,metaOptionNumbers:l}}}function j(a,b){let c=b.trim();if(/^\d+$/.test(c)){let b=Number.parseInt(c,10);return a.options.some(a=>a.number===b)?{ok:!0,input:String(b)}:{ok:!1,reason:"answer_out_of_range",message:"The option number is outside the range this prompt offers. Use `commandmate capture <worktree-id> --json` to list the current options."}}let d=function(a,b){let c=h(b);if(""===c)return[];let d=a.filter(a=>h(a.label)===c);return d.length>0?d:c.length<2?[]:a.filter(a=>h(a.label).startsWith(c))}(a.options,c);if(1===d.length){let[a]=d;return{ok:!0,input:String(a.number),resolved:{via:"semantic",optionNumber:a.number,optionLabel:a.label}}}return d.length>1?{ok:!1,reason:"unresolvable_answer",message:"The answer matches more than one option label. Answer with an option number."}:a.options.some(a=>!0===a.requiresTextInput)&&!g.has(c.toLowerCase())?{ok:!0,input:b}:{ok:!1,reason:"unresolvable_answer",message:"No option label matches the answer. Answer with an option number (yes/no is not resolved on a numbered picker — Issue #1681)."}}},15388:(a,b,c)=>{c.d(b,{RJ:()=>f,SQ:()=>g});var d=c(24455);let e=globalThis.__toolInputNormalizations??(globalThis.__toolInputNormalizations=new Map);function f(a,b,c,g,h,i=Date.now()){e.set((0,d.v7)(a,b,c),{...g,toolName:h,at:i})}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??null}},30008:(a,b,c)=>{c.d(b,{F1:()=>g,_G:()=>i,j0:()=>f,rB:()=>h,xF:()=>j});var d=c(48083),e=c(67882);let f=3e5,g="CM_STRUCTURED_SEND_GUARD";function h(a){return"notification"===a.source?e.Oh.PERMISSION_PROMPT:e.Oh.PERMISSION_REQUEST}function i({worktreeId:a,cliToolId:b,instanceId:c,scraper:e,ignoreStructured:i=!1,now:j=Date.now()}){var k,l,m;let n=(0,d.P5)(a,b,c,j);null!==n&&("waiting"===e.status?(0,d.zA)(a,b,c,j):n.scraperCorroborated&&((0,d.m5)(a,b,c),n=null));let o=e.hasActivePrompt||null!==n;if(e.hasActivePrompt)return{waiting:o,scraperWaiting:!0,structured:n,blocksSend:!0,blockedBy:"scraper",blockReason:e.reason,structuredSendBlockSuppressed:null};if(null===n)return{waiting:o,scraperWaiting:!1,structured:null,blocksSend:!1,blockedBy:null,blockReason:null,structuredSendBlockSuppressed:null};let p=(k=n,l=i,m=j,l?"caller_opt_out":!function(){let a=process.env[g]?.trim().toLowerCase();return"off"===a||"0"===a||"false"===a}()?m-k.at>=f?"expired":null:"disabled");return{waiting:o,scraperWaiting:!1,structured:n,blocksSend:null===p,blockedBy:null===p?"structured":null,blockReason:null===p?h(n):null,structuredSendBlockSuppressed:p}}function j({worktreeId:a,cliToolId:b,instanceId:c,scraper:e,now:f=Date.now()}){let g=(0,d.P5)(a,b,c,f);return{waiting:e.hasActivePrompt||null!==g,scraperWaiting:e.hasActivePrompt,structured:g}}},40043:(a,b,c)=>{c.d(b,{AD:()=>k,Q4:()=>g,ox:()=>j,xG:()=>l});var d=c(37717),e=c(48083);let f=new Set([d.g.NO_RECENT_OUTPUT,d.g.UNKNOWN_FRAME,d.g.DEFAULT]);function g(a,b){return"running"===a&&f.has(b)}let h=e.sA,i=globalThis.__lastKnownStatusByKey??(globalThis.__lastKnownStatusByKey=new Map);function j(a,b,c=Date.now()){for(let[a,b]of i)c-b.at>=h&&i.delete(a);for(;i.size>512;){let a=i.keys().next();if(a.done)break;i.delete(a.value)}"positive"===b.evidence&&(i.delete(a),i.set(a,{status:b.status,reason:b.reason,at:c}))}function k(a,b=Date.now()){let c=i.get(a);return void 0===c?null:b-c.at>=h?(i.delete(a),null):c}function l(a){i.delete(a)}},44321:(a,b,c)=>{c.d(b,{LN:()=>f,XH:()=>g,fL:()=>h});var d=c(24455);let e=globalThis.__promptDedupSkips??(globalThis.__promptDedupSkips=new Map);function f(a,b,c,g=Date.now()){let h=(0,d.v7)(a,b,c),i=e.get(h);e.set(h,{skippedCount:(i?.skippedCount??0)+1,lastSkippedAt:g})}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??{skippedCount:0,lastSkippedAt:null}}function h(a,b,c,f){if(a===b)return;let g=(0,d.v7)(a,c,f),h=e.get(g);e.delete(g),void 0!==h&&e.set((0,d.v7)(b,c,f),h)}},54325:(a,b,c)=>{c.d(b,{LE:()=>f,Oo:()=>e,ST:()=>d,T4:()=>k,dz:()=>j,r9:()=>h,rx:()=>i,rz:()=>g});let d="client_version",e="version_mismatch";function f(a,b){return!!a&&!!b&&"0.0.0"!==a&&"0.0.0"!==b&&a!==b}let g="chat_turn_progress",h=1e3;function i(a,b=65536){return b<=0?{body:"",truncated:a.length>0}:a.length<=b?{body:a,truncated:!1}:{body:a.slice(a.length-b),truncated:!0}}let j="messages_invalidated",k="model_changed"},63209:(a,b,c)=>{c.d(b,{bT:()=>g});var d=c(51297),e=c(76777);let f=[{id:"overloaded",pattern:/\b5\d{2}\s+Overloaded\b/i,selfRetrying:!0},{id:"retrying",pattern:/Retrying in \d+s\s*[·•]\s*attempt \d+\/\d+/i,selfRetrying:!0},{id:"limit-reached",pattern:/\blimit reached\b/i,selfRetrying:!1},{id:"api-error",pattern:/\bAPI Error(?::|\s+\d{3})/i,selfRetrying:!1}];function g(a){let b=(0,d.aJ)(a);for(let a of f){var c;let d=a.pattern.exec(b);if(!d)continue;let f=b.lastIndexOf("\n",d.index)+1,g=b.indexOf("\n",d.index);return{fault:a,matchedText:(c=b.slice(f,-1===g?void 0:g).trim()||d[0],(0,e.D)(c,200,"…[truncated]"))}}return null}},95595:(a,b,c)=>{c.d(b,{WC:()=>j,f8:()=>i,gv:()=>d.g,ug:()=>g});var d=c(37717),e=c(74258),f=c(43484);let g=new Set([d.g.OPENCODE_SELECTION_LIST,d.g.OPENCODE_MODAL_OVERLAY,d.g.OPENCODE_PERMISSION_PROMPT,d.g.CLAUDE_SELECTION_LIST,d.g.COMMAND_CODE_SELECTION_LIST,d.g.COPILOT_SELECTION_LIST,d.g.CODEX_SELECTION_LIST,d.g.CODEX_PAGER,d.g.CODEX_HOOKS_REVIEW,d.g.ANTIGRAVITY_SELECTION_LIST]),h=new Set([d.g.THINKING_INDICATOR,d.g.OPENCODE_PROCESSING_INDICATOR]);function i(a){return"running"===a.status&&h.has(a.reason)}function j(a,b,c){let d=(0,e.z)(a),g=(0,f.bN)(b).detect(d,{lastOutputTimestamp:c});return{status:g.status,confidence:g.confidence,reason:g.reason,hasActivePrompt:g.hasActivePrompt,evidence:g.evidence,promptDetection:g.promptDetection??{isPrompt:!1,cleanContent:d.clean}}}},97751:(a,b,c)=>{c.d(b,{M4:()=>p,W7:()=>r,aK:()=>q,dV:()=>l,dZ:()=>m,yQ:()=>j});var d=c(72626),e=c(36051),f=c(25071),g=c(129),h=c(62887);let i=(0,d.h)("lib/hooks/structured-decision-response"),j="Rejected by the operator via `commandmate respond`.",k={1:["once","allow once","allow","yes","y"],2:["always","allow always","allow-always"],3:["reject","deny","no","n"]};function l(a){let b=a.trim().toLowerCase();if(""===b)return null;for(let a of e.QB)if(b===String(a.number)||b===a.label.toLowerCase()||b===a.reply||(k[a.number]??[]).includes(b))return a;return null}function m(a){let b=a.questions[0];return b?b.choices.map((a,b)=>({number:b+1,label:a.label,reply:a.label})):[]}let n=/^\d+(?:\s*[,\s]\s*\d+)*$/;function o(a){return a.map(a=>`${a.number} = ${a.label}`).join(", ")}function p(a,b){let c=b.trim();if(""===c)return{ok:!1,reason:"unresolvable_answer",message:"An empty answer names no choice."};if(1!==a.questions.length)return{ok:!1,reason:"multi_question_unsupported",message:`This call asks ${a.questions.length} questions and \`answers\` carries one array per question; a single answer cannot say what the others are. Answer it in the terminal.`};let d=a.questions[0],e=m(a);if(n.test(c)){let a=[];for(let b of c.split(/[,\s]+/)){let d=e.find(a=>a.number===Number(b));if(!d)return{ok:!1,reason:"answer_out_of_range",message:`'${c}' names no choice this question offers. ${o(e)}.`};a.some(a=>a.number===d.number)||a.push(d)}return a.length>1&&!d.multiSelect?{ok:!1,reason:"multi_select_not_offered",message:`This question accepts one choice. Send a single number: ${o(e)}.`}:{ok:!0,resolved:{answers:[a.map(a=>a.reply)],selected:a,freeText:!1}}}let f=e.find(a=>a.label.toLowerCase()===c.toLowerCase());return f?{ok:!0,resolved:{answers:[[f.reply]],selected:[f],freeText:!1}}:c.length>1e3?{ok:!1,reason:"unresolvable_answer",message:"A free-text answer is limited to 1000 characters; this one is longer and is refused rather than cut short."}:{ok:!0,resolved:{answers:[[c]],selected:[],freeText:!0}}}function q(a){return{kind:"answer",answers:a.answers}}async function r({worktreeId:a,cliToolId:b,instanceId:d,answer:k,useDefault:m=!1}){let n,o=(0,g.VM)(b);if(null===o.capabilities.eventIdentity)return{kind:"not-applicable",reason:"no-decision-identity"};let p={worktreeId:a,cliToolId:b,instanceId:d};try{n=await o.listPending(p)}catch(c){return i.warn("structured-decision-unreachable",{worktreeId:a,cliToolId:b,instanceId:d??b,error:c instanceof Error?c.message:String(c)}),{kind:"not-applicable",reason:"source-unreachable"}}let q=n.filter(a=>"permission"===a.kind);if(0===q.length)return{kind:"not-applicable",reason:"no-pending-decision"};let r=q[0];if(q.length>1&&i.info("structured-decision-multiple-pending",{worktreeId:a,cliToolId:b,instanceId:d??b,pending:q.length,answering:r.id}),m)return{kind:"refused",reason:"unresolvable_answer",message:`--default cannot answer a structured approval: the agent publishes no default verdict. Send a number instead — ${e.QB.map(a=>`${a.number} = ${a.label}`).join(", ")}.`};let s=void 0===k?null:l(k);if(!s)return{kind:"refused",reason:"answer_out_of_range",message:`'${k??""}' is not one of the verdicts this approval accepts. `+e.QB.map(a=>`${a.number} = ${a.label} (${a.reply})`).join(", ")+"."};let t=function(a){switch(a){case 1:return{kind:"allowOnce"};case 2:return{kind:"allowAlways"};case 3:return{kind:"deny",message:j};default:return null}}(s.number);if(!t)return{kind:"refused",reason:"unresolvable_answer",message:`Option ${s.number} has no verdict on this server.`};let{delivery:u}=await (0,f.GW)(o,p,r,t),v=u?.delivered===!0;if(v&&o.capabilities.permissionReplyReleasesPrompt){let{recordAgentEvent:e}=await Promise.resolve().then(c.bind(c,48083));e(a,b,d,{event:"notification",at:Date.now(),detail:h.KC,sessionId:r.conversationId,decisionId:r.id,promptSettled:!0})}return i.info("structured-decision-answered",{worktreeId:a,cliToolId:b,instanceId:d??b,decisionId:r.id,optionNumber:s.number,reply:s.reply,delivered:v}),{kind:"answered",decisionId:r.id,option:s,delivered:v}}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=1068,exports.ids=[1068,2839,5220],exports.modules={12462:(a,b,c)=>{c.d(b,{T8:()=>j,o4:()=>k});var d=c(31990),e=c(56791),f=c(49640),g=c(82450),h=c(15194);let i=(0,c(72626).h)("assistant-response-saver");function j(a,b){switch(b){case"claude":return(0,g.NN)(a);case"gemini":return(0,g.IS)(a);case"opencode":return(0,g.aW)(a);case"copilot":return(0,g.LH)(a);default:return a.trim()}}async function k(a,b,c,g,k){let l=k??c;try{let m;if((0,h.VA)(c))return null;let n=(0,e.getSessionState)(a,b,l),o=n?.lastCapturedLine||0;try{m=await (0,d.Wh)(b,c,1e4,k)}catch{return i.info("failed-to-capture"),null}if(!m)return null;let p=m.split("\n"),q=p.length;for(;q>0&&""===p[q-1].trim();)q--;let r=q,{bufferReset:s,reason:t}=r>0&&o>25&&r+25<o?{bufferReset:!0,reason:"shrink"}:r>0&&o>50&&r<50?{bufferReset:!0,reason:"restart"}:{bufferReset:!1,reason:null};s&&i.info("buffer:reset-detected",{reason:t,currentLineCount:r,lastCapturedLine:o});let u=s?0:o;if(!s&&r<=o)return r<o&&((0,e.updateSessionState)(a,b,c,r,k),i.info("position:corrected-stale",{from:o,to:r})),null;let v=p.slice(u).join("\n"),w=j(v,c);if(!w||""===w.trim())return(0,e.updateSessionState)(a,b,c,r,k),i.debug("response:empty-after-clean",{currentLineCount:r}),null;let x=new Date(g.getTime()-1),y=(0,e.createMessage)(a,{worktreeId:b,role:"assistant",content:w,messageType:"normal",timestamp:x,cliToolId:c,instanceId:l});return(0,e.updateSessionState)(a,b,c,r,k),(0,f.broadcastMessage)("message",{worktreeId:b,message:y}),i.info("response:saved",{fromLine:o,toLine:r}),y}catch(a){return i.error("error:",{error:a instanceof Error?a.message:String(a)}),null}}},23197:(a,b,c)=>{c.d(b,{$M:()=>e,H1:()=>d,q5:()=>f});let d="__global__",e=2e3,f=900},39687:(a,b,c)=>{c.d(b,{d:()=>p});var d=c(56791),e=c(43234),f=c(15194),g=c(95220),h=c(12462),i=c(49640),j=c(54325),k=c(72626),l=c(58707),m=c(41466);let n=(0,k.h)("session/send-user-message");function o(a){return a instanceof Error?a.message:String(a)}async function p(a,b){let{worktreeId:c,content:k,cliToolId:p,instanceId:q,absoluteImagePath:r,copilotModel:s}=b,t=b.messageType??"normal",u=q??p,v=e.CLIToolManager.getInstance().getTool(p),w=await (0,l.a3)(c,p,q,{ignoreStructured:b.ignoreStructuredPromptGuard});if(w.waiting)return n.info("send-refused-prompt-waiting",{worktreeId:c,cliToolId:p,reason:w.reason,blockedBy:w.blockedBy}),{ok:!1,stage:"prompt_waiting",error:(0,l.br)(c,w.blockedBy)};let x=new Date;try{await (0,h.o4)(a,c,p,x,q)}catch(a){n.error("failed-to-save-pending-assistant-response:",{error:o(a)})}let y=null;try{let b=(0,d.getMessages)(a,c,{limit:1,cliToolId:p,instanceId:u,matchResolvedInstance:!0});b.length>0&&"user"===b[0].role&&b[0].content===k&&(y=b[0].id)}catch(a){n.error("failed-to-detect-orphaned-messages:",{error:o(a)})}if(s&&"copilot"===p)try{await v.sendModelCommand(c,s,q),n.info("copilot-model-command-sent",{model:s})}catch(a){return n.error("failed-to-send-model-command:",{error:o(a)}),{ok:!1,stage:"model",error:o(a)}}try{r?(0,f._J)(v)?await v.sendMessageWithImage(c,k,r,q):await v.sendMessage(c,(0,m.TZ)(k,r),q):await v.sendMessage(c,k,q)}catch(a){return n.error("failed-to-send-message-to:",{error:o(a)}),{ok:!1,stage:"send",error:o(a)}}let z=(0,d.createMessage)(a,{worktreeId:c,role:"user",content:k,messageType:t,timestamp:x,cliToolId:p,instanceId:q});try{(0,i.broadcastMessage)("message",{worktreeId:c,message:{...z,cliToolId:p,instanceId:u}})}catch(a){n.warn("user-message-broadcast-failed",{error:o(a)})}if(y)try{if((0,d.deleteMessageById)(a,y)){n.info("cleaned-up-orphaned-user");try{(0,i.broadcastMessage)(j.dz,{worktreeId:c,cliToolId:p,instanceId:u,reason:"orphan_cleanup"})}catch(a){n.warn("orphan-cleanup-broadcast-failed",{error:o(a)})}}}catch(a){n.error("failed-to-clean-up-orphaned-message:",{error:o(a)})}return(0,d.updateLastUserMessage)(a,c,k,x),(0,d.clearInProgressMessageId)(a,c,p,q),n.info("cleared-in-progress-message-for"),(0,g.startPolling)(c,p,q),{ok:!0,message:z}}},58707:(a,b,c)=>{c.d(b,{$n:()=>k,a3:()=>l,br:()=>m});var d=c(43234),e=c(31990),f=c(95595),g=c(34405),h=c(72626),i=c(30008);let j=(0,h.h)("prompt-waiting-guard"),k="PROMPT_WAITING";async function l(a,b,c,h){try{let k=d.CLIToolManager.getInstance().getTool(b);if(!await k.isRunning(a,c))return{waiting:!1};let l=await (0,e.Wh)(a,b,g._,c),m=(0,f.WC)(l,b),n=(0,i._G)({worktreeId:a,cliToolId:b,instanceId:c,scraper:{status:m.status,reason:m.reason,hasActivePrompt:m.hasActivePrompt},ignoreStructured:h?.ignoreStructured});if(!n.blocksSend)return null!==n.structuredSendBlockSuppressed&&j.info("structured-send-guard-not-applied",{worktreeId:a,cliToolId:b,instanceId:c,suppressed:n.structuredSendBlockSuppressed,promptWaitingSince:n.structured?.at??null}),{waiting:!1};return{waiting:!0,reason:n.blockReason??void 0,blockedBy:n.blockedBy??void 0}}catch(c){return j.warn("prompt-waiting-check-failed",{worktreeId:a,cliToolId:b,error:c instanceof Error?c.message:String(c)}),{waiting:!1}}}function m(a,b){let c=`${a} is waiting on a prompt. Sending now would type into the prompt's input line instead of reaching the agent, and would leave that text in place for the next answer. Answer the prompt first: \`commandmate respond ${a} <answer>\`.`;if("structured"!==b)return c;let d=Math.round(i.j0/6e4);return`${c} This dialog was reported by the agent's own hooks and is not visible to the terminal scraper, so if the pane looks idle the record has outlived its dialog: it stops blocking sends ${d} minutes after it was reported, or immediately with \`commandmate send ${a} <message> --ignore-structured-prompt\` (server-wide: ${i.F1}=off).`}},61068:(a,b,c)=>{c.d(b,{Nz:()=>u,EB:()=>v,l7:()=>x});var d=c(95220),e=c(45017),f=c(11099),g=c(85775),h=c(72626),i=c(43234),j=c(79892);let k=(0,h.h)("global-session-poller"),l=new Map,m=new Map;var n=c(93997),o=c(15194),p=c(23197),q=c(77093),r=c(82325);let s=(0,h.h)("session-cleanup");async function t(a,b){let c={worktreeId:a,sessionsKilled:[],sessionErrors:[],pollersStopped:[],pollerErrors:[]};for(let e of((0,n.pc)(),o.XH)){try{await b(a,e)&&(c.sessionsKilled.push(e),s.info("session:killed",{worktreeId:a,cliToolId:e}))}catch(d){let b=`${e}: ${(0,q.u1)(d)}`;c.sessionErrors.push(b),s.warn("session:kill-failed",{worktreeId:a,cliToolId:e,error:d instanceof Error?d.message:String(d)})}try{(0,d.stopPolling)(a,e),c.pollersStopped.push(`response-poller:${e}`)}catch(d){let b=`response-poller:${e}: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("response-poller:stop-failed",{worktreeId:a,cliToolId:e,error:d instanceof Error?d.message:String(d)})}}try{(0,e._C)(a),c.pollersStopped.push("auto-yes-poller")}catch(d){let b=`auto-yes-poller: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("auto-yes-poller:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,e.LP)(a),c.pollersStopped.push("auto-yes-state")}catch(d){let b=`auto-yes-state: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("auto-yes-state:delete-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,f.Yg)(a),c.pollersStopped.push("schedule-manager")}catch(d){let b=`schedule-manager: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("schedule-manager:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,g.Tm)(a),c.pollersStopped.push("timer-manager")}catch(d){let b=`timer-manager: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("timer-manager:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}return c}async function u(a,b){let c=await Promise.allSettled(a.map(a=>t(a,b))),d=[],e=[];for(let b=0;b<c.length;b++){let f=c[b],g=a[b];if("fulfilled"===f.status){let a=f.value;for(let b of(d.push(a),a.sessionErrors))e.push(`Session kill error (${g}): ${b}`);for(let b of a.pollerErrors)e.push(`Poller stop error (${g}): ${b}`)}else e.push(`Cleanup failed (${g}): ${(0,q.u1)(f.reason)}`)}return{results:d,warnings:e}}async function v(a,b){try{let c=i.CLIToolManager.getInstance().getTool(b);if(!await c.isRunning(a))return!1;let e=`${a}:${b}`;(0,d.clearPromptHashCache)(e);let f=c.getSessionName(a);return(0,j.fY)(f)}catch{return!1}}async function w(){for(let a of l.keys()){let b=l.get(a);b&&clearTimeout(b)}l.clear(),m.clear(),k.info("poll:all-stopped");let a=0,b=i.CLIToolManager.getInstance();for(let c of o.XH)try{let d=b.getTool(c).getSessionName(p.H1);await (0,j.N)(d)&&await (0,j.fY)(d)&&(a++,s.info("global-session:killed",{cliToolId:c,sessionName:d}))}catch(a){s.warn("global-session:kill-failed",{cliToolId:c,error:(0,q.u1)(a)})}return a}async function x(a,b){let c=(0,r.L0)(a,b);try{await w()}catch(a){s.warn("sync:global-cleanup-failed",{error:(0,q.u1)(a)})}let d=[];if(c.deletedIds.length>0)try{let a=await u(c.deletedIds,v);a.warnings.length>0&&(s.warn("sync:cleanup-warnings",{warnings:a.warnings}),d=[`${a.warnings.length} session cleanup warning(s) occurred`])}catch(a){s.error("sync:cleanup-failed",{error:(0,q.u1)(a)}),d=["Session cleanup encountered an error"]}return{syncResult:c,cleanupWarnings:d}}},82325:(a,b,c)=>{c.d(b,{Hz:()=>o,L0:()=>r,Mg:()=>s,YM:()=>p,Yp:()=>q});var d=c(79646),e=c(28354),f=c(29021),g=c.n(f),h=c(33873),i=c.n(h),j=c(23718),k=c(56791),l=c(72626),m=c(64185);let n=(0,l.h)("worktrees");function o(){let a=process.env.WORKTREE_REPOS;return a&&a.trim()?a.split(",").map(a=>a.trim()).filter(a=>a.length>0):[]}async function p(a){let b=(0,e.promisify)(d.exec);if(function(a){if(!a)return!1;try{return g().lstatSync(a),!1}catch(b){let a=b.code;return"ENOENT"===a||"ENOTDIR"===a}}(a))return n.warn("repository:scan-skipped-missing-dir",{repoPath:a}),[];try{let{stdout:c}=await b("git worktree list",{cwd:a}),d=function(a){if(!a||""===a.trim())return[];let b=a.trim().split("\n"),c=[];for(let a of b){let b=a.trim();if(!b)continue;let d=b.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(d){let[,a,b,e]=d;c.push({path:a.trim(),branch:e||`detached-${b}`,commit:b})}}return c}(c),e=i().resolve(a),f=i().basename(e);return(0,m.oZ)(e),d.map(a=>{let b=i().resolve(a.path);return{id:(0,j.ko)(b),name:a.branch,branch:a.branch,path:b,repositoryPath:e,repositoryName:f}}).filter(a=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(b=>a.path.startsWith(b))?(n.warn("worktree:unsafe-path-skipped",{path:a.path}),!1):!(a.path.includes("\0")||a.path.includes(".."))||(n.warn("worktree:malicious-path-skipped",{path:a.path}),!1))}catch(c){let a=c instanceof Error?c.message:String(c),b=c.code;if(a?.includes("not a git repository")||128===b)return[];throw c}}async function q(a){let b=await Promise.allSettled(a.map(async a=>{n.info("repository:scan-start",{repoPath:a});let b=await p(a);return n.info("repository:scan-complete",{repoPath:a,worktreeCount:b.length}),b})),c=[];for(let d=0;d<b.length;d++){let e=b[d];"fulfilled"===e.status?c.push(...e.value):n.error("repository:scan-failed",{repoPath:a[d],error:e.reason instanceof Error?e.reason.message:String(e.reason)})}return c}function r(a,b){if(0===b.length)return{deletedIds:[],upsertedCount:0};let c=[],d=0,e=new Map;for(let a of b){let b=a.repositoryPath||"";e.has(b)||e.set(b,[]),e.get(b).push(a)}let f=new Set([...(0,k.getAllWorktreeIds)(a),...(0,k.getAliasedWorktreeIds)(a)]),g=new Map((0,k.getAllWorktreePathIds)(a).map(a=>[i().resolve(a.path),a.id])),h=new Map,l=new Map;for(let[a,b]of g)h.set(a,new Set([b])),l.set(b,a);for(let b of(0,k.getAllWorktreeAliases)(a)){let a=l.get(b.worktreeId);a&&h.get(a)?.add(b.oldId)}let m=new Set(b.map(a=>i().resolve(a.path)));for(let[b,o]of e){if(!b)continue;let e=(0,k.getWorktreesByRepository)(a,b).filter(a=>!m.has(i().resolve(a.path))).map(a=>a.id);if(e.length>0){let b=(0,k.deleteWorktreesByIds)(a,e);for(let a of(c.push(...e),e)){f.delete(a);let b=l.get(a);void 0!==b&&(g.delete(b),h.delete(b))}n.info("worktree:cleanup",{deletedCount:b.deletedCount})}for(let b of o){let c=i().resolve(b.path),e=g.get(c),m=b.id,n=e??(m&&!f.has(m)?m:function(a,b,c){if(!c||0===c.size)return(0,j.ko)(a,b);let d=new Set(b);for(let a of c)d.delete(a);return(0,j.ko)(a,d)}(c,f,h.get(c)));f.add(n),g.set(c,n),l.set(n,c),(0,k.upsertWorktree)(a,{...b,id:n,name:b.branch??b.name}),d++}}return{deletedIds:c,upsertedCount:d}}function s(a,b){let c=new Set(b.map(a=>a.repositoryPath).filter(a=>!!a)),d=[];for(let b of(0,k.getRepositories)(a)){let e=b.path;if(!e||c.has(e)||function(a){if(!a)return!1;try{return g().existsSync(a)&&g().existsSync(i().join(a,".git"))}catch{return!0}}(e))continue;let f=(0,k.getWorktreesByRepository)(a,e).map(a=>a.id);if(0===f.length)continue;let h=(0,k.deleteWorktreesByIds)(a,f);d.push(...f),n.info("worktree:stale-repo-pruned",{repoPath:e,deletedCount:h.deletedCount})}return d}},85775:(a,b,c)=>{c.d(b,{Tm:()=>o,x4:()=>m,xJ:()=>n});var d=c(34129),e=c(43234),f=c(88807),g=c(72626),h=c(87374),i=c(39687);let j=(0,g.h)("timer-manager");function k(){return globalThis.__timerManagerState||(globalThis.__timerManagerState={timers:new Map,timerWorktrees:new Map,initialized:!1}),globalThis.__timerManagerState}async function l(a){let b=k(),c=(0,f.getDbInstance)();try{let b=(0,d.kx)(c,a);if(!b||"pending"!==b.status)return;let f=e.CLIToolManager.getInstance().getTool(b.cliToolId),g=b.instanceId;if(!await f.isRunning(b.worktreeId,g)){j.warn("timer:no-session",{timerId:a,worktreeId:b.worktreeId,instanceId:g}),(0,d.j2)(c,a,h.HR.NO_SESSION);return}(0,d.j2)(c,a,"sending");let k=await (0,i.d)(c,{worktreeId:b.worktreeId,content:b.message,cliToolId:b.cliToolId,instanceId:g});if(!k.ok){let b=`[${k.stage}] ${k.error}`;(0,d.j2)(c,a,"failed",void 0,b),j.error("timer:send-failed",{timerId:a,stage:k.stage,error:k.error});return}(0,d.j2)(c,a,"sent",Date.now()),j.info("timer:sent",{timerId:a,worktreeId:b.worktreeId})}catch(e){let b=e instanceof Error?e.message:String(e);try{(0,d.j2)(c,a,"failed",void 0,b)}catch{}j.error("timer:send-failed",{timerId:a,error:b})}finally{b.timers.delete(a),b.timerWorktrees.delete(a)}}function m(a,b,c){let d=k(),e=setTimeout(()=>{l(a)},c);d.timers.set(a,e),d.timerWorktrees.set(a,b)}function n(a){let b=k(),c=b.timers.get(a);c&&(clearTimeout(c),b.timers.delete(a),b.timerWorktrees.delete(a));let e=(0,f.getDbInstance)();(0,d.Ud)(e,a)}function o(a){let b=k(),c=(0,f.getDbInstance)();for(let[c,d]of b.timerWorktrees)if(d===a){let a=b.timers.get(c);a&&clearTimeout(a),b.timers.delete(c),b.timerWorktrees.delete(c)}(0,d.$$)(c,a)}},95220:(a,b,c)=>{c.r(b),c.d(b,{accumulateTuiContent:()=>g.IZ,cleanClaudeResponse:()=>f.NN,cleanCopilotResponse:()=>f.LH,cleanGeminiResponse:()=>f.IS,cleanOpenCodeResponse:()=>f.aW,clearPromptHashCache:()=>h.iX,clearTuiAccumulator:()=>g.q1,extractCopilotContentLines:()=>g.o0,extractTuiContentLines:()=>g.K0,findOverlapIndex:()=>g.vQ,getAccumulatedContent:()=>g.Uz,getActivePollers:()=>d.KQ,initTuiAccumulator:()=>g.tb,isDuplicatePrompt:()=>h.gv,isOpenCodeComplete:()=>e.bE,migrateResponsePollerWorktreeIds:()=>d.sR,normalizeCopilotLine:()=>g.IW,normalizePromptForDedup:()=>h.zm,renamePromptHashCacheKey:()=>h.i2,resolveExtractionStartIndex:()=>e.QM,startPolling:()=>d.g8,stopAllPolling:()=>d.fq,stopPolling:()=>d.Et,truncateMessage:()=>f.Sj});var d=c(45146),e=c(60),f=c(82450),g=c(13033),h=c(72457)}};