commandmate 0.33.0 → 0.33.2

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 (670) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +432 -425
  3. package/.next/app-path-routes-manifest.json +24 -23
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/diagnostics/framework.json +1 -1
  6. package/.next/next-server.js.nft.json +1 -1
  7. package/.next/prerender-manifest.json +9 -9
  8. package/.next/required-server-files.json +1 -2
  9. package/.next/routes-manifest.json +8 -0
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  16. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js +32 -1
  26. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/terminal/route.js +33 -2
  29. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  32. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  45. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  46. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  48. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  49. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  51. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  52. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/push/escalation/route.js +1 -1
  56. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  58. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/push/vapid/route.js +1 -1
  60. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  62. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  63. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/relays/route.js +1 -1
  65. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  66. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  70. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  72. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  74. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/repositories/clone/route.js +1 -1
  77. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  78. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/restore/route.js +1 -1
  81. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/route.js +1 -1
  84. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  85. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/repositories/scan/route.js +1 -1
  87. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  88. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/repositories/sync/route.js +1 -1
  90. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  91. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  94. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  105. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/todos/route.js +1 -1
  109. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  111. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/verification/runs/route.js +1 -1
  113. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  116. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  130. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -0
  185. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js.nft.json +1 -0
  186. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -0
  187. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
  249. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  250. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/api/worktrees/route.js +1 -1
  277. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  278. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/page.js +1 -1
  285. package/.next/server/app/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/repositories/page.js +1 -1
  288. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  289. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  290. package/.next/server/app/sessions/page.js +1 -1
  291. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  292. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  293. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  294. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  295. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  296. package/.next/server/app/worktrees/[id]/page.js +12 -12
  297. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  298. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  299. package/.next/server/app-paths-manifest.json +24 -23
  300. package/.next/server/chunks/1068.js +1 -0
  301. package/.next/server/chunks/1191.js +1 -1
  302. package/.next/server/chunks/1210.js +1 -1
  303. package/.next/server/chunks/1331.js +2 -2
  304. package/.next/server/chunks/1366.js +5 -3
  305. package/.next/server/chunks/1886.js +3 -3
  306. package/.next/server/chunks/2119.js +1 -1
  307. package/.next/server/chunks/2445.js +1 -1
  308. package/.next/server/chunks/2839.js +1 -0
  309. package/.next/server/chunks/3241.js +1 -1
  310. package/.next/server/chunks/3323.js +1 -0
  311. package/.next/server/chunks/3707.js +1 -1
  312. package/.next/server/chunks/3708.js +1 -1
  313. package/.next/server/chunks/4443.js +1 -1
  314. package/.next/server/chunks/5220.js +1 -1
  315. package/.next/server/chunks/5354.js +1 -1
  316. package/.next/server/chunks/595.js +2 -2
  317. package/.next/server/chunks/6337.js +1 -1
  318. package/.next/server/chunks/6401.js +1 -1
  319. package/.next/server/chunks/650.js +1 -0
  320. package/.next/server/chunks/6661.js +1 -1
  321. package/.next/server/chunks/6781.js +1 -0
  322. package/.next/server/chunks/6808.js +1 -0
  323. package/.next/server/chunks/6838.js +1 -1
  324. package/.next/server/chunks/7875.js +3 -3
  325. package/.next/server/chunks/8807.js +163 -131
  326. package/.next/server/chunks/8918.js +107 -5
  327. package/.next/server/chunks/9584.js +1 -1
  328. package/.next/server/middleware-build-manifest.js +1 -1
  329. package/.next/server/middleware-manifest.json +5 -5
  330. package/.next/server/pages/500.html +1 -1
  331. package/.next/server/server-reference-manifest.json +1 -1
  332. package/.next/server/src/middleware.js.map +1 -1
  333. package/.next/static/chunks/1255-7e5873f06b25e129.js +1 -0
  334. package/.next/static/chunks/{4718-d97f52cd932dc1ee.js → 4718-441a2af91f0374e9.js} +1 -1
  335. package/.next/static/chunks/app/api/agents/update/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
  336. package/.next/static/chunks/app/api/agents/versions/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
  337. package/.next/static/chunks/app/api/app/update/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
  338. package/.next/static/chunks/app/api/app/update-check/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
  339. package/.next/static/chunks/app/api/assistant/conversation/route-c4d2d5016c5f2a0a.js +1 -0
  340. package/.next/static/chunks/app/api/assistant/current-output/route-c4d2d5016c5f2a0a.js +1 -0
  341. package/.next/static/chunks/app/api/assistant/messages/route-c4d2d5016c5f2a0a.js +1 -0
  342. package/.next/static/chunks/app/api/assistant/session/route-c4d2d5016c5f2a0a.js +1 -0
  343. package/.next/static/chunks/app/api/assistant/start/route-c4d2d5016c5f2a0a.js +1 -0
  344. package/.next/static/chunks/app/api/assistant/terminal/route-c4d2d5016c5f2a0a.js +1 -0
  345. package/.next/static/chunks/app/api/assistant/tools/route-c4d2d5016c5f2a0a.js +1 -0
  346. package/.next/static/chunks/app/api/auth/login/route-c4d2d5016c5f2a0a.js +1 -0
  347. package/.next/static/chunks/app/api/auth/logout/route-c4d2d5016c5f2a0a.js +1 -0
  348. package/.next/static/chunks/app/api/auth/status/route-c4d2d5016c5f2a0a.js +1 -0
  349. package/.next/static/chunks/app/api/capabilities/route-c4d2d5016c5f2a0a.js +1 -0
  350. package/.next/static/chunks/app/api/daily-summary/route-c4d2d5016c5f2a0a.js +1 -0
  351. package/.next/static/chunks/app/api/daily-summary/status/route-c4d2d5016c5f2a0a.js +1 -0
  352. package/.next/static/chunks/app/api/external-apps/[id]/health/route-c4d2d5016c5f2a0a.js +1 -0
  353. package/.next/static/chunks/app/api/external-apps/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  354. package/.next/static/chunks/app/api/external-apps/route-c4d2d5016c5f2a0a.js +1 -0
  355. package/.next/static/chunks/app/api/fs/browse/route-c4d2d5016c5f2a0a.js +1 -0
  356. package/.next/static/chunks/app/api/fs/recent-paths/route-c4d2d5016c5f2a0a.js +1 -0
  357. package/.next/static/chunks/app/api/hooks/agent-event/route-c4d2d5016c5f2a0a.js +1 -0
  358. package/.next/static/chunks/app/api/hooks/claude-done/route-c4d2d5016c5f2a0a.js +1 -0
  359. package/.next/static/chunks/app/api/hooks/permission-request/route-c4d2d5016c5f2a0a.js +1 -0
  360. package/.next/static/chunks/app/api/metrics/vibe/route-c4d2d5016c5f2a0a.js +1 -0
  361. package/.next/static/chunks/app/api/ollama/models/route-c4d2d5016c5f2a0a.js +1 -0
  362. package/.next/static/chunks/app/api/push/escalation/route-c4d2d5016c5f2a0a.js +1 -0
  363. package/.next/static/chunks/app/api/push/subscriptions/route-c4d2d5016c5f2a0a.js +1 -0
  364. package/.next/static/chunks/app/api/push/vapid/route-c4d2d5016c5f2a0a.js +1 -0
  365. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
  366. package/.next/static/chunks/app/api/relays/route-c4d2d5016c5f2a0a.js +1 -0
  367. package/.next/static/chunks/app/api/remote/pair/route-c4d2d5016c5f2a0a.js +1 -0
  368. package/.next/static/chunks/app/api/repositories/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  369. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-c4d2d5016c5f2a0a.js +1 -0
  370. package/.next/static/chunks/app/api/repositories/[id]/todos/route-c4d2d5016c5f2a0a.js +1 -0
  371. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c4d2d5016c5f2a0a.js +1 -0
  372. package/.next/static/chunks/app/api/repositories/clone/route-c4d2d5016c5f2a0a.js +1 -0
  373. package/.next/static/chunks/app/api/repositories/excluded/route-c4d2d5016c5f2a0a.js +1 -0
  374. package/.next/static/chunks/app/api/repositories/restore/route-c4d2d5016c5f2a0a.js +1 -0
  375. package/.next/static/chunks/app/api/repositories/route-c4d2d5016c5f2a0a.js +1 -0
  376. package/.next/static/chunks/app/api/repositories/scan/route-c4d2d5016c5f2a0a.js +1 -0
  377. package/.next/static/chunks/app/api/repositories/sync/route-c4d2d5016c5f2a0a.js +1 -0
  378. package/.next/static/chunks/app/api/repositories/validate-path/route-c4d2d5016c5f2a0a.js +1 -0
  379. package/.next/static/chunks/app/api/settings/default-agents/route-c4d2d5016c5f2a0a.js +1 -0
  380. package/.next/static/chunks/app/api/settings/default-surface-mode/route-c4d2d5016c5f2a0a.js +1 -0
  381. package/.next/static/chunks/app/api/sidebar/group-order/route-c4d2d5016c5f2a0a.js +1 -0
  382. package/.next/static/chunks/app/api/skills/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  383. package/.next/static/chunks/app/api/skills/installations/route-c4d2d5016c5f2a0a.js +1 -0
  384. package/.next/static/chunks/app/api/skills/operations/route-c4d2d5016c5f2a0a.js +1 -0
  385. package/.next/static/chunks/app/api/skills/reindex/route-c4d2d5016c5f2a0a.js +1 -0
  386. package/.next/static/chunks/app/api/skills/route-c4d2d5016c5f2a0a.js +1 -0
  387. package/.next/static/chunks/app/api/slash-commands/route-c4d2d5016c5f2a0a.js +1 -0
  388. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
  389. package/.next/static/chunks/app/api/tasks/[taskId]/route-c4d2d5016c5f2a0a.js +1 -0
  390. package/.next/static/chunks/app/api/templates/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  391. package/.next/static/chunks/app/api/templates/route-c4d2d5016c5f2a0a.js +1 -0
  392. package/.next/static/chunks/app/api/todos/route-c4d2d5016c5f2a0a.js +1 -0
  393. package/.next/static/chunks/app/api/verification/runs/[runId]/route-c4d2d5016c5f2a0a.js +1 -0
  394. package/.next/static/chunks/app/api/verification/runs/route-c4d2d5016c5f2a0a.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c4d2d5016c5f2a0a.js +1 -0
  396. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c4d2d5016c5f2a0a.js +1 -0
  397. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c4d2d5016c5f2a0a.js +1 -0
  398. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c4d2d5016c5f2a0a.js +1 -0
  399. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c4d2d5016c5f2a0a.js +1 -0
  400. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c4d2d5016c5f2a0a.js +1 -0
  401. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c4d2d5016c5f2a0a.js +1 -0
  402. package/.next/static/chunks/app/api/worktrees/[id]/env/route-c4d2d5016c5f2a0a.js +1 -0
  403. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c4d2d5016c5f2a0a.js +1 -0
  404. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c4d2d5016c5f2a0a.js +1 -0
  405. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c4d2d5016c5f2a0a.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c4d2d5016c5f2a0a.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c4d2d5016c5f2a0a.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c4d2d5016c5f2a0a.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c4d2d5016c5f2a0a.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c4d2d5016c5f2a0a.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c4d2d5016c5f2a0a.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c4d2d5016c5f2a0a.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c4d2d5016c5f2a0a.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c4d2d5016c5f2a0a.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c4d2d5016c5f2a0a.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c4d2d5016c5f2a0a.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c4d2d5016c5f2a0a.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c4d2d5016c5f2a0a.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c4d2d5016c5f2a0a.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c4d2d5016c5f2a0a.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c4d2d5016c5f2a0a.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c4d2d5016c5f2a0a.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c4d2d5016c5f2a0a.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c4d2d5016c5f2a0a.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c4d2d5016c5f2a0a.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c4d2d5016c5f2a0a.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c4d2d5016c5f2a0a.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c4d2d5016c5f2a0a.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c4d2d5016c5f2a0a.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c4d2d5016c5f2a0a.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c4d2d5016c5f2a0a.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c4d2d5016c5f2a0a.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c4d2d5016c5f2a0a.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c4d2d5016c5f2a0a.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c4d2d5016c5f2a0a.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c4d2d5016c5f2a0a.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c4d2d5016c5f2a0a.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c4d2d5016c5f2a0a.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c4d2d5016c5f2a0a.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c4d2d5016c5f2a0a.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c4d2d5016c5f2a0a.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c4d2d5016c5f2a0a.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c4d2d5016c5f2a0a.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c4d2d5016c5f2a0a.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c4d2d5016c5f2a0a.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c4d2d5016c5f2a0a.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/search/route-c4d2d5016c5f2a0a.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/send/route-c4d2d5016c5f2a0a.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c4d2d5016c5f2a0a.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c4d2d5016c5f2a0a.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c4d2d5016c5f2a0a.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c4d2d5016c5f2a0a.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c4d2d5016c5f2a0a.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c4d2d5016c5f2a0a.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c4d2d5016c5f2a0a.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c4d2d5016c5f2a0a.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c4d2d5016c5f2a0a.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c4d2d5016c5f2a0a.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c4d2d5016c5f2a0a.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c4d2d5016c5f2a0a.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c4d2d5016c5f2a0a.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c4d2d5016c5f2a0a.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c4d2d5016c5f2a0a.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c4d2d5016c5f2a0a.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c4d2d5016c5f2a0a.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c4d2d5016c5f2a0a.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c4d2d5016c5f2a0a.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c4d2d5016c5f2a0a.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c4d2d5016c5f2a0a.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c4d2d5016c5f2a0a.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c4d2d5016c5f2a0a.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/route-c4d2d5016c5f2a0a.js +1 -0
  478. package/.next/static/chunks/app/manifest.webmanifest/route-c4d2d5016c5f2a0a.js +1 -0
  479. package/.next/static/chunks/app/{page-6871cca022b24807.js → page-022090bf6f932818.js} +1 -1
  480. package/.next/static/chunks/app/proxy/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
  481. package/.next/static/chunks/app/repositories/{page-788ded1b72963d94.js → page-2576158c8420fda0.js} +1 -1
  482. package/.next/static/chunks/app/sessions/page-584adf11ae51df10.js +1 -0
  483. package/.next/static/chunks/app/worktrees/[id]/layout-c4d2d5016c5f2a0a.js +1 -0
  484. package/.next/static/chunks/app/worktrees/[id]/page-38edcd53e51f53b0.js +1 -0
  485. package/.next/static/chunks/{main-6092074a0dc78280.js → main-ac91ed6e71380841.js} +1 -1
  486. package/.next/static/css/acd46e25427a2080.css +1 -0
  487. package/.next/trace +13 -13
  488. package/.next/types/app/api/worktrees/[id]/instances/notes/route.ts +347 -0
  489. package/.next/types/routes.d.ts +2 -1
  490. package/.next/types/validator.ts +9 -0
  491. package/dist/server/locales/en/worktree.json +8 -0
  492. package/dist/server/locales/ja/worktree.json +8 -0
  493. package/dist/server/src/lib/assistant-response-saver.js +168 -12
  494. package/dist/server/src/lib/cli-tools/base.js +311 -1
  495. package/dist/server/src/lib/cli-tools/start-availability.js +52 -0
  496. package/dist/server/src/lib/db/agent-instances-db.js +213 -1
  497. package/dist/server/src/lib/db/migrations/index.js +2 -0
  498. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  499. package/dist/server/src/lib/db/migrations/v61-session-notes.js +85 -0
  500. package/dist/server/src/lib/hooks/sources/antigravity/history.js +204 -9
  501. package/dist/server/src/lib/hooks/sources/claude/history.js +29 -3
  502. package/dist/server/src/lib/hooks/sources/codex/history.js +29 -3
  503. package/dist/server/src/lib/hooks/sources/command-code/history.js +29 -3
  504. package/dist/server/src/lib/hooks/stop-history-capture.js +30 -4
  505. package/dist/server/src/lib/polling/response-checker.js +258 -9
  506. package/dist/server/src/lib/polling/response-poller-core.js +20 -0
  507. package/dist/server/src/lib/polling/structured-history-gate.js +26 -6
  508. package/dist/server/src/lib/push/failure-push-notifier.js +68 -1
  509. package/dist/server/src/lib/push/push-sender.js +16 -5
  510. package/dist/server/src/lib/response-cleaner.js +84 -0
  511. package/dist/server/src/lib/session/current-output-builder.js +156 -4
  512. package/package.json +2 -2
  513. package/.next/server/chunks/21.js +0 -1
  514. package/.next/server/chunks/3086.js +0 -1
  515. package/.next/server/chunks/3270.js +0 -1
  516. package/.next/server/chunks/3925.js +0 -1
  517. package/.next/server/chunks/5043.js +0 -1
  518. package/.next/server/chunks/6306.js +0 -1
  519. package/.next/server/chunks/6363.js +0 -1
  520. package/.next/server/chunks/6491.js +0 -103
  521. package/.next/server/chunks/7890.js +0 -1
  522. package/.next/server/chunks/8063.js +0 -32
  523. package/.next/server/chunks/8687.js +0 -1
  524. package/.next/static/chunks/1255-8cb587d9170b45ed.js +0 -1
  525. package/.next/static/chunks/app/api/assistant/conversation/route-8bc5b680c5f3eae4.js +0 -1
  526. package/.next/static/chunks/app/api/assistant/current-output/route-8bc5b680c5f3eae4.js +0 -1
  527. package/.next/static/chunks/app/api/assistant/messages/route-8bc5b680c5f3eae4.js +0 -1
  528. package/.next/static/chunks/app/api/assistant/session/route-8bc5b680c5f3eae4.js +0 -1
  529. package/.next/static/chunks/app/api/assistant/start/route-8bc5b680c5f3eae4.js +0 -1
  530. package/.next/static/chunks/app/api/assistant/terminal/route-8bc5b680c5f3eae4.js +0 -1
  531. package/.next/static/chunks/app/api/assistant/tools/route-8bc5b680c5f3eae4.js +0 -1
  532. package/.next/static/chunks/app/api/auth/login/route-8bc5b680c5f3eae4.js +0 -1
  533. package/.next/static/chunks/app/api/auth/logout/route-8bc5b680c5f3eae4.js +0 -1
  534. package/.next/static/chunks/app/api/auth/status/route-8bc5b680c5f3eae4.js +0 -1
  535. package/.next/static/chunks/app/api/capabilities/route-8bc5b680c5f3eae4.js +0 -1
  536. package/.next/static/chunks/app/api/daily-summary/route-8bc5b680c5f3eae4.js +0 -1
  537. package/.next/static/chunks/app/api/daily-summary/status/route-8bc5b680c5f3eae4.js +0 -1
  538. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8bc5b680c5f3eae4.js +0 -1
  539. package/.next/static/chunks/app/api/external-apps/[id]/route-8bc5b680c5f3eae4.js +0 -1
  540. package/.next/static/chunks/app/api/external-apps/route-8bc5b680c5f3eae4.js +0 -1
  541. package/.next/static/chunks/app/api/fs/browse/route-8bc5b680c5f3eae4.js +0 -1
  542. package/.next/static/chunks/app/api/fs/recent-paths/route-8bc5b680c5f3eae4.js +0 -1
  543. package/.next/static/chunks/app/api/hooks/agent-event/route-8bc5b680c5f3eae4.js +0 -1
  544. package/.next/static/chunks/app/api/hooks/claude-done/route-8bc5b680c5f3eae4.js +0 -1
  545. package/.next/static/chunks/app/api/hooks/permission-request/route-8bc5b680c5f3eae4.js +0 -1
  546. package/.next/static/chunks/app/api/metrics/vibe/route-8bc5b680c5f3eae4.js +0 -1
  547. package/.next/static/chunks/app/api/ollama/models/route-8bc5b680c5f3eae4.js +0 -1
  548. package/.next/static/chunks/app/api/push/escalation/route-8bc5b680c5f3eae4.js +0 -1
  549. package/.next/static/chunks/app/api/push/subscriptions/route-8bc5b680c5f3eae4.js +0 -1
  550. package/.next/static/chunks/app/api/push/vapid/route-8bc5b680c5f3eae4.js +0 -1
  551. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
  552. package/.next/static/chunks/app/api/relays/route-8bc5b680c5f3eae4.js +0 -1
  553. package/.next/static/chunks/app/api/remote/pair/route-8bc5b680c5f3eae4.js +0 -1
  554. package/.next/static/chunks/app/api/repositories/[id]/route-8bc5b680c5f3eae4.js +0 -1
  555. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +0 -1
  556. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8bc5b680c5f3eae4.js +0 -1
  557. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8bc5b680c5f3eae4.js +0 -1
  558. package/.next/static/chunks/app/api/repositories/clone/route-8bc5b680c5f3eae4.js +0 -1
  559. package/.next/static/chunks/app/api/repositories/excluded/route-8bc5b680c5f3eae4.js +0 -1
  560. package/.next/static/chunks/app/api/repositories/restore/route-8bc5b680c5f3eae4.js +0 -1
  561. package/.next/static/chunks/app/api/repositories/route-8bc5b680c5f3eae4.js +0 -1
  562. package/.next/static/chunks/app/api/repositories/scan/route-8bc5b680c5f3eae4.js +0 -1
  563. package/.next/static/chunks/app/api/repositories/sync/route-8bc5b680c5f3eae4.js +0 -1
  564. package/.next/static/chunks/app/api/repositories/validate-path/route-8bc5b680c5f3eae4.js +0 -1
  565. package/.next/static/chunks/app/api/settings/default-agents/route-8bc5b680c5f3eae4.js +0 -1
  566. package/.next/static/chunks/app/api/settings/default-surface-mode/route-8bc5b680c5f3eae4.js +0 -1
  567. package/.next/static/chunks/app/api/sidebar/group-order/route-8bc5b680c5f3eae4.js +0 -1
  568. package/.next/static/chunks/app/api/skills/[id]/route-8bc5b680c5f3eae4.js +0 -1
  569. package/.next/static/chunks/app/api/skills/installations/route-8bc5b680c5f3eae4.js +0 -1
  570. package/.next/static/chunks/app/api/skills/operations/route-8bc5b680c5f3eae4.js +0 -1
  571. package/.next/static/chunks/app/api/skills/reindex/route-8bc5b680c5f3eae4.js +0 -1
  572. package/.next/static/chunks/app/api/skills/route-8bc5b680c5f3eae4.js +0 -1
  573. package/.next/static/chunks/app/api/slash-commands/route-8bc5b680c5f3eae4.js +0 -1
  574. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
  575. package/.next/static/chunks/app/api/tasks/[taskId]/route-8bc5b680c5f3eae4.js +0 -1
  576. package/.next/static/chunks/app/api/templates/[id]/route-8bc5b680c5f3eae4.js +0 -1
  577. package/.next/static/chunks/app/api/templates/route-8bc5b680c5f3eae4.js +0 -1
  578. package/.next/static/chunks/app/api/todos/route-8bc5b680c5f3eae4.js +0 -1
  579. package/.next/static/chunks/app/api/verification/runs/[runId]/route-8bc5b680c5f3eae4.js +0 -1
  580. package/.next/static/chunks/app/api/verification/runs/route-8bc5b680c5f3eae4.js +0 -1
  581. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8bc5b680c5f3eae4.js +0 -1
  582. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8bc5b680c5f3eae4.js +0 -1
  583. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-8bc5b680c5f3eae4.js +0 -1
  584. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-8bc5b680c5f3eae4.js +0 -1
  585. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8bc5b680c5f3eae4.js +0 -1
  586. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8bc5b680c5f3eae4.js +0 -1
  587. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8bc5b680c5f3eae4.js +0 -1
  588. package/.next/static/chunks/app/api/worktrees/[id]/env/route-8bc5b680c5f3eae4.js +0 -1
  589. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8bc5b680c5f3eae4.js +0 -1
  590. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8bc5b680c5f3eae4.js +0 -1
  591. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8bc5b680c5f3eae4.js +0 -1
  592. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8bc5b680c5f3eae4.js +0 -1
  593. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8bc5b680c5f3eae4.js +0 -1
  594. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8bc5b680c5f3eae4.js +0 -1
  595. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8bc5b680c5f3eae4.js +0 -1
  596. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8bc5b680c5f3eae4.js +0 -1
  597. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8bc5b680c5f3eae4.js +0 -1
  598. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8bc5b680c5f3eae4.js +0 -1
  599. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8bc5b680c5f3eae4.js +0 -1
  600. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8bc5b680c5f3eae4.js +0 -1
  601. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8bc5b680c5f3eae4.js +0 -1
  602. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8bc5b680c5f3eae4.js +0 -1
  603. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8bc5b680c5f3eae4.js +0 -1
  604. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8bc5b680c5f3eae4.js +0 -1
  605. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8bc5b680c5f3eae4.js +0 -1
  606. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8bc5b680c5f3eae4.js +0 -1
  607. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8bc5b680c5f3eae4.js +0 -1
  608. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8bc5b680c5f3eae4.js +0 -1
  609. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8bc5b680c5f3eae4.js +0 -1
  610. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8bc5b680c5f3eae4.js +0 -1
  611. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8bc5b680c5f3eae4.js +0 -1
  612. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8bc5b680c5f3eae4.js +0 -1
  613. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8bc5b680c5f3eae4.js +0 -1
  614. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8bc5b680c5f3eae4.js +0 -1
  615. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-8bc5b680c5f3eae4.js +0 -1
  616. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8bc5b680c5f3eae4.js +0 -1
  617. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8bc5b680c5f3eae4.js +0 -1
  618. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8bc5b680c5f3eae4.js +0 -1
  619. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8bc5b680c5f3eae4.js +0 -1
  620. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8bc5b680c5f3eae4.js +0 -1
  621. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8bc5b680c5f3eae4.js +0 -1
  622. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8bc5b680c5f3eae4.js +0 -1
  623. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8bc5b680c5f3eae4.js +0 -1
  624. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-8bc5b680c5f3eae4.js +0 -1
  625. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-8bc5b680c5f3eae4.js +0 -1
  626. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-8bc5b680c5f3eae4.js +0 -1
  627. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8bc5b680c5f3eae4.js +0 -1
  628. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-8bc5b680c5f3eae4.js +0 -1
  629. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8bc5b680c5f3eae4.js +0 -1
  630. package/.next/static/chunks/app/api/worktrees/[id]/route-8bc5b680c5f3eae4.js +0 -1
  631. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8bc5b680c5f3eae4.js +0 -1
  632. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8bc5b680c5f3eae4.js +0 -1
  633. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8bc5b680c5f3eae4.js +0 -1
  634. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8bc5b680c5f3eae4.js +0 -1
  635. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8bc5b680c5f3eae4.js +0 -1
  636. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8bc5b680c5f3eae4.js +0 -1
  637. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8bc5b680c5f3eae4.js +0 -1
  638. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8bc5b680c5f3eae4.js +0 -1
  639. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8bc5b680c5f3eae4.js +0 -1
  640. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8bc5b680c5f3eae4.js +0 -1
  641. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-8bc5b680c5f3eae4.js +0 -1
  642. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-8bc5b680c5f3eae4.js +0 -1
  643. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8bc5b680c5f3eae4.js +0 -1
  644. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8bc5b680c5f3eae4.js +0 -1
  645. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8bc5b680c5f3eae4.js +0 -1
  646. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8bc5b680c5f3eae4.js +0 -1
  647. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8bc5b680c5f3eae4.js +0 -1
  648. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8bc5b680c5f3eae4.js +0 -1
  649. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8bc5b680c5f3eae4.js +0 -1
  650. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +0 -1
  651. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8bc5b680c5f3eae4.js +0 -1
  652. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8bc5b680c5f3eae4.js +0 -1
  653. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8bc5b680c5f3eae4.js +0 -1
  654. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8bc5b680c5f3eae4.js +0 -1
  655. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-8bc5b680c5f3eae4.js +0 -1
  656. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8bc5b680c5f3eae4.js +0 -1
  657. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
  658. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8bc5b680c5f3eae4.js +0 -1
  659. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8bc5b680c5f3eae4.js +0 -1
  660. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8bc5b680c5f3eae4.js +0 -1
  661. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-8bc5b680c5f3eae4.js +0 -1
  662. package/.next/static/chunks/app/api/worktrees/route-8bc5b680c5f3eae4.js +0 -1
  663. package/.next/static/chunks/app/manifest.webmanifest/route-8bc5b680c5f3eae4.js +0 -1
  664. package/.next/static/chunks/app/proxy/[...path]/route-8bc5b680c5f3eae4.js +0 -1
  665. package/.next/static/chunks/app/sessions/page-fa2d62f3e8436c69.js +0 -1
  666. package/.next/static/chunks/app/worktrees/[id]/layout-8bc5b680c5f3eae4.js +0 -1
  667. package/.next/static/chunks/app/worktrees/[id]/page-18a7d9374bd8c218.js +0 -1
  668. package/.next/static/css/fb455b4e308adbaa.css +0 -1
  669. /package/.next/static/{eVkZd6vpcQwyJIlbymCUg → 0a4qrU8WdUwQrlO4mfLMu}/_buildManifest.js +0 -0
  670. /package/.next/static/{eVkZd6vpcQwyJIlbymCUg → 0a4qrU8WdUwQrlO4mfLMu}/_ssgManifest.js +0 -0
@@ -135,15 +135,26 @@ const FAILURE_BODY_KEYS = {
135
135
  plain: 'failureAgentSession',
136
136
  },
137
137
  };
138
- function buildFailureBody(event, messages, excerpt) {
138
+ function buildFailureBody(event, messages, excerpt, locale) {
139
+ // Issue #2429: read first, for the same reason `modelChange` is read first in
140
+ // `buildPushPayload` — a producer that wrote the sentence itself has said
141
+ // something the dictionary cannot, and appending an excerpt to it would put
142
+ // half of that sentence twice.
143
+ const prebuilt = event.failure?.body?.[locale];
144
+ if (prebuilt)
145
+ return prebuilt;
139
146
  // An event that claims `kind: 'failure'` without saying which failure is a
140
147
  // producer bug. Falling back to the verification wording would misreport it,
141
- // so the generic "something failed" copy is used instead.
148
+ // so the generic "something failed" copy is used instead. A
149
+ // `ProducerWordedFailureReason` that arrived without its body lands here too,
150
+ // and lands honestly: nothing in the dictionary describes it.
142
151
  const reason = event.failure?.reason;
143
- if (reason === undefined) {
152
+ const keys = reason !== undefined
153
+ ? FAILURE_BODY_KEYS[reason]
154
+ : undefined;
155
+ if (keys === undefined) {
144
156
  return excerpt ? messages.failureWithExcerpt.replace('{excerpt}', excerpt) : messages.failure;
145
157
  }
146
- const keys = FAILURE_BODY_KEYS[reason];
147
158
  return excerpt
148
159
  ? messages[keys.withExcerpt].replace('{excerpt}', excerpt)
149
160
  : messages[keys.plain];
@@ -168,7 +179,7 @@ function buildPushPayload(event, locale = i18n_config_1.DEFAULT_LOCALE, now = Da
168
179
  ? messages.promptResolved
169
180
  : buildWaitingBody(event, messages, excerpt, now)
170
181
  : event.kind === 'failure'
171
- ? buildFailureBody(event, messages, excerpt)
182
+ ? buildFailureBody(event, messages, excerpt, resolvedLocale)
172
183
  : // Issue #2045: an update notice is a completion by *bucket*, not by
173
184
  // content, so it is the one completion whose body is not "Done".
174
185
  event.updateAvailable
@@ -11,6 +11,7 @@ exports.cleanClaudeResponse = cleanClaudeResponse;
11
11
  exports.cleanGeminiResponse = cleanGeminiResponse;
12
12
  exports.cleanCopilotResponse = cleanCopilotResponse;
13
13
  exports.cleanOpenCodeResponse = cleanOpenCodeResponse;
14
+ exports.cleanScrollbackResponse = cleanScrollbackResponse;
14
15
  exports.truncateMessage = truncateMessage;
15
16
  const cli_patterns_1 = require("./detection/cli-patterns");
16
17
  const tui_accumulator_1 = require("./tui-accumulator");
@@ -409,6 +410,89 @@ function cleanOpenCodeResponse(response) {
409
410
  }
410
411
  return cleanedLines.join('\n').trim();
411
412
  }
413
+ /**
414
+ * Locate the bottom-pinned chrome of an inline-rendering tool, or -1.
415
+ *
416
+ * Only two of the four tools {@link cleanScrollbackResponse} serves have a
417
+ * measured structural reader, and that is deliberate rather than a gap left to
418
+ * fill later:
419
+ *
420
+ * - **codex** — {@link findCodexChromeStart}, which reads the composer by
421
+ * #2310's SGR rule (composer glyph bold, transcript echo dim) rather than by
422
+ * its placeholder wording. That distinction is the whole point here: the
423
+ * previous guard named codex 0.1x placeholders (`Implement`, `Find and fix`,
424
+ * `Type`) and silently stopped matching when 0.15x started drawing `Ask Codex
425
+ * to do anything` (#2400);
426
+ * - **command-code** — {@link findCommandCodeChromeStart}, anchored on the two
427
+ * full-pane rules that fence its `❯` composer (#2250).
428
+ *
429
+ * agy and vibe-local pin no composer this repository has measured a landmark
430
+ * for, so they get -1 and their whole capture is filtered by their own skip
431
+ * patterns. Inventing a landmark for them would be a guess, and a boundary that
432
+ * is wrong deletes replies instead of chrome.
433
+ *
434
+ * @param lines - Capture rows, ANSI intact — both readers read attributes
435
+ */
436
+ function findScrollbackChromeStart(lines, cliToolId) {
437
+ switch (cliToolId) {
438
+ case 'codex':
439
+ return (0, cli_patterns_1.findCodexChromeStart)(lines);
440
+ case 'command-code':
441
+ return (0, cli_patterns_1.findCommandCodeChromeStart)(lines);
442
+ default:
443
+ return -1;
444
+ }
445
+ }
446
+ /**
447
+ * Clean a capture from a scrollback-rendering tool that has no cleaner of its
448
+ * own (Issue #2437): codex, command-code, antigravity and vibe-local.
449
+ *
450
+ * Until #2437 `cleanCliResponse` returned these tools' captures verbatim, under
451
+ * a comment claiming codex "doesn't need special cleaning". The pre-send flush
452
+ * (`savePendingAssistantResponse`) therefore saved codex's **idle composer** as
453
+ * an assistant reply — measured 10 times on `commandagent-develop` from
454
+ * 2026-09-07, each row a copy of
455
+ *
456
+ * ```text
457
+ * › Ask Codex to do anything
458
+ *
459
+ * gpt-6-astra xhigh · ~/share/work/… · Main [default]
460
+ * ```
461
+ *
462
+ * Two steps, in this order, and both are needed:
463
+ *
464
+ * 1. cut the bottom-pinned chrome structurally
465
+ * ({@link findScrollbackChromeStart}) — the composer's text is whatever the
466
+ * tool decides to print in it, so no pattern can own that boundary;
467
+ * 2. filter what is left with the tool's own skip patterns, the same list
468
+ * `response-checker` already applies on the poller path
469
+ * ({@link getCliToolPatterns}). Sharing the list is what keeps the two
470
+ * paths from disagreeing about what counts as furniture.
471
+ *
472
+ * ANSI is stripped **per row, after** the boundary is found: both chrome readers
473
+ * classify rows by their SGR attributes, and stripping first would destroy the
474
+ * evidence they read.
475
+ *
476
+ * @param response - Raw capture, ANSI intact
477
+ * @param cliToolId - The tool the capture came from
478
+ * @returns Cleaned response, or an empty string when the capture was all chrome
479
+ */
480
+ function cleanScrollbackResponse(response, cliToolId) {
481
+ const allLines = response.split('\n');
482
+ const chromeStart = findScrollbackChromeStart(allLines, cliToolId);
483
+ const bodyLines = chromeStart >= 0 ? allLines.slice(0, chromeStart) : allLines;
484
+ const { skipPatterns } = (0, cli_patterns_1.getCliToolPatterns)(cliToolId);
485
+ const cleanedLines = [];
486
+ for (const rawLine of bodyLines) {
487
+ const line = (0, cli_patterns_1.stripAnsi)(rawLine);
488
+ if (!line.trim())
489
+ continue;
490
+ if (skipPatterns.some(pattern => pattern.test(line)))
491
+ continue;
492
+ cleanedLines.push(line);
493
+ }
494
+ return cleanedLines.join('\n').trim();
495
+ }
412
496
  /**
413
497
  * Truncate a message to fit within a maximum character length.
414
498
  * Issue #571: Prevents excessively large messages from being saved to the database.
@@ -47,6 +47,13 @@ exports.resetChatTurnProgressState = resetChatTurnProgressState;
47
47
  exports.buildChatTurnProgress = buildChatTurnProgress;
48
48
  exports.emitChatTurnProgress = emitChatTurnProgress;
49
49
  const db_1 = require("../../lib/db");
50
+ // Issue #2429: the send ledger, read directly from `chat-db` rather than from
51
+ // the `@/lib/db` barrel because that barrel does not re-export it. It is the
52
+ // SAME row `commandmate wait` asks for over
53
+ // `GET /api/worktrees/:id/messages?limit=1&unit=pairs` (see `readNewestPromptAt`
54
+ // in `cli/commands/wait.ts`), so the server and the CLI cannot disagree about
55
+ // when this instance was last handed a prompt.
56
+ const chat_db_1 = require("../../lib/db/chat-db");
50
57
  const unclassified_frame_tracker_1 = require("../../lib/detection/unclassified-frame-tracker");
51
58
  const composer_text_1 = require("../../lib/detection/composer-text");
52
59
  const upstream_faults_1 = require("../../lib/detection/upstream-faults");
@@ -354,7 +361,7 @@ function summarizeAskUserQuestion(episode) {
354
361
  * @param turn - The published turn record for this instance, or null. Read only
355
362
  * for {@link hookClosedTurn}; `structured` remains the status authority.
356
363
  */
357
- function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn = null) {
364
+ function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn = null, lastPromptAt = null) {
358
365
  if (scraper.status === 'waiting') {
359
366
  return { ...scraper, structuredApplied: false };
360
367
  }
@@ -379,6 +386,13 @@ function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn =
379
386
  if (structured === null || structured.status === 'waiting') {
380
387
  return { ...scraper, structuredApplied: false };
381
388
  }
389
+ // Issue #2429: the structured `ready` is about a turn older than the prompt
390
+ // this instance is currently answering, and the screen says so. See
391
+ // {@link structuredReadyPredatesPrompt} for why that combination is the only
392
+ // one in which the scraper wins a `running`.
393
+ if (structuredReadyPredatesPrompt(scraper, structured, turn, lastPromptAt)) {
394
+ return { ...scraper, structuredApplied: false };
395
+ }
382
396
  const thinking = structured.status === 'running';
383
397
  // Issue #2011 (対応 2): the agent's own turn close IS positive evidence.
384
398
  //
@@ -439,6 +453,135 @@ function hookClosedTurn(turn) {
439
453
  const { closedBy, closedAt, openedAt } = turn;
440
454
  return closedBy === 'stop' && closedAt !== null && openedAt !== null && closedAt > openedAt;
441
455
  }
456
+ /**
457
+ * Whether a structured `ready` could be about a turn that ended before the
458
+ * prompt now on screen (Issue #2429).
459
+ *
460
+ * The cheap half of {@link structuredReadyPredatesPrompt}, split out because
461
+ * `buildPayload` asks it FIRST: it is the gate on the one database read this
462
+ * rule needs, and a session that is not in this state must not pay for the send
463
+ * ledger on every poll. One expression, two callers — the alternative is the
464
+ * "two expressions for one fact" the merge's own docblock says is how this
465
+ * layer drifts.
466
+ *
467
+ * Three conjuncts, and all three are about the same instant:
468
+ *
469
+ * - **the screen is positively generating.** `ScraperVerdict.thinking` is
470
+ * `isGeneratingStatus`, i.e. `running` with `thinking_indicator` /
471
+ * `opencode_processing_indicator` behind it — a spinner, `✻ Thinking…` or
472
+ * `esc to interrupt` that a tool's own pattern matched. It is deliberately
473
+ * NOT `scraper.status === 'running'`: the `no_recent_output` and
474
+ * `unknown_frame` floors are also `running`, and neither is evidence of
475
+ * anything. A frame that merely stopped changing must never retire a `Stop`
476
+ * the agent actually sent.
477
+ * - **the structured layer says `ready`.** `running` and `waiting` already win
478
+ * on their own paths and are not in question here.
479
+ * - **that `ready` came from the agent's own `Stop`.**
480
+ * `getStructuredSessionState` publishes `ready / hook_stop` exactly when the
481
+ * turn record carries `closedBy: 'stop'` with a `closedAt`, so the record is
482
+ * read rather than the folded reason.
483
+ *
484
+ * `openedAt` is deliberately not required, which is what separates this from
485
+ * {@link hookClosedTurn}. A `Stop` that arrived with no turn open publishes
486
+ * `openedAt: null`, and for the tool this Issue was reported from that is the
487
+ * ORDINARY shape: Command Code cannot emit `UserPromptSubmit` (its loader
488
+ * validates the event name against a closed list) and emits no
489
+ * `PreToolUse` / `PostToolUse` on a turn that calls no tool, so nothing ever
490
+ * opens the turn. Requiring an `openedAt` here would exclude precisely the case
491
+ * this rule exists for.
492
+ */
493
+ function staleReadyCandidate(scraper, structured, turn) {
494
+ if (!scraper.thinking)
495
+ return false;
496
+ if (structured === null || structured.status !== 'ready')
497
+ return false;
498
+ if (turn === null)
499
+ return false;
500
+ return turn.closedBy === 'stop' && turn.closedAt !== null;
501
+ }
502
+ /**
503
+ * Whether the structured layer's `ready` has been outlived by the newest prompt
504
+ * this instance was handed (Issue #2429).
505
+ *
506
+ * ## The defect this closes
507
+ *
508
+ * The merge above prefers the agent's own account to the screen, and until this
509
+ * Issue the only exception was a scraper `waiting` (#1708). That is correct for
510
+ * every tool that can say when a turn BEGINS — claude, codex, copilot, gemini
511
+ * and antigravity all post a turn-opening event, so a live turn replaces the
512
+ * previous turn's `stop` before the first generating frame is ever read.
513
+ *
514
+ * Command Code can post neither: no `UserPromptSubmit`, and no `PreToolUse` /
515
+ * `PostToolUse` on a turn that calls no tool. The previous turn's `ready /
516
+ * hook_stop` therefore stays the newest structured fact for the whole of the
517
+ * next turn, and the merge published it over a pane that was visibly generating.
518
+ * Measured 2026-09-08 on a 19 s turn: `sessionStatus` read `ready / hook_stop`
519
+ * from 4 s to 18 s while the status row said `esc to interrupt`. `commandmate
520
+ * wait` reads that field — not the frame — for "is at its composer", so #1975's
521
+ * 60 s unanswered-prompt hold was the only thing standing between a long turn
522
+ * and a `basis=scraper_ready` completion reported before the reply existed.
523
+ *
524
+ * ## Why a comparison rather than a timer
525
+ *
526
+ * The same comparison `wait` already makes (`outstandingPrompt`), against the
527
+ * same two server-stamped facts: the turn's `closedAt`, and the timestamp of
528
+ * the newest user row in the chat ledger. A `Stop` that POSTDATES the newest
529
+ * prompt is this turn's own — the agent finished, the spinner on the frame is a
530
+ * repaint that has not settled, and the structured `ready` keeps winning. A
531
+ * `Stop` that predates it has reported neither the start nor the end of the
532
+ * work now on screen, and about that work it says nothing at all.
533
+ *
534
+ * Shortening #1975's hold would have been the other repair, and the Issue rules
535
+ * it out for a reason worth restating here: the hold is what stops a false
536
+ * completion during a turn nobody has reported yet, so a shorter one moves the
537
+ * false completion earlier rather than removing it.
538
+ *
539
+ * @param lastPromptAt - Epoch ms of the newest prompt handed to this instance,
540
+ * or null when the ledger was not read or holds none. Null decides nothing:
541
+ * an unreadable ledger is not evidence that nothing was sent, so the
542
+ * structured verdict stands exactly as it did before this Issue.
543
+ */
544
+ function structuredReadyPredatesPrompt(scraper, structured, turn, lastPromptAt) {
545
+ if (lastPromptAt === null)
546
+ return false;
547
+ if (!staleReadyCandidate(scraper, structured, turn))
548
+ return false;
549
+ const closedAt = turn?.closedAt ?? null;
550
+ return closedAt !== null && closedAt < lastPromptAt;
551
+ }
552
+ /**
553
+ * When this instance was last handed a prompt, or null (Issue #2429).
554
+ *
555
+ * The server's half of the comparison `commandmate wait` makes over HTTP. Both
556
+ * sides read the same row — the newest `role: 'user'` message scoped to this
557
+ * (worktree, tool, instance) — so the field this function feeds and the notice
558
+ * `wait` prints cannot describe different sends.
559
+ *
560
+ * Best effort, like {@link recordUnclassifiedFrame} and
561
+ * {@link recordStructuredPrompt}: the caller is building a payload, and a
562
+ * ledger that cannot be read must cost this one comparison and nothing else.
563
+ * Null is reported rather than a guess, and null leaves the pre-#2429
564
+ * precedence in place — an unreadable ledger is not evidence that nothing was
565
+ * sent, which is the position `wait` takes on the same read.
566
+ */
567
+ function readNewestPromptAt(db, worktreeId, cliToolId, instanceId) {
568
+ try {
569
+ const row = (0, chat_db_1.getLastUserMessageForInstance)(db, worktreeId, cliToolId, instanceId);
570
+ if (!row)
571
+ return null;
572
+ const at = row.timestamp instanceof Date ? row.timestamp.getTime() : NaN;
573
+ return Number.isFinite(at) ? at : null;
574
+ }
575
+ catch (error) {
576
+ logger.debug('newest-prompt-read-failed', {
577
+ worktreeId,
578
+ cliToolId,
579
+ instanceId,
580
+ error: error instanceof Error ? error.message : String(error),
581
+ });
582
+ return null;
583
+ }
584
+ }
442
585
  /**
443
586
  * Build the current-output payload for a worktree session.
444
587
  *
@@ -766,19 +909,28 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
766
909
  structuredEvents.promptWaitingSince = promptWaiting.at;
767
910
  structuredEvents.promptWaitingSource = promptWaiting.source;
768
911
  }
769
- const merged = mergeStructuredStatus({
912
+ const scraperVerdict = {
770
913
  status: statusResult.status,
771
914
  reason: statusResult.reason,
772
915
  thinking,
773
916
  evidence,
774
917
  isUnclassifiedActive,
775
- }, structured, promptWaiting,
918
+ };
919
+ // Issue #2429: the send ledger, read ONLY when it could change the verdict.
920
+ // `staleReadyCandidate` is the merge's own first three conjuncts, so the two
921
+ // cannot disagree about when this read is needed — and every other poll (an
922
+ // idle pane, a turn the agent has opened, a tool that reports its own start)
923
+ // costs exactly what it did before this Issue, which is nothing.
924
+ const lastPromptAt = staleReadyCandidate(scraperVerdict, structured, structuredEvents)
925
+ ? readNewestPromptAt(db, worktreeId, cliToolId, resolvedInstanceId)
926
+ : null;
927
+ const merged = mergeStructuredStatus(scraperVerdict, structured, promptWaiting,
776
928
  // Issue #2011: the same record `structuredEvents` publishes, read once. The
777
929
  // merge needs `closedBy` / `closedAt` / `openedAt`, which
778
930
  // `StructuredSessionState` folds away into `hook_stop` — and the folded form
779
931
  // cannot tell a `Stop` that closed a watched turn from one that arrived with
780
932
  // no turn open.
781
- structuredEvents);
933
+ structuredEvents, lastPromptAt);
782
934
  // The OR rule, computed once for the whole server (Issue #1737): this is the
783
935
  // same `resolvePromptWaiting` call the `send` guard makes, so the payload and
784
936
  // the guard cannot disagree about whether a prompt is open. What they are
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.33.0",
3
+ "version": "0.33.2",
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",
@@ -88,7 +88,7 @@
88
88
  "jsdom": "^28.1.0",
89
89
  "lucide-react": "^0.554.0",
90
90
  "mermaid": "^11.12.2",
91
- "next": "^15.5.20",
91
+ "next": "^15.5.25",
92
92
  "next-intl": "^4.8.2",
93
93
  "next-themes": "^0.4.6",
94
94
  "postcss": "^8.5.6",
@@ -1 +0,0 @@
1
- "use strict";exports.id=21,exports.ids=[21,3925,6306,8687],exports.modules={23197:(a,b,c)=>{c.d(b,{$M:()=>e,H1:()=>d,q5:()=>f});let d="__global__",e=2e3,f=900},23854:(a,b,c)=>{c.d(b,{$G:()=>f,AL:()=>h,DZ:()=>d,Qe:()=>g,ie:()=>e});let d=4e3,e=15e3;function f(a){var b,c;if(b=a.from,c=a.to,b.worktreeId===c.worktreeId&&b.instanceId===c.instanceId)return{code:"RELAY_SELF_TARGET",message:"A session cannot relay a reply to itself. --reply-to must name a different worktree or a different agent instance."};let d=null===a.parentHops?1:a.parentHops+1;return null===a.parentHops||a.allowRelayChain?d>3?{code:"RELAY_HOPS_EXCEEDED",message:`Relay chains stop at 3 hops; this one would be ${d}. Report the reply to whoever asked instead of forwarding it again.`}:a.openBetween>=1?{code:"RELAY_DUPLICATE_PENDING",message:"There is already an open relay between these two sessions. Wait for it, or withdraw it with `commandmate relays cancel <id>`."}:{ok:!0,hops:d}:{code:"RELAY_CHAIN_BLOCKED",message:"The last message this session was given arrived over a relay, so opening another one would chain two deliveries together. Pass --allow-relay-chain if that is what you mean."}}function g(a){return"code"in a}function h(a){return void 0!==a&&Number.isFinite(a)?Math.min(6048e5,Math.max(6e4,Math.trunc(a))):864e5}},32002:(a,b,c)=>{c.d(b,{e:()=>h});var d=c(56791),e=c(26923),f=c(52201),g=c(15194);function h(a,b,c){let h=(0,d.getAgentInstances)(a,b);return h.length>0?h:(0,g.lu)((0,f.eG)({worktree:c,appSettings:(0,e.Ds)(a)}))}},43925:(a,b,c)=>{c.d(b,{PJ:()=>i,dz:()=>j,vQ:()=>g});var d=c(57836),e=c(23854);let f=(0,c(72626).h)("relay-triggers");function g(a,b,d,e){let g={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayTurnCompleted:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a(g,{settled:e})}catch(c){f.warn("relay-turn-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:g.instanceId,error:c instanceof Error?c.message:String(c)})}})()}async function h(){try{let{runRelayMaintenanceTick:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a()}catch(a){f.warn("relay-maintenance-failed",{error:a instanceof Error?a.message:String(a)})}}function i(){j(),globalThis.__relayTriggersUnsubscribe=(0,d.wN)(a=>{a.waiting&&"prompt"===a.kind&&function(a,b,d){let e={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayPromptWaiting:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));a(e)}catch(c){f.warn("relay-prompt-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:e.instanceId,error:c instanceof Error?c.message:String(c)})}})()}(a.worktreeId,a.cliToolId,a.instanceId)});let a=setInterval(()=>void h(),e.ie);a.unref?.(),globalThis.__relayMaintenanceTimer=a}function j(){let a=globalThis.__relayTriggersUnsubscribe;a&&(a(),globalThis.__relayTriggersUnsubscribe=void 0),globalThis.__relayMaintenanceTimer&&(clearInterval(globalThis.__relayMaintenanceTimer),globalThis.__relayMaintenanceTimer=void 0)}},57836:(a,b,c)=>{c.d(b,{Jp:()=>k,Te:()=>l,hd:()=>j,wN:()=>h});var d=c(24455);let e=(0,c(72626).h)("waiting-episode-state"),f=globalThis.__sessionWaitingEpisodes??(globalThis.__sessionWaitingEpisodes=new Map),g=globalThis.__sessionWaitingTransitionListeners??(globalThis.__sessionWaitingTransitionListeners=new Set);function h(a){return g.add(a),()=>{g.delete(a)}}function i(a){for(let b of g)try{b(a)}catch(b){e.error("waiting-transition-listener-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waiting:a.waiting,error:b instanceof Error?b.message:String(b)})}}function j({worktreeId:a,cliToolId:b,instanceId:c,waiting:e,kind:g=null,structuredSince:h=null,now:j=Date.now()}){let k=(0,d.v7)(a,b,c),l=f.get(k);if(!e)return void 0===l||(f.delete(k),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!1,since:null,kind:null,at:j})),null;if(void 0!==l)return l.kind=g,l.since;let m=h??j;return f.set(k,{since:m,kind:g}),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!0,since:m,kind:g,at:j}),m}function k(a,b,c){return f.get((0,d.v7)(a,b,c))??null}function l(a){let b=`${a}${d.CS}`;for(let a of f.keys())if(a.startsWith(b))return!0;return!1}},89398:(a,b,c)=>{c.d(b,{z:()=>v,B:()=>y});var d=c(43234),e=c(15194),f=c(31990),g=c(95595),h=c(37717),i=c(67882),j=c(23365),k=c(50945),l=c(45017),m=c(23197),n=c(30008),o=c(40043),p=c(57836),q=c(48083),r=c(26547),s=c(129),t=c(66101);let u=(0,c(72626).h)("lib/session/worktree-status-helper");function v(){return{probeCount:0,captureCount:0,healthCheckCount:0}}let w={prompt:3,menu:2,unclassified:1};async function x(a,b,d,e,m,v,w,x,y){let z=m.has(e),A=z,B=null;if(A){y&&y.healthCheckCount++;let a=await (0,k.S)(e,b);a.alive||(A=!1,B=a.reason)}let C=!1,D=!1,E=null,F=null,G=null,H=null;if(A)try{var I;let e=(0,j.y)(b).statusLines;y&&y.captureCount++;let h=await (0,f.Wh)(a,b,e,d),k=(0,l.v7)(a,b,d),m=(0,l.xU)(k),p=m?new Date(m):void 0,s=(0,g.WC)(h,b,p);(0,q.vm)(a,b,d,(0,r.jw)(b,h)),({isWaitingForResponse:C,isProcessing:D}=(0,i.O_)(s.status)),H=s.reason,G=s.evidence,(0,o.ox)(k,{status:s.status,reason:s.reason,evidence:G});let t=(0,n.xF)({worktreeId:a,cliToolId:b,instanceId:d,scraper:{status:s.status,reason:s.reason,hasActivePrompt:s.hasActivePrompt}});C=C||t.waiting,F=t.structured?.at??null,E=(I={waiting:C,hasActivePrompt:s.hasActivePrompt,scraperStatus:s.status,scraperReason:s.reason}).waiting?I.hasActivePrompt?"prompt":"waiting"===I.scraperStatus&&g.ug.has(I.scraperReason)?"menu":"unclassified":null,!s.hasActivePrompt&&w(v,a,{limit:10,cliToolId:b,instanceId:d}).some(a=>"prompt"===a.messageType&&a.promptData?.status!=="answered")&&x(v,a,b,d,b=>{Promise.resolve().then(c.bind(c,49640)).then(({broadcastMessage:c})=>{c("message_updated",{worktreeId:a,message:b})}).catch(b=>{u.warn("prompt-sweep-broadcast-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)})})})}catch{D=!0}let J=(0,p.hd)({worktreeId:a,cliToolId:b,instanceId:d,waiting:C,kind:E,structuredSince:F}),{model:K,effort:L}=(0,q.jl)(a,b,d),M=(0,l.v7)(a,b,d);A||(0,o.xG)(M);let N=A?(0,o.AD)(M):null,O=A?function(a,b,c){try{let d=(0,s.VM)(b),e=(0,t.Kf)(d,d.liveness({worktreeId:a,cliToolId:b,instanceId:c}),Date.now());if(void 0===e.degradedReason&&void 0===e.liveness)return null;return e}catch{return null}}(a,b,d):null;try{z?await (0,f.N5)({sessionName:e,worktreeId:a,cliToolId:b,instanceId:d,status:(0,i.kA)({isRunning:A,isWaitingForResponse:C,isProcessing:D})}):(0,f.Lw)(e)}catch(a){u.debug("tmux-surface:publish-failed",{sessionName:e,error:a instanceof Error?a.message:String(a)})}return{isRunning:A,isWaitingForResponse:C,isProcessing:D,waitingKind:E,waitingSince:J,awaitingInstruction:A&&(0,q.pI)(a,b,d),...null!==K?{model:K}:{},...null!==L?{reasoningEffort:L}:{},...null!==G?{statusEvidence:G}:{},...null!==H?{sessionStatusReason:H}:{},...null!==B?{sessionStatusReason:h.g.EXITED,statusEvidence:"positive"}:{},...null!==N?{lastKnownStatus:N.status,lastKnownStatusAt:N.at}:{},...null!==O?{eventSource:O}:{}}}async function y(a,b,c,f,g,h,i){if(a===m.H1)return{sessionStatusByCli:{},sessionStatusByInstance:{},isSessionRunning:!1,isWaitingForResponse:!1,isProcessing:!1};let j=d.CLIToolManager.getInstance(),k=e.XH,l=h(c,a).filter(a=>a.id!==a.cliTool),n=k.map(b=>({cliToolId:b,instanceId:b,sessionName:j.getTool(b).getSessionName(a,b)}));for(let b of l)n.push({cliToolId:b.cliTool,instanceId:b.id,sessionName:j.getTool(b.cliTool).getSessionName(a,b.id)});i&&(i.probeCount+=n.length);let o=await Promise.all(n.map(async d=>{let e=await x(a,d.cliToolId,d.instanceId,d.sessionName,b,c,f,g,i);return{...d,status:e}})),p={},q={};for(let{cliToolId:a,instanceId:b,status:c}of o){q[b]=c;let d=p[a];p[a]=d?function(a,b){var c,d,e,f;return{isRunning:a.isRunning||b.isRunning,isWaitingForResponse:a.isWaitingForResponse||b.isWaitingForResponse,isProcessing:a.isProcessing||b.isProcessing,waitingKind:(c=a.waitingKind,d=b.waitingKind,null===c?d:null===d||w[c]>=w[d]?c:d),waitingSince:(e=a.waitingSince,f=b.waitingSince,null===e?f:null===f?e:Math.min(e,f)),awaitingInstruction:a.awaitingInstruction||b.awaitingInstruction}}(d,c):c}let r=!1,s=!1,t=!1;for(let a of Object.values(p))a&&(a.isRunning&&(r=!0),a.isWaitingForResponse&&(s=!0),a.isProcessing&&(t=!0));return{sessionStatusByCli:p,sessionStatusByInstance:q,isSessionRunning:r,isWaitingForResponse:s,isProcessing:t}}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=3086,exports.ids=[3086,3925,5220,6306,8687],exports.modules={23854:(a,b,c)=>{c.d(b,{$G:()=>f,AL:()=>h,DZ:()=>d,Qe:()=>g,ie:()=>e});let d=4e3,e=15e3;function f(a){var b,c;if(b=a.from,c=a.to,b.worktreeId===c.worktreeId&&b.instanceId===c.instanceId)return{code:"RELAY_SELF_TARGET",message:"A session cannot relay a reply to itself. --reply-to must name a different worktree or a different agent instance."};let d=null===a.parentHops?1:a.parentHops+1;return null===a.parentHops||a.allowRelayChain?d>3?{code:"RELAY_HOPS_EXCEEDED",message:`Relay chains stop at 3 hops; this one would be ${d}. Report the reply to whoever asked instead of forwarding it again.`}:a.openBetween>=1?{code:"RELAY_DUPLICATE_PENDING",message:"There is already an open relay between these two sessions. Wait for it, or withdraw it with `commandmate relays cancel <id>`."}:{ok:!0,hops:d}:{code:"RELAY_CHAIN_BLOCKED",message:"The last message this session was given arrived over a relay, so opening another one would chain two deliveries together. Pass --allow-relay-chain if that is what you mean."}}function g(a){return"code"in a}function h(a){return void 0!==a&&Number.isFinite(a)?Math.min(6048e5,Math.max(6e4,Math.trunc(a))):864e5}},43925:(a,b,c)=>{c.d(b,{PJ:()=>i,dz:()=>j,vQ:()=>g});var d=c(57836),e=c(23854);let f=(0,c(72626).h)("relay-triggers");function g(a,b,d,e){let g={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayTurnCompleted:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a(g,{settled:e})}catch(c){f.warn("relay-turn-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:g.instanceId,error:c instanceof Error?c.message:String(c)})}})()}async function h(){try{let{runRelayMaintenanceTick:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a()}catch(a){f.warn("relay-maintenance-failed",{error:a instanceof Error?a.message:String(a)})}}function i(){j(),globalThis.__relayTriggersUnsubscribe=(0,d.wN)(a=>{a.waiting&&"prompt"===a.kind&&function(a,b,d){let e={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayPromptWaiting:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));a(e)}catch(c){f.warn("relay-prompt-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:e.instanceId,error:c instanceof Error?c.message:String(c)})}})()}(a.worktreeId,a.cliToolId,a.instanceId)});let a=setInterval(()=>void h(),e.ie);a.unref?.(),globalThis.__relayMaintenanceTimer=a}function j(){let a=globalThis.__relayTriggersUnsubscribe;a&&(a(),globalThis.__relayTriggersUnsubscribe=void 0),globalThis.__relayMaintenanceTimer&&(clearInterval(globalThis.__relayMaintenanceTimer),globalThis.__relayMaintenanceTimer=void 0)}},57836:(a,b,c)=>{c.d(b,{Jp:()=>k,Te:()=>l,hd:()=>j,wN:()=>h});var d=c(24455);let e=(0,c(72626).h)("waiting-episode-state"),f=globalThis.__sessionWaitingEpisodes??(globalThis.__sessionWaitingEpisodes=new Map),g=globalThis.__sessionWaitingTransitionListeners??(globalThis.__sessionWaitingTransitionListeners=new Set);function h(a){return g.add(a),()=>{g.delete(a)}}function i(a){for(let b of g)try{b(a)}catch(b){e.error("waiting-transition-listener-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waiting:a.waiting,error:b instanceof Error?b.message:String(b)})}}function j({worktreeId:a,cliToolId:b,instanceId:c,waiting:e,kind:g=null,structuredSince:h=null,now:j=Date.now()}){let k=(0,d.v7)(a,b,c),l=f.get(k);if(!e)return void 0===l||(f.delete(k),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!1,since:null,kind:null,at:j})),null;if(void 0!==l)return l.kind=g,l.since;let m=h??j;return f.set(k,{since:m,kind:g}),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!0,since:m,kind:g,at:j}),m}function k(a,b,c){return f.get((0,d.v7)(a,b,c))??null}function l(a){let b=`${a}${d.CS}`;for(let a of f.keys())if(a.startsWith(b))return!0;return!1}},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)}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=3270,exports.ids=[3270],exports.modules={2412:(a,b,c)=>{c.d(b,{Qb:()=>f,tR:()=>g});var d=c(46065);let e=Symbol("default-branch-unresolved");async function f(a){let b=await (0,d.Bc)(["symbolic-ref","refs/remotes/origin/HEAD","--short"],a);if(null===b)return e;let c=b.trim();return c.startsWith("origin/")?c.slice(7):null}async function g(a){let b=await f(a);return"string"==typeof b?b:null}},3270:(a,b,c)=>{c.d(b,{VQ:()=>r});var d=c(79646),e=c(29021),f=c(33873),g=c.n(f);class h{constructor(){}static getInstance(){return h.instance||(h.instance=new h),h.instance}normalize(a){let b=a.match(/^ssh:\/\/git@([^:\/]+)(:\d+)?\/(.+?)(\.git)?$/);if(b)return`https://${b[1]}/${b[3]}`.toLowerCase().replace(/\/$/,"");let c=a.match(/^git@([^:]+):(.+?)(\.git)?$/);return c?`https://${c[1]}/${c[2]}`.toLowerCase().replace(/\/$/,""):a.replace(/\.git\/?$/,"").replace(/\/$/,"").toLowerCase()}isSameRepository(a,b){return this.normalize(a)===this.normalize(b)}extractRepoName(a){let b=a.match(/^ssh:\/\/git@[^\/]+\/(.+?)(\.git)?$/);if(b){let a=b[1].split("/");return a[a.length-1]}let c=a.match(/:(.+?)(\.git)?$/);if(c&&a.startsWith("git@")){let a=c[1].split("/");return a[a.length-1]}let d=a.match(/\/([^\/]+?)(\.git)?$/);return d?d[1]:""}getUrlType(a){return a.startsWith("https://")?"https":a.startsWith("git@")||a.startsWith("ssh://")?"ssh":null}validate(a){if(!a||"string"!=typeof a||""===a.trim())return{valid:!1,error:"EMPTY_URL"};let b=a.trim();return b.startsWith("https://")?/^https:\/\/[^\/]+\/[^\/]+\/[^\/]+(\.git)?$/.test(b)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:b.startsWith("git@")?/^git@[^:]+:.+\/.+(\.git)?$/.test(b)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:b.startsWith("ssh://")?/^ssh:\/\/git@[^\/]+(:\d+)?\/[^\/]+\/.+(\.git)?$/.test(b)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:{valid:!1,error:"INVALID_URL_FORMAT"}}}var i=c(66007),j=c(10406),k=c(82325),l=c(59082),m=c(61068);let n=(0,c(72626).h)("clone-manager");class o extends Error{constructor(a){super(a.message),this.name="CloneManagerError",this.category=a.category,this.code=a.code,this.recoverable=a.recoverable,this.suggestedAction=a.suggestedAction}}let p={EMPTY_URL:{category:"validation",code:"EMPTY_URL",message:"Clone URL is required",recoverable:!0,suggestedAction:"Please enter a valid git clone URL"},INVALID_URL_FORMAT:{category:"validation",code:"INVALID_URL_FORMAT",message:"Invalid URL format. Please use HTTPS or SSH URL.",recoverable:!0,suggestedAction:"Enter a valid URL like https://github.com/owner/repo or git@github.com:owner/repo"},DUPLICATE_CLONE_URL:{category:"validation",code:"DUPLICATE_CLONE_URL",message:"This repository is already registered",recoverable:!1,suggestedAction:"Use the existing repository instead"},DUPLICATE_REPOSITORY_PATH:{category:"validation",code:"DUPLICATE_REPOSITORY_PATH",message:"Another repository is already registered at the target location",recoverable:!0,suggestedAction:"Choose a different directory, or remove the existing repository registration"},CLONE_IN_PROGRESS:{category:"validation",code:"CLONE_IN_PROGRESS",message:"A clone operation is already in progress for this URL",recoverable:!1,suggestedAction:"Wait for the current clone to complete"},DIRECTORY_EXISTS:{category:"filesystem",code:"DIRECTORY_EXISTS",message:"Target directory already exists",recoverable:!0,suggestedAction:"Choose a different directory or remove the existing one"},INVALID_TARGET_PATH:{category:"validation",code:"INVALID_TARGET_PATH",message:"Target path is invalid or outside allowed directory",recoverable:!0,suggestedAction:"Use a path within the configured base directory"},AUTH_FAILED:{category:"auth",code:"AUTH_FAILED",message:"Authentication failed",recoverable:!0,suggestedAction:"Check your credentials or SSH keys"},NETWORK_ERROR:{category:"network",code:"NETWORK_ERROR",message:"Network error occurred",recoverable:!0,suggestedAction:"Check your internet connection and try again"},GIT_ERROR:{category:"git",code:"GIT_ERROR",message:"Git command failed",recoverable:!1,suggestedAction:"Check the error message for details"},CLONE_TIMEOUT:{category:"network",code:"CLONE_TIMEOUT",message:"Clone operation timed out",recoverable:!0,suggestedAction:"Try again or clone a smaller repository"},CLONE_SETUP_FAILED:{category:"filesystem",code:"CLONE_SETUP_FAILED",message:"Failed to prepare the clone target directory",recoverable:!0,suggestedAction:"Check the permissions and free space of the target directory, then try again"},CLONE_REGISTRATION_FAILED:{category:"system",code:"CLONE_REGISTRATION_FAILED",message:"The repository was cloned but could not be registered",recoverable:!0,suggestedAction:"Remove the cloned directory and try again"}},q=!1;class r{constructor(a,b={}){this.db=a,this.urlNormalizer=h.getInstance(),this.config={basePath:b.basePath||this.resolveDefaultBasePath(),timeout:b.timeout||6e5},this.activeProcesses=new Map,this.pendingUpstreamUrls=new Map}resolveDefaultBasePath(){let a=process.env.WORKTREE_BASE_PATH;return a?(q||(n.warn("config:deprecated",{key:"WORKTREE_BASE_PATH",replacement:"CM_ROOT_DIR"}),q=!0),g().resolve(a)):process.cwd()}validateCloneRequest(a){let b=this.urlNormalizer.validate(a);return b.valid?{valid:!0,normalizedUrl:this.urlNormalizer.normalize(a),repoName:this.urlNormalizer.extractRepoName(a)}:{valid:!1,error:p[b.error||"INVALID_URL_FORMAT"]}}checkDuplicateRepository(a){return(0,j.Uj)(this.db,a)}checkRepositoryAtPath(a){return(0,j.Dp)(this.db,a)}removeIfGhostRepository(a){return!((0,e.existsSync)(a.path)||(0,j.kp)(this.db,a.path)>0)&&((0,j.oG)(this.db,a.id),n.info("clone:ghost-repository-removed",{repositoryId:a.id,name:a.name}),!0)}checkActiveCloneJob(a){return(0,j.fD)(this.db,a)}createCloneJob(a){return(0,j.tw)(this.db,a)}getTargetPath(a){return g().join(this.config.basePath,a)}async startCloneJob(a,b,c){let d,f=this.validateCloneRequest(a);if(!f.valid)return{success:!1,error:f.error};let g=f.normalizedUrl,h=f.repoName,j=this.checkDuplicateRepository(g);if(j&&!this.removeIfGhostRepository(j))return{success:!1,error:{...p.DUPLICATE_CLONE_URL,message:`This repository is already registered as "${j.name}"`}};let k=this.checkActiveCloneJob(g);if(k)return{success:!1,jobId:k.id,error:p.CLONE_IN_PROGRESS};if(b){let a=function(a,b){try{return(0,i.b$)(a,b)}catch{return n.warn("invalid-custom-target"),null}}(b,this.config.basePath);if(!a)return{success:!1,error:p.INVALID_TARGET_PATH};d=a}else d=this.getTargetPath(h);if((0,e.existsSync)(d))return{success:!1,error:p.DIRECTORY_EXISTS};let l=this.checkRepositoryAtPath(d);if(l&&!this.removeIfGhostRepository(l))return{success:!1,error:{...p.DUPLICATE_REPOSITORY_PATH,message:`Another repository is already registered at the target location as "${l.name}"`}};let m=this.createCloneJob({cloneUrl:a,normalizedCloneUrl:g,targetPath:d});return c?.upstreamUrl&&this.pendingUpstreamUrls.set(m.id,c.upstreamUrl),this.executeClone(m.id,a,d).catch(a=>{n.error("clone:job-failed",{jobId:m.id,error:a instanceof Error?a.message:String(a)})}),{success:!0,jobId:m.id}}markJobFailed(a,b){this.pendingUpstreamUrls.delete(a);try{(0,j.k5)(this.db,a,{status:"failed",errorCategory:b.category,errorCode:b.code,errorMessage:b.message,completedAt:new Date})}catch(c){n.error("clone:job-status-update-failed",{jobId:a,errorCode:b.code,dbError:c instanceof Error?c.message:String(c)})}}async executeClone(a,b,c){let f;try{(0,j.k5)(this.db,a,{status:"running",startedAt:new Date}),f=g().dirname(c),(0,e.existsSync)(f)||(0,e.mkdirSync)(f,{recursive:!0})}catch(b){throw n.error("clone:setup-failed",{jobId:a,error:b instanceof Error?b.message:String(b)}),this.markJobFailed(a,p.CLONE_SETUP_FAILED),new o(p.CLONE_SETUP_FAILED)}return new Promise((e,g)=>{let h=(0,d.spawn)("git",["clone","--progress",b,c],{stdio:["ignore","pipe","pipe"],cwd:f});this.activeProcesses.set(a,h),h.pid&&(0,j.k5)(this.db,a,{pid:h.pid});let i="";h.stderr?.on("data",b=>{i+=b.toString();let c=this.parseGitProgress(b.toString());null!==c&&(0,j.k5)(this.db,a,{progress:c})});let k=setTimeout(()=>{h.kill("SIGTERM"),(0,j.k5)(this.db,a,{status:"failed",errorCategory:"network",errorCode:"CLONE_TIMEOUT",errorMessage:"Clone operation timed out",completedAt:new Date}),this.activeProcesses.delete(a),this.pendingUpstreamUrls.delete(a),g(new o(p.CLONE_TIMEOUT))},this.config.timeout);h.on("close",async d=>{if(clearTimeout(k),this.activeProcesses.delete(a),0===d)try{await this.onCloneSuccess(a,b,c),e()}catch(a){g(a)}else{this.pendingUpstreamUrls.delete(a);let b=this.parseGitError(i,d);(0,j.k5)(this.db,a,{status:"failed",errorCategory:b.category,errorCode:b.code,errorMessage:b.message,completedAt:new Date}),g(new o(b))}}),h.on("error",b=>{clearTimeout(k),this.activeProcesses.delete(a),this.pendingUpstreamUrls.delete(a);let c={category:"system",code:"SPAWN_ERROR",message:`Failed to spawn git process: ${b.message}`,recoverable:!1,suggestedAction:"Ensure git is installed and available in PATH"};(0,j.k5)(this.db,a,{status:"failed",errorCategory:c.category,errorCode:c.code,errorMessage:c.message,completedAt:new Date}),g(new o(c))})})}async onCloneSuccess(a,b,c){try{let d=(0,j.bM)(this.db,a);if(!d)return;let e=this.urlNormalizer.getUrlType(b),f=(0,j.vB)(this.db,{name:g().basename(c),path:c,cloneUrl:b,normalizedCloneUrl:d.normalizedCloneUrl,cloneSource:e||"https"}),h=this.pendingUpstreamUrls.get(a);if(h){this.pendingUpstreamUrls.delete(a);try{await (0,l.Iz)(c,"upstream",h),n.info("clone:upstream-registered",{jobId:a})}catch(b){n.warn("clone:upstream-register-failed",{jobId:a,error:b instanceof Error?b.message:String(b)})}}try{let a=await (0,k.YM)(c);if(a.length>0){let{syncResult:b,cleanupWarnings:c}=await (0,m.l7)(this.db,a);n.info("clone:worktrees-registered",{count:a.length,upserted:b.upsertedCount}),c.length>0&&n.warn("clone:cleanup-warnings",{cleanupWarnings:c})}}catch(a){n.error("clone:worktree-scan-failed",{targetPath:c,error:a instanceof Error?a.message:String(a)})}(0,j.k5)(this.db,a,{status:"completed",progress:100,repositoryId:f.id,completedAt:new Date})}catch(b){throw n.error("clone:registration-failed",{jobId:a,error:b instanceof Error?b.message:String(b)}),this.markJobFailed(a,p.CLONE_REGISTRATION_FAILED),new o(p.CLONE_REGISTRATION_FAILED)}}parseGitProgress(a){let b=a.match(/(?:Receiving objects|Resolving deltas|Cloning into[^:]*?):\s*(\d+)%/);if(b){let a=parseInt(b[1],10);return isNaN(a)?null:a}return null}parseGitError(a,b){let c=a.toLowerCase(),d=a.substring(0,200);return["authentication failed","permission denied","could not read from remote repository"].some(a=>c.includes(a))?{...p.AUTH_FAILED,message:`Authentication failed: ${d}`}:["could not resolve host","connection refused","network is unreachable"].some(a=>c.includes(a))?{...p.NETWORK_ERROR,message:`Network error: ${d}`}:{...p.GIT_ERROR,message:`Git clone failed (exit code ${b}): ${d}`}}getCloneJobStatus(a){let b=(0,j.bM)(this.db,a);if(!b)return null;let c={jobId:b.id,status:b.status,progress:b.progress,repositoryId:b.repositoryId};return"failed"===b.status&&b.errorCode&&(c.error={category:b.errorCategory||"system",code:b.errorCode,message:b.errorMessage||"Unknown error"}),c}cancelCloneJob(a){let b=this.activeProcesses.get(a);if(b)return b.kill("SIGTERM"),this.activeProcesses.delete(a),(0,j.k5)(this.db,a,{status:"cancelled",completedAt:new Date}),!0;let c=(0,j.bM)(this.db,a);return!!c&&"pending"===c.status&&((0,j.k5)(this.db,a,{status:"cancelled",completedAt:new Date}),!0)}}},23197:(a,b,c)=>{c.d(b,{$M:()=>e,H1:()=>d,q5:()=>f});let d="__global__",e=2e3,f=900},59082:(a,b,c)=>{c.d(b,{C4:()=>l,FW:()=>j,Iz:()=>k,Z3:()=>m});var d=c(65417),e=c(72626),f=c(46065),g=c(2412),h=c(63271);let i=(0,e.h)("git-remote");async function j(a,b){let{remote:c="origin",prune:e}=b,g=["fetch"];e&&g.push("--prune"),g.push(c,"--"),await (0,f.sl)(g,a,d.dw)}async function k(a,b,c){await (0,f.rS)(["remote","add",b,c],a,5e3)}async function l(a,b){let{remote:c="origin",branch:e,rebase:g,ffOnly:h}=b;return(0,f.dX)(a,async()=>{let b=["pull"];return g&&b.push("--rebase"),h&&b.push("--ff-only"),b.push(c),e&&b.push(e),b.push("--"),(0,f.mY)(b,a,d.A$,!0)})}async function m(a,b){let{remote:c="origin",branch:e,force:j,forceWithLease:k,setUpstream:l}=b;if(j||k){let b=await (0,g.tR)(a);if(null!==b&&b===e)throw new h.rm;i.warn("git:danger:force-push",{operation:"push",worktreePath:a,branch:e,forceWithLease:!0===k,timestamp:new Date().toISOString()})}await (0,f.dX)(a,async()=>{let b=["push"];k?b.push("--force-with-lease"):j&&b.push("--force"),l&&b.push("-u"),b.push(c,`${e}:refs/heads/${e}`,"--"),await (0,f.sl)(b,a,d.fL)})}},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}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=3925,exports.ids=[3925,6306,8687],exports.modules={23854:(a,b,c)=>{c.d(b,{$G:()=>f,AL:()=>h,DZ:()=>d,Qe:()=>g,ie:()=>e});let d=4e3,e=15e3;function f(a){var b,c;if(b=a.from,c=a.to,b.worktreeId===c.worktreeId&&b.instanceId===c.instanceId)return{code:"RELAY_SELF_TARGET",message:"A session cannot relay a reply to itself. --reply-to must name a different worktree or a different agent instance."};let d=null===a.parentHops?1:a.parentHops+1;return null===a.parentHops||a.allowRelayChain?d>3?{code:"RELAY_HOPS_EXCEEDED",message:`Relay chains stop at 3 hops; this one would be ${d}. Report the reply to whoever asked instead of forwarding it again.`}:a.openBetween>=1?{code:"RELAY_DUPLICATE_PENDING",message:"There is already an open relay between these two sessions. Wait for it, or withdraw it with `commandmate relays cancel <id>`."}:{ok:!0,hops:d}:{code:"RELAY_CHAIN_BLOCKED",message:"The last message this session was given arrived over a relay, so opening another one would chain two deliveries together. Pass --allow-relay-chain if that is what you mean."}}function g(a){return"code"in a}function h(a){return void 0!==a&&Number.isFinite(a)?Math.min(6048e5,Math.max(6e4,Math.trunc(a))):864e5}},43925:(a,b,c)=>{c.d(b,{PJ:()=>i,dz:()=>j,vQ:()=>g});var d=c(57836),e=c(23854);let f=(0,c(72626).h)("relay-triggers");function g(a,b,d,e){let g={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayTurnCompleted:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a(g,{settled:e})}catch(c){f.warn("relay-turn-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:g.instanceId,error:c instanceof Error?c.message:String(c)})}})()}async function h(){try{let{runRelayMaintenanceTick:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a()}catch(a){f.warn("relay-maintenance-failed",{error:a instanceof Error?a.message:String(a)})}}function i(){j(),globalThis.__relayTriggersUnsubscribe=(0,d.wN)(a=>{a.waiting&&"prompt"===a.kind&&function(a,b,d){let e={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayPromptWaiting:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));a(e)}catch(c){f.warn("relay-prompt-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:e.instanceId,error:c instanceof Error?c.message:String(c)})}})()}(a.worktreeId,a.cliToolId,a.instanceId)});let a=setInterval(()=>void h(),e.ie);a.unref?.(),globalThis.__relayMaintenanceTimer=a}function j(){let a=globalThis.__relayTriggersUnsubscribe;a&&(a(),globalThis.__relayTriggersUnsubscribe=void 0),globalThis.__relayMaintenanceTimer&&(clearInterval(globalThis.__relayMaintenanceTimer),globalThis.__relayMaintenanceTimer=void 0)}},57836:(a,b,c)=>{c.d(b,{Jp:()=>k,Te:()=>l,hd:()=>j,wN:()=>h});var d=c(24455);let e=(0,c(72626).h)("waiting-episode-state"),f=globalThis.__sessionWaitingEpisodes??(globalThis.__sessionWaitingEpisodes=new Map),g=globalThis.__sessionWaitingTransitionListeners??(globalThis.__sessionWaitingTransitionListeners=new Set);function h(a){return g.add(a),()=>{g.delete(a)}}function i(a){for(let b of g)try{b(a)}catch(b){e.error("waiting-transition-listener-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waiting:a.waiting,error:b instanceof Error?b.message:String(b)})}}function j({worktreeId:a,cliToolId:b,instanceId:c,waiting:e,kind:g=null,structuredSince:h=null,now:j=Date.now()}){let k=(0,d.v7)(a,b,c),l=f.get(k);if(!e)return void 0===l||(f.delete(k),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!1,since:null,kind:null,at:j})),null;if(void 0!==l)return l.kind=g,l.since;let m=h??j;return f.set(k,{since:m,kind:g}),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!0,since:m,kind:g,at:j}),m}function k(a,b,c){return f.get((0,d.v7)(a,b,c))??null}function l(a){let b=`${a}${d.CS}`;for(let a of f.keys())if(a.startsWith(b))return!0;return!1}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=5043,exports.ids=[5043],exports.modules={35043:(a,b,c)=>{c.r(b),c.d(b,{AGENT_EVENT_TYPES:()=>t.b0,MAX_CWD_LENGTH:()=>v,applyAgentStopEvent:()=>A,isAgentEventType:()=>t.o0,resolveWorktreeByCwd:()=>y,validateHookCwd:()=>w});var d=c(29021),e=c(33873),f=c(56791),g=c(48524),h=c(66007),i=c(52767),j=c(23707),k=c(48083),l=c(2734),m=c(72626);let n=(0,m.h)("lib/hooks/stop-history-capture"),o=[150,500,2e3,5e3],p=new Set([l.c]);function q(a){return new Promise(b=>{setTimeout(b,a)})}async function r(a,b,c,d,e,f){let g=Date.now();try{for(let[h,i]of f.entries()){if(await q(i),await a.captureStructuredHistoryTurn(b.id,c,d,e))return n.info("stop-history-capture-deferred-captured",{worktreeId:b.id,cliToolId:c,instanceId:d,attempt:h+1,attempts:f.length,elapsedMs:Date.now()-g}),!0;n.debug("stop-history-capture-deferred-open",{worktreeId:b.id,cliToolId:c,instanceId:d,attempt:h+1,attempts:f.length,elapsedMs:Date.now()-g})}return n.info("stop-history-capture-deferred-exhausted",{worktreeId:b.id,cliToolId:c,instanceId:d,attempts:f.length,elapsedMs:Date.now()-g}),!1}catch(a){return n.warn("stop-history-capture-deferred-failed",{worktreeId:b.id,cliToolId:c,instanceId:d,error:a instanceof Error?a.message:String(a)}),!1}}async function s(a,b,d,e={}){try{let f=await Promise.all([c.e(8918),c.e(8687)]).then(c.bind(c,28918));if(!f.isPullTranscriptHistory(b))return{status:"unavailable"};let g={worktreePath:a.path,transcriptPathHint:null};if(await f.captureStructuredHistoryTurn(a.id,b,d,g))return{status:"captured"};let h=()=>f.hasStructuredHistoryTranscript(a.id,b,d,g);if(p.has(b)){let c=e.deferredDelaysMs??o;if(0===c.length||!await h())return{status:"unavailable"};let i=r(f,a,b,d,g,c);return n.info("stop-history-capture-deferred",{worktreeId:a.id,cliToolId:b,instanceId:d,delaysMs:c}),{status:"deferred",deferred:i}}let i=e.retryDelayMs??500;if(i<=0||!await h())return{status:"unavailable"};let j=Math.max(1,e.maxAttempts??3);for(let c=2;c<=j;c+=1){await q(i);let e=await f.captureStructuredHistoryTurn(a.id,b,d,g);if(n.debug("stop-history-capture-retried",{worktreeId:a.id,cliToolId:b,instanceId:d,attempt:c,maxAttempts:j,captured:e}),e)return{status:"captured"}}return{status:"unavailable"}}catch(c){return n.warn("stop-history-capture-failed",{worktreeId:a.id,cliToolId:b,instanceId:d,error:c instanceof Error?c.message:String(c)}),{status:"unavailable"}}}var t=c(62887);let u=(0,m.h)("lib/hooks/agent-event-service"),v=4096;function w(a){if("string"!=typeof a||""===a.trim())return{ok:!1,reason:"empty"};if(a.length>v)return{ok:!1,reason:"too_long"};let b=a;try{b=decodeURIComponent(a)}catch{b=a}return a.includes("\0")||b.includes("\0")?{ok:!1,reason:"nul_byte"}:(0,e.isAbsolute)(a)?x(a)||x(b)?{ok:!1,reason:"traversal"}:{ok:!0,cwd:a}:{ok:!1,reason:"not_absolute"}}function x(a){return a.split("\\"===e.sep?/[\\/]/:"/").some(a=>".."===a)}function y(a,b){let c=z(b);if(null===c)return null;let d=null,e=-1;for(let b of(0,f.getWorktrees)(a)){let a=z(b.path);null!==a&&(0,h.Uc)(c,a)&&a.length>e&&(d=b,e=a.length)}return d}function z(a){try{return(0,d.realpathSync)(a)}catch{return null}}async function A(a,b,c,d){let e;(0,k.S9)(b.id,c,d);let{status:f}=await s(b,c,d),h="captured"===f;try{e=(0,g.MH)(a,b.id,c,d)}catch(a){return u.warn("agent-stop-task-lookup-failed",{worktreeId:b.id,error:a instanceof Error?a.message:String(a)}),{taskId:null,taskEventApplied:!1,verificationRunId:null,structuredHistoryCaptured:h,structuredHistoryOutcome:f}}if(!e)return{taskId:null,taskEventApplied:!1,verificationRunId:null,structuredHistoryCaptured:h,structuredHistoryOutcome:f};let l=!1;try{let b=(0,i.g)(a,e.id,"agent_idle",{source:"hook"});l=null!==b&&null!==b.toStatus}catch(a){u.warn("agent-stop-event-failed",{taskId:e.id,error:a instanceof Error?a.message:String(a)})}if(!e.contract.success.autoVerifyOnStop)return{taskId:e.id,taskEventApplied:l,verificationRunId:null,structuredHistoryCaptured:h,structuredHistoryOutcome:f};let m=null;try{let{runId:a}=await (0,j.AT)({worktreeId:b.id,worktreePath:b.path,instanceId:d,taskId:e.id,trigger:"task"});m=a}catch(a){a instanceof j.Wb||u.error("agent-stop-auto-verify-failed",{taskId:e.id,error:a instanceof Error?a.message:String(a)})}return{taskId:e.id,taskEventApplied:l,verificationRunId:m,structuredHistoryCaptured:h,structuredHistoryOutcome:f}}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=6306,exports.ids=[3925,6306,8687],exports.modules={23854:(a,b,c)=>{c.d(b,{$G:()=>f,AL:()=>h,DZ:()=>d,Qe:()=>g,ie:()=>e});let d=4e3,e=15e3;function f(a){var b,c;if(b=a.from,c=a.to,b.worktreeId===c.worktreeId&&b.instanceId===c.instanceId)return{code:"RELAY_SELF_TARGET",message:"A session cannot relay a reply to itself. --reply-to must name a different worktree or a different agent instance."};let d=null===a.parentHops?1:a.parentHops+1;return null===a.parentHops||a.allowRelayChain?d>3?{code:"RELAY_HOPS_EXCEEDED",message:`Relay chains stop at 3 hops; this one would be ${d}. Report the reply to whoever asked instead of forwarding it again.`}:a.openBetween>=1?{code:"RELAY_DUPLICATE_PENDING",message:"There is already an open relay between these two sessions. Wait for it, or withdraw it with `commandmate relays cancel <id>`."}:{ok:!0,hops:d}:{code:"RELAY_CHAIN_BLOCKED",message:"The last message this session was given arrived over a relay, so opening another one would chain two deliveries together. Pass --allow-relay-chain if that is what you mean."}}function g(a){return"code"in a}function h(a){return void 0!==a&&Number.isFinite(a)?Math.min(6048e5,Math.max(6e4,Math.trunc(a))):864e5}},43925:(a,b,c)=>{c.d(b,{PJ:()=>i,dz:()=>j,vQ:()=>g});var d=c(57836),e=c(23854);let f=(0,c(72626).h)("relay-triggers");function g(a,b,d,e){let g={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayTurnCompleted:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a(g,{settled:e})}catch(c){f.warn("relay-turn-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:g.instanceId,error:c instanceof Error?c.message:String(c)})}})()}async function h(){try{let{runRelayMaintenanceTick:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a()}catch(a){f.warn("relay-maintenance-failed",{error:a instanceof Error?a.message:String(a)})}}function i(){j(),globalThis.__relayTriggersUnsubscribe=(0,d.wN)(a=>{a.waiting&&"prompt"===a.kind&&function(a,b,d){let e={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayPromptWaiting:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));a(e)}catch(c){f.warn("relay-prompt-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:e.instanceId,error:c instanceof Error?c.message:String(c)})}})()}(a.worktreeId,a.cliToolId,a.instanceId)});let a=setInterval(()=>void h(),e.ie);a.unref?.(),globalThis.__relayMaintenanceTimer=a}function j(){let a=globalThis.__relayTriggersUnsubscribe;a&&(a(),globalThis.__relayTriggersUnsubscribe=void 0),globalThis.__relayMaintenanceTimer&&(clearInterval(globalThis.__relayMaintenanceTimer),globalThis.__relayMaintenanceTimer=void 0)}},57836:(a,b,c)=>{c.d(b,{Jp:()=>k,Te:()=>l,hd:()=>j,wN:()=>h});var d=c(24455);let e=(0,c(72626).h)("waiting-episode-state"),f=globalThis.__sessionWaitingEpisodes??(globalThis.__sessionWaitingEpisodes=new Map),g=globalThis.__sessionWaitingTransitionListeners??(globalThis.__sessionWaitingTransitionListeners=new Set);function h(a){return g.add(a),()=>{g.delete(a)}}function i(a){for(let b of g)try{b(a)}catch(b){e.error("waiting-transition-listener-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waiting:a.waiting,error:b instanceof Error?b.message:String(b)})}}function j({worktreeId:a,cliToolId:b,instanceId:c,waiting:e,kind:g=null,structuredSince:h=null,now:j=Date.now()}){let k=(0,d.v7)(a,b,c),l=f.get(k);if(!e)return void 0===l||(f.delete(k),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!1,since:null,kind:null,at:j})),null;if(void 0!==l)return l.kind=g,l.since;let m=h??j;return f.set(k,{since:m,kind:g}),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!0,since:m,kind:g,at:j}),m}function k(a,b,c){return f.get((0,d.v7)(a,b,c))??null}function l(a){let b=`${a}${d.CS}`;for(let a of f.keys())if(a.startsWith(b))return!0;return!1}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=6363,exports.ids=[3086,3925,5220,6306,6363,8687],exports.modules={12462:(a,b,c)=>{c.d(b,{T8:()=>j,o4:()=>k});var d=c(31990),e=c(56791),f=c(49640),g=c(82450),h=c(15194);let i=(0,c(72626).h)("assistant-response-saver");function j(a,b){switch(b){case"claude":return(0,g.NN)(a);case"gemini":return(0,g.IS)(a);case"opencode":return(0,g.aW)(a);case"copilot":return(0,g.LH)(a);default:return a.trim()}}async function k(a,b,c,g,k){let l=k??c;try{let m;if((0,h.VA)(c))return null;let n=(0,e.getSessionState)(a,b,l),o=n?.lastCapturedLine||0;try{m=await (0,d.Wh)(b,c,1e4,k)}catch{return i.info("failed-to-capture"),null}if(!m)return null;let p=m.split("\n"),q=p.length;for(;q>0&&""===p[q-1].trim();)q--;let r=q,{bufferReset:s,reason:t}=r>0&&o>25&&r+25<o?{bufferReset:!0,reason:"shrink"}:r>0&&o>50&&r<50?{bufferReset:!0,reason:"restart"}:{bufferReset:!1,reason:null};s&&i.info("buffer:reset-detected",{reason:t,currentLineCount:r,lastCapturedLine:o});let u=s?0:o;if(!s&&r<=o)return r<o&&((0,e.updateSessionState)(a,b,c,r,k),i.info("position:corrected-stale",{from:o,to:r})),null;let v=p.slice(u).join("\n"),w=j(v,c);if(!w||""===w.trim())return(0,e.updateSessionState)(a,b,c,r,k),i.debug("response:empty-after-clean",{currentLineCount:r}),null;let x=new Date(g.getTime()-1),y=(0,e.createMessage)(a,{worktreeId:b,role:"assistant",content:w,messageType:"normal",timestamp:x,cliToolId:c,instanceId:l});return(0,e.updateSessionState)(a,b,c,r,k),(0,f.broadcastMessage)("message",{worktreeId:b,message:y}),i.info("response:saved",{fromLine:o,toLine:r}),y}catch(a){return i.error("error:",{error:a instanceof Error?a.message:String(a)}),null}}},23854:(a,b,c)=>{c.d(b,{$G:()=>f,AL:()=>h,DZ:()=>d,Qe:()=>g,ie:()=>e});let d=4e3,e=15e3;function f(a){var b,c;if(b=a.from,c=a.to,b.worktreeId===c.worktreeId&&b.instanceId===c.instanceId)return{code:"RELAY_SELF_TARGET",message:"A session cannot relay a reply to itself. --reply-to must name a different worktree or a different agent instance."};let d=null===a.parentHops?1:a.parentHops+1;return null===a.parentHops||a.allowRelayChain?d>3?{code:"RELAY_HOPS_EXCEEDED",message:`Relay chains stop at 3 hops; this one would be ${d}. Report the reply to whoever asked instead of forwarding it again.`}:a.openBetween>=1?{code:"RELAY_DUPLICATE_PENDING",message:"There is already an open relay between these two sessions. Wait for it, or withdraw it with `commandmate relays cancel <id>`."}:{ok:!0,hops:d}:{code:"RELAY_CHAIN_BLOCKED",message:"The last message this session was given arrived over a relay, so opening another one would chain two deliveries together. Pass --allow-relay-chain if that is what you mean."}}function g(a){return"code"in a}function h(a){return void 0!==a&&Number.isFinite(a)?Math.min(6048e5,Math.max(6e4,Math.trunc(a))):864e5}},39687:(a,b,c)=>{c.d(b,{d:()=>p});var d=c(56791),e=c(43234),f=c(15194),g=c(95220),h=c(12462),i=c(49640),j=c(54325),k=c(72626),l=c(58707),m=c(41466);let n=(0,k.h)("session/send-user-message");function o(a){return a instanceof Error?a.message:String(a)}async function p(a,b){let{worktreeId:c,content:k,cliToolId:p,instanceId:q,absoluteImagePath:r,copilotModel:s}=b,t=b.messageType??"normal",u=q??p,v=e.CLIToolManager.getInstance().getTool(p),w=await (0,l.a3)(c,p,q,{ignoreStructured:b.ignoreStructuredPromptGuard});if(w.waiting)return n.info("send-refused-prompt-waiting",{worktreeId:c,cliToolId:p,reason:w.reason,blockedBy:w.blockedBy}),{ok:!1,stage:"prompt_waiting",error:(0,l.br)(c,w.blockedBy)};let x=new Date;try{await (0,h.o4)(a,c,p,x,q)}catch(a){n.error("failed-to-save-pending-assistant-response:",{error:o(a)})}let y=null;try{let b=(0,d.getMessages)(a,c,{limit:1,cliToolId:p,instanceId:u,matchResolvedInstance:!0});b.length>0&&"user"===b[0].role&&b[0].content===k&&(y=b[0].id)}catch(a){n.error("failed-to-detect-orphaned-messages:",{error:o(a)})}if(s&&"copilot"===p)try{await v.sendModelCommand(c,s,q),n.info("copilot-model-command-sent",{model:s})}catch(a){return n.error("failed-to-send-model-command:",{error:o(a)}),{ok:!1,stage:"model",error:o(a)}}try{r?(0,f._J)(v)?await v.sendMessageWithImage(c,k,r,q):await v.sendMessage(c,(0,m.TZ)(k,r),q):await v.sendMessage(c,k,q)}catch(a){return n.error("failed-to-send-message-to:",{error:o(a)}),{ok:!1,stage:"send",error:o(a)}}let z=(0,d.createMessage)(a,{worktreeId:c,role:"user",content:k,messageType:t,timestamp:x,cliToolId:p,instanceId:q,requestId:b.requestId});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}}},43925:(a,b,c)=>{c.d(b,{PJ:()=>i,dz:()=>j,vQ:()=>g});var d=c(57836),e=c(23854);let f=(0,c(72626).h)("relay-triggers");function g(a,b,d,e){let g={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayTurnCompleted:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a(g,{settled:e})}catch(c){f.warn("relay-turn-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:g.instanceId,error:c instanceof Error?c.message:String(c)})}})()}async function h(){try{let{runRelayMaintenanceTick:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));await a()}catch(a){f.warn("relay-maintenance-failed",{error:a instanceof Error?a.message:String(a)})}}function i(){j(),globalThis.__relayTriggersUnsubscribe=(0,d.wN)(a=>{a.waiting&&"prompt"===a.kind&&function(a,b,d){let e={worktreeId:a,cliToolId:b,instanceId:d??b};(async()=>{try{let{notifyRelayPromptWaiting:a}=await Promise.all([c.e(1503),c.e(1634),c.e(4299),c.e(6838),c.e(9130),c.e(4443),c.e(8800),c.e(1719),c.e(7905),c.e(2119),c.e(2445),c.e(6337),c.e(1886),c.e(595),c.e(6491),c.e(8918),c.e(7875),c.e(3077),c.e(1210)]).then(c.bind(c,71210));a(e)}catch(c){f.warn("relay-prompt-trigger-failed",{worktreeId:a,cliToolId:b,instanceId:e.instanceId,error:c instanceof Error?c.message:String(c)})}})()}(a.worktreeId,a.cliToolId,a.instanceId)});let a=setInterval(()=>void h(),e.ie);a.unref?.(),globalThis.__relayMaintenanceTimer=a}function j(){let a=globalThis.__relayTriggersUnsubscribe;a&&(a(),globalThis.__relayTriggersUnsubscribe=void 0),globalThis.__relayMaintenanceTimer&&(clearInterval(globalThis.__relayMaintenanceTimer),globalThis.__relayMaintenanceTimer=void 0)}},57836:(a,b,c)=>{c.d(b,{Jp:()=>k,Te:()=>l,hd:()=>j,wN:()=>h});var d=c(24455);let e=(0,c(72626).h)("waiting-episode-state"),f=globalThis.__sessionWaitingEpisodes??(globalThis.__sessionWaitingEpisodes=new Map),g=globalThis.__sessionWaitingTransitionListeners??(globalThis.__sessionWaitingTransitionListeners=new Set);function h(a){return g.add(a),()=>{g.delete(a)}}function i(a){for(let b of g)try{b(a)}catch(b){e.error("waiting-transition-listener-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waiting:a.waiting,error:b instanceof Error?b.message:String(b)})}}function j({worktreeId:a,cliToolId:b,instanceId:c,waiting:e,kind:g=null,structuredSince:h=null,now:j=Date.now()}){let k=(0,d.v7)(a,b,c),l=f.get(k);if(!e)return void 0===l||(f.delete(k),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!1,since:null,kind:null,at:j})),null;if(void 0!==l)return l.kind=g,l.since;let m=h??j;return f.set(k,{since:m,kind:g}),i({worktreeId:a,cliToolId:b,instanceId:c,waiting:!0,since:m,kind:g,at:j}),m}function k(a,b,c){return f.get((0,d.v7)(a,b,c))??null}function l(a){let b=`${a}${d.CS}`;for(let a of f.keys())if(a.startsWith(b))return!0;return!1}},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).`}},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)}};