commandmate 0.15.0 → 0.17.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 (711) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +425 -310
  3. package/.next/app-path-routes-manifest.json +35 -20
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +15 -15
  6. package/.next/react-loadable-manifest.json +11 -11
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +72 -0
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update-check/route.js +1 -1
  12. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  14. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  15. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js +1 -1
  26. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/terminal/route.js +3 -3
  29. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js +1 -1
  32. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/daily-summary/route.js +1 -1
  38. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  39. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  41. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  42. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/fs/recent-paths/route.js +1 -1
  48. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/hooks/agent-event/route.js +1 -0
  50. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -0
  51. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -0
  52. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  53. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  54. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/metrics/vibe/route.js +37 -0
  56. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -0
  57. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -0
  58. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  60. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  64. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  66. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  68. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  69. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/clone/route.js +1 -1
  71. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  72. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/restore/route.js +1 -1
  75. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/route.js +1 -1
  78. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  79. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/scan/route.js +1 -1
  81. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/sync/route.js +1 -1
  84. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  85. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/skills/[id]/route.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/installations/route.js +23 -0
  91. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -0
  92. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -0
  93. package/.next/server/app/api/skills/operations/route.js +13 -0
  94. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -0
  95. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -0
  96. package/.next/server/app/api/skills/reindex/route.js +23 -0
  97. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -0
  98. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -0
  99. package/.next/server/app/api/skills/route.js +1 -1
  100. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +4 -0
  103. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -0
  104. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -0
  105. package/.next/server/app/api/tasks/[taskId]/route.js +4 -0
  106. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -0
  107. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -0
  108. package/.next/server/app/api/templates/[id]/route.js +1 -1
  109. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/templates/route.js +1 -1
  111. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/todos/route.js +1 -1
  113. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -0
  115. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -0
  116. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -0
  117. package/.next/server/app/api/verification/runs/route.js +1 -0
  118. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -0
  119. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -0
  120. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  122. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  125. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  132. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  136. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  210. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  213. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  228. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  240. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +18 -0
  247. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -0
  248. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -0
  249. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/skills/route.js +2 -2
  262. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  267. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  270. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/tasks/route.js +6 -0
  272. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -0
  273. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -0
  274. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  276. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/verify/route.js +4 -0
  293. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -0
  294. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -0
  295. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -0
  296. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -0
  297. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -0
  298. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -0
  299. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -0
  300. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -0
  301. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/route.js +1 -1
  304. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  305. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  307. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  308. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/more/page.js +1 -1
  310. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  311. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  312. package/.next/server/app/page_client-reference-manifest.js +1 -1
  313. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  314. package/.next/server/app/repositories/page.js +1 -1
  315. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  316. package/.next/server/app/review/page.js +1 -1
  317. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  318. package/.next/server/app/sessions/page.js +1 -1
  319. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  320. package/.next/server/app/skills/[skillId]/page.js +1 -1
  321. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  322. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  323. package/.next/server/app/skills/installed/page.js +2 -0
  324. package/.next/server/app/skills/installed/page.js.nft.json +1 -0
  325. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -0
  326. package/.next/server/app/skills/page.js +2 -2
  327. package/.next/server/app/skills/page.js.nft.json +1 -1
  328. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  329. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  330. package/.next/server/app/worktrees/[id]/page.js +4 -4
  331. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  332. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  333. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  334. package/.next/server/app-paths-manifest.json +35 -20
  335. package/.next/server/chunks/1068.js +1 -1
  336. package/.next/server/chunks/1117.js +1 -1
  337. package/.next/server/chunks/1185.js +1 -0
  338. package/.next/server/chunks/1239.js +1 -0
  339. package/.next/server/chunks/1503.js +2 -0
  340. package/.next/server/chunks/22.js +1 -1
  341. package/.next/server/chunks/2328.js +1 -1
  342. package/.next/server/chunks/2366.js +1 -0
  343. package/.next/server/chunks/2710.js +2 -0
  344. package/.next/server/chunks/28.js +35 -0
  345. package/.next/server/chunks/3042.js +1 -2
  346. package/.next/server/chunks/3736.js +1 -1
  347. package/.next/server/chunks/4440.js +2 -0
  348. package/.next/server/chunks/4444.js +1 -1
  349. package/.next/server/chunks/4548.js +1 -0
  350. package/.next/server/chunks/4689.js +25 -0
  351. package/.next/server/chunks/5064.js +1 -1
  352. package/.next/server/chunks/5381.js +50 -10
  353. package/.next/server/chunks/5456.js +1 -1
  354. package/.next/server/chunks/5737.js +1 -0
  355. package/.next/server/chunks/5793.js +1 -0
  356. package/.next/server/chunks/5959.js +3 -3
  357. package/.next/server/chunks/6130.js +1 -1
  358. package/.next/server/chunks/6274.js +13 -0
  359. package/.next/server/chunks/646.js +1 -1
  360. package/.next/server/chunks/8681.js +1 -1
  361. package/.next/server/chunks/8807.js +255 -51
  362. package/.next/server/chunks/8856.js +4 -0
  363. package/.next/server/chunks/9051.js +1 -0
  364. package/.next/server/chunks/9687.js +2 -2
  365. package/.next/server/middleware-build-manifest.js +1 -1
  366. package/.next/server/middleware-manifest.json +5 -5
  367. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  368. package/.next/server/pages/500.html +1 -1
  369. package/.next/server/server-reference-manifest.json +1 -1
  370. package/.next/static/chunks/2751-7fabd91275b14ca3.js +1 -0
  371. package/.next/static/chunks/{4459.03172449db395039.js → 4459.a94b52985a76509a.js} +1 -1
  372. package/.next/static/chunks/{4560-8ffb0bb19f2ba998.js → 4560-0917ae2e6a0e5400.js} +1 -1
  373. package/.next/static/chunks/{6488-93870a55f4a3e3cd.js → 6488-f4e447464c9e0e22.js} +1 -1
  374. package/.next/static/chunks/{7485.43871aedf3dbb980.js → 7485.442b21101fca7257.js} +1 -1
  375. package/.next/static/chunks/8562-6e2ab32452f4fa5b.js +1 -0
  376. package/.next/static/chunks/app/api/app/update/route-8440b6c72bed83a1.js +1 -0
  377. package/.next/static/chunks/app/api/app/update-check/route-8440b6c72bed83a1.js +1 -0
  378. package/.next/static/chunks/app/api/assistant/conversation/route-8440b6c72bed83a1.js +1 -0
  379. package/.next/static/chunks/app/api/assistant/current-output/route-8440b6c72bed83a1.js +1 -0
  380. package/.next/static/chunks/app/api/assistant/messages/route-8440b6c72bed83a1.js +1 -0
  381. package/.next/static/chunks/app/api/assistant/session/route-8440b6c72bed83a1.js +1 -0
  382. package/.next/static/chunks/app/api/assistant/start/route-8440b6c72bed83a1.js +1 -0
  383. package/.next/static/chunks/app/api/assistant/terminal/route-8440b6c72bed83a1.js +1 -0
  384. package/.next/static/chunks/app/api/assistant/tools/route-8440b6c72bed83a1.js +1 -0
  385. package/.next/static/chunks/app/api/auth/login/route-8440b6c72bed83a1.js +1 -0
  386. package/.next/static/chunks/app/api/auth/logout/route-8440b6c72bed83a1.js +1 -0
  387. package/.next/static/chunks/app/api/auth/status/route-8440b6c72bed83a1.js +1 -0
  388. package/.next/static/chunks/app/api/daily-summary/route-8440b6c72bed83a1.js +1 -0
  389. package/.next/static/chunks/app/api/daily-summary/status/route-8440b6c72bed83a1.js +1 -0
  390. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8440b6c72bed83a1.js +1 -0
  391. package/.next/static/chunks/app/api/external-apps/[id]/route-8440b6c72bed83a1.js +1 -0
  392. package/.next/static/chunks/app/api/external-apps/route-8440b6c72bed83a1.js +1 -0
  393. package/.next/static/chunks/app/api/fs/browse/route-8440b6c72bed83a1.js +1 -0
  394. package/.next/static/chunks/app/api/fs/recent-paths/route-8440b6c72bed83a1.js +1 -0
  395. package/.next/static/chunks/app/api/hooks/agent-event/route-8440b6c72bed83a1.js +1 -0
  396. package/.next/static/chunks/app/api/hooks/claude-done/route-8440b6c72bed83a1.js +1 -0
  397. package/.next/static/chunks/app/api/metrics/vibe/route-8440b6c72bed83a1.js +1 -0
  398. package/.next/static/chunks/app/api/ollama/models/route-8440b6c72bed83a1.js +1 -0
  399. package/.next/static/chunks/app/api/push/subscriptions/route-8440b6c72bed83a1.js +1 -0
  400. package/.next/static/chunks/app/api/push/vapid/route-8440b6c72bed83a1.js +1 -0
  401. package/.next/static/chunks/app/api/repositories/[id]/route-8440b6c72bed83a1.js +1 -0
  402. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +1 -0
  403. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8440b6c72bed83a1.js +1 -0
  404. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8440b6c72bed83a1.js +1 -0
  405. package/.next/static/chunks/app/api/repositories/clone/route-8440b6c72bed83a1.js +1 -0
  406. package/.next/static/chunks/app/api/repositories/excluded/route-8440b6c72bed83a1.js +1 -0
  407. package/.next/static/chunks/app/api/repositories/restore/route-8440b6c72bed83a1.js +1 -0
  408. package/.next/static/chunks/app/api/repositories/route-8440b6c72bed83a1.js +1 -0
  409. package/.next/static/chunks/app/api/repositories/scan/route-8440b6c72bed83a1.js +1 -0
  410. package/.next/static/chunks/app/api/repositories/sync/route-8440b6c72bed83a1.js +1 -0
  411. package/.next/static/chunks/app/api/repositories/validate-path/route-8440b6c72bed83a1.js +1 -0
  412. package/.next/static/chunks/app/api/sidebar/group-order/route-8440b6c72bed83a1.js +1 -0
  413. package/.next/static/chunks/app/api/skills/[id]/route-8440b6c72bed83a1.js +1 -0
  414. package/.next/static/chunks/app/api/skills/installations/route-8440b6c72bed83a1.js +1 -0
  415. package/.next/static/chunks/app/api/skills/operations/route-8440b6c72bed83a1.js +1 -0
  416. package/.next/static/chunks/app/api/skills/reindex/route-8440b6c72bed83a1.js +1 -0
  417. package/.next/static/chunks/app/api/skills/route-8440b6c72bed83a1.js +1 -0
  418. package/.next/static/chunks/app/api/slash-commands/route-8440b6c72bed83a1.js +1 -0
  419. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8440b6c72bed83a1.js +1 -0
  420. package/.next/static/chunks/app/api/tasks/[taskId]/route-8440b6c72bed83a1.js +1 -0
  421. package/.next/static/chunks/app/api/templates/[id]/route-8440b6c72bed83a1.js +1 -0
  422. package/.next/static/chunks/app/api/templates/route-8440b6c72bed83a1.js +1 -0
  423. package/.next/static/chunks/app/api/todos/route-8440b6c72bed83a1.js +1 -0
  424. package/.next/static/chunks/app/api/verification/runs/[runId]/route-8440b6c72bed83a1.js +1 -0
  425. package/.next/static/chunks/app/api/verification/runs/route-8440b6c72bed83a1.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8440b6c72bed83a1.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8440b6c72bed83a1.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8440b6c72bed83a1.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8440b6c72bed83a1.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8440b6c72bed83a1.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8440b6c72bed83a1.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8440b6c72bed83a1.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8440b6c72bed83a1.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8440b6c72bed83a1.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8440b6c72bed83a1.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8440b6c72bed83a1.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8440b6c72bed83a1.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8440b6c72bed83a1.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8440b6c72bed83a1.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8440b6c72bed83a1.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8440b6c72bed83a1.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8440b6c72bed83a1.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8440b6c72bed83a1.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8440b6c72bed83a1.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8440b6c72bed83a1.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8440b6c72bed83a1.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8440b6c72bed83a1.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8440b6c72bed83a1.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8440b6c72bed83a1.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8440b6c72bed83a1.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8440b6c72bed83a1.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8440b6c72bed83a1.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8440b6c72bed83a1.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8440b6c72bed83a1.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8440b6c72bed83a1.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8440b6c72bed83a1.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8440b6c72bed83a1.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8440b6c72bed83a1.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8440b6c72bed83a1.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8440b6c72bed83a1.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8440b6c72bed83a1.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8440b6c72bed83a1.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8440b6c72bed83a1.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8440b6c72bed83a1.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8440b6c72bed83a1.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8440b6c72bed83a1.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/route-8440b6c72bed83a1.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8440b6c72bed83a1.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8440b6c72bed83a1.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8440b6c72bed83a1.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8440b6c72bed83a1.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8440b6c72bed83a1.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8440b6c72bed83a1.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8440b6c72bed83a1.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8440b6c72bed83a1.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8440b6c72bed83a1.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8440b6c72bed83a1.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8440b6c72bed83a1.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8440b6c72bed83a1.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8440b6c72bed83a1.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8440b6c72bed83a1.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8440b6c72bed83a1.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8440b6c72bed83a1.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8440b6c72bed83a1.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8440b6c72bed83a1.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8440b6c72bed83a1.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8440b6c72bed83a1.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8440b6c72bed83a1.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8440b6c72bed83a1.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8440b6c72bed83a1.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8440b6c72bed83a1.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8440b6c72bed83a1.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8440b6c72bed83a1.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/route-8440b6c72bed83a1.js +1 -0
  496. package/.next/static/chunks/app/manifest.webmanifest/route-8440b6c72bed83a1.js +1 -0
  497. package/.next/static/chunks/app/more/{page-082d4ae496f9a36e.js → page-1619018cac999bbc.js} +1 -1
  498. package/.next/static/chunks/app/proxy/[...path]/route-8440b6c72bed83a1.js +1 -0
  499. package/.next/static/chunks/app/repositories/page-1ed1e5a542ecc168.js +1 -0
  500. package/.next/static/chunks/app/review/{page-f431d630097c2e85.js → page-b559bfb11c46931b.js} +1 -1
  501. package/.next/static/chunks/app/sessions/{page-20f07a99db64d2ca.js → page-3fa7e767d0ab3889.js} +1 -1
  502. package/.next/static/chunks/app/skills/[skillId]/page-6008b904225ebb25.js +1 -0
  503. package/.next/static/chunks/app/skills/installed/page-6641f95e6a6e5f9d.js +1 -0
  504. package/.next/static/chunks/app/skills/page-184f8e23e31a3667.js +1 -0
  505. package/.next/static/chunks/app/worktrees/[id]/page-5ffc84094830babb.js +1 -0
  506. package/.next/static/chunks/{webpack-6b35d37d50302d27.js → webpack-180bebdee221b6f4.js} +1 -1
  507. package/.next/static/css/{5127edd9aa8f3b49.css → d3453a6876553d32.css} +1 -1
  508. package/.next/static/gR8Sh86RrTynJON8SWkWK/_buildManifest.js +1 -0
  509. package/.next/trace +12 -11
  510. package/.next/types/app/api/hooks/agent-event/route.ts +347 -0
  511. package/.next/types/app/api/metrics/vibe/route.ts +347 -0
  512. package/.next/types/app/api/skills/installations/route.ts +347 -0
  513. package/.next/types/app/api/skills/operations/route.ts +347 -0
  514. package/.next/types/app/api/skills/reindex/route.ts +347 -0
  515. package/.next/types/app/api/tasks/[taskId]/cancel/route.ts +347 -0
  516. package/.next/types/app/api/tasks/[taskId]/route.ts +347 -0
  517. package/.next/types/app/api/verification/runs/[runId]/route.ts +347 -0
  518. package/.next/types/app/api/verification/runs/route.ts +347 -0
  519. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.ts +347 -0
  520. package/.next/types/app/api/worktrees/[id]/tasks/route.ts +347 -0
  521. package/.next/types/app/api/worktrees/[id]/verify/route.ts +347 -0
  522. package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/route.ts +347 -0
  523. package/.next/types/app/api/worktrees/[id]/verify/runs/route.ts +347 -0
  524. package/.next/types/app/skills/installed/page.ts +84 -0
  525. package/.next/types/routes.d.ts +17 -2
  526. package/.next/types/validator.ts +135 -0
  527. package/dist/cli/commands/report.d.ts +1 -0
  528. package/dist/cli/commands/report.d.ts.map +1 -1
  529. package/dist/cli/commands/report.js +54 -0
  530. package/dist/cli/commands/send.d.ts.map +1 -1
  531. package/dist/cli/commands/send.js +86 -3
  532. package/dist/cli/commands/skill.d.ts +2 -1
  533. package/dist/cli/commands/skill.d.ts.map +1 -1
  534. package/dist/cli/commands/skill.js +136 -2
  535. package/dist/cli/commands/task.d.ts +11 -0
  536. package/dist/cli/commands/task.d.ts.map +1 -0
  537. package/dist/cli/commands/task.js +126 -0
  538. package/dist/cli/commands/verify.d.ts +19 -0
  539. package/dist/cli/commands/verify.d.ts.map +1 -0
  540. package/dist/cli/commands/verify.js +229 -0
  541. package/dist/cli/commands/wait.d.ts +2 -0
  542. package/dist/cli/commands/wait.d.ts.map +1 -1
  543. package/dist/cli/commands/wait.js +78 -13
  544. package/dist/cli/docs/agent-operations.d.ts +2 -2
  545. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  546. package/dist/cli/docs/agent-operations.js +92 -3
  547. package/dist/cli/program.d.ts.map +1 -1
  548. package/dist/cli/program.js +6 -0
  549. package/dist/cli/types/api-responses.d.ts +210 -0
  550. package/dist/cli/types/api-responses.d.ts.map +1 -1
  551. package/dist/cli/types/index.d.ts +88 -0
  552. package/dist/cli/types/index.d.ts.map +1 -1
  553. package/dist/cli/types/index.js +30 -1
  554. package/dist/cli/utils/api-client.d.ts +8 -0
  555. package/dist/cli/utils/api-client.d.ts.map +1 -1
  556. package/dist/cli/utils/verify-runner.d.ts +57 -0
  557. package/dist/cli/utils/verify-runner.d.ts.map +1 -0
  558. package/dist/cli/utils/verify-runner.js +174 -0
  559. package/dist/server/server.js +15 -0
  560. package/dist/server/src/config/auto-yes-config.js +22 -0
  561. package/dist/server/src/lib/auto-yes-poller.js +34 -2
  562. package/dist/server/src/lib/auto-yes-state.js +6 -19
  563. package/dist/server/src/lib/db/db.js +34 -1
  564. package/dist/server/src/lib/db/migrations/index.js +8 -0
  565. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  566. package/dist/server/src/lib/db/migrations/v48-skill-operations-audit-index.js +117 -0
  567. package/dist/server/src/lib/db/migrations/v49-verification-runs.js +86 -0
  568. package/dist/server/src/lib/db/migrations/v50-tasks.js +68 -0
  569. package/dist/server/src/lib/db/migrations/v51-task-events.js +58 -0
  570. package/dist/server/src/lib/db/task-events-db.js +59 -0
  571. package/dist/server/src/lib/db/tasks-db.js +218 -0
  572. package/dist/server/src/lib/db/verification-db.js +272 -0
  573. package/dist/server/src/lib/polling/auto-yes-policy.js +117 -0
  574. package/dist/server/src/lib/polling/auto-yes-resolver.js +144 -4
  575. package/dist/server/src/lib/polling/response-checker.js +8 -0
  576. package/dist/server/src/lib/session/agent-event-state.js +46 -0
  577. package/dist/server/src/lib/session/current-output-builder.js +4 -0
  578. package/dist/server/src/lib/session/status-mapping.js +146 -0
  579. package/dist/server/src/lib/skills/compatibility-matrix.js +256 -0
  580. package/dist/server/src/lib/skills/compatibility.js +132 -11
  581. package/dist/server/src/lib/skills/operation-audit.js +85 -15
  582. package/dist/server/src/lib/skills/operation-journal.js +14 -1
  583. package/dist/server/src/lib/tasks/contract-parser.js +385 -0
  584. package/dist/server/src/lib/tasks/task-state-machine.js +183 -0
  585. package/dist/server/src/lib/tasks/task-transition-service.js +106 -0
  586. package/dist/server/src/lib/verification/verification-reconciler.js +49 -0
  587. package/dist/server/src/types/sidebar.js +7 -20
  588. package/package.json +5 -2
  589. package/scripts/hooks/cmate-agent-event.sh +175 -0
  590. package/.next/server/chunks/1808.js +0 -1
  591. package/.next/server/chunks/2064.js +0 -2
  592. package/.next/server/chunks/5226.js +0 -28
  593. package/.next/server/chunks/5306.js +0 -2
  594. package/.next/server/chunks/593.js +0 -1
  595. package/.next/server/chunks/9192.js +0 -1
  596. package/.next/static/MqlW91_Se_kEW6mtm-1x0/_buildManifest.js +0 -1
  597. package/.next/static/chunks/3418-7e47651340d940b0.js +0 -1
  598. package/.next/static/chunks/9142-41b13a2f278529cc.js +0 -1
  599. package/.next/static/chunks/app/api/app/update/route-8c8bebe20cebf964.js +0 -1
  600. package/.next/static/chunks/app/api/app/update-check/route-8c8bebe20cebf964.js +0 -1
  601. package/.next/static/chunks/app/api/assistant/conversation/route-8c8bebe20cebf964.js +0 -1
  602. package/.next/static/chunks/app/api/assistant/current-output/route-8c8bebe20cebf964.js +0 -1
  603. package/.next/static/chunks/app/api/assistant/messages/route-8c8bebe20cebf964.js +0 -1
  604. package/.next/static/chunks/app/api/assistant/session/route-8c8bebe20cebf964.js +0 -1
  605. package/.next/static/chunks/app/api/assistant/start/route-8c8bebe20cebf964.js +0 -1
  606. package/.next/static/chunks/app/api/assistant/terminal/route-8c8bebe20cebf964.js +0 -1
  607. package/.next/static/chunks/app/api/assistant/tools/route-8c8bebe20cebf964.js +0 -1
  608. package/.next/static/chunks/app/api/auth/login/route-8c8bebe20cebf964.js +0 -1
  609. package/.next/static/chunks/app/api/auth/logout/route-8c8bebe20cebf964.js +0 -1
  610. package/.next/static/chunks/app/api/auth/status/route-8c8bebe20cebf964.js +0 -1
  611. package/.next/static/chunks/app/api/daily-summary/route-8c8bebe20cebf964.js +0 -1
  612. package/.next/static/chunks/app/api/daily-summary/status/route-8c8bebe20cebf964.js +0 -1
  613. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8c8bebe20cebf964.js +0 -1
  614. package/.next/static/chunks/app/api/external-apps/[id]/route-8c8bebe20cebf964.js +0 -1
  615. package/.next/static/chunks/app/api/external-apps/route-8c8bebe20cebf964.js +0 -1
  616. package/.next/static/chunks/app/api/fs/browse/route-8c8bebe20cebf964.js +0 -1
  617. package/.next/static/chunks/app/api/fs/recent-paths/route-8c8bebe20cebf964.js +0 -1
  618. package/.next/static/chunks/app/api/hooks/claude-done/route-8c8bebe20cebf964.js +0 -1
  619. package/.next/static/chunks/app/api/ollama/models/route-8c8bebe20cebf964.js +0 -1
  620. package/.next/static/chunks/app/api/push/subscriptions/route-8c8bebe20cebf964.js +0 -1
  621. package/.next/static/chunks/app/api/push/vapid/route-8c8bebe20cebf964.js +0 -1
  622. package/.next/static/chunks/app/api/repositories/[id]/route-8c8bebe20cebf964.js +0 -1
  623. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8c8bebe20cebf964.js +0 -1
  624. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8c8bebe20cebf964.js +0 -1
  625. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8c8bebe20cebf964.js +0 -1
  626. package/.next/static/chunks/app/api/repositories/clone/route-8c8bebe20cebf964.js +0 -1
  627. package/.next/static/chunks/app/api/repositories/excluded/route-8c8bebe20cebf964.js +0 -1
  628. package/.next/static/chunks/app/api/repositories/restore/route-8c8bebe20cebf964.js +0 -1
  629. package/.next/static/chunks/app/api/repositories/route-8c8bebe20cebf964.js +0 -1
  630. package/.next/static/chunks/app/api/repositories/scan/route-8c8bebe20cebf964.js +0 -1
  631. package/.next/static/chunks/app/api/repositories/sync/route-8c8bebe20cebf964.js +0 -1
  632. package/.next/static/chunks/app/api/repositories/validate-path/route-8c8bebe20cebf964.js +0 -1
  633. package/.next/static/chunks/app/api/sidebar/group-order/route-8c8bebe20cebf964.js +0 -1
  634. package/.next/static/chunks/app/api/skills/[id]/route-8c8bebe20cebf964.js +0 -1
  635. package/.next/static/chunks/app/api/skills/route-8c8bebe20cebf964.js +0 -1
  636. package/.next/static/chunks/app/api/slash-commands/route-8c8bebe20cebf964.js +0 -1
  637. package/.next/static/chunks/app/api/templates/[id]/route-8c8bebe20cebf964.js +0 -1
  638. package/.next/static/chunks/app/api/templates/route-8c8bebe20cebf964.js +0 -1
  639. package/.next/static/chunks/app/api/todos/route-8c8bebe20cebf964.js +0 -1
  640. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8c8bebe20cebf964.js +0 -1
  641. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8c8bebe20cebf964.js +0 -1
  642. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8c8bebe20cebf964.js +0 -1
  643. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8c8bebe20cebf964.js +0 -1
  644. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8c8bebe20cebf964.js +0 -1
  645. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8c8bebe20cebf964.js +0 -1
  646. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8c8bebe20cebf964.js +0 -1
  647. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8c8bebe20cebf964.js +0 -1
  648. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8c8bebe20cebf964.js +0 -1
  649. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8c8bebe20cebf964.js +0 -1
  650. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8c8bebe20cebf964.js +0 -1
  651. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8c8bebe20cebf964.js +0 -1
  652. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8c8bebe20cebf964.js +0 -1
  653. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8c8bebe20cebf964.js +0 -1
  654. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8c8bebe20cebf964.js +0 -1
  655. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8c8bebe20cebf964.js +0 -1
  656. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8c8bebe20cebf964.js +0 -1
  657. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8c8bebe20cebf964.js +0 -1
  658. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8c8bebe20cebf964.js +0 -1
  659. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8c8bebe20cebf964.js +0 -1
  660. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8c8bebe20cebf964.js +0 -1
  661. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8c8bebe20cebf964.js +0 -1
  662. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8c8bebe20cebf964.js +0 -1
  663. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8c8bebe20cebf964.js +0 -1
  664. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8c8bebe20cebf964.js +0 -1
  665. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8c8bebe20cebf964.js +0 -1
  666. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8c8bebe20cebf964.js +0 -1
  667. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8c8bebe20cebf964.js +0 -1
  668. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8c8bebe20cebf964.js +0 -1
  669. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8c8bebe20cebf964.js +0 -1
  670. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8c8bebe20cebf964.js +0 -1
  671. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8c8bebe20cebf964.js +0 -1
  672. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8c8bebe20cebf964.js +0 -1
  673. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8c8bebe20cebf964.js +0 -1
  674. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8c8bebe20cebf964.js +0 -1
  675. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8c8bebe20cebf964.js +0 -1
  676. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8c8bebe20cebf964.js +0 -1
  677. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8c8bebe20cebf964.js +0 -1
  678. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8c8bebe20cebf964.js +0 -1
  679. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8c8bebe20cebf964.js +0 -1
  680. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8c8bebe20cebf964.js +0 -1
  681. package/.next/static/chunks/app/api/worktrees/[id]/route-8c8bebe20cebf964.js +0 -1
  682. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8c8bebe20cebf964.js +0 -1
  683. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8c8bebe20cebf964.js +0 -1
  684. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8c8bebe20cebf964.js +0 -1
  685. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8c8bebe20cebf964.js +0 -1
  686. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8c8bebe20cebf964.js +0 -1
  687. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8c8bebe20cebf964.js +0 -1
  688. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8c8bebe20cebf964.js +0 -1
  689. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8c8bebe20cebf964.js +0 -1
  690. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8c8bebe20cebf964.js +0 -1
  691. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8c8bebe20cebf964.js +0 -1
  692. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8c8bebe20cebf964.js +0 -1
  693. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8c8bebe20cebf964.js +0 -1
  694. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8c8bebe20cebf964.js +0 -1
  695. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8c8bebe20cebf964.js +0 -1
  696. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8c8bebe20cebf964.js +0 -1
  697. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8c8bebe20cebf964.js +0 -1
  698. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8c8bebe20cebf964.js +0 -1
  699. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8c8bebe20cebf964.js +0 -1
  700. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8c8bebe20cebf964.js +0 -1
  701. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8c8bebe20cebf964.js +0 -1
  702. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8c8bebe20cebf964.js +0 -1
  703. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8c8bebe20cebf964.js +0 -1
  704. package/.next/static/chunks/app/api/worktrees/route-8c8bebe20cebf964.js +0 -1
  705. package/.next/static/chunks/app/manifest.webmanifest/route-8c8bebe20cebf964.js +0 -1
  706. package/.next/static/chunks/app/proxy/[...path]/route-8c8bebe20cebf964.js +0 -1
  707. package/.next/static/chunks/app/repositories/page-3c4fb889da48ce24.js +0 -1
  708. package/.next/static/chunks/app/skills/[skillId]/page-8c40c9683f242207.js +0 -1
  709. package/.next/static/chunks/app/skills/page-46242c428ee8bccf.js +0 -1
  710. package/.next/static/chunks/app/worktrees/[id]/page-6da38f0a06dfd9db.js +0 -1
  711. /package/.next/static/{MqlW91_Se_kEW6mtm-1x0 → gR8Sh86RrTynJON8SWkWK}/_ssgManifest.js +0 -0
@@ -2,20 +2,44 @@
2
2
  /**
3
3
  * Auto Yes Resolver - Determines automatic answer for prompt data
4
4
  *
5
- * Rules:
5
+ * Base rules (unchanged since Issue #479):
6
6
  * - yes/no prompt -> 'y'
7
7
  * - multiple_choice with default option -> default option number
8
8
  * - multiple_choice without default -> first option number
9
9
  * - option requiring text input -> null (skip)
10
10
  * - unknown type -> null (skip)
11
+ *
12
+ * Issue #1547: an optional {@link AutoYesPolicy} — the `autoYes` block of an
13
+ * execution contract — can withhold an answer the base rules would have sent.
14
+ * The policy can only ever suppress: it never turns a null into an answer, and
15
+ * omitting it (or passing one that states nothing) reproduces the pre-#1547
16
+ * behaviour exactly, which is what keeps contract-less operation untouched.
17
+ *
18
+ * Client-safe: no server-only imports, because a 'use client' hook
19
+ * (`hooks/useAutoYes.ts`) imports this module.
11
20
  */
12
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.MAX_DENY_MATCH_TEXT_LENGTH = exports.MAX_DENY_PATTERN_LENGTH = void 0;
23
+ exports.resolveAutoAnswerWithPolicy = resolveAutoAnswerWithPolicy;
13
24
  exports.resolveAutoAnswer = resolveAutoAnswer;
25
+ const auto_yes_config_1 = require("../../config/auto-yes-config");
14
26
  /**
15
- * Resolve the automatic answer for a given prompt
16
- * @returns The answer string to send, or null if auto-answer is not possible
27
+ * Upper bound on a deny pattern, mirroring MAX_PATTERN_LENGTH in
28
+ * lib/tasks/contract-parser (asserted equal by the unit tests). Contracts are
29
+ * validated on load, so this is defence in depth for a contract snapshot that
30
+ * reached the database some other way.
31
+ */
32
+ exports.MAX_DENY_PATTERN_LENGTH = 200;
33
+ /**
34
+ * Upper bound on the text a deny pattern is matched against, per field.
35
+ *
36
+ * A prompt question or option label is a few hundred characters; the bound only
37
+ * exists so a pathological pane cannot make every poll scan megabytes with 32
38
+ * patterns. Matching is over the head of the field, deterministically.
17
39
  */
18
- function resolveAutoAnswer(promptData) {
40
+ exports.MAX_DENY_MATCH_TEXT_LENGTH = 20_000;
41
+ /** The pre-policy resolution: the rules as they were before Issue #1547. */
42
+ function resolveBaseAnswer(promptData) {
19
43
  if (promptData.type === 'yes_no') {
20
44
  return 'y';
21
45
  }
@@ -32,3 +56,119 @@ function resolveAutoAnswer(promptData) {
32
56
  }
33
57
  return null;
34
58
  }
59
+ /**
60
+ * Every piece of prompt text a deny pattern is matched against.
61
+ *
62
+ * `instructionText` is included because that is where the dangerous part
63
+ * usually is — Claude's permission prompts put the command being approved in the
64
+ * lines above the question, not in the question itself.
65
+ */
66
+ function collectDenyMatchTexts(promptData) {
67
+ const texts = [promptData.question];
68
+ if (promptData.instructionText) {
69
+ texts.push(promptData.instructionText);
70
+ }
71
+ if (promptData.type === 'multiple_choice') {
72
+ for (const option of promptData.options) {
73
+ texts.push(option.label);
74
+ }
75
+ }
76
+ else {
77
+ texts.push(...promptData.options);
78
+ }
79
+ return texts.map(text => text.length > exports.MAX_DENY_MATCH_TEXT_LENGTH ? text.slice(0, exports.MAX_DENY_MATCH_TEXT_LENGTH) : text);
80
+ }
81
+ /**
82
+ * Test the prompt against every deny pattern.
83
+ *
84
+ * Patterns are screened by {@link validateStopPattern} (length, safe-regex2
85
+ * catastrophic-backtracking detection, syntax) before execution, which is the
86
+ * same ReDoS defence the stop-pattern path uses. A pattern that fails screening
87
+ * — or whose execution throws — is reported as `unusable`, not skipped.
88
+ */
89
+ function evaluateDenyPatterns(promptData, patterns) {
90
+ if (patterns.length === 0) {
91
+ return { outcome: 'no-match' };
92
+ }
93
+ const texts = collectDenyMatchTexts(promptData);
94
+ for (const pattern of patterns) {
95
+ if (pattern.length > exports.MAX_DENY_PATTERN_LENGTH || !(0, auto_yes_config_1.validateStopPattern)(pattern).valid) {
96
+ return { outcome: 'unusable', pattern };
97
+ }
98
+ const regex = new RegExp(pattern);
99
+ for (const text of texts) {
100
+ const matched = (0, auto_yes_config_1.executeRegexWithTimeout)(regex, text);
101
+ if (matched === null) {
102
+ return { outcome: 'unusable', pattern };
103
+ }
104
+ if (matched) {
105
+ return { outcome: 'match', pattern };
106
+ }
107
+ }
108
+ }
109
+ return { outcome: 'no-match' };
110
+ }
111
+ /**
112
+ * Decide whether the policy forbids answering this prompt.
113
+ *
114
+ * Deny patterns are honoured even when `mode` is null: a contract that lists
115
+ * them has stated a policy, and a listed pattern that quietly did nothing is the
116
+ * worst failure a contract can have. `mode` null with no deny patterns — what
117
+ * the parser produces for a contract with no `autoYes` block — reaches none of
118
+ * these branches and leaves behaviour identical.
119
+ */
120
+ function evaluatePolicy(promptData, policy) {
121
+ if (!policy)
122
+ return null;
123
+ if (policy.mode === 'off') {
124
+ return { reason: 'mode-off' };
125
+ }
126
+ const deny = evaluateDenyPatterns(promptData, policy.denyPatterns);
127
+ if (deny.outcome === 'match') {
128
+ return { reason: 'deny-pattern', pattern: deny.pattern };
129
+ }
130
+ if (deny.outcome === 'unusable') {
131
+ return { reason: 'deny-pattern-unusable', pattern: deny.pattern };
132
+ }
133
+ if (policy.mode === 'safe') {
134
+ return promptData.type === 'yes_no' ? null : { reason: 'type-not-allowed' };
135
+ }
136
+ if (policy.mode === 'allow-listed') {
137
+ return policy.allowPromptTypes.includes(promptData.type)
138
+ ? null
139
+ : { reason: 'type-not-allowed' };
140
+ }
141
+ return null;
142
+ }
143
+ /**
144
+ * Resolve the automatic answer, reporting whether a policy withheld it.
145
+ *
146
+ * `suppressedBy` is set only when an answer was actually withheld, so the
147
+ * escalation log records real suppressions and not prompts the base rules were
148
+ * never going to answer anyway (an empty option list, an option that needs
149
+ * typing). Those still resolve to null, with `suppressedBy` null.
150
+ *
151
+ * @param promptData - Detected prompt
152
+ * @param policy - Contract auto-answer policy; omit for the unconstrained behaviour
153
+ */
154
+ function resolveAutoAnswerWithPolicy(promptData, policy) {
155
+ const answer = resolveBaseAnswer(promptData);
156
+ if (answer === null) {
157
+ return { answer: null, suppressedBy: null };
158
+ }
159
+ const denial = evaluatePolicy(promptData, policy);
160
+ if (denial) {
161
+ return { answer: null, suppressedBy: denial.reason, pattern: denial.pattern };
162
+ }
163
+ return { answer, suppressedBy: null };
164
+ }
165
+ /**
166
+ * Resolve the automatic answer for a given prompt.
167
+ *
168
+ * @param promptData - Detected prompt
169
+ * @param policy - Contract auto-answer policy; omit for the unconstrained behaviour
170
+ * @returns The answer string to send, or null if auto-answer is not possible
171
+ */
172
+ function resolveAutoAnswer(promptData, policy) {
173
+ return resolveAutoAnswerWithPolicy(promptData, policy).answer;
174
+ }
@@ -27,6 +27,7 @@ const prompt_dedup_1 = require("./prompt-dedup");
27
27
  const response_dedup_1 = require("./response-dedup");
28
28
  const response_poller_core_1 = require("./response-poller-core");
29
29
  const push_1 = require("../../lib/push");
30
+ const task_transition_service_1 = require("../../lib/tasks/task-transition-service");
30
31
  /**
31
32
  * Creates an incomplete extraction result with empty response.
32
33
  * Centralizes the repeated pattern of returning an in-progress/incomplete state.
@@ -420,6 +421,13 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
420
421
  });
421
422
  (0, db_1.updateSessionState)(db, worktreeId, cliToolId, result.lineCount, resolvedInstanceId);
422
423
  (0, ws_server_1.broadcastMessage)('message', { worktreeId, message });
424
+ // Issue #1548: the agent is blocked on input. Raised after the dedup and
425
+ // save above, so the task log counts prompts the system actually recorded
426
+ // rather than every poll that saw the same one still on screen. No-ops
427
+ // when this instance is not running a contract.
428
+ (0, task_transition_service_1.applyEventToActiveTask)(db, worktreeId, cliToolId, resolvedInstanceId, 'prompt_detected', {
429
+ promptType: promptDetection.promptData?.type,
430
+ });
423
431
  // Web Push fan-out (Issue #1125): agent is now waiting for a prompt reply.
424
432
  // Fire-and-forget — push is advisory and must never block/break the poller.
425
433
  void (0, push_1.notifyPushSubscribers)({
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * In-memory record of the last structured "the agent stopped" event (#1549).
4
+ *
5
+ * The agent CLI telling us it stopped is a different kind of fact from the
6
+ * screen-scraped status: it is exact, but it only exists when someone wired a
7
+ * hook up. So this is kept beside the detector's output rather than folded into
8
+ * it — `buildCurrentOutput` exposes the timestamp, and nothing in the completion
9
+ * decision reads it yet. Phase 3-2 is deliberately observation only; swapping
10
+ * the wait/poller verdict from string matching to hook events before there is
11
+ * field data on how often hooks actually fire would trade a known failure mode
12
+ * for an unknown one.
13
+ *
14
+ * In-memory and not in SQLite for the same reason `auto-yes-state` is: the value
15
+ * describes a live tmux session, and a session does not survive a server restart
16
+ * for the timestamp to still be about.
17
+ *
18
+ * @module lib/session/agent-event-state
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.recordAgentStopEvent = recordAgentStopEvent;
22
+ exports.getLastStopEventAt = getLastStopEventAt;
23
+ exports.clearAgentStopEvents = clearAgentStopEvents;
24
+ const auto_yes_state_1 = require("../../lib/auto-yes-state");
25
+ /** compositeKey -> epoch ms of the most recent stop event. */
26
+ const lastStopEventAt = new Map();
27
+ /**
28
+ * Record that `instanceId` reported it stopped.
29
+ *
30
+ * @param at - Epoch ms; defaults to now. Passed explicitly by callers that need
31
+ * the stored value and their own record of the event to agree exactly.
32
+ */
33
+ function recordAgentStopEvent(worktreeId, cliToolId, instanceId, at = Date.now()) {
34
+ lastStopEventAt.set((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), at);
35
+ }
36
+ /**
37
+ * @returns Epoch ms of the last stop event, or null when none has been received
38
+ * — which is the ordinary case for a session whose agent has no hook set up.
39
+ */
40
+ function getLastStopEventAt(worktreeId, cliToolId, instanceId) {
41
+ return lastStopEventAt.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
42
+ }
43
+ /** Drop every recorded event. Test seam. */
44
+ function clearAgentStopEvents() {
45
+ lastStopEventAt.clear();
46
+ }
@@ -15,6 +15,7 @@ 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
17
  const status_capture_config_1 = require("../../config/status-capture-config");
18
+ const agent_event_state_1 = require("../../lib/session/agent-event-state");
18
19
  /**
19
20
  * Build the current-output payload for a worktree session.
20
21
  *
@@ -27,6 +28,7 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
27
28
  const resolvedInstanceId = instanceId ?? cliToolId;
28
29
  const manager = manager_1.CLIToolManager.getInstance();
29
30
  const cliTool = manager.getTool(cliToolId);
31
+ const stopEventAt = (0, agent_event_state_1.getLastStopEventAt)(worktreeId, cliToolId, instanceId);
30
32
  const running = await cliTool.isRunning(worktreeId, instanceId);
31
33
  if (!running) {
32
34
  return {
@@ -36,6 +38,7 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
36
38
  cliToolId,
37
39
  sessionStatus: 'idle',
38
40
  sessionStatusReason: 'session_not_running',
41
+ lastStopEventAt: stopEventAt,
39
42
  };
40
43
  }
41
44
  const sessionState = (0, db_1.getSessionState)(db, worktreeId, resolvedInstanceId);
@@ -91,5 +94,6 @@ async function buildCurrentOutput(db, worktreeId, cliToolId, instanceId) {
91
94
  isUnclassifiedActive,
92
95
  lastServerResponseTimestamp,
93
96
  serverPollerActive: (0, auto_yes_manager_1.isPollerActive)(compositeKey),
97
+ lastStopEventAt: stopEventAt,
94
98
  };
95
99
  }
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Session status vocabulary mapping (Issue #1550).
4
+ *
5
+ * The same session reality is expressed in several vocabularies:
6
+ *
7
+ * | Vocabulary | Defined in | Values |
8
+ * |---------------------|-------------------------------------|-------------------------------------------|
9
+ * | `SessionStatus` | `lib/detection/status-detector.ts` | idle / ready / running / waiting |
10
+ * | `BranchStatus` | `types/sidebar.ts` | idle / ready / running / waiting / generating |
11
+ * | boolean triple | `lib/session/worktree-status-helper.ts` | isRunning / isWaitingForResponse / isProcessing |
12
+ * | `UIPhase` | `types/ui-state.ts` | idle / waiting / receiving / prompt / complete |
13
+ *
14
+ * This module is the single place where those vocabularies are converted into
15
+ * one another, so the correspondence cannot drift between call sites. It is a
16
+ * pure module (type-only imports) and is therefore safe to import from client
17
+ * components.
18
+ *
19
+ * ## The live conversion chain
20
+ *
21
+ * terminal output
22
+ * -> detectSessionStatus() (status-detector, NOT touched here)
23
+ * -> SessionStatus
24
+ * -> sessionStatusToActivityFlags() (this module)
25
+ * -> boolean triple (+ isRunning from tmux session existence)
26
+ * -> deriveCliStatus() (this module)
27
+ * -> BranchStatus (sidebar / header / tab dots)
28
+ *
29
+ * `deriveSessionStatus()` is the reverse edge of that chain: the worktrees API
30
+ * folds the boolean triple back into a `SessionStatus` for its JSON payload.
31
+ *
32
+ * ## Why `UIPhase` has no mapping function here
33
+ *
34
+ * `UIPhase` is a state machine, not a projection of `SessionStatus`: `waiting`
35
+ * -> `receiving` -> `complete` is a sequence driven by user sends and streamed
36
+ * output, and the same `SessionStatus` can legitimately correspond to several
37
+ * phases depending on history. The only edge that is a pure table lookup is
38
+ * "an active prompt was detected -> phase `prompt`", and that edge is already
39
+ * expressed exactly once, by the `SHOW_PROMPT` case of `worktreeUIReducer`
40
+ * (`hooks/useWorktreeUIState.ts`). Re-encoding it here would add an indirection
41
+ * with no second call site, so the reducer stays the single owner.
42
+ */
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.sessionStatusToActivityFlags = sessionStatusToActivityFlags;
45
+ exports.deriveCliStatus = deriveCliStatus;
46
+ exports.deriveSessionStatus = deriveSessionStatus;
47
+ exports.deriveBranchStatus = deriveBranchStatus;
48
+ /**
49
+ * Project a detected `SessionStatus` onto the activity flags.
50
+ *
51
+ * `isRunning` is deliberately NOT derived here: it comes from tmux session
52
+ * existence (plus the Claude health check), which is independent of what the
53
+ * terminal output says.
54
+ *
55
+ * | SessionStatus | isWaitingForResponse | isProcessing |
56
+ * |---------------|----------------------|--------------|
57
+ * | `idle` | false | false |
58
+ * | `ready` | false | false |
59
+ * | `running` | false | true |
60
+ * | `waiting` | true | false |
61
+ */
62
+ function sessionStatusToActivityFlags(status) {
63
+ switch (status) {
64
+ case 'waiting':
65
+ return { isWaitingForResponse: true, isProcessing: false };
66
+ case 'running':
67
+ return { isWaitingForResponse: false, isProcessing: true };
68
+ case 'idle':
69
+ case 'ready':
70
+ return { isWaitingForResponse: false, isProcessing: false };
71
+ default:
72
+ // exhaustive check: SessionStatus extensions cause a compile error [DR2-005]
73
+ status;
74
+ return { isWaitingForResponse: false, isProcessing: false };
75
+ }
76
+ }
77
+ /**
78
+ * Derive `BranchStatus` from one session's boolean triple.
79
+ *
80
+ * Shared by the sidebar (`toBranchItem`), the worktree detail tab dots, the
81
+ * desktop header status row, Sessions and Review.
82
+ *
83
+ * Precedence is waiting > running > ready > idle: a session that is both
84
+ * waiting for an answer and processing is shown as `waiting`, because the user
85
+ * action it needs is the more significant fact.
86
+ *
87
+ * Note that `generating` is never produced here — it exists in `BranchStatus`
88
+ * but has no boolean-triple source. Resolving that asymmetry is out of scope
89
+ * for Issue #1550 (this issue only moves the conversions to one place).
90
+ */
91
+ function deriveCliStatus(toolStatus) {
92
+ if (!toolStatus)
93
+ return 'idle';
94
+ if (toolStatus.isWaitingForResponse)
95
+ return 'waiting';
96
+ if (toolStatus.isProcessing)
97
+ return 'running';
98
+ if (toolStatus.isRunning)
99
+ return 'ready';
100
+ return 'idle';
101
+ }
102
+ /**
103
+ * Fold a worktree-level boolean triple back into a `SessionStatus` for the
104
+ * worktrees API payload — the reverse edge of `sessionStatusToActivityFlags`.
105
+ *
106
+ * Returns `null` (not `'idle'`) when no session is running, because the API
107
+ * contract distinguishes "no session" from "a session that reports idle".
108
+ */
109
+ function deriveSessionStatus(status) {
110
+ if (!status.isSessionRunning)
111
+ return null;
112
+ if (status.isWaitingForResponse)
113
+ return 'waiting';
114
+ if (status.isProcessing)
115
+ return 'running';
116
+ return 'ready';
117
+ }
118
+ /**
119
+ * The `SessionStatus` -> `BranchStatus` correspondence, as one table.
120
+ *
121
+ * Composed from the two conversions the live chain actually uses, so it can
122
+ * never drift from them.
123
+ *
124
+ * | isRunning | SessionStatus | BranchStatus |
125
+ * |-----------|---------------|--------------|
126
+ * | false | (any / null) | `idle` |
127
+ * | true | `null` | `ready` |
128
+ * | true | `idle` | `ready` |
129
+ * | true | `ready` | `ready` |
130
+ * | true | `running` | `running` |
131
+ * | true | `waiting` | `waiting` |
132
+ *
133
+ * The `idle` -> `ready` row is not a mistake: once a tmux session exists, the
134
+ * sidebar shows `ready` (the user can send a message) even while the detector
135
+ * still reports `idle` for the terminal contents.
136
+ */
137
+ function deriveBranchStatus(sessionStatus, isRunning) {
138
+ if (!isRunning)
139
+ return 'idle';
140
+ return deriveCliStatus({
141
+ isRunning: true,
142
+ ...(sessionStatus
143
+ ? sessionStatusToActivityFlags(sessionStatus)
144
+ : { isWaitingForResponse: false, isProcessing: false }),
145
+ });
146
+ }
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ /**
3
+ * Measured Agent discovery matrix (Issue #1246)
4
+ *
5
+ * What a Skill package *declares* about an Agent and what CommandMate has
6
+ * actually *measured* are different claims. `compatibility.ts` carries the
7
+ * declaration; this module carries the measurement, so the UI can show both and
8
+ * never present one as the other.
9
+ *
10
+ * Two axes, not one. A single `native`/`unsupported` value cannot describe
11
+ * Codex CLI 0.145.0, which discovers a Skill from `.agents/skills` but does not
12
+ * expose it as a slash command. Collapsing that into one value would either
13
+ * promise an invocation route that does not exist or deny a discovery that does.
14
+ * So discovery and invocation are recorded separately and only discovery feeds
15
+ * the support verdict; invocation becomes a stated limitation.
16
+ *
17
+ * Pure data and pure functions: no filesystem, no network, no clock. `now` is
18
+ * always an explicit argument so a staleness verdict is reproducible.
19
+ *
20
+ * Evidence provenance: the 2026-07-26 measurements were taken in an isolated
21
+ * environment (dedicated port, dedicated database, a fresh repository with no
22
+ * Skills installed) against CommandMate 0.15.0. They are recorded here rather
23
+ * than re-derived at runtime — CommandMate does not drive a CLI to answer a
24
+ * catalog request.
25
+ *
26
+ * @module lib/skills/compatibility-matrix
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.AGENT_LIMITATION_MESSAGE_KEYS = exports.AGENT_RELOAD_MESSAGE_KEYS = exports.SKILL_EVIDENCE_MAX_AGE_DAYS = exports.AGENT_EVIDENCE_KIND_LABEL_KEYS = exports.AGENT_AXIS_OUTCOME_LABEL_KEYS = exports.AGENT_AXIS_LABEL_KEYS = exports.SKILL_EVIDENCE_KINDS = exports.SKILL_AGENT_AXIS_OUTCOMES = void 0;
30
+ exports.getSkillAgentMatrix = getSkillAgentMatrix;
31
+ exports.findSkillAgentMatrixEntry = findSkillAgentMatrixEntry;
32
+ exports.isAgentMeasured = isAgentMeasured;
33
+ exports.deriveMatrixAgentSupport = deriveMatrixAgentSupport;
34
+ exports.evidenceAgeInDays = evidenceAgeInDays;
35
+ exports.isEvidenceStale = isEvidenceStale;
36
+ exports.unmeasuredAgents = unmeasuredAgents;
37
+ exports.agentsMissingFromMatrix = agentsMissingFromMatrix;
38
+ const types_1 = require("../../lib/cli-tools/types");
39
+ const constants_1 = require("../../lib/skills/constants");
40
+ exports.SKILL_AGENT_AXIS_OUTCOMES = [
41
+ 'verified',
42
+ 'unsupported',
43
+ 'unknown',
44
+ ];
45
+ exports.SKILL_EVIDENCE_KINDS = [
46
+ 'mechanical',
47
+ 'self_report',
48
+ 'not_measured',
49
+ ];
50
+ /** i18n keys naming each axis, shared by UI and CLI (UX-05). */
51
+ exports.AGENT_AXIS_LABEL_KEYS = {
52
+ discovery: 'skills.compatibility.axis.discovery',
53
+ invocation: 'skills.compatibility.axis.invocation',
54
+ };
55
+ exports.AGENT_AXIS_OUTCOME_LABEL_KEYS = {
56
+ verified: 'skills.compatibility.axisOutcome.verified',
57
+ unsupported: 'skills.compatibility.axisOutcome.unsupported',
58
+ unknown: 'skills.compatibility.axisOutcome.unknown',
59
+ };
60
+ exports.AGENT_EVIDENCE_KIND_LABEL_KEYS = {
61
+ mechanical: 'skills.compatibility.evidenceKind.mechanical',
62
+ self_report: 'skills.compatibility.evidenceKind.selfReport',
63
+ not_measured: 'skills.compatibility.evidenceKind.notMeasured',
64
+ };
65
+ /**
66
+ * How long a measurement stays quotable before the UI flags it.
67
+ *
68
+ * Agent CLIs ship far faster than CommandMate re-measures them, so evidence
69
+ * that is merely old is presented as old rather than silently trusted.
70
+ */
71
+ exports.SKILL_EVIDENCE_MAX_AGE_DAYS = 180;
72
+ const NOT_MEASURED_AXIS = {
73
+ outcome: 'unknown',
74
+ evidenceKind: 'not_measured',
75
+ labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.unknown,
76
+ evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.not_measured,
77
+ limitationKey: null,
78
+ };
79
+ const NOT_MEASURED_SKIP_REASON_KEY = 'skills.compatibility.skipReason.notMeasured';
80
+ /** Reload guidance keys. Keyed by behavior, not by Agent, so they stay reusable. */
81
+ exports.AGENT_RELOAD_MESSAGE_KEYS = {
82
+ SESSION_RESTART: 'skills.compatibility.reload.sessionRestart',
83
+ SESSION_RESTART_NO_SLASH: 'skills.compatibility.reload.sessionRestartNoSlash',
84
+ UNKNOWN: 'skills.compatibility.reload.unknown',
85
+ };
86
+ /** Known limitation keys attached to an axis outcome. */
87
+ exports.AGENT_LIMITATION_MESSAGE_KEYS = {
88
+ NO_SLASH_COMMAND: 'skills.compatibility.limitation.noSlashCommand',
89
+ };
90
+ /** Evidence reference for the 2026-07-26 isolated-environment measurement. */
91
+ const G4_EVIDENCE_SOURCE = 'https://github.com/Kewton/CommandMate/issues/1513#issuecomment-5083878264';
92
+ const MEASURED_DATE_2026_07_26 = '2026-07-26';
93
+ function unmeasuredEntry(agent) {
94
+ return {
95
+ agent,
96
+ discoveryRoots: [],
97
+ discovery: NOT_MEASURED_AXIS,
98
+ invocation: NOT_MEASURED_AXIS,
99
+ testedVersion: null,
100
+ testedDate: null,
101
+ evidenceSource: null,
102
+ reloadKey: exports.AGENT_RELOAD_MESSAGE_KEYS.UNKNOWN,
103
+ skipReasonKey: NOT_MEASURED_SKIP_REASON_KEY,
104
+ };
105
+ }
106
+ // =============================================================================
107
+ // The matrix
108
+ // =============================================================================
109
+ /**
110
+ * Every Agent CommandMate knows about, measured or not.
111
+ *
112
+ * The unmeasured entries are listed rather than omitted: an Agent missing from
113
+ * the table would render as no statement at all, which a reader completes as
114
+ * "presumably fine". An explicit `unknown` with a skip reason is the honest
115
+ * shape of "we did not test this".
116
+ */
117
+ const AGENT_DISCOVERY_MATRIX = [
118
+ {
119
+ agent: 'claude',
120
+ // Measured to read `.claude/skills` and *not* `.agents/skills`. The official
121
+ // catalog's older entries credited `.agents/skills` for Claude support; the
122
+ // conclusion was right and the reason was wrong — it works because #1460
123
+ // installs into `.claude/skills` too.
124
+ discoveryRoots: [constants_1.SKILL_CLAUDE_INSTALL_ROOT_PREFIX],
125
+ discovery: {
126
+ outcome: 'verified',
127
+ evidenceKind: 'mechanical',
128
+ labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.verified,
129
+ evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.mechanical,
130
+ limitationKey: null,
131
+ },
132
+ invocation: {
133
+ outcome: 'verified',
134
+ evidenceKind: 'mechanical',
135
+ labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.verified,
136
+ evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.mechanical,
137
+ limitationKey: null,
138
+ },
139
+ testedVersion: '2.1.220',
140
+ testedDate: MEASURED_DATE_2026_07_26,
141
+ evidenceSource: G4_EVIDENCE_SOURCE,
142
+ reloadKey: exports.AGENT_RELOAD_MESSAGE_KEYS.SESSION_RESTART,
143
+ skipReasonKey: null,
144
+ },
145
+ {
146
+ agent: 'codex',
147
+ discoveryRoots: [constants_1.SKILL_INSTALL_ROOT_PREFIX],
148
+ discovery: {
149
+ // The Agent named the absolute SKILL.md path under `.agents/skills` when
150
+ // asked without tools. That is evidence, and it is the Agent describing
151
+ // itself, so it is recorded as a self report rather than as a match.
152
+ outcome: 'verified',
153
+ evidenceKind: 'self_report',
154
+ labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.verified,
155
+ evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.self_report,
156
+ limitationKey: null,
157
+ },
158
+ invocation: {
159
+ // Ruled out as a placement problem by control: `/mo` matched `/model`, so
160
+ // the palette works, and a Skill already sitting in `~/.codex/skills` did
161
+ // not match either. This CLI version does not expose Skills as slash
162
+ // commands wherever they are placed.
163
+ outcome: 'unsupported',
164
+ evidenceKind: 'mechanical',
165
+ labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.unsupported,
166
+ evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.mechanical,
167
+ limitationKey: exports.AGENT_LIMITATION_MESSAGE_KEYS.NO_SLASH_COMMAND,
168
+ },
169
+ testedVersion: '0.145.0',
170
+ testedDate: MEASURED_DATE_2026_07_26,
171
+ evidenceSource: G4_EVIDENCE_SOURCE,
172
+ reloadKey: exports.AGENT_RELOAD_MESSAGE_KEYS.SESSION_RESTART_NO_SLASH,
173
+ skipReasonKey: null,
174
+ },
175
+ unmeasuredEntry('gemini'),
176
+ unmeasuredEntry('vibe-local'),
177
+ unmeasuredEntry('opencode'),
178
+ unmeasuredEntry('copilot'),
179
+ // CommandMate's own slash palette serves `.agents/skills` entries to
180
+ // antigravity sessions (#1504). That is CommandMate injecting a command, not
181
+ // the Agent discovering a Skill, so it is not evidence for this table.
182
+ unmeasuredEntry('antigravity'),
183
+ ];
184
+ /** The measured matrix, in CLI-tool declaration order. */
185
+ function getSkillAgentMatrix() {
186
+ return AGENT_DISCOVERY_MATRIX;
187
+ }
188
+ /** The entry for one Agent, or null when the id is not a known CLI tool. */
189
+ function findSkillAgentMatrixEntry(agent) {
190
+ return AGENT_DISCOVERY_MATRIX.find((entry) => entry.agent === agent) ?? null;
191
+ }
192
+ /** Whether CommandMate has any measurement at all for this Agent. */
193
+ function isAgentMeasured(entry) {
194
+ return entry.discovery.evidenceKind !== 'not_measured';
195
+ }
196
+ /**
197
+ * The four-valued support verdict implied by the measurement.
198
+ *
199
+ * Only the discovery axis decides it. An Agent that finds and can run a Skill
200
+ * supports it natively even when its palette does not list it, so a failed
201
+ * invocation axis is reported as a limitation instead of demoting the verdict
202
+ * to `unsupported` — which would read as "this will not work".
203
+ *
204
+ * `commandmate_runtime` is never produced here: the Runtime is not shipped, and
205
+ * inventing that verdict would promise a fallback that does not exist.
206
+ */
207
+ function deriveMatrixAgentSupport(entry) {
208
+ switch (entry.discovery.outcome) {
209
+ case 'verified':
210
+ return 'native';
211
+ case 'unsupported':
212
+ return 'unsupported';
213
+ case 'unknown':
214
+ return 'unknown';
215
+ }
216
+ }
217
+ // =============================================================================
218
+ // Staleness
219
+ // =============================================================================
220
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
221
+ const MEASURED_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
222
+ /**
223
+ * Whole days between the measurement and `now`, or null when unmeasured or when
224
+ * the recorded date is unusable. A measurement dated in the future yields 0
225
+ * rather than a negative age.
226
+ */
227
+ function evidenceAgeInDays(entry, now) {
228
+ if (entry.testedDate === null || !MEASURED_DATE_PATTERN.test(entry.testedDate))
229
+ return null;
230
+ const measured = Date.parse(`${entry.testedDate}T00:00:00Z`);
231
+ const current = now.getTime();
232
+ if (Number.isNaN(measured) || Number.isNaN(current))
233
+ return null;
234
+ return Math.max(0, Math.floor((current - measured) / MS_PER_DAY));
235
+ }
236
+ /**
237
+ * Whether the measurement is old enough to warn about.
238
+ *
239
+ * An unmeasured Agent is not stale — it is unknown, which the UI already states
240
+ * more strongly. Marking it stale as well would imply a measurement had expired.
241
+ */
242
+ function isEvidenceStale(entry, now, maxAgeDays = exports.SKILL_EVIDENCE_MAX_AGE_DAYS) {
243
+ const age = evidenceAgeInDays(entry, now);
244
+ return age !== null && age > maxAgeDays;
245
+ }
246
+ // =============================================================================
247
+ // Coverage
248
+ // =============================================================================
249
+ /** CLI tools with no measurement, in matrix order. */
250
+ function unmeasuredAgents() {
251
+ return AGENT_DISCOVERY_MATRIX.filter((entry) => !isAgentMeasured(entry)).map((entry) => entry.agent);
252
+ }
253
+ /** CLI tool ids the matrix does not mention. Empty in a consistent build. */
254
+ function agentsMissingFromMatrix() {
255
+ return types_1.CLI_TOOL_IDS.filter((id) => findSkillAgentMatrixEntry(id) === null);
256
+ }