commandmate 0.24.0 → 0.26.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 (295) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +266 -266
  3. package/.next/app-path-routes-manifest.json +15 -15
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update-check/route.js +1 -1
  11. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  32. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  68. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/chat/page.js +2 -2
  137. package/.next/server/app/chat/page.js.nft.json +1 -1
  138. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  139. package/.next/server/app/login/page.js +2 -2
  140. package/.next/server/app/login/page.js.nft.json +1 -1
  141. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  142. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/more/page.js +2 -2
  144. package/.next/server/app/more/page.js.nft.json +1 -1
  145. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  146. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  147. package/.next/server/app/page.js +1 -1
  148. package/.next/server/app/page.js.nft.json +1 -1
  149. package/.next/server/app/page_client-reference-manifest.js +1 -1
  150. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/repositories/page.js +2 -2
  152. package/.next/server/app/repositories/page.js.nft.json +1 -1
  153. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  154. package/.next/server/app/review/page.js +1 -1
  155. package/.next/server/app/review/page.js.nft.json +1 -1
  156. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  157. package/.next/server/app/sessions/page.js +1 -1
  158. package/.next/server/app/sessions/page.js.nft.json +1 -1
  159. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  160. package/.next/server/app/skills/[skillId]/page.js +2 -2
  161. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  162. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  163. package/.next/server/app/skills/installed/page.js +2 -2
  164. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  165. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app/skills/page.js +2 -2
  167. package/.next/server/app/skills/page.js.nft.json +1 -1
  168. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  169. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  170. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  171. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  172. package/.next/server/app/worktrees/[id]/page.js +6 -6
  173. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  174. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  175. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  176. package/.next/server/app-paths-manifest.json +15 -15
  177. package/.next/server/chunks/2119.js +1 -1
  178. package/.next/server/chunks/2404.js +1 -1
  179. package/.next/server/chunks/2445.js +1 -1
  180. package/.next/server/chunks/3241.js +1 -1
  181. package/.next/server/chunks/3346.js +1 -1
  182. package/.next/server/chunks/4455.js +1 -1
  183. package/.next/server/chunks/5164.js +1 -1
  184. package/.next/server/chunks/5571.js +1 -1
  185. package/.next/server/chunks/5959.js +4 -4
  186. package/.next/server/chunks/6130.js +1 -1
  187. package/.next/server/chunks/6274.js +12 -9
  188. package/.next/server/chunks/6285.js +1 -1
  189. package/.next/server/chunks/7458.js +6 -6
  190. package/.next/server/chunks/848.js +1 -1
  191. package/.next/server/chunks/8730.js +1 -0
  192. package/.next/server/chunks/880.js +1 -1
  193. package/.next/server/chunks/9328.js +1 -1
  194. package/.next/server/chunks/9373.js +4 -3
  195. package/.next/server/middleware-build-manifest.js +1 -1
  196. package/.next/server/middleware-manifest.json +5 -5
  197. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  198. package/.next/server/pages/500.html +1 -1
  199. package/.next/server/server-reference-manifest.json +1 -1
  200. package/.next/static/chunks/2053-dfac2d49227cc942.js +1 -0
  201. package/.next/static/chunks/3898-ef488bfa804507d9.js +1 -0
  202. package/.next/static/chunks/5229-35f9acab97a553c5.js +1 -0
  203. package/.next/static/chunks/{6381-18a6a02a94d00d76.js → 6381-9303430933084b56.js} +1 -1
  204. package/.next/static/chunks/{9599-d29d2f8eeaf7c249.js → 8649-f551b0010dba4986.js} +1 -1
  205. package/.next/static/chunks/9263.f2034ec525abcf72.js +1 -0
  206. package/.next/static/chunks/app/chat/page-439b35c9cb90dbe0.js +1 -0
  207. package/.next/static/chunks/app/login/page-eefd515d8c37e5ee.js +1 -0
  208. package/.next/static/chunks/app/more/page-889b7546a8a553dc.js +1 -0
  209. package/.next/static/chunks/app/page-a8d04ac0e3e4c9fc.js +1 -0
  210. package/.next/static/chunks/app/repositories/page-f3c4d8839b1ca203.js +1 -0
  211. package/.next/static/chunks/app/review/page-6dc88649fe88ac16.js +1 -0
  212. package/.next/static/chunks/app/sessions/page-2c9ed9e969097688.js +1 -0
  213. package/.next/static/chunks/app/skills/[skillId]/page-19beef6121c4c982.js +1 -0
  214. package/.next/static/chunks/app/skills/installed/page-d5b9cef6d21fabda.js +1 -0
  215. package/.next/static/chunks/app/skills/page-06ef637e07dd9377.js +1 -0
  216. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-9ddcb224594f620f.js → page-5fed3984fafcd910.js} +1 -1
  217. package/.next/static/chunks/app/worktrees/[id]/page-fbdf4621a2911ac1.js +1 -0
  218. package/.next/static/chunks/{webpack-3534d858912a6c92.js → webpack-9d892a9ff07c289d.js} +1 -1
  219. package/.next/static/css/e865c4979a41aa03.css +1 -0
  220. package/.next/trace +12 -12
  221. package/README.md +96 -45
  222. package/dist/cli/commands/task.d.ts.map +1 -1
  223. package/dist/cli/commands/task.js +2 -1
  224. package/dist/cli/commands/verify.d.ts +14 -0
  225. package/dist/cli/commands/verify.d.ts.map +1 -1
  226. package/dist/cli/commands/verify.js +109 -3
  227. package/dist/cli/commands/wait.d.ts +2 -0
  228. package/dist/cli/commands/wait.d.ts.map +1 -1
  229. package/dist/cli/commands/wait.js +184 -4
  230. package/dist/cli/types/api-responses.d.ts +172 -0
  231. package/dist/cli/types/api-responses.d.ts.map +1 -1
  232. package/dist/cli/types/index.d.ts +31 -0
  233. package/dist/cli/types/index.d.ts.map +1 -1
  234. package/dist/cli/types/index.js +26 -0
  235. package/dist/cli/utils/verify-runner.d.ts +36 -1
  236. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  237. package/dist/cli/utils/verify-runner.js +114 -6
  238. package/dist/server/src/config/activity-bar-config.js +5 -1
  239. package/dist/server/src/lib/auto-yes-poller.js +40 -4
  240. package/dist/server/src/lib/auto-yes-state.js +108 -3
  241. package/dist/server/src/lib/cli-tools/antigravity.js +8 -4
  242. package/dist/server/src/lib/cli-tools/codex.js +63 -30
  243. package/dist/server/src/lib/cli-tools/copilot.js +5 -1
  244. package/dist/server/src/lib/cli-tools/gemini.js +15 -15
  245. package/dist/server/src/lib/cli-tools/opencode.js +9 -3
  246. package/dist/server/src/lib/detection/cli-patterns.js +148 -6
  247. package/dist/server/src/lib/detection/status-detector.js +28 -0
  248. package/dist/server/src/lib/detection/upstream-faults.js +120 -0
  249. package/dist/server/src/lib/hooks/permission-decision-service.js +13 -5
  250. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +18 -11
  251. package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -9
  252. package/dist/server/src/lib/hooks/sources/claude/source.js +5 -2
  253. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +26 -18
  254. package/dist/server/src/lib/hooks/sources/codex/source.js +6 -9
  255. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +22 -12
  256. package/dist/server/src/lib/hooks/sources/copilot/source.js +1 -1
  257. package/dist/server/src/lib/hooks/sources/define-source.js +6 -4
  258. package/dist/server/src/lib/hooks/sources/gemini/settings-generator.js +14 -8
  259. package/dist/server/src/lib/hooks/sources/gemini/source.js +29 -29
  260. package/dist/server/src/lib/hooks/sources/index.js +4 -1
  261. package/dist/server/src/lib/hooks/sources/launch-command.js +61 -0
  262. package/dist/server/src/lib/hooks/sources/legacy-relay.js +2 -1
  263. package/dist/server/src/lib/hooks/sources/opencode/source.js +10 -7
  264. package/dist/server/src/lib/polling/prompt-dedup-state.js +95 -0
  265. package/dist/server/src/lib/polling/response-checker.js +12 -0
  266. package/dist/server/src/lib/polling/response-poller-core.js +11 -1
  267. package/dist/server/src/lib/session/agent-session-lifecycle.js +28 -7
  268. package/dist/server/src/lib/session/claude-session.js +5 -1
  269. package/dist/server/src/lib/session/current-output-builder.js +34 -0
  270. package/dist/server/src/lib/verification/env-snapshot.js +21 -3
  271. package/dist/server/src/lib/verification/gate-runner.js +258 -7
  272. package/dist/server/src/lib/verification/machine-lock.js +204 -0
  273. package/dist/server/src/lib/verification/scope-gate.js +126 -13
  274. package/dist/server/src/lib/verification/verify-config.js +85 -3
  275. package/dist/server/src/lib/verification/worktree-index.js +140 -0
  276. package/package.json +1 -1
  277. package/.next/server/chunks/3451.js +0 -1
  278. package/.next/static/chunks/2053-52d3c82014e1cd54.js +0 -1
  279. package/.next/static/chunks/5229-0610b4e3288e777d.js +0 -1
  280. package/.next/static/chunks/744-3ad06d8c8ca482fc.js +0 -1
  281. package/.next/static/chunks/9263.5259f73f89220d64.js +0 -1
  282. package/.next/static/chunks/app/chat/page-15d13fc024d78f5d.js +0 -1
  283. package/.next/static/chunks/app/login/page-0247a3fb569bb22b.js +0 -1
  284. package/.next/static/chunks/app/more/page-b8ba537baeac8d5b.js +0 -1
  285. package/.next/static/chunks/app/page-afc64708362f31e5.js +0 -1
  286. package/.next/static/chunks/app/repositories/page-3469dacb6be7842f.js +0 -1
  287. package/.next/static/chunks/app/review/page-2d9cb7e068f8f35a.js +0 -1
  288. package/.next/static/chunks/app/sessions/page-7470c2bfd89e0df9.js +0 -1
  289. package/.next/static/chunks/app/skills/[skillId]/page-5e24481162f7ea78.js +0 -1
  290. package/.next/static/chunks/app/skills/installed/page-efd2d710a27f9735.js +0 -1
  291. package/.next/static/chunks/app/skills/page-0498adfc6e48684b.js +0 -1
  292. package/.next/static/chunks/app/worktrees/[id]/page-e611d30e47989e5d.js +0 -1
  293. package/.next/static/css/3ac44cfc082d02ad.css +0 -1
  294. /package/.next/static/{smu4mnL7qMf8w38n9dQJE → hNdNiFes2xLls68SWhAU9}/_buildManifest.js +0 -0
  295. /package/.next/static/{smu4mnL7qMf8w38n9dQJE → hNdNiFes2xLls68SWhAU9}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -12,12 +12,12 @@
12
12
  **[commandmate website →](https://kewton.github.io/CommandMate/)**
13
13
 
14
14
  <p align="center">
15
- <img src="./docs/images/demo-desktop.gif" width="600" alt="CommandMate Desktop Demo" />
15
+ <img src="./docs/images/demo-desktop.gif" width="600" alt="A task contract is sent, the verification gates run, and the exit code returns RESULT passed" />
16
16
  </p>
17
17
 
18
- > **Orchestrate your agent CLIs, not your terminal tabs.**
18
+ > **From vibe coding to Vibe Engineering.**
19
19
 
20
- CommandMate is a local control plane for agent CLIs.
20
+ Vibe Engineering the AI does the building; the system, not your expertise, guarantees the engineering.
21
21
 
22
22
  ```bash
23
23
  npx commandmate@latest
@@ -27,11 +27,11 @@ npx commandmate@latest
27
27
 
28
28
  ---
29
29
 
30
- CommandMate adds orchestration and visibility on top of your existing agent CLIs.
31
- It does not replace tmux, Git worktrees, or your terminal. It makes them easier to manage at scale.
30
+ CommandMate adds the machinery a contract before the work, verification gates after it, Skills that carry the method — on top of the agent CLIs you already use.
31
+ It does not replace tmux, Git worktrees, your terminal, or your agent CLI. It puts a frame around them, so the work arrives verified instead of merely finished.
32
32
 
33
33
  <p align="center">
34
- <img src="./docs/images/demo-mobile.gif" width="300" alt="CommandMate Mobile Demo" />
34
+ <img src="./docs/images/demo-mobile.gif" width="300" alt="A waiting agent reaches you, and the prompt is answered from a phone" />
35
35
  </p>
36
36
 
37
37
  Works on desktop and mobile — monitor and steer sessions from any browser, including your phone.
@@ -44,8 +44,13 @@ If this is the kind of AI development workflow you want, [give the repo a star](
44
44
 
45
45
  | Feature | What it does | Why it matters |
46
46
  |---------|-------------|----------------|
47
+ | **Task Contract** | Declare the goal, the changeable scope and the gates before the work starts, then `send --contract` hands them to the agent | The agent works to a written definition of done instead of guessing at one |
48
+ | **Verification Gates** | Gates declared in `.commandmate/verify.yaml` run through `verify` / `wait --verify` and return exit `0` / `20` / `21` | "Done" is what a verification run returned, not what the agent said |
49
+ | **Evidence & Metrics** | The built-in work-evidence and scope gates, plus `verify history`, `task show` and `report metrics` | Commits, gate logs and numbers are left behind for the next decision |
50
+ | **Skills Catalog** | Install and update official Skills per worktree, from the web UI or `commandmate skill` | The method is installed for the agent to read, not kept in someone's head |
51
+ | **Never miss a waiting agent** | A waiting agent shows up as a badge, a toast, the tab title, the PWA app badge and a push notification | You find out the moment an agent needs you, even away from the desk |
47
52
  | **Git Worktree Sessions** | One session per worktree, parallel execution | Multiple issues progress simultaneously without interference |
48
- | **Multi-Agent Support** | Choose Claude Code, Codex, Gemini, or local models per issue | Pick the right agent for each task |
53
+ | **Multi-Agent Support** | Choose Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity or local models per worktree | Pick the right agent for each task |
49
54
  | **Auto Yes Mode** | Agent runs without stopping for confirmations | Optional unattended mode for trusted workflows — review the Security section before enabling |
50
55
  | **Web UI (Desktop & Mobile)** | Full session control from any browser | Monitor and steer from your desk or your phone |
51
56
  | **File Viewer & Markdown Editor** | Browse and edit worktree files in the browser | Review changes and update AI instructions without opening an IDE |
@@ -111,12 +116,16 @@ development machine or phone will already have.
111
116
  flowchart LR
112
117
  A["Browser / Phone"] -->|HTTP| B["CommandMate Server"]
113
118
  B --> C["Session Manager"]
119
+ G["Task Contract\n.commandmate/tasks/*.yaml"] --> C
114
120
  C -->|"spawn / attach"| D["tmux sessions\n(per worktree)"]
115
- D --> E["Claude Code CLI"]
121
+ D --> E["Agent CLI"]
116
122
  C <-->|"read / write"| F[("Local DB\n& State")]
123
+ E --> H["Verification Gates\n.commandmate/verify.yaml"]
124
+ H -->|"exit 0 / 20 / 21"| B
117
125
  ```
118
126
 
119
127
  Each Git worktree gets its own tmux session, so multiple tasks run in parallel without interference.
128
+ The contract goes in before the session starts; the gates run after it stops, and their exit code is the verdict.
120
129
 
121
130
  ---
122
131
 
@@ -405,55 +414,92 @@ npm start
405
414
  ---
406
415
 
407
416
  <details>
408
- <summary><strong>Comparison</strong></summary>
409
-
410
- | Feature | CommandMate | Remote Control (Official) | Happy Coder | claude-squad | Omnara |
411
- |---------|:-----------:|:------------------------:|:-----------:|:------------:|:------:|
412
- | Auto Yes Mode | Yes | No | No | Yes (TUI only) | No |
413
- | Git Worktree Management | Yes | No | No | Yes (TUI only) | No |
414
- | Parallel Sessions | Yes | **No (1 only)** | Yes | Yes | No |
415
- | Mobile Web UI | Yes | Yes (claude.ai) | Yes | **No** | Yes |
416
- | File Viewer | Yes | No | No | No | No |
417
- | Markdown Editor | Yes | No | No | No | No |
418
- | Screenshot Instructions | Yes | No | No | Not possible | No |
419
- | Scheduled Execution | Yes | No | No | No | No |
420
- | Survives Laptop Close | Yes (daemon) | **No (terminal must stay open)** | Yes | Yes | Yes |
421
- | Token Authentication | Yes | N/A (Anthropic account) | N/A (app) | No | N/A (cloud) |
422
- | Free / OSS | Yes | Requires Pro/Max | Free + Paid | Yes | $20/mo |
423
- | Runs 100% Locally | Yes | Via Anthropic API | Server-routed | Yes | Cloud fallback |
417
+ <summary><strong>With / Without CommandMate</strong></summary>
418
+
419
+ The comparison that matters is not against other products; it is against the way of working.
420
+
421
+ | Dimension | Vibe coding | Vibe Engineering with CommandMate |
422
+ |---|---|---|
423
+ | What "done" means | The agent says it's done | A verification run says so — exit 0 / 20 / 21 |
424
+ | Scope of change | Whatever the agent touched | Declared in the contract, enforced by the scope gate |
425
+ | Method | In someone's head | Installed as Skills from the Catalog (`cmate-task-contract`, `cmate-verify`, …) |
426
+ | Evidence | A chat transcript | Commits, gate logs, `verify history`, `report metrics` |
427
+ | Parallel work | Terminal tabs | One worktree and one contract per task |
428
+ | When it stops | You notice, eventually | Waiting is surfaced: badge, toast, tab title, push |
429
+ | Which agent | Locked to one | Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity, local models |
424
430
 
425
431
  </details>
426
432
 
427
433
  ---
428
434
 
429
- ## Optional Workflow Layer
435
+ ## Vibe Engineering workflow
430
436
 
431
437
  <a id="issue-driven-development"></a>
432
438
 
433
- If your team wants more structure, CommandMate can also help you standardize
434
- issue refinement, design review, planning, implementation, and acceptance checks.
435
- These workflows build on top of the same CLI sessions and worktrees. They are optional, not required.
439
+ We do not make the AI smarter. We make the software-engineering ability its user needed into a system.
440
+ That system is three things you can hand to any agent: the method, as installed Skills; the contract,
441
+ declared before the work; the gates, which decide afterwards whether the work is done.
442
+
443
+ ```
444
+ Requirement → Contract → Agent runs (any CLI, per worktree) → Verified result
445
+ ```
446
+
447
+ ### 1. Install the method as Skills
436
448
 
437
- CommandMate is built for developers who spend less time editing files and more time defining issues, reviewing direction, and accepting outcomes from coding agents. The commands below turn that workflow into a repeatable process.
449
+ Skills come from the official Catalog
450
+ ([Kewton/commandmate-skills](https://github.com/Kewton/commandmate-skills)) and install into the
451
+ worktree you choose — from the web UI (`/skills`, or the Skills pane of a worktree) or from the CLI.
438
452
 
453
+ ```bash
454
+ commandmate skill list
455
+ commandmate skill install cmate-task-contract --worktree <worktree-id> --version <version> --yes
439
456
  ```
440
- Define Issue → Refine with AI → Review Direction → Generate Plan → Agent Executes
457
+
458
+ | Skill | What it covers |
459
+ |-------|----------------|
460
+ | `cmate-issue-authoring` | Turns a feature description into a set of implementable issues |
461
+ | `cmate-issue-refinement` | Refines a vague issue into an implementable specification, read-only |
462
+ | `cmate-task-contract` | Drafts `.commandmate/tasks/<name>.yaml` from an issue: goal, scope, gates |
463
+ | `cmate-verify` | Declares the gates in `.commandmate/verify.yaml` and runs them for a real exit code |
464
+ | `cmate-verify-advisor` | Proposes gate improvements from the verification history |
465
+ | `cmate-worker-development` | The six steps a worker follows: read, investigate, plan, implement, verify, evidence |
466
+ | `cmate-acceptance-test` | Checks the issue's acceptance criteria and returns Go / Conditional Go / No-Go |
467
+ | `cmate-orchestrate` | Plans several issues in parallel, dispatches them with contracts, judges by exit code |
468
+
469
+ The Catalog also publishes `cmate-repository-analysis`, `cmate-orchestrate-monitor`,
470
+ `cmate-worktree-setup` and `cmate-worktree-cleanup`. See the
471
+ [Skills guide](./docs/user-guide/skills.md) for the support matrix, the install roots, and the
472
+ rollback story.
473
+
474
+ ### 2. Declare the contract, then let the gates judge
475
+
476
+ ```bash
477
+ # .commandmate/tasks/issue-123.yaml declares goal, scope.allow / scope.deny and the gates to run
478
+ commandmate send <worktree-id> --contract .commandmate/tasks/issue-123.yaml
479
+ commandmate wait <worktree-id> --verify
441
480
  ```
442
481
 
443
- | Step | Command | What happens |
444
- |------|---------|-------------|
445
- | Refine the issue | `/issue-enhance` | AI asks clarifying questions and fills in missing details |
446
- | Review the issue | `/multi-stage-issue-review` | Multi-stage review (consistency, impact scope) with automated fixes |
447
- | Review the design | `/multi-stage-design-review` | 4-stage review (general → consistency → impact → security) |
448
- | Plan the work | `/work-plan` | Generates a task breakdown with dependencies |
449
- | Implement via TDD | `/tdd-impl` | Red-Green-Refactor cycle, automated |
450
- | Verify acceptance | `/acceptance-test` | Validates all acceptance criteria from the issue |
451
- | Create the PR | `/create-pr` | Auto-generates title, description, and labels |
452
- | Dev (full) | `/pm-auto-dev` | TDD implementation → acceptance test → refactoring → progress report |
453
- | Issue → Dev (full) | `/pm-auto-issue2dev` | Issue review → design review → work plan → TDD → acceptance test → refactoring → progress report |
454
- | Design → Dev (full) | `/pm-auto-design2dev` | Design review → work plan → TDD → acceptance test → refactoring → progress report |
455
-
456
- For details, see the [issues](https://github.com/Kewton/CommandMate/issues), [dev reports](./dev-reports/issue/), and [workflow examples](./docs/en/user-guide/workflow-examples.md) in the CommandMate repository.
482
+ `--contract` supplies the message, so you do not pass one yourself. `wait --verify` runs the gates
483
+ once the agent stops and returns the verdict as its exit code: **0** everything passed, **20** a gate
484
+ failed, **21** the work-evidence gate found neither a commit nor an uncommitted change.
485
+
486
+ The contract format is specified in [Task Contract](./docs/design/task-contract.md), the gate format
487
+ in [Verification gates](./docs/design/verification-config.md) both specifications are written in
488
+ Japanese, but the YAML they specify is the same on either side.
489
+
490
+ ### Read next
491
+
492
+ | Document | What it gives you |
493
+ |----------|-------------------|
494
+ | [Concept](./docs/en/concept.md) | The Vision, the Mission, and how each implementation item maps to a feature |
495
+ | [Tutorial](./docs/en/user-guide/tutorial.md) | Fork a sample repository and run one task through contract and verification in about fifteen minutes |
496
+ | [Product Highlights](./docs/en/features/product-highlights.md) | A feature-by-feature tour of the product |
497
+ | [CLI Operations Guide](./docs/en/user-guide/cli-operations-guide.md) | Every agent-facing command, in depth |
498
+
499
+ > **Developing CommandMate itself?** The `/work-plan`, `/pm-auto-dev` and other slash commands under
500
+ > `.claude/commands` belong to **this repository only** — they are not installed into yours, and the
501
+ > portable equivalents are the Catalog Skills above. See the
502
+ > [Commands guide](./docs/en/user-guide/commands-guide.md).
457
503
 
458
504
  ---
459
505
 
@@ -462,9 +508,14 @@ For details, see the [issues](https://github.com/Kewton/CommandMate/issues), [de
462
508
  | Document | Description |
463
509
  |----------|-------------|
464
510
  | [CLI Setup Guide](./docs/en/user-guide/cli-setup-guide.md) | Installation and initial setup |
511
+ | [Tutorial](./docs/en/user-guide/tutorial.md) | Fork a sample repository and go from contract to verified result in about fifteen minutes |
465
512
  | [Web App Guide](./docs/en/user-guide/webapp-guide.md) | Basic web app operations |
466
513
  | [Quick Start](./docs/en/user-guide/quick-start.md) | Using Claude Code commands |
467
- | [Concept](./docs/en/concept.md) | Vision and problems solved |
514
+ | [CLI Operations Guide](./docs/en/user-guide/cli-operations-guide.md) | Driving sessions from the CLI: execution contracts, verification gates, Skills, agent instances |
515
+ | [Concept](./docs/en/concept.md) | The canonical Vision, Mission and core principle, and how each implementation item maps to a feature |
516
+ | [Product Highlights](./docs/en/features/product-highlights.md) | A feature-by-feature tour of the product |
517
+ | [Skills Guide](./docs/en/user-guide/skills.md) | Installing official Catalog Skills into a worktree |
518
+ | [Agent Event Hooks](./docs/en/user-guide/agent-event-hooks.md) | Structured agent events instead of terminal scraping |
468
519
  | [Architecture](./docs/en/architecture.md) | System design |
469
520
  | [Deployment Guide](./docs/en/DEPLOYMENT.md) | Production environment setup |
470
521
  | [UI/UX Guide](./docs/en/UI_UX_GUIDE.md) | UI implementation details |
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/task.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,wBAAgB,iBAAiB,IAAI,OAAO,CAyH3C"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/task.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,wBAAgB,iBAAiB,IAAI,OAAO,CA4H3C"}
@@ -108,7 +108,8 @@ function createTaskCommand() {
108
108
  // — verify.yaml can be opened, this cannot. Printing the id alone would
109
109
  // leave a reader unable to tell which criterion the run was judged by.
110
110
  for (const gate of task.contract.verify.gateDefinitions ?? []) {
111
- console.log(`GATE-DEF: ${gate.id} ${gate.command} (timeoutSec=${gate.timeoutSec})`);
111
+ const mutex = gate.mutex ? `, mutex=${gate.mutex}` : '';
112
+ console.log(`GATE-DEF: ${gate.id} ${gate.command} (timeoutSec=${gate.timeoutSec}${mutex})`);
112
113
  }
113
114
  console.log(`AUTO-YES: ${task.contract.autoYes.mode ?? 'unset'}`);
114
115
  console.log(`CREATED: ${task.createdAt}`);
@@ -15,5 +15,19 @@
15
15
  * succeeds exits 0 even when it finds nothing.
16
16
  */
17
17
  import { Command } from 'commander';
18
+ import type { VerificationScopeDetail } from '../types/api-responses';
19
+ /**
20
+ * Read the scope gate's report back into structured evidence.
21
+ *
22
+ * Parsing the gate's own prose is not the shape anyone would choose, but it is
23
+ * the only one available: `verification_gate_results` has no column for
24
+ * structured detail, and the CLI's `formatDetail` already reads work-evidence's
25
+ * counts out of `logTail` the same way (src/cli/utils/verify-runner.ts).
26
+ *
27
+ * Returns null when the tail is not a report — a skip, an error, or a gate that
28
+ * was never entered all write a sentence — because an empty `admitted` on those
29
+ * would claim the gate looked and found nothing.
30
+ */
31
+ export declare function parseScopeEvidence(logTail: string | null | undefined): VerificationScopeDetail | null;
18
32
  export declare function createVerifyCommand(): Command;
19
33
  //# sourceMappingURL=verify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoDpC,wBAAgB,mBAAmB,IAAI,OAAO,CA0D7C"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAMV,uBAAuB,EAExB,MAAM,wBAAwB,CAAC;AAmChC;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,uBAAuB,GAAG,IAAI,CA8BrG;AAyED,wBAAgB,mBAAmB,IAAI,OAAO,CA0D7C"}
@@ -16,6 +16,7 @@
16
16
  * succeeds exits 0 even when it finds nothing.
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.parseScopeEvidence = parseScopeEvidence;
19
20
  exports.createVerifyCommand = createVerifyCommand;
20
21
  const commander_1 = require("commander");
21
22
  const types_1 = require("../types");
@@ -27,6 +28,103 @@ const MAX_HISTORY_DAYS = 90;
27
28
  const MAX_HISTORY_LIMIT = 500;
28
29
  /** Gate statuses that mean the gate did not pass. `skipped` is not a failure. */
29
30
  const FAILED_GATE_STATUSES = new Set(['failed', 'timeout', 'error']);
31
+ // =============================================================================
32
+ // Scope-gate evidence (Issue #1841)
33
+ // =============================================================================
34
+ /** Built-in gate id; mirrors SCOPE_GATE_ID in lib/verification/verify-config.ts. */
35
+ const SCOPE_GATE_ID = 'scope';
36
+ /**
37
+ * Separator the scope gate puts between a path and the rule that decided it.
38
+ *
39
+ * Mirrors SCOPE_PATTERN_ARROW in `src/lib/verification/scope-gate.ts`. The two
40
+ * cannot import each other — tsconfig.cli.json compiles `src/cli/**` alone,
41
+ * with no path aliases, so the CLI bundle never pulls in the server's
42
+ * dependency graph — so a round-trip test feeds a real gate report through this
43
+ * parser instead of trusting the constants to be edited together.
44
+ */
45
+ const SCOPE_PATTERN_ARROW = ' \u2190 ';
46
+ /**
47
+ * Read the scope gate's report back into structured evidence.
48
+ *
49
+ * Parsing the gate's own prose is not the shape anyone would choose, but it is
50
+ * the only one available: `verification_gate_results` has no column for
51
+ * structured detail, and the CLI's `formatDetail` already reads work-evidence's
52
+ * counts out of `logTail` the same way (src/cli/utils/verify-runner.ts).
53
+ *
54
+ * Returns null when the tail is not a report — a skip, an error, or a gate that
55
+ * was never entered all write a sentence — because an empty `admitted` on those
56
+ * would claim the gate looked and found nothing.
57
+ */
58
+ function parseScopeEvidence(logTail) {
59
+ if (!logTail)
60
+ return null;
61
+ const summary = /^scope: baseRef=.* changed=(\d+) violations=(\d+)$/m.exec(logTail);
62
+ if (!summary)
63
+ return null;
64
+ const changed = Number(summary[1]);
65
+ const violationTotal = Number(summary[2]);
66
+ const admitted = [];
67
+ const violations = [];
68
+ for (const line of logTail.split('\n')) {
69
+ if (line.startsWith(' + ')) {
70
+ const [path, pattern] = splitAtArrow(line.slice(4));
71
+ // The gate always names the admitting rule; a `+` line without one is
72
+ // output this parser does not understand, and inventing an empty pattern
73
+ // for it would put a claim in the JSON that nothing made.
74
+ if (pattern !== null)
75
+ admitted.push({ path, pattern });
76
+ }
77
+ else if (line.startsWith(' - ')) {
78
+ violations.push(splitAtArrow(line.slice(4))[0]);
79
+ }
80
+ }
81
+ return {
82
+ admitted,
83
+ violations,
84
+ // From the summary line, not from the lists: both are capped at 100 by the
85
+ // report, and `changed` counts every path either way. Admitted is the
86
+ // remainder because the gate classifies each changed path exactly once.
87
+ totals: { changed, admitted: changed - violationTotal, violations: violationTotal },
88
+ };
89
+ }
90
+ /**
91
+ * Split `<path> \u2190 <pattern>`, keeping the whole line as the path when no
92
+ * arrow is present (an allow-miss violation has no rule to name).
93
+ *
94
+ * Split at the *last* arrow so a path containing the sequence still yields the
95
+ * pattern the gate wrote.
96
+ */
97
+ function splitAtArrow(text) {
98
+ const at = text.lastIndexOf(SCOPE_PATTERN_ARROW);
99
+ if (at === -1)
100
+ return [text, null];
101
+ return [text.slice(0, at), text.slice(at + SCOPE_PATTERN_ARROW.length)];
102
+ }
103
+ /**
104
+ * Attach the evidence the CLI parses out of gate logs before a run is printed
105
+ * as JSON: {@link parseScopeEvidence} on the scope gate (Issue #1841), and the
106
+ * retry record on any gate that was re-run (Issue #1772).
107
+ *
108
+ * Copies rather than mutates: the run object is also what the polling loop
109
+ * reported from, and a JSON-only field has no business appearing in it.
110
+ */
111
+ function withGateEvidence(run) {
112
+ const gates = run.gates ?? [];
113
+ return {
114
+ ...run,
115
+ gates: gates.map((gate) => {
116
+ const scope = gate.gateId === SCOPE_GATE_ID ? parseScopeEvidence(gate.logTail) : null;
117
+ const flaky = (0, verify_runner_1.parseFlakyMarker)(gate.logTail);
118
+ if (!scope && !flaky)
119
+ return gate;
120
+ return {
121
+ ...gate,
122
+ ...(scope ? { scope } : {}),
123
+ ...(flaky ? { flaky } : {}),
124
+ };
125
+ }),
126
+ };
127
+ }
30
128
  function formatSeconds(durationMs) {
31
129
  return durationMs === null ? 'n/a' : `${(durationMs / 1000).toFixed(1)}s`;
32
130
  }
@@ -96,7 +194,7 @@ function createVerifyCommand() {
96
194
  suppressResultLine: options.json,
97
195
  });
98
196
  if (options.json && outcome.run) {
99
- console.log(JSON.stringify(outcome.run));
197
+ console.log(JSON.stringify(withGateEvidence(outcome.run)));
100
198
  }
101
199
  process.exit(outcome.exitCode);
102
200
  }
@@ -206,7 +304,11 @@ function addShowCommand(parent) {
206
304
  }
207
305
  const run = data.run;
208
306
  if (json) {
209
- console.log(JSON.stringify(run, null, 2));
307
+ // `show` is the forensic surface — the one a reader reaches for to
308
+ // reconstruct a run days later — so the scope evidence and the retry
309
+ // record have to be readable here too, not only on the run that
310
+ // produced them.
311
+ console.log(JSON.stringify(withGateEvidence(run), null, 2));
210
312
  return;
211
313
  }
212
314
  console.log(`run #${run.id} ${run.status} worktree=${run.worktreeId} trigger=${run.trigger}`);
@@ -219,7 +321,11 @@ function addShowCommand(parent) {
219
321
  // judged, so "which of these was the repository's own definition of
220
322
  // passing" should not have to be inferred from an absent marker.
221
323
  const source = gate.source ? ` src=${gate.source}` : '';
222
- console.log(` ${gate.gateId} ${gate.status} exit=${exit} ${formatSeconds(gate.durationMs)}${source}`);
324
+ // Appended rather than replacing `status`, which is the stored column
325
+ // this view exists to show verbatim (#1772). The marker in the log
326
+ // tail below carries both runs' numbers.
327
+ const flaky = (0, verify_runner_1.parseFlakyMarker)(gate.logTail)?.outcome === 'flaky' ? ` ${verify_runner_1.FLAKY_GATE_LABEL}` : '';
328
+ console.log(` ${gate.gateId} ${gate.status} exit=${exit} ${formatSeconds(gate.durationMs)}${source}${flaky}`);
223
329
  if (gate.logTail) {
224
330
  for (const line of gate.logTail.split('\n')) {
225
331
  console.log(` | ${line}`);
@@ -9,6 +9,8 @@
9
9
  * layer could not classify at all — Issue #1708. Both are reported as
10
10
  * exit 10 with a distinguishing `type` rather than a new exit code, so
11
11
  * callers that already branch on 10 keep working.)
12
+ * - 11: UPSTREAM_FAULT (--fail-on-upstream-fault only, Issue #1839: the agent
13
+ * came back to its composer with an upstream API failure on the frame)
12
14
  * - 124: TIMEOUT (--timeout exceeded)
13
15
  * Issue #1544 adds --verify / --require-work, which can turn a detected
14
16
  * completion into 20 (VERIFY_FAILED) or 21 (NOT_STARTED).
@@ -1 +1 @@
1
- {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmepC,wBAAgB,iBAAiB,IAAI,OAAO,CA6G3C"}
1
+ {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsqBpC,wBAAgB,iBAAiB,IAAI,OAAO,CA8G3C"}