commandmate 0.49.1 → 0.49.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (819) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +246 -243
  3. package/.next/app-path-routes-manifest.json +18 -17
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +8 -0
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/capabilities/route.js +1 -1
  18. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/daily-summary/route.js +1 -1
  20. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  21. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  24. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  31. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  32. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  34. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  35. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  37. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/push/escalation/route.js +1 -1
  42. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  43. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  45. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/push/vapid/route.js +1 -1
  47. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  48. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/relays/[relayId]/cancel/route.js +4 -1
  50. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  51. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -0
  53. package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
  54. package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
  55. package/.next/server/app/api/relays/[relayId]/route.js +1 -1
  56. package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/relays/route.js +4 -1
  59. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  60. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  65. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js +1 -1
  67. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  68. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js +1 -1
  71. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  72. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/route.js +1 -1
  74. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  75. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js +1 -1
  77. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  78. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js +1 -1
  80. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  81. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  84. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  85. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  96. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  100. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/verification/runs/route.js +1 -1
  102. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  130. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  131. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -1
  188. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  194. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  195. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  228. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  229. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  231. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  234. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  235. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -144
  238. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  241. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  259. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  268. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  271. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  279. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  282. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/api/worktrees/route.js +1 -1
  291. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  292. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  294. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  295. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  296. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/page_client-reference-manifest.js +1 -1
  298. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/review/page.js +1 -1
  301. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  302. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  303. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  304. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  305. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  306. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  307. package/.next/server/app/worktrees/[id]/page.js +10 -10
  308. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  309. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  310. package/.next/server/app-paths-manifest.json +18 -17
  311. package/.next/server/chunks/1308.js +1 -0
  312. package/.next/server/chunks/1501.js +5 -4
  313. package/.next/server/chunks/1656.js +2 -2
  314. package/.next/server/chunks/1957.js +2 -0
  315. package/.next/server/chunks/2119.js +1 -1
  316. package/.next/server/chunks/2445.js +1 -1
  317. package/.next/server/chunks/2897.js +1 -0
  318. package/.next/server/chunks/3417.js +1 -0
  319. package/.next/server/chunks/3505.js +1 -1
  320. package/.next/server/chunks/3801.js +8 -8
  321. package/.next/server/chunks/4207.js +1 -1
  322. package/.next/server/chunks/4490.js +1 -0
  323. package/.next/server/chunks/4911.js +1 -0
  324. package/.next/server/chunks/4936.js +1 -0
  325. package/.next/server/chunks/5209.js +2 -1
  326. package/.next/server/chunks/5350.js +212 -0
  327. package/.next/server/chunks/5354.js +1 -1
  328. package/.next/server/chunks/6130.js +1 -1
  329. package/.next/server/chunks/6401.js +1 -1
  330. package/.next/server/chunks/7023.js +3 -3
  331. package/.next/server/chunks/7905.js +1 -1
  332. package/.next/server/chunks/7926.js +1 -0
  333. package/.next/server/chunks/8581.js +15 -15
  334. package/.next/server/chunks/8728.js +2 -2
  335. package/.next/server/chunks/8782.js +1 -1
  336. package/.next/server/chunks/8807.js +89 -88
  337. package/.next/server/chunks/8918.js +3 -3
  338. package/.next/server/chunks/9169.js +1 -0
  339. package/.next/server/chunks/9390.js +1 -1
  340. package/.next/server/chunks/9584.js +1 -1
  341. package/.next/server/chunks/9627.js +5 -5
  342. package/.next/server/chunks/9702.js +1 -0
  343. package/.next/server/chunks/9731.js +3 -3
  344. package/.next/server/middleware-manifest.json +5 -5
  345. package/.next/server/pages/500.html +1 -1
  346. package/.next/server/server-reference-manifest.json +1 -1
  347. package/.next/static/chunks/{2407-675ba6b21844dc3b.js → 2407-87ec01332344ec2b.js} +1 -1
  348. package/.next/static/chunks/3931-3ef48b8d97357282.js +1 -0
  349. package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
  350. package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
  351. package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
  352. package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
  353. package/.next/static/chunks/app/api/agents/update/route-96fc12d400b49b13.js +1 -0
  354. package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +1 -0
  355. package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +1 -0
  356. package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +1 -0
  357. package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +1 -0
  358. package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +1 -0
  359. package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +1 -0
  360. package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +1 -0
  361. package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +1 -0
  362. package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +1 -0
  363. package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +1 -0
  364. package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +1 -0
  365. package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +1 -0
  366. package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +1 -0
  367. package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +1 -0
  368. package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +1 -0
  369. package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +1 -0
  370. package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +1 -0
  371. package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +1 -0
  372. package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +1 -0
  373. package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +1 -0
  374. package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +1 -0
  375. package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +1 -0
  376. package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +1 -0
  377. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +1 -0
  378. package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +1 -0
  379. package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +1 -0
  380. package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +1 -0
  381. package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +1 -0
  382. package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +1 -0
  383. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +1 -0
  384. package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +1 -0
  385. package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +1 -0
  386. package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +1 -0
  387. package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +1 -0
  388. package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +1 -0
  389. package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +1 -0
  390. package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +1 -0
  391. package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +1 -0
  392. package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +1 -0
  393. package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +1 -0
  394. package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +1 -0
  395. package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +1 -0
  396. package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +1 -0
  397. package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +1 -0
  398. package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +1 -0
  399. package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +1 -0
  400. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +1 -0
  401. package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +1 -0
  402. package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +1 -0
  403. package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +1 -0
  404. package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +1 -0
  405. package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +1 -0
  491. package/.next/static/chunks/app/layout-b9d8aef70e4f17b2.js +1 -0
  492. package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +1 -0
  493. package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
  494. package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
  495. package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.js +1 -0
  496. package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
  497. package/.next/static/chunks/app/sessions/{page-890fd50ec9739973.js → page-c6eb7c02db2f4c80.js} +1 -1
  498. package/.next/static/chunks/app/worktrees/[id]/layout-96fc12d400b49b13.js +1 -0
  499. package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +1 -0
  500. package/.next/trace +13 -13
  501. package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
  502. package/.next/types/routes.d.ts +2 -1
  503. package/.next/types/validator.ts +9 -0
  504. package/dist/cli/commands/ask.d.ts.map +1 -1
  505. package/dist/cli/commands/ask.js +56 -5
  506. package/dist/cli/commands/attach.d.ts +4 -1
  507. package/dist/cli/commands/attach.d.ts.map +1 -1
  508. package/dist/cli/commands/attach.js +19 -7
  509. package/dist/cli/commands/command-target.d.ts +7 -0
  510. package/dist/cli/commands/command-target.d.ts.map +1 -1
  511. package/dist/cli/commands/command-target.js +10 -0
  512. package/dist/cli/commands/instances.d.ts.map +1 -1
  513. package/dist/cli/commands/instances.js +38 -2
  514. package/dist/cli/commands/message-dispatch.d.ts +17 -3
  515. package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
  516. package/dist/cli/commands/message-dispatch.js +14 -8
  517. package/dist/cli/commands/prompt.d.ts.map +1 -1
  518. package/dist/cli/commands/prompt.js +2 -1
  519. package/dist/cli/commands/relays.d.ts +4 -1
  520. package/dist/cli/commands/relays.d.ts.map +1 -1
  521. package/dist/cli/commands/relays.js +146 -8
  522. package/dist/cli/commands/report.d.ts +7 -2
  523. package/dist/cli/commands/report.d.ts.map +1 -1
  524. package/dist/cli/commands/report.js +19 -6
  525. package/dist/cli/commands/respond-strict.d.ts.map +1 -1
  526. package/dist/cli/commands/respond-strict.js +29 -5
  527. package/dist/cli/commands/respond.d.ts +2 -2
  528. package/dist/cli/commands/respond.d.ts.map +1 -1
  529. package/dist/cli/commands/respond.js +40 -37
  530. package/dist/cli/commands/send.d.ts.map +1 -1
  531. package/dist/cli/commands/send.js +8 -4
  532. package/dist/cli/commands/task.d.ts +22 -0
  533. package/dist/cli/commands/task.d.ts.map +1 -1
  534. package/dist/cli/commands/task.js +26 -18
  535. package/dist/cli/commands/wait-instance.d.ts +9 -1
  536. package/dist/cli/commands/wait-instance.d.ts.map +1 -1
  537. package/dist/cli/commands/wait-instance.js +15 -0
  538. package/dist/cli/commands/wait-poll-state.d.ts +18 -0
  539. package/dist/cli/commands/wait-poll-state.d.ts.map +1 -1
  540. package/dist/cli/commands/wait-verify.d.ts +2 -1
  541. package/dist/cli/commands/wait-verify.d.ts.map +1 -1
  542. package/dist/cli/commands/wait-verify.js +5 -1
  543. package/dist/cli/commands/wait.d.ts.map +1 -1
  544. package/dist/cli/commands/wait.js +37 -13
  545. package/dist/cli/commands/whoami.d.ts.map +1 -1
  546. package/dist/cli/commands/whoami.js +3 -1
  547. package/dist/cli/docs/agent-operations.d.ts +1 -1
  548. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  549. package/dist/cli/docs/agent-operations.js +1 -0
  550. package/dist/cli/types/api-responses.d.ts +55 -1
  551. package/dist/cli/types/api-responses.d.ts.map +1 -1
  552. package/dist/cli/utils/api-client-deadline.d.ts +28 -0
  553. package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
  554. package/dist/cli/utils/api-client-deadline.js +46 -0
  555. package/dist/cli/utils/api-client-errors.d.ts +118 -0
  556. package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
  557. package/dist/cli/utils/api-client-errors.js +210 -0
  558. package/dist/cli/utils/api-client.d.ts +33 -109
  559. package/dist/cli/utils/api-client.d.ts.map +1 -1
  560. package/dist/cli/utils/api-client.js +202 -227
  561. package/dist/cli/utils/follow-up-command.d.ts +38 -0
  562. package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
  563. package/dist/cli/utils/follow-up-command.js +57 -0
  564. package/dist/cli/utils/reply-ledger.d.ts +1 -1
  565. package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
  566. package/dist/cli/utils/reply-ledger.js +7 -2
  567. package/dist/cli/utils/server-capabilities.d.ts +18 -0
  568. package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
  569. package/dist/cli/utils/server-capabilities.js +36 -3
  570. package/dist/cli/utils/session-target.d.ts +1 -1
  571. package/dist/cli/utils/session-target.d.ts.map +1 -1
  572. package/dist/cli/utils/session-target.js +3 -0
  573. package/dist/cli/utils/verify-runner.d.ts +7 -0
  574. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  575. package/dist/cli/utils/verify-runner.js +51 -15
  576. package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
  577. package/dist/lib/cli-tools/session-name.js +11 -3
  578. package/dist/lib/cli-tools/types.d.ts +6 -0
  579. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  580. package/dist/lib/session/send-attempt-types.d.ts +25 -0
  581. package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
  582. package/dist/lib/session/send-attempt-types.js +10 -1
  583. package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
  584. package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
  585. package/dist/lib/verification/session-kill-ledger.js +174 -0
  586. package/dist/server/locales/en/worktree.json +9 -0
  587. package/dist/server/locales/ja/worktree.json +9 -0
  588. package/dist/server/src/config/cli-tool-timing-config.js +1 -7
  589. package/dist/server/src/lib/auto-yes-poller.js +5 -1
  590. package/dist/server/src/lib/cli-tools/antigravity.js +5 -2
  591. package/dist/server/src/lib/cli-tools/base.js +39 -0
  592. package/dist/server/src/lib/cli-tools/claude.js +8 -2
  593. package/dist/server/src/lib/cli-tools/codex.js +7 -4
  594. package/dist/server/src/lib/cli-tools/command-code.js +14 -18
  595. package/dist/server/src/lib/cli-tools/copilot.js +159 -28
  596. package/dist/server/src/lib/cli-tools/gemini.js +10 -2
  597. package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
  598. package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
  599. package/dist/server/src/lib/cli-tools/opencode.js +162 -8
  600. package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
  601. package/dist/server/src/lib/cli-tools/session-name.js +11 -3
  602. package/dist/server/src/lib/cli-tools/submit-composer-read.js +57 -14
  603. package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
  604. package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
  605. package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
  606. package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
  607. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +143 -187
  608. package/dist/server/src/lib/cli-tools/vibe-local.js +91 -2
  609. package/dist/server/src/lib/db/chat-db.js +14 -1
  610. package/dist/server/src/lib/db/db-instance.js +114 -2
  611. package/dist/server/src/lib/db/db-migration-path.js +63 -2
  612. package/dist/server/src/lib/db/migrations/index.js +2 -0
  613. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  614. package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -0
  615. package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
  616. package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
  617. package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
  618. package/dist/server/src/lib/db/relay-bind-db.js +88 -167
  619. package/dist/server/src/lib/db/relay-db-base.js +20 -0
  620. package/dist/server/src/lib/db/relay-db-count.js +49 -0
  621. package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
  622. package/dist/server/src/lib/db/relay-db-hold.js +250 -0
  623. package/dist/server/src/lib/db/relay-db.js +33 -92
  624. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
  625. package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
  626. package/dist/server/src/lib/detection/tools/opencode/readiness.js +62 -0
  627. package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +70 -0
  628. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
  629. package/dist/server/src/lib/prompt-answer-errors.js +76 -2
  630. package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
  631. package/dist/server/src/lib/relay/relay-delivery.js +359 -79
  632. package/dist/server/src/lib/relay/relay-messages.js +13 -0
  633. package/dist/server/src/lib/relay/relay-system-line.js +28 -15
  634. package/dist/server/src/lib/relay/types.js +14 -2
  635. package/dist/server/src/lib/session/agent-event-state.js +4 -0
  636. package/dist/server/src/lib/session/agent-session-lifecycle.js +6 -1
  637. package/dist/server/src/lib/session/claude-session.js +26 -7
  638. package/dist/server/src/lib/session/current-output-builder.js +7 -3
  639. package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
  640. package/dist/server/src/lib/session/instance-input-lock.js +47 -2
  641. package/dist/server/src/lib/session/prompt-submit-receipt.js +224 -0
  642. package/dist/server/src/lib/session/prompt-waiting-guard.js +16 -3
  643. package/dist/server/src/lib/session/respond-target.js +82 -0
  644. package/dist/server/src/lib/session/send-attempt-state.js +177 -2
  645. package/dist/server/src/lib/session/send-attempt-types.js +10 -1
  646. package/dist/server/src/lib/session/send-user-message.js +80 -8
  647. package/dist/server/src/lib/session/session-launch-flight.js +243 -0
  648. package/dist/server/src/lib/session/session-starting-state.js +40 -4
  649. package/dist/server/src/lib/session/structured-prompt.js +17 -9
  650. package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
  651. package/dist/server/src/lib/session/worktree-session-reconcile.js +10 -0
  652. package/dist/server/src/lib/session-cleanup.js +32 -0
  653. package/dist/server/src/lib/session-key-sender.js +6 -28
  654. package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
  655. package/dist/server/src/lib/verification/env-snapshot.js +11 -2
  656. package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
  657. package/package.json +5 -1
  658. package/release-notes/0.49.2.json +49 -0
  659. package/release-notes/0.49.3.json +52 -0
  660. package/.next/server/chunks/2422.js +0 -1
  661. package/.next/server/chunks/3773.js +0 -1
  662. package/.next/server/chunks/5630.js +0 -1
  663. package/.next/server/chunks/5775.js +0 -1
  664. package/.next/server/chunks/6808.js +0 -4
  665. package/.next/server/chunks/7604.js +0 -2
  666. package/.next/server/chunks/9198.js +0 -144
  667. package/.next/static/chunks/3931-1a1abab16248f14d.js +0 -1
  668. package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
  669. package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
  670. package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
  671. package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
  672. package/.next/static/chunks/8606-ce17ffa77f39608e.js +0 -1
  673. package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
  674. package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
  675. package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
  676. package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
  677. package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
  678. package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
  679. package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
  680. package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
  681. package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
  682. package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
  683. package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
  684. package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
  685. package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
  686. package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
  687. package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
  688. package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
  689. package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
  690. package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
  691. package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
  692. package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
  693. package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
  694. package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
  695. package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
  696. package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
  697. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
  698. package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
  699. package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
  700. package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
  701. package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
  702. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
  703. package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
  704. package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
  705. package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
  706. package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
  707. package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
  708. package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
  709. package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
  710. package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
  711. package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
  712. package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
  713. package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
  714. package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
  715. package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
  716. package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
  717. package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
  718. package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
  719. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
  720. package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
  721. package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
  722. package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
  723. package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
  724. package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
  725. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
  726. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
  727. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
  728. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
  729. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
  730. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
  731. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
  732. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
  733. package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
  734. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
  735. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
  736. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
  737. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
  738. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
  739. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
  740. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
  741. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
  742. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
  743. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
  744. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
  745. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
  746. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
  747. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
  748. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
  749. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
  750. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
  751. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
  752. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
  753. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
  754. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
  755. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
  756. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
  757. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
  758. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
  759. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
  760. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
  761. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
  796. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
  797. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
  798. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
  799. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
  800. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
  801. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
  802. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
  803. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
  804. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
  805. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
  806. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
  807. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
  808. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
  809. package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
  810. package/.next/static/chunks/app/layout-8bfac4724277b47f.js +0 -1
  811. package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
  812. package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
  813. package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
  814. package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
  815. package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
  816. package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
  817. package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +0 -1
  818. /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_buildManifest.js +0 -0
  819. /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_ssgManifest.js +0 -0
@@ -66,6 +66,7 @@ const session_name_1 = require("../../lib/cli-tools/session-name");
66
66
  const types_1 = require("../../lib/cli-tools/types");
67
67
  const env_snapshot_1 = require("./env-snapshot");
68
68
  const verify_config_1 = require("./verify-config");
69
+ const session_kill_ledger_1 = require("./session-kill-ledger");
69
70
  // =============================================================================
70
71
  // Opt-in resolution
71
72
  // =============================================================================
@@ -538,6 +539,71 @@ function readDeadDemoVitestEntries(baseline) {
538
539
  return new Set();
539
540
  return new Set(recorded.filter((name) => typeof name === 'string' && demoVitestPid(name) !== null));
540
541
  }
542
+ // =============================================================================
543
+ // Sibling sessions stopped by someone else (Issue #3993)
544
+ // =============================================================================
545
+ /**
546
+ * Whether a CLI kill was asked for by someone known not to be this task's worker.
547
+ *
548
+ * Known means one of two facts the record carries:
549
+ * - the caller's cwd is a sibling directory of the task's worktree — the
550
+ * primary checkout the orchestrator runs from, or another worktree;
551
+ * - the caller ran inside the tmux session of another worktree.
552
+ * Either is enough unless the other says "this task": a cwd inside the task's
553
+ * worktree, or the task's own session (or one of its worktree's), is the worker
554
+ * whatever else was recorded. A cwd that is nowhere in particular (`/tmp`,
555
+ * `$HOME`, `/`) with no session says nothing and is the worker — the strict
556
+ * answer, because only a kill *not* the worker's excuses.
557
+ *
558
+ * Only `cli` lines name a caller. The route's `browser` (judged from
559
+ * `Sec-Fetch-Site` alone, which a UI-driving worker sends and a header can
560
+ * forge) and `http` lines and the server's `server` cleanup (run after a
561
+ * `commandmate sync` a worker can issue) never excuse.
562
+ */
563
+ function isKillByAnotherWorker(record, context, taskSession) {
564
+ if (record.origin !== 'cli')
565
+ return false;
566
+ const sessionOwner = record.callerSession === null
567
+ ? 'unattributed'
568
+ : taskSession && record.callerSession === taskSession
569
+ ? 'self'
570
+ : attributeSessionName(record.callerSession, context.worktreeId);
571
+ const cwdOwner = attributeAnchor(record.callerCwd, context.worktreePath);
572
+ if (sessionOwner === 'self' || cwdOwner === 'self')
573
+ return false;
574
+ return sessionOwner === 'other' || cwdOwner === 'other';
575
+ }
576
+ /**
577
+ * The recorded kill that explains a vanished `other` session, or undefined.
578
+ *
579
+ * Why this is the third line removals are excused on — the design note for
580
+ * #3993, which keeps #1624's rule rather than loosening it:
581
+ *
582
+ * - #1624 is a worker killing a sibling's session. The two snapshots cannot
583
+ * say who removed a session, so every same-repository removal was counted —
584
+ * including the orchestrator's own cleanup (`instances <wt> kill`, the
585
+ * first step of removing a worktree), which failed every parallel
586
+ * verification on 2026-10-29.
587
+ * - The session-kill ledger records each kill with the tmux sessions it
588
+ * stopped and who asked. A removal is `external` only when a line inside
589
+ * the task window names exactly that session and {@link isKillByAnotherWorker}
590
+ * holds for it.
591
+ * - Matched by the exact session name, never by worktree id: a worktree-wide
592
+ * match let one cleanup line excuse a worker's unrecorded kill of another
593
+ * instance of the same worktree hours earlier, and an id prefix
594
+ * (`commandmate-skills` / `commandmate-skills-3944`) reached into another
595
+ * worktree.
596
+ * - Everything else stays a violation: a worker's own kill, a caller that is
597
+ * nowhere in particular, the UI's and the server's kills, and any kill that
598
+ * went around CommandMate (`tmux kill-session`), which records nothing.
599
+ */
600
+ function findExternalKill(sessionName, kills, context, taskSession) {
601
+ return kills.find((record) => record.sessionNames.includes(sessionName) && isKillByAnotherWorker(record, context, taskSession));
602
+ }
603
+ /** A recorded kill of exactly this session that does not excuse it, for the report. */
604
+ function findRecordedKill(sessionName, kills) {
605
+ return kills.find((record) => record.sessionNames.includes(sessionName));
606
+ }
541
607
  function toChange(entry, owner) {
542
608
  return { key: entry.key, detail: entry.detail, owner };
543
609
  }
@@ -556,6 +622,7 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
556
622
  const deadDemoVitestEntries = readDeadDemoVitestEntries(baseline);
557
623
  const ignoredHomeEntries = new Set(options.ignoreHomeEntries ?? []);
558
624
  const resolvePidCwd = options.resolvePidCwd ?? exports.readLivePidCwd;
625
+ const sessionKills = (options.sessionKills ?? []).filter((record) => record.at >= baseline.capturedAt && record.at <= final.capturedAt);
559
626
  const probes = env_snapshot_1.ENV_PROBE_IDS.map((probeId) => {
560
627
  const before = baseline.probes[probeId];
561
628
  const after = final.probes[probeId];
@@ -570,6 +637,8 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
570
637
  removed: [],
571
638
  removedByOtherServer: [],
572
639
  removedByOtherRepository: [],
640
+ removedExternal: [],
641
+ removedKillNotExcused: [],
573
642
  removedStaleDemoVitest: [],
574
643
  ignoredByConfig: [],
575
644
  ignoredBuiltIn: [],
@@ -586,6 +655,8 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
586
655
  removed: [],
587
656
  removedByOtherServer: [],
588
657
  removedByOtherRepository: [],
658
+ removedExternal: [],
659
+ removedKillNotExcused: [],
589
660
  removedStaleDemoVitest: [],
590
661
  ignoredByConfig: [],
591
662
  ignoredBuiltIn: [],
@@ -631,6 +702,8 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
631
702
  const removed = [];
632
703
  const removedByOtherServer = [];
633
704
  const removedByOtherRepository = [];
705
+ const removedExternal = [];
706
+ const removedKillNotExcused = [];
634
707
  const removedStaleDemoVitest = [];
635
708
  for (const entry of before.entries) {
636
709
  if (afterKeys.has(entry.key))
@@ -652,6 +725,18 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
652
725
  otherRepositorySessions.has(entry.key)) {
653
726
  removedByOtherRepository.push(change);
654
727
  }
728
+ else if (probeId === 'tmux-sessions' && tmuxServerSurvived && change.owner === 'other') {
729
+ const killedBy = findExternalKill(entry.key, sessionKills, context, taskSession);
730
+ if (killedBy) {
731
+ removedExternal.push({ ...change, killedBy });
732
+ }
733
+ else {
734
+ removed.push(change);
735
+ const recorded = findRecordedKill(entry.key, sessionKills);
736
+ if (recorded)
737
+ removedKillNotExcused.push({ ...change, killedBy: recorded });
738
+ }
739
+ }
655
740
  else if (probeId === 'home-entries' && deadDemoVitestEntries.has(entry.key)) {
656
741
  removedStaleDemoVitest.push(change);
657
742
  }
@@ -669,6 +754,8 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
669
754
  removed,
670
755
  removedByOtherServer,
671
756
  removedByOtherRepository,
757
+ removedExternal,
758
+ removedKillNotExcused,
672
759
  removedStaleDemoVitest,
673
760
  ignoredByConfig,
674
761
  ignoredBuiltIn,
@@ -736,6 +823,35 @@ function formatRemovedByOtherServer(changes) {
736
823
  function formatRemovedByOtherRepository(changes) {
737
824
  return changes.map((change) => ` · - ${change.key} (ignored: a worktree of another repository on this server, recorded at task start)`);
738
825
  }
826
+ /** Sibling sessions stopped by someone else's recorded kill (#3993), one line each. */
827
+ function formatRemovedExternal(changes) {
828
+ return changes.map(({ key, killedBy }) => ` · - ${key} [external] (not counted: ${describeKill(killedBy)}, not this task)`);
829
+ }
830
+ /** `<api> for <worktree>[ instance <id>] at <ISO> from <caller>` of one recorded kill. */
831
+ function describeKill(killedBy) {
832
+ const target = killedBy.instanceId
833
+ ? `${killedBy.worktreeId} instance ${killedBy.instanceId}`
834
+ : killedBy.worktreeId;
835
+ const caller = killedBy.origin === 'browser'
836
+ ? 'the UI'
837
+ : killedBy.origin === 'server'
838
+ ? 'the server'
839
+ : killedBy.origin === 'http'
840
+ ? 'an HTTP request with no caller'
841
+ : killedBy.callerSession
842
+ ? `${killedBy.callerCwd ?? 'an unknown cwd'} in ${killedBy.callerSession}`
843
+ : (killedBy.callerCwd ?? 'an unknown cwd');
844
+ return `${killedBy.api} for ${target} at ${new Date(killedBy.at).toISOString()} from ${caller}`;
845
+ }
846
+ /** Counted removals whose kill was recorded but does not excuse them (#3993), one line each. */
847
+ function formatRemovedKillNotExcused(changes) {
848
+ return changes.map(({ key, killedBy }) => {
849
+ const why = killedBy.origin === 'browser' || killedBy.origin === 'server'
850
+ ? `a ${killedBy.origin} kill a worker can also cause`
851
+ : 'the caller is not known to be someone else';
852
+ return ` · ${key}: kill recorded but counted (${describeKill(killedBy)}; not excused: ${why})`;
853
+ });
854
+ }
739
855
  /** Removals excused as leftover demo-vitest directories (#3043), one line each. */
740
856
  function formatRemovedStaleDemoVitest(changes) {
741
857
  return changes.map((change) => ` · - ${change.key} (ignored: its pid was already dead at task start — a leftover swept by the demo-video tests)`);
@@ -788,6 +904,7 @@ function formatEnvCleanReport(diff) {
788
904
  lines.push(...formatTaskSessionChanges(probe.taskSessionAdded));
789
905
  lines.push(...formatRemovedByOtherServer(probe.removedByOtherServer));
790
906
  lines.push(...formatRemovedByOtherRepository(probe.removedByOtherRepository));
907
+ lines.push(...formatRemovedExternal(probe.removedExternal));
791
908
  lines.push(...formatRemovedStaleDemoVitest(probe.removedStaleDemoVitest));
792
909
  lines.push(...formatIgnoredByConfig(probe.ignoredByConfig));
793
910
  lines.push(...formatIgnoredBuiltIn(probe.ignoredBuiltIn));
@@ -797,9 +914,11 @@ function formatEnvCleanReport(diff) {
797
914
  lines.push(` ${probe.probeId} VIOLATED (${label}): +${probe.added.length} -${probe.removed.length}`);
798
915
  lines.push(...formatChanges('+', probe.added));
799
916
  lines.push(...formatChanges('-', probe.removed));
917
+ lines.push(...formatRemovedKillNotExcused(probe.removedKillNotExcused));
800
918
  lines.push(...formatTaskSessionChanges(probe.taskSessionAdded));
801
919
  lines.push(...formatRemovedByOtherServer(probe.removedByOtherServer));
802
920
  lines.push(...formatRemovedByOtherRepository(probe.removedByOtherRepository));
921
+ lines.push(...formatRemovedExternal(probe.removedExternal));
803
922
  lines.push(...formatRemovedStaleDemoVitest(probe.removedStaleDemoVitest));
804
923
  lines.push(...formatIgnoredByConfig(probe.ignoredByConfig));
805
924
  lines.push(...formatIgnoredBuiltIn(probe.ignoredBuiltIn));
@@ -862,9 +981,19 @@ async function evaluateEnvClean(input) {
862
981
  return done('error', `${verify_config_1.ENV_CLEAN_GATE_ID}: UNKNOWN — the current snapshot could not be taken: ` +
863
982
  `${error instanceof Error ? error.message : String(error)}`, null);
864
983
  }
984
+ const readSessionKills = input.readSessionKills ?? ((since, until) => (0, session_kill_ledger_1.readSessionKillRecords)(since, until));
985
+ let sessionKills;
986
+ try {
987
+ sessionKills = readSessionKills(input.baseline.capturedAt, final.capturedAt);
988
+ }
989
+ catch {
990
+ // An unreadable ledger excuses nothing; it is not a reason to withhold a verdict.
991
+ sessionKills = [];
992
+ }
865
993
  const diff = diffEnvSnapshots(input.baseline, final, input, {
866
994
  ignoreHomeEntries: input.ignoreHomeEntries,
867
995
  resolvePidCwd: input.resolvePidCwd,
996
+ sessionKills,
868
997
  });
869
998
  const header = `${verify_config_1.ENV_CLEAN_GATE_ID}: baseline=${new Date(input.baseline.capturedAt).toISOString()} ` +
870
999
  `status=${diff.status} task-session=${describeTaskSession(diff.taskSession)}`;
@@ -40,6 +40,7 @@ const path_1 = require("path");
40
40
  const env_1 = require("../../lib/env");
41
41
  const logger_1 = require("../../lib/logger");
42
42
  const machine_lock_1 = require("./machine-lock");
43
+ const session_kill_ledger_1 = require("./session-kill-ledger");
43
44
  const worktree_index_1 = require("./worktree-index");
44
45
  const logger = (0, logger_1.createLogger)('lib/verification/env-snapshot');
45
46
  /** Bumped only when a stored snapshot stops being readable by this module. */
@@ -329,6 +330,8 @@ exports.MCBD_SESSION_PREFIX = 'mcbd-';
329
330
  * is none of a delegation's business, so watching them would only manufacture
330
331
  * violations. Sessions of *other* worktrees stay in the set on purpose — killing
331
332
  * a sibling worker's session is the #1624 failure this probe is here to catch.
333
+ * A sibling session stopped by someone else through `instances <wt> kill` is set
334
+ * apart at diff time from the session-kill ledger (Issue #3993), not here.
332
335
  *
333
336
  * "No server running" is an answer (zero sessions), which is why it is not
334
337
  * treated as a probe failure. `tmux` being absent, or hanging, is not.
@@ -370,14 +373,20 @@ exports.ENV_SNAPSHOT_DIR_NAME = 'env-snapshots';
370
373
  * `~/.commandmate` (Issue #1771): the gate mutex locks and the worktree index
371
374
  * registry. Neither is a side effect of the delegation — the first mutexed gate
372
375
  * on a machine creates them — so counting them would report the runner's own
373
- * bookkeeping as pollution the agent left behind.
376
+ * bookkeeping as pollution the agent left behind. The session-kill ledger
377
+ * (Issue #3993) is the same kind of bookkeeping: the first recorded
378
+ * `instances <wt> kill` on a machine creates it.
374
379
  *
375
380
  * Scoped to the `~/.commandmate` probe rather than added to
376
381
  * {@link isIgnoredEntry}: a `~/locks` directory in `$HOME` is not ours, and
377
382
  * blanket-ignoring the name would put a hole in the probe that exists to catch
378
383
  * exactly that.
379
384
  */
380
- const COMMANDMATE_RUNTIME_ENTRY_NAMES = [machine_lock_1.MACHINE_LOCK_DIR_NAME, worktree_index_1.WORKTREE_INDEX_DIR_NAME];
385
+ const COMMANDMATE_RUNTIME_ENTRY_NAMES = [
386
+ machine_lock_1.MACHINE_LOCK_DIR_NAME,
387
+ worktree_index_1.WORKTREE_INDEX_DIR_NAME,
388
+ session_kill_ledger_1.SESSION_KILL_LEDGER_DIR_NAME,
389
+ ];
381
390
  function isIgnoredEntry(name) {
382
391
  if (name === exports.ENV_SNAPSHOT_DIR_NAME)
383
392
  return true;
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ /**
3
+ * Record of `mcbd-*` sessions stopped through CommandMate's kill (Issue #3993).
4
+ *
5
+ * The `env-clean` gate counts every vanished session of a sibling worktree as a
6
+ * violation, because a worker killing its neighbour is the #1624 failure. The
7
+ * orchestrator stops sibling sessions too — `commandmate instances <wt> kill`
8
+ * when it cleans a worktree up (worktree-cleanup Phase 3), the UI's kill
9
+ * button, the server's cleanup after sync or a repository removal — and the two
10
+ * snapshots cannot tell that apart from a worker's kill: on 2026-10-29 four
11
+ * verification runs of #3957 failed on `- mcbd-…-<another worktree> [other]`
12
+ * for a cleanup nobody in the worker's transcript had run.
13
+ *
14
+ * This ledger is the missing fact: one line per kill, naming the API, the
15
+ * tmux sessions it actually stopped, the worktree it was for and who asked
16
+ * (the caller's working directory and tmux session). The gate excuses as little
17
+ * as it can prove is not the worker's (`env-clean-gate.ts`, `findExternalKill`):
18
+ * a vanished sibling session is `external` only when a line inside the task's
19
+ * window names that exact session, was written by the CLI, and its caller is
20
+ * known to be someone else — a cwd in a sibling directory of the task's
21
+ * worktree (the primary checkout, another worktree) or a tmux session of
22
+ * another worktree. Everything else stays a violation, exactly as before:
23
+ * a worker's own kill, a caller that is nowhere in particular (`/tmp`, `$HOME`),
24
+ * the route's and the server's lines (a worker can reach the UI and trigger
25
+ * sync too), and any kill that bypassed CommandMate (`tmux kill-session`), which
26
+ * records nothing. Those lines are still shown next to the violation.
27
+ *
28
+ * Written by the CLI (with its caller), by the kill-session route and by
29
+ * `session-cleanup.ts`. A CLI kill is therefore recorded twice — the CLI's line
30
+ * and the route's `http` line — which changes no verdict: only the CLI's line
31
+ * can excuse anything.
32
+ *
33
+ * Machine-wide, like the gate mutex (`machine-lock.ts`): the CLI and the server
34
+ * write it and the server's gate reads it, so the path is derived from `$HOME` alone —
35
+ * `~/.commandmate/session-kills/<UTC date>.jsonl` — with an override for tests.
36
+ * The `commandmate-entries` probe ignores the directory, like `locks`.
37
+ *
38
+ * Node built-ins only: the CLI imports this module.
39
+ *
40
+ * @module lib/verification/session-kill-ledger
41
+ */
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.SESSION_KILL_LEDGER_RETENTION_MS = exports.SESSION_KILL_LEDGER_VERSION = exports.SESSION_KILL_LEDGER_ROOT_ENV = exports.SESSION_KILL_LEDGER_DIR_NAME = void 0;
44
+ exports.defaultSessionKillLedgerRoot = defaultSessionKillLedgerRoot;
45
+ exports.resolveSessionKillLedgerRoot = resolveSessionKillLedgerRoot;
46
+ exports.appendSessionKillRecord = appendSessionKillRecord;
47
+ exports.isSessionKillRecord = isSessionKillRecord;
48
+ exports.readSessionKillRecords = readSessionKillRecords;
49
+ const fs_1 = require("fs");
50
+ const os_1 = require("os");
51
+ const path_1 = require("path");
52
+ /** Directory under `~/.commandmate`; exported for the `commandmate-entries` probe. */
53
+ exports.SESSION_KILL_LEDGER_DIR_NAME = 'session-kills';
54
+ /** Overrides the ledger directory (tests, isolated environments). */
55
+ exports.SESSION_KILL_LEDGER_ROOT_ENV = 'CM_SESSION_KILL_LEDGER_ROOT';
56
+ /** Bumped only when a line stops being readable by this module. */
57
+ exports.SESSION_KILL_LEDGER_VERSION = 1;
58
+ /** Day files older than this are removed when a new line is written (same as env snapshots). */
59
+ exports.SESSION_KILL_LEDGER_RETENTION_MS = 30 * 24 * 60 * 60 * 1000;
60
+ const DAY_MS = 24 * 60 * 60 * 1000;
61
+ const DAY_FILE_PATTERN = /^(\d{4}-\d{2}-\d{2})\.jsonl$/;
62
+ const SESSION_KILL_APIS = ['kill-session', 'session-cleanup'];
63
+ const SESSION_KILL_ORIGINS = ['cli', 'browser', 'http', 'server'];
64
+ function defaultSessionKillLedgerRoot() {
65
+ return (0, path_1.join)((0, os_1.homedir)(), '.commandmate', exports.SESSION_KILL_LEDGER_DIR_NAME);
66
+ }
67
+ function resolveSessionKillLedgerRoot(env = process.env) {
68
+ const override = env[exports.SESSION_KILL_LEDGER_ROOT_ENV];
69
+ return override && override.trim() !== '' ? override : defaultSessionKillLedgerRoot();
70
+ }
71
+ function dayOf(epochMs) {
72
+ return new Date(epochMs).toISOString().slice(0, 10);
73
+ }
74
+ function pruneOldDays(root, now) {
75
+ const oldest = dayOf(now - exports.SESSION_KILL_LEDGER_RETENTION_MS);
76
+ let names;
77
+ try {
78
+ names = (0, fs_1.readdirSync)(root);
79
+ }
80
+ catch {
81
+ return;
82
+ }
83
+ for (const name of names) {
84
+ const day = DAY_FILE_PATTERN.exec(name)?.[1];
85
+ if (day === undefined || day >= oldest)
86
+ continue;
87
+ try {
88
+ (0, fs_1.rmSync)((0, path_1.join)(root, name), { force: true });
89
+ }
90
+ catch {
91
+ // A day file that cannot be removed is disk use, not a reason to fail a kill.
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Append one kill. Never throws: the kill already happened, and failing the
97
+ * command over its bookkeeping would only hide that.
98
+ *
99
+ * @returns true when the line was written
100
+ */
101
+ function appendSessionKillRecord(record, root = resolveSessionKillLedgerRoot()) {
102
+ try {
103
+ (0, fs_1.mkdirSync)(root, { recursive: true, mode: 0o700 });
104
+ // One short line per append; O_APPEND keeps concurrent writers' lines whole.
105
+ (0, fs_1.appendFileSync)((0, path_1.join)(root, `${dayOf(record.at)}.jsonl`), `${JSON.stringify(record)}\n`, {
106
+ encoding: 'utf8',
107
+ mode: 0o600,
108
+ });
109
+ pruneOldDays(root, record.at);
110
+ return true;
111
+ }
112
+ catch {
113
+ return false;
114
+ }
115
+ }
116
+ function isNullableString(value) {
117
+ return value === null || typeof value === 'string';
118
+ }
119
+ /** Whether a parsed line is a record this module can use; anything else is skipped. */
120
+ function isSessionKillRecord(value) {
121
+ if (typeof value !== 'object' || value === null)
122
+ return false;
123
+ const record = value;
124
+ return (record.version === exports.SESSION_KILL_LEDGER_VERSION &&
125
+ typeof record.at === 'number' &&
126
+ typeof record.api === 'string' &&
127
+ SESSION_KILL_APIS.includes(record.api) &&
128
+ typeof record.origin === 'string' &&
129
+ SESSION_KILL_ORIGINS.includes(record.origin) &&
130
+ typeof record.worktreeId === 'string' &&
131
+ record.worktreeId !== '' &&
132
+ isNullableString(record.instanceId) &&
133
+ Array.isArray(record.sessionNames) &&
134
+ record.sessionNames.every((name) => typeof name === 'string') &&
135
+ isNullableString(record.callerCwd) &&
136
+ isNullableString(record.callerSession));
137
+ }
138
+ /**
139
+ * The kills recorded in `[since, until]` (epoch ms, inclusive).
140
+ *
141
+ * A missing directory, an unreadable day file and a malformed line all read as
142
+ * "no record", which only ever excuses less.
143
+ */
144
+ function readSessionKillRecords(since, until, root = resolveSessionKillLedgerRoot()) {
145
+ if (!(since <= until))
146
+ return [];
147
+ // Nothing older than the retention survives, so a stale baseline costs no extra reads.
148
+ since = Math.max(since, until - exports.SESSION_KILL_LEDGER_RETENTION_MS - DAY_MS);
149
+ const records = [];
150
+ for (let day = Date.parse(`${dayOf(since)}T00:00:00.000Z`); day <= until; day += DAY_MS) {
151
+ let text;
152
+ try {
153
+ text = (0, fs_1.readFileSync)((0, path_1.join)(root, `${dayOf(day)}.jsonl`), 'utf8');
154
+ }
155
+ catch {
156
+ continue;
157
+ }
158
+ for (const line of text.split('\n')) {
159
+ if (line.trim() === '')
160
+ continue;
161
+ let parsed;
162
+ try {
163
+ parsed = JSON.parse(line);
164
+ }
165
+ catch {
166
+ continue;
167
+ }
168
+ if (isSessionKillRecord(parsed) && parsed.at >= since && parsed.at <= until) {
169
+ records.push(parsed);
170
+ }
171
+ }
172
+ }
173
+ return records;
174
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.49.1",
3
+ "version": "0.49.3",
4
4
  "description": "No long blocks of time? Run an AI team from your phone. Git worktree sessions, task contracts and verification gates for Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity and Command Code.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -113,8 +113,10 @@
113
113
  "rehype-sanitize": "^6.0.0",
114
114
  "rehype-slug": "^6.0.0",
115
115
  "remark-gfm": "^4.0.1",
116
+ "remark-parse": "^11.0.0",
116
117
  "safe-regex2": "^5.0.0",
117
118
  "tailwind-merge": "^3.6.0",
119
+ "unified": "^11.0.5",
118
120
  "uuid": "^13.0.0",
119
121
  "web-push": "^3.6.7",
120
122
  "ws": "^8.18.3",
@@ -131,7 +133,9 @@
131
133
  "@testing-library/react": "^16.3.2",
132
134
  "@types/better-sqlite3": "^7.6.13",
133
135
  "@types/eslint": "^8.56.12",
136
+ "@types/hast": "^3.0.4",
134
137
  "@types/http-proxy": "^1.17.17",
138
+ "@types/mdast": "^4.0.4",
135
139
  "@types/node": "20.19.35",
136
140
  "@types/react": "^19.2.17",
137
141
  "@types/react-dom": "^19.2.3",
@@ -0,0 +1,49 @@
1
+ {
2
+ "version": "0.49.2",
3
+ "date": "2026-10-31",
4
+ "highlight": {
5
+ "ja": "起動したばかりの Claude への最初のメッセージが、届いていないのに「送信済み」と表示される問題を直しました。送信や回答が失敗したときも、キーが届いたか・送り直してよいかを正しく伝えるようにしました。",
6
+ "en": "Fixed the first message to a just-started Claude being reported as sent when it never arrived. When a send or an answer fails, you are now told whether the keys reached the agent and whether it is safe to send again."
7
+ },
8
+ "added": [],
9
+ "improved": [
10
+ {
11
+ "ja": "Review の承認一覧やリポジトリの帯・パンくずから開いたときも、応答を待っているエージェントが選ばれた状態で開くようになりました。",
12
+ "en": "Opening a worktree from the Review approval list, the repository strip or the breadcrumb now also selects the agent that is waiting for you."
13
+ },
14
+ {
15
+ "ja": "CLI の wait・ask・verify の --timeout が、サーバーが応答しないときも含めてコマンド全体の期限として効くようになりました。",
16
+ "en": "The --timeout of wait, ask and verify in the CLI now limits the whole command, including when the server does not respond."
17
+ },
18
+ {
19
+ "ja": "CLI の respond などが出す次の操作の案内に、対象のエージェントの指定が含まれるようになりました。",
20
+ "en": "The follow-up hints printed by respond and other CLI commands now include the agent they refer to."
21
+ }
22
+ ],
23
+ "fixed": [
24
+ {
25
+ "ja": "起動したばかりの Claude への最初のメッセージが届かず、次の送信が失敗することがある問題を直しました。",
26
+ "en": "Fixed the first message to a just-started Claude sometimes not arriving and making the next send fail."
27
+ },
28
+ {
29
+ "ja": "同じエージェントを同時に起動しようとしたとき、起動が重なって入力が混ざることがある問題を直しました。",
30
+ "en": "Fixed overlapping launches of the same agent sometimes mixing up typed input."
31
+ },
32
+ {
33
+ "ja": "回答の途中で止まったとき、一部のキーが届いた可能性があることを知らせるようにしました(スマホと PC の両方)。",
34
+ "en": "When an answer stops partway, you are now told that some keys may have reached the agent, on both phone and desktop."
35
+ },
36
+ {
37
+ "ja": "スマホで開き直すと、選んでいたエージェントが先頭のエージェントに戻ってしまう問題を直しました。",
38
+ "en": "Fixed the selected agent switching back to the first one when a worktree was reopened on the phone."
39
+ },
40
+ {
41
+ "ja": "送信が失敗したとき、送り直してよいかが CLI に伝わらないことがある問題を直しました。",
42
+ "en": "Fixed the CLI sometimes not being told whether a failed send is safe to retry."
43
+ },
44
+ {
45
+ "ja": "古い場所のデータベースを移すとき、書き込み途中の更新が失われることがある問題を直しました。",
46
+ "en": "Fixed recent changes sometimes being lost when a database was moved from its old location."
47
+ }
48
+ ]
49
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "version": "0.49.3",
3
+ "date": "2026-11-02",
4
+ "highlight": {
5
+ "ja": "エージェント間の依頼の返答が届いたか分からないとき、自動で再送せず保留として知らせるようになりました。画面を確かめてから、CLI で確認・再試行・破棄を選べます。",
6
+ "en": "When it is unknown whether a reply between agents arrived, it is now held and reported instead of being resent. After checking the screen, you can confirm, retry or discard it from the CLI."
7
+ },
8
+ "added": [],
9
+ "improved": [],
10
+ "fixed": [
11
+ {
12
+ "ja": "届いたか分からない依頼の返答を、自動で再送して二重に届けることがある問題を直しました。",
13
+ "en": "Fixed replies between agents sometimes arriving twice when it was unknown whether the first one had arrived."
14
+ },
15
+ {
16
+ "ja": "保留になった配送を、commandmate relays resolve で確認・再試行・破棄できるようにしました。",
17
+ "en": "Held deliveries can now be confirmed, retried or discarded with commandmate relays resolve."
18
+ },
19
+ {
20
+ "ja": "保留になった配送が、PC とスマホの画面、依頼元の履歴、CLI の集計に出るようにしました。",
21
+ "en": "Held deliveries now appear on the PC and phone screens, in the requester's history and in the CLI counts."
22
+ },
23
+ {
24
+ "ja": "Copilot・Vibe Local・OpenCode で、入力欄の準備ができる前に文字を打つことがある問題を直しました。",
25
+ "en": "Fixed Copilot, Vibe Local and OpenCode sometimes receiving typed text before their input box was ready."
26
+ },
27
+ {
28
+ "ja": "OpenCode と Vibe Local で、一瞬のダイアログの表示を理由に送信を断ることがある問題を直しました。",
29
+ "en": "Fixed OpenCode and Vibe Local sometimes refusing a send because of a dialog that appeared only for a moment."
30
+ },
31
+ {
32
+ "ja": "OpenCode でサイドバーを開いていると、届いた送信が失敗と報告されることがある問題を直しました。",
33
+ "en": "Fixed a delivered OpenCode message sometimes being reported as failed while the sidebar was open."
34
+ },
35
+ {
36
+ "ja": "Copilot でダイアログが出ているときに、待ち時間の上限まで待ってから送信を断っていた問題を直しました。",
37
+ "en": "Fixed Copilot waiting out the whole time limit before refusing a send while a dialog was open."
38
+ },
39
+ {
40
+ "ja": "起動した直後の Claude への最初の送信で、届いているのに失敗と報告されることがある問題を直しました。",
41
+ "en": "Fixed the first message to a just-started Claude sometimes being reported as failed after it had arrived."
42
+ },
43
+ {
44
+ "ja": "prompt --json の直近の送信の結果が、古い送信の結果で上書きされることがある問題を直しました。",
45
+ "en": "Fixed the latest send result in prompt --json sometimes being overwritten by an older send."
46
+ },
47
+ {
48
+ "ja": "ダイアログへの回答の案内が、待っているセッションへ確実に届く宛先を示すようにしました。",
49
+ "en": "The hints for answering a dialog now always name the session that is actually waiting."
50
+ }
51
+ ]
52
+ }
@@ -1 +0,0 @@
1
- "use strict";exports.id=2422,exports.ids=[2422],exports.modules={682:(a,b,c)=>{c.d(b,{T:()=>f,c:()=>h});var d=c(23479);let e=/^[^\S\n]*[│┃]?[^\S\n]*([❯›●>])?[^\S\n]*(\d{1,2})[.)][^\S\n]+(\S.*?)[^\S\n]*[│┃]?$/;function f(a){return g(a)}function g(a){let b=e.exec(a);if(!b)return null;let c=Number(b[2]);return!Number.isInteger(c)||c<1?null:{glyph:b[1],number:c,label:b[3].trim()}}function h(a,b,c=8){let e=Math.min(b,a.length)-1,f=0,i=[],j=null;for(;e>=0&&f<=c;){let b=a[e];if(""===b.trim()){e--;continue}if(f++,j=g(b))break;i.unshift(b.trim()),e--}if(!j)return null;let k=e,l=[j],m=[!1],n=j.number-1,o=e-1,p=1,q=[];for(;n>=1&&o>=0&&p<=60;){let b=a[o];if(p++,""===b.trim()){o--;continue}let c=g(b);if(c&&c.number===n){l.unshift({...c,label:[c.label,...q].join(" ").trim()}),m.unshift(q.length>0),q=[],n--,o--;continue}if(c)break;q.unshift(b.trim()),o--}if(0!==n||l.length<2)return null;let r=l.findIndex(a=>void 0!==a.glyph);return{options:l.map(a=>a.label),selectedIndex:r,selectedGlyph:r<0?null:l[r].glyph??null,firstRow:o+1,lastRow:k,footer:i.join("\n"),optionRecommendations:l.map((a,b)=>m[b]?"unknown":(0,d.e3)(a.label))}}},1804:(a,b,c)=>{c.d(b,{BG:()=>g,MJ:()=>f,_:()=>l,hB:()=>k,iE:()=>d,jP:()=>e,ji:()=>i,u3:()=>j,yh:()=>h});let d={version:"2.1.240",capturedAt:"2026-08-23",paneGeometry:"200x1000"},e={version:"0.157.1",capturedAt:"2026-09-27",paneGeometry:"200x1000"},f={version:"1.0.82",capturedAt:"2026-09-04",paneGeometry:"200x1000"},g={version:"1.18.22",capturedAt:"2026-08-26",paneGeometry:"80x200"},h={version:"1.1.27",capturedAt:"2026-09-06",paneGeometry:"200x1000"},i={version:"1.54.1",capturedAt:"2026-09-20",paneGeometry:"200x1000"},j={version:"2.0.18",capturedAt:"2026-09-28",paneGeometry:"80x200"},k={version:"unmeasured",capturedAt:"never",paneGeometry:"unmeasured"},l={claude:d,codex:e,copilot:f,opencode:g,antigravity:h,"command-code":i,"opencode-v2":j,gemini:k,"vibe-local":k}},23479:(a,b,c)=>{c.d(b,{GP:()=>k,JF:()=>j,e3:()=>e,iU:()=>g});let d=/(?:^|[^A-Za-z0-9])(?:\(Recommended\)|(推奨)|\(推奨\))$/;function e(a){return d.test(a.trim())}let f=new Set(["(Recommended)","(推奨)","(推奨)"]);function g(a){return f.has(a.trim())}let h=/^\p{M}$/u;function i(a){let b=0;for(let c of a){let a=c.codePointAt(0)??0;a>=32&&a<127?b+=1:h.test(c)||(b+=2)}return b}function j(a){let b=0;for(let c of a){let a=0;for(let b of c.trimEnd())h.test(b)||(a+=1);a>b&&(b=a)}return b}function k(a,b,c){let d=b.trim().split(/\s+/,1)[0]??"";return""!==d&&i(a.trimEnd())+1+i(d)<=c}},27789:(a,b,c)=>{c.d(b,{$I:()=>C,DR:()=>m,Dd:()=>B,E6:()=>y,Jn:()=>A,Mt:()=>g,Nc:()=>L,Qh:()=>u,RK:()=>s,UO:()=>H,X3:()=>z,Y7:()=>l,Zu:()=>J,aW:()=>G,bh:()=>E,gm:()=>n,ir:()=>D,mk:()=>i,pn:()=>F,sB:()=>p,zZ:()=>r});var d=c(51297),e=c(46423),f=c(65912);let g=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,h=/esc to interrupt/,i=/^[•◦]\s.*\((?:\d+h\s*)?(?:\d+m\s*)?\d+s\s*•\s*esc to interrupt\)/m,j=/^■ Conversation interrupted\b/,k=/^\d+ background terminals? running\b/;function l(a){let b=s(a);if(b<0)return!1;for(let c=b-1;c>=0;c--){let b=a[c].trim();if(!(""===b||k.test(b)))return j.test(b)}return!1}function m(a,b){let c=(0,d.aJ)(a.slice(Math.max(0,a.length-b)).join("\n"));if(h.test(c))return!0;let f=-1;for(let b=a.length-1;b>=Math.max(0,a.length-8);b--)if(n.test((0,d.aJ)(a[b]))){f=b;break}if(f<0)return g.test(c);let i=Math.max(0,f-e.$+1),j=(0,d.aJ)(a.slice(i,f+1).join("\n"));return g.test(j)}let n=/^›\s*/m,o=/Do you trust|Trust this folder\?/,p=RegExp(`Skip until next version|${o.source}|Press enter to continue|^\\s*›\\s*\\d+\\.\\s`,"m"),q=/^\s*›(?!\s*\d+\.)/;function r(a){let b=a.split("\n"),c=-1,d=-1;for(let a=0;a<b.length;a++){let e=b[a];if(p.test(e)){c=a;continue}q.test(e)&&(d=a)}return d>=0&&d>c}function s(a){for(let b=a.length-1;b>=0;b--)if(q.test(a[b]))return b;return -1}function t(a){if("string"!=typeof a){let b=a.liveRegion;return"codex"===b.tool?"composer"===b.anchor?a.contentLines.slice((b.composerEndRow??b.startRow)+1):a.contentLines:t(a.clean)}let b=a.split("\n");return b.slice(s(b)+1)}function u(a){let b=t(a).join("\n");return""===b?null:b.includes("Skip until next version")||b.includes("Update")&&b.includes("Skip")?"update":o.test(b)?"trust":b.includes("Press enter to continue")?"press-enter":null}let v=/press\s+t\s+to\s+trust\s+all\s*;/i,w=/press\s+t\s+to\s+trust\s*;/i,x=[/skip until next version/i,/^\s*[›❯]?\s*\d+\.\s*Update now/im];function y(a){let b=t(a),c=[];for(let a=b.length-1;a>=0&&c.length<12;a--)""!==b[a].trim()&&c.unshift(b[a]);if(0===c.length)return null;let d=c.join("\n");for(let a=c.length-1;a>=0;a--){let b=c[a];if(v.test(b))return"hooks-list";if(w.test(b))return"hooks-detail";if(B.test(b))break;if(x.some(a=>a.test(b)))return"update";if(o.test(b))return"trust";if(b.includes("Continue without trusting")&&d.includes("Hooks need review"))return"hooks-review"}return null}let z=/^─.*Worked for.*─+$/m,A=/press\s+enter\s+to\s+(?:confirm|select)/i,B=/esc\s+to\s+cancel/i,C=/^enter\s+to\s+submit\s*\|\s*esc\s+to\s+cancel$/im,D=/^enter\s+select\s*·\s*esc\s+back$/im,E=/^enter\s+default\s*·\s*s\s+session\s*·\s*esc\s+back$/im,F=/(?:↑\/↓|pgup\/pgdn|home\/end)\s+to\s+(?:scroll|page|jump)|to\s+edit\s+(?:prev|next|message)/i,G=/^\s*\S.*·\s*~?\/\S*\s*$/,H=/^\s*\S[^·]*·\s*~?\/\S*(?:\s*·[^\n]*|[^\S\n]{2,}\S[^\n]*)$/,I=/^›(\s|$)/;function J(a){let b=a.length-1;for(;b>=0&&""===(0,d.aJ)(a[b]).trim();)b--;if(b<0)return -1;let c=-1;for(let e=b;e>=Math.max(0,b-12);e--)if(I.test((0,d.aJ)(a[e]))){c=e;break}if(c<0)return -1;let e=(0,f.kT)(a[c]);if("composer"===e)return c;if(null!==e)return -1;for(let e=c+1;e<=b;e++)if(G.test((0,d.aJ)(a[e])))return c;return -1}let K=/^›\s+\S/;function L(a,b,c,e){let g=e;for(let e=Math.min(b,a.length)-1;e>=Math.max(0,b-c);e--){if(!K.test((0,d.aJ)(a[e])))continue;let b=(0,f.kT)(a[e]);if("option"!==b){if("transcript-echo"===b)return e;if(!g){g=!0;continue}return e}}return -1}},42422:(a,b,c)=>{c.d(b,{OM:()=>M.OM,Ly:()=>M.Ly,lE:()=>M.lE,kT:()=>M.kT,kn:()=>M.kn,HR:()=>M.HR,d0:()=>M.d0,VF:()=>M.VF,aU:()=>G.aU,l8:()=>G.l8,hx:()=>G.hx,XY:()=>G.XY,F0:()=>G.F0,Fw:()=>G.Fw,Dd:()=>h.Dd,sB:()=>h.sB,bh:()=>h.bh,$I:()=>h.$I,pn:()=>h.pn,ir:()=>h.ir,gm:()=>h.gm,Jn:()=>h.Jn,aW:()=>h.aW,Mt:()=>h.Mt,UO:()=>h.UO,jk:()=>Q,WK:()=>O,k0:()=>P,E0:()=>L.E0,JN:()=>L.JN,rX:()=>L.Ki,oD:()=>L.oD,Ub:()=>L.Ub,Du:()=>L.Du,V:()=>L.V,A:()=>L.A,J7:()=>L.J7,rb:()=>L.rb,Jr:()=>L.Jr,Fg:()=>L.Fg,y:()=>L.y,tJ:()=>L.tJ,wN:()=>H,s0:()=>I,Cc:()=>t,vU:()=>j,Ty:()=>o,kD:()=>p,uA:()=>k,sy:()=>i,Md:()=>m,LO:()=>y,sx:()=>A,a2:()=>l,$t:()=>n,c7:()=>C,wK:()=>B,xL:()=>D,fW:()=>f.fW,Dj:()=>J,b2:()=>K,KO:()=>_,ut:()=>Z,GT:()=>G.GT,Zu:()=>h.Zu,RK:()=>h.RK,Nc:()=>h.Nc,I$:()=>R,wv:()=>L.wv,x7:()=>u,mu:()=>w,M4:()=>v,dF:()=>U,_X:()=>$,Qh:()=>h.Qh,E6:()=>h.E6,bH:()=>M.bH,lX:()=>G.lX,zZ:()=>h.zZ,DR:()=>h.DR,Rx:()=>L.Rx,gT:()=>L.gT,Ok:()=>E,U1:()=>e.U,dx:()=>M.dx,Wn:()=>L.Wn,lQ:()=>G.lQ,aJ:()=>N.aJ,_A:()=>g._,pV:()=>x,c:()=>aa});var d=c(72626),e=c(56993),f=c(74099),g=c(47165),h=c(27789);let i=/Ask anything(?:\.\.\.|\u2026)/,j=/^[^\S\n]*[\u2502\u2503][^\S\n]*Ask anything(?:\.\.\.|\u2026)/m,k=/tab agents\s+ctrl\+p commands/,l=/Thinking:/,m=/\u25A3\s+\w+\s+·\s+\S+(?:\s+·\s+(?:[\d]+h\s*)?(?:[\d]+m\s*)?[\d.]+s)?/,n=/\u25A3\s+\w+\s+·\s+[^·\n]+·\s+(?:\d+h\s*)?(?:\d+m\s*)?[\d.]+s/,o=/^[^\S\n]*[\u2502\u2503][^\S\n]*Allow once[^\S\n]+Allow always[^\S\n]+Reject\b/m,p=/esc (?:again to )?interrupt/,q=/^[^\S\n]*╹▀{4,}/,r=/^[^\S\n]*[│┃]/,s=/^[^\S\n]*[│┃][^\S\n]*\S/,t=/\d+(?:\.\d+)?[KMGT]?\s+\(\d+%\)\s+·\s+\$/;function u(a){let b=a.length-1;for(;b>=0&&""===a[b].trim();)b--;if(b<0)return -1;let c=b=>{let c=b;for(;c-1>=0&&r.test(a[c-1]);)c--;return c};for(let d=b;d>=0;d--)if(q.test(a[d]))return c(d);return r.test(a[b])?c(b):-1}function v(a,b){let c=b>=0?b:a.length;for(let b=c-1;b>=0;b--){if(!s.test(a[b]))continue;let d=b;for(;d+1<c&&r.test(a[d+1]);)d++;return d}return -1}function w(a){let b=-1;for(let c=a.length-1;c>=0;c--)if(q.test(a[c])){b=c;break}if(b<0)return null;let c=b;for(;c-1>=0&&r.test(a[c-1]);)c--;let d=b-1;return d<c?null:a.slice(c,d)}function x(a){return a.replace(r,"").trim()}let y=/^[^\S\n]*(?:Select[^\S\n]+(?:model|provider)|Connect[^\S\n]+a[^\S\n]+provider)[^\S\n]{2,}esc[^\S\n]*$/m,z=/^[\u2503\u2579\u25A3\u2580\u2500\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C]+$/,A=[z,/\u2B1D{4,}/,/^Build\s+/,k,p,i,t,f.fW],B=/^[^\S\n]*[\u2502\u2503][^\S\n]*Ask anything(?:\.\.\.|\u2026)/m,C=/ctrl\+p commands/,D=/esc interrupt/;function E(a){return B.test(a)||C.test(a)}let F=[z,C,D,/Ask anything(?:\.\.\.|\u2026)/,/^Build\s+·/,f.fW];var G=c(79204);let H=/^[>❯]\s*$|^\s*[>❯]\s+Type your message.*$/m,I=/[\u2800-\u28FF]|Thinking\.\.\./,J=/ctx:\d+%\s*[>❯]/m,K=/[\u2800-\u28FF]|Thinking|⠋|⠙|⠹|⠸|⠼|⠴|⠦|⠧|⠇|⠏|Running|Executing/;var L=c(71188),M=c(69082),N=c(51297);let O=/^❯(\s*$|\s+\S)/m,P=RegExp(`^[^\\S\\n]*[\xb7○◇☆✧⌘][^\\S\\n]+[A-Za-z]+…|^[^\\S\\n]*✻ Thinking…|${/esc to interrupt/.source}`,"m"),Q=/\?\s+for\s+shortcuts|»\s+accept edits on|»\s+permission bypass on|»\s+don't-ask on|^[^\S\n]*plan mode\s/m;function R(a){let b=a=>/^─{10,}$/.test((0,N.aJ)(a??"").trimEnd()),c=a.length-1;for(;c>=0&&""===a[c].trim();)c--;if(c<0)return -1;let d=-1;for(let e=c;e>=Math.max(0,c-4);e--)if(b(a[e])){d=e;break}if(d<0)return -1;let e=-1;for(let c=d-1;c>=Math.max(0,d-40);c--)if(b(a[c])){e=c;break}return e<0||!/^❯/.test((0,N.aJ)(a[e+1]??""))?-1:e}let S=[/^─{10,}$/,/^❯\s*$/,/^❯\s+Ask your question\.\.\./,Q,P,/^[^\S\n]*✻\s+(?:Worked|Thought)\s+for\b/,/^[^\S\n]*◼\s+Ran\s+\d+\s+.*hooks?\b/,/^#\s+Command Code v\d/,/^#\s+models:\s/,/^#\s+[~/]/,/^[^\S\n]*[█▀▄▌▐]{3,}/,f.fW],T=/^[^\S\n]*[^\s\u2502\u2503\u2579\u2580][^\n]*?[^\S\n]{8,}esc[^\S\n]*$/m;function U(a){let b=T.exec(a);return null===b?null:b[0].trim().replace(/\s+esc$/,"")}let V=(0,d.h)("cli-patterns"),W={claude:{promptPattern:G.hx,separatorPattern:G.g0,thinkingPattern:G.j7,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,G.j7,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/,f.fW],promptOptions:{requireDefaultIndicator:!1},fullFramePrompt:!0},codex:{promptPattern:h.gm,separatorPattern:h.X3,thinkingPattern:h.Mt,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,h.Mt,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/,f.fW],promptOptions:void 0,fullFramePrompt:!0},gemini:{promptPattern:H,separatorPattern:/^[─━]{3,}$/m,thinkingPattern:I,skipPatterns:[H,I,/^\s*$/,/Gemini\s+\d+\.\d+/,f.fW],promptOptions:void 0,fullFramePrompt:!1},"vibe-local":{promptPattern:J,separatorPattern:/^[·]{10,}$/m,thinkingPattern:K,skipPatterns:[J,K,/^\s*$/,/vibe-local|vibe-coder/,/ctx:\s*\d+%/,/Model\s+\w/,/Engine\s+\w/,/Mode\s+/,/RAM\s+/,/CWD\s+/,/^[·]{10,}$/,/✦\s*Ready/,/ESC:\s*stop/,f.fW],promptOptions:void 0,fullFramePrompt:!1},opencode:{promptPattern:i,separatorPattern:z,thinkingPattern:l,skipPatterns:A,promptOptions:{requireDefaultIndicator:!1,hasNumberedDialogs:!1},fullFramePrompt:!0},copilot:{promptPattern:L.Du,separatorPattern:L.A,thinkingPattern:L.rb,skipPatterns:L.J7,promptOptions:{requireDefaultIndicator:!1},fullFramePrompt:!0},antigravity:{promptPattern:M.lE,separatorPattern:M.kn,thinkingPattern:M.VF,skipPatterns:M.Z6,promptOptions:{requireDefaultIndicator:!1},fullFramePrompt:!1},"command-code":{promptPattern:O,separatorPattern:/^─{10,}$/m,thinkingPattern:P,skipPatterns:S,promptOptions:void 0,fullFramePrompt:!1},"opencode-v2":{promptPattern:B,separatorPattern:z,thinkingPattern:D,skipPatterns:F,promptOptions:void 0,fullFramePrompt:!1}};function X(a){return Object.prototype.hasOwnProperty.call(W,a)?W[a]:void 0}function Y(a){return X(a)??W.claude}function Z(a,b){let c=V.withContext({cliToolId:a});c.debug("detectThinking:check",{contentLength:b.length});let d=Y(a).thinkingPattern.test(b);return c.debug("detectThinking:result",{isThinking:d}),d}function $(a){let b=Y(a);return{promptPattern:b.promptPattern,separatorPattern:b.separatorPattern,thinkingPattern:b.thinkingPattern,skipPatterns:[...b.skipPatterns]}}function _(a){let b=X(a)?.promptOptions;return void 0===b?void 0:{...b}}function aa(a){return X(a)?.fullFramePrompt??!1}},46423:(a,b,c)=>{c.d(b,{$:()=>d});let d=5},47165:(a,b,c)=>{c.d(b,{_:()=>d});function d(a){return a.split("\n").map(a=>/^[\u2502\u2503\u256D\u256E\u256F\u2570\u2500\u2579\u2580\u2588\s]+$/.test(a)?"":a.replace(/^\s*[\u2502\u2503]\s?/,"").replace(/\s*[\u2502\u2503\u2588]$/,"")).join("\n")}},51297:(a,b,c)=>{c.d(b,{aJ:()=>f});let d="\\x1b\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)";RegExp(d,"g");let e=RegExp(`\\x1b\\[[0-9;]*[a-zA-Z]|${d}|\\[[0-9;]*m`,"g");function f(a){return a.replace(e,"")}},56993:(a,b,c)=>{c.d(b,{U:()=>e});let d=new Set(["sh","bash","zsh","fish","dash","ksh","tcsh","csh"]);function e(a){return d.has(a.trim().replace(/^-/,""))}},65912:(a,b,c)=>{c.d(b,{AT:()=>p,Gs:()=>n,kT:()=>j,kp:()=>k,t:()=>l});var d=c(72626),e=c(682);let f=(0,d.h)("codex-dialog-rules"),g={version:"0.157.1"},h=/press\s+\S+\s+to\s+\S|esc\s+(?:to\s+)?(?:cancel|close|dismiss|quit|exit|back|go\s+back|skip)/i,i={bold:!1,dim:!1,fg:null};function j(a){if(!a.includes("\x1b"))return null;let b=function(a){let b=[],c=i,d=0;for(;d<a.length;){let e=a[d];if("\x1b"!==e){b.push({ch:e,attrs:c}),d++;continue}let f=a[d+1];if("["===f){let b=d+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;if(b>=a.length)break;"m"===a[b]&&(c=function(a,b){let c=""===a?["0"]:a.split(";"),{bold:d,dim:e,fg:f}=b;for(let a=0;a<c.length;a++){let b=""===c[a]?0:Number(c[a]);if(!Number.isNaN(b)){if(38===b){let b=""===c[a+1]||void 0===c[a+1]?-1:Number(c[a+1]),d=5===b?2:2===b?4:1;f=c.slice(a+1,a+1+d).join(";"),a+=d;continue}if(48===b||58===b){let b=""===c[a+1]||void 0===c[a+1]?-1:Number(c[a+1]);5===b?a+=2:2===b?a+=4:a+=1;continue}0===b?(d=!1,e=!1,f=null):1===b?d=!0:2===b?e=!0:22===b?(d=!1,e=!1):39===b?f=null:(b>=30&&b<=37||b>=90&&b<=97)&&(f=String(b))}}return{bold:d,dim:e,fg:f}}(a.slice(d+2,b),c)),d=b+1;continue}if("]"===f){let b=d+2;for(;b<a.length;){if("\x07"===a[b]){b++;break}if("\x1b"===a[b]&&"\\"===a[b+1]){b+=2;break}b++}d=b;continue}d+=2}return b}(a),c=b.findIndex(a=>""!==a.ch.trim());if(c<0||"›"!==b[c].ch)return null;let d=b[c].attrs;if(d.dim)return"transcript-echo";let e=b.slice(c+1).find(a=>""!==a.ch.trim());return e?.attrs.bold?"option":e?.attrs.dim?"composer":null!==d.fg&&e?.attrs.fg===d.fg?"option":"composer"}function k(a){let b=a.split("\n");for(let a=b.length-1;a>=0;a--){let c=j(b[a]);if(null!==c)return{kind:c,row:a}}return null}function l(a,b,c){let d=k(a),f=(0,e.c)(b,c),g=null!==f&&"›"===f.selectedGlyph,i=d?.kind==="option"?"glyph":g&&d?.kind!=="composer"&&d?.kind!=="transcript-echo"?"numbered-block":null;if(null===i)return null;let j=null!==f?f.footer:function(a,b,c){let d=[];for(let e=b+1;e<c&&d.length<8;e++){let b=a[e].trim();""!==b&&d.push(b)}return d.join("\n")}(b,function(a,b){for(let c=Math.min(b,a.length)-1;c>=0;c--)if(a[c].trimStart().startsWith("›"))return c;return -1}(b,c),c);return{by:i,options:f?.options??[],footer:j,footerRecognised:h.test(j)}}let m=/^\s*›\s*\d{1,2}[.)]\s/;function n(a,b,c){let d=k(a);if(null!==d)return"composer"===d.kind;let e=Math.min(c,b.length)-1;for(;e>=0&&""===b[e].trim();)e--;if(e<0)return!1;let f=b[e];return f.trimStart().startsWith("›")&&!m.test(f)}let o=new Set;function p(a){let b=a.slice(0,200);!o.has(b)&&(o.size>=64||(o.add(b),f.warn("codexDialogFooterUnrecognised",{footer:b,verifiedAgainst:g.version,hint:"codex reworded a dialog footer; widen CODEX_DIALOG_FOOTER_PATTERN after re-capturing the frame"})))}},69082:(a,b,c)=>{c.d(b,{HR:()=>o,Ly:()=>l,OM:()=>n,VF:()=>g,VI:()=>q,YH:()=>j,Z6:()=>t,bH:()=>s,cR:()=>k,d0:()=>m,dx:()=>r,kT:()=>i,kn:()=>h,lE:()=>f,wf:()=>p});var d=c(74099);let e=">[^\\S\\n]+[A-Z][A-Za-z-]*[^\\S\\n]mode:[^\\n]*\\(shift\\+tab to cycle\\)[^\\S\\n]*";RegExp(`^${e}$`,"m");let f=RegExp(`^(?:>\\s*|${e})$`,"m"),g=/[\u2800-\u28FF]|Generating|esc to cancel/,h=/^─{3,}$/m,i=/Switch Model|↑\/↓\s*Navigate/m,j=/↑\/↓\s*Navigate/,k=/↑\/↓\s*Navigate\s*·\s*tab Amend\b/,l=/^\s*>?\s*\d+\.\s+\S/m,m=/^\s*Switch Model\s*$/,n=/^\s*(?:─{3,}\s*$|[●⎿▸]|>(?!\s*\d+\.\s+\S))/,o=/^\s*\[1\]\s*Good\s+\[2\]\s*Fine\s+\[3\]\s*Bad\s+\[0\]\s*Skip\s*$/m,p=/Do you trust the contents of this project\?/;function q(a){return p.test(a)&&j.test(a)}function r(a){let b=-1;for(let c=a.length-1;c>=0;c--)if(j.test(a[c])){b=c;break}if(b<0)return null;for(let c=b+1;c<a.length;c++)if(f.test(a[c]))return null;let c=Math.max(0,b-60),d=c;for(let e=b-1;e>=c;e--)if(n.test(a[e])){d=e+1;break}return{start:d,footer:b}}function s(a){let b=a.split("\n"),c=r(b);if(null===c)return!1;let d=0;for(let a=c.start;a<c.footer;a++){let c=b[a];if(m.test(c))return!1;l.test(c)&&d++}return d>=2}let t=[h,/^>\s*$/,/^\?\s+for\s+shortcuts/,g,/[▄▀█▌▐]/,d.fW]},71188:(a,b,c)=>{c.d(b,{A:()=>l,Du:()=>g,E0:()=>u,Fg:()=>t,J7:()=>C,JN:()=>p,Jr:()=>r,Ki:()=>x,Rx:()=>B,Ub:()=>j,V:()=>v,Wn:()=>k,gT:()=>w,oD:()=>A,rb:()=>h,rc:()=>z,tJ:()=>i,wv:()=>o,y:()=>q});var d=c(51297),e=c(74099),f=c(47165);let g=/^[>❯]\s|^\?\s+/m,h=/[\u2800-\u28FF]|\(Esc to cancel|Reasoning\s+[■▪▮]|\.\.\.\s+Thinking/,i=/\besc\s+interrupt\b/,j=/\/\s+commands\b|\?\s+(?:help\b|for\s+shortcuts\b)/;function k(a){for(let b=a.length-1;b>=0;b--){let c=a[b];if(""!==c.trim()){if(i.test(c))return"working";if(j.test(c))return"idle";break}}return null}let l=/^─{10,}$/m,m=/^(?:─{10,}|╻▄{10,}|╹▀{10,})$/,n=/^ {0,2}[>❯┃]/;function o(a){let b=a=>m.test((0,d.aJ)(a).trim()),c=a.length-1;for(;c>=0&&""===(0,d.aJ)(a[c]).trim();)c--;if(c<0)return -1;let e=-1;for(let d=c;d>=Math.max(0,c-2);d--)if(b(a[d])){e=d;break}if(e<0)return -1;let f=-1;for(let c=e-1;c>=Math.max(0,e-40);c--)if(b(a[c])){f=c;break}return f<0||!n.test((0,d.aJ)(a[f+1]??""))?-1:Math.max(0,f-1)}let p=/^\s*[│└╰╭╮╯├┤┬┴┼]/,q=/^ {0,2}[>❯]\s+\S/,r="Get|Read|Run|Search|Write|Edit|Delete|List|Create|Fetch|Explore|Execute|Install|Asked user|Asking user|Model changed to:",s=RegExp(`^\\s*(?:\\/|\\{\\}|[A-Z][A-Z0-9+#]{1,3})\\s+(?:${r})[\\s:]`),t=/^ {2,}\S/,u=[/No copilot-instructions\.md found/,/Copilot uses AI, so always check for mistakes\./,/Copilot v\d[\w.]*\s+uses AI/,/^\s*(?:●\s+)?GitHub Copilot\s+v\d/m,/^\s*(?:●\s+)?Tip:\s*\//m,/Describe a task to get started/,/Prefer a visual workspace\?/,/what would you like to work on\?/i],v=/^(?=[^\n]*·)[^\n]*(?:↑\/?↓|\besc\s+(?:to\s+)?(?:cancel|close)\b)/m;function w(a){if(null!==k(a))return!1;let b=0;for(let c=a.length-1;c>=0;c--){let d=a[c],e=d.trim();if(""!==e){if(++b>3)break;if(!(e.startsWith("│")||e.endsWith("│"))&&v.test(d))return!0}}return!1}let x=["Confirm folder trust","Do you trust the files in this folder?"],y=/^[ \t]*(?:[>❯][ \t]*)?1\.[ \t]+Yes[ \t]*$/m,z=/^(?:Yes|Yes, and remember this folder for future sessions|No \(Esc\))$/,A="1";function B(a){return!!x.every(b=>a.includes(b))&&y.test((0,f._)(a))}let C=[e.fW,l,h,v,/^\s*⌄\s/,/^\s*[╻╹]?[▀▄]{10,}\s*$/,s,p,/^GitHub Copilot\s+v/,/[█▘▝▖▗▔▄▌▐]/,/[╭╮╰╯│]/,/\[⎇\s+\w[^\]]*\]/,/^shift\+tab\s/,/^\?\s+for\s+shortcuts/,/^ctrl\+[a-z]\s+\w/,/^[❯>]\s*(Type\s+@|$)/,/^\s*(?:●\s+)?Tip:\s*\//,/^\s*Current\s+Sessions\s+Issues\s+Pull requests\s+Gists\s*$/,/^Describe a task to get started/,/^Copilot uses AI, so always check for mistakes\.$/,/^● 💡/,/^● Environment loaded:/]},74099:(a,b,c)=>{c.d(b,{fW:()=>d});let d=/\[Pasted text #\d+/},79204:(a,b,c)=>{c.d(b,{F0:()=>v,Fw:()=>w,GT:()=>n,Tk:()=>h,V2:()=>e.iE,W1:()=>f,Wq:()=>i,XY:()=>u,aU:()=>k,g0:()=>m,hx:()=>l,j7:()=>j,ji:()=>g,l8:()=>t,lQ:()=>q,lX:()=>r});var d=c(94154),e=c(1804);let f=/^\s*[✻✽✶✢✳⦿◉●·⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\s+\S+\s+for\s+(?:\d+m\s*)?\d+(?:\.\d+)?s(?:\s|$|\s*·)/,g=/^\s*╭─+\s*Claude Code v/,h=/^\s*[>❯]\s+\S/,i=/·\s*\/effort\s*$/,j=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),k=/esc to interrupt/,l=/^[>❯](\s*$|\s+\S)/m,m=/^─{10,}$/m;function n(a){let b=(0,d.p4)(a);return null===b?-1:Math.max(0,b.openingSeparator-1)}let o=/Yes, I trust this folder/m,p=/^\s*[>❯]\s+\S/;function q(a){let b=a.split("\n"),c=s(b);if(-1===c)return null;for(let a=0;a<=3;a++)for(let d of 0===a?[0]:[-1,1]){let e=c+d*a;if(e<0||e>=b.length||!p.test(b[e]))continue;let f=d<0?"Down":"Up";return[...Array(a).fill(f),"Enter"]}return null}function r(a){return -1!==s(a.split("\n"))}function s(a){for(let b=a.length-1;b>=0;b--)if(o.test(a[b]))return a.slice(b+1).some(a=>m.test(a))?-1:b;return -1}let t=/Enter\s+to\s+set\s+as\s+default\b/i,u=/Enter\s+to\s+(?:select\s+.*to\s+navigate|confirm\s+·\s+(?:Esc|s\s+for\s+this\s+session\s+only)|set\s+as\s+default)/,v=["Claude Code cannot be launched inside another Claude Code session"],w=[/^Error:.*Claude Code/]},94154:(a,b,c)=>{c.d(b,{Di:()=>l,Zs:()=>r,ji:()=>q,mO:()=>n,p4:()=>f,q9:()=>s,wn:()=>p,zF:()=>m});var d=c(51297);let e=/^[>❯]/;function f(a){let b=a=>/^─{10,}$/.test((0,d.aJ)(a).trimEnd()),c=a.length-1;for(;c>=0&&""===a[c].trim();)c--;if(c<0)return null;let f=-1;for(let d=c;d>=Math.max(0,c-4);d--)if(b(a[d])){f=d;break}if(f<0)return null;let g=-1;for(let c=f-1;c>=Math.max(0,f-40);c--)if(b(a[c])){g=c;break}return g<0||!e.test((0,d.aJ)(a[g+1]??""))?null:{openingSeparator:g,closingSeparator:f}}let g=/^\u203A/;function h(a){return void 0===a||""===(0,d.aJ)(a).trim()}function i(a){if(void 0===a)return!1;let b=o(a);if(0===b.length||"›"!==b[0].ch||b[0].dim||b.length>1&&" "!==b[1].ch)return!1;let c=b.slice(2).find(a=>" "!==a.ch);return void 0===c||!c.bold}function j(a){if(!a.includes("\x1b"))return null;let b=o(a),c=b.findIndex(a=>""!==a.ch.trim());if(c<0||"›"!==b[c].ch)return null;let d=b[c];if(d.dim)return"transcript-echo";let e=b.slice(c+1).find(a=>""!==a.ch.trim());return e?.bold?"option":e?.dim?"composer":null!==d.fg&&e?.fg===d.fg?"option":"composer"}function k(a){return i(a)&&!function(a){if(void 0===a)return!1;let b=o(a);return b.length>1&&"›"===b[0].ch&&" "===b[1].ch&&b[1].bold}(a)}function l(a){for(let b=a.length-1;b>=0;b--){let c=j(a[b]);if("option"===c)break;if("composer"===c&&k(a[b]))return b}return -1}function m(a,b){for(let c=a.length-1;c>b;c--){let b=j(a[c]);if("option"===b)return!0;if("composer"===b&&k(a[c]))break}return!1}function n(a){let b=a.length-1;for(;b>=0&&h(a[b]);)b--;if(b<0)return null;for(let c=0;c<4&&b>=0;c++){let c=b,d=b;for(;d>0&&!h(a[d-1]);)d--;if(i(a[d]))return{firstRow:d,lastRow:Math.min(c,d+40-1)};for(b=d-1;b>=0&&h(a[b]);)b--}return null}function o(a){let b=[],c={dim:!1,bold:!1,fg:null},d=0;for(;d<a.length;){let e=a[d];if("\x1b"!==e){b.push({ch:e,dim:c.dim,bold:c.bold,fg:c.fg}),d++;continue}let f=a[d+1];if("["===f){let b=d+2;for(;b<a.length&&!/[A-Za-z]/.test(a[b]);)b++;if(b>=a.length)break;"m"===a[b]&&(c=function(a,b){let c=""===a?["0"]:a.split(";"),{dim:d,bold:e,fg:f}=b;for(let a=0;a<c.length;a++){let b=""===c[a]?0:Number(c[a]);if(!Number.isNaN(b)){if(38===b||48===b||58===b){let d=""===c[a+1]||void 0===c[a+1]?-1:Number(c[a+1]),e=5===d?2:2===d?4:1;38===b&&(f=c.slice(a+1,a+1+e).join(";")),a+=e;continue}0===b?(d=!1,e=!1,f=null):22===b?(d=!1,e=!1):1===b?e=!0:2===b?d=!0:39===b?f=null:(b>=30&&b<=37||b>=90&&b<=97)&&(f=String(b))}}return{dim:d,bold:e,fg:f}}(a.slice(d+2,b),c)),d=b+1;continue}if("]"===f){let b=d+2;for(;b<a.length;){if("\x07"===a[b]){b++;break}if("\x1b"===a[b]&&"\\"===a[b+1]){b+=2;break}b++}d=b;continue}d+=2}return b}let p=new Set(["claude","codex"]);function q(a,b){if(!p.has(b))return{text:"",state:"unsupported_tool"};let c=a.split("\n"),d=function(a,b){if("claude"===b){let b=f(a);return null===b?null:{firstRow:b.openingSeparator+1,lastRow:b.closingSeparator-1,glyph:e}}let c=n(a);return null===c?null:{firstRow:c.firstRow,lastRow:c.lastRow,glyph:g}}(c,b);return null===d?{text:"",state:"no_composer"}:t(c,d)}function r(a,b){let c=q(a,b);if("codex"!==b||"no_composer"===c.state||"unsupported_tool"===c.state)return c;let d=a.split("\n"),e=n(d);return null!==e&&m(d,e.firstRow)?{text:"",state:"no_composer"}:c}function s(a,b){let c=a.length-1;for(;c>=0&&h(a[c]);)c--;let d=c;for(;d>0&&!h(a[d-1]);)d--;let e=b;for(;e+1<a.length&&!h(a[e+1]);)e++;return t(a,{firstRow:b,lastRow:d>e?d-1:c,glyph:g})}function t(a,b){let c=[],d=[];for(let e=b.firstRow;e<=b.lastRow;e++){let f=function(a,b,c){if(b){let b=a.findIndex(a=>c.test(a.ch));if(b<0)return a;let d=b+1;return d<a.length&&/\s/.test(a[d].ch)&&d++,a.slice(d)}let d=0;for(;d<2&&d<a.length&&" "===a[d].ch;)d++;return a.slice(d)}(o(a[e]??""),e===b.firstRow,b.glyph);c.push(f.filter(a=>!a.dim).map(a=>a.ch).join("").trimEnd()),d.push(f.map(a=>a.ch).join("").trimEnd())}let e=u(c).join("\n");return""!==e.trim()?{text:e.slice(0,2e3),state:"content"}:{text:"",state:""===u(d).join("\n").trim()?"empty":"ghost"}}function u(a){let b=a.length;for(;b>0&&""===a[b-1].trim();)b--;return a.slice(0,b)}}};