commandmate 0.29.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (979) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +468 -417
  3. package/.next/app-path-routes-manifest.json +30 -23
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +15 -15
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +25 -8
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/update/route.js +2 -0
  12. package/.next/server/app/api/agents/update/route.js.nft.json +1 -0
  13. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -0
  14. package/.next/server/app/api/agents/versions/route.js +1 -0
  15. package/.next/server/app/api/agents/versions/route.js.nft.json +1 -0
  16. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -0
  17. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/app/update-check/route.js +1 -1
  19. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  21. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  22. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  24. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  25. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/assistant/messages/route.js +1 -1
  27. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  28. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/assistant/session/route.js +1 -1
  30. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  31. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/assistant/start/route.js +18 -18
  33. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  34. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/assistant/terminal/route.js +19 -19
  36. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  37. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/assistant/tools/route.js +1 -1
  39. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  40. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/capabilities/route.js +1 -1
  45. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/daily-summary/route.js +1 -1
  47. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  48. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  50. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  51. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  53. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  54. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  56. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/external-apps/route.js +1 -1
  59. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  60. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/fs/browse/route.js +1 -7
  62. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  63. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/fs/recent-paths/route.js +1 -7
  65. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  66. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  68. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  69. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  71. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  72. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  74. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  75. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/metrics/vibe/route.js +2 -2
  77. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  78. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/push/escalation/route.js +7 -1
  81. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  82. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  84. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  85. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/push/vapid/route.js +7 -1
  87. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  88. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  91. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  92. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  94. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  95. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  97. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  98. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  100. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  101. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/repositories/clone/route.js +1 -1
  103. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  104. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  106. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  107. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/repositories/restore/route.js +1 -1
  109. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  110. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/repositories/route.js +1 -1
  112. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  113. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/repositories/scan/route.js +1 -1
  115. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  116. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/repositories/sync/route.js +1 -1
  118. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  119. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  121. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  122. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/settings/default-agents/route.js +1 -0
  124. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -0
  125. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -0
  126. package/.next/server/app/api/settings/default-surface-mode/route.js +1 -0
  127. package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -0
  128. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -0
  129. package/.next/server/app/api/sidebar/group-order/route.js +1 -7
  130. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  131. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/skills/[id]/route.js +1 -1
  133. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  134. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/skills/installations/route.js +2 -2
  136. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  137. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/skills/operations/route.js +2 -2
  139. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  140. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/skills/reindex/route.js +1 -1
  142. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  143. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/skills/route.js +1 -1
  145. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  146. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/slash-commands/route.js +1 -1
  148. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  149. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
  151. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  152. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  154. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  155. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/templates/[id]/route.js +2 -2
  157. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  158. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/templates/route.js +2 -2
  160. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  161. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/todos/route.js +1 -1
  163. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  164. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  166. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  167. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/verification/runs/route.js +1 -1
  169. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  170. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -0
  181. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -0
  182. package/.next/server/app/api/worktrees/[id]/{start-polling → cli-reference}/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  185. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  187. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -2
  190. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  191. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  199. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  275. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  278. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  284. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  286. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  287. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
  289. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  290. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  293. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  296. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  299. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  302. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  304. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  305. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  308. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  311. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  314. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  316. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  317. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  319. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  320. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  322. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  323. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  326. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  328. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  329. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  330. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  331. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  332. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  333. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -7
  334. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  335. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  336. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  337. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  338. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  339. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  340. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  341. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  342. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  343. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  344. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  345. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  346. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  347. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  348. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  349. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  350. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  351. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  352. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  353. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  354. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  355. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  356. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  357. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  358. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  359. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  360. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  361. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  362. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  363. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  364. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  365. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  366. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  367. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  368. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  369. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  370. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  371. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  372. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  373. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  374. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  375. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  376. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  377. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  378. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  379. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  380. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  381. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  382. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  383. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  384. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  385. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  386. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  387. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  388. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  389. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  390. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  391. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  392. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  393. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +2 -0
  394. package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -0
  395. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -0
  396. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  397. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  398. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  399. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -0
  400. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -0
  401. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -0
  402. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  403. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  404. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  405. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  406. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  407. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  408. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  409. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  410. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  411. package/.next/server/app/api/worktrees/apply-default-agents/route.js +1 -0
  412. package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -0
  413. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -0
  414. package/.next/server/app/api/worktrees/route.js +1 -1
  415. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  416. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  417. package/.next/server/app/chat/page.js +2 -2
  418. package/.next/server/app/chat/page.js.nft.json +1 -1
  419. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  420. package/.next/server/app/login/page.js +2 -2
  421. package/.next/server/app/login/page.js.nft.json +1 -1
  422. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  423. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  424. package/.next/server/app/more/page.js +2 -2
  425. package/.next/server/app/more/page.js.nft.json +1 -1
  426. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  427. package/.next/server/app/offline/page.js.nft.json +1 -1
  428. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  429. package/.next/server/app/page.js +1 -1
  430. package/.next/server/app/page.js.nft.json +1 -1
  431. package/.next/server/app/page_client-reference-manifest.js +1 -1
  432. package/.next/server/app/proxy/[...path]/route.js +1 -1
  433. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  434. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  435. package/.next/server/app/repositories/page.js +2 -2
  436. package/.next/server/app/repositories/page.js.nft.json +1 -1
  437. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  438. package/.next/server/app/review/page.js +1 -1
  439. package/.next/server/app/review/page.js.nft.json +1 -1
  440. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  441. package/.next/server/app/sessions/page.js +1 -1
  442. package/.next/server/app/sessions/page.js.nft.json +1 -1
  443. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  444. package/.next/server/app/skills/[skillId]/page.js +2 -2
  445. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  446. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  447. package/.next/server/app/skills/installed/page.js +2 -2
  448. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  449. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  450. package/.next/server/app/skills/page.js +2 -2
  451. package/.next/server/app/skills/page.js.nft.json +1 -1
  452. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  453. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  454. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  455. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  456. package/.next/server/app/worktrees/[id]/page.js +12 -12
  457. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  458. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  459. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  460. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  461. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  462. package/.next/server/app-paths-manifest.json +30 -23
  463. package/.next/server/chunks/1058.js +1 -1
  464. package/.next/server/chunks/1068.js +1 -1
  465. package/.next/server/chunks/1191.js +1 -1
  466. package/.next/server/chunks/1341.js +1 -0
  467. package/.next/server/chunks/1501.js +5 -0
  468. package/.next/server/chunks/1886.js +3 -4
  469. package/.next/server/chunks/2119.js +1 -1
  470. package/.next/server/chunks/2445.js +1 -1
  471. package/.next/server/chunks/261.js +1 -0
  472. package/.next/server/chunks/2739.js +1 -0
  473. package/.next/server/chunks/2816.js +1 -1
  474. package/.next/server/chunks/2827.js +29 -0
  475. package/.next/server/chunks/3123.js +1 -0
  476. package/.next/server/chunks/3241.js +1 -1
  477. package/.next/server/chunks/3543.js +1 -1
  478. package/.next/server/chunks/3707.js +15 -0
  479. package/.next/server/chunks/3722.js +25 -1
  480. package/.next/server/chunks/3869.js +1 -0
  481. package/.next/server/chunks/3945.js +1 -1
  482. package/.next/server/chunks/4299.js +1 -1
  483. package/.next/server/chunks/4325.js +1 -0
  484. package/.next/server/chunks/4390.js +1 -0
  485. package/.next/server/chunks/4393.js +1 -1
  486. package/.next/server/chunks/4443.js +6 -0
  487. package/.next/server/chunks/5017.js +1 -1
  488. package/.next/server/chunks/5120.js +1 -0
  489. package/.next/server/chunks/5164.js +1 -1
  490. package/.next/server/chunks/5571.js +1 -1
  491. package/.next/server/chunks/6130.js +1 -1
  492. package/.next/server/chunks/6285.js +1 -1
  493. package/.next/server/chunks/6337.js +1 -1
  494. package/.next/server/chunks/663.js +1 -1
  495. package/.next/server/chunks/6781.js +1 -1
  496. package/.next/server/chunks/6894.js +8 -0
  497. package/.next/server/chunks/7366.js +5 -0
  498. package/.next/server/chunks/7685.js +1 -1
  499. package/.next/server/chunks/7824.js +1 -1
  500. package/.next/server/chunks/7836.js +1 -0
  501. package/.next/server/chunks/7905.js +1 -1
  502. package/.next/server/chunks/8118.js +1 -0
  503. package/.next/server/chunks/8356.js +1 -1
  504. package/.next/server/chunks/848.js +1 -1
  505. package/.next/server/chunks/880.js +3 -3
  506. package/.next/server/chunks/8800.js +3 -0
  507. package/.next/server/chunks/8807.js +1 -1
  508. package/.next/server/chunks/9123.js +2 -2
  509. package/.next/server/chunks/9130.js +3 -3
  510. package/.next/server/chunks/9627.js +71 -43
  511. package/.next/server/chunks/9696.js +3 -0
  512. package/.next/server/chunks/9798.js +1 -1
  513. package/.next/server/middleware-build-manifest.js +1 -1
  514. package/.next/server/middleware-manifest.json +5 -5
  515. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  516. package/.next/server/pages/500.html +1 -1
  517. package/.next/server/server-reference-manifest.json +1 -1
  518. package/.next/server/src/middleware.js +1 -1
  519. package/.next/server/src/middleware.js.map +1 -1
  520. package/.next/static/7K0XXFu_ty4wRSkl4X21E/_buildManifest.js +1 -0
  521. package/.next/static/chunks/{2053-c0e931eb4391baa1.js → 2053-3f299a7a2c7d6767.js} +1 -1
  522. package/.next/static/chunks/{3968-8d8ca15657748bfb.js → 3916-0e929d089282dc5d.js} +1 -1
  523. package/.next/static/chunks/3922.9c1ec01fff819c88.js +1 -0
  524. package/.next/static/chunks/5229-6c89475b61bd2c8b.js +1 -0
  525. package/.next/static/chunks/6022-7a7d1760fc9814c7.js +1 -0
  526. package/.next/static/chunks/6381-28d0e95620aa018e.js +1 -0
  527. package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +1 -0
  528. package/.next/static/chunks/{1188-8567ee5ecfef02ee.js → 8593-fa0eb2802e0ce68a.js} +1 -1
  529. package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +1 -0
  530. package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +1 -0
  531. package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +1 -0
  532. package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +1 -0
  533. package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +1 -0
  534. package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +1 -0
  535. package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +1 -0
  536. package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +1 -0
  537. package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +1 -0
  538. package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +1 -0
  539. package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +1 -0
  540. package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +1 -0
  541. package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +1 -0
  542. package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +1 -0
  543. package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +1 -0
  544. package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +1 -0
  545. package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +1 -0
  546. package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +1 -0
  547. package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +1 -0
  548. package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +1 -0
  549. package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +1 -0
  550. package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +1 -0
  551. package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +1 -0
  552. package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +1 -0
  553. package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +1 -0
  554. package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +1 -0
  555. package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +1 -0
  556. package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +1 -0
  557. package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +1 -0
  558. package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +1 -0
  559. package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +1 -0
  560. package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +1 -0
  561. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
  562. package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
  563. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +1 -0
  564. package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +1 -0
  565. package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +1 -0
  566. package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +1 -0
  567. package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +1 -0
  568. package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +1 -0
  569. package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +1 -0
  570. package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +1 -0
  571. package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +1 -0
  572. package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +1 -0
  573. package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +1 -0
  574. package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +1 -0
  575. package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +1 -0
  576. package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +1 -0
  577. package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +1 -0
  578. package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +1 -0
  579. package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
  580. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
  581. package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +1 -0
  582. package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +1 -0
  583. package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +1 -0
  584. package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +1 -0
  585. package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
  586. package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +1 -0
  587. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +1 -0
  588. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +1 -0
  589. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +1 -0
  590. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +1 -0
  591. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +1 -0
  592. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +1 -0
  593. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +1 -0
  594. package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +1 -0
  595. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +1 -0
  596. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +1 -0
  597. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +1 -0
  598. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +1 -0
  599. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +1 -0
  600. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +1 -0
  601. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +1 -0
  602. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +1 -0
  603. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +1 -0
  604. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +1 -0
  605. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +1 -0
  606. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +1 -0
  607. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +1 -0
  608. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +1 -0
  609. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +1 -0
  610. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +1 -0
  611. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +1 -0
  612. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +1 -0
  613. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +1 -0
  614. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +1 -0
  615. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +1 -0
  616. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +1 -0
  617. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +1 -0
  618. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +1 -0
  619. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +1 -0
  620. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +1 -0
  621. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +1 -0
  622. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +1 -0
  623. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +1 -0
  624. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +1 -0
  625. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +1 -0
  626. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +1 -0
  627. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +1 -0
  628. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +1 -0
  629. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +1 -0
  630. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +1 -0
  631. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +1 -0
  632. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +1 -0
  633. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +1 -0
  634. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +1 -0
  635. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +1 -0
  636. package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +1 -0
  637. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +1 -0
  638. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +1 -0
  639. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +1 -0
  640. package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +1 -0
  641. package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +1 -0
  642. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +1 -0
  643. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +1 -0
  644. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +1 -0
  645. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +1 -0
  646. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +1 -0
  647. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +1 -0
  648. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +1 -0
  649. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +1 -0
  650. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
  651. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +1 -0
  652. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +1 -0
  653. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +1 -0
  654. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +1 -0
  655. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +1 -0
  656. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
  657. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
  658. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +1 -0
  659. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +1 -0
  660. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +1 -0
  661. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +1 -0
  662. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +1 -0
  663. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
  664. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
  665. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +1 -0
  666. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +1 -0
  667. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +1 -0
  668. package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +1 -0
  669. package/.next/static/chunks/app/chat/{page-231df45127e876c2.js → page-9aa2011410895b0d.js} +1 -1
  670. package/.next/static/chunks/app/login/{page-03659dded846ef1d.js → page-af7241bb4c4a8e59.js} +1 -1
  671. package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +1 -0
  672. package/.next/static/chunks/app/more/page-333bba1c8bbc9c11.js +1 -0
  673. package/.next/static/chunks/app/{page-0305431f43195431.js → page-214f7ffa13a0cf10.js} +1 -1
  674. package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +1 -0
  675. package/.next/static/chunks/app/repositories/{page-ae8fa55749976f79.js → page-4951cac905e50224.js} +1 -1
  676. package/.next/static/chunks/app/review/page-a0899b2d285318c3.js +1 -0
  677. package/.next/static/chunks/app/sessions/page-fb36145ec732092a.js +1 -0
  678. package/.next/static/chunks/app/skills/[skillId]/{page-aaf0bcb1dfb558b9.js → page-9099e26b60442873.js} +1 -1
  679. package/.next/static/chunks/app/skills/installed/{page-dafc486410e839b7.js → page-182e32368696d824.js} +1 -1
  680. package/.next/static/chunks/app/skills/{page-9e3c91da31514893.js → page-d3fdc88239ebe0ab.js} +1 -1
  681. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-90f96977c741bbf8.js → page-f3361237420719b4.js} +1 -1
  682. package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +1 -0
  683. package/.next/static/chunks/app/worktrees/[id]/page-d48b95ed554bcd13.js +1 -0
  684. package/.next/static/chunks/app/worktrees/[id]/terminal/page-2631bc5c4b0a9fb8.js +1 -0
  685. package/.next/static/chunks/{webpack-7e79064bfce988d7.js → webpack-9f75198882fdaf08.js} +1 -1
  686. package/.next/static/css/61e10d4b1b11b193.css +1 -0
  687. package/.next/trace +13 -13
  688. package/.next/types/app/api/agents/update/route.ts +347 -0
  689. package/.next/types/app/api/agents/versions/route.ts +347 -0
  690. package/.next/types/app/api/settings/default-agents/route.ts +347 -0
  691. package/.next/types/app/api/settings/default-surface-mode/route.ts +347 -0
  692. package/.next/types/app/api/worktrees/[id]/{start-polling → cli-reference}/route.ts +3 -3
  693. package/.next/types/app/api/worktrees/[id]/verify/config/route.ts +347 -0
  694. package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.ts +347 -0
  695. package/.next/types/app/api/worktrees/apply-default-agents/route.ts +347 -0
  696. package/.next/types/routes.d.ts +9 -2
  697. package/.next/types/validator.ts +72 -9
  698. package/dist/cli/commands/agents.d.ts +35 -0
  699. package/dist/cli/commands/agents.d.ts.map +1 -0
  700. package/dist/cli/commands/agents.js +212 -0
  701. package/dist/cli/commands/ls.d.ts.map +1 -1
  702. package/dist/cli/commands/ls.js +18 -0
  703. package/dist/cli/commands/verify.d.ts.map +1 -1
  704. package/dist/cli/commands/verify.js +111 -0
  705. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  706. package/dist/cli/config/cli-dependencies.js +11 -0
  707. package/dist/cli/docs/agent-operations.d.ts +1 -1
  708. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  709. package/dist/cli/docs/agent-operations.js +30 -0
  710. package/dist/cli/program.d.ts.map +1 -1
  711. package/dist/cli/program.js +6 -0
  712. package/dist/cli/types/api-responses.d.ts +58 -0
  713. package/dist/cli/types/api-responses.d.ts.map +1 -1
  714. package/dist/cli/types/index.d.ts +8 -0
  715. package/dist/cli/types/index.d.ts.map +1 -1
  716. package/dist/cli/utils/preflight.d.ts.map +1 -1
  717. package/dist/cli/utils/preflight.js +6 -0
  718. package/dist/config/system-directories.d.ts +101 -0
  719. package/dist/config/system-directories.d.ts.map +1 -0
  720. package/dist/config/system-directories.js +211 -0
  721. package/dist/lib/cli-tools/types.d.ts +15 -1
  722. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  723. package/dist/lib/detection/status-reason.d.ts +92 -0
  724. package/dist/lib/detection/status-reason.d.ts.map +1 -0
  725. package/dist/lib/detection/status-reason.js +94 -0
  726. package/dist/lib/updates/agent-updater.d.ts +247 -0
  727. package/dist/lib/updates/agent-updater.d.ts.map +1 -0
  728. package/dist/lib/updates/agent-updater.js +373 -0
  729. package/dist/lib/updates/agent-versions.d.ts +77 -0
  730. package/dist/lib/updates/agent-versions.d.ts.map +1 -0
  731. package/dist/lib/updates/agent-versions.js +138 -0
  732. package/dist/lib/updates/codex-version.d.ts +184 -0
  733. package/dist/lib/updates/codex-version.d.ts.map +1 -0
  734. package/dist/lib/updates/codex-version.js +215 -0
  735. package/dist/lib/verification/verify-config.d.ts +202 -0
  736. package/dist/lib/verification/verify-config.d.ts.map +1 -0
  737. package/dist/lib/verification/verify-config.js +429 -0
  738. package/dist/lib/verification/verify-draft.d.ts +182 -0
  739. package/dist/lib/verification/verify-draft.d.ts.map +1 -0
  740. package/dist/lib/verification/verify-draft.js +570 -0
  741. package/dist/server/server.js +58 -0
  742. package/dist/server/src/cli/types/api-responses.js +9 -0
  743. package/dist/server/src/config/cli-tool-timing-config.js +15 -1
  744. package/dist/server/src/config/codex-update-dialog-config.js +154 -0
  745. package/dist/server/src/config/default-agents.js +138 -0
  746. package/dist/server/src/lib/claude-output.js +1 -0
  747. package/dist/server/src/lib/cli-tools/antigravity.js +36 -12
  748. package/dist/server/src/lib/cli-tools/base.js +131 -0
  749. package/dist/server/src/lib/cli-tools/codex.js +350 -100
  750. package/dist/server/src/lib/cli-tools/copilot.js +34 -10
  751. package/dist/server/src/lib/cli-tools/gemini.js +34 -10
  752. package/dist/server/src/lib/cli-tools/liveness-spec.js +214 -0
  753. package/dist/server/src/lib/cli-tools/opencode.js +72 -19
  754. package/dist/server/src/lib/cli-tools/session-liveness.js +64 -0
  755. package/dist/server/src/lib/cli-tools/vibe-local.js +30 -10
  756. package/dist/server/src/lib/db/app-settings-db.js +202 -0
  757. package/dist/server/src/lib/db/chat-db.js +120 -7
  758. package/dist/server/src/lib/db/worktree-db.js +178 -3
  759. package/dist/server/src/lib/detection/status-detector.js +3 -2
  760. package/dist/server/src/lib/detection/status-reason.js +17 -0
  761. package/dist/server/src/lib/detection/tool-liveness.js +233 -0
  762. package/dist/server/src/lib/detection/version-probes.js +290 -0
  763. package/dist/server/src/lib/env.js +122 -0
  764. package/dist/server/src/lib/git/worktrees.js +164 -0
  765. package/dist/server/src/lib/history/transcript-tail.js +80 -0
  766. package/dist/server/src/lib/history/user-turn-recorder.js +247 -0
  767. package/dist/server/src/lib/hooks/permission-decision-service.js +85 -1
  768. package/dist/server/src/lib/hooks/sources/antigravity/history.js +519 -0
  769. package/dist/server/src/lib/hooks/sources/antigravity/source.js +7 -0
  770. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +407 -0
  771. package/dist/server/src/lib/hooks/sources/claude/history.js +654 -0
  772. package/dist/server/src/lib/hooks/sources/claude/source.js +4 -0
  773. package/dist/server/src/lib/hooks/sources/claude/transcript.js +518 -0
  774. package/dist/server/src/lib/hooks/sources/codex/history.js +576 -0
  775. package/dist/server/src/lib/hooks/sources/codex/source.js +4 -0
  776. package/dist/server/src/lib/hooks/sources/codex/transcript.js +448 -0
  777. package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
  778. package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
  779. package/dist/server/src/lib/hooks/sources/legacy-relay.js +3 -0
  780. package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -0
  781. package/dist/server/src/lib/hooks/sources/opencode/source.js +4 -0
  782. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +10 -28
  783. package/dist/server/src/lib/hooks/sources/turn-body.js +118 -0
  784. package/dist/server/src/lib/polling/prompt-dedup.js +2 -4
  785. package/dist/server/src/lib/polling/response-checker.js +44 -3
  786. package/dist/server/src/lib/polling/response-dedup.js +2 -4
  787. package/dist/server/src/lib/polling/response-poller-core.js +191 -29
  788. package/dist/server/src/lib/polling/structured-history-gate.js +147 -16
  789. package/dist/server/src/lib/push/push-sender.js +21 -1
  790. package/dist/server/src/lib/push/waiting-push-notifier.js +126 -8
  791. package/dist/server/src/lib/realtime/publisher-registry.js +171 -0
  792. package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -1
  793. package/dist/server/src/lib/realtime/types.js +96 -1
  794. package/dist/server/src/lib/repo-config/agents-config.js +298 -0
  795. package/dist/server/src/lib/selected-agents-validator.js +93 -23
  796. package/dist/server/src/lib/session/claude-session.js +39 -108
  797. package/dist/server/src/lib/session/current-output-builder.js +263 -4
  798. package/dist/server/src/lib/session/send-user-message.js +90 -2
  799. package/dist/server/src/lib/tmux/tmux.js +29 -0
  800. package/dist/server/src/lib/tui-accumulator.js +2 -8
  801. package/dist/server/src/lib/updates/agent-updater.js +373 -0
  802. package/dist/server/src/lib/updates/agent-versions.js +138 -0
  803. package/dist/server/src/lib/updates/codex-version.js +215 -0
  804. package/dist/server/src/lib/updates/index.js +42 -0
  805. package/dist/server/src/lib/verification/gate-runner.js +298 -37
  806. package/dist/server/src/lib/verification/machine-lock.js +11 -0
  807. package/dist/server/src/lib/verification/run-verdict-vocabulary.js +151 -0
  808. package/dist/server/src/lib/verification/verify-config.js +33 -0
  809. package/dist/server/src/lib/ws-server.js +143 -6
  810. package/dist/server/src/types/agent-transcript.js +241 -5
  811. package/dist/server/src/types/sidebar.js +40 -9
  812. package/dist/server/src/types/ui-state.js +24 -1
  813. package/dist/types/cli-tool-contracts.d.ts +119 -0
  814. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  815. package/package.json +1 -1
  816. package/public/sw.js +15 -1
  817. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +0 -1
  818. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +0 -1
  819. package/.next/server/chunks/1601.js +0 -7
  820. package/.next/server/chunks/1714.js +0 -7
  821. package/.next/server/chunks/221.js +0 -19
  822. package/.next/server/chunks/222.js +0 -1
  823. package/.next/server/chunks/2366.js +0 -1
  824. package/.next/server/chunks/2759.js +0 -8
  825. package/.next/server/chunks/3558.js +0 -1
  826. package/.next/server/chunks/4689.js +0 -25
  827. package/.next/server/chunks/5089.js +0 -1
  828. package/.next/server/chunks/6274.js +0 -14
  829. package/.next/server/chunks/9067.js +0 -1
  830. package/.next/server/chunks/9373.js +0 -9
  831. package/.next/server/chunks/9508.js +0 -1
  832. package/.next/static/Dvfs4ZThl5vBhJGP-ZQuJ/_buildManifest.js +0 -1
  833. package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +0 -1
  834. package/.next/static/chunks/3922.0d2e64daf9f187da.js +0 -1
  835. package/.next/static/chunks/5229-580b581fce5aeb52.js +0 -1
  836. package/.next/static/chunks/6381-9a929249196a0e77.js +0 -1
  837. package/.next/static/chunks/app/api/app/update/route-e3626364434d521b.js +0 -1
  838. package/.next/static/chunks/app/api/app/update-check/route-e3626364434d521b.js +0 -1
  839. package/.next/static/chunks/app/api/assistant/conversation/route-e3626364434d521b.js +0 -1
  840. package/.next/static/chunks/app/api/assistant/current-output/route-e3626364434d521b.js +0 -1
  841. package/.next/static/chunks/app/api/assistant/messages/route-e3626364434d521b.js +0 -1
  842. package/.next/static/chunks/app/api/assistant/session/route-e3626364434d521b.js +0 -1
  843. package/.next/static/chunks/app/api/assistant/start/route-e3626364434d521b.js +0 -1
  844. package/.next/static/chunks/app/api/assistant/terminal/route-e3626364434d521b.js +0 -1
  845. package/.next/static/chunks/app/api/assistant/tools/route-e3626364434d521b.js +0 -1
  846. package/.next/static/chunks/app/api/auth/login/route-e3626364434d521b.js +0 -1
  847. package/.next/static/chunks/app/api/auth/logout/route-e3626364434d521b.js +0 -1
  848. package/.next/static/chunks/app/api/auth/status/route-e3626364434d521b.js +0 -1
  849. package/.next/static/chunks/app/api/capabilities/route-e3626364434d521b.js +0 -1
  850. package/.next/static/chunks/app/api/daily-summary/route-e3626364434d521b.js +0 -1
  851. package/.next/static/chunks/app/api/daily-summary/status/route-e3626364434d521b.js +0 -1
  852. package/.next/static/chunks/app/api/external-apps/[id]/health/route-e3626364434d521b.js +0 -1
  853. package/.next/static/chunks/app/api/external-apps/[id]/route-e3626364434d521b.js +0 -1
  854. package/.next/static/chunks/app/api/external-apps/route-e3626364434d521b.js +0 -1
  855. package/.next/static/chunks/app/api/fs/browse/route-e3626364434d521b.js +0 -1
  856. package/.next/static/chunks/app/api/fs/recent-paths/route-e3626364434d521b.js +0 -1
  857. package/.next/static/chunks/app/api/hooks/agent-event/route-e3626364434d521b.js +0 -1
  858. package/.next/static/chunks/app/api/hooks/claude-done/route-e3626364434d521b.js +0 -1
  859. package/.next/static/chunks/app/api/hooks/permission-request/route-e3626364434d521b.js +0 -1
  860. package/.next/static/chunks/app/api/metrics/vibe/route-e3626364434d521b.js +0 -1
  861. package/.next/static/chunks/app/api/ollama/models/route-e3626364434d521b.js +0 -1
  862. package/.next/static/chunks/app/api/push/escalation/route-e3626364434d521b.js +0 -1
  863. package/.next/static/chunks/app/api/push/subscriptions/route-e3626364434d521b.js +0 -1
  864. package/.next/static/chunks/app/api/push/vapid/route-e3626364434d521b.js +0 -1
  865. package/.next/static/chunks/app/api/remote/pair/route-e3626364434d521b.js +0 -1
  866. package/.next/static/chunks/app/api/repositories/[id]/route-e3626364434d521b.js +0 -1
  867. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
  868. package/.next/static/chunks/app/api/repositories/[id]/todos/route-e3626364434d521b.js +0 -1
  869. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-e3626364434d521b.js +0 -1
  870. package/.next/static/chunks/app/api/repositories/clone/route-e3626364434d521b.js +0 -1
  871. package/.next/static/chunks/app/api/repositories/excluded/route-e3626364434d521b.js +0 -1
  872. package/.next/static/chunks/app/api/repositories/restore/route-e3626364434d521b.js +0 -1
  873. package/.next/static/chunks/app/api/repositories/route-e3626364434d521b.js +0 -1
  874. package/.next/static/chunks/app/api/repositories/scan/route-e3626364434d521b.js +0 -1
  875. package/.next/static/chunks/app/api/repositories/sync/route-e3626364434d521b.js +0 -1
  876. package/.next/static/chunks/app/api/repositories/validate-path/route-e3626364434d521b.js +0 -1
  877. package/.next/static/chunks/app/api/sidebar/group-order/route-e3626364434d521b.js +0 -1
  878. package/.next/static/chunks/app/api/skills/[id]/route-e3626364434d521b.js +0 -1
  879. package/.next/static/chunks/app/api/skills/installations/route-e3626364434d521b.js +0 -1
  880. package/.next/static/chunks/app/api/skills/operations/route-e3626364434d521b.js +0 -1
  881. package/.next/static/chunks/app/api/skills/reindex/route-e3626364434d521b.js +0 -1
  882. package/.next/static/chunks/app/api/skills/route-e3626364434d521b.js +0 -1
  883. package/.next/static/chunks/app/api/slash-commands/route-e3626364434d521b.js +0 -1
  884. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-e3626364434d521b.js +0 -1
  885. package/.next/static/chunks/app/api/tasks/[taskId]/route-e3626364434d521b.js +0 -1
  886. package/.next/static/chunks/app/api/templates/[id]/route-e3626364434d521b.js +0 -1
  887. package/.next/static/chunks/app/api/templates/route-e3626364434d521b.js +0 -1
  888. package/.next/static/chunks/app/api/todos/route-e3626364434d521b.js +0 -1
  889. package/.next/static/chunks/app/api/verification/runs/[runId]/route-e3626364434d521b.js +0 -1
  890. package/.next/static/chunks/app/api/verification/runs/route-e3626364434d521b.js +0 -1
  891. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-e3626364434d521b.js +0 -1
  892. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-e3626364434d521b.js +0 -1
  893. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-e3626364434d521b.js +0 -1
  894. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-e3626364434d521b.js +0 -1
  895. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-e3626364434d521b.js +0 -1
  896. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-e3626364434d521b.js +0 -1
  897. package/.next/static/chunks/app/api/worktrees/[id]/env/route-e3626364434d521b.js +0 -1
  898. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-e3626364434d521b.js +0 -1
  899. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-e3626364434d521b.js +0 -1
  900. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-e3626364434d521b.js +0 -1
  901. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-e3626364434d521b.js +0 -1
  902. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-e3626364434d521b.js +0 -1
  903. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-e3626364434d521b.js +0 -1
  904. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-e3626364434d521b.js +0 -1
  905. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-e3626364434d521b.js +0 -1
  906. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-e3626364434d521b.js +0 -1
  907. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-e3626364434d521b.js +0 -1
  908. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-e3626364434d521b.js +0 -1
  909. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-e3626364434d521b.js +0 -1
  910. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-e3626364434d521b.js +0 -1
  911. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-e3626364434d521b.js +0 -1
  912. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-e3626364434d521b.js +0 -1
  913. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-e3626364434d521b.js +0 -1
  914. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-e3626364434d521b.js +0 -1
  915. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-e3626364434d521b.js +0 -1
  916. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-e3626364434d521b.js +0 -1
  917. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-e3626364434d521b.js +0 -1
  918. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-e3626364434d521b.js +0 -1
  919. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-e3626364434d521b.js +0 -1
  920. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-e3626364434d521b.js +0 -1
  921. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-e3626364434d521b.js +0 -1
  922. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-e3626364434d521b.js +0 -1
  923. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-e3626364434d521b.js +0 -1
  924. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-e3626364434d521b.js +0 -1
  925. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-e3626364434d521b.js +0 -1
  926. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-e3626364434d521b.js +0 -1
  927. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-e3626364434d521b.js +0 -1
  928. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-e3626364434d521b.js +0 -1
  929. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-e3626364434d521b.js +0 -1
  930. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-e3626364434d521b.js +0 -1
  931. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-e3626364434d521b.js +0 -1
  932. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-e3626364434d521b.js +0 -1
  933. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-e3626364434d521b.js +0 -1
  934. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-e3626364434d521b.js +0 -1
  935. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-e3626364434d521b.js +0 -1
  936. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-e3626364434d521b.js +0 -1
  937. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-e3626364434d521b.js +0 -1
  938. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-e3626364434d521b.js +0 -1
  939. package/.next/static/chunks/app/api/worktrees/[id]/route-e3626364434d521b.js +0 -1
  940. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-e3626364434d521b.js +0 -1
  941. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-e3626364434d521b.js +0 -1
  942. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-e3626364434d521b.js +0 -1
  943. package/.next/static/chunks/app/api/worktrees/[id]/search/route-e3626364434d521b.js +0 -1
  944. package/.next/static/chunks/app/api/worktrees/[id]/send/route-e3626364434d521b.js +0 -1
  945. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-e3626364434d521b.js +0 -1
  946. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-e3626364434d521b.js +0 -1
  947. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-e3626364434d521b.js +0 -1
  948. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-e3626364434d521b.js +0 -1
  949. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-e3626364434d521b.js +0 -1
  950. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-e3626364434d521b.js +0 -1
  951. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-e3626364434d521b.js +0 -1
  952. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-e3626364434d521b.js +0 -1
  953. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-e3626364434d521b.js +0 -1
  954. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-e3626364434d521b.js +0 -1
  955. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-e3626364434d521b.js +0 -1
  956. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-e3626364434d521b.js +0 -1
  957. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-e3626364434d521b.js +0 -1
  958. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-e3626364434d521b.js +0 -1
  959. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-e3626364434d521b.js +0 -1
  960. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
  961. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-e3626364434d521b.js +0 -1
  962. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-e3626364434d521b.js +0 -1
  963. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-e3626364434d521b.js +0 -1
  964. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-e3626364434d521b.js +0 -1
  965. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-e3626364434d521b.js +0 -1
  966. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-e3626364434d521b.js +0 -1
  967. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-e3626364434d521b.js +0 -1
  968. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-e3626364434d521b.js +0 -1
  969. package/.next/static/chunks/app/api/worktrees/route-e3626364434d521b.js +0 -1
  970. package/.next/static/chunks/app/manifest.webmanifest/route-e3626364434d521b.js +0 -1
  971. package/.next/static/chunks/app/more/page-03867ab635d197c7.js +0 -1
  972. package/.next/static/chunks/app/proxy/[...path]/route-e3626364434d521b.js +0 -1
  973. package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +0 -1
  974. package/.next/static/chunks/app/sessions/page-4d5382b257077c14.js +0 -1
  975. package/.next/static/chunks/app/worktrees/[id]/layout-e3626364434d521b.js +0 -1
  976. package/.next/static/chunks/app/worktrees/[id]/page-817378dd7c580774.js +0 -1
  977. package/.next/static/chunks/app/worktrees/[id]/terminal/page-00ad5d9a62a71cab.js +0 -1
  978. package/.next/static/css/6266bde3bce465a2.css +0 -1
  979. /package/.next/static/{Dvfs4ZThl5vBhJGP-ZQuJ → 7K0XXFu_ty4wRSkl4X21E}/_ssgManifest.js +0 -0
@@ -16,6 +16,8 @@ exports.scanMultipleRepositories = scanMultipleRepositories;
16
16
  exports.deriveIdIgnoringOwnHistory = deriveIdIgnoringOwnHistory;
17
17
  exports.syncWorktreesToDB = syncWorktreesToDB;
18
18
  exports.repositoryExistsOnDisk = repositoryExistsOnDisk;
19
+ exports.directoryIsConfirmedAbsent = directoryIsConfirmedAbsent;
20
+ exports.reclaimGhostRepositories = reclaimGhostRepositories;
19
21
  exports.pruneStaleRepositoryWorktrees = pruneStaleRepositoryWorktrees;
20
22
  const child_process_1 = require("child_process");
21
23
  const util_1 = require("util");
@@ -24,6 +26,7 @@ const path_1 = __importDefault(require("path"));
24
26
  const worktree_id_1 = require("./worktree-id");
25
27
  const db_1 = require("../../lib/db");
26
28
  const logger_1 = require("../../lib/logger");
29
+ const agents_config_1 = require("../../lib/repo-config/agents-config");
27
30
  const logger = (0, logger_1.createLogger)('worktrees');
28
31
  /**
29
32
  * ID minting lives in `worktree-id.ts` — a module that imports nothing but
@@ -178,6 +181,27 @@ function getRepositoryPaths() {
178
181
  */
179
182
  async function scanWorktrees(rootDir) {
180
183
  const execAsync = (0, util_1.promisify)(child_process_1.exec);
184
+ // Issue #2165: a repository whose directory has been removed used to reach
185
+ // `execAsync` with a `cwd` that no longer exists, and Node reports that as
186
+ // `spawn /bin/sh ENOENT` — an error about the *shell*, not about the missing
187
+ // directory. It is neither `not a git repository` nor exit 128, so the catch
188
+ // below re-threw it and `scanMultipleRepositories` logged it at ERROR. Two
189
+ // costs: a wasted child process per repository per scan, and a permanent
190
+ // ERROR line whose text sends the reader after `/bin/sh` and `PATH` (that
191
+ // misdiagnosis actually happened — see the Issue).
192
+ //
193
+ // Deliberately {@link directoryIsConfirmedAbsent} rather than
194
+ // `fs.existsSync`: only a positively-confirmed absence is allowed to skip the
195
+ // scan. An unreadable or unreachable path (EACCES, EIO, a hung network mount)
196
+ // still goes to git, still fails, and is still reported at ERROR — that IS a
197
+ // real failure and must not be silently downgraded to "the directory is gone".
198
+ //
199
+ // A directory that exists but is no longer a git repository is untouched by
200
+ // this guard: it keeps taking the git exit-128 path below and returns [].
201
+ if (directoryIsConfirmedAbsent(rootDir)) {
202
+ logger.warn('repository:scan-skipped-missing-dir', { repoPath: rootDir });
203
+ return [];
204
+ }
181
205
  try {
182
206
  const { stdout } = await execAsync('git worktree list', {
183
207
  cwd: rootDir,
@@ -186,6 +210,15 @@ async function scanWorktrees(rootDir) {
186
210
  // Get repository name from path
187
211
  const repositoryPath = path_1.default.resolve(rootDir);
188
212
  const repositoryName = path_1.default.basename(repositoryPath);
213
+ // Issue #2066: this is the "read it at sync" the repository-level agent
214
+ // declaration is specified against. Doing it here rather than lazily in
215
+ // `getWorktrees()` is what keeps the file off the sidebar's polled path
216
+ // (#1913's no-filesystem-probe-on-a-hot-path rule), and it is also what
217
+ // makes a broken `.commandmate/agents.yaml` warn once per sync instead of
218
+ // once per poll — the refusal is cached alongside an accepted value.
219
+ // Deliberately after the `git worktree list` above succeeded: a directory
220
+ // that is not a repository has no declaration worth reading.
221
+ (0, agents_config_1.refreshRepoAgentsConfig)(repositoryPath);
189
222
  // Filter and validate worktree paths
190
223
  return parsed
191
224
  .map((wt) => {
@@ -469,6 +502,137 @@ function repositoryExistsOnDisk(repoPath) {
469
502
  return true;
470
503
  }
471
504
  }
505
+ /**
506
+ * Whether a path is **positively confirmed** not to exist.
507
+ *
508
+ * Issue #2165. `fs.existsSync()` cannot answer this: it collapses "the entry is
509
+ * not there" and "I could not find out" into the same `false`. It is
510
+ * `accessSync(F_OK)` underneath, so an unreadable parent directory (EACCES), a
511
+ * hung or disconnected network mount (EIO / ETIMEDOUT / ESTALE / EHOSTDOWN) and
512
+ * a genuinely deleted directory are indistinguishable through it. That
513
+ * distinction is the whole safety question for {@link reclaimGhostRepositories}:
514
+ * a repository on an unreachable volume must never be treated as gone.
515
+ *
516
+ * `lstatSync` keeps the errno, so the answer can be narrowed to the two codes
517
+ * that mean the kernel walked the path successfully and the entry was not
518
+ * there:
519
+ *
520
+ * - `ENOENT` — a component of the path does not exist;
521
+ * - `ENOTDIR` — a component that must be a directory is a file, so no such
522
+ * entry can exist under it either.
523
+ *
524
+ * Every other outcome — the path resolved, or the lookup failed for any other
525
+ * reason — answers `false`, i.e. "not confirmed absent, leave it alone".
526
+ * `lstat` rather than `stat` so a dangling symlink is reported as present: the
527
+ * link is a real entry that the user still has to remove.
528
+ *
529
+ * @param repoPath - Absolute path to test
530
+ * @returns `true` only when the path is confirmed to be absent
531
+ */
532
+ function directoryIsConfirmedAbsent(repoPath) {
533
+ if (!repoPath)
534
+ return false;
535
+ try {
536
+ fs_1.default.lstatSync(repoPath);
537
+ return false;
538
+ }
539
+ catch (error) {
540
+ const code = error.code;
541
+ return code === 'ENOENT' || code === 'ENOTDIR';
542
+ }
543
+ }
544
+ /**
545
+ * Take ghost `repositories` rows out of the scan set (Issue #2165).
546
+ *
547
+ * A row whose directory has been deleted stays `enabled = 1` forever: nothing
548
+ * removes it, so every server start and every sync re-derives the scan set from
549
+ * it, spawns a shell into a `cwd` that does not exist and logs an ERROR. Rows
550
+ * registered under `/tmp` were still doing this seven months after the
551
+ * directory they name was collected by the OS.
552
+ *
553
+ * {@link pruneStaleRepositoryWorktrees} cannot reach them. It deletes *worktree*
554
+ * rows, and it iterates {@link getRepositories}, which is a `GROUP BY` over the
555
+ * `worktrees` table — a repository with no worktree rows is not in its result
556
+ * at all, and its `ids.length === 0` early-continue would skip it even if it
557
+ * were. This function is the missing half: it works the `repositories` table.
558
+ *
559
+ * ## What it does — demote, not delete
560
+ *
561
+ * The row is set to `enabled = 0`, exactly as the Repositories screen's Scan
562
+ * toggle does (#1658). It is NOT deleted. `enabled` is the flag that decides
563
+ * what gets scanned, so demotion is sufficient — the row leaves `allPaths` at
564
+ * the next startup and sync, and the ERROR stops for good. Choosing it over
565
+ * `deleteRepository()` buys three things:
566
+ *
567
+ * 1. **Reversibility.** No filesystem test can prove a directory is gone
568
+ * *forever* — an unmounted volume looks exactly like a deleted one from
569
+ * userspace. A demoted row keeps its id, display name, `visible` flag and
570
+ * clone URL, is listed on the Repositories screen with a Disabled badge, and
571
+ * is one click from coming back. A wrong delete is unrecoverable.
572
+ * 2. **Agreement with #1666.** That Issue settled that exclusion is where the
573
+ * app *stops*, not where it deletes; startup used to purge excluded
574
+ * repositories and that was the bug. Reclaiming by deletion would re-open
575
+ * the same argument from the other end.
576
+ * 3. **No dangling references.** `clone_jobs.repository_id` points at this row.
577
+ *
578
+ * ## The line — what is NOT reclaimed
579
+ *
580
+ * Every guard fails toward keeping the row enabled:
581
+ *
582
+ * - **Already disabled** — nothing to fix; it is out of the scan set already,
583
+ * and touching it would rewrite state the user owns.
584
+ * - **Still listed in `WORKTREE_REPOS`** — the environment is a live
585
+ * declaration that the operator wants this path scanned. Same reasoning as
586
+ * migration v43's guard 2 (#1339): never overrule a path the env still asks
587
+ * for. Such a path is re-registered on every boot anyway.
588
+ * - **Not confirmed absent** — see {@link directoryIsConfirmedAbsent}. This is
589
+ * the "temporarily invisible" line: a repository under an unreachable network
590
+ * mount answers EIO / ETIMEDOUT / ESTALE / EACCES, not ENOENT, and is kept.
591
+ * - **Owns worktree rows** — the condition the Issue names, and the one that
592
+ * makes this provably lossless. Chat history, memos, todos, timers,
593
+ * schedules, tasks and verification runs all hang off `worktrees`, so a
594
+ * repository with zero worktree rows has no history to lose by definition.
595
+ * It is also good evidence that the directory was never successfully scanned:
596
+ * a scan of a present repository always yields at least its main worktree.
597
+ *
598
+ * @param db - Database instance
599
+ * @param envRepositoryPaths - Paths the environment still declares
600
+ * (`getRepositoryPaths()`); rows at these paths are never demoted
601
+ * @returns The rows that were demoted, in `getAllRepositories` order
602
+ */
603
+ function reclaimGhostRepositories(db, envRepositoryPaths = []) {
604
+ const envPaths = new Set(envRepositoryPaths.filter(p => !!p).map(p => path_1.default.resolve(p)));
605
+ const reclaimed = [];
606
+ for (const repo of (0, db_1.getAllRepositories)(db)) {
607
+ if (!repo.path)
608
+ continue;
609
+ if (!repo.enabled)
610
+ continue;
611
+ if (envPaths.has(repo.path))
612
+ continue;
613
+ if (!directoryIsConfirmedAbsent(repo.path))
614
+ continue;
615
+ if ((0, db_1.countWorktreesByRepositoryPath)(db, repo.path) > 0)
616
+ continue;
617
+ try {
618
+ (0, db_1.setRepositoryEnabled)(db, repo.id, false);
619
+ }
620
+ catch (error) {
621
+ // SEC-SF-004's disabled-row ceiling is the only expected failure. It
622
+ // guards against unbounded *growth* of the table, which this pass cannot
623
+ // cause — it creates no rows — so a refusal here just means one ghost
624
+ // keeps logging. Report it and move on rather than aborting startup.
625
+ logger.warn('repository:ghost-row-reclaim-failed', {
626
+ repoPath: repo.path,
627
+ error: error instanceof Error ? error.message : String(error),
628
+ });
629
+ continue;
630
+ }
631
+ reclaimed.push({ id: repo.id, path: repo.path });
632
+ logger.info('repository:ghost-row-reclaimed', { repoPath: repo.path });
633
+ }
634
+ return reclaimed;
635
+ }
472
636
  /**
473
637
  * Prune DB worktree rows for repositories that have vanished from disk.
474
638
  *
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * Reading the end of an agent's own transcript file (Issue #2197).
4
+ *
5
+ * The second half of the pull-mode reader that is the same whatever the agent
6
+ * is, alongside `./user-turn-recorder`: every one of them keeps a file that
7
+ * grows for the life of a session, and every one of them only ever needs its
8
+ * newest turn.
9
+ *
10
+ * The shape is `lib/hooks/sources/claude/history`'s, which #2121 wrote inline
11
+ * because it was the only reader. It is here rather than there because #2197
12
+ * added the second and #2198 adds the third, and three private copies of "read
13
+ * the last 4 MiB and drop the partial first line" is how the bound and the
14
+ * partial-line rule quietly stop agreeing with each other.
15
+ *
16
+ * @module lib/history/transcript-tail
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.TRANSCRIPT_TAIL_BYTES = void 0;
20
+ exports.readTranscriptTail = readTranscriptTail;
21
+ const promises_1 = require("fs/promises");
22
+ const logger_1 = require("../../lib/logger");
23
+ const logger = (0, logger_1.createLogger)('lib/history/transcript-tail');
24
+ /**
25
+ * How much of a transcript's tail is read.
26
+ *
27
+ * These files grow for the life of a session and a long one is tens of
28
+ * megabytes — the largest claude transcript on this machine was 23 MB on
29
+ * 2026-08-31, and the largest codex rollout was **273 MB** on 2026-09-01 — so
30
+ * reading one whole on every finished turn would be the most expensive thing the
31
+ * poller does. Only the newest turn is ever written, so only the newest turn has
32
+ * to be in the window.
33
+ *
34
+ * 4 MiB is roughly two orders of magnitude above the measured size of a single
35
+ * turn and still small enough to read and parse in one tick. A turn that
36
+ * genuinely does not fit produces a turn with no prompt in it, which each reader
37
+ * detects and reports rather than writing as a headless reply.
38
+ */
39
+ exports.TRANSCRIPT_TAIL_BYTES = 4 * 1024 * 1024;
40
+ /**
41
+ * The last {@link TRANSCRIPT_TAIL_BYTES} of a file, as UTF-8.
42
+ *
43
+ * Read at an offset rather than whole, and the first line of a windowed read is
44
+ * dropped: starting mid-line would hand the caller's parser a fragment that it
45
+ * would count as malformed anyway, and dropping it deliberately keeps that
46
+ * counter meaning "the writer was mid-append", which is the thing worth seeing.
47
+ *
48
+ * Never throws.
49
+ *
50
+ * @param path - An absolute path the caller has already validated
51
+ * @returns The text, or null when the file could not be read
52
+ */
53
+ async function readTranscriptTail(path) {
54
+ let handle;
55
+ try {
56
+ handle = await (0, promises_1.open)(path, 'r');
57
+ const { size } = await handle.stat();
58
+ const offset = Math.max(0, size - exports.TRANSCRIPT_TAIL_BYTES);
59
+ const length = size - offset;
60
+ if (length <= 0)
61
+ return '';
62
+ const buffer = Buffer.alloc(length);
63
+ const { bytesRead } = await handle.read(buffer, 0, length, offset);
64
+ const text = buffer.subarray(0, bytesRead).toString('utf8');
65
+ if (offset === 0)
66
+ return text;
67
+ const firstBreak = text.indexOf('\n');
68
+ return firstBreak === -1 ? '' : text.slice(firstBreak + 1);
69
+ }
70
+ catch (error) {
71
+ logger.warn('transcript-tail-read-failed', {
72
+ path,
73
+ error: error instanceof Error ? error.message : String(error),
74
+ });
75
+ return null;
76
+ }
77
+ finally {
78
+ await handle?.close().catch(() => { });
79
+ }
80
+ }
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ /**
3
+ * Putting the operator's own input into conversation history (Issue #2196).
4
+ *
5
+ * ## The gap this closes
6
+ *
7
+ * `chat_messages` has had exactly one producer of `role: 'user'` rows —
8
+ * `sendUserMessage`, which `/send` and the Timer go through. Everything else the
9
+ * operator can type reaches the agent without passing that function: `tmux
10
+ * attach` and a keyboard, `UnsentComposerBar`'s Run (which sends Enter through
11
+ * `/special-keys` and nothing else), a script calling `tmux send-keys`. The
12
+ * agent answers all of them, the poller saves the answer, and
13
+ * `groupMessagesIntoPairs` has a reply with no prompt in front of it — the
14
+ * `orphan` pair. That is not a rendering problem: History genuinely does not
15
+ * know what was asked.
16
+ *
17
+ * The agents do know, because each of them keeps its own record of the
18
+ * conversation. This module is the half of the fix that is the same whatever
19
+ * that record looks like: given "instance X was prompted with this text at this
20
+ * moment, and here is a stable name for that prompt", make History hold exactly
21
+ * one user row for it. `lib/hooks/sources/claude/history` supplies those four
22
+ * things from Claude's transcript JSONL; #2197 and #2198 will supply them from
23
+ * codex's and antigravity's own records. Nothing below mentions a tool.
24
+ *
25
+ * ## Three outcomes, and why the middle one exists
26
+ *
27
+ * 1. **The key is already on a row** — nothing happens. The callers are pollers,
28
+ * so being asked to record the same prompt again is the normal case rather
29
+ * than an error.
30
+ * 2. **An unkeyed row already holds this text** — that row is *claimed*, not
31
+ * duplicated. This is the `/send` case, and it is the whole reason the
32
+ * recorder is not simply an insert: `sendUserMessage` wrote the operator's
33
+ * message the instant it was sent, and the agent then recorded the same text
34
+ * in its own log a moment later. Two records of one keystroke. Inserting
35
+ * would show the operator their own message twice, which is a worse defect
36
+ * than the orphan pair this Issue set out to remove — so the pre-existing row
37
+ * wins and merely gains the key, and every later call recognises it through
38
+ * outcome 1.
39
+ * 3. **Neither** — insert, and broadcast so an open History pane sees it without
40
+ * a reload.
41
+ *
42
+ * ## Nothing here throws
43
+ *
44
+ * The same contract as the transcript readers that call it, for a sharper
45
+ * reason: this runs inside the poller's save path, immediately before the
46
+ * *assistant* row is written. An exception escaping would cost the reply as
47
+ * well as the prompt, so a failure to record the prompt is reported in the
48
+ * return value and in the log, and the caller carries on.
49
+ *
50
+ * The database imports are dynamic, so that `better-sqlite3` does not enter the
51
+ * module graph of everything that imports `@/lib/hooks/sources`.
52
+ *
53
+ * @module lib/history/user-turn-recorder
54
+ */
55
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
56
+ if (k2 === undefined) k2 = k;
57
+ var desc = Object.getOwnPropertyDescriptor(m, k);
58
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
59
+ desc = { enumerable: true, get: function() { return m[k]; } };
60
+ }
61
+ Object.defineProperty(o, k2, desc);
62
+ }) : (function(o, m, k, k2) {
63
+ if (k2 === undefined) k2 = k;
64
+ o[k2] = m[k];
65
+ }));
66
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
67
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
68
+ }) : function(o, v) {
69
+ o["default"] = v;
70
+ });
71
+ var __importStar = (this && this.__importStar) || (function () {
72
+ var ownKeys = function(o) {
73
+ ownKeys = Object.getOwnPropertyNames || function (o) {
74
+ var ar = [];
75
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
76
+ return ar;
77
+ };
78
+ return ownKeys(o);
79
+ };
80
+ return function (mod) {
81
+ if (mod && mod.__esModule) return mod;
82
+ var result = {};
83
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
84
+ __setModuleDefault(result, mod);
85
+ return result;
86
+ };
87
+ })();
88
+ Object.defineProperty(exports, "__esModule", { value: true });
89
+ exports.USER_TURN_ADOPTION_WINDOW_MS = void 0;
90
+ exports.normalizeUserTurnContent = normalizeUserTurnContent;
91
+ exports.recordUserTurn = recordUserTurn;
92
+ const logger_1 = require("../../lib/logger");
93
+ const logger = (0, logger_1.createLogger)('lib/history/user-turn-recorder');
94
+ /**
95
+ * How far from the agent's own clock a `/send` row may sit and still be the
96
+ * same keystroke.
97
+ *
98
+ * Two minutes, and it is a tolerance rather than a guess at a latency. The two
99
+ * timestamps being compared are written by different clocks for different
100
+ * events: `sendUserMessage` stamps the row when CommandMate hands the text to
101
+ * the pane, and the agent stamps its own record when it accepts the prompt.
102
+ * Between them sit the composer, a `waitForPrompt`, a folder-trust dialog, a
103
+ * queued prompt waiting for the previous turn to finish, and — for a prompt
104
+ * typed while the agent was busy — however long that turn took to end.
105
+ *
106
+ * Erring wide is the cheap direction. Too wide costs a mis-adoption only if the
107
+ * *same instance* was sent the *byte-identical* text twice inside four minutes,
108
+ * in which case the two rows are interchangeable anyway. Too narrow costs a
109
+ * duplicate row on every `/send` the agent was slow to accept, which is visible
110
+ * to the operator on every single turn.
111
+ */
112
+ exports.USER_TURN_ADOPTION_WINDOW_MS = 120_000;
113
+ /**
114
+ * The form two pieces of text are compared in.
115
+ *
116
+ * Trailing whitespace per line, `\r\n`, and blank lines at either end are the
117
+ * three differences that a round trip through a TUI composer actually
118
+ * introduces, so they are the three this ignores. Nothing else is touched — in
119
+ * particular interior blank lines are significant, because a prompt whose
120
+ * paragraph breaks were collapsed is not the same prompt.
121
+ */
122
+ function normalizeUserTurnContent(content) {
123
+ return content
124
+ .replace(/\r\n?/g, '\n')
125
+ .split('\n')
126
+ .map((line) => line.replace(/[ \t ]+$/u, ''))
127
+ .join('\n')
128
+ .trim();
129
+ }
130
+ /** How far the recorder's log calls identify the instance. */
131
+ function describe(target) {
132
+ return {
133
+ worktreeId: target.worktreeId,
134
+ cliToolId: target.cliToolId,
135
+ instanceId: target.instanceId ?? target.cliToolId,
136
+ };
137
+ }
138
+ /**
139
+ * Make History hold exactly one `user` row for one prompt.
140
+ *
141
+ * Never throws.
142
+ *
143
+ * @param target - The instance that was prompted
144
+ * @param key - A stable name for this prompt, unique per (worktree, prompt).
145
+ * Written to `chat_messages.request_id`, which is what makes a second call
146
+ * with the same key a no-op. Callers derive it from the agent's own id for the
147
+ * prompt — see `claudePromptRequestId` — so that it survives a restart, a
148
+ * re-read of the log and a `/clear`.
149
+ * @param content - The prompt, as the agent recorded it
150
+ * @param timestampMs - When the agent says it was prompted, epoch ms
151
+ */
152
+ async function recordUserTurn(target, key, content, timestampMs) {
153
+ const instanceId = target.instanceId ?? target.cliToolId;
154
+ const normalized = normalizeUserTurnContent(content);
155
+ if (key.length === 0 || normalized.length === 0) {
156
+ return { outcome: 'skipped', messageId: null, timestampMs: null };
157
+ }
158
+ try {
159
+ const [{ getDbInstance }, chatDb, { broadcastMessage }] = await Promise.all([
160
+ Promise.resolve().then(() => __importStar(require('../../lib/db/db-instance'))),
161
+ Promise.resolve().then(() => __importStar(require('../../lib/db/chat-db'))),
162
+ Promise.resolve().then(() => __importStar(require('../../lib/ws-server'))),
163
+ ]);
164
+ const db = getDbInstance();
165
+ const existing = chatDb.findMessageByRequestId(db, target.worktreeId, key);
166
+ if (existing) {
167
+ return {
168
+ outcome: 'already-recorded',
169
+ messageId: existing.id,
170
+ timestampMs: existing.timestamp.getTime(),
171
+ };
172
+ }
173
+ const at = timestampMs > 0 ? timestampMs : Date.now();
174
+ const adopted = adoptExistingRow(chatDb, db, target, instanceId, key, normalized, at);
175
+ if (adopted)
176
+ return adopted;
177
+ const message = chatDb.createMessage(db, {
178
+ worktreeId: target.worktreeId,
179
+ role: 'user',
180
+ content,
181
+ messageType: 'normal',
182
+ timestamp: new Date(at),
183
+ cliToolId: target.cliToolId,
184
+ instanceId,
185
+ requestId: key,
186
+ });
187
+ broadcastMessage('message', { worktreeId: target.worktreeId, message });
188
+ logger.info('user-turn-recorded', {
189
+ ...describe(target),
190
+ requestId: key,
191
+ contentLength: content.length,
192
+ });
193
+ return { outcome: 'inserted', messageId: message.id, timestampMs: at };
194
+ }
195
+ catch (error) {
196
+ logger.error('user-turn-record-failed', {
197
+ ...describe(target),
198
+ requestId: key,
199
+ error: error instanceof Error ? error.message : String(error),
200
+ });
201
+ return { outcome: 'failed', messageId: null, timestampMs: null };
202
+ }
203
+ }
204
+ /**
205
+ * Claim the `/send` row for this prompt, if there is one.
206
+ *
207
+ * The candidates come back newest first and are compared on normalised content;
208
+ * the one nearest the agent's clock wins, which only matters when the operator
209
+ * sent the same text twice inside the window and is the right tie-break then
210
+ * too.
211
+ *
212
+ * The claim itself can lose — `setMessageRequestId` refuses a row that acquired
213
+ * a key between the read and the write. Losing means some other producer got
214
+ * there first, so the next candidate is tried and, if none is left, the caller
215
+ * falls through to the insert. It cannot loop: each attempt either claims a row
216
+ * or removes it from contention.
217
+ *
218
+ * @returns The claimed row, or null when nothing here belongs to this prompt
219
+ */
220
+ function adoptExistingRow(chatDb, db, target, instanceId, key, normalized, at) {
221
+ const candidates = chatDb
222
+ .findUnkeyedUserMessages(db, {
223
+ worktreeId: target.worktreeId,
224
+ cliToolId: target.cliToolId,
225
+ instanceId,
226
+ fromMs: at - exports.USER_TURN_ADOPTION_WINDOW_MS,
227
+ toMs: at + exports.USER_TURN_ADOPTION_WINDOW_MS,
228
+ })
229
+ .filter((row) => normalizeUserTurnContent(row.content) === normalized)
230
+ .sort((a, b) => Math.abs(a.timestamp.getTime() - at) - Math.abs(b.timestamp.getTime() - at));
231
+ for (const candidate of candidates) {
232
+ if (!chatDb.setMessageRequestId(db, candidate.id, key))
233
+ continue;
234
+ logger.info('user-turn-adopted', {
235
+ ...describe(target),
236
+ requestId: key,
237
+ messageId: candidate.id,
238
+ driftMs: candidate.timestamp.getTime() - at,
239
+ });
240
+ return {
241
+ outcome: 'adopted',
242
+ messageId: candidate.id,
243
+ timestampMs: candidate.timestamp.getTime(),
244
+ };
245
+ }
246
+ return null;
247
+ }
@@ -35,6 +35,39 @@
35
35
  *
36
36
  * @module lib/hooks/permission-decision-service
37
37
  */
38
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
39
+ if (k2 === undefined) k2 = k;
40
+ var desc = Object.getOwnPropertyDescriptor(m, k);
41
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
42
+ desc = { enumerable: true, get: function() { return m[k]; } };
43
+ }
44
+ Object.defineProperty(o, k2, desc);
45
+ }) : (function(o, m, k, k2) {
46
+ if (k2 === undefined) k2 = k;
47
+ o[k2] = m[k];
48
+ }));
49
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
50
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
51
+ }) : function(o, v) {
52
+ o["default"] = v;
53
+ });
54
+ var __importStar = (this && this.__importStar) || (function () {
55
+ var ownKeys = function(o) {
56
+ ownKeys = Object.getOwnPropertyNames || function (o) {
57
+ var ar = [];
58
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
59
+ return ar;
60
+ };
61
+ return ownKeys(o);
62
+ };
63
+ return function (mod) {
64
+ if (mod && mod.__esModule) return mod;
65
+ var result = {};
66
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
67
+ __setModuleDefault(result, mod);
68
+ return result;
69
+ };
70
+ })();
38
71
  Object.defineProperty(exports, "__esModule", { value: true });
39
72
  exports.PERMISSION_DECISION_SLOW_MS = exports.PERMISSION_REQUEST_PROMPT_TYPE = void 0;
40
73
  exports.decidePermissionRequest = decidePermissionRequest;
@@ -145,8 +178,9 @@ function recordAllowedPermission(session, payload) {
145
178
  const texts = (0, permission_request_payload_1.collectToolInputMatchTexts)(payload.toolName, payload.toolInput, payload.toolInputNormalization);
146
179
  const target = texts.join('\n').slice(0, auto_yes_resolver_1.MAX_DENY_MATCH_TEXT_LENGTH);
147
180
  const now = new Date();
181
+ let recorded = null;
148
182
  try {
149
- (0, chat_db_1.createMessage)((0, db_instance_1.getDbInstance)(), {
183
+ recorded = (0, chat_db_1.createMessage)((0, db_instance_1.getDbInstance)(), {
150
184
  worktreeId: session.worktreeId,
151
185
  role: 'assistant',
152
186
  content: `${payload.toolName}: ${target}`.slice(0, auto_yes_resolver_1.MAX_DENY_MATCH_TEXT_LENGTH),
@@ -181,6 +215,56 @@ function recordAllowedPermission(session, payload) {
181
215
  error: error instanceof Error ? error.message : String(error),
182
216
  });
183
217
  }
218
+ if (!recorded)
219
+ return;
220
+ broadcastAuditRow(session, recorded);
221
+ }
222
+ /**
223
+ * Push the audit row this module just wrote to every pane watching the worktree
224
+ * (Issue #2214).
225
+ *
226
+ * `'message'`, never `'message_updated'`: `recordAllowedPermission` always
227
+ * INSERTs (see its own comment on why it does not reuse `recordAnsweredPrompt`),
228
+ * so the row has never been delivered before and a client has to append it.
229
+ *
230
+ * Separated from the write above rather than folded into its `try`, because the
231
+ * two failures are not the same failure: the row is committed by the time this
232
+ * runs, and a socket that cannot take it must cost this push and nothing else.
233
+ * That separation is also why the delivery is a detached promise — the caller is
234
+ * a hook handler with an agent blocked on its verdict, and neither a cold
235
+ * `ws-server` load nor a socket write belongs on that path. This mirrors how
236
+ * `auto-yes-poller` publishes the answered-prompt row it writes on the same
237
+ * Auto-Yes path.
238
+ *
239
+ * `instanceId` is carried through unchanged: `createMessage` returns the
240
+ * caller's own object rather than re-reading the row, and every field this
241
+ * module passes it — `cliToolId` and `instanceId` included — is an explicit
242
+ * value taken from the resolved session, so what is published matches the row
243
+ * that was written.
244
+ *
245
+ * #2214 recorded a limitation here — that a route bundle holds its own empty
246
+ * copy of `ws-server`'s `rooms` under `next dev`, while "production runs one
247
+ * custom-server bundle and is unaffected". **The second half was wrong, and the
248
+ * hook route this function serves was one of the paths it was wrong about.** A
249
+ * production build has two graphs: `dist/server/server.js` requires
250
+ * `./src/lib/ws-server` and calls `setupWebSocket`, while every
251
+ * `.next/server/app/api/**\/route.js` reaches a second copy in
252
+ * `.next/server/chunks/`, where `setupWebSocket` is exported and never called.
253
+ * This push therefore reached nobody in production either. #2220 fixed it with
254
+ * the publisher registry in `lib/realtime/publisher-registry`; `broadcastMessage`
255
+ * now routes to whichever instance owns the sockets, and no call site changed.
256
+ */
257
+ function broadcastAuditRow(session, message) {
258
+ void Promise.resolve().then(() => __importStar(require('../../lib/ws-server'))).then(({ broadcastMessage }) => {
259
+ broadcastMessage('message', { worktreeId: session.worktreeId, message });
260
+ })
261
+ .catch((error) => {
262
+ logger.warn('permission-request:audit-broadcast-failed', {
263
+ worktreeId: session.worktreeId,
264
+ instanceId: session.instanceId,
265
+ error: error instanceof Error ? error.message : String(error),
266
+ });
267
+ });
184
268
  }
185
269
  /**
186
270
  * Permission modes in which declining to decide does NOT produce a dialog.