commandmate 0.20.0 → 0.21.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 (554) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +234 -220
  3. package/.next/app-path-routes-manifest.json +34 -32
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +18 -0
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update-check/route.js +1 -1
  11. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/assistant/messages/route.js +1 -1
  15. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/session/route.js +1 -1
  17. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/login/route.js +1 -1
  22. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/auth/logout/route.js +1 -1
  24. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/auth/status/route.js +1 -1
  26. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/fs/recent-paths/route.js +1 -1
  34. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  37. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  41. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  45. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  47. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/repositories/route.js +1 -1
  53. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/skills/operations/route.js +2 -2
  61. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  67. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/todos/route.js +1 -1
  71. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  73. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/verification/runs/route.js +1 -1
  75. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  79. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  147. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  150. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  153. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  156. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  159. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -0
  161. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -0
  162. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -0
  163. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -0
  164. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -0
  165. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -0
  166. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  197. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  198. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  200. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  201. package/.next/server/app/page_client-reference-manifest.js +1 -1
  202. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  204. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  205. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  206. package/.next/server/app/skills/[skillId]/page.js +2 -2
  207. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  208. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  209. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  210. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  211. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  212. package/.next/server/app/worktrees/[id]/page.js +5 -5
  213. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  214. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  215. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  216. package/.next/server/app-paths-manifest.json +34 -32
  217. package/.next/server/chunks/1029.js +1 -1
  218. package/.next/server/chunks/1503.js +1 -1
  219. package/.next/server/chunks/22.js +1 -1
  220. package/.next/server/chunks/2328.js +1 -1
  221. package/.next/server/chunks/2546.js +1 -0
  222. package/.next/server/chunks/2710.js +2 -2
  223. package/.next/server/chunks/28.js +2 -2
  224. package/.next/server/chunks/3417.js +1 -1
  225. package/.next/server/chunks/365.js +1 -0
  226. package/.next/server/chunks/3736.js +1 -1
  227. package/.next/server/chunks/3753.js +14 -5
  228. package/.next/server/chunks/4444.js +1 -1
  229. package/.next/server/chunks/5064.js +1 -1
  230. package/.next/server/chunks/5737.js +1 -1
  231. package/.next/server/chunks/5959.js +10 -3
  232. package/.next/server/chunks/6130.js +1 -1
  233. package/.next/server/chunks/6274.js +1 -1
  234. package/.next/server/chunks/6401.js +1 -1
  235. package/.next/server/chunks/848.js +1 -0
  236. package/.next/server/chunks/8536.js +1 -1
  237. package/.next/server/chunks/8584.js +1 -1
  238. package/.next/server/chunks/8807.js +1 -1
  239. package/.next/server/chunks/8856.js +1 -1
  240. package/.next/server/chunks/9058.js +1 -1
  241. package/.next/server/chunks/9360.js +2 -0
  242. package/.next/server/chunks/9687.js +1 -1
  243. package/.next/server/middleware-manifest.json +5 -5
  244. package/.next/server/pages/500.html +1 -1
  245. package/.next/server/server-reference-manifest.json +1 -1
  246. package/.next/static/chunks/{8562-6e2ab32452f4fa5b.js → 2053-52d3c82014e1cd54.js} +1 -1
  247. package/.next/static/chunks/2751-9ef0f4b450bd4ef0.js +1 -0
  248. package/.next/static/chunks/{6488-3e7539550c3ef358.js → 6488-b5e707dfdd33d633.js} +1 -1
  249. package/.next/static/chunks/app/api/app/update/route-be21650964d61b1d.js +1 -0
  250. package/.next/static/chunks/app/api/app/update-check/route-be21650964d61b1d.js +1 -0
  251. package/.next/static/chunks/app/api/assistant/conversation/route-be21650964d61b1d.js +1 -0
  252. package/.next/static/chunks/app/api/assistant/current-output/route-be21650964d61b1d.js +1 -0
  253. package/.next/static/chunks/app/api/assistant/messages/route-be21650964d61b1d.js +1 -0
  254. package/.next/static/chunks/app/api/assistant/session/route-be21650964d61b1d.js +1 -0
  255. package/.next/static/chunks/app/api/assistant/start/route-be21650964d61b1d.js +1 -0
  256. package/.next/static/chunks/app/api/assistant/terminal/route-be21650964d61b1d.js +1 -0
  257. package/.next/static/chunks/app/api/assistant/tools/route-be21650964d61b1d.js +1 -0
  258. package/.next/static/chunks/app/api/auth/login/route-be21650964d61b1d.js +1 -0
  259. package/.next/static/chunks/app/api/auth/logout/route-be21650964d61b1d.js +1 -0
  260. package/.next/static/chunks/app/api/auth/status/route-be21650964d61b1d.js +1 -0
  261. package/.next/static/chunks/app/api/daily-summary/route-be21650964d61b1d.js +1 -0
  262. package/.next/static/chunks/app/api/daily-summary/status/route-be21650964d61b1d.js +1 -0
  263. package/.next/static/chunks/app/api/external-apps/[id]/health/route-be21650964d61b1d.js +1 -0
  264. package/.next/static/chunks/app/api/external-apps/[id]/route-be21650964d61b1d.js +1 -0
  265. package/.next/static/chunks/app/api/external-apps/route-be21650964d61b1d.js +1 -0
  266. package/.next/static/chunks/app/api/fs/browse/route-be21650964d61b1d.js +1 -0
  267. package/.next/static/chunks/app/api/fs/recent-paths/route-be21650964d61b1d.js +1 -0
  268. package/.next/static/chunks/app/api/hooks/agent-event/route-be21650964d61b1d.js +1 -0
  269. package/.next/static/chunks/app/api/hooks/claude-done/route-be21650964d61b1d.js +1 -0
  270. package/.next/static/chunks/app/api/metrics/vibe/route-be21650964d61b1d.js +1 -0
  271. package/.next/static/chunks/app/api/ollama/models/route-be21650964d61b1d.js +1 -0
  272. package/.next/static/chunks/app/api/push/subscriptions/route-be21650964d61b1d.js +1 -0
  273. package/.next/static/chunks/app/api/push/vapid/route-be21650964d61b1d.js +1 -0
  274. package/.next/static/chunks/app/api/repositories/[id]/route-be21650964d61b1d.js +1 -0
  275. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-be21650964d61b1d.js +1 -0
  276. package/.next/static/chunks/app/api/repositories/[id]/todos/route-be21650964d61b1d.js +1 -0
  277. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-be21650964d61b1d.js +1 -0
  278. package/.next/static/chunks/app/api/repositories/clone/route-be21650964d61b1d.js +1 -0
  279. package/.next/static/chunks/app/api/repositories/excluded/route-be21650964d61b1d.js +1 -0
  280. package/.next/static/chunks/app/api/repositories/restore/route-be21650964d61b1d.js +1 -0
  281. package/.next/static/chunks/app/api/repositories/route-be21650964d61b1d.js +1 -0
  282. package/.next/static/chunks/app/api/repositories/scan/route-be21650964d61b1d.js +1 -0
  283. package/.next/static/chunks/app/api/repositories/sync/route-be21650964d61b1d.js +1 -0
  284. package/.next/static/chunks/app/api/repositories/validate-path/route-be21650964d61b1d.js +1 -0
  285. package/.next/static/chunks/app/api/sidebar/group-order/route-be21650964d61b1d.js +1 -0
  286. package/.next/static/chunks/app/api/skills/[id]/route-be21650964d61b1d.js +1 -0
  287. package/.next/static/chunks/app/api/skills/installations/route-be21650964d61b1d.js +1 -0
  288. package/.next/static/chunks/app/api/skills/operations/route-be21650964d61b1d.js +1 -0
  289. package/.next/static/chunks/app/api/skills/reindex/route-be21650964d61b1d.js +1 -0
  290. package/.next/static/chunks/app/api/skills/route-be21650964d61b1d.js +1 -0
  291. package/.next/static/chunks/app/api/slash-commands/route-be21650964d61b1d.js +1 -0
  292. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-be21650964d61b1d.js +1 -0
  293. package/.next/static/chunks/app/api/tasks/[taskId]/route-be21650964d61b1d.js +1 -0
  294. package/.next/static/chunks/app/api/templates/[id]/route-be21650964d61b1d.js +1 -0
  295. package/.next/static/chunks/app/api/templates/route-be21650964d61b1d.js +1 -0
  296. package/.next/static/chunks/app/api/todos/route-be21650964d61b1d.js +1 -0
  297. package/.next/static/chunks/app/api/verification/runs/[runId]/route-be21650964d61b1d.js +1 -0
  298. package/.next/static/chunks/app/api/verification/runs/route-be21650964d61b1d.js +1 -0
  299. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-be21650964d61b1d.js +1 -0
  300. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-be21650964d61b1d.js +1 -0
  301. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-be21650964d61b1d.js +1 -0
  302. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-be21650964d61b1d.js +1 -0
  303. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-be21650964d61b1d.js +1 -0
  304. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-be21650964d61b1d.js +1 -0
  305. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-be21650964d61b1d.js +1 -0
  306. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-be21650964d61b1d.js +1 -0
  307. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-be21650964d61b1d.js +1 -0
  308. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-be21650964d61b1d.js +1 -0
  309. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-be21650964d61b1d.js +1 -0
  310. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-be21650964d61b1d.js +1 -0
  311. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-be21650964d61b1d.js +1 -0
  312. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-be21650964d61b1d.js +1 -0
  313. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-be21650964d61b1d.js +1 -0
  314. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-be21650964d61b1d.js +1 -0
  315. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-be21650964d61b1d.js +1 -0
  316. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-be21650964d61b1d.js +1 -0
  317. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-be21650964d61b1d.js +1 -0
  318. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-be21650964d61b1d.js +1 -0
  319. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-be21650964d61b1d.js +1 -0
  320. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-be21650964d61b1d.js +1 -0
  321. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-be21650964d61b1d.js +1 -0
  322. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-be21650964d61b1d.js +1 -0
  323. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-be21650964d61b1d.js +1 -0
  324. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-be21650964d61b1d.js +1 -0
  325. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-be21650964d61b1d.js +1 -0
  326. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-be21650964d61b1d.js +1 -0
  327. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-be21650964d61b1d.js +1 -0
  328. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-be21650964d61b1d.js +1 -0
  329. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-be21650964d61b1d.js +1 -0
  330. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-be21650964d61b1d.js +1 -0
  331. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-be21650964d61b1d.js +1 -0
  332. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-be21650964d61b1d.js +1 -0
  333. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-be21650964d61b1d.js +1 -0
  334. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-be21650964d61b1d.js +1 -0
  335. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-be21650964d61b1d.js +1 -0
  336. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-be21650964d61b1d.js +1 -0
  337. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-be21650964d61b1d.js +1 -0
  338. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-be21650964d61b1d.js +1 -0
  339. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-be21650964d61b1d.js +1 -0
  340. package/.next/static/chunks/app/api/worktrees/[id]/route-be21650964d61b1d.js +1 -0
  341. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-be21650964d61b1d.js +1 -0
  342. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-be21650964d61b1d.js +1 -0
  343. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-be21650964d61b1d.js +1 -0
  344. package/.next/static/chunks/app/api/worktrees/[id]/search/route-be21650964d61b1d.js +1 -0
  345. package/.next/static/chunks/app/api/worktrees/[id]/send/route-be21650964d61b1d.js +1 -0
  346. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-be21650964d61b1d.js +1 -0
  347. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-be21650964d61b1d.js +1 -0
  348. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-be21650964d61b1d.js +1 -0
  349. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-be21650964d61b1d.js +1 -0
  350. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-be21650964d61b1d.js +1 -0
  351. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-be21650964d61b1d.js +1 -0
  352. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-be21650964d61b1d.js +1 -0
  353. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-be21650964d61b1d.js +1 -0
  354. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-be21650964d61b1d.js +1 -0
  355. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-be21650964d61b1d.js +1 -0
  356. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-be21650964d61b1d.js +1 -0
  357. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-be21650964d61b1d.js +1 -0
  358. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-be21650964d61b1d.js +1 -0
  359. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-be21650964d61b1d.js +1 -0
  360. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-be21650964d61b1d.js +1 -0
  361. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-be21650964d61b1d.js +1 -0
  362. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-be21650964d61b1d.js +1 -0
  363. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-be21650964d61b1d.js +1 -0
  364. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-be21650964d61b1d.js +1 -0
  365. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-be21650964d61b1d.js +1 -0
  366. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-be21650964d61b1d.js +1 -0
  367. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-be21650964d61b1d.js +1 -0
  368. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-be21650964d61b1d.js +1 -0
  369. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-be21650964d61b1d.js +1 -0
  370. package/.next/static/chunks/app/api/worktrees/route-be21650964d61b1d.js +1 -0
  371. package/.next/static/chunks/app/manifest.webmanifest/route-be21650964d61b1d.js +1 -0
  372. package/.next/static/chunks/app/proxy/[...path]/route-be21650964d61b1d.js +1 -0
  373. package/.next/static/chunks/app/skills/[skillId]/page-10d6f983e5f06ffb.js +1 -0
  374. package/.next/static/chunks/app/worktrees/[id]/layout-be21650964d61b1d.js +1 -0
  375. package/.next/static/chunks/app/worktrees/[id]/page-b73ac6531829c698.js +1 -0
  376. package/.next/trace +12 -12
  377. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/update/route.ts +347 -0
  378. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.ts +347 -0
  379. package/.next/types/routes.d.ts +3 -1
  380. package/.next/types/validator.ts +18 -0
  381. package/dist/cli/commands/auto-yes.js +1 -1
  382. package/dist/cli/commands/capture.d.ts +1 -0
  383. package/dist/cli/commands/capture.d.ts.map +1 -1
  384. package/dist/cli/commands/capture.js +109 -0
  385. package/dist/cli/commands/respond.d.ts.map +1 -1
  386. package/dist/cli/commands/respond.js +31 -6
  387. package/dist/cli/commands/send.js +2 -2
  388. package/dist/cli/commands/skill-format.d.ts +7 -1
  389. package/dist/cli/commands/skill-format.d.ts.map +1 -1
  390. package/dist/cli/commands/skill-format.js +67 -0
  391. package/dist/cli/commands/skill.d.ts +2 -0
  392. package/dist/cli/commands/skill.d.ts.map +1 -1
  393. package/dist/cli/commands/skill.js +149 -0
  394. package/dist/cli/commands/sync.d.ts +14 -0
  395. package/dist/cli/commands/sync.d.ts.map +1 -0
  396. package/dist/cli/commands/sync.js +53 -0
  397. package/dist/cli/commands/wait.js +1 -1
  398. package/dist/cli/docs/agent-operations.d.ts +1 -1
  399. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  400. package/dist/cli/docs/agent-operations.js +25 -3
  401. package/dist/cli/program.d.ts.map +1 -1
  402. package/dist/cli/program.js +3 -0
  403. package/dist/cli/types/api-responses.d.ts +174 -0
  404. package/dist/cli/types/api-responses.d.ts.map +1 -1
  405. package/dist/cli/types/index.d.ts +31 -0
  406. package/dist/cli/types/index.d.ts.map +1 -1
  407. package/dist/cli/utils/verify-runner.d.ts +9 -0
  408. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  409. package/dist/cli/utils/verify-runner.js +28 -2
  410. package/dist/config/history-display-config.d.ts +61 -0
  411. package/dist/config/history-display-config.d.ts.map +1 -0
  412. package/dist/config/history-display-config.js +62 -0
  413. package/dist/server/src/lib/auto-yes-poller.js +49 -0
  414. package/dist/server/src/lib/db/chat-db.js +75 -1
  415. package/dist/server/src/lib/db/db.js +4 -3
  416. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +54 -0
  417. package/dist/server/src/lib/session/current-output-builder.js +2 -0
  418. package/dist/server/src/lib/skills/install-apply.js +63 -23
  419. package/dist/server/src/lib/skills/operation-audit.js +5 -6
  420. package/dist/server/src/lib/skills/startup-reconcile.js +26 -5
  421. package/dist/server/src/lib/skills/updater.js +830 -0
  422. package/package.json +1 -1
  423. package/.next/server/chunks/3042.js +0 -1
  424. package/.next/server/chunks/4440.js +0 -2
  425. package/.next/server/chunks/4548.js +0 -1
  426. package/.next/server/chunks/5793.js +0 -1
  427. package/.next/static/chunks/2751-7fabd91275b14ca3.js +0 -1
  428. package/.next/static/chunks/app/api/app/update/route-5bdd550ed6386f57.js +0 -1
  429. package/.next/static/chunks/app/api/app/update-check/route-5bdd550ed6386f57.js +0 -1
  430. package/.next/static/chunks/app/api/assistant/conversation/route-5bdd550ed6386f57.js +0 -1
  431. package/.next/static/chunks/app/api/assistant/current-output/route-5bdd550ed6386f57.js +0 -1
  432. package/.next/static/chunks/app/api/assistant/messages/route-5bdd550ed6386f57.js +0 -1
  433. package/.next/static/chunks/app/api/assistant/session/route-5bdd550ed6386f57.js +0 -1
  434. package/.next/static/chunks/app/api/assistant/start/route-5bdd550ed6386f57.js +0 -1
  435. package/.next/static/chunks/app/api/assistant/terminal/route-5bdd550ed6386f57.js +0 -1
  436. package/.next/static/chunks/app/api/assistant/tools/route-5bdd550ed6386f57.js +0 -1
  437. package/.next/static/chunks/app/api/auth/login/route-5bdd550ed6386f57.js +0 -1
  438. package/.next/static/chunks/app/api/auth/logout/route-5bdd550ed6386f57.js +0 -1
  439. package/.next/static/chunks/app/api/auth/status/route-5bdd550ed6386f57.js +0 -1
  440. package/.next/static/chunks/app/api/daily-summary/route-5bdd550ed6386f57.js +0 -1
  441. package/.next/static/chunks/app/api/daily-summary/status/route-5bdd550ed6386f57.js +0 -1
  442. package/.next/static/chunks/app/api/external-apps/[id]/health/route-5bdd550ed6386f57.js +0 -1
  443. package/.next/static/chunks/app/api/external-apps/[id]/route-5bdd550ed6386f57.js +0 -1
  444. package/.next/static/chunks/app/api/external-apps/route-5bdd550ed6386f57.js +0 -1
  445. package/.next/static/chunks/app/api/fs/browse/route-5bdd550ed6386f57.js +0 -1
  446. package/.next/static/chunks/app/api/fs/recent-paths/route-5bdd550ed6386f57.js +0 -1
  447. package/.next/static/chunks/app/api/hooks/agent-event/route-5bdd550ed6386f57.js +0 -1
  448. package/.next/static/chunks/app/api/hooks/claude-done/route-5bdd550ed6386f57.js +0 -1
  449. package/.next/static/chunks/app/api/metrics/vibe/route-5bdd550ed6386f57.js +0 -1
  450. package/.next/static/chunks/app/api/ollama/models/route-5bdd550ed6386f57.js +0 -1
  451. package/.next/static/chunks/app/api/push/subscriptions/route-5bdd550ed6386f57.js +0 -1
  452. package/.next/static/chunks/app/api/push/vapid/route-5bdd550ed6386f57.js +0 -1
  453. package/.next/static/chunks/app/api/repositories/[id]/route-5bdd550ed6386f57.js +0 -1
  454. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +0 -1
  455. package/.next/static/chunks/app/api/repositories/[id]/todos/route-5bdd550ed6386f57.js +0 -1
  456. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-5bdd550ed6386f57.js +0 -1
  457. package/.next/static/chunks/app/api/repositories/clone/route-5bdd550ed6386f57.js +0 -1
  458. package/.next/static/chunks/app/api/repositories/excluded/route-5bdd550ed6386f57.js +0 -1
  459. package/.next/static/chunks/app/api/repositories/restore/route-5bdd550ed6386f57.js +0 -1
  460. package/.next/static/chunks/app/api/repositories/route-5bdd550ed6386f57.js +0 -1
  461. package/.next/static/chunks/app/api/repositories/scan/route-5bdd550ed6386f57.js +0 -1
  462. package/.next/static/chunks/app/api/repositories/sync/route-5bdd550ed6386f57.js +0 -1
  463. package/.next/static/chunks/app/api/repositories/validate-path/route-5bdd550ed6386f57.js +0 -1
  464. package/.next/static/chunks/app/api/sidebar/group-order/route-5bdd550ed6386f57.js +0 -1
  465. package/.next/static/chunks/app/api/skills/[id]/route-5bdd550ed6386f57.js +0 -1
  466. package/.next/static/chunks/app/api/skills/installations/route-5bdd550ed6386f57.js +0 -1
  467. package/.next/static/chunks/app/api/skills/operations/route-5bdd550ed6386f57.js +0 -1
  468. package/.next/static/chunks/app/api/skills/reindex/route-5bdd550ed6386f57.js +0 -1
  469. package/.next/static/chunks/app/api/skills/route-5bdd550ed6386f57.js +0 -1
  470. package/.next/static/chunks/app/api/slash-commands/route-5bdd550ed6386f57.js +0 -1
  471. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-5bdd550ed6386f57.js +0 -1
  472. package/.next/static/chunks/app/api/tasks/[taskId]/route-5bdd550ed6386f57.js +0 -1
  473. package/.next/static/chunks/app/api/templates/[id]/route-5bdd550ed6386f57.js +0 -1
  474. package/.next/static/chunks/app/api/templates/route-5bdd550ed6386f57.js +0 -1
  475. package/.next/static/chunks/app/api/todos/route-5bdd550ed6386f57.js +0 -1
  476. package/.next/static/chunks/app/api/verification/runs/[runId]/route-5bdd550ed6386f57.js +0 -1
  477. package/.next/static/chunks/app/api/verification/runs/route-5bdd550ed6386f57.js +0 -1
  478. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-5bdd550ed6386f57.js +0 -1
  479. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-5bdd550ed6386f57.js +0 -1
  480. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-5bdd550ed6386f57.js +0 -1
  481. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-5bdd550ed6386f57.js +0 -1
  482. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-5bdd550ed6386f57.js +0 -1
  483. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-5bdd550ed6386f57.js +0 -1
  484. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-5bdd550ed6386f57.js +0 -1
  485. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-5bdd550ed6386f57.js +0 -1
  486. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-5bdd550ed6386f57.js +0 -1
  487. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-5bdd550ed6386f57.js +0 -1
  488. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-5bdd550ed6386f57.js +0 -1
  489. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-5bdd550ed6386f57.js +0 -1
  490. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-5bdd550ed6386f57.js +0 -1
  491. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-5bdd550ed6386f57.js +0 -1
  492. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-5bdd550ed6386f57.js +0 -1
  493. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-5bdd550ed6386f57.js +0 -1
  494. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-5bdd550ed6386f57.js +0 -1
  495. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-5bdd550ed6386f57.js +0 -1
  496. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-5bdd550ed6386f57.js +0 -1
  497. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-5bdd550ed6386f57.js +0 -1
  498. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-5bdd550ed6386f57.js +0 -1
  499. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-5bdd550ed6386f57.js +0 -1
  500. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-5bdd550ed6386f57.js +0 -1
  501. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-5bdd550ed6386f57.js +0 -1
  502. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-5bdd550ed6386f57.js +0 -1
  503. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-5bdd550ed6386f57.js +0 -1
  504. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-5bdd550ed6386f57.js +0 -1
  505. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-5bdd550ed6386f57.js +0 -1
  506. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-5bdd550ed6386f57.js +0 -1
  507. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-5bdd550ed6386f57.js +0 -1
  508. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-5bdd550ed6386f57.js +0 -1
  509. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-5bdd550ed6386f57.js +0 -1
  510. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-5bdd550ed6386f57.js +0 -1
  511. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-5bdd550ed6386f57.js +0 -1
  512. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-5bdd550ed6386f57.js +0 -1
  513. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-5bdd550ed6386f57.js +0 -1
  514. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-5bdd550ed6386f57.js +0 -1
  515. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-5bdd550ed6386f57.js +0 -1
  516. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-5bdd550ed6386f57.js +0 -1
  517. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-5bdd550ed6386f57.js +0 -1
  518. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-5bdd550ed6386f57.js +0 -1
  519. package/.next/static/chunks/app/api/worktrees/[id]/route-5bdd550ed6386f57.js +0 -1
  520. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-5bdd550ed6386f57.js +0 -1
  521. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-5bdd550ed6386f57.js +0 -1
  522. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-5bdd550ed6386f57.js +0 -1
  523. package/.next/static/chunks/app/api/worktrees/[id]/search/route-5bdd550ed6386f57.js +0 -1
  524. package/.next/static/chunks/app/api/worktrees/[id]/send/route-5bdd550ed6386f57.js +0 -1
  525. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-5bdd550ed6386f57.js +0 -1
  526. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-5bdd550ed6386f57.js +0 -1
  527. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-5bdd550ed6386f57.js +0 -1
  528. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-5bdd550ed6386f57.js +0 -1
  529. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-5bdd550ed6386f57.js +0 -1
  530. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-5bdd550ed6386f57.js +0 -1
  531. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-5bdd550ed6386f57.js +0 -1
  532. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-5bdd550ed6386f57.js +0 -1
  533. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-5bdd550ed6386f57.js +0 -1
  534. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-5bdd550ed6386f57.js +0 -1
  535. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-5bdd550ed6386f57.js +0 -1
  536. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-5bdd550ed6386f57.js +0 -1
  537. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-5bdd550ed6386f57.js +0 -1
  538. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +0 -1
  539. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-5bdd550ed6386f57.js +0 -1
  540. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-5bdd550ed6386f57.js +0 -1
  541. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-5bdd550ed6386f57.js +0 -1
  542. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-5bdd550ed6386f57.js +0 -1
  543. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-5bdd550ed6386f57.js +0 -1
  544. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-5bdd550ed6386f57.js +0 -1
  545. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-5bdd550ed6386f57.js +0 -1
  546. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-5bdd550ed6386f57.js +0 -1
  547. package/.next/static/chunks/app/api/worktrees/route-5bdd550ed6386f57.js +0 -1
  548. package/.next/static/chunks/app/manifest.webmanifest/route-5bdd550ed6386f57.js +0 -1
  549. package/.next/static/chunks/app/proxy/[...path]/route-5bdd550ed6386f57.js +0 -1
  550. package/.next/static/chunks/app/skills/[skillId]/page-6008b904225ebb25.js +0 -1
  551. package/.next/static/chunks/app/worktrees/[id]/layout-5bdd550ed6386f57.js +0 -1
  552. package/.next/static/chunks/app/worktrees/[id]/page-214ee8b97dca856b.js +0 -1
  553. /package/.next/static/{C01FQOE5FCmB3I_GhMa4_ → _AR-TSCnEog5nL9JjjCna}/_buildManifest.js +0 -0
  554. /package/.next/static/{C01FQOE5FCmB3I_GhMa4_ → _AR-TSCnEog5nL9JjjCna}/_ssgManifest.js +0 -0
@@ -16,6 +16,15 @@ import { ApiClient } from './api-client';
16
16
  export declare const VERIFY_POLL_INTERVAL_MS = 5000;
17
17
  /** Built-in gate id; mirrors WORK_EVIDENCE_GATE_ID in lib/verification/gate-runner.ts. */
18
18
  export declare const WORK_EVIDENCE_GATE_ID = "work-evidence";
19
+ /**
20
+ * Lines of a failing gate's log echoed to stderr before the rest becomes a
21
+ * count (#1683).
22
+ *
23
+ * log_tail is byte-capped only when stored (options.maxLogTailBytes, default
24
+ * 8KB but configurable up to 1MB), so echoing it whole lets one misconfigured
25
+ * gate flood the terminal and scroll the GATE verdict lines out of sight.
26
+ */
27
+ export declare const MAX_PRINTED_LOG_TAIL_LINES = 40;
19
28
  export interface VerificationRequest {
20
29
  worktreeId: string;
21
30
  /** 'manual' for the verify command, 'wait' when chained after wait. */
@@ -1 +1 @@
1
- {"version":3,"file":"verify-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/verify-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAEV,qBAAqB,EACrB,mBAAmB,EAGpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAiC,MAAM,cAAc,CAAC;AAExE,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACnC,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,mBAAmB,CAAC;CAC3B;AAUD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAW1E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAOnF;AAqED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAyD9B"}
1
+ {"version":3,"file":"verify-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/verify-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAEV,qBAAqB,EACrB,mBAAmB,EAGpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAiC,MAAM,cAAc,CAAC;AAExE,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACnC,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,mBAAmB,CAAC;CAC3B;AAUD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAW1E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAOnF;AAsFD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAyD9B"}
@@ -12,7 +12,7 @@
12
12
  * @module cli/utils/verify-runner
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.WORK_EVIDENCE_GATE_ID = exports.VERIFY_POLL_INTERVAL_MS = void 0;
15
+ exports.MAX_PRINTED_LOG_TAIL_LINES = exports.WORK_EVIDENCE_GATE_ID = exports.VERIFY_POLL_INTERVAL_MS = void 0;
16
16
  exports.exitCodeForRunStatus = exitCodeForRunStatus;
17
17
  exports.parseGateIds = parseGateIds;
18
18
  exports.runVerification = runVerification;
@@ -22,6 +22,15 @@ const api_client_1 = require("./api-client");
22
22
  exports.VERIFY_POLL_INTERVAL_MS = 5000;
23
23
  /** Built-in gate id; mirrors WORK_EVIDENCE_GATE_ID in lib/verification/gate-runner.ts. */
24
24
  exports.WORK_EVIDENCE_GATE_ID = 'work-evidence';
25
+ /**
26
+ * Lines of a failing gate's log echoed to stderr before the rest becomes a
27
+ * count (#1683).
28
+ *
29
+ * log_tail is byte-capped only when stored (options.maxLogTailBytes, default
30
+ * 8KB but configurable up to 1MB), so echoing it whole lets one misconfigured
31
+ * gate flood the terminal and scroll the GATE verdict lines out of sight.
32
+ */
33
+ exports.MAX_PRINTED_LOG_TAIL_LINES = 40;
25
34
  const GATE_LABELS = {
26
35
  passed: 'PASS',
27
36
  failed: 'FAIL',
@@ -86,6 +95,23 @@ function formatGateLine(gate) {
86
95
  const detail = formatDetail(gate);
87
96
  return detail ? `GATE ${gate.gateId} ${label} (${detail})` : `GATE ${gate.gateId} ${label}`;
88
97
  }
98
+ /**
99
+ * Cap a failing gate's log for display, keeping the LAST lines: every producer
100
+ * puts its conclusion there — a failing suite ends with its summary, the scope
101
+ * gate ends with its violation list and guidance. The omission marker leads so
102
+ * the reader knows lines are missing before reading, and it names `verify show`
103
+ * because that is where the full stored log lives.
104
+ */
105
+ function formatLogTailForDisplay(gate) {
106
+ const lines = (gate.logTail ?? '').replace(/\n+$/, '').split('\n');
107
+ if (lines.length <= exports.MAX_PRINTED_LOG_TAIL_LINES)
108
+ return lines.join('\n');
109
+ const omitted = lines.length - exports.MAX_PRINTED_LOG_TAIL_LINES;
110
+ return [
111
+ `... (+${omitted} more lines; run \`commandmate verify show ${gate.runId}\` for the full log)`,
112
+ ...lines.slice(-exports.MAX_PRINTED_LOG_TAIL_LINES),
113
+ ].join('\n');
114
+ }
89
115
  /**
90
116
  * Print each gate exactly once, when it reaches a terminal status.
91
117
  * @param reported - Gate row ids already printed; mutated in place.
@@ -99,7 +125,7 @@ function reportGates(gates, reported) {
99
125
  // A failing gate without its log forces the caller back to the API to learn
100
126
  // anything actionable, which defeats the point of a CLI verdict.
101
127
  if (gate.status !== 'passed' && gate.logTail) {
102
- console.error(gate.logTail.replace(/\n+$/, ''));
128
+ console.error(formatLogTailForDisplay(gate));
103
129
  }
104
130
  }
105
131
  }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * History Display Configuration (Issue #701)
3
+ *
4
+ * Single Source of Truth for the history display limit options used by:
5
+ * - GET /api/worktrees/:id/messages (upper-bound validation)
6
+ * - HistoryPane selector UI (selectable options)
7
+ * - WorktreeDetailRefactored state (persisted to localStorage)
8
+ *
9
+ * Design decisions:
10
+ * - MAX_MESSAGES_LIMIT is derived from HISTORY_DISPLAY_LIMIT_OPTIONS (no duplication).
11
+ * - DEFAULT_MESSAGES_LIMIT (50) matches the historical default before this issue.
12
+ * - Storage key uses the `commandmate:` namespace, matching other keys
13
+ * (e.g. `commandmate:showArchived`).
14
+ */
15
+ /**
16
+ * Selectable history display limit options (ascending).
17
+ * The first entry is the historical default; the last entry is the maximum.
18
+ *
19
+ * Issue #1123: the 250 ceiling was a performance mitigation for the previously
20
+ * flat-rendered HistoryPane. Now that the list is virtualized (render cost is
21
+ * O(visible rows), not O(total)), the ceiling is relaxed to 1000. The API still
22
+ * bounds the *fetch* by the maximum option (data volume); server-side paging is
23
+ * tracked separately.
24
+ */
25
+ export declare const HISTORY_DISPLAY_LIMIT_OPTIONS: readonly [50, 100, 150, 200, 250, 500, 1000];
26
+ /**
27
+ * Union type representing any selectable history display limit.
28
+ */
29
+ export type HistoryDisplayLimit = (typeof HISTORY_DISPLAY_LIMIT_OPTIONS)[number];
30
+ /**
31
+ * Upper bound enforced by the API, derived from the maximum option.
32
+ *
33
+ * Typed as `HistoryDisplayLimit` (not a brittle `as 250` literal) so that
34
+ * extending `HISTORY_DISPLAY_LIMIT_OPTIONS` does not require touching this line.
35
+ */
36
+ export declare const MAX_MESSAGES_LIMIT: HistoryDisplayLimit;
37
+ /**
38
+ * Default history display limit (used when no localStorage value is present).
39
+ */
40
+ export declare const DEFAULT_MESSAGES_LIMIT: HistoryDisplayLimit;
41
+ /**
42
+ * localStorage key used to persist the user-selected history display limit.
43
+ */
44
+ export declare const HISTORY_DISPLAY_LIMIT_STORAGE_KEY = "commandmate:historyDisplayLimit";
45
+ /**
46
+ * Type guard: returns true if `value` is one of the allowed limit options.
47
+ *
48
+ * Used when reading from localStorage (which may contain stale/corrupted data)
49
+ * to safely narrow `number` to `HistoryDisplayLimit`.
50
+ */
51
+ export declare function isHistoryDisplayLimit(value: number): value is HistoryDisplayLimit;
52
+ /**
53
+ * localStorage key used to persist the HistoryPane "User only" filter toggle
54
+ * (Issue #725).
55
+ *
56
+ * Value representation: `'true'` / `'false'` (string), matching the existing
57
+ * `commandmate:showArchived` convention. Any other value (including legacy
58
+ * `'1'`/`'0'` or missing) is treated as `false` (safe-off fallback).
59
+ */
60
+ export declare const HISTORY_USER_ONLY_STORAGE_KEY = "commandmate:historyUserOnly";
61
+ //# sourceMappingURL=history-display-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-display-config.d.ts","sourceRoot":"","sources":["../../src/config/history-display-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,8CAA+C,CAAC;AAE1F;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,mBAET,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,mBAAwB,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,iCAAiC,oCAAoC,CAAC;AAEnF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,mBAAmB,CAEjF;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,gCAAgC,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * History Display Configuration (Issue #701)
4
+ *
5
+ * Single Source of Truth for the history display limit options used by:
6
+ * - GET /api/worktrees/:id/messages (upper-bound validation)
7
+ * - HistoryPane selector UI (selectable options)
8
+ * - WorktreeDetailRefactored state (persisted to localStorage)
9
+ *
10
+ * Design decisions:
11
+ * - MAX_MESSAGES_LIMIT is derived from HISTORY_DISPLAY_LIMIT_OPTIONS (no duplication).
12
+ * - DEFAULT_MESSAGES_LIMIT (50) matches the historical default before this issue.
13
+ * - Storage key uses the `commandmate:` namespace, matching other keys
14
+ * (e.g. `commandmate:showArchived`).
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.HISTORY_USER_ONLY_STORAGE_KEY = exports.HISTORY_DISPLAY_LIMIT_STORAGE_KEY = exports.DEFAULT_MESSAGES_LIMIT = exports.MAX_MESSAGES_LIMIT = exports.HISTORY_DISPLAY_LIMIT_OPTIONS = void 0;
18
+ exports.isHistoryDisplayLimit = isHistoryDisplayLimit;
19
+ /**
20
+ * Selectable history display limit options (ascending).
21
+ * The first entry is the historical default; the last entry is the maximum.
22
+ *
23
+ * Issue #1123: the 250 ceiling was a performance mitigation for the previously
24
+ * flat-rendered HistoryPane. Now that the list is virtualized (render cost is
25
+ * O(visible rows), not O(total)), the ceiling is relaxed to 1000. The API still
26
+ * bounds the *fetch* by the maximum option (data volume); server-side paging is
27
+ * tracked separately.
28
+ */
29
+ exports.HISTORY_DISPLAY_LIMIT_OPTIONS = [50, 100, 150, 200, 250, 500, 1000];
30
+ /**
31
+ * Upper bound enforced by the API, derived from the maximum option.
32
+ *
33
+ * Typed as `HistoryDisplayLimit` (not a brittle `as 250` literal) so that
34
+ * extending `HISTORY_DISPLAY_LIMIT_OPTIONS` does not require touching this line.
35
+ */
36
+ exports.MAX_MESSAGES_LIMIT = Math.max(...exports.HISTORY_DISPLAY_LIMIT_OPTIONS);
37
+ /**
38
+ * Default history display limit (used when no localStorage value is present).
39
+ */
40
+ exports.DEFAULT_MESSAGES_LIMIT = 50;
41
+ /**
42
+ * localStorage key used to persist the user-selected history display limit.
43
+ */
44
+ exports.HISTORY_DISPLAY_LIMIT_STORAGE_KEY = 'commandmate:historyDisplayLimit';
45
+ /**
46
+ * Type guard: returns true if `value` is one of the allowed limit options.
47
+ *
48
+ * Used when reading from localStorage (which may contain stale/corrupted data)
49
+ * to safely narrow `number` to `HistoryDisplayLimit`.
50
+ */
51
+ function isHistoryDisplayLimit(value) {
52
+ return exports.HISTORY_DISPLAY_LIMIT_OPTIONS.includes(value);
53
+ }
54
+ /**
55
+ * localStorage key used to persist the HistoryPane "User only" filter toggle
56
+ * (Issue #725).
57
+ *
58
+ * Value representation: `'true'` / `'false'` (string), matching the existing
59
+ * `commandmate:showArchived` convention. Any other value (including legacy
60
+ * `'1'`/`'0'` or missing) is treated as `false` (safe-off fallback).
61
+ */
62
+ exports.HISTORY_USER_ONLY_STORAGE_KEY = 'commandmate:historyUserOnly';
@@ -62,8 +62,10 @@ const cli_session_1 = require("./session/cli-session");
62
62
  const prompt_detector_1 = require("./detection/prompt-detector");
63
63
  const auto_yes_resolver_1 = require("./polling/auto-yes-resolver");
64
64
  const auto_yes_policy_1 = require("./polling/auto-yes-policy");
65
+ const auto_yes_suppression_state_1 = require("./polling/auto-yes-suppression-state");
65
66
  const task_transition_service_1 = require("./tasks/task-transition-service");
66
67
  const db_instance_1 = require("./db/db-instance");
68
+ const chat_db_1 = require("./db/chat-db");
67
69
  const prompt_answer_sender_1 = require("./prompt-answer-sender");
68
70
  const manager_1 = require("./cli-tools/manager");
69
71
  const cli_patterns_1 = require("./detection/cli-patterns");
@@ -303,6 +305,15 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
303
305
  const policy = (0, auto_yes_policy_1.getSessionAutoYesPolicy)(worktreeId, cliToolId, instanceId);
304
306
  const resolution = (0, auto_yes_resolver_1.resolveAutoAnswerWithPolicy)(promptDetection.promptData, policy);
305
307
  if (resolution.suppressedBy) {
308
+ // Issue #1684: the log line alone leaves a CLI-driven pipeline blind to
309
+ // why its worker stalled. Record the suppression so buildCurrentOutput
310
+ // can publish it (`autoYes.lastSuppression` in capture --json).
311
+ (0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, cliToolId, instanceId, {
312
+ reason: resolution.suppressedBy,
313
+ mode: policy?.mode ?? null,
314
+ promptType: promptDetection.promptData.type,
315
+ pattern: resolution.pattern,
316
+ });
306
317
  logger.warn('poller:auto-yes-suppressed-by-policy', {
307
318
  worktreeId,
308
319
  cliToolId,
@@ -346,6 +357,44 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
346
357
  // Undefined means the primary instance, which the task lookup identifies
347
358
  // by the tool id itself (see getActiveTaskForInstance).
348
359
  instanceId ?? cliToolId, 'prompt_answered_auto', { promptType: promptDetection.promptData.type });
360
+ // Issue #1685: persist question/options/answer to chat history so the audit
361
+ // trail survives even when the answer landed inside the response poller's
362
+ // interval and the prompt was never saved as a pending message. Must never
363
+ // fail the answer that already reached tmux.
364
+ let auditRecord = null;
365
+ try {
366
+ auditRecord = (0, chat_db_1.recordAnsweredPrompt)((0, db_instance_1.getDbInstance)(), {
367
+ worktreeId,
368
+ cliToolId,
369
+ instanceId: instanceId ?? cliToolId,
370
+ promptData: promptDetection.promptData,
371
+ answer,
372
+ answeredBy: 'auto',
373
+ content: promptDetection.rawContent || promptDetection.cleanContent,
374
+ });
375
+ }
376
+ catch (recordError) {
377
+ logger.warn('poller:prompt-audit-record-failed', {
378
+ worktreeId,
379
+ cliToolId,
380
+ instanceId,
381
+ error: (0, errors_1.getErrorMessage)(recordError),
382
+ });
383
+ }
384
+ if (auditRecord) {
385
+ const record = auditRecord;
386
+ // Fire-and-forget on purpose: the WS push is advisory, and awaiting a
387
+ // cold ws-server module load inside the poll path would make its
388
+ // completion timing nondeterministic for a side effect it doesn't
389
+ // depend on (the audit row is already committed above).
390
+ void Promise.resolve().then(() => __importStar(require('../lib/ws-server'))).then(({ broadcastMessage }) => {
391
+ broadcastMessage(record.created ? 'message' : 'message_updated', {
392
+ worktreeId,
393
+ message: record.message,
394
+ });
395
+ })
396
+ .catch(() => { });
397
+ }
349
398
  // Dynamic imports avoid a module cycle through terminal-broadcast ->
350
399
  // current-output-builder -> auto-yes-manager -> this poller.
351
400
  const [{ startPolling: startResponsePolling }, { broadcastTerminalSnapshotAfterInteraction }] = await Promise.all([
@@ -24,6 +24,7 @@ exports.getMessagesByDateRange = getMessagesByDateRange;
24
24
  exports.getMessageById = getMessageById;
25
25
  exports.updatePromptData = updatePromptData;
26
26
  exports.markPendingPromptsAsAnswered = markPendingPromptsAsAnswered;
27
+ exports.recordAnsweredPrompt = recordAnsweredPrompt;
27
28
  const crypto_1 = require("crypto");
28
29
  const logger_1 = require("../../lib/logger");
29
30
  const logger = (0, logger_1.createLogger)('chat-db');
@@ -123,7 +124,7 @@ function updateMessageContent(db, messageId, content, options) {
123
124
  * Get messages for a worktree, optionally filtered by CLI tool
124
125
  */
125
126
  function getMessages(db, worktreeId, options = {}) {
126
- const { before, limit = 50, cliToolId, instanceId, includeArchived = false, limitUnit = 'messages' } = options;
127
+ const { before, limit = 50, cliToolId, instanceId, includeArchived = false, messageType, limitUnit = 'messages' } = options;
127
128
  // Build the shared scope clause (worktree + before cursor + archived + instance/cli
128
129
  // filter) and its bound params. Used for both the message-unit and pair-unit paths
129
130
  // so their filtering stays identical.
@@ -144,6 +145,11 @@ function getMessages(db, worktreeId, options = {}) {
144
145
  clause += ` AND cli_tool_id = ?`;
145
146
  params.push(cliToolId);
146
147
  }
148
+ // Issue #1685: message-type filter (prompt audit listing)
149
+ if (messageType) {
150
+ clause += ` AND message_type = ?`;
151
+ params.push(messageType);
152
+ }
147
153
  return { clause, params };
148
154
  };
149
155
  const SELECT_COLS = `SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id, instance_id, archived`;
@@ -425,6 +431,10 @@ function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
425
431
  promptData.status = 'answered';
426
432
  promptData.answer = '(answered via terminal)';
427
433
  promptData.answeredAt = new Date().toISOString();
434
+ // Issue #1685: attribution for the audit trail. This sweep only sees
435
+ // prompts nothing else claimed, so all that is known is that the agent
436
+ // moved on — i.e. someone acted in the terminal.
437
+ promptData.answeredBy = 'terminal';
428
438
  updateStmt.run(JSON.stringify(promptData), row.id);
429
439
  updatedCount++;
430
440
  }
@@ -434,3 +444,67 @@ function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
434
444
  }
435
445
  return updatedCount;
436
446
  }
447
+ /**
448
+ * Persist "this prompt was just answered" to chat history (Issue #1685).
449
+ *
450
+ * The answer paths (Auto-Yes poller, /prompt-response) act on what is on
451
+ * screen, not on a stored message, so the prompt they resolve may or may not
452
+ * have been saved by the response poller yet:
453
+ *
454
+ * - If a pending prompt row exists for the instance, it is marked answered in
455
+ * place — preferring the row whose question matches the screen, falling back
456
+ * to the newest pending row (the two capture paths can clean text slightly
457
+ * differently).
458
+ * - If none exists (the answer landed inside the response poller's interval —
459
+ * the exact case Issue #1685 is about), a new already-answered prompt row is
460
+ * created so the question/options/answer survive for the audit trail.
461
+ */
462
+ function recordAnsweredPrompt(db, params) {
463
+ const { worktreeId, cliToolId, promptData, answer, answeredBy } = params;
464
+ const resolvedInstanceId = params.instanceId ?? cliToolId;
465
+ const rows = db
466
+ .prepare(`
467
+ SELECT id, prompt_data
468
+ FROM chat_messages
469
+ WHERE worktree_id = ?
470
+ AND instance_id = ?
471
+ AND message_type = 'prompt'
472
+ AND json_extract(prompt_data, '$.status') = 'pending'
473
+ ${exports.ACTIVE_FILTER}
474
+ ORDER BY timestamp DESC
475
+ `)
476
+ .all(worktreeId, resolvedInstanceId);
477
+ let target = null;
478
+ for (const row of rows) {
479
+ try {
480
+ const parsed = JSON.parse(row.prompt_data);
481
+ if (!target) {
482
+ target = { id: row.id, parsed };
483
+ }
484
+ if (parsed.question === promptData.question) {
485
+ target = { id: row.id, parsed };
486
+ break;
487
+ }
488
+ }
489
+ catch {
490
+ // Skip if prompt_data is invalid JSON
491
+ }
492
+ }
493
+ const answeredAt = new Date().toISOString();
494
+ if (target) {
495
+ const updated = { ...target.parsed, status: 'answered', answer, answeredAt, answeredBy };
496
+ updatePromptData(db, target.id, updated);
497
+ return { message: getMessageById(db, target.id), created: false };
498
+ }
499
+ const message = createMessage(db, {
500
+ worktreeId,
501
+ role: 'assistant',
502
+ content: params.content || promptData.question || '[prompt]',
503
+ messageType: 'prompt',
504
+ promptData: { ...promptData, status: 'answered', answer, answeredAt, answeredBy },
505
+ timestamp: new Date(),
506
+ cliToolId,
507
+ instanceId: resolvedInstanceId,
508
+ });
509
+ return { message, created: true };
510
+ }
@@ -10,9 +10,9 @@
10
10
  * @internal functions from being unintentionally exposed.
11
11
  */
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.clearInProgressMessageId = exports.setInProgressMessageId = exports.updateSessionState = exports.getSessionState = exports.getMessagesByDateRange = exports.ACTIVE_FILTER = exports.markPendingPromptsAsAnswered = exports.updatePromptData = exports.getMessageById = exports.recomputeLastUserMessage = exports.clearLastUserMessage = exports.updateLastUserMessage = exports.deleteMessagesByInstance = exports.deleteMessagesByCliTool = exports.deleteMessageById = exports.deleteAllMessages = exports.getLastMessage = exports.getLastUserMessage = exports.getMessages = exports.updateMessageContent = exports.createMessage = exports.getLastAssistantMessageAt = exports.getAliasedWorktreeIds = exports.getAllWorktreeAliases = exports.getWorktreeAliases = exports.resolveWorktreeIdWithAlias = exports.recordWorktreeAlias = exports.deleteWorktreesByIds = exports.deleteRepositoryWorktrees = exports.migrateWorktreeIdPreservingChildren = exports.getAllWorktreePathIds = exports.getAllWorktreeIds = exports.getWorktreesByRepository = exports.getWorktreeIdsByRepository = exports.getInitialBranch = exports.saveInitialBranch = exports.updateVibeLocalContextWindow = exports.updateVibeLocalModel = exports.updateSelectedAgents = exports.updateCliToolId = exports.updateStatus = exports.updateFavorite = exports.updateLastViewedAt = exports.updateWorktreeLink = exports.updateWorktreeDescription = exports.upsertWorktree = exports.getWorktreeById = exports.getRepositories = exports.getWorktrees = exports.initDatabase = void 0;
14
- exports.updateAssistantMessageStatus = exports.createAssistantMessage = exports.updateAssistantConversation = exports.createAssistantConversation = exports.getAssistantConversationByRepositoryAndCliTool = exports.getAssistantConversationById = exports.updateDailyReportContent = exports.saveDailyReport = exports.getDailyReport = exports.recoverStuckSendingTimers = exports.clearTimerHistory = exports.cleanupOldTimers = exports.getPendingTimerCountByWorktree = exports.cancelTimersByWorktree = exports.cancelTimer = exports.updateTimerStatus = exports.getPendingTimers = exports.getTimerById = exports.getTimersByWorktree = exports.createTimer = exports.WORKTREE_TODO_STATUSES = exports.isWorktreeTodoStatus = exports.reorderWorktreeTodos = exports.deleteWorktreeTodo = exports.updateWorktreeTodo = exports.createWorktreeTodo = exports.getWorktreeTodoById = exports.getTodosByWorktreeId = exports.deleteTodo = exports.updateTodo = exports.createTodo = exports.getTodoById = exports.getAllTodos = exports.getTodosByRepositoryId = exports.MemoDbError = exports.reorderMemos = exports.deleteMemo = exports.updateMemo = exports.createMemo = exports.getMemoById = exports.getMemosByWorktreeId = exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = exports.removeAgentInstance = exports.addAgentInstance = exports.setAgentInstances = exports.countAgentInstances = exports.getAgentInstance = exports.getAgentInstances = exports.deleteSessionState = void 0;
15
- exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = void 0;
13
+ exports.setInProgressMessageId = exports.updateSessionState = exports.getSessionState = exports.getMessagesByDateRange = exports.ACTIVE_FILTER = exports.recordAnsweredPrompt = exports.markPendingPromptsAsAnswered = exports.updatePromptData = exports.getMessageById = exports.recomputeLastUserMessage = exports.clearLastUserMessage = exports.updateLastUserMessage = exports.deleteMessagesByInstance = exports.deleteMessagesByCliTool = exports.deleteMessageById = exports.deleteAllMessages = exports.getLastMessage = exports.getLastUserMessage = exports.getMessages = exports.updateMessageContent = exports.createMessage = exports.getLastAssistantMessageAt = exports.getAliasedWorktreeIds = exports.getAllWorktreeAliases = exports.getWorktreeAliases = exports.resolveWorktreeIdWithAlias = exports.recordWorktreeAlias = exports.deleteWorktreesByIds = exports.deleteRepositoryWorktrees = exports.migrateWorktreeIdPreservingChildren = exports.getAllWorktreePathIds = exports.getAllWorktreeIds = exports.getWorktreesByRepository = exports.getWorktreeIdsByRepository = exports.getInitialBranch = exports.saveInitialBranch = exports.updateVibeLocalContextWindow = exports.updateVibeLocalModel = exports.updateSelectedAgents = exports.updateCliToolId = exports.updateStatus = exports.updateFavorite = exports.updateLastViewedAt = exports.updateWorktreeLink = exports.updateWorktreeDescription = exports.upsertWorktree = exports.getWorktreeById = exports.getRepositories = exports.getWorktrees = exports.initDatabase = void 0;
14
+ exports.createAssistantMessage = exports.updateAssistantConversation = exports.createAssistantConversation = exports.getAssistantConversationByRepositoryAndCliTool = exports.getAssistantConversationById = exports.updateDailyReportContent = exports.saveDailyReport = exports.getDailyReport = exports.recoverStuckSendingTimers = exports.clearTimerHistory = exports.cleanupOldTimers = exports.getPendingTimerCountByWorktree = exports.cancelTimersByWorktree = exports.cancelTimer = exports.updateTimerStatus = exports.getPendingTimers = exports.getTimerById = exports.getTimersByWorktree = exports.createTimer = exports.WORKTREE_TODO_STATUSES = exports.isWorktreeTodoStatus = exports.reorderWorktreeTodos = exports.deleteWorktreeTodo = exports.updateWorktreeTodo = exports.createWorktreeTodo = exports.getWorktreeTodoById = exports.getTodosByWorktreeId = exports.deleteTodo = exports.updateTodo = exports.createTodo = exports.getTodoById = exports.getAllTodos = exports.getTodosByRepositoryId = exports.MemoDbError = exports.reorderMemos = exports.deleteMemo = exports.updateMemo = exports.createMemo = exports.getMemoById = exports.getMemosByWorktreeId = exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = exports.removeAgentInstance = exports.addAgentInstance = exports.setAgentInstances = exports.countAgentInstances = exports.getAgentInstance = exports.getAgentInstances = exports.deleteSessionState = exports.clearInProgressMessageId = void 0;
15
+ exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = exports.updateAssistantMessageStatus = void 0;
16
16
  // init-db
17
17
  var init_db_1 = require("./init-db");
18
18
  Object.defineProperty(exports, "initDatabase", { enumerable: true, get: function () { return init_db_1.initDatabase; } });
@@ -65,6 +65,7 @@ Object.defineProperty(exports, "recomputeLastUserMessage", { enumerable: true, g
65
65
  Object.defineProperty(exports, "getMessageById", { enumerable: true, get: function () { return chat_db_1.getMessageById; } });
66
66
  Object.defineProperty(exports, "updatePromptData", { enumerable: true, get: function () { return chat_db_1.updatePromptData; } });
67
67
  Object.defineProperty(exports, "markPendingPromptsAsAnswered", { enumerable: true, get: function () { return chat_db_1.markPendingPromptsAsAnswered; } });
68
+ Object.defineProperty(exports, "recordAnsweredPrompt", { enumerable: true, get: function () { return chat_db_1.recordAnsweredPrompt; } });
68
69
  Object.defineProperty(exports, "ACTIVE_FILTER", { enumerable: true, get: function () { return chat_db_1.ACTIVE_FILTER; } });
69
70
  Object.defineProperty(exports, "getMessagesByDateRange", { enumerable: true, get: function () { return chat_db_1.getMessagesByDateRange; } });
70
71
  // session-db
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * In-memory record of the last Auto-Yes answer withheld by a contract policy
4
+ * (Issue #1684).
5
+ *
6
+ * Until now a policy suppression (Issue #1547) was visible only in the server
7
+ * log (`poller:auto-yes-suppressed-by-policy`), so an unattended pipeline that
8
+ * stalled on a suppressed prompt looked identical to one that simply had no
9
+ * answer. This module keeps the last suppression per session so
10
+ * `buildCurrentOutput` can publish it and `commandmate capture --json` can show
11
+ * *why* the worker is waiting.
12
+ *
13
+ * Exposure only: nothing reads this to make a decision. The poller keeps
14
+ * re-evaluating a suppressed prompt every poll (the duplicate guard only
15
+ * remembers *answered* prompts), so while the prompt stays on screen the record
16
+ * is refreshed and `at` stays current; consumers combine it with
17
+ * `isPromptWaiting` to tell an active suppression from a historical one.
18
+ *
19
+ * In-memory and not in SQLite for the same reason `agent-event-state` is: the
20
+ * record describes a prompt on a live tmux session, and a session does not
21
+ * survive a server restart for the record to still be about.
22
+ *
23
+ * @module lib/polling/auto-yes-suppression-state
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.recordPolicySuppression = recordPolicySuppression;
27
+ exports.getLastPolicySuppression = getLastPolicySuppression;
28
+ exports.clearPolicySuppressions = clearPolicySuppressions;
29
+ const auto_yes_state_1 = require("../../lib/auto-yes-state");
30
+ /** compositeKey -> the most recent policy suppression for that session. */
31
+ const lastPolicySuppressions = new Map();
32
+ /**
33
+ * Record that the policy withheld an answer for `instanceId`'s current prompt.
34
+ *
35
+ * @param at - Epoch ms; defaults to now. Overridable so tests are deterministic.
36
+ */
37
+ function recordPolicySuppression(worktreeId, cliToolId, instanceId, suppression, at = Date.now()) {
38
+ lastPolicySuppressions.set((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), {
39
+ ...suppression,
40
+ at,
41
+ });
42
+ }
43
+ /**
44
+ * @returns The last policy suppression for this session, or null when the
45
+ * policy has never withheld an answer — the ordinary case for a session
46
+ * running without a contract.
47
+ */
48
+ function getLastPolicySuppression(worktreeId, cliToolId, instanceId) {
49
+ return lastPolicySuppressions.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
50
+ }
51
+ /** Drop every recorded suppression. Test seam. */
52
+ function clearPolicySuppressions() {
53
+ lastPolicySuppressions.clear();
54
+ }
@@ -14,6 +14,7 @@ const manager_1 = require("../../lib/cli-tools/manager");
14
14
  const cli_session_1 = require("../../lib/session/cli-session");
15
15
  const status_detector_1 = require("../../lib/detection/status-detector");
16
16
  const auto_yes_manager_1 = require("../../lib/polling/auto-yes-manager");
17
+ const auto_yes_suppression_state_1 = require("../../lib/polling/auto-yes-suppression-state");
17
18
  const status_capture_config_1 = require("../../config/status-capture-config");
18
19
  const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
19
20
  const agent_event_state_1 = require("../../lib/session/agent-event-state");
@@ -101,6 +102,7 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
101
102
  enabled: autoYesState?.enabled ?? false,
102
103
  expiresAt: autoYesState?.enabled ? autoYesState.expiresAt : null,
103
104
  stopReason: autoYesState?.stopReason,
105
+ lastSuppression: (0, auto_yes_suppression_state_1.getLastPolicySuppression)(worktreeId, cliToolId, instanceId),
104
106
  },
105
107
  isSelectionListActive,
106
108
  isPagerActive,
@@ -47,6 +47,8 @@ exports.inspectSkillDestination = inspectSkillDestination;
47
47
  exports.hasCommittedSkillPayload = hasCommittedSkillPayload;
48
48
  exports.writeSkillPayloadFile = writeSkillPayloadFile;
49
49
  exports.applySkillInstall = applySkillInstall;
50
+ exports.directoriesForSkillPayload = directoriesForSkillPayload;
51
+ exports.stageSkillRootPayload = stageSkillRootPayload;
50
52
  exports.completeSecondarySkillInstallRoots = completeSecondarySkillInstallRoots;
51
53
  exports.cleanupSkillInstallStaging = cleanupSkillInstallStaging;
52
54
  const fs_1 = require("fs");
@@ -397,7 +399,7 @@ function applySkillInstall(input) {
397
399
  }
398
400
  return { relativePath: file.path, bytes, executable: file.executable };
399
401
  });
400
- const directories = directoriesFor(input.snapshot.files.map((f) => f.path), input.snapshot.directories);
402
+ const directories = directoriesForSkillPayload(input.snapshot.files.map((f) => f.path), input.snapshot.directories);
401
403
  // Every destination is proven safe and absent *before* the primary commits, so
402
404
  // a secondary that is already blocked cannot leave a committed primary behind.
403
405
  for (const prefix of rootPrefixes) {
@@ -463,7 +465,7 @@ function applySkillInstall(input) {
463
465
  };
464
466
  }
465
467
  /** Sorted set of directories a payload implies, plus any the package declared. */
466
- function directoriesFor(filePaths, declared = []) {
468
+ function directoriesForSkillPayload(filePaths, declared = []) {
467
469
  const directories = new Set(declared);
468
470
  for (const filePath of filePaths) {
469
471
  const parents = filePath.split('/').slice(0, -1);
@@ -476,30 +478,29 @@ function directoriesFor(filePaths, declared = []) {
476
478
  return [...directories].sort();
477
479
  }
478
480
  /**
479
- * Stage the verified payload into one root and atomically publish it (#1460).
481
+ * Stage the verified payload for one root without publishing it (#1244).
480
482
  *
481
- * The single-root commit #1235 built, lifted to take the root prefix as a
482
- * parameter: staging lives under *that* root's reserved namespace so the rename
483
- * stays on one filesystem, and every check ancestor lstat walk, exclusive
484
- * no-follow writes, tree-hash gate, destination-absent, same-filesystem is
485
- * applied per root. Throws {@link SkillInstallError} on any failure, having
486
- * removed its own staging; the destination is untouched unless the rename ran.
483
+ * The staging half of {@link stageAndCommitSkillRoot}, exported so update can
484
+ * reuse the exact write path exclusive no-follow writes, tree-hash gate,
485
+ * same-filesystem check and supply its own rename sequence. On any failure the
486
+ * staging directory is removed and {@link SkillInstallError} is thrown; the
487
+ * destination is never touched. The caller owns the returned directory: it must
488
+ * either rename it into place or remove it.
489
+ *
490
+ * @internal Shared between install and update apply; not a public API.
487
491
  */
488
- function stageAndCommitSkillRoot(input) {
492
+ function stageSkillRootPayload(input) {
493
+ if (!exports.SKILL_INSTALL_OPERATION_ID_PATTERN.test(input.stagingName)) {
494
+ fail(exports.SkillInstallErrorCode.STAGING_IO, { reason: 'staging-name' });
495
+ }
489
496
  const installRootAbs = resolveSkillInstallTargetFor(input.worktreePath, input.rootPrefix, input.skillId);
490
497
  assertAncestorsAreRealDirectories(input.worktreeRealPath, input.worktreePath, input.rootPrefix);
491
- const destinationBefore = inspectSkillDestination(installRootAbs);
492
- if (destinationBefore.present) {
493
- fail(destinationBefore.managed
494
- ? exports.SkillInstallErrorCode.DESTINATION_EXISTS
495
- : exports.SkillInstallErrorCode.DESTINATION_UNMANAGED, destinationBefore.version ? { version: destinationBefore.version } : undefined);
496
- }
497
498
  const stagingRoot = (0, operation_store_1.getSkillInstallStagingRoot)(input.worktreePath, input.rootPrefix);
498
499
  makeDirectory(path_1.default.dirname(stagingRoot), 0o755, true);
499
500
  makeDirectory(stagingRoot, exports.SKILL_INSTALL_DIR_MODE, true);
500
501
  // Not recursive: a staging directory that already exists means another
501
- // operation is using this ID, and silently adopting it would merge two writes.
502
- const stagingDir = path_1.default.join(stagingRoot, input.operationId);
502
+ // operation is using this name, and silently adopting it would merge two writes.
503
+ const stagingDir = path_1.default.join(stagingRoot, input.stagingName);
503
504
  makeDirectory(stagingDir, exports.SKILL_INSTALL_DIR_MODE, false);
504
505
  try {
505
506
  for (const directory of input.directories) {
@@ -520,6 +521,45 @@ function stageAndCommitSkillRoot(input) {
520
521
  fail(exports.SkillInstallErrorCode.PAYLOAD_MISMATCH, { reason: 'tree-hash' });
521
522
  }
522
523
  assertSameFilesystem(stagingDir, path_1.default.dirname(installRootAbs));
524
+ }
525
+ catch (error) {
526
+ (0, fs_1.rmSync)(stagingDir, { recursive: true, force: true });
527
+ pruneStagingRoot(stagingRoot);
528
+ throw error;
529
+ }
530
+ return { stagingDir, stagingRoot, installRootAbs };
531
+ }
532
+ /**
533
+ * Stage the verified payload into one root and atomically publish it (#1460).
534
+ *
535
+ * The single-root commit #1235 built, lifted to take the root prefix as a
536
+ * parameter: staging lives under *that* root's reserved namespace so the rename
537
+ * stays on one filesystem, and every check — ancestor lstat walk, exclusive
538
+ * no-follow writes, tree-hash gate, destination-absent, same-filesystem — is
539
+ * applied per root. Throws {@link SkillInstallError} on any failure, having
540
+ * removed its own staging; the destination is untouched unless the rename ran.
541
+ */
542
+ function stageAndCommitSkillRoot(input) {
543
+ const installRootAbs = resolveSkillInstallTargetFor(input.worktreePath, input.rootPrefix, input.skillId);
544
+ assertAncestorsAreRealDirectories(input.worktreeRealPath, input.worktreePath, input.rootPrefix);
545
+ const destinationBefore = inspectSkillDestination(installRootAbs);
546
+ if (destinationBefore.present) {
547
+ fail(destinationBefore.managed
548
+ ? exports.SkillInstallErrorCode.DESTINATION_EXISTS
549
+ : exports.SkillInstallErrorCode.DESTINATION_UNMANAGED, destinationBefore.version ? { version: destinationBefore.version } : undefined);
550
+ }
551
+ const staged = stageSkillRootPayload({
552
+ worktreePath: input.worktreePath,
553
+ worktreeRealPath: input.worktreeRealPath,
554
+ rootPrefix: input.rootPrefix,
555
+ skillId: input.skillId,
556
+ stagingName: input.operationId,
557
+ payload: input.payload,
558
+ directories: input.directories,
559
+ receiptBytes: input.receiptBytes,
560
+ plannedTreeHash: input.plannedTreeHash,
561
+ });
562
+ try {
523
563
  // Re-checked immediately before the rename rather than only at entry: the
524
564
  // exclusive lock keeps CommandMate out, but nothing keeps the user's own
525
565
  // editor from creating this directory while the payload was being staged.
@@ -531,18 +571,18 @@ function stageAndCommitSkillRoot(input) {
531
571
  : exports.SkillInstallErrorCode.DESTINATION_UNMANAGED);
532
572
  }
533
573
  try {
534
- (0, fs_1.renameSync)(stagingDir, installRootAbs);
574
+ (0, fs_1.renameSync)(staged.stagingDir, installRootAbs);
535
575
  }
536
576
  catch {
537
577
  fail(exports.SkillInstallErrorCode.COMMIT_FAILED, { reason: 'rename' });
538
578
  }
539
579
  }
540
580
  catch (error) {
541
- (0, fs_1.rmSync)(stagingDir, { recursive: true, force: true });
542
- pruneStagingRoot(stagingRoot);
581
+ (0, fs_1.rmSync)(staged.stagingDir, { recursive: true, force: true });
582
+ pruneStagingRoot(staged.stagingRoot);
543
583
  throw error;
544
584
  }
545
- pruneStagingRoot(stagingRoot);
585
+ pruneStagingRoot(staged.stagingRoot);
546
586
  }
547
587
  /**
548
588
  * Converge a committed install's secondary roots forward from the primary (#1460).
@@ -573,7 +613,7 @@ function completeSecondarySkillInstallRoots(worktreePath, worktreeRealPath, skil
573
613
  }
574
614
  return { relativePath: file.path, bytes, executable: file.executable };
575
615
  });
576
- const directories = directoriesFor(receipt.files.map((file) => file.path));
616
+ const directories = directoriesForSkillPayload(receipt.files.map((file) => file.path));
577
617
  const plannedTreeHash = (0, preview_diff_1.computeSkillTreeHash)([
578
618
  ...receipt.files.map((file) => ({
579
619
  path: file.path,