commandmate 0.31.2 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (824) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +454 -440
  3. package/.next/app-path-routes-manifest.json +31 -29
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/react-loadable-manifest.json +2 -2
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +8 -0
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route.js +1 -1
  14. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
  15. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  17. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  20. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/messages/route.js +1 -1
  23. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/session/route.js +1 -1
  26. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/start/route.js +1 -32
  29. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/terminal/route.js +2 -33
  32. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/assistant/tools/route.js +1 -1
  35. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  36. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/capabilities/route.js +1 -1
  41. package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
  42. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  51. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  52. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  54. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  55. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  57. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  58. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/push/escalation/route.js +2 -2
  62. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  63. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  65. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/push/vapid/route.js +2 -2
  67. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  68. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -0
  70. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -0
  71. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -0
  72. package/.next/server/app/api/relays/route.js +1 -0
  73. package/.next/server/app/api/relays/route.js.nft.json +1 -0
  74. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -0
  75. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  78. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  80. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  82. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  83. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/repositories/clone/route.js +1 -1
  85. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  86. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/repositories/restore/route.js +1 -1
  89. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  90. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/repositories/route.js +1 -1
  92. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  93. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/repositories/scan/route.js +1 -1
  95. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  96. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/repositories/sync/route.js +1 -1
  98. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  99. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  102. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  103. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/skills/[id]/route.js +1 -1
  107. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  108. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/skills/installations/route.js +1 -1
  110. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  111. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/skills/route.js +1 -1
  115. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  116. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  120. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/todos/route.js +1 -1
  124. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  126. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/verification/runs/route.js +1 -1
  128. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  131. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  134. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  137. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  146. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  205. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +2 -1
  224. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  225. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +2 -1
  227. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  228. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  249. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +103 -1
  251. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  252. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  256. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  262. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  274. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  279. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  296. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/route.js +1 -1
  301. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  302. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/chat/page.js +2 -2
  304. package/.next/server/app/chat/page.js.nft.json +1 -1
  305. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  306. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  307. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  308. package/.next/server/app/more/page.js +2 -2
  309. package/.next/server/app/more/page.js.nft.json +1 -1
  310. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  311. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  312. package/.next/server/app/page.js +1 -1
  313. package/.next/server/app/page.js.nft.json +1 -1
  314. package/.next/server/app/page_client-reference-manifest.js +1 -1
  315. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  316. package/.next/server/app/repositories/page.js +2 -2
  317. package/.next/server/app/repositories/page.js.nft.json +1 -1
  318. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  319. package/.next/server/app/review/page.js +1 -1
  320. package/.next/server/app/review/page.js.nft.json +1 -1
  321. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  322. package/.next/server/app/sessions/page.js +1 -1
  323. package/.next/server/app/sessions/page.js.nft.json +1 -1
  324. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  325. package/.next/server/app/skills/[skillId]/page.js +2 -2
  326. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  327. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  328. package/.next/server/app/skills/installed/page.js +2 -2
  329. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  330. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  331. package/.next/server/app/skills/page.js +1 -1
  332. package/.next/server/app/skills/page.js.nft.json +1 -1
  333. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  334. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  335. package/.next/server/app/worktrees/[id]/page.js +11 -11
  336. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  337. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  338. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  339. package/.next/server/app-paths-manifest.json +31 -29
  340. package/.next/server/chunks/1191.js +1 -1
  341. package/.next/server/chunks/1210.js +1 -0
  342. package/.next/server/chunks/153.js +1 -0
  343. package/.next/server/chunks/1886.js +1 -1
  344. package/.next/server/chunks/21.js +1 -0
  345. package/.next/server/chunks/2119.js +1 -1
  346. package/.next/server/chunks/2445.js +1 -1
  347. package/.next/server/chunks/3077.js +67 -0
  348. package/.next/server/chunks/3086.js +1 -0
  349. package/.next/server/chunks/3241.js +1 -1
  350. package/.next/server/chunks/3270.js +1 -0
  351. package/.next/server/chunks/3543.js +1 -1
  352. package/.next/server/chunks/3730.js +1 -0
  353. package/.next/server/chunks/3925.js +1 -0
  354. package/.next/server/chunks/3945.js +1 -1
  355. package/.next/server/chunks/4443.js +2 -1
  356. package/.next/server/chunks/5043.js +1 -1
  357. package/.next/server/chunks/5164.js +1 -1
  358. package/.next/server/chunks/5220.js +1 -1
  359. package/.next/server/chunks/5354.js +1 -1
  360. package/.next/server/chunks/595.js +8 -0
  361. package/.next/server/chunks/6286.js +48 -0
  362. package/.next/server/chunks/6306.js +1 -0
  363. package/.next/server/chunks/6363.js +1 -0
  364. package/.next/server/chunks/6401.js +1 -1
  365. package/.next/server/chunks/6491.js +103 -0
  366. package/.next/server/chunks/6661.js +1 -0
  367. package/.next/server/chunks/6838.js +1 -0
  368. package/.next/server/chunks/7875.js +25 -0
  369. package/.next/server/chunks/7890.js +1 -0
  370. package/.next/server/chunks/8063.js +32 -0
  371. package/.next/server/chunks/8118.js +1 -1
  372. package/.next/server/chunks/{7587.js → 8554.js} +1 -1
  373. package/.next/server/chunks/8687.js +1 -0
  374. package/.next/server/chunks/8800.js +1 -1
  375. package/.next/server/chunks/8807.js +37 -3
  376. package/.next/server/chunks/8918.js +6 -4
  377. package/.next/server/chunks/9123.js +2 -2
  378. package/.next/server/chunks/9130.js +2 -2
  379. package/.next/server/chunks/9584.js +1 -1
  380. package/.next/server/chunks/9627.js +22 -6
  381. package/.next/server/middleware-build-manifest.js +1 -1
  382. package/.next/server/middleware-manifest.json +5 -5
  383. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  384. package/.next/server/pages/500.html +1 -1
  385. package/.next/server/server-reference-manifest.json +1 -1
  386. package/.next/static/UIUPchtWvcEuQgcbGJv4g/_buildManifest.js +1 -0
  387. package/.next/static/chunks/{5694.dda65070757534df.js → 3313.53f7ff985c0c8852.js} +1 -1
  388. package/.next/static/chunks/4718-0053d42fb635e700.js +1 -0
  389. package/.next/static/chunks/{4974-35592ec312322124.js → 5694-498765336d0b8c2b.js} +1 -1
  390. package/.next/static/chunks/{7485.442b21101fca7257.js → 7485.52361bc061cc663a.js} +1 -1
  391. package/.next/static/chunks/8019-cbf130d0e6334d2d.js +1 -0
  392. package/.next/static/chunks/8361-9bb887203c456edb.js +1 -0
  393. package/.next/static/chunks/8772-9be53a530950d804.js +1 -0
  394. package/.next/static/chunks/998-ac0ded6d5eeb4dc0.js +1 -0
  395. package/.next/static/chunks/app/api/agents/update/route-8bc5b680c5f3eae4.js +1 -0
  396. package/.next/static/chunks/app/api/agents/versions/route-8bc5b680c5f3eae4.js +1 -0
  397. package/.next/static/chunks/app/api/app/update/route-8bc5b680c5f3eae4.js +1 -0
  398. package/.next/static/chunks/app/api/app/update-check/route-8bc5b680c5f3eae4.js +1 -0
  399. package/.next/static/chunks/app/api/assistant/conversation/route-8bc5b680c5f3eae4.js +1 -0
  400. package/.next/static/chunks/app/api/assistant/current-output/route-8bc5b680c5f3eae4.js +1 -0
  401. package/.next/static/chunks/app/api/assistant/messages/route-8bc5b680c5f3eae4.js +1 -0
  402. package/.next/static/chunks/app/api/assistant/session/route-8bc5b680c5f3eae4.js +1 -0
  403. package/.next/static/chunks/app/api/assistant/start/route-8bc5b680c5f3eae4.js +1 -0
  404. package/.next/static/chunks/app/api/assistant/terminal/route-8bc5b680c5f3eae4.js +1 -0
  405. package/.next/static/chunks/app/api/assistant/tools/route-8bc5b680c5f3eae4.js +1 -0
  406. package/.next/static/chunks/app/api/auth/login/route-8bc5b680c5f3eae4.js +1 -0
  407. package/.next/static/chunks/app/api/auth/logout/route-8bc5b680c5f3eae4.js +1 -0
  408. package/.next/static/chunks/app/api/auth/status/route-8bc5b680c5f3eae4.js +1 -0
  409. package/.next/static/chunks/app/api/capabilities/route-8bc5b680c5f3eae4.js +1 -0
  410. package/.next/static/chunks/app/api/daily-summary/route-8bc5b680c5f3eae4.js +1 -0
  411. package/.next/static/chunks/app/api/daily-summary/status/route-8bc5b680c5f3eae4.js +1 -0
  412. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8bc5b680c5f3eae4.js +1 -0
  413. package/.next/static/chunks/app/api/external-apps/[id]/route-8bc5b680c5f3eae4.js +1 -0
  414. package/.next/static/chunks/app/api/external-apps/route-8bc5b680c5f3eae4.js +1 -0
  415. package/.next/static/chunks/app/api/fs/browse/route-8bc5b680c5f3eae4.js +1 -0
  416. package/.next/static/chunks/app/api/fs/recent-paths/route-8bc5b680c5f3eae4.js +1 -0
  417. package/.next/static/chunks/app/api/hooks/agent-event/route-8bc5b680c5f3eae4.js +1 -0
  418. package/.next/static/chunks/app/api/hooks/claude-done/route-8bc5b680c5f3eae4.js +1 -0
  419. package/.next/static/chunks/app/api/hooks/permission-request/route-8bc5b680c5f3eae4.js +1 -0
  420. package/.next/static/chunks/app/api/metrics/vibe/route-8bc5b680c5f3eae4.js +1 -0
  421. package/.next/static/chunks/app/api/ollama/models/route-8bc5b680c5f3eae4.js +1 -0
  422. package/.next/static/chunks/app/api/push/escalation/route-8bc5b680c5f3eae4.js +1 -0
  423. package/.next/static/chunks/app/api/push/subscriptions/route-8bc5b680c5f3eae4.js +1 -0
  424. package/.next/static/chunks/app/api/push/vapid/route-8bc5b680c5f3eae4.js +1 -0
  425. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
  426. package/.next/static/chunks/app/api/relays/route-8bc5b680c5f3eae4.js +1 -0
  427. package/.next/static/chunks/app/api/remote/pair/route-8bc5b680c5f3eae4.js +1 -0
  428. package/.next/static/chunks/app/api/repositories/[id]/route-8bc5b680c5f3eae4.js +1 -0
  429. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +1 -0
  430. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8bc5b680c5f3eae4.js +1 -0
  431. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8bc5b680c5f3eae4.js +1 -0
  432. package/.next/static/chunks/app/api/repositories/clone/route-8bc5b680c5f3eae4.js +1 -0
  433. package/.next/static/chunks/app/api/repositories/excluded/route-8bc5b680c5f3eae4.js +1 -0
  434. package/.next/static/chunks/app/api/repositories/restore/route-8bc5b680c5f3eae4.js +1 -0
  435. package/.next/static/chunks/app/api/repositories/route-8bc5b680c5f3eae4.js +1 -0
  436. package/.next/static/chunks/app/api/repositories/scan/route-8bc5b680c5f3eae4.js +1 -0
  437. package/.next/static/chunks/app/api/repositories/sync/route-8bc5b680c5f3eae4.js +1 -0
  438. package/.next/static/chunks/app/api/repositories/validate-path/route-8bc5b680c5f3eae4.js +1 -0
  439. package/.next/static/chunks/app/api/settings/default-agents/route-8bc5b680c5f3eae4.js +1 -0
  440. package/.next/static/chunks/app/api/settings/default-surface-mode/route-8bc5b680c5f3eae4.js +1 -0
  441. package/.next/static/chunks/app/api/sidebar/group-order/route-8bc5b680c5f3eae4.js +1 -0
  442. package/.next/static/chunks/app/api/skills/[id]/route-8bc5b680c5f3eae4.js +1 -0
  443. package/.next/static/chunks/app/api/skills/installations/route-8bc5b680c5f3eae4.js +1 -0
  444. package/.next/static/chunks/app/api/skills/operations/route-8bc5b680c5f3eae4.js +1 -0
  445. package/.next/static/chunks/app/api/skills/reindex/route-8bc5b680c5f3eae4.js +1 -0
  446. package/.next/static/chunks/app/api/skills/route-8bc5b680c5f3eae4.js +1 -0
  447. package/.next/static/chunks/app/api/slash-commands/route-8bc5b680c5f3eae4.js +1 -0
  448. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
  449. package/.next/static/chunks/app/api/tasks/[taskId]/route-8bc5b680c5f3eae4.js +1 -0
  450. package/.next/static/chunks/app/api/templates/[id]/route-8bc5b680c5f3eae4.js +1 -0
  451. package/.next/static/chunks/app/api/templates/route-8bc5b680c5f3eae4.js +1 -0
  452. package/.next/static/chunks/app/api/todos/route-8bc5b680c5f3eae4.js +1 -0
  453. package/.next/static/chunks/app/api/verification/runs/[runId]/route-8bc5b680c5f3eae4.js +1 -0
  454. package/.next/static/chunks/app/api/verification/runs/route-8bc5b680c5f3eae4.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8bc5b680c5f3eae4.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8bc5b680c5f3eae4.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-8bc5b680c5f3eae4.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-8bc5b680c5f3eae4.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8bc5b680c5f3eae4.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8bc5b680c5f3eae4.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8bc5b680c5f3eae4.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/env/route-8bc5b680c5f3eae4.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8bc5b680c5f3eae4.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8bc5b680c5f3eae4.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8bc5b680c5f3eae4.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8bc5b680c5f3eae4.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8bc5b680c5f3eae4.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8bc5b680c5f3eae4.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8bc5b680c5f3eae4.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8bc5b680c5f3eae4.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8bc5b680c5f3eae4.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8bc5b680c5f3eae4.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8bc5b680c5f3eae4.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8bc5b680c5f3eae4.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8bc5b680c5f3eae4.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8bc5b680c5f3eae4.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8bc5b680c5f3eae4.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8bc5b680c5f3eae4.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8bc5b680c5f3eae4.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8bc5b680c5f3eae4.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8bc5b680c5f3eae4.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8bc5b680c5f3eae4.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8bc5b680c5f3eae4.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8bc5b680c5f3eae4.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8bc5b680c5f3eae4.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8bc5b680c5f3eae4.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8bc5b680c5f3eae4.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8bc5b680c5f3eae4.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-8bc5b680c5f3eae4.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8bc5b680c5f3eae4.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8bc5b680c5f3eae4.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8bc5b680c5f3eae4.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8bc5b680c5f3eae4.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8bc5b680c5f3eae4.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8bc5b680c5f3eae4.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8bc5b680c5f3eae4.js +1 -0
  497. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8bc5b680c5f3eae4.js +1 -0
  498. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-8bc5b680c5f3eae4.js +1 -0
  499. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-8bc5b680c5f3eae4.js +1 -0
  500. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-8bc5b680c5f3eae4.js +1 -0
  501. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8bc5b680c5f3eae4.js +1 -0
  502. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-8bc5b680c5f3eae4.js +1 -0
  503. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8bc5b680c5f3eae4.js +1 -0
  504. package/.next/static/chunks/app/api/worktrees/[id]/route-8bc5b680c5f3eae4.js +1 -0
  505. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8bc5b680c5f3eae4.js +1 -0
  506. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8bc5b680c5f3eae4.js +1 -0
  507. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8bc5b680c5f3eae4.js +1 -0
  508. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8bc5b680c5f3eae4.js +1 -0
  509. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8bc5b680c5f3eae4.js +1 -0
  510. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8bc5b680c5f3eae4.js +1 -0
  511. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8bc5b680c5f3eae4.js +1 -0
  512. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8bc5b680c5f3eae4.js +1 -0
  513. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8bc5b680c5f3eae4.js +1 -0
  514. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8bc5b680c5f3eae4.js +1 -0
  515. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-8bc5b680c5f3eae4.js +1 -0
  516. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-8bc5b680c5f3eae4.js +1 -0
  517. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8bc5b680c5f3eae4.js +1 -0
  518. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8bc5b680c5f3eae4.js +1 -0
  519. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8bc5b680c5f3eae4.js +1 -0
  520. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8bc5b680c5f3eae4.js +1 -0
  521. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8bc5b680c5f3eae4.js +1 -0
  522. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8bc5b680c5f3eae4.js +1 -0
  523. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8bc5b680c5f3eae4.js +1 -0
  524. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +1 -0
  525. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8bc5b680c5f3eae4.js +1 -0
  526. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8bc5b680c5f3eae4.js +1 -0
  527. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8bc5b680c5f3eae4.js +1 -0
  528. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8bc5b680c5f3eae4.js +1 -0
  529. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-8bc5b680c5f3eae4.js +1 -0
  530. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8bc5b680c5f3eae4.js +1 -0
  531. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
  532. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8bc5b680c5f3eae4.js +1 -0
  533. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8bc5b680c5f3eae4.js +1 -0
  534. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8bc5b680c5f3eae4.js +1 -0
  535. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-8bc5b680c5f3eae4.js +1 -0
  536. package/.next/static/chunks/app/api/worktrees/route-8bc5b680c5f3eae4.js +1 -0
  537. package/.next/static/chunks/app/chat/{page-37d7615d17d7e2a0.js → page-e60d07c4c79602f0.js} +1 -1
  538. package/.next/static/chunks/app/manifest.webmanifest/route-8bc5b680c5f3eae4.js +1 -0
  539. package/.next/static/chunks/app/more/{page-353a3924e6d7968e.js → page-fc94f86aa881489e.js} +1 -1
  540. package/.next/static/chunks/app/{page-c2bf871d953a1d6f.js → page-6871cca022b24807.js} +1 -1
  541. package/.next/static/chunks/app/proxy/[...path]/route-8bc5b680c5f3eae4.js +1 -0
  542. package/.next/static/chunks/app/repositories/{page-7d0f26df0537254c.js → page-788ded1b72963d94.js} +1 -1
  543. package/.next/static/chunks/app/review/{page-e3f141b2829973e9.js → page-35b99baaf3c93b38.js} +1 -1
  544. package/.next/static/chunks/app/sessions/{page-53f188ed9ca49e5f.js → page-fa2d62f3e8436c69.js} +1 -1
  545. package/.next/static/chunks/app/skills/[skillId]/{page-80569b720aea59cc.js → page-06799157652e8fa9.js} +1 -1
  546. package/.next/static/chunks/app/skills/installed/{page-dbd2690ad72da95b.js → page-2f3987e3a131c8d0.js} +1 -1
  547. package/.next/static/chunks/app/skills/{page-dacd36f9c11aa7da.js → page-e70bfcf5ed4e4865.js} +1 -1
  548. package/.next/static/chunks/app/worktrees/[id]/layout-8bc5b680c5f3eae4.js +1 -0
  549. package/.next/static/chunks/app/worktrees/[id]/page-06e1ff5ce2d126fd.js +1 -0
  550. package/.next/static/chunks/webpack-1dc9eb5ebb4fa5ff.js +1 -0
  551. package/.next/static/css/96d94a4ba771efc3.css +1 -0
  552. package/.next/trace +13 -13
  553. package/.next/types/app/api/relays/[relayId]/cancel/route.ts +347 -0
  554. package/.next/types/app/api/relays/route.ts +347 -0
  555. package/.next/types/routes.d.ts +3 -1
  556. package/.next/types/validator.ts +18 -0
  557. package/dist/cli/commands/ask.d.ts +34 -0
  558. package/dist/cli/commands/ask.d.ts.map +1 -0
  559. package/dist/cli/commands/ask.js +494 -0
  560. package/dist/cli/commands/capture.d.ts +20 -0
  561. package/dist/cli/commands/capture.d.ts.map +1 -1
  562. package/dist/cli/commands/capture.js +80 -30
  563. package/dist/cli/commands/docs.d.ts.map +1 -1
  564. package/dist/cli/commands/docs.js +47 -4
  565. package/dist/cli/commands/instances.d.ts +67 -0
  566. package/dist/cli/commands/instances.d.ts.map +1 -1
  567. package/dist/cli/commands/instances.js +103 -7
  568. package/dist/cli/commands/peers.d.ts +64 -0
  569. package/dist/cli/commands/peers.d.ts.map +1 -0
  570. package/dist/cli/commands/peers.js +196 -0
  571. package/dist/cli/commands/relays.d.ts +92 -0
  572. package/dist/cli/commands/relays.d.ts.map +1 -0
  573. package/dist/cli/commands/relays.js +293 -0
  574. package/dist/cli/commands/report.d.ts +3 -0
  575. package/dist/cli/commands/report.d.ts.map +1 -1
  576. package/dist/cli/commands/report.js +29 -1
  577. package/dist/cli/commands/respond.d.ts.map +1 -1
  578. package/dist/cli/commands/respond.js +13 -10
  579. package/dist/cli/commands/send.d.ts.map +1 -1
  580. package/dist/cli/commands/send.js +66 -20
  581. package/dist/cli/commands/task.d.ts.map +1 -1
  582. package/dist/cli/commands/task.js +30 -0
  583. package/dist/cli/commands/wait.d.ts +20 -0
  584. package/dist/cli/commands/wait.d.ts.map +1 -1
  585. package/dist/cli/commands/wait.js +55 -6
  586. package/dist/cli/commands/whoami.d.ts +109 -0
  587. package/dist/cli/commands/whoami.d.ts.map +1 -0
  588. package/dist/cli/commands/whoami.js +271 -0
  589. package/dist/cli/docs/agent-operations.d.ts +25 -1
  590. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  591. package/dist/cli/docs/agent-operations.js +184 -1
  592. package/dist/cli/index.d.ts +13 -0
  593. package/dist/cli/index.d.ts.map +1 -1
  594. package/dist/cli/index.js +25 -1
  595. package/dist/cli/types/api-responses.d.ts +93 -0
  596. package/dist/cli/types/api-responses.d.ts.map +1 -1
  597. package/dist/cli/types/index.d.ts +16 -0
  598. package/dist/cli/types/index.d.ts.map +1 -1
  599. package/dist/lib/cli/command-reference.d.ts +179 -0
  600. package/dist/lib/cli/command-reference.d.ts.map +1 -0
  601. package/dist/lib/cli/command-reference.js +210 -0
  602. package/dist/lib/detection/ansi.d.ts +14 -1
  603. package/dist/lib/detection/ansi.d.ts.map +1 -1
  604. package/dist/lib/detection/ansi.js +40 -3
  605. package/dist/lib/detection/status-reason.d.ts +28 -0
  606. package/dist/lib/detection/status-reason.d.ts.map +1 -1
  607. package/dist/lib/detection/status-reason.js +28 -0
  608. package/dist/lib/detection/tools/verified-against.d.ts +24 -24
  609. package/dist/lib/detection/tools/verified-against.js +24 -24
  610. package/dist/server/locales/en/worktree.json +1425 -0
  611. package/dist/server/locales/ja/worktree.json +1425 -0
  612. package/dist/server/src/lib/auto-yes-poller.js +26 -11
  613. package/dist/server/src/lib/db/chat-db.js +204 -7
  614. package/dist/server/src/lib/db/migrations/index.js +2 -0
  615. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  616. package/dist/server/src/lib/db/migrations/v60-session-relays.js +110 -0
  617. package/dist/server/src/lib/db/relay-db.js +343 -0
  618. package/dist/server/src/lib/detection/ansi.js +40 -3
  619. package/dist/server/src/lib/detection/cli-patterns.js +157 -23
  620. package/dist/server/src/lib/detection/model-info-extractor.js +185 -4
  621. package/dist/server/src/lib/detection/selection-shape.js +72 -1
  622. package/dist/server/src/lib/detection/status-reason.js +28 -0
  623. package/dist/server/src/lib/detection/tools/antigravity/detect.js +105 -25
  624. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +239 -0
  625. package/dist/server/src/lib/detection/tools/command-code/detect.js +33 -0
  626. package/dist/server/src/lib/detection/tools/verified-against.js +24 -24
  627. package/dist/server/src/lib/history/user-turn-recorder.js +79 -16
  628. package/dist/server/src/lib/hooks/hook-settings-generator.js +16 -0
  629. package/dist/server/src/lib/hooks/sources/claude/model-switch.js +169 -0
  630. package/dist/server/src/lib/hooks/sources/claude/source.js +14 -1
  631. package/dist/server/src/lib/polling/response-checker.js +55 -2
  632. package/dist/server/src/lib/polling/structured-history-gate.js +14 -1
  633. package/dist/server/src/lib/push/index.js +13 -1
  634. package/dist/server/src/lib/push/model-change-push-notifier.js +174 -0
  635. package/dist/server/src/lib/push/push-sender.js +48 -20
  636. package/dist/server/src/lib/realtime/model-change-broadcast.js +171 -0
  637. package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
  638. package/dist/server/src/lib/realtime/types.js +19 -1
  639. package/dist/server/src/lib/realtime/waiting-broadcast.js +25 -0
  640. package/dist/server/src/lib/relay/relay-delivery.js +400 -0
  641. package/dist/server/src/lib/relay/relay-messages.js +144 -0
  642. package/dist/server/src/lib/relay/relay-policy.js +127 -0
  643. package/dist/server/src/lib/relay/relay-readiness.js +63 -0
  644. package/dist/server/src/lib/relay/relay-session-ref.js +72 -0
  645. package/dist/server/src/lib/relay/relay-system-line.js +79 -0
  646. package/dist/server/src/lib/relay/relay-triggers.js +177 -0
  647. package/dist/server/src/lib/relay/types.js +25 -0
  648. package/dist/server/src/lib/session/agent-event-state.js +344 -12
  649. package/dist/server/src/lib/session/current-output-builder.js +18 -0
  650. package/dist/server/src/lib/session/send-user-message.js +1 -0
  651. package/package.json +1 -1
  652. package/.next/server/chunks/1058.js +0 -1
  653. package/.next/server/chunks/1068.js +0 -1
  654. package/.next/server/chunks/1990.js +0 -103
  655. package/.next/server/chunks/261.js +0 -1
  656. package/.next/server/chunks/2739.js +0 -1
  657. package/.next/server/chunks/2839.js +0 -1
  658. package/.next/server/chunks/3869.js +0 -1
  659. package/.next/server/chunks/4325.js +0 -1
  660. package/.next/server/chunks/4393.js +0 -1
  661. package/.next/server/chunks/5017.js +0 -1
  662. package/.next/server/chunks/5120.js +0 -1
  663. package/.next/server/chunks/552.js +0 -25
  664. package/.next/server/chunks/6130.js +0 -1
  665. package/.next/server/chunks/6894.js +0 -8
  666. package/.next/server/chunks/7187.js +0 -1
  667. package/.next/server/chunks/7472.js +0 -1
  668. package/.next/server/chunks/7836.js +0 -1
  669. package/.next/server/chunks/7859.js +0 -21
  670. package/.next/server/chunks/9696.js +0 -3
  671. package/.next/server/chunks/9798.js +0 -2
  672. package/.next/static/GiOqe8rfQGQ0NvzB5qr3q/_buildManifest.js +0 -1
  673. package/.next/static/chunks/1783-11c9b4d8a52ebd91.js +0 -1
  674. package/.next/static/chunks/4718-0d4d93c4c75f336e.js +0 -1
  675. package/.next/static/chunks/6170-951b9f5fe6b4b3b5.js +0 -1
  676. package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +0 -1
  677. package/.next/static/chunks/8593-fa0eb2802e0ce68a.js +0 -1
  678. package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +0 -1
  679. package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +0 -1
  680. package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +0 -1
  681. package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +0 -1
  682. package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +0 -1
  683. package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +0 -1
  684. package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +0 -1
  685. package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +0 -1
  686. package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +0 -1
  687. package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +0 -1
  688. package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +0 -1
  689. package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +0 -1
  690. package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +0 -1
  691. package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +0 -1
  692. package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +0 -1
  693. package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +0 -1
  694. package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +0 -1
  695. package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +0 -1
  696. package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +0 -1
  697. package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +0 -1
  698. package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +0 -1
  699. package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +0 -1
  700. package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +0 -1
  701. package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +0 -1
  702. package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +0 -1
  703. package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +0 -1
  704. package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +0 -1
  705. package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +0 -1
  706. package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +0 -1
  707. package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +0 -1
  708. package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +0 -1
  709. package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +0 -1
  710. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
  711. package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
  712. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +0 -1
  713. package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +0 -1
  714. package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +0 -1
  715. package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +0 -1
  716. package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +0 -1
  717. package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +0 -1
  718. package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +0 -1
  719. package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +0 -1
  720. package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +0 -1
  721. package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +0 -1
  722. package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +0 -1
  723. package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +0 -1
  724. package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +0 -1
  725. package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +0 -1
  726. package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +0 -1
  727. package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +0 -1
  728. package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
  729. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
  730. package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +0 -1
  731. package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +0 -1
  732. package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +0 -1
  733. package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +0 -1
  734. package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
  735. package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +0 -1
  736. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +0 -1
  737. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +0 -1
  738. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +0 -1
  739. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +0 -1
  740. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +0 -1
  741. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +0 -1
  742. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +0 -1
  743. package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +0 -1
  744. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +0 -1
  745. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +0 -1
  746. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +0 -1
  747. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +0 -1
  748. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +0 -1
  749. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +0 -1
  750. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +0 -1
  751. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +0 -1
  752. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +0 -1
  753. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +0 -1
  754. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +0 -1
  755. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +0 -1
  756. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +0 -1
  757. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +0 -1
  758. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +0 -1
  759. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +0 -1
  760. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +0 -1
  761. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +0 -1
  796. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +0 -1
  797. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +0 -1
  798. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +0 -1
  799. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
  800. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +0 -1
  801. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +0 -1
  802. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +0 -1
  803. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +0 -1
  804. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +0 -1
  805. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
  806. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
  807. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +0 -1
  808. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +0 -1
  809. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +0 -1
  810. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +0 -1
  811. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +0 -1
  812. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
  813. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
  814. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +0 -1
  815. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +0 -1
  816. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +0 -1
  817. package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +0 -1
  818. package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +0 -1
  819. package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +0 -1
  820. package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +0 -1
  821. package/.next/static/chunks/app/worktrees/[id]/page-7a0915e32a2af4d3.js +0 -1
  822. package/.next/static/chunks/webpack-9f75198882fdaf08.js +0 -1
  823. package/.next/static/css/5c13ea243dfdcb66.css +0 -1
  824. /package/.next/static/{GiOqe8rfQGQ0NvzB5qr3q → UIUPchtWvcEuQgcbGJv4g}/_ssgManifest.js +0 -0
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * The vocabulary of a session-to-session relay (Issue #2377).
4
+ *
5
+ * Kept in its own module because both halves of the process read it — the
6
+ * server modules that create, deliver and expire a relay, and the browser hook
7
+ * that draws the badges — and neither may pull the other's graph in. Nothing
8
+ * here touches a database, a socket or a DOM.
9
+ *
10
+ * @module lib/relay/types
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.OPEN_RELAY_STATES = void 0;
14
+ exports.isOpenRelayState = isOpenRelayState;
15
+ exports.emptyRelayCounts = emptyRelayCounts;
16
+ /** The states from which a relay can still produce a delivery. */
17
+ exports.OPEN_RELAY_STATES = ['pending', 'prompt'];
18
+ /** Whether this state can still produce a delivery. */
19
+ function isOpenRelayState(state) {
20
+ return exports.OPEN_RELAY_STATES.includes(state);
21
+ }
22
+ /** An empty {@link RelayCounts}. */
23
+ function emptyRelayCounts() {
24
+ return { pending: 0, delivered: 0, prompt: 0, expired: 0, cancelled: 0 };
25
+ }
@@ -39,7 +39,10 @@
39
39
  * @module lib/session/agent-event-state
40
40
  */
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.LIFECYCLE_AGENT_EVENT_TYPES = exports.STRUCTURED_PROMPT_PROVISIONAL_MAX_AGE_MS = exports.STRUCTURED_STATE_MAX_AGE_MS = exports.AGENT_EVENT_DEDUP_WINDOW_MS = void 0;
42
+ exports.LIFECYCLE_AGENT_EVENT_TYPES = exports.STRUCTURED_PROMPT_PROVISIONAL_MAX_AGE_MS = exports.STRUCTURED_STATE_MAX_AGE_MS = exports.AGENT_EVENT_DEDUP_WINDOW_MS = exports.AGENT_MODEL_EFFORT_SUFFIX_PATTERN = void 0;
43
+ exports.isSameAgentModelName = isSameAgentModelName;
44
+ exports.onAgentModelChange = onAgentModelChange;
45
+ exports.getAgentModelBaseline = getAgentModelBaseline;
43
46
  exports.getAgentEventDropCounts = getAgentEventDropCounts;
44
47
  exports.getPendingDecisions = getPendingDecisions;
45
48
  exports.getAgentTurn = getAgentTurn;
@@ -156,8 +159,9 @@ const awaitingInstruction = globalThis.__agentEventAwaitingInstruction ??
156
159
  *
157
160
  * A *separate* map, not a field read off {@link lastAgentEvent}, and that is the
158
161
  * whole point of it. `lastAgentEvent` is replaced wholesale on every delivery,
159
- * and Claude puts the model on `SessionStart` and on nothing else — so the very
160
- * next `UserPromptSubmit` would overwrite the only record that ever knew it, and
162
+ * and Claude puts the model on `SessionStart` and on a `PostModelSwitch`
163
+ * (Issue #2363) and on nothing else so the very next `UserPromptSubmit` would
164
+ * overwrite the only record that ever knew it, and
161
165
  * the UI would show the model for the fraction of a second between session start
162
166
  * and the first prompt. Keeping the last *non-null* sighting separately is what
163
167
  * makes "which model is this session on" answerable at all for that tool.
@@ -168,6 +172,22 @@ const awaitingInstruction = globalThis.__agentEventAwaitingInstruction ??
168
172
  */
169
173
  const lastAgentModel = globalThis.__agentEventLastModel ??
170
174
  (globalThis.__agentEventLastModel = new Map());
175
+ /**
176
+ * compositeKey -> epoch ms of the report that last wrote {@link lastAgentModel}
177
+ * (Issue #2361).
178
+ *
179
+ * Kept so the frame can be judged NEWER than the hook. When #2361 was measured
180
+ * on 2.1.263, Claude named its model on `SessionStart` and on nothing
181
+ * CommandMate registered — `/model` fired none of the seven events, and the
182
+ * `SessionStart` a `/clear` emits carries no `model` key — so after a switch
183
+ * the hook latch was a true statement about a process that had since changed
184
+ * its mind, and the screen was the only channel that heard it. Issue #2363
185
+ * registers `PostModelSwitch`, which re-stamps this on every switch; the stamp
186
+ * now matters for the sessions where that hook does not arrive. See
187
+ * {@link resolveAgentModel}.
188
+ */
189
+ const lastAgentModelAt = globalThis.__agentEventLastModelAt ??
190
+ (globalThis.__agentEventLastModelAt = new Map());
171
191
  /**
172
192
  * compositeKey -> what the terminal frame last showed for this instance (#1784).
173
193
  *
@@ -216,6 +236,186 @@ const capturedModelInfo = globalThis.__agentCapturedModelInfo ??
216
236
  */
217
237
  const reportedEffort = globalThis.__agentEventLastEffort ??
218
238
  (globalThis.__agentEventLastEffort = new Map());
239
+ /**
240
+ * compositeKey -> the model this instance was last observed on (Issue #2357).
241
+ *
242
+ * A *fourth* map beside the three latches rather than a comparison against
243
+ * them, because the latches are what they are for a reason: each remembers the
244
+ * last non-null value its channel produced, and none of them can say "and the
245
+ * value before that". This map holds exactly that — the previous answer of
246
+ * {@link getResolvedAgentModelInfo} — so a write to either latch can be judged
247
+ * as "same model", "first sighting" or "changed" without re-deriving history
248
+ * from maps that never kept it.
249
+ *
250
+ * Cleared wherever the latches are cleared (generation, discard, test seam) and
251
+ * on `session_start`, so the first model a new agent process reports is
252
+ * recorded as its starting model and announced to nobody.
253
+ */
254
+ const modelBaseline = globalThis.__agentModelBaseline ??
255
+ (globalThis.__agentModelBaseline = new Map());
256
+ /**
257
+ * Listeners for the model edge, on `globalThis` for the reason the maps above
258
+ * are: under `next dev` each route bundle evaluates this module once, and the
259
+ * hook route (which writes the hook latch) and the status poll (which writes
260
+ * the frame latch) are different bundles. A module-scoped set would let each
261
+ * bundle notify only the listeners registered in the same bundle — which is
262
+ * none, for the one that receives the hook.
263
+ */
264
+ const modelChangeListeners = globalThis.__agentModelChangeListeners ??
265
+ (globalThis.__agentModelChangeListeners = new Set());
266
+ /**
267
+ * A trailing reasoning-effort token in a model id (`gemini-3.7-flash-high`).
268
+ *
269
+ * The same five words `model-info-extractor` recognises, matched only at the
270
+ * very end and only after a separator, so `gpt-5-mini` keeps its `mini` and a
271
+ * model that merely ends in these letters is untouched. agy encodes the effort
272
+ * in the id it reports on every event (`deriveEffortFromModelId`), and a user
273
+ * moving the same model from `high` to `low` has not changed model.
274
+ */
275
+ exports.AGENT_MODEL_EFFORT_SUFFIX_PATTERN = /[-_ ](?:minimal|low|medium|high|xhigh)$/i;
276
+ /**
277
+ * Tokens a display label carries that the id does not, dropped before comparing.
278
+ *
279
+ * Measured pairs only: claude's banner reads `Opus 5 (1M context)` for the id
280
+ * `claude-opus-5[1m]` — the `1m` is part of the model, the word is not.
281
+ */
282
+ const MODEL_LABEL_NOISE_PATTERN = /\bcontext\b/gi;
283
+ /** Lowercase alphanumerics, effort suffix and label-only words removed. */
284
+ function modelNameKey(value) {
285
+ return value
286
+ .replace(exports.AGENT_MODEL_EFFORT_SUFFIX_PATTERN, '')
287
+ .replace(MODEL_LABEL_NOISE_PATTERN, '')
288
+ .toLowerCase()
289
+ .replace(/[^a-z0-9]/g, '');
290
+ }
291
+ /**
292
+ * Do two model names name the same model? (Issue #2357)
293
+ *
294
+ * Within one channel the answer is exact on alphanumerics — `GPT-5 mini` and
295
+ * `gpt-5-mini` are one model rendered two ways (copilot's bar and its notice,
296
+ * both read off the frame), while `gpt-5` and `gpt-5-mini` are two models and
297
+ * the second is precisely the downgrade this Issue exists to announce. The
298
+ * effort suffix is stripped first, because agy's id carries it and an effort
299
+ * change is not a model change.
300
+ *
301
+ * *Across* channels the rule is widened to containment: the hook reports an
302
+ * id, the screen prints a label, and every measured pair is the label's key
303
+ * inside the id's (`gemini37flash` ⊂ `gemini37flashhigh`, `opus51m` ⊂
304
+ * `claudeopus51m`, `claudesonnet46` ⊂ `anthropicclaudesonnet46`). Containment
305
+ * is NOT applied within a channel — it would fold `gpt-5` into `gpt-5-mini` —
306
+ * and a caller has to say which case it is in.
307
+ *
308
+ * Exported for the tests and for anything that has to agree with this module
309
+ * about identity; deliberately local rather than the extractor's `sameModel`,
310
+ * which is a single-channel exact match and is shared with #2358's edit.
311
+ */
312
+ function isSameAgentModelName(a, b, options = {}) {
313
+ const ka = modelNameKey(a);
314
+ const kb = modelNameKey(b);
315
+ if (ka === kb)
316
+ return true;
317
+ if (!options.crossSource)
318
+ return false;
319
+ if (ka.length === 0 || kb.length === 0)
320
+ return false;
321
+ return ka.includes(kb) || kb.includes(ka);
322
+ }
323
+ /**
324
+ * Subscribe to the model edge (Issue #2357).
325
+ *
326
+ * The listener receives every transition {@link observeAgentModel} judged to be
327
+ * a change — never a first sighting, never a value going quiet. `#2357`'s
328
+ * realtime broadcaster and push notifier are the two subscribers; neither keeps
329
+ * a "what was it last time?" of its own, which is the point of this being an
330
+ * edge rather than a level.
331
+ *
332
+ * @returns The unsubscribe function
333
+ */
334
+ function onAgentModelChange(listener) {
335
+ modelChangeListeners.add(listener);
336
+ return () => {
337
+ modelChangeListeners.delete(listener);
338
+ };
339
+ }
340
+ /** Deliver one change; a listener that throws must not disturb the write that observed it. */
341
+ function emitAgentModelChange(change) {
342
+ for (const listener of modelChangeListeners) {
343
+ try {
344
+ listener(change);
345
+ }
346
+ catch {
347
+ // Advisory. The hook route and the status poll are the callers, and a
348
+ // notification failure is not a reason to fail either.
349
+ }
350
+ }
351
+ }
352
+ /**
353
+ * The model this instance was last observed on, or null. Test seam.
354
+ */
355
+ function getAgentModelBaseline(worktreeId, cliToolId, instanceId) {
356
+ return modelBaseline.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
357
+ }
358
+ /**
359
+ * Judge the resolved model after a latch wrote, and announce a change
360
+ * (Issue #2357).
361
+ *
362
+ * Called after every write to {@link lastAgentModel} and
363
+ * {@link capturedModelInfo}, with the channel that wrote. What it compares is
364
+ * {@link getResolvedAgentModelInfo}'s *model* — the merged value the UI shows —
365
+ * against the previous merged value this map remembers. The suppression rules,
366
+ * each of which is a measured false positive:
367
+ *
368
+ * - **`null → value`** (first report, server restart): recorded as the
369
+ * starting model, announced to nobody.
370
+ * - **`value → null`**: cannot reach here — the latches never write null, so
371
+ * a frame that stopped showing the banner leaves the merged value where it
372
+ * was. A generation reset clears this map along with the latches, so the
373
+ * next value is a first sighting again.
374
+ * - **same name, either channel**: `GPT-5 mini` after `gpt-5-mini` is not a
375
+ * change. Compared with {@link isSameAgentModelName}; the cross-channel
376
+ * widening applies only when the merged value's source actually moved.
377
+ * - **`session_start`**: {@link recordAgentEvent} drops the baseline first, so
378
+ * the model a relaunched process reports is that process's starting model.
379
+ *
380
+ * Everything else is a change and is emitted exactly once — the baseline is
381
+ * advanced before the listeners run, so a listener that re-enters this module
382
+ * cannot see the same edge twice.
383
+ */
384
+ function observeAgentModel(worktreeId, cliToolId, instanceId, source, at) {
385
+ const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
386
+ // Where the merged value came from is decided in one place
387
+ // (`resolveAgentModel`, Issue #2361): the hook's, unless the frame overtook
388
+ // it — and that is independent of which channel just wrote.
389
+ const { info, source: resolvedSource } = resolveAgentModel(key, cliToolId);
390
+ const resolved = info.model;
391
+ if (resolved === null || resolvedSource === null)
392
+ return;
393
+ const previous = modelBaseline.get(key);
394
+ const next = { model: resolved, source: resolvedSource };
395
+ if (previous === undefined) {
396
+ modelBaseline.set(key, next);
397
+ trimOldestEntries(modelBaseline, MAX_RECENT_EVENT_KEYS);
398
+ return;
399
+ }
400
+ if (isSameAgentModelName(previous.model, resolved, {
401
+ crossSource: previous.source !== resolvedSource,
402
+ })) {
403
+ // Same model, possibly a new spelling or a new channel: follow it so the
404
+ // next comparison is against the current representation.
405
+ modelBaseline.set(key, next);
406
+ return;
407
+ }
408
+ modelBaseline.set(key, next);
409
+ emitAgentModelChange({
410
+ worktreeId,
411
+ cliToolId,
412
+ instanceId: instanceId ?? cliToolId,
413
+ from: previous.model,
414
+ to: resolved,
415
+ source,
416
+ at,
417
+ });
418
+ }
219
419
  /**
220
420
  * How long two identical events count as one delivery.
221
421
  *
@@ -542,10 +742,20 @@ function recordAgentEvent(worktreeId, cliToolId, instanceId, record, options = {
542
742
  // then dropped on the floor. copilot reports none today (#1783), which is
543
743
  // exactly why this has to be decided here rather than left to be noticed.
544
744
  latchAgentModel(key, record);
745
+ observeAgentModel(worktreeId, cliToolId, instanceId, 'hook', record.at);
545
746
  return { recorded: false, skipped: 'late-session-start' };
546
747
  }
547
748
  lastAgentEvent.set(key, record);
749
+ if (record.event === 'session_start') {
750
+ // Issue #2357: a new agent process, whatever model it names first is its
751
+ // STARTING model — recorded below, announced to nobody. Dropped before the
752
+ // latch so the comparison in `observeAgentModel` has nothing to compare
753
+ // against. `/clear` (session_end + session_start on the same process, same
754
+ // model) passes through here unchanged: same name, no edge either way.
755
+ modelBaseline.delete(key);
756
+ }
548
757
  latchAgentModel(key, record);
758
+ observeAgentModel(worktreeId, cliToolId, instanceId, 'hook', record.at);
549
759
  applyAskUserQuestionTransition(key, record);
550
760
  if (record.event === 'session_start') {
551
761
  // The agent restarting inside a pane CommandMate never touched — `claude`
@@ -600,12 +810,17 @@ function fenceTurnForNewGeneration(key, at) {
600
810
  }
601
811
  /**
602
812
  * Issue #1783: latch, never clear. An event without a model is the ordinary
603
- * case (Claude sends one on `SessionStart` alone), and reading it as "the model
604
- * is now unknown" would blank the display on the very next event.
813
+ * case (Claude sends one on `SessionStart` and, since #2363, on a model
814
+ * switch), and reading it as "the model is now unknown" would blank the display
815
+ * on the very next event.
605
816
  */
606
817
  function latchAgentModel(key, record) {
607
818
  if (typeof record.model === 'string' && record.model !== '') {
608
819
  lastAgentModel.set(key, record.model.slice(0, agent_event_types_1.MAX_EVENT_DETAIL_LENGTH));
820
+ // Issue #2361: stamped on every model-bearing report, not only on a change
821
+ // of value — a hook that names the same model again is the agent
822
+ // re-affirming it, and a frame has to be newer than THAT to overtake.
823
+ lastAgentModelAt.set(key, record.at);
609
824
  }
610
825
  }
611
826
  /**
@@ -1110,8 +1325,9 @@ function getLastAgentEvent(worktreeId, cliToolId, instanceId) {
1110
1325
  *
1111
1326
  * "Last **non-null**", which is the only useful reading: three of the four tools
1112
1327
  * that publish a model publish it on some events and not others, and Claude
1113
- * publishes it on exactly one. Reading `getLastAgentEvent()?.model` would
1114
- * therefore answer null for almost every moment of almost every session.
1328
+ * publishes it on two (`SessionStart`, and each switch since #2363). Reading
1329
+ * `getLastAgentEvent()?.model` would therefore answer null for almost every
1330
+ * moment of almost every session.
1115
1331
  *
1116
1332
  * Deliberately **not** bounded by {@link STRUCTURED_STATE_MAX_AGE_MS}, unlike
1117
1333
  * every other reader in this module. That bound exists because a *status* that
@@ -1149,15 +1365,29 @@ function getLastKnownAgentModel(worktreeId, cliToolId, instanceId) {
1149
1365
  *
1150
1366
  * @param info - {@link import('../../lib/detection/model-info-extractor').extractModelInfo}'s answer
1151
1367
  */
1152
- function recordCapturedModelInfo(worktreeId, cliToolId, instanceId, info) {
1368
+ function recordCapturedModelInfo(worktreeId, cliToolId, instanceId, info, at = Date.now()) {
1153
1369
  if (!info.model && !info.effort)
1154
1370
  return;
1155
1371
  const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
1156
1372
  const previous = capturedModelInfo.get(key);
1373
+ const model = info.model ? info.model.slice(0, agent_event_types_1.MAX_EVENT_DETAIL_LENGTH) : (previous?.model ?? null);
1157
1374
  capturedModelInfo.set(key, {
1158
- model: info.model ? info.model.slice(0, agent_event_types_1.MAX_EVENT_DETAIL_LENGTH) : (previous?.model ?? null),
1375
+ model,
1159
1376
  effort: info.effort ?? previous?.effort ?? null,
1377
+ // Issue #2361: the change stamp moves only when the model half takes a
1378
+ // different value. A banner re-read on every poll keeps the stamp where the
1379
+ // first sighting put it, so it never out-dates a hook by mere repetition.
1380
+ modelChangedAt: model === null
1381
+ ? null
1382
+ : model === (previous?.model ?? null)
1383
+ ? (previous?.modelChangedAt ?? at)
1384
+ : at,
1160
1385
  });
1386
+ // Issue #2357: an effort-only frame leaves the model half where it was, so
1387
+ // there is nothing to judge; a frame that named a model is the screen's
1388
+ // report and is compared against what this instance was last seen on.
1389
+ if (info.model)
1390
+ observeAgentModel(worktreeId, cliToolId, instanceId, 'frame', at);
1161
1391
  }
1162
1392
  /**
1163
1393
  * The last model/effort a terminal capture showed, both halves possibly null.
@@ -1178,18 +1408,107 @@ function getLastCapturedModelInfo(worktreeId, cliToolId, instanceId) {
1178
1408
  * (#1783) together with the screen under the precedence documented on
1179
1409
  * {@link mergeModelInfo} — hooks win for the model, the screen is the only
1180
1410
  * source of effort for codex/claude, and antigravity's effort is derived from
1181
- * the id it reports rather than from its (renderer-truncated) status bar.
1411
+ * the id it reports rather than from its (renderer-truncated) status bar
1412
+ * with the one exception {@link resolveAgentModel} documents (Issue #2361): a
1413
+ * claude frame that started naming a different model after the hook last
1414
+ * spoke is the newer statement, and wins.
1182
1415
  *
1183
1416
  * Both halves may be null, and routinely are: no tool publishes an effort over
1184
1417
  * hooks, and most tools publish neither. Callers omit the key rather than
1185
1418
  * emitting null — see `CliToolSessionStatus`.
1186
1419
  */
1187
1420
  function getResolvedAgentModelInfo(worktreeId, cliToolId, instanceId) {
1188
- return (0, model_info_extractor_1.mergeModelInfo)(cliToolId, getLastKnownAgentModel(worktreeId, cliToolId, instanceId), getLastCapturedModelInfo(worktreeId, cliToolId, instanceId),
1421
+ return resolveAgentModel((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), cliToolId).info;
1422
+ }
1423
+ /**
1424
+ * Tools whose hook channel may name the model at session start and never again
1425
+ * (Issue #2361).
1426
+ *
1427
+ * For these, a frame that starts naming a DIFFERENT model after the hook last
1428
+ * spoke may be the only report of a mid-session switch there is, and it
1429
+ * overtakes the hook in {@link resolveAgentModel}. For every other tool the
1430
+ * rule stays #1784's — hooks win — because their hook channel re-reports the
1431
+ * model on later events (codex and antigravity on every one, opencode on every
1432
+ * `message.updated`), so a switch reaches the hook latch by itself and a frame
1433
+ * that disagrees with a hook that is still re-affirming its value is a
1434
+ * misread, not news.
1435
+ *
1436
+ * Measured on claude 2.1.263 for #2361: `SessionStart` alone carried `model`
1437
+ * among the events then registered; `/model`, `/fast` and `/effort` fired none
1438
+ * of them; the `SessionStart` that `/clear` emits carries no `model`.
1439
+ *
1440
+ * Issue #2363 registers `PostModelSwitch`, so on 2.1.263 and later the hook
1441
+ * DOES re-report every `/model` and `/fast` that changes the model, in the
1442
+ * `SessionStart` spelling (`claude-sonnet-5`, `claude-opus-5[1m]`). Claude
1443
+ * stays on this list all the same, as the **fallback** rather than the rule,
1444
+ * and the two cases the rule exists for were weighed against each other:
1445
+ *
1446
+ * - *The hook re-reports.* The switch lands here as a hook write, stamping
1447
+ * {@link lastAgentModelAt}; the pane re-reads the rewritten banner or the
1448
+ * confirmation line moments later and names the same model in its label
1449
+ * spelling, which {@link isSameAgentModelName} (cross-channel) folds into
1450
+ * the hook's exact id. The frame does not overtake, the hook's id is what
1451
+ * is published, and the edge fires once. Nothing in this rule had to change
1452
+ * for that — it was written to defer to a hook that re-affirms.
1453
+ * - *The hook does not arrive.* A claude older than the hook, a session
1454
+ * launched without injection (`CM_AGENT_HOOKS_INJECT=0`, a hand-written
1455
+ * `--settings`), a delivery lost to a wedged server or the 3 s
1456
+ * de-duplication window: the latch is stale, the frame is the only channel
1457
+ * that heard the switch, and this rule is what publishes it. Removing the
1458
+ * tool from this set would take that back to the #2361 symptom — a stale
1459
+ * id shown with no edge — on precisely the sessions that have no other way
1460
+ * of reporting.
1461
+ *
1462
+ * The price of keeping it is the case #2361 already carried: a frame that
1463
+ * starts showing a stale confirmation line AFTER the hook spoke (the banner
1464
+ * scrolls away, an older `Set model to …` row becomes the fallback the
1465
+ * extractor reads) overtakes a hook that was right. That was possible before
1466
+ * #2363 — with a staler hook value underneath — and is no wider now; a switch
1467
+ * whose confirmation line the extractor does read leaves the newer row on the
1468
+ * pane, so the stale row is reachable only after a `/fast` or an automatic
1469
+ * fallback, and only until the next `/model` line or hook.
1470
+ */
1471
+ const FRAME_OVERTAKES_HOOK_MODEL_TOOLS = new Set(['claude']);
1472
+ /**
1473
+ * The merged model/effort for one instance, and which channel the model half
1474
+ * came from (Issue #2361).
1475
+ *
1476
+ * {@link mergeModelInfo}'s precedence — hooks win the model — with one
1477
+ * exception layered on top for {@link FRAME_OVERTAKES_HOOK_MODEL_TOOLS}: when
1478
+ * the frame's model half CHANGED after the hook last named a model
1479
+ * ({@link CapturedModelRecord.modelChangedAt} > {@link lastAgentModelAt}) and
1480
+ * the two do not name the same model ({@link isSameAgentModelName}, cross
1481
+ * channel), the frame's value is the newer statement and is published in the
1482
+ * hook's place. Every other case is unchanged:
1483
+ *
1484
+ * - the frame names the same model as the hook (the startup banner after
1485
+ * `SessionStart`, or `/model` back to the model the hook named): the hook's
1486
+ * exact id is published, as before;
1487
+ * - the frame's value predates the hook (a switch line still on screen when a
1488
+ * relaunched process reports its starting model): the hook wins;
1489
+ * - no hook has spoken: the frame is the only source, as before.
1490
+ *
1491
+ * `source` is null when neither channel has a model.
1492
+ */
1493
+ function resolveAgentModel(key, cliToolId) {
1494
+ const hooksModel = lastAgentModel.get(key) ?? null;
1495
+ const captured = capturedModelInfo.get(key);
1496
+ const capturedInfo = { model: captured?.model ?? null, effort: captured?.effort ?? null };
1189
1497
  // Issue #2048: the third source. Null for every tool but opencode and for
1190
1498
  // every opencode session running on a model's default, so every other
1191
1499
  // surface's string is byte-identical to pre-#2048.
1192
- getLastReportedAgentEffort(worktreeId, cliToolId, instanceId));
1500
+ const hooksEffort = reportedEffort.get(key) ?? null;
1501
+ const frameChangedAt = captured?.modelChangedAt ?? null;
1502
+ const frameOvertakes = hooksModel !== null &&
1503
+ capturedInfo.model !== null &&
1504
+ frameChangedAt !== null &&
1505
+ FRAME_OVERTAKES_HOOK_MODEL_TOOLS.has(cliToolId) &&
1506
+ frameChangedAt > (lastAgentModelAt.get(key) ?? 0) &&
1507
+ !isSameAgentModelName(hooksModel, capturedInfo.model, { crossSource: true });
1508
+ const info = (0, model_info_extractor_1.mergeModelInfo)(cliToolId, frameOvertakes ? null : hooksModel, capturedInfo, hooksEffort);
1509
+ if (info.model === null)
1510
+ return { info, source: null };
1511
+ return { info, source: hooksModel !== null && !frameOvertakes ? 'hook' : 'frame' };
1193
1512
  }
1194
1513
  /**
1195
1514
  * Latch the effort (opencode's *variant*) the agent named for itself (#2048).
@@ -1281,6 +1600,7 @@ function beginAgentEventGeneration(worktreeId, cliToolId, instanceId, at = Date.
1281
1600
  // A `/clear` is deliberately not affected: it reaches `recordAgentEvent` as
1282
1601
  // `session_end` + `session_start`, never this function.
1283
1602
  lastAgentModel.delete(key);
1603
+ lastAgentModelAt.delete(key);
1284
1604
  // Issue #1784: same argument for what the screen showed. The latch exists to
1285
1605
  // survive the banner scrolling away *within* one process; carrying it across
1286
1606
  // a relaunch would show the old process's effort with no frame left that
@@ -1289,6 +1609,10 @@ function beginAgentEventGeneration(worktreeId, cliToolId, instanceId, at = Date.
1289
1609
  // Issue #2048: and the variant the agent named, for exactly #1783's reason —
1290
1610
  // the new process may have been launched with a different one, or with none.
1291
1611
  reportedEffort.delete(key);
1612
+ // Issue #2357: and the model this instance was last seen on. The next value
1613
+ // is a new process's starting model (`null → value`), not a change from the
1614
+ // process that was replaced.
1615
+ modelBaseline.delete(key);
1292
1616
  // Issue #1899: the ids claimed for this key were issued by the process that
1293
1617
  // has just been replaced. Unlike the time-window keys, they never expire on
1294
1618
  // their own, so a generation is the only thing that retires them.
@@ -1323,10 +1647,13 @@ function discardAgentEventState(worktreeId, cliToolId, instanceId) {
1323
1647
  awaitingInstruction.delete(key);
1324
1648
  // Issue #1783: the session that was on this model no longer exists.
1325
1649
  lastAgentModel.delete(key);
1650
+ lastAgentModelAt.delete(key);
1326
1651
  // Issue #1784: nor does the pane its footer was read from.
1327
1652
  capturedModelInfo.delete(key);
1328
1653
  // Issue #2048: nor the variant that session was running at.
1329
1654
  reportedEffort.delete(key);
1655
+ // Issue #2357: nor the model it was last seen on.
1656
+ modelBaseline.delete(key);
1330
1657
  // Issue #1899: nor do the frame ids that session issued.
1331
1658
  recentEventIdentities.delete(key);
1332
1659
  }
@@ -1914,8 +2241,13 @@ function clearAgentStopEvents() {
1914
2241
  // repo shares this process — a model latched by one test would otherwise be
1915
2242
  // read by another, in file order, and only in CI.
1916
2243
  lastAgentModel.clear();
2244
+ lastAgentModelAt.clear();
1917
2245
  // Issue #1784: and the same for the scraped half.
1918
2246
  capturedModelInfo.clear();
1919
2247
  // Issue #2048: and for the variant the agent reported.
1920
2248
  reportedEffort.clear();
2249
+ // Issue #2357: and for the model each instance was last seen on. The
2250
+ // listener set is deliberately NOT cleared — a subscription belongs to the
2251
+ // process, not to a session, and a suite that armed one expects it to stay.
2252
+ modelBaseline.clear();
1921
2253
  }
@@ -686,6 +686,23 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
686
686
  const scraperPromptWaiting = statusResult.hasActivePrompt;
687
687
  const isSelectionListActive = statusResult.status === 'waiting' && status_detector_1.SELECTION_LIST_REASONS.has(statusResult.reason);
688
688
  const isPagerActive = statusResult.reason === status_detector_1.STATUS_REASON.CODEX_PAGER;
689
+ // Issue #2369: an overlay whose ONLY exit is the dismiss — Command Code's
690
+ // `/usage` panel, whose last row is `Press Esc to close`.
691
+ //
692
+ // A THIRD flag rather than a member of `SELECTION_LIST_REASONS`, and the
693
+ // separation is the fix rather than a nicety: `isSelectionListActive` is what
694
+ // the arrow pad is drawn from, and this screen has no highlight to move. Nor
695
+ // is it `isUnclassifiedActive` any more — the detector answers `waiting` for
696
+ // it, and `isUnclassifiedFrame` only ever says yes to `running` — which is
697
+ // exactly what stops the chat surface offering the eighteen-button
698
+ // hatch + answer-key card to a panel that accepts one key.
699
+ //
700
+ // `status === 'waiting'` is checked as well as the reason, the same shape
701
+ // `isSelectionListActive` above uses, so a future producer that publishes the
702
+ // token with some other status cannot silently turn the card into an Esc
703
+ // button.
704
+ const isDismissablePanelActive = statusResult.status === 'waiting'
705
+ && statusResult.reason === status_detector_1.STATUS_REASON.COMMAND_CODE_DISMISSABLE_PANEL;
689
706
  // Issue #1497: the detection-independent nav hatch (#1017/#1494) is gated on
690
707
  // isUnclassifiedActive. A static, unrecognized TUI overlay (e.g. Claude `/help`)
691
708
  // whose frame stops changing degrades from `running`/`default` to
@@ -993,6 +1010,7 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
993
1010
  },
994
1011
  isSelectionListActive,
995
1012
  isPagerActive,
1013
+ isDismissablePanelActive,
996
1014
  isUnclassifiedActive: merged.isUnclassifiedActive,
997
1015
  // Issue #1926: the same fact `isUnclassifiedActive` carries, named the way
998
1016
  // §4 D1 names it. Published from the merged verdict so the two cannot
@@ -203,6 +203,7 @@ async function sendUserMessage(db, params) {
203
203
  timestamp: userMessageTimestamp,
204
204
  cliToolId,
205
205
  instanceId,
206
+ requestId: params.requestId,
206
207
  });
207
208
  // 5b. Broadcast the user row (Issue #2195).
208
209
  //
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.31.2",
3
+ "version": "0.32.0",
4
4
  "description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -1 +0,0 @@
1
- "use strict";exports.id=1058,exports.ids=[1058,4325],exports.modules={1058:(a,b,c)=>{c.d(b,{$v:()=>P,emitChatTurnProgress:()=>W});var d=c(56791);let e=globalThis.__unclassifiedFrameRuns??(globalThis.__unclassifiedFrameRuns=new Map);var f=c(94154),g=c(63209),h=c(51297),i=c(76777),j=c(50524);let k=/^([^\S\n]*)╹(▀{4,})/,l=/^([^\S\n]*)[│┃]/;var m=c(54325),n=c(81254),o=c(72626),p=c(43234),q=c(15194),r=c(129),s=c(66101),t=c(53163),u=c(17287),v=c(15388),w=c(3161),x=c(49154),y=c(62171),z=c(97751),A=c(31990),B=c(95595),C=c(45017),D=c(52277),E=c(44321),F=c(34405),G=c(93997),H=c(48083),I=c(30008),J=c(24581),K=c(40043),L=c(9516),M=c(36051);let N=(0,o.h)("current-output-builder");function O(a,b){Promise.all([c.e(1503),c.e(1719),c.e(6894),c.e(7836)]).then(c.bind(c,79129)).then(({broadcastMessage:c})=>{c("message",{worktreeId:a,message:b})}).catch(b=>{N.warn("history-row-broadcast-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)})})}async function P(a,b,c,d,e){let f=await Q(a,b,c,d);return(f.isRunning&&"running"===f.sessionStatus&&await X(a,b,c,d),e)?{...f,resolvedBy:e.resolvedBy,conflict:e.conflict??null}:f}async function Q(a,b,c,m){let o=m??c,P=p.CLIToolManager.getInstance().getTool(c),Q=(0,H.CE)(b,c,m),R=(0,H.getLastAgentEvent)(b,c,m),S=(0,r.VM)(c),T=Date.now(),U=(0,H.NW)(b,c,m,T),V=(0,H.BJ)(b,c,m,T),W=(0,w.Jl)(b,c,m),X={lastEventType:R?.event??null,lastEventAt:R?.at??null,lastEventDetail:R?.detail??null,...(0,H.fY)(b,c,m,T),pendingDecisions:U.map(a=>{let b=(0,x.Wk)(a.toolName);return{id:a.decisionId,at:a.at,source:a.source,toolName:a.toolName,confirmedAt:a.confirmedAt,scraperCorroborated:a.scraperCorroborated,deliveryExpired:(0,J.qX)(a,S.capabilities.decisionTimeoutSeconds,T),kind:b,questionOptions:"question"===b&&V?(0,z.dZ)(V.spec).map(a=>({number:a.number,label:a.label})):null}}),dedupDropped:(0,H.n5)(b,c,m),dialogPendingMaxMs:{...J.h_},promptWaitingSince:null,promptWaitingSource:null,toolInputNormalization:(0,v.SQ)(b,c,m),permissionDecision:(0,u.CD)(b,c,m),source:{cliToolId:S.cliToolId,capabilities:S.capabilities,...(0,s.Kf)(S,S.liveness({worktreeId:b,cliToolId:c,instanceId:o}),T),probedActivity:(0,t.hS)({worktreeId:b,cliToolId:c,instanceId:o})},session:W,sessionContext:(0,w.sc)({worktreeId:b,cliToolId:c,instanceId:m},W),sessionDiff:(0,y.rn)({worktreeId:b,cliToolId:c,instanceId:m})};if(!await P.isRunning(b,m))return(0,K.xG)((0,C.v7)(b,c,m)),{isRunning:!1,content:"",lineCount:0,cliToolId:c,sessionStatus:"idle",sessionStatusReason:"session_not_running",statusEvidence:"positive",lastKnownStatus:null,lastKnownStatusAt:null,lastStopEventAt:Q,structuredEvents:X,model:null,reasoningEffort:null,promptDedup:(0,E.XH)(b,c,m),upstreamFault:null,paneObstruction:null,composerText:null,composerState:"no_composer"};let Y=(0,d.getSessionState)(a,b,o),Z=Y?.lastCapturedLine||0,$=await (0,A.Wh)(b,c,F._,m),_=$.split("\n"),aa=_.length,ab=(0,G.sl)(aa,Math.min(F._,G.xE)),ac=((0,q.qR)(c,ab)?_.slice(Math.max(0,Z)):_).join("\n"),ad=(0,C.v7)(b,c,m),ae=(0,C.xU)(ad),af=ae?new Date(ae):void 0,ag=(0,B.WC)($,c,af),ah=(0,B.f8)(ag),ai=ag.hasActivePrompt,aj="waiting"===ag.status&&B.ug.has(ag.reason),ak=ag.reason===B.gv.CODEX_PAGER,al=ag.evidence,am=(0,K.Q4)(ag.status,ag.reason);(0,H._i)(b,c,m,"ready"===ag.status&&"positive"===al);let an=(0,H.R4)(b,c,m),ao=(0,I._G)({worktreeId:b,cliToolId:c,instanceId:m,scraper:{status:ag.status,reason:ag.reason,hasActivePrompt:ai}}),ap=ao.structured;null!==ap&&(X.promptWaitingSince=ap.at,X.promptWaitingSource=ap.source);let aq=function(a,b,c=null,d=null){if("waiting"===a.status)return{...a,structuredApplied:!1};if(null!==c)return{status:"waiting",reason:(0,I.rB)(c),thinking:!1,evidence:a.evidence,isUnclassifiedActive:a.isUnclassifiedActive,structuredApplied:!0};if(null===b||"waiting"===b.status)return{...a,structuredApplied:!1};let e="running"===b.status,f="ready"===b.status&&function(a){if(null===a)return!1;let{closedBy:b,closedAt:c,openedAt:d}=a;return"stop"===b&&null!==c&&null!==d&&c>d}(d)?"positive":a.evidence;return{status:b.status,reason:b.reason,thinking:e,evidence:f,isUnclassifiedActive:a.isUnclassifiedActive,structuredApplied:!0}}({status:ag.status,reason:ag.reason,thinking:ah,evidence:al,isUnclassifiedActive:am},an,ap,X),ar=ao.waiting,as=ag.promptDetection.promptData,at=as&&V?(0,L.Hu)(as,V.spec):null,au=null!==ap&&"notification"===ap.source&&"permission-id"===S.capabilities.eventIdentity&&(0,M.PP)(ap.decisionId)?ap.decisionId:null,av=null!==ap&&"question"===(0,x.Wk)(ap.toolName),aw=null===au||av?null:M.QB,ax=null===ap?null:{...ap,askUserQuestion:function(a){let b=a?.spec.questions[0];return b?{question:b.question,labels:b.choices.map(a=>a.label),questionCount:a.spec.questions.length}:null}(V),decisionOptions:aw,decisionId:au,patterns:null!==aw?ap.patterns:null},ay=ai?at??as??(ax?(0,M.Yo)(b,ax):null):ax?(0,M.Yo)(b,ax):null;null!==an&&an.status!==ag.status&&N.info("detection-divergence",{worktreeId:b,cliToolId:c,instanceId:o,scraperStatus:ag.status,scraperReason:ag.reason,structuredStatus:an.status,structuredReason:an.reason,structuredEvent:an.event,structuredEventAt:an.at,applied:aq.structuredApplied});let az=_.slice(-100).join("\n"),aA="opencode"===c?function(a){let b=(0,h.aJ)(a).split("\n"),c=-1,d=-1,e=-1;for(let a=0;a<b.length;a++){let f=k.exec(b[a]);f&&(c=a,e=(d=f[1].length)+1+f[2].length)}if(-1===c)return null;let f=0,g="";for(let a=0;a<b.length;a++){let h=b[a];if(a!==c){let a=l.exec(h);if(!a||a[1].length!==d)continue}let k=h.slice((0,j.sh)(h,e)).trim();""!==k&&(f+=1,""===g&&(g=(0,i.D)(k,200,"…[truncated]")))}return f<2?null:{id:"opencode_sidebar",matchedText:g,boxRight:e,rows:f}}(az):null,aB=function(a,b,c=Date.now()){for(let[a,b]of e)c-b.lastSeen>36e5&&e.delete(a);if(!b)return e.delete(a),{dwellMs:0,shouldRecord:!1};let d=e.get(a);if(!d)return e.set(a,{since:c,lastSeen:c,recorded:!1}),{dwellMs:0,shouldRecord:!1};d.lastSeen=c;let f=Math.max(0,c-d.since);return d.recorded||f<6e4?{dwellMs:f,shouldRecord:!1}:(d.recorded=!0,{dwellMs:f,shouldRecord:!0})}(ad,aq.isUnclassifiedActive);if(aB.shouldRecord&&function(a,b){var c;let e=Math.round(b.dwellMs/1e3),f=`${b.sessionStatus}/${b.sessionStatusReason}`,g=`Unclassified interactive frame (${f}) held for ${e}s. The detection layer could not parse it, so no prompt was published and nothing could answer it. Inspect the raw pane with \`commandmate capture ${b.worktreeId} --pane\`.`+((c=b.obstruction)?` Cause: opencode's sidebar is sharing rows with the transcript (paneObstruction=${c.id}, second column reads ${JSON.stringify(c.matchedText)}), which covers the marker that ends a turn. Press \`ctrl+x b\` in the pane to close it.`:""),h={type:n.LT,status:"unclassified",question:g,options:[],dwellSeconds:e,sessionStatusReason:f};try{let c=(0,d.createMessage)(a,{worktreeId:b.worktreeId,role:"assistant",content:g,messageType:"prompt",promptData:h,timestamp:new Date,cliToolId:b.cliToolId,instanceId:b.instanceId});N.info("unclassified-frame-recorded",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,dwellSeconds:e,statusReason:f}),O(b.worktreeId,c)}catch(a){N.warn("unclassified-frame-record-failed",{worktreeId:b.worktreeId,error:a instanceof Error?a.message:String(a)})}}(a,{worktreeId:b,cliToolId:c,instanceId:o,dwellMs:aB.dwellMs,sessionStatus:aq.status,sessionStatusReason:aq.reason,obstruction:aA}),null!==ap&&null!==ax&&!ai&&!ap.recorded){(0,H.HR)(b,c,m);var aC=b,aD=c,aE=o,aF=ap,aG=ax;let e=(0,M.fO)(aC,aG);try{let b=(0,d.createMessage)(a,{worktreeId:aC,role:"assistant",content:e.question,summary:`structured prompt \xb7 source=${aF.source}${aF.toolName?` \xb7 tool=${aF.toolName}`:""}`,messageType:"prompt",promptData:e,timestamp:new Date,cliToolId:aD,instanceId:aE});N.info("structured-prompt-recorded",{worktreeId:aC,cliToolId:aD,instanceId:aE,source:aF.source,toolName:aF.toolName}),O(aC,b)}catch(a){N.warn("structured-prompt-record-failed",{worktreeId:aC,error:a instanceof Error?a.message:String(a)})}}let aH=(0,f.ji)($,c),aI=(0,g.bT)(az),aJ=(0,C.aq)(b,c,m),{model:aK,effort:aL}=(0,H.jl)(b,c,m);(0,K.ox)(ad,{status:aq.status,reason:aq.reason,evidence:aq.evidence});let aM=(0,K.AD)(ad);return{isRunning:!0,cliToolId:c,sessionStatus:aq.status,sessionStatusReason:aq.reason,content:ac,fullOutput:$,realtimeSnippet:az,lineCount:aa,lastCapturedLine:Z,isComplete:ar,isGenerating:aq.thinking,thinking:aq.thinking,thinkingMessage:aq.thinking?"Claude is thinking...":null,isPromptWaiting:ar,promptData:ay,autoYes:{enabled:aJ?.enabled??!1,expiresAt:aJ?.enabled?aJ.expiresAt:null,stopReason:aJ?.stopReason,lastSuppression:(0,D.gb)(b,c,m),stopMatchedText:aJ?.stopMatchedText},isSelectionListActive:aj,isPagerActive:ak,isUnclassifiedActive:aq.isUnclassifiedActive,statusEvidence:aq.evidence,lastKnownStatus:aM?.status??null,lastKnownStatusAt:aM?.at??null,lastServerResponseTimestamp:ae,serverPollerActive:(0,C.bZ)(ad),lastStopEventAt:Q,structuredEvents:X,model:aK,reasoningEffort:aL,promptDedup:(0,E.XH)(b,c,m),upstreamFault:aI?{id:aI.fault.id,matchedText:aI.matchedText,at:Date.now()}:null,paneObstruction:aA?{id:aA.id,matchedText:aA.matchedText,at:Date.now()}:null,composerText:"content"===aH.state?aH.text:null,composerState:aH.state}}function R(){return{version:0,askedAt:-1/0,turnKey:null,body:null,loggedOutcome:null,loggedTurnKey:null}}let S=globalThis.__chatTurnProgressState??=new Map;function T(a){return`${a.worktreeId}:${a.cliToolId}:${a.instanceId??a.cliToolId}`}function U(a,b,c,d={}){let e=T(a),f=S.get(e)??R();S.set(e,f),(f.loggedOutcome!==b||f.loggedTurnKey!==c)&&(f.loggedOutcome=b,f.loggedTurnKey=c,N.info("published"===b?"chat-turn-progress-published":"no-subscribers"===b?"chat-turn-progress-no-subscribers":"chat-turn-progress-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,turnKey:c,...d}))}async function V(a,b,c=Date.now()){let d,e=T(a),f=S.get(e)??R();if(c-f.askedAt<m.r9)return null;f.askedAt=c,S.set(e,f);try{d=await b()}catch{return null}if(!d||0===d.body.length)return null;let g=(0,m.rx)(d.body);return d.turnKey===f.turnKey&&g.body===f.body?null:(f.turnKey=d.turnKey,f.body=g.body,f.version+=1,{type:m.rz,worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,turnKey:d.turnKey,body:g.body,partial:g.truncated||!0===d.partial,version:f.version,done:!1})}async function W(a,b,d=Date.now()){try{let{broadcast:e,hasRoomSubscribers:f}=await Promise.all([c.e(1503),c.e(1719),c.e(6894),c.e(7836)]).then(c.bind(c,79129));if(!f(a.worktreeId))return U(a,"no-subscribers",null),!1;let g=await V(a,b,d);if(!g)return!1;return e(a.worktreeId,g),U(a,"published",g.turnKey,{version:g.version,bodyLength:g.body.length,partial:g.partial}),!0}catch(b){return U(a,"failed",null,{error:b instanceof Error?b.message:String(b)}),!1}}async function X(a,b,d,e){if("claude"!==d)return;let f={worktreeId:b,cliToolId:d,instanceId:e};try{let{getWorktreeById:g}=await Promise.resolve().then(c.bind(c,73753)),h=g(a,b)?.path;if(!h)return;let{hasRoomSubscribers:i}=await Promise.all([c.e(1503),c.e(1719),c.e(6894),c.e(7836)]).then(c.bind(c,79129));if(!i(b))return void U(f,"no-subscribers",null);W(f,async()=>{let{readClaudeTurnProgress:a}=await c.e(9696).then(c.bind(c,79696));return a({worktreeId:b,cliToolId:d,instanceId:e??d},{worktreePath:h})})}catch(a){U(f,"failed",null,{error:a instanceof Error?a.message:String(a)})}}},9516:(a,b,c)=>{c.d(b,{Hu:()=>i,Ll:()=>j});let d=["type something","chat about this"],e=/^\s*\[[ xX]\]\s*/,f=/(?:…|\.\.\.)\s*$/,g=new Set(["yes","y","no","n"]);function h(a){return a.replace(e,"").replace(f,"").replace(/\s+/g," ").trim().toLowerCase()}function i(a,b){if("multiple_choice"!==a.type)return null;let c=function(a,b){let c=h(b);if(""===c)return null;let d=a.questions.map((a,b)=>({entry:a,index:b})).filter(({entry:a})=>(function(a,b){let[c,d]=a.length<=b.length?[a,b]:[b,a];return c.length<8?c===d:d.includes(c)})(h(a.question),c));return 1===d.length?d[0]:null}(b,a.question);if(null===c)return null;let{entry:f,index:g}=c,i=new Map(a.options.map(a=>[a.number,a])),j=[];for(let[a,b]of f.choices.entries()){var k;let c=a+1,d=i.get(c);if(!d||!function(a,b){if(""===a||""===b)return!1;if(a===b)return!0;let[c,d]=a.length<=b.length?[a,b]:[b,a];return!(c.length<8)&&d.startsWith(c)}(h(d.label),h(b.label)))return null;j.push({...d,label:`${(k=d.label,e.exec(k)?.[0]??"")}${b.label}`,...b.description?{description:b.description}:{}})}let l=[];for(let b of a.options)!(b.number<=f.choices.length)&&function(a){let b=h(a);return d.some(a=>b===a||b.startsWith(a))}(b.label)&&(j.push(b),l.push(b.number));return j.sort((a,b)=>a.number-b.number),{...a,question:f.question,options:j,isAskUserQuestion:!0,askUserQuestion:{...f.header?{header:f.header}:{},multiSelect:f.multiSelect,questionIndex:g,questionCount:b.questions.length,metaOptionNumbers:l}}}function j(a,b){let c=b.trim();if(/^\d+$/.test(c)){let b=Number.parseInt(c,10);return a.options.some(a=>a.number===b)?{ok:!0,input:String(b)}:{ok:!1,reason:"answer_out_of_range",message:"The option number is outside the range this prompt offers. Use `commandmate capture <worktree-id> --json` to list the current options."}}let d=function(a,b){let c=h(b);if(""===c)return[];let d=a.filter(a=>h(a.label)===c);return d.length>0?d:c.length<2?[]:a.filter(a=>h(a.label).startsWith(c))}(a.options,c);if(1===d.length){let[a]=d;return{ok:!0,input:String(a.number),resolved:{via:"semantic",optionNumber:a.number,optionLabel:a.label}}}return d.length>1?{ok:!1,reason:"unresolvable_answer",message:"The answer matches more than one option label. Answer with an option number."}:a.options.some(a=>!0===a.requiresTextInput)&&!g.has(c.toLowerCase())?{ok:!0,input:b}:{ok:!1,reason:"unresolvable_answer",message:"No option label matches the answer. Answer with an option number (yes/no is not resolved on a numbered picker — Issue #1681)."}}},15388:(a,b,c)=>{c.d(b,{RJ:()=>f,SQ:()=>g});var d=c(24455);let e=globalThis.__toolInputNormalizations??(globalThis.__toolInputNormalizations=new Map);function f(a,b,c,g,h,i=Date.now()){e.set((0,d.v7)(a,b,c),{...g,toolName:h,at:i})}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??null}},44321:(a,b,c)=>{c.d(b,{LN:()=>f,XH:()=>g,fL:()=>h});var d=c(24455);let e=globalThis.__promptDedupSkips??(globalThis.__promptDedupSkips=new Map);function f(a,b,c,g=Date.now()){let h=(0,d.v7)(a,b,c),i=e.get(h);e.set(h,{skippedCount:(i?.skippedCount??0)+1,lastSkippedAt:g})}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??{skippedCount:0,lastSkippedAt:null}}function h(a,b,c,f){if(a===b)return;let g=(0,d.v7)(a,c,f),h=e.get(g);e.delete(g),void 0!==h&&e.set((0,d.v7)(b,c,f),h)}},54325:(a,b,c)=>{c.d(b,{LE:()=>f,Oo:()=>e,ST:()=>d,dz:()=>j,r9:()=>h,rx:()=>i,rz:()=>g});let d="client_version",e="version_mismatch";function f(a,b){return!!a&&!!b&&"0.0.0"!==a&&"0.0.0"!==b&&a!==b}let g="chat_turn_progress",h=1e3;function i(a,b=65536){return b<=0?{body:"",truncated:a.length>0}:a.length<=b?{body:a,truncated:!1}:{body:a.slice(a.length-b),truncated:!0}}let j="messages_invalidated"},63209:(a,b,c)=>{c.d(b,{bT:()=>g});var d=c(51297),e=c(76777);let f=[{id:"overloaded",pattern:/\b5\d{2}\s+Overloaded\b/i,selfRetrying:!0},{id:"retrying",pattern:/Retrying in \d+s\s*[·•]\s*attempt \d+\/\d+/i,selfRetrying:!0},{id:"limit-reached",pattern:/\blimit reached\b/i,selfRetrying:!1},{id:"api-error",pattern:/\bAPI Error(?::|\s+\d{3})/i,selfRetrying:!1}];function g(a){let b=(0,d.aJ)(a);for(let a of f){var c;let d=a.pattern.exec(b);if(!d)continue;let f=b.lastIndexOf("\n",d.index)+1,g=b.indexOf("\n",d.index);return{fault:a,matchedText:(c=b.slice(f,-1===g?void 0:g).trim()||d[0],(0,e.D)(c,200,"…[truncated]"))}}return null}},97751:(a,b,c)=>{c.d(b,{M4:()=>p,W7:()=>r,aK:()=>q,dV:()=>l,dZ:()=>m,yQ:()=>j});var d=c(72626),e=c(36051),f=c(25071),g=c(129),h=c(62887);let i=(0,d.h)("lib/hooks/structured-decision-response"),j="Rejected by the operator via `commandmate respond`.",k={1:["once","allow once","allow","yes","y"],2:["always","allow always","allow-always"],3:["reject","deny","no","n"]};function l(a){let b=a.trim().toLowerCase();if(""===b)return null;for(let a of e.QB)if(b===String(a.number)||b===a.label.toLowerCase()||b===a.reply||(k[a.number]??[]).includes(b))return a;return null}function m(a){let b=a.questions[0];return b?b.choices.map((a,b)=>({number:b+1,label:a.label,reply:a.label})):[]}let n=/^\d+(?:\s*[,\s]\s*\d+)*$/;function o(a){return a.map(a=>`${a.number} = ${a.label}`).join(", ")}function p(a,b){let c=b.trim();if(""===c)return{ok:!1,reason:"unresolvable_answer",message:"An empty answer names no choice."};if(1!==a.questions.length)return{ok:!1,reason:"multi_question_unsupported",message:`This call asks ${a.questions.length} questions and \`answers\` carries one array per question; a single answer cannot say what the others are. Answer it in the terminal.`};let d=a.questions[0],e=m(a);if(n.test(c)){let a=[];for(let b of c.split(/[,\s]+/)){let d=e.find(a=>a.number===Number(b));if(!d)return{ok:!1,reason:"answer_out_of_range",message:`'${c}' names no choice this question offers. ${o(e)}.`};a.some(a=>a.number===d.number)||a.push(d)}return a.length>1&&!d.multiSelect?{ok:!1,reason:"multi_select_not_offered",message:`This question accepts one choice. Send a single number: ${o(e)}.`}:{ok:!0,resolved:{answers:[a.map(a=>a.reply)],selected:a,freeText:!1}}}let f=e.find(a=>a.label.toLowerCase()===c.toLowerCase());return f?{ok:!0,resolved:{answers:[[f.reply]],selected:[f],freeText:!1}}:c.length>1e3?{ok:!1,reason:"unresolvable_answer",message:"A free-text answer is limited to 1000 characters; this one is longer and is refused rather than cut short."}:{ok:!0,resolved:{answers:[[c]],selected:[],freeText:!0}}}function q(a){return{kind:"answer",answers:a.answers}}async function r({worktreeId:a,cliToolId:b,instanceId:d,answer:k,useDefault:m=!1}){let n,o=(0,g.VM)(b);if(null===o.capabilities.eventIdentity)return{kind:"not-applicable",reason:"no-decision-identity"};let p={worktreeId:a,cliToolId:b,instanceId:d};try{n=await o.listPending(p)}catch(c){return i.warn("structured-decision-unreachable",{worktreeId:a,cliToolId:b,instanceId:d??b,error:c instanceof Error?c.message:String(c)}),{kind:"not-applicable",reason:"source-unreachable"}}let q=n.filter(a=>"permission"===a.kind);if(0===q.length)return{kind:"not-applicable",reason:"no-pending-decision"};let r=q[0];if(q.length>1&&i.info("structured-decision-multiple-pending",{worktreeId:a,cliToolId:b,instanceId:d??b,pending:q.length,answering:r.id}),m)return{kind:"refused",reason:"unresolvable_answer",message:`--default cannot answer a structured approval: the agent publishes no default verdict. Send a number instead — ${e.QB.map(a=>`${a.number} = ${a.label}`).join(", ")}.`};let s=void 0===k?null:l(k);if(!s)return{kind:"refused",reason:"answer_out_of_range",message:`'${k??""}' is not one of the verdicts this approval accepts. `+e.QB.map(a=>`${a.number} = ${a.label} (${a.reply})`).join(", ")+"."};let t=function(a){switch(a){case 1:return{kind:"allowOnce"};case 2:return{kind:"allowAlways"};case 3:return{kind:"deny",message:j};default:return null}}(s.number);if(!t)return{kind:"refused",reason:"unresolvable_answer",message:`Option ${s.number} has no verdict on this server.`};let{delivery:u}=await (0,f.GW)(o,p,r,t),v=u?.delivered===!0;if(v&&o.capabilities.permissionReplyReleasesPrompt){let{recordAgentEvent:e}=await Promise.resolve().then(c.bind(c,48083));e(a,b,d,{event:"notification",at:Date.now(),detail:h.KC,sessionId:r.conversationId,decisionId:r.id,promptSettled:!0})}return i.info("structured-decision-answered",{worktreeId:a,cliToolId:b,instanceId:d??b,decisionId:r.id,optionNumber:s.number,reply:s.reply,delivered:v}),{kind:"answered",decisionId:r.id,option:s,delivered:v}}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=1068,exports.ids=[1068,2839,5220],exports.modules={12462:(a,b,c)=>{c.d(b,{T8:()=>j,o4:()=>k});var d=c(31990),e=c(56791),f=c(79129),g=c(82450),h=c(15194);let i=(0,c(72626).h)("assistant-response-saver");function j(a,b){switch(b){case"claude":return(0,g.NN)(a);case"gemini":return(0,g.IS)(a);case"opencode":return(0,g.aW)(a);case"copilot":return(0,g.LH)(a);default:return a.trim()}}async function k(a,b,c,g,k){let l=k??c;try{let m;if((0,h.VA)(c))return null;let n=(0,e.getSessionState)(a,b,l),o=n?.lastCapturedLine||0;try{m=await (0,d.Wh)(b,c,1e4,k)}catch{return i.info("failed-to-capture"),null}if(!m)return null;let p=m.split("\n"),q=p.length;for(;q>0&&""===p[q-1].trim();)q--;let r=q,{bufferReset:s,reason:t}=r>0&&o>25&&r+25<o?{bufferReset:!0,reason:"shrink"}:r>0&&o>50&&r<50?{bufferReset:!0,reason:"restart"}:{bufferReset:!1,reason:null};s&&i.info("buffer:reset-detected",{reason:t,currentLineCount:r,lastCapturedLine:o});let u=s?0:o;if(!s&&r<=o)return r<o&&((0,e.updateSessionState)(a,b,c,r,k),i.info("position:corrected-stale",{from:o,to:r})),null;let v=p.slice(u).join("\n"),w=j(v,c);if(!w||""===w.trim())return(0,e.updateSessionState)(a,b,c,r,k),i.debug("response:empty-after-clean",{currentLineCount:r}),null;let x=new Date(g.getTime()-1),y=(0,e.createMessage)(a,{worktreeId:b,role:"assistant",content:w,messageType:"normal",timestamp:x,cliToolId:c,instanceId:l});return(0,e.updateSessionState)(a,b,c,r,k),(0,f.broadcastMessage)("message",{worktreeId:b,message:y}),i.info("response:saved",{fromLine:o,toLine:r}),y}catch(a){return i.error("error:",{error:a instanceof Error?a.message:String(a)}),null}}},23197:(a,b,c)=>{c.d(b,{$M:()=>e,H1:()=>d,q5:()=>f});let d="__global__",e=2e3,f=900},39687:(a,b,c)=>{c.d(b,{d:()=>p});var d=c(56791),e=c(43234),f=c(15194),g=c(95220),h=c(12462),i=c(79129),j=c(54325),k=c(72626),l=c(58707),m=c(41466);let n=(0,k.h)("session/send-user-message");function o(a){return a instanceof Error?a.message:String(a)}async function p(a,b){let{worktreeId:c,content:k,cliToolId:p,instanceId:q,absoluteImagePath:r,copilotModel:s}=b,t=b.messageType??"normal",u=q??p,v=e.CLIToolManager.getInstance().getTool(p),w=await (0,l.a3)(c,p,q,{ignoreStructured:b.ignoreStructuredPromptGuard});if(w.waiting)return n.info("send-refused-prompt-waiting",{worktreeId:c,cliToolId:p,reason:w.reason,blockedBy:w.blockedBy}),{ok:!1,stage:"prompt_waiting",error:(0,l.br)(c,w.blockedBy)};let x=new Date;try{await (0,h.o4)(a,c,p,x,q)}catch(a){n.error("failed-to-save-pending-assistant-response:",{error:o(a)})}let y=null;try{let b=(0,d.getMessages)(a,c,{limit:1,cliToolId:p,instanceId:u,matchResolvedInstance:!0});b.length>0&&"user"===b[0].role&&b[0].content===k&&(y=b[0].id)}catch(a){n.error("failed-to-detect-orphaned-messages:",{error:o(a)})}if(s&&"copilot"===p)try{await v.sendModelCommand(c,s,q),n.info("copilot-model-command-sent",{model:s})}catch(a){return n.error("failed-to-send-model-command:",{error:o(a)}),{ok:!1,stage:"model",error:o(a)}}try{r?(0,f._J)(v)?await v.sendMessageWithImage(c,k,r,q):await v.sendMessage(c,(0,m.TZ)(k,r),q):await v.sendMessage(c,k,q)}catch(a){return n.error("failed-to-send-message-to:",{error:o(a)}),{ok:!1,stage:"send",error:o(a)}}let z=(0,d.createMessage)(a,{worktreeId:c,role:"user",content:k,messageType:t,timestamp:x,cliToolId:p,instanceId:q});try{(0,i.broadcastMessage)("message",{worktreeId:c,message:{...z,cliToolId:p,instanceId:u}})}catch(a){n.warn("user-message-broadcast-failed",{error:o(a)})}if(y)try{if((0,d.deleteMessageById)(a,y)){n.info("cleaned-up-orphaned-user");try{(0,i.broadcastMessage)(j.dz,{worktreeId:c,cliToolId:p,instanceId:u,reason:"orphan_cleanup"})}catch(a){n.warn("orphan-cleanup-broadcast-failed",{error:o(a)})}}}catch(a){n.error("failed-to-clean-up-orphaned-message:",{error:o(a)})}return(0,d.updateLastUserMessage)(a,c,k,x),(0,d.clearInProgressMessageId)(a,c,p,q),n.info("cleared-in-progress-message-for"),(0,g.startPolling)(c,p,q),{ok:!0,message:z}}},58707:(a,b,c)=>{c.d(b,{$n:()=>k,a3:()=>l,br:()=>m});var d=c(43234),e=c(31990),f=c(95595),g=c(34405),h=c(72626),i=c(30008);let j=(0,h.h)("prompt-waiting-guard"),k="PROMPT_WAITING";async function l(a,b,c,h){try{let k=d.CLIToolManager.getInstance().getTool(b);if(!await k.isRunning(a,c))return{waiting:!1};let l=await (0,e.Wh)(a,b,g._,c),m=(0,f.WC)(l,b),n=(0,i._G)({worktreeId:a,cliToolId:b,instanceId:c,scraper:{status:m.status,reason:m.reason,hasActivePrompt:m.hasActivePrompt},ignoreStructured:h?.ignoreStructured});if(!n.blocksSend)return null!==n.structuredSendBlockSuppressed&&j.info("structured-send-guard-not-applied",{worktreeId:a,cliToolId:b,instanceId:c,suppressed:n.structuredSendBlockSuppressed,promptWaitingSince:n.structured?.at??null}),{waiting:!1};return{waiting:!0,reason:n.blockReason??void 0,blockedBy:n.blockedBy??void 0}}catch(c){return j.warn("prompt-waiting-check-failed",{worktreeId:a,cliToolId:b,error:c instanceof Error?c.message:String(c)}),{waiting:!1}}}function m(a,b){let c=`${a} is waiting on a prompt. Sending now would type into the prompt's input line instead of reaching the agent, and would leave that text in place for the next answer. Answer the prompt first: \`commandmate respond ${a} <answer>\`.`;if("structured"!==b)return c;let d=Math.round(i.j0/6e4);return`${c} This dialog was reported by the agent's own hooks and is not visible to the terminal scraper, so if the pane looks idle the record has outlived its dialog: it stops blocking sends ${d} minutes after it was reported, or immediately with \`commandmate send ${a} <message> --ignore-structured-prompt\` (server-wide: ${i.F1}=off).`}},61068:(a,b,c)=>{c.d(b,{Nz:()=>u,EB:()=>v,l7:()=>x});var d=c(95220),e=c(45017),f=c(11099),g=c(85775),h=c(72626),i=c(43234),j=c(79892);let k=(0,h.h)("global-session-poller"),l=new Map,m=new Map;var n=c(93997),o=c(15194),p=c(23197),q=c(77093),r=c(82325);let s=(0,h.h)("session-cleanup");async function t(a,b){let c={worktreeId:a,sessionsKilled:[],sessionErrors:[],pollersStopped:[],pollerErrors:[]};for(let e of((0,n.pc)(),o.XH)){try{await b(a,e)&&(c.sessionsKilled.push(e),s.info("session:killed",{worktreeId:a,cliToolId:e}))}catch(d){let b=`${e}: ${(0,q.u1)(d)}`;c.sessionErrors.push(b),s.warn("session:kill-failed",{worktreeId:a,cliToolId:e,error:d instanceof Error?d.message:String(d)})}try{(0,d.stopPolling)(a,e),c.pollersStopped.push(`response-poller:${e}`)}catch(d){let b=`response-poller:${e}: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("response-poller:stop-failed",{worktreeId:a,cliToolId:e,error:d instanceof Error?d.message:String(d)})}}try{(0,e._C)(a),c.pollersStopped.push("auto-yes-poller")}catch(d){let b=`auto-yes-poller: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("auto-yes-poller:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,e.LP)(a),c.pollersStopped.push("auto-yes-state")}catch(d){let b=`auto-yes-state: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("auto-yes-state:delete-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,f.Yg)(a),c.pollersStopped.push("schedule-manager")}catch(d){let b=`schedule-manager: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("schedule-manager:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}try{(0,g.Tm)(a),c.pollersStopped.push("timer-manager")}catch(d){let b=`timer-manager: ${(0,q.u1)(d)}`;c.pollerErrors.push(b),s.warn("timer-manager:stop-failed",{worktreeId:a,error:d instanceof Error?d.message:String(d)})}return c}async function u(a,b){let c=await Promise.allSettled(a.map(a=>t(a,b))),d=[],e=[];for(let b=0;b<c.length;b++){let f=c[b],g=a[b];if("fulfilled"===f.status){let a=f.value;for(let b of(d.push(a),a.sessionErrors))e.push(`Session kill error (${g}): ${b}`);for(let b of a.pollerErrors)e.push(`Poller stop error (${g}): ${b}`)}else e.push(`Cleanup failed (${g}): ${(0,q.u1)(f.reason)}`)}return{results:d,warnings:e}}async function v(a,b){try{let c=i.CLIToolManager.getInstance().getTool(b);if(!await c.isRunning(a))return!1;let e=`${a}:${b}`;(0,d.clearPromptHashCache)(e);let f=c.getSessionName(a);return(0,j.fY)(f)}catch{return!1}}async function w(){for(let a of l.keys()){let b=l.get(a);b&&clearTimeout(b)}l.clear(),m.clear(),k.info("poll:all-stopped");let a=0,b=i.CLIToolManager.getInstance();for(let c of o.XH)try{let d=b.getTool(c).getSessionName(p.H1);await (0,j.N)(d)&&await (0,j.fY)(d)&&(a++,s.info("global-session:killed",{cliToolId:c,sessionName:d}))}catch(a){s.warn("global-session:kill-failed",{cliToolId:c,error:(0,q.u1)(a)})}return a}async function x(a,b){let c=(0,r.L0)(a,b);try{await w()}catch(a){s.warn("sync:global-cleanup-failed",{error:(0,q.u1)(a)})}let d=[];if(c.deletedIds.length>0)try{let a=await u(c.deletedIds,v);a.warnings.length>0&&(s.warn("sync:cleanup-warnings",{warnings:a.warnings}),d=[`${a.warnings.length} session cleanup warning(s) occurred`])}catch(a){s.error("sync:cleanup-failed",{error:(0,q.u1)(a)}),d=["Session cleanup encountered an error"]}return{syncResult:c,cleanupWarnings:d}}},82325:(a,b,c)=>{c.d(b,{Hz:()=>o,L0:()=>r,Mg:()=>s,YM:()=>p,Yp:()=>q});var d=c(79646),e=c(28354),f=c(29021),g=c.n(f),h=c(33873),i=c.n(h),j=c(23718),k=c(56791),l=c(72626),m=c(64185);let n=(0,l.h)("worktrees");function o(){let a=process.env.WORKTREE_REPOS;return a&&a.trim()?a.split(",").map(a=>a.trim()).filter(a=>a.length>0):[]}async function p(a){let b=(0,e.promisify)(d.exec);if(function(a){if(!a)return!1;try{return g().lstatSync(a),!1}catch(b){let a=b.code;return"ENOENT"===a||"ENOTDIR"===a}}(a))return n.warn("repository:scan-skipped-missing-dir",{repoPath:a}),[];try{let{stdout:c}=await b("git worktree list",{cwd:a}),d=function(a){if(!a||""===a.trim())return[];let b=a.trim().split("\n"),c=[];for(let a of b){let b=a.trim();if(!b)continue;let d=b.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(d){let[,a,b,e]=d;c.push({path:a.trim(),branch:e||`detached-${b}`,commit:b})}}return c}(c),e=i().resolve(a),f=i().basename(e);return(0,m.oZ)(e),d.map(a=>{let b=i().resolve(a.path);return{id:(0,j.ko)(b),name:a.branch,branch:a.branch,path:b,repositoryPath:e,repositoryName:f}}).filter(a=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(b=>a.path.startsWith(b))?(n.warn("worktree:unsafe-path-skipped",{path:a.path}),!1):!(a.path.includes("\0")||a.path.includes(".."))||(n.warn("worktree:malicious-path-skipped",{path:a.path}),!1))}catch(c){let a=c instanceof Error?c.message:String(c),b=c.code;if(a?.includes("not a git repository")||128===b)return[];throw c}}async function q(a){let b=await Promise.allSettled(a.map(async a=>{n.info("repository:scan-start",{repoPath:a});let b=await p(a);return n.info("repository:scan-complete",{repoPath:a,worktreeCount:b.length}),b})),c=[];for(let d=0;d<b.length;d++){let e=b[d];"fulfilled"===e.status?c.push(...e.value):n.error("repository:scan-failed",{repoPath:a[d],error:e.reason instanceof Error?e.reason.message:String(e.reason)})}return c}function r(a,b){if(0===b.length)return{deletedIds:[],upsertedCount:0};let c=[],d=0,e=new Map;for(let a of b){let b=a.repositoryPath||"";e.has(b)||e.set(b,[]),e.get(b).push(a)}let f=new Set([...(0,k.getAllWorktreeIds)(a),...(0,k.getAliasedWorktreeIds)(a)]),g=new Map((0,k.getAllWorktreePathIds)(a).map(a=>[i().resolve(a.path),a.id])),h=new Map,l=new Map;for(let[a,b]of g)h.set(a,new Set([b])),l.set(b,a);for(let b of(0,k.getAllWorktreeAliases)(a)){let a=l.get(b.worktreeId);a&&h.get(a)?.add(b.oldId)}let m=new Set(b.map(a=>i().resolve(a.path)));for(let[b,o]of e){if(!b)continue;let e=(0,k.getWorktreesByRepository)(a,b).filter(a=>!m.has(i().resolve(a.path))).map(a=>a.id);if(e.length>0){let b=(0,k.deleteWorktreesByIds)(a,e);for(let a of(c.push(...e),e)){f.delete(a);let b=l.get(a);void 0!==b&&(g.delete(b),h.delete(b))}n.info("worktree:cleanup",{deletedCount:b.deletedCount})}for(let b of o){let c=i().resolve(b.path),e=g.get(c),m=b.id,n=e??(m&&!f.has(m)?m:function(a,b,c){if(!c||0===c.size)return(0,j.ko)(a,b);let d=new Set(b);for(let a of c)d.delete(a);return(0,j.ko)(a,d)}(c,f,h.get(c)));f.add(n),g.set(c,n),l.set(n,c),(0,k.upsertWorktree)(a,{...b,id:n,name:b.branch??b.name}),d++}}return{deletedIds:c,upsertedCount:d}}function s(a,b){let c=new Set(b.map(a=>a.repositoryPath).filter(a=>!!a)),d=[];for(let b of(0,k.getRepositories)(a)){let e=b.path;if(!e||c.has(e)||function(a){if(!a)return!1;try{return g().existsSync(a)&&g().existsSync(i().join(a,".git"))}catch{return!0}}(e))continue;let f=(0,k.getWorktreesByRepository)(a,e).map(a=>a.id);if(0===f.length)continue;let h=(0,k.deleteWorktreesByIds)(a,f);d.push(...f),n.info("worktree:stale-repo-pruned",{repoPath:e,deletedCount:h.deletedCount})}return d}},85775:(a,b,c)=>{c.d(b,{Tm:()=>o,x4:()=>m,xJ:()=>n});var d=c(34129),e=c(43234),f=c(88807),g=c(72626),h=c(87374),i=c(39687);let j=(0,g.h)("timer-manager");function k(){return globalThis.__timerManagerState||(globalThis.__timerManagerState={timers:new Map,timerWorktrees:new Map,initialized:!1}),globalThis.__timerManagerState}async function l(a){let b=k(),c=(0,f.getDbInstance)();try{let b=(0,d.kx)(c,a);if(!b||"pending"!==b.status)return;let f=e.CLIToolManager.getInstance().getTool(b.cliToolId),g=b.instanceId;if(!await f.isRunning(b.worktreeId,g)){j.warn("timer:no-session",{timerId:a,worktreeId:b.worktreeId,instanceId:g}),(0,d.j2)(c,a,h.HR.NO_SESSION);return}(0,d.j2)(c,a,"sending");let k=await (0,i.d)(c,{worktreeId:b.worktreeId,content:b.message,cliToolId:b.cliToolId,instanceId:g});if(!k.ok){let b=`[${k.stage}] ${k.error}`;(0,d.j2)(c,a,"failed",void 0,b),j.error("timer:send-failed",{timerId:a,stage:k.stage,error:k.error});return}(0,d.j2)(c,a,"sent",Date.now()),j.info("timer:sent",{timerId:a,worktreeId:b.worktreeId})}catch(e){let b=e instanceof Error?e.message:String(e);try{(0,d.j2)(c,a,"failed",void 0,b)}catch{}j.error("timer:send-failed",{timerId:a,error:b})}finally{b.timers.delete(a),b.timerWorktrees.delete(a)}}function m(a,b,c){let d=k(),e=setTimeout(()=>{l(a)},c);d.timers.set(a,e),d.timerWorktrees.set(a,b)}function n(a){let b=k(),c=b.timers.get(a);c&&(clearTimeout(c),b.timers.delete(a),b.timerWorktrees.delete(a));let e=(0,f.getDbInstance)();(0,d.Ud)(e,a)}function o(a){let b=k(),c=(0,f.getDbInstance)();for(let[c,d]of b.timerWorktrees)if(d===a){let a=b.timers.get(c);a&&clearTimeout(a),b.timers.delete(c),b.timerWorktrees.delete(c)}(0,d.$$)(c,a)}},95220:(a,b,c)=>{c.r(b),c.d(b,{accumulateTuiContent:()=>g.IZ,cleanClaudeResponse:()=>f.NN,cleanCopilotResponse:()=>f.LH,cleanGeminiResponse:()=>f.IS,cleanOpenCodeResponse:()=>f.aW,clearPromptHashCache:()=>h.iX,clearTuiAccumulator:()=>g.q1,extractCopilotContentLines:()=>g.o0,extractTuiContentLines:()=>g.K0,findOverlapIndex:()=>g.vQ,getAccumulatedContent:()=>g.Uz,getActivePollers:()=>d.KQ,initTuiAccumulator:()=>g.tb,isDuplicatePrompt:()=>h.gv,isOpenCodeComplete:()=>e.bE,migrateResponsePollerWorktreeIds:()=>d.sR,normalizeCopilotLine:()=>g.IW,normalizePromptForDedup:()=>h.zm,renamePromptHashCacheKey:()=>h.i2,resolveExtractionStartIndex:()=>e.QM,startPolling:()=>d.g8,stopAllPolling:()=>d.fq,stopPolling:()=>d.Et,truncateMessage:()=>f.Sj});var d=c(45146),e=c(60),f=c(82450),g=c(13033),h=c(72457)}};