commandmate 0.30.2 → 0.31.1

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 (442) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +151 -151
  3. package/.next/app-path-routes-manifest.json +25 -25
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/versions/route_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 +3 -3
  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 +4 -4
  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/capabilities/route.js +1 -1
  38. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  47. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  48. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  50. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  51. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  53. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  54. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  65. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  66. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/repositories/clone/route.js +1 -1
  68. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  69. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/restore/route.js +1 -1
  72. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  73. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/route.js +1 -1
  75. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/scan/route.js +1 -1
  78. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  79. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/sync/route.js +1 -1
  81. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  85. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  86. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route.js +1 -1
  90. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/skills/route.js +1 -1
  95. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/slash-commands/route.js +1 -1
  97. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  107. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  110. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  113. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  150. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  153. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  156. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  175. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +4 -3
  177. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/schedules/route.js +4 -3
  180. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
  186. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/route.js +1 -1
  221. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/chat/page.js +2 -2
  224. package/.next/server/app/chat/page.js.nft.json +1 -1
  225. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  227. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/more/page.js +2 -2
  229. package/.next/server/app/more/page.js.nft.json +1 -1
  230. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  231. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  232. package/.next/server/app/page.js +1 -1
  233. package/.next/server/app/page.js.nft.json +1 -1
  234. package/.next/server/app/page_client-reference-manifest.js +1 -1
  235. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/repositories/page.js +2 -2
  237. package/.next/server/app/repositories/page.js.nft.json +1 -1
  238. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  239. package/.next/server/app/review/page.js +1 -1
  240. package/.next/server/app/review/page.js.nft.json +1 -1
  241. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/sessions/page.js +1 -1
  243. package/.next/server/app/sessions/page.js.nft.json +1 -1
  244. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  245. package/.next/server/app/skills/[skillId]/page.js +2 -2
  246. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  247. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/skills/installed/page.js +2 -2
  249. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  250. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  251. package/.next/server/app/skills/page.js +1 -1
  252. package/.next/server/app/skills/page.js.nft.json +1 -1
  253. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  254. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  255. package/.next/server/app/worktrees/[id]/page.js +11 -11
  256. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  257. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  258. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  259. package/.next/server/app-paths-manifest.json +25 -25
  260. package/.next/server/chunks/1058.js +1 -1
  261. package/.next/server/chunks/1068.js +1 -1
  262. package/.next/server/chunks/1262.js +1 -1
  263. package/.next/server/chunks/1886.js +3 -3
  264. package/.next/server/chunks/1990.js +103 -0
  265. package/.next/server/chunks/2119.js +1 -1
  266. package/.next/server/chunks/2328.js +1 -1
  267. package/.next/server/chunks/2404.js +1 -1
  268. package/.next/server/chunks/2445.js +1 -1
  269. package/.next/server/chunks/261.js +1 -1
  270. package/.next/server/chunks/3123.js +1 -1
  271. package/.next/server/chunks/3241.js +1 -1
  272. package/.next/server/chunks/3480.js +5 -4
  273. package/.next/server/chunks/4299.js +1 -1
  274. package/.next/server/chunks/4393.js +1 -1
  275. package/.next/server/chunks/4443.js +1 -5
  276. package/.next/server/chunks/4802.js +1 -0
  277. package/.next/server/chunks/5017.js +1 -1
  278. package/.next/server/chunks/5043.js +1 -1
  279. package/.next/server/chunks/5164.js +1 -1
  280. package/.next/server/chunks/552.js +2 -2
  281. package/.next/server/chunks/6072.js +1 -1
  282. package/.next/server/chunks/6130.js +1 -1
  283. package/.next/server/chunks/663.js +4 -3
  284. package/.next/server/chunks/6894.js +2 -2
  285. package/.next/server/chunks/7187.js +1 -0
  286. package/.next/server/chunks/7472.js +1 -1
  287. package/.next/server/chunks/{880.js → 7859.js} +6 -6
  288. package/.next/server/chunks/7905.js +1 -1
  289. package/.next/server/chunks/8800.js +2 -2
  290. package/.next/server/chunks/8918.js +7 -0
  291. package/.next/server/chunks/9123.js +2 -2
  292. package/.next/server/chunks/9130.js +4 -4
  293. package/.next/server/chunks/9627.js +1 -1
  294. package/.next/server/chunks/9696.js +1 -1
  295. package/.next/server/chunks/9798.js +1 -1
  296. package/.next/server/middleware-manifest.json +5 -5
  297. package/.next/server/pages/500.html +1 -1
  298. package/.next/server/pages-manifest.json +1 -1
  299. package/.next/server/server-reference-manifest.json +1 -1
  300. package/.next/static/chunks/1783-11c9b4d8a52ebd91.js +1 -0
  301. package/.next/static/chunks/4718-46e1d2f07c8423ba.js +1 -0
  302. package/.next/static/chunks/6022-2fa0b5a82d4ce7b6.js +1 -0
  303. package/.next/static/chunks/{5229-6c89475b61bd2c8b.js → 6170-951b9f5fe6b4b3b5.js} +1 -1
  304. package/.next/static/chunks/app/chat/{page-9aa2011410895b0d.js → page-37d7615d17d7e2a0.js} +1 -1
  305. package/.next/static/chunks/app/layout-4c2f21e3f653ee4c.js +1 -0
  306. package/.next/static/chunks/app/more/{page-333bba1c8bbc9c11.js → page-353a3924e6d7968e.js} +1 -1
  307. package/.next/static/chunks/app/{page-214f7ffa13a0cf10.js → page-c2bf871d953a1d6f.js} +1 -1
  308. package/.next/static/chunks/app/repositories/{page-4951cac905e50224.js → page-7d0f26df0537254c.js} +1 -1
  309. package/.next/static/chunks/app/review/{page-a0899b2d285318c3.js → page-e3f141b2829973e9.js} +1 -1
  310. package/.next/static/chunks/app/sessions/{page-fb36145ec732092a.js → page-53f188ed9ca49e5f.js} +1 -1
  311. package/.next/static/chunks/app/skills/[skillId]/{page-9099e26b60442873.js → page-80569b720aea59cc.js} +1 -1
  312. package/.next/static/chunks/app/skills/installed/{page-182e32368696d824.js → page-dbd2690ad72da95b.js} +1 -1
  313. package/.next/static/chunks/app/skills/{page-d3fdc88239ebe0ab.js → page-dacd36f9c11aa7da.js} +1 -1
  314. package/.next/static/chunks/app/worktrees/[id]/page-64d4ec3051971760.js +1 -0
  315. package/.next/static/css/5c13ea243dfdcb66.css +1 -0
  316. package/.next/trace +13 -13
  317. package/README.md +37 -11
  318. package/dist/cli/commands/attach.d.ts +50 -0
  319. package/dist/cli/commands/attach.d.ts.map +1 -0
  320. package/dist/cli/commands/attach.js +204 -0
  321. package/dist/cli/commands/capture.d.ts.map +1 -1
  322. package/dist/cli/commands/capture.js +114 -0
  323. package/dist/cli/commands/instances.d.ts.map +1 -1
  324. package/dist/cli/commands/instances.js +23 -2
  325. package/dist/cli/commands/ls.d.ts.map +1 -1
  326. package/dist/cli/commands/ls.js +41 -1
  327. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  328. package/dist/cli/config/cli-dependencies.js +34 -0
  329. package/dist/cli/program.d.ts.map +1 -1
  330. package/dist/cli/program.js +5 -0
  331. package/dist/cli/types/index.d.ts +36 -0
  332. package/dist/cli/types/index.d.ts.map +1 -1
  333. package/dist/config/tmux-pane-config.d.ts +153 -0
  334. package/dist/config/tmux-pane-config.d.ts.map +1 -0
  335. package/dist/config/tmux-pane-config.js +172 -0
  336. package/dist/lib/cli-tools/session-name.d.ts +44 -0
  337. package/dist/lib/cli-tools/session-name.d.ts.map +1 -0
  338. package/dist/lib/cli-tools/session-name.js +57 -0
  339. package/dist/lib/cli-tools/types.d.ts +1 -1
  340. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  341. package/dist/lib/cli-tools/types.js +6 -1
  342. package/dist/lib/cli-tools/validation.d.ts +34 -0
  343. package/dist/lib/cli-tools/validation.d.ts.map +1 -0
  344. package/dist/lib/cli-tools/validation.js +41 -0
  345. package/dist/lib/detection/status-reason.d.ts +18 -0
  346. package/dist/lib/detection/status-reason.d.ts.map +1 -1
  347. package/dist/lib/detection/status-reason.js +18 -0
  348. package/dist/lib/detection/tools/verified-against.d.ts +57 -7
  349. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  350. package/dist/lib/detection/tools/verified-against.js +59 -8
  351. package/dist/lib/detection/version-probes.d.ts +26 -5
  352. package/dist/lib/detection/version-probes.d.ts.map +1 -1
  353. package/dist/lib/detection/version-probes.js +28 -6
  354. package/dist/lib/session/tmux-session-surface.d.ts +369 -0
  355. package/dist/lib/session/tmux-session-surface.d.ts.map +1 -0
  356. package/dist/lib/session/tmux-session-surface.js +525 -0
  357. package/dist/server/src/config/cli-tool-timing-config.js +12 -1
  358. package/dist/server/src/config/detection-evidence-config.js +5 -0
  359. package/dist/server/src/config/schedule-config.js +28 -1
  360. package/dist/server/src/lib/cli-tools/antigravity.js +2 -2
  361. package/dist/server/src/lib/cli-tools/base.js +13 -8
  362. package/dist/server/src/lib/cli-tools/claude.js +20 -0
  363. package/dist/server/src/lib/cli-tools/codex.js +205 -61
  364. package/dist/server/src/lib/cli-tools/command-code.js +349 -0
  365. package/dist/server/src/lib/cli-tools/composer-spec.js +6 -0
  366. package/dist/server/src/lib/cli-tools/copilot.js +2 -2
  367. package/dist/server/src/lib/cli-tools/gemini.js +2 -2
  368. package/dist/server/src/lib/cli-tools/graceful-exit.js +16 -1
  369. package/dist/server/src/lib/cli-tools/index.js +4 -1
  370. package/dist/server/src/lib/cli-tools/install-hints.js +131 -0
  371. package/dist/server/src/lib/cli-tools/liveness-spec.js +18 -0
  372. package/dist/server/src/lib/cli-tools/manager.js +2 -0
  373. package/dist/server/src/lib/cli-tools/opencode.js +2 -2
  374. package/dist/server/src/lib/cli-tools/start-availability.js +18 -11
  375. package/dist/server/src/lib/cli-tools/types.js +6 -1
  376. package/dist/server/src/lib/cli-tools/vibe-local.js +2 -2
  377. package/dist/server/src/lib/cmate-parser.js +6 -0
  378. package/dist/server/src/lib/detection/cli-patterns.js +441 -8
  379. package/dist/server/src/lib/detection/opencode-modal-overlay.js +66 -100
  380. package/dist/server/src/lib/detection/selection-shape.js +341 -0
  381. package/dist/server/src/lib/detection/sgr-background.js +210 -0
  382. package/dist/server/src/lib/detection/status-detector.js +6 -0
  383. package/dist/server/src/lib/detection/status-reason.js +18 -0
  384. package/dist/server/src/lib/detection/tools/antigravity/detect.js +38 -15
  385. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +392 -0
  386. package/dist/server/src/lib/detection/tools/codex/detect.js +83 -2
  387. package/dist/server/src/lib/detection/tools/command-code/detect.js +159 -0
  388. package/dist/server/src/lib/detection/tools/registry.js +6 -4
  389. package/dist/server/src/lib/detection/tools/verified-against.js +59 -8
  390. package/dist/server/src/lib/detection/version-probes.js +28 -6
  391. package/dist/server/src/lib/hooks/sources/antigravity/history.js +77 -16
  392. package/dist/server/src/lib/hooks/sources/claude/history.js +94 -18
  393. package/dist/server/src/lib/hooks/sources/codex/history.js +84 -15
  394. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +130 -17
  395. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +145 -0
  396. package/dist/server/src/lib/hooks/sources/command-code/history.js +865 -0
  397. package/dist/server/src/lib/hooks/sources/command-code/hooks-config.js +390 -0
  398. package/dist/server/src/lib/hooks/sources/command-code/source.js +290 -0
  399. package/dist/server/src/lib/hooks/sources/command-code/tool-id.js +18 -0
  400. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +604 -0
  401. package/dist/server/src/lib/hooks/sources/index.js +3 -1
  402. package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -3
  403. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +24 -28
  404. package/dist/server/src/lib/hooks/sources/registry.js +4 -0
  405. package/dist/server/src/lib/hooks/sources/turn-body.js +77 -19
  406. package/dist/server/src/lib/job-executor.js +12 -0
  407. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +6 -0
  408. package/dist/server/src/lib/polling/response-checker.js +112 -7
  409. package/dist/server/src/lib/polling/structured-history-gate.js +15 -8
  410. package/dist/server/src/lib/realtime/types.js +15 -5
  411. package/dist/server/src/lib/response-cleaner.js +24 -1
  412. package/dist/server/src/lib/response-extractor.js +11 -0
  413. package/dist/server/src/lib/session/claude-executor.js +223 -4
  414. package/dist/server/src/lib/session/cli-session.js +52 -0
  415. package/dist/server/src/lib/session/tmux-session-surface.js +525 -0
  416. package/dist/server/src/lib/skills/compatibility-matrix.js +117 -1
  417. package/dist/server/src/lib/tmux/geometry-delegation.js +143 -0
  418. package/dist/server/src/lib/tmux/read-mode-pager.js +76 -10
  419. package/dist/server/src/lib/tmux/read-mode.js +44 -2
  420. package/dist/server/src/lib/tmux/session-hook-scripts.js +249 -0
  421. package/dist/server/src/lib/tmux/session-hooks.js +122 -0
  422. package/dist/server/src/lib/tmux/session-status-options.js +213 -0
  423. package/dist/server/src/lib/tmux/tmux.js +79 -2
  424. package/dist/server/src/lib/version-checker.js +110 -0
  425. package/dist/server/src/lib/ws-server.js +16 -10
  426. package/dist/server/src/types/agent-transcript.js +73 -1
  427. package/dist/server/src/types/terminal-keys.js +131 -3
  428. package/dist/types/terminal-keys.d.ts +100 -3
  429. package/dist/types/terminal-keys.d.ts.map +1 -1
  430. package/dist/types/terminal-keys.js +131 -3
  431. package/package.json +1 -1
  432. package/.next/server/chunks/3099.js +0 -5
  433. package/.next/server/chunks/7824.js +0 -1
  434. package/.next/server/chunks/848.js +0 -1
  435. package/.next/static/chunks/3916-0e929d089282dc5d.js +0 -1
  436. package/.next/static/chunks/6022-7a7d1760fc9814c7.js +0 -1
  437. package/.next/static/chunks/6381-147dde2a967e9458.js +0 -1
  438. package/.next/static/chunks/app/layout-6a26ea22d5cf03dc.js +0 -1
  439. package/.next/static/chunks/app/worktrees/[id]/page-2f73d69187936627.js +0 -1
  440. package/.next/static/css/23f9c40ecc458c77.css +0 -1
  441. /package/.next/static/{QXxQbXWoo7ldUyOcv7PCZ → 60mm4_QBuFtFTfo5UMyKU}/_buildManifest.js +0 -0
  442. /package/.next/static/{QXxQbXWoo7ldUyOcv7PCZ → 60mm4_QBuFtFTfo5UMyKU}/_ssgManifest.js +0 -0
@@ -24,7 +24,7 @@ exports.isImageCapableCLITool = isImageCapableCLITool;
24
24
  * T2.1: Single source of truth for CLI tool IDs
25
25
  * CLIToolType is derived from this constant (DRY principle)
26
26
  */
27
- exports.CLI_TOOL_IDS = ['claude', 'codex', 'gemini', 'vibe-local', 'opencode', 'copilot', 'antigravity'];
27
+ exports.CLI_TOOL_IDS = ['claude', 'codex', 'gemini', 'vibe-local', 'opencode', 'copilot', 'antigravity', 'command-code'];
28
28
  /**
29
29
  * CLI tools that render inside the terminal's alternate screen (Issue #1268).
30
30
  *
@@ -44,6 +44,10 @@ const ALTERNATE_SCREEN_CLI_TOOLS = new Set([
44
44
  'claude',
45
45
  'opencode',
46
46
  'copilot',
47
+ // Issue #2250: `command-code` is deliberately absent. Command Code renders
48
+ // INLINE -- measured on 1.40.1, `#{alternate_on}` is 0 and the pane keeps its
49
+ // scrollback -- so its captured line count really is a monotonic cursor, the
50
+ // way codex's and agy's are.
47
51
  ]);
48
52
  /**
49
53
  * Whether a CLI tool renders in the terminal's alternate screen, making the
@@ -190,6 +194,7 @@ exports.CLI_TOOL_DISPLAY_NAMES = {
190
194
  opencode: 'OpenCode',
191
195
  copilot: 'Copilot',
192
196
  antigravity: 'Antigravity',
197
+ 'command-code': 'Command Code',
193
198
  };
194
199
  /**
195
200
  * Check if a string is a valid CLIToolType
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Session name validation module
3
+ * Issue #4: T2.2 - Security validation for session names (MF4-001)
4
+ *
5
+ * This module provides validation functions to prevent command injection
6
+ * attacks through session names used in tmux commands.
7
+ */
8
+ /**
9
+ * Session name pattern
10
+ * Only allows alphanumeric characters, underscores, and hyphens
11
+ * This prevents command injection through shell special characters
12
+ *
13
+ * Pattern breakdown:
14
+ * - ^ : Start of string
15
+ * - [a-zA-Z0-9_-] : Allowed characters (alphanumeric, underscore, hyphen)
16
+ * - + : One or more characters (empty strings not allowed)
17
+ * - $ : End of string
18
+ */
19
+ export declare const SESSION_NAME_PATTERN: RegExp;
20
+ /**
21
+ * Validate session name format
22
+ * Throws an error if the session name contains invalid characters
23
+ *
24
+ * @param sessionName - Session name to validate
25
+ * @throws Error if session name is invalid
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * validateSessionName('mcbd-claude-test'); // OK
30
+ * validateSessionName('test;rm -rf'); // Throws Error
31
+ * ```
32
+ */
33
+ export declare function validateSessionName(sessionName: string): void;
34
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/lib/cli-tools/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,QAAqB,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAI7D"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /**
3
+ * Session name validation module
4
+ * Issue #4: T2.2 - Security validation for session names (MF4-001)
5
+ *
6
+ * This module provides validation functions to prevent command injection
7
+ * attacks through session names used in tmux commands.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SESSION_NAME_PATTERN = void 0;
11
+ exports.validateSessionName = validateSessionName;
12
+ /**
13
+ * Session name pattern
14
+ * Only allows alphanumeric characters, underscores, and hyphens
15
+ * This prevents command injection through shell special characters
16
+ *
17
+ * Pattern breakdown:
18
+ * - ^ : Start of string
19
+ * - [a-zA-Z0-9_-] : Allowed characters (alphanumeric, underscore, hyphen)
20
+ * - + : One or more characters (empty strings not allowed)
21
+ * - $ : End of string
22
+ */
23
+ exports.SESSION_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
24
+ /**
25
+ * Validate session name format
26
+ * Throws an error if the session name contains invalid characters
27
+ *
28
+ * @param sessionName - Session name to validate
29
+ * @throws Error if session name is invalid
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * validateSessionName('mcbd-claude-test'); // OK
34
+ * validateSessionName('test;rm -rf'); // Throws Error
35
+ * ```
36
+ */
37
+ function validateSessionName(sessionName) {
38
+ if (!exports.SESSION_NAME_PATTERN.test(sessionName)) {
39
+ throw new Error(`Invalid session name format: ${sessionName}`);
40
+ }
41
+ }
@@ -43,6 +43,24 @@ export declare const STATUS_REASON: {
43
43
  /** Issue #1893: opencode's permission dialog — an arrow-key button strip. */
44
44
  readonly OPENCODE_PERMISSION_PROMPT: "opencode_permission_prompt";
45
45
  readonly CLAUDE_SELECTION_LIST: "claude_selection_list";
46
+ /**
47
+ * Issue #2297: Command Code's own picker (`/model`, and every overlay that
48
+ * shares its footer).
49
+ *
50
+ * Distinct from {@link STATUS_REASON.CLAUDE_SELECTION_LIST} even though
51
+ * Command Code renders claude's inline TUI, because the two footers are not
52
+ * the same sentence and neither pattern matches the other's screen: claude
53
+ * prints `Enter to set as default` / `Enter to confirm · Esc`, Command Code
54
+ * prints a lower-case `enter to select · esc to cancel` hint bar. Reporting
55
+ * the claude token for a Command Code frame would tell an operator reading
56
+ * `capture --json` that a rule they can go and read had fired, when it had not.
57
+ *
58
+ * Before this reason existed the picker reached the `default` floor, which is
59
+ * `isUnclassifiedActive` — and the chat surface answers THAT with the `1`-`9`
60
+ * / `y` / `n` answer keys, every one of which types into the picker's
61
+ * `Type to search models...` box.
62
+ */
63
+ readonly COMMAND_CODE_SELECTION_LIST: "command_code_selection_list";
46
64
  readonly COPILOT_SELECTION_LIST: "copilot_selection_list";
47
65
  readonly CODEX_SELECTION_LIST: "codex_selection_list";
48
66
  /** Issue #1017: Codex pager / edit-previous (transcript) mode. */
@@ -1 +1 @@
1
- {"version":3,"file":"status-reason.d.ts","sourceRoot":"","sources":["../../../src/lib/detection/status-reason.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;IAKxB;;;;;;;;;;;;;;;;;;OAkBG;;IAEH,6EAA6E;;;;;IAK7E,kEAAkE;;IAElE,6EAA6E;;;;;;IAM7E;;;;;;;;;;;;;;;OAeG;;IAEH;;;;;;;;;;;;;;;OAeG;;;CAGK,CAAC"}
1
+ {"version":3,"file":"status-reason.d.ts","sourceRoot":"","sources":["../../../src/lib/detection/status-reason.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;IAKxB;;;;;;;;;;;;;;;;;;OAkBG;;IAEH,6EAA6E;;;IAG7E;;;;;;;;;;;;;;;;OAgBG;;;;IAIH,kEAAkE;;IAElE,6EAA6E;;;;;;IAM7E;;;;;;;;;;;;;;;OAeG;;IAEH;;;;;;;;;;;;;;;OAeG;;;CAGK,CAAC"}
@@ -46,6 +46,24 @@ exports.STATUS_REASON = {
46
46
  /** Issue #1893: opencode's permission dialog — an arrow-key button strip. */
47
47
  OPENCODE_PERMISSION_PROMPT: 'opencode_permission_prompt',
48
48
  CLAUDE_SELECTION_LIST: 'claude_selection_list',
49
+ /**
50
+ * Issue #2297: Command Code's own picker (`/model`, and every overlay that
51
+ * shares its footer).
52
+ *
53
+ * Distinct from {@link STATUS_REASON.CLAUDE_SELECTION_LIST} even though
54
+ * Command Code renders claude's inline TUI, because the two footers are not
55
+ * the same sentence and neither pattern matches the other's screen: claude
56
+ * prints `Enter to set as default` / `Enter to confirm · Esc`, Command Code
57
+ * prints a lower-case `enter to select · esc to cancel` hint bar. Reporting
58
+ * the claude token for a Command Code frame would tell an operator reading
59
+ * `capture --json` that a rule they can go and read had fired, when it had not.
60
+ *
61
+ * Before this reason existed the picker reached the `default` floor, which is
62
+ * `isUnclassifiedActive` — and the chat surface answers THAT with the `1`-`9`
63
+ * / `y` / `n` answer keys, every one of which types into the picker's
64
+ * `Type to search models...` box.
65
+ */
66
+ COMMAND_CODE_SELECTION_LIST: 'command_code_selection_list',
49
67
  COPILOT_SELECTION_LIST: 'copilot_selection_list',
50
68
  CODEX_SELECTION_LIST: 'codex_selection_list',
51
69
  /** Issue #1017: Codex pager / edit-previous (transcript) mode. */
@@ -36,10 +36,21 @@ export declare const CODEX_VERIFIED_AGAINST: {
36
36
  readonly capturedAt: "2026-08-15";
37
37
  readonly paneGeometry: "200x1000";
38
38
  };
39
- /** copilot-cli these rules were read off (#1885 / #1895 fixtures). */
39
+ /**
40
+ * copilot-cli these rules were read off (#1885 / #1895 / #2269 fixtures).
41
+ *
42
+ * Bumped from 1.0.80 because the frames were RE-CAPTURED and the rules CHANGED:
43
+ * 1.0.82 redrew the composer's fence (`─` rules became a `╻▄` / `╹▀` half-block
44
+ * frame), dropped the `❯` from the composer in favour of the frame's own `┃`
45
+ * edge, boxed the transcript's echoed prompt between two more half-block
46
+ * dividers, and put a file-type badge in front of most tool rows' verbs. The
47
+ * frames are `tests/unit/lib/detection/fixtures/copilot-live-2269/`, captured on
48
+ * a private tmux socket at the production geometry; the 1.0.80 frames stay where
49
+ * they are and the rules still answer for both builds.
50
+ */
40
51
  export declare const COPILOT_VERIFIED_AGAINST: {
41
- readonly version: "1.0.80";
42
- readonly capturedAt: "2026-08-21";
52
+ readonly version: "1.0.82";
53
+ readonly capturedAt: "2026-09-04";
43
54
  readonly paneGeometry: "200x1000";
44
55
  };
45
56
  /**
@@ -59,11 +70,50 @@ export declare const OPENCODE_VERIFIED_AGAINST: {
59
70
  readonly capturedAt: "2026-08-26";
60
71
  readonly paneGeometry: "80x200";
61
72
  };
62
- /** agy these rules were read off (#988 / #995). */
73
+ /**
74
+ * agy these rules were read off (#988 / #995 footer + selection rules, re-read
75
+ * against the #2270 live panes).
76
+ *
77
+ * Bumped from `0.4.x` / `2026-07-30` / `inline` because the frames were
78
+ * RE-CAPTURED, not because the binary moved: #2270 drove agy 1.1.25 on a private
79
+ * tmux socket at the production geometry and kept both panes inline in
80
+ * `tests/unit/status-detector-selection.test.ts`
81
+ * (`AGY_1125_PERMISSION_PANE`, `AGY_1125_SWITCH_MODEL_PANE`) under the banner
82
+ * `Antigravity CLI 1.1.25`, trailing pane padding included. The
83
+ * `Do you want to proceed?` + `N. label` rules were measured off those frames,
84
+ * and `ANTIGRAVITY_SELECTION_LIST_PATTERN` (#995 / #997) was re-checked against
85
+ * them and left unchanged.
86
+ *
87
+ * `paneGeometry` leaves `inline` because the 1.1.25 permission dialog draws no
88
+ * composer row at all — it reproduces only at the 200x1000 pane the server
89
+ * captures, and a fixture without the ~970 blank padding rows exercises a
90
+ * different `lastLines` slice than production does. That is a statement about
91
+ * the capture condition, not about agy: the scrollback-retained rendering the
92
+ * `afterThinking` footer rules rest on (#988) is unchanged, and the 1.1.25
93
+ * dialog still ends on `esc to cancel`.
94
+ *
95
+ * What this stamp does NOT claim: #2270 captured `waiting` frames only, so the
96
+ * idle (`? for shortcuts`) and generating (spinner) branches are carried over
97
+ * from the 0.4 captures rather than re-measured. A live IDLE 1.1.25 frame is
98
+ * still uncaptured — see the `readIdleEvidence` note in `antigravity/detect.ts`.
99
+ */
63
100
  export declare const ANTIGRAVITY_VERIFIED_AGAINST: {
64
- readonly version: "0.4.x";
65
- readonly capturedAt: "2026-07-30";
66
- readonly paneGeometry: "inline";
101
+ readonly version: "1.1.25";
102
+ readonly capturedAt: "2026-09-04";
103
+ readonly paneGeometry: "200x1000";
104
+ };
105
+ /**
106
+ * Command Code these rules were read off (#2250 fixtures).
107
+ *
108
+ * The frames are `tests/fixtures/command-code-live-2250/`, captured on a private
109
+ * tmux socket at the production geometry — the default pane size does not
110
+ * reproduce the 200-column rules that fence the composer, and the status row
111
+ * drops its `esc to interrupt` tail below 72 columns.
112
+ */
113
+ export declare const COMMAND_CODE_VERIFIED_AGAINST: {
114
+ readonly version: "1.40.1";
115
+ readonly capturedAt: "2026-09-03";
116
+ readonly paneGeometry: "200x1000";
67
117
  };
68
118
  /**
69
119
  * The stamp for a tool whose frames nobody has captured yet.
@@ -1 +1 @@
1
- {"version":3,"file":"verified-against.d.ts","sourceRoot":"","sources":["../../../../src/lib/detection/tools/verified-against.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX,mDAAmD;AACnD,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;CAI9B,CAAC;AAEX,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAQpF,CAAC"}
1
+ {"version":3,"file":"verified-against.d.ts","sourceRoot":"","sources":["../../../../src/lib/detection/tools/verified-against.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B;;;;CAIhC,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;CAI9B,CAAC;AAEX,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CASpF,CAAC"}
@@ -26,7 +26,7 @@
26
26
  * instead of importing it.
27
27
  */
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.DETECTOR_VERIFIED_AGAINST = exports.UNMEASURED_VERIFIED_AGAINST = exports.ANTIGRAVITY_VERIFIED_AGAINST = exports.OPENCODE_VERIFIED_AGAINST = exports.COPILOT_VERIFIED_AGAINST = exports.CODEX_VERIFIED_AGAINST = exports.CLAUDE_VERIFIED_AGAINST = void 0;
29
+ exports.DETECTOR_VERIFIED_AGAINST = exports.UNMEASURED_VERIFIED_AGAINST = exports.COMMAND_CODE_VERIFIED_AGAINST = exports.ANTIGRAVITY_VERIFIED_AGAINST = exports.OPENCODE_VERIFIED_AGAINST = exports.COPILOT_VERIFIED_AGAINST = exports.CODEX_VERIFIED_AGAINST = exports.CLAUDE_VERIFIED_AGAINST = void 0;
30
30
  /** claude these rules were read off (#1708 / #1927 fixtures). */
31
31
  exports.CLAUDE_VERIFIED_AGAINST = {
32
32
  version: '2.1.240',
@@ -39,10 +39,21 @@ exports.CODEX_VERIFIED_AGAINST = {
39
39
  capturedAt: '2026-08-15',
40
40
  paneGeometry: '200x1000',
41
41
  };
42
- /** copilot-cli these rules were read off (#1885 / #1895 fixtures). */
42
+ /**
43
+ * copilot-cli these rules were read off (#1885 / #1895 / #2269 fixtures).
44
+ *
45
+ * Bumped from 1.0.80 because the frames were RE-CAPTURED and the rules CHANGED:
46
+ * 1.0.82 redrew the composer's fence (`─` rules became a `╻▄` / `╹▀` half-block
47
+ * frame), dropped the `❯` from the composer in favour of the frame's own `┃`
48
+ * edge, boxed the transcript's echoed prompt between two more half-block
49
+ * dividers, and put a file-type badge in front of most tool rows' verbs. The
50
+ * frames are `tests/unit/lib/detection/fixtures/copilot-live-2269/`, captured on
51
+ * a private tmux socket at the production geometry; the 1.0.80 frames stay where
52
+ * they are and the rules still answer for both builds.
53
+ */
43
54
  exports.COPILOT_VERIFIED_AGAINST = {
44
- version: '1.0.80',
45
- capturedAt: '2026-08-21',
55
+ version: '1.0.82',
56
+ capturedAt: '2026-09-04',
46
57
  paneGeometry: '200x1000',
47
58
  };
48
59
  /**
@@ -62,11 +73,50 @@ exports.OPENCODE_VERIFIED_AGAINST = {
62
73
  capturedAt: '2026-08-26',
63
74
  paneGeometry: '80x200',
64
75
  };
65
- /** agy these rules were read off (#988 / #995). */
76
+ /**
77
+ * agy these rules were read off (#988 / #995 footer + selection rules, re-read
78
+ * against the #2270 live panes).
79
+ *
80
+ * Bumped from `0.4.x` / `2026-07-30` / `inline` because the frames were
81
+ * RE-CAPTURED, not because the binary moved: #2270 drove agy 1.1.25 on a private
82
+ * tmux socket at the production geometry and kept both panes inline in
83
+ * `tests/unit/status-detector-selection.test.ts`
84
+ * (`AGY_1125_PERMISSION_PANE`, `AGY_1125_SWITCH_MODEL_PANE`) under the banner
85
+ * `Antigravity CLI 1.1.25`, trailing pane padding included. The
86
+ * `Do you want to proceed?` + `N. label` rules were measured off those frames,
87
+ * and `ANTIGRAVITY_SELECTION_LIST_PATTERN` (#995 / #997) was re-checked against
88
+ * them and left unchanged.
89
+ *
90
+ * `paneGeometry` leaves `inline` because the 1.1.25 permission dialog draws no
91
+ * composer row at all — it reproduces only at the 200x1000 pane the server
92
+ * captures, and a fixture without the ~970 blank padding rows exercises a
93
+ * different `lastLines` slice than production does. That is a statement about
94
+ * the capture condition, not about agy: the scrollback-retained rendering the
95
+ * `afterThinking` footer rules rest on (#988) is unchanged, and the 1.1.25
96
+ * dialog still ends on `esc to cancel`.
97
+ *
98
+ * What this stamp does NOT claim: #2270 captured `waiting` frames only, so the
99
+ * idle (`? for shortcuts`) and generating (spinner) branches are carried over
100
+ * from the 0.4 captures rather than re-measured. A live IDLE 1.1.25 frame is
101
+ * still uncaptured — see the `readIdleEvidence` note in `antigravity/detect.ts`.
102
+ */
66
103
  exports.ANTIGRAVITY_VERIFIED_AGAINST = {
67
- version: '0.4.x',
68
- capturedAt: '2026-07-30',
69
- paneGeometry: 'inline',
104
+ version: '1.1.25',
105
+ capturedAt: '2026-09-04',
106
+ paneGeometry: '200x1000',
107
+ };
108
+ /**
109
+ * Command Code these rules were read off (#2250 fixtures).
110
+ *
111
+ * The frames are `tests/fixtures/command-code-live-2250/`, captured on a private
112
+ * tmux socket at the production geometry — the default pane size does not
113
+ * reproduce the 200-column rules that fence the composer, and the status row
114
+ * drops its `esc to interrupt` tail below 72 columns.
115
+ */
116
+ exports.COMMAND_CODE_VERIFIED_AGAINST = {
117
+ version: '1.40.1',
118
+ capturedAt: '2026-09-03',
119
+ paneGeometry: '200x1000',
70
120
  };
71
121
  /**
72
122
  * The stamp for a tool whose frames nobody has captured yet.
@@ -94,6 +144,7 @@ exports.DETECTOR_VERIFIED_AGAINST = {
94
144
  copilot: exports.COPILOT_VERIFIED_AGAINST,
95
145
  opencode: exports.OPENCODE_VERIFIED_AGAINST,
96
146
  antigravity: exports.ANTIGRAVITY_VERIFIED_AGAINST,
147
+ 'command-code': exports.COMMAND_CODE_VERIFIED_AGAINST,
97
148
  gemini: exports.UNMEASURED_VERIFIED_AGAINST,
98
149
  'vibe-local': exports.UNMEASURED_VERIFIED_AGAINST,
99
150
  };
@@ -99,11 +99,32 @@ export declare function parseCliVersion(output: string): string | null;
99
99
  * The comparable form of a `verifiedAgainst` stamp, or null when there is none.
100
100
  *
101
101
  * `'unmeasured'` is null — a tool nobody has captured frames for cannot be
102
- * fresh or stale. `'0.4.x'` becomes `0.4.0`: antigravity's stamp is a minor
103
- * series rather than a build (Issue #995 measured a range), and reading it as
104
- * "no version" would silently exempt the one tool whose rules are furthest
105
- * behind. Widening to `.0` is the safe direction — it can only ever call a
106
- * newer install stale, never call a stale one current.
102
+ * fresh or stale. A minor-series stamp such as `'2.0.x'` becomes `2.0.0`;
103
+ * widening to `.0` is the safe direction, because it can only ever call a newer
104
+ * install stale, never call a stale one current.
105
+ *
106
+ * ## The wildcard branch has no caller in the table today, and stays anyway
107
+ *
108
+ * antigravity's `0.4.x` (Issue #995 measured a range rather than a build) was
109
+ * the only wildcard stamp ever written, and Issue #2292 replaced it with the
110
+ * build #2270 actually read the rules off (`1.1.25`). Re-run the grep that
111
+ * settled it and the branch has zero users:
112
+ *
113
+ * ```
114
+ * $ grep -rnE "version: '[0-9]+\.[0-9]+\.(x|\*)'" src/
115
+ * (no matches)
116
+ * ```
117
+ *
118
+ * It is kept, because deleting it would not delete the FORMAT.
119
+ * `verifiedAgainst` is a hand-written string, and the next person who measures a
120
+ * series rather than a build can still type `2.0.x`. With this branch that
121
+ * stamp compares. Without it {@link parseCliVersion} reads it as null and the
122
+ * tool is filed alongside `'unmeasured'` — never stale, no warning, nothing an
123
+ * operator can act on — which is the same failure #2292 was raised to fix, one
124
+ * level further down. A parser for an input the table still permits is not dead
125
+ * code; the unit exercises it on the format directly rather than through
126
+ * whichever stamp the table happens to hold, so it does not go vacuous now that
127
+ * no tool uses it.
107
128
  */
108
129
  export declare function parseVerifiedAgainstVersion(stamp: string): string | null;
109
130
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"version-probes.d.ts","sourceRoot":"","sources":["../../../src/lib/detection/version-probes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AAOH,0FAA0F;AAC1F,eAAO,MAAM,iCAAiC,OAAO,CAAC;AActD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAWD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAE,CAAC;AAEjF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAUlF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAKjF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4B3F;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAWrF;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,oBAAoB,EAAE,GAAG,iBAAiB,CAO5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,IAAI,iBAAiB,GAAG,SAAS,CAS5E;AAED,wFAAwF;AACxF,wBAAgB,8BAA8B,IAAI,IAAI,CAGrD"}
1
+ {"version":3,"file":"version-probes.d.ts","sourceRoot":"","sources":["../../../src/lib/detection/version-probes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AAOH,0FAA0F;AAC1F,eAAO,MAAM,iCAAiC,OAAO,CAAC;AActD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAE,CAAC;AAEjF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAWlF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAKjF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4B3F;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAWrF;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,oBAAoB,EAAE,GAAG,iBAAiB,CAO5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,IAAI,iBAAiB,GAAG,SAAS,CAS5E;AAED,wFAAwF;AACxF,wBAAgB,8BAA8B,IAAI,IAAI,CAGrD"}
@@ -124,7 +124,7 @@ function parseCliVersion(output) {
124
124
  return match ? `${match[1]}.${match[2]}.${match[3]}` : null;
125
125
  }
126
126
  /**
127
- * A `verifiedAgainst` stamp written as a minor-series wildcard: `0.4.x`.
127
+ * A `verifiedAgainst` stamp written as a minor-series wildcard: `2.0.x`.
128
128
  *
129
129
  * Only ever applied to the stamp, never to a probe's own output — one side of
130
130
  * this comparison is a string a human typed into a tool module, the other is
@@ -135,11 +135,32 @@ const VERIFIED_AGAINST_WILDCARD_REGEX = /^(\d+)\.(\d+)\.(?:x|\*)$/i;
135
135
  * The comparable form of a `verifiedAgainst` stamp, or null when there is none.
136
136
  *
137
137
  * `'unmeasured'` is null — a tool nobody has captured frames for cannot be
138
- * fresh or stale. `'0.4.x'` becomes `0.4.0`: antigravity's stamp is a minor
139
- * series rather than a build (Issue #995 measured a range), and reading it as
140
- * "no version" would silently exempt the one tool whose rules are furthest
141
- * behind. Widening to `.0` is the safe direction — it can only ever call a
142
- * newer install stale, never call a stale one current.
138
+ * fresh or stale. A minor-series stamp such as `'2.0.x'` becomes `2.0.0`;
139
+ * widening to `.0` is the safe direction, because it can only ever call a newer
140
+ * install stale, never call a stale one current.
141
+ *
142
+ * ## The wildcard branch has no caller in the table today, and stays anyway
143
+ *
144
+ * antigravity's `0.4.x` (Issue #995 measured a range rather than a build) was
145
+ * the only wildcard stamp ever written, and Issue #2292 replaced it with the
146
+ * build #2270 actually read the rules off (`1.1.25`). Re-run the grep that
147
+ * settled it and the branch has zero users:
148
+ *
149
+ * ```
150
+ * $ grep -rnE "version: '[0-9]+\.[0-9]+\.(x|\*)'" src/
151
+ * (no matches)
152
+ * ```
153
+ *
154
+ * It is kept, because deleting it would not delete the FORMAT.
155
+ * `verifiedAgainst` is a hand-written string, and the next person who measures a
156
+ * series rather than a build can still type `2.0.x`. With this branch that
157
+ * stamp compares. Without it {@link parseCliVersion} reads it as null and the
158
+ * tool is filed alongside `'unmeasured'` — never stale, no warning, nothing an
159
+ * operator can act on — which is the same failure #2292 was raised to fix, one
160
+ * level further down. A parser for an input the table still permits is not dead
161
+ * code; the unit exercises it on the format directly rather than through
162
+ * whichever stamp the table happens to hold, so it does not go vacuous now that
163
+ * no tool uses it.
143
164
  */
144
165
  function parseVerifiedAgainstVersion(stamp) {
145
166
  const wildcard = VERIFIED_AGAINST_WILDCARD_REGEX.exec(stamp);
@@ -180,6 +201,7 @@ exports.DETECTOR_VERSION_PROBES = {
180
201
  claude: { kind: 'execFile', command: 'claude', args: ['--version'] },
181
202
  codex: { kind: 'execFile', command: 'codex', args: ['--version'] },
182
203
  antigravity: { kind: 'execFile', command: 'agy', args: ['--version'] },
204
+ 'command-code': { kind: 'execFile', command: 'commandcode', args: ['--version'] },
183
205
  opencode: { kind: 'execFile', command: 'opencode', args: ['--version'] },
184
206
  gemini: { kind: 'execFile', command: 'gemini', args: ['--version'] },
185
207
  copilot: {