commandmate 0.29.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (979) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +468 -417
  3. package/.next/app-path-routes-manifest.json +30 -23
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +15 -15
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +25 -8
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/update/route.js +2 -0
  12. package/.next/server/app/api/agents/update/route.js.nft.json +1 -0
  13. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -0
  14. package/.next/server/app/api/agents/versions/route.js +1 -0
  15. package/.next/server/app/api/agents/versions/route.js.nft.json +1 -0
  16. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -0
  17. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/app/update-check/route.js +1 -1
  19. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  21. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  22. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  24. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  25. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/assistant/messages/route.js +1 -1
  27. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  28. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/assistant/session/route.js +1 -1
  30. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  31. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/assistant/start/route.js +18 -18
  33. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  34. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/assistant/terminal/route.js +19 -19
  36. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  37. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/assistant/tools/route.js +1 -1
  39. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  40. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/capabilities/route.js +1 -1
  45. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/daily-summary/route.js +1 -1
  47. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  48. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  50. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  51. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  53. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  54. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  56. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  57. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/external-apps/route.js +1 -1
  59. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  60. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/fs/browse/route.js +1 -7
  62. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  63. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/fs/recent-paths/route.js +1 -7
  65. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  66. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  68. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  69. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  71. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  72. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  74. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  75. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/metrics/vibe/route.js +2 -2
  77. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  78. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/push/escalation/route.js +7 -1
  81. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  82. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  84. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  85. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/push/vapid/route.js +7 -1
  87. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  88. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  91. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  92. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  94. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  95. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  97. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  98. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  100. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  101. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/repositories/clone/route.js +1 -1
  103. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  104. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  106. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  107. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/repositories/restore/route.js +1 -1
  109. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  110. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/repositories/route.js +1 -1
  112. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  113. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/repositories/scan/route.js +1 -1
  115. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  116. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/repositories/sync/route.js +1 -1
  118. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  119. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  121. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  122. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/settings/default-agents/route.js +1 -0
  124. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -0
  125. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -0
  126. package/.next/server/app/api/settings/default-surface-mode/route.js +1 -0
  127. package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -0
  128. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -0
  129. package/.next/server/app/api/sidebar/group-order/route.js +1 -7
  130. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  131. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/skills/[id]/route.js +1 -1
  133. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  134. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/skills/installations/route.js +2 -2
  136. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  137. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/skills/operations/route.js +2 -2
  139. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  140. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/skills/reindex/route.js +1 -1
  142. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  143. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/skills/route.js +1 -1
  145. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  146. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/slash-commands/route.js +1 -1
  148. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  149. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
  151. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  152. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  154. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  155. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/templates/[id]/route.js +2 -2
  157. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  158. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/templates/route.js +2 -2
  160. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  161. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/todos/route.js +1 -1
  163. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  164. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  166. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  167. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/verification/runs/route.js +1 -1
  169. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  170. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -0
  181. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -0
  182. package/.next/server/app/api/worktrees/[id]/{start-polling → cli-reference}/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  185. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  187. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -2
  190. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  191. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  199. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  275. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  278. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  284. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  286. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  287. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
  289. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  290. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  293. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  296. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  299. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  302. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  304. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  305. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  308. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  311. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  314. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  316. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  317. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  319. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  320. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  322. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  323. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  326. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  328. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  329. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  330. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  331. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  332. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  333. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -7
  334. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  335. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  336. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  337. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  338. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  339. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  340. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  341. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  342. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  343. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  344. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  345. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  346. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  347. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  348. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  349. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  350. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  351. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  352. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  353. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  354. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  355. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  356. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  357. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  358. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  359. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  360. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  361. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  362. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  363. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  364. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  365. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  366. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  367. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  368. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  369. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  370. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  371. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  372. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  373. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  374. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  375. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  376. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  377. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  378. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  379. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  380. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  381. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  382. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  383. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  384. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  385. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  386. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  387. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  388. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  389. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  390. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  391. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  392. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  393. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +2 -0
  394. package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -0
  395. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -0
  396. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  397. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  398. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  399. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -0
  400. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -0
  401. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -0
  402. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  403. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  404. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  405. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  406. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  407. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  408. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  409. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  410. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  411. package/.next/server/app/api/worktrees/apply-default-agents/route.js +1 -0
  412. package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -0
  413. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -0
  414. package/.next/server/app/api/worktrees/route.js +1 -1
  415. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  416. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  417. package/.next/server/app/chat/page.js +2 -2
  418. package/.next/server/app/chat/page.js.nft.json +1 -1
  419. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  420. package/.next/server/app/login/page.js +2 -2
  421. package/.next/server/app/login/page.js.nft.json +1 -1
  422. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  423. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  424. package/.next/server/app/more/page.js +2 -2
  425. package/.next/server/app/more/page.js.nft.json +1 -1
  426. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  427. package/.next/server/app/offline/page.js.nft.json +1 -1
  428. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  429. package/.next/server/app/page.js +1 -1
  430. package/.next/server/app/page.js.nft.json +1 -1
  431. package/.next/server/app/page_client-reference-manifest.js +1 -1
  432. package/.next/server/app/proxy/[...path]/route.js +1 -1
  433. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  434. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  435. package/.next/server/app/repositories/page.js +2 -2
  436. package/.next/server/app/repositories/page.js.nft.json +1 -1
  437. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  438. package/.next/server/app/review/page.js +1 -1
  439. package/.next/server/app/review/page.js.nft.json +1 -1
  440. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  441. package/.next/server/app/sessions/page.js +1 -1
  442. package/.next/server/app/sessions/page.js.nft.json +1 -1
  443. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  444. package/.next/server/app/skills/[skillId]/page.js +2 -2
  445. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  446. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  447. package/.next/server/app/skills/installed/page.js +2 -2
  448. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  449. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  450. package/.next/server/app/skills/page.js +2 -2
  451. package/.next/server/app/skills/page.js.nft.json +1 -1
  452. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  453. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  454. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  455. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  456. package/.next/server/app/worktrees/[id]/page.js +12 -12
  457. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  458. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  459. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  460. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  461. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  462. package/.next/server/app-paths-manifest.json +30 -23
  463. package/.next/server/chunks/1058.js +1 -1
  464. package/.next/server/chunks/1068.js +1 -1
  465. package/.next/server/chunks/1191.js +1 -1
  466. package/.next/server/chunks/1341.js +1 -0
  467. package/.next/server/chunks/1501.js +5 -0
  468. package/.next/server/chunks/1886.js +3 -4
  469. package/.next/server/chunks/2119.js +1 -1
  470. package/.next/server/chunks/2445.js +1 -1
  471. package/.next/server/chunks/261.js +1 -0
  472. package/.next/server/chunks/2739.js +1 -0
  473. package/.next/server/chunks/2816.js +1 -1
  474. package/.next/server/chunks/2827.js +29 -0
  475. package/.next/server/chunks/3123.js +1 -0
  476. package/.next/server/chunks/3241.js +1 -1
  477. package/.next/server/chunks/3543.js +1 -1
  478. package/.next/server/chunks/3707.js +15 -0
  479. package/.next/server/chunks/3722.js +25 -1
  480. package/.next/server/chunks/3869.js +1 -0
  481. package/.next/server/chunks/3945.js +1 -1
  482. package/.next/server/chunks/4299.js +1 -1
  483. package/.next/server/chunks/4325.js +1 -0
  484. package/.next/server/chunks/4390.js +1 -0
  485. package/.next/server/chunks/4393.js +1 -1
  486. package/.next/server/chunks/4443.js +6 -0
  487. package/.next/server/chunks/5017.js +1 -1
  488. package/.next/server/chunks/5120.js +1 -0
  489. package/.next/server/chunks/5164.js +1 -1
  490. package/.next/server/chunks/5571.js +1 -1
  491. package/.next/server/chunks/6130.js +1 -1
  492. package/.next/server/chunks/6285.js +1 -1
  493. package/.next/server/chunks/6337.js +1 -1
  494. package/.next/server/chunks/663.js +1 -1
  495. package/.next/server/chunks/6781.js +1 -1
  496. package/.next/server/chunks/6894.js +8 -0
  497. package/.next/server/chunks/7366.js +5 -0
  498. package/.next/server/chunks/7685.js +1 -1
  499. package/.next/server/chunks/7824.js +1 -1
  500. package/.next/server/chunks/7836.js +1 -0
  501. package/.next/server/chunks/7905.js +1 -1
  502. package/.next/server/chunks/8118.js +1 -0
  503. package/.next/server/chunks/8356.js +1 -1
  504. package/.next/server/chunks/848.js +1 -1
  505. package/.next/server/chunks/880.js +3 -3
  506. package/.next/server/chunks/8800.js +3 -0
  507. package/.next/server/chunks/8807.js +1 -1
  508. package/.next/server/chunks/9123.js +2 -2
  509. package/.next/server/chunks/9130.js +3 -3
  510. package/.next/server/chunks/9627.js +71 -43
  511. package/.next/server/chunks/9696.js +3 -0
  512. package/.next/server/chunks/9798.js +1 -1
  513. package/.next/server/middleware-build-manifest.js +1 -1
  514. package/.next/server/middleware-manifest.json +5 -5
  515. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  516. package/.next/server/pages/500.html +1 -1
  517. package/.next/server/server-reference-manifest.json +1 -1
  518. package/.next/server/src/middleware.js +1 -1
  519. package/.next/server/src/middleware.js.map +1 -1
  520. package/.next/static/7K0XXFu_ty4wRSkl4X21E/_buildManifest.js +1 -0
  521. package/.next/static/chunks/{2053-c0e931eb4391baa1.js → 2053-3f299a7a2c7d6767.js} +1 -1
  522. package/.next/static/chunks/{3968-8d8ca15657748bfb.js → 3916-0e929d089282dc5d.js} +1 -1
  523. package/.next/static/chunks/3922.9c1ec01fff819c88.js +1 -0
  524. package/.next/static/chunks/5229-6c89475b61bd2c8b.js +1 -0
  525. package/.next/static/chunks/6022-7a7d1760fc9814c7.js +1 -0
  526. package/.next/static/chunks/6381-28d0e95620aa018e.js +1 -0
  527. package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +1 -0
  528. package/.next/static/chunks/{1188-8567ee5ecfef02ee.js → 8593-fa0eb2802e0ce68a.js} +1 -1
  529. package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +1 -0
  530. package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +1 -0
  531. package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +1 -0
  532. package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +1 -0
  533. package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +1 -0
  534. package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +1 -0
  535. package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +1 -0
  536. package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +1 -0
  537. package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +1 -0
  538. package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +1 -0
  539. package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +1 -0
  540. package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +1 -0
  541. package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +1 -0
  542. package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +1 -0
  543. package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +1 -0
  544. package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +1 -0
  545. package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +1 -0
  546. package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +1 -0
  547. package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +1 -0
  548. package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +1 -0
  549. package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +1 -0
  550. package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +1 -0
  551. package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +1 -0
  552. package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +1 -0
  553. package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +1 -0
  554. package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +1 -0
  555. package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +1 -0
  556. package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +1 -0
  557. package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +1 -0
  558. package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +1 -0
  559. package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +1 -0
  560. package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +1 -0
  561. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
  562. package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
  563. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +1 -0
  564. package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +1 -0
  565. package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +1 -0
  566. package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +1 -0
  567. package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +1 -0
  568. package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +1 -0
  569. package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +1 -0
  570. package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +1 -0
  571. package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +1 -0
  572. package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +1 -0
  573. package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +1 -0
  574. package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +1 -0
  575. package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +1 -0
  576. package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +1 -0
  577. package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +1 -0
  578. package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +1 -0
  579. package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
  580. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
  581. package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +1 -0
  582. package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +1 -0
  583. package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +1 -0
  584. package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +1 -0
  585. package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
  586. package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +1 -0
  587. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +1 -0
  588. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +1 -0
  589. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +1 -0
  590. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +1 -0
  591. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +1 -0
  592. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +1 -0
  593. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +1 -0
  594. package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +1 -0
  595. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +1 -0
  596. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +1 -0
  597. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +1 -0
  598. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +1 -0
  599. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +1 -0
  600. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +1 -0
  601. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +1 -0
  602. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +1 -0
  603. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +1 -0
  604. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +1 -0
  605. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +1 -0
  606. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +1 -0
  607. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +1 -0
  608. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +1 -0
  609. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +1 -0
  610. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +1 -0
  611. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +1 -0
  612. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +1 -0
  613. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +1 -0
  614. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +1 -0
  615. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +1 -0
  616. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +1 -0
  617. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +1 -0
  618. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +1 -0
  619. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +1 -0
  620. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +1 -0
  621. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +1 -0
  622. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +1 -0
  623. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +1 -0
  624. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +1 -0
  625. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +1 -0
  626. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +1 -0
  627. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +1 -0
  628. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +1 -0
  629. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +1 -0
  630. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +1 -0
  631. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +1 -0
  632. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +1 -0
  633. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +1 -0
  634. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +1 -0
  635. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +1 -0
  636. package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +1 -0
  637. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +1 -0
  638. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +1 -0
  639. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +1 -0
  640. package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +1 -0
  641. package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +1 -0
  642. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +1 -0
  643. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +1 -0
  644. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +1 -0
  645. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +1 -0
  646. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +1 -0
  647. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +1 -0
  648. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +1 -0
  649. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +1 -0
  650. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
  651. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +1 -0
  652. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +1 -0
  653. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +1 -0
  654. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +1 -0
  655. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +1 -0
  656. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
  657. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
  658. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +1 -0
  659. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +1 -0
  660. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +1 -0
  661. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +1 -0
  662. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +1 -0
  663. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
  664. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
  665. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +1 -0
  666. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +1 -0
  667. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +1 -0
  668. package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +1 -0
  669. package/.next/static/chunks/app/chat/{page-231df45127e876c2.js → page-9aa2011410895b0d.js} +1 -1
  670. package/.next/static/chunks/app/login/{page-03659dded846ef1d.js → page-af7241bb4c4a8e59.js} +1 -1
  671. package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +1 -0
  672. package/.next/static/chunks/app/more/page-333bba1c8bbc9c11.js +1 -0
  673. package/.next/static/chunks/app/{page-0305431f43195431.js → page-214f7ffa13a0cf10.js} +1 -1
  674. package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +1 -0
  675. package/.next/static/chunks/app/repositories/{page-ae8fa55749976f79.js → page-4951cac905e50224.js} +1 -1
  676. package/.next/static/chunks/app/review/page-a0899b2d285318c3.js +1 -0
  677. package/.next/static/chunks/app/sessions/page-fb36145ec732092a.js +1 -0
  678. package/.next/static/chunks/app/skills/[skillId]/{page-aaf0bcb1dfb558b9.js → page-9099e26b60442873.js} +1 -1
  679. package/.next/static/chunks/app/skills/installed/{page-dafc486410e839b7.js → page-182e32368696d824.js} +1 -1
  680. package/.next/static/chunks/app/skills/{page-9e3c91da31514893.js → page-d3fdc88239ebe0ab.js} +1 -1
  681. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-90f96977c741bbf8.js → page-f3361237420719b4.js} +1 -1
  682. package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +1 -0
  683. package/.next/static/chunks/app/worktrees/[id]/page-d48b95ed554bcd13.js +1 -0
  684. package/.next/static/chunks/app/worktrees/[id]/terminal/page-2631bc5c4b0a9fb8.js +1 -0
  685. package/.next/static/chunks/{webpack-7e79064bfce988d7.js → webpack-9f75198882fdaf08.js} +1 -1
  686. package/.next/static/css/61e10d4b1b11b193.css +1 -0
  687. package/.next/trace +13 -13
  688. package/.next/types/app/api/agents/update/route.ts +347 -0
  689. package/.next/types/app/api/agents/versions/route.ts +347 -0
  690. package/.next/types/app/api/settings/default-agents/route.ts +347 -0
  691. package/.next/types/app/api/settings/default-surface-mode/route.ts +347 -0
  692. package/.next/types/app/api/worktrees/[id]/{start-polling → cli-reference}/route.ts +3 -3
  693. package/.next/types/app/api/worktrees/[id]/verify/config/route.ts +347 -0
  694. package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.ts +347 -0
  695. package/.next/types/app/api/worktrees/apply-default-agents/route.ts +347 -0
  696. package/.next/types/routes.d.ts +9 -2
  697. package/.next/types/validator.ts +72 -9
  698. package/dist/cli/commands/agents.d.ts +35 -0
  699. package/dist/cli/commands/agents.d.ts.map +1 -0
  700. package/dist/cli/commands/agents.js +212 -0
  701. package/dist/cli/commands/ls.d.ts.map +1 -1
  702. package/dist/cli/commands/ls.js +18 -0
  703. package/dist/cli/commands/verify.d.ts.map +1 -1
  704. package/dist/cli/commands/verify.js +111 -0
  705. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  706. package/dist/cli/config/cli-dependencies.js +11 -0
  707. package/dist/cli/docs/agent-operations.d.ts +1 -1
  708. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  709. package/dist/cli/docs/agent-operations.js +30 -0
  710. package/dist/cli/program.d.ts.map +1 -1
  711. package/dist/cli/program.js +6 -0
  712. package/dist/cli/types/api-responses.d.ts +58 -0
  713. package/dist/cli/types/api-responses.d.ts.map +1 -1
  714. package/dist/cli/types/index.d.ts +8 -0
  715. package/dist/cli/types/index.d.ts.map +1 -1
  716. package/dist/cli/utils/preflight.d.ts.map +1 -1
  717. package/dist/cli/utils/preflight.js +6 -0
  718. package/dist/config/system-directories.d.ts +101 -0
  719. package/dist/config/system-directories.d.ts.map +1 -0
  720. package/dist/config/system-directories.js +211 -0
  721. package/dist/lib/cli-tools/types.d.ts +15 -1
  722. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  723. package/dist/lib/detection/status-reason.d.ts +92 -0
  724. package/dist/lib/detection/status-reason.d.ts.map +1 -0
  725. package/dist/lib/detection/status-reason.js +94 -0
  726. package/dist/lib/updates/agent-updater.d.ts +247 -0
  727. package/dist/lib/updates/agent-updater.d.ts.map +1 -0
  728. package/dist/lib/updates/agent-updater.js +373 -0
  729. package/dist/lib/updates/agent-versions.d.ts +77 -0
  730. package/dist/lib/updates/agent-versions.d.ts.map +1 -0
  731. package/dist/lib/updates/agent-versions.js +138 -0
  732. package/dist/lib/updates/codex-version.d.ts +184 -0
  733. package/dist/lib/updates/codex-version.d.ts.map +1 -0
  734. package/dist/lib/updates/codex-version.js +215 -0
  735. package/dist/lib/verification/verify-config.d.ts +202 -0
  736. package/dist/lib/verification/verify-config.d.ts.map +1 -0
  737. package/dist/lib/verification/verify-config.js +429 -0
  738. package/dist/lib/verification/verify-draft.d.ts +182 -0
  739. package/dist/lib/verification/verify-draft.d.ts.map +1 -0
  740. package/dist/lib/verification/verify-draft.js +570 -0
  741. package/dist/server/server.js +58 -0
  742. package/dist/server/src/cli/types/api-responses.js +9 -0
  743. package/dist/server/src/config/cli-tool-timing-config.js +15 -1
  744. package/dist/server/src/config/codex-update-dialog-config.js +154 -0
  745. package/dist/server/src/config/default-agents.js +138 -0
  746. package/dist/server/src/lib/claude-output.js +1 -0
  747. package/dist/server/src/lib/cli-tools/antigravity.js +36 -12
  748. package/dist/server/src/lib/cli-tools/base.js +131 -0
  749. package/dist/server/src/lib/cli-tools/codex.js +350 -100
  750. package/dist/server/src/lib/cli-tools/copilot.js +34 -10
  751. package/dist/server/src/lib/cli-tools/gemini.js +34 -10
  752. package/dist/server/src/lib/cli-tools/liveness-spec.js +214 -0
  753. package/dist/server/src/lib/cli-tools/opencode.js +72 -19
  754. package/dist/server/src/lib/cli-tools/session-liveness.js +64 -0
  755. package/dist/server/src/lib/cli-tools/vibe-local.js +30 -10
  756. package/dist/server/src/lib/db/app-settings-db.js +202 -0
  757. package/dist/server/src/lib/db/chat-db.js +120 -7
  758. package/dist/server/src/lib/db/worktree-db.js +178 -3
  759. package/dist/server/src/lib/detection/status-detector.js +3 -2
  760. package/dist/server/src/lib/detection/status-reason.js +17 -0
  761. package/dist/server/src/lib/detection/tool-liveness.js +233 -0
  762. package/dist/server/src/lib/detection/version-probes.js +290 -0
  763. package/dist/server/src/lib/env.js +122 -0
  764. package/dist/server/src/lib/git/worktrees.js +164 -0
  765. package/dist/server/src/lib/history/transcript-tail.js +80 -0
  766. package/dist/server/src/lib/history/user-turn-recorder.js +247 -0
  767. package/dist/server/src/lib/hooks/permission-decision-service.js +85 -1
  768. package/dist/server/src/lib/hooks/sources/antigravity/history.js +519 -0
  769. package/dist/server/src/lib/hooks/sources/antigravity/source.js +7 -0
  770. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +407 -0
  771. package/dist/server/src/lib/hooks/sources/claude/history.js +654 -0
  772. package/dist/server/src/lib/hooks/sources/claude/source.js +4 -0
  773. package/dist/server/src/lib/hooks/sources/claude/transcript.js +518 -0
  774. package/dist/server/src/lib/hooks/sources/codex/history.js +576 -0
  775. package/dist/server/src/lib/hooks/sources/codex/source.js +4 -0
  776. package/dist/server/src/lib/hooks/sources/codex/transcript.js +448 -0
  777. package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
  778. package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
  779. package/dist/server/src/lib/hooks/sources/legacy-relay.js +3 -0
  780. package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -0
  781. package/dist/server/src/lib/hooks/sources/opencode/source.js +4 -0
  782. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +10 -28
  783. package/dist/server/src/lib/hooks/sources/turn-body.js +118 -0
  784. package/dist/server/src/lib/polling/prompt-dedup.js +2 -4
  785. package/dist/server/src/lib/polling/response-checker.js +44 -3
  786. package/dist/server/src/lib/polling/response-dedup.js +2 -4
  787. package/dist/server/src/lib/polling/response-poller-core.js +191 -29
  788. package/dist/server/src/lib/polling/structured-history-gate.js +147 -16
  789. package/dist/server/src/lib/push/push-sender.js +21 -1
  790. package/dist/server/src/lib/push/waiting-push-notifier.js +126 -8
  791. package/dist/server/src/lib/realtime/publisher-registry.js +171 -0
  792. package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -1
  793. package/dist/server/src/lib/realtime/types.js +96 -1
  794. package/dist/server/src/lib/repo-config/agents-config.js +298 -0
  795. package/dist/server/src/lib/selected-agents-validator.js +93 -23
  796. package/dist/server/src/lib/session/claude-session.js +39 -108
  797. package/dist/server/src/lib/session/current-output-builder.js +263 -4
  798. package/dist/server/src/lib/session/send-user-message.js +90 -2
  799. package/dist/server/src/lib/tmux/tmux.js +29 -0
  800. package/dist/server/src/lib/tui-accumulator.js +2 -8
  801. package/dist/server/src/lib/updates/agent-updater.js +373 -0
  802. package/dist/server/src/lib/updates/agent-versions.js +138 -0
  803. package/dist/server/src/lib/updates/codex-version.js +215 -0
  804. package/dist/server/src/lib/updates/index.js +42 -0
  805. package/dist/server/src/lib/verification/gate-runner.js +298 -37
  806. package/dist/server/src/lib/verification/machine-lock.js +11 -0
  807. package/dist/server/src/lib/verification/run-verdict-vocabulary.js +151 -0
  808. package/dist/server/src/lib/verification/verify-config.js +33 -0
  809. package/dist/server/src/lib/ws-server.js +143 -6
  810. package/dist/server/src/types/agent-transcript.js +241 -5
  811. package/dist/server/src/types/sidebar.js +40 -9
  812. package/dist/server/src/types/ui-state.js +24 -1
  813. package/dist/types/cli-tool-contracts.d.ts +119 -0
  814. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  815. package/package.json +1 -1
  816. package/public/sw.js +15 -1
  817. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +0 -1
  818. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +0 -1
  819. package/.next/server/chunks/1601.js +0 -7
  820. package/.next/server/chunks/1714.js +0 -7
  821. package/.next/server/chunks/221.js +0 -19
  822. package/.next/server/chunks/222.js +0 -1
  823. package/.next/server/chunks/2366.js +0 -1
  824. package/.next/server/chunks/2759.js +0 -8
  825. package/.next/server/chunks/3558.js +0 -1
  826. package/.next/server/chunks/4689.js +0 -25
  827. package/.next/server/chunks/5089.js +0 -1
  828. package/.next/server/chunks/6274.js +0 -14
  829. package/.next/server/chunks/9067.js +0 -1
  830. package/.next/server/chunks/9373.js +0 -9
  831. package/.next/server/chunks/9508.js +0 -1
  832. package/.next/static/Dvfs4ZThl5vBhJGP-ZQuJ/_buildManifest.js +0 -1
  833. package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +0 -1
  834. package/.next/static/chunks/3922.0d2e64daf9f187da.js +0 -1
  835. package/.next/static/chunks/5229-580b581fce5aeb52.js +0 -1
  836. package/.next/static/chunks/6381-9a929249196a0e77.js +0 -1
  837. package/.next/static/chunks/app/api/app/update/route-e3626364434d521b.js +0 -1
  838. package/.next/static/chunks/app/api/app/update-check/route-e3626364434d521b.js +0 -1
  839. package/.next/static/chunks/app/api/assistant/conversation/route-e3626364434d521b.js +0 -1
  840. package/.next/static/chunks/app/api/assistant/current-output/route-e3626364434d521b.js +0 -1
  841. package/.next/static/chunks/app/api/assistant/messages/route-e3626364434d521b.js +0 -1
  842. package/.next/static/chunks/app/api/assistant/session/route-e3626364434d521b.js +0 -1
  843. package/.next/static/chunks/app/api/assistant/start/route-e3626364434d521b.js +0 -1
  844. package/.next/static/chunks/app/api/assistant/terminal/route-e3626364434d521b.js +0 -1
  845. package/.next/static/chunks/app/api/assistant/tools/route-e3626364434d521b.js +0 -1
  846. package/.next/static/chunks/app/api/auth/login/route-e3626364434d521b.js +0 -1
  847. package/.next/static/chunks/app/api/auth/logout/route-e3626364434d521b.js +0 -1
  848. package/.next/static/chunks/app/api/auth/status/route-e3626364434d521b.js +0 -1
  849. package/.next/static/chunks/app/api/capabilities/route-e3626364434d521b.js +0 -1
  850. package/.next/static/chunks/app/api/daily-summary/route-e3626364434d521b.js +0 -1
  851. package/.next/static/chunks/app/api/daily-summary/status/route-e3626364434d521b.js +0 -1
  852. package/.next/static/chunks/app/api/external-apps/[id]/health/route-e3626364434d521b.js +0 -1
  853. package/.next/static/chunks/app/api/external-apps/[id]/route-e3626364434d521b.js +0 -1
  854. package/.next/static/chunks/app/api/external-apps/route-e3626364434d521b.js +0 -1
  855. package/.next/static/chunks/app/api/fs/browse/route-e3626364434d521b.js +0 -1
  856. package/.next/static/chunks/app/api/fs/recent-paths/route-e3626364434d521b.js +0 -1
  857. package/.next/static/chunks/app/api/hooks/agent-event/route-e3626364434d521b.js +0 -1
  858. package/.next/static/chunks/app/api/hooks/claude-done/route-e3626364434d521b.js +0 -1
  859. package/.next/static/chunks/app/api/hooks/permission-request/route-e3626364434d521b.js +0 -1
  860. package/.next/static/chunks/app/api/metrics/vibe/route-e3626364434d521b.js +0 -1
  861. package/.next/static/chunks/app/api/ollama/models/route-e3626364434d521b.js +0 -1
  862. package/.next/static/chunks/app/api/push/escalation/route-e3626364434d521b.js +0 -1
  863. package/.next/static/chunks/app/api/push/subscriptions/route-e3626364434d521b.js +0 -1
  864. package/.next/static/chunks/app/api/push/vapid/route-e3626364434d521b.js +0 -1
  865. package/.next/static/chunks/app/api/remote/pair/route-e3626364434d521b.js +0 -1
  866. package/.next/static/chunks/app/api/repositories/[id]/route-e3626364434d521b.js +0 -1
  867. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
  868. package/.next/static/chunks/app/api/repositories/[id]/todos/route-e3626364434d521b.js +0 -1
  869. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-e3626364434d521b.js +0 -1
  870. package/.next/static/chunks/app/api/repositories/clone/route-e3626364434d521b.js +0 -1
  871. package/.next/static/chunks/app/api/repositories/excluded/route-e3626364434d521b.js +0 -1
  872. package/.next/static/chunks/app/api/repositories/restore/route-e3626364434d521b.js +0 -1
  873. package/.next/static/chunks/app/api/repositories/route-e3626364434d521b.js +0 -1
  874. package/.next/static/chunks/app/api/repositories/scan/route-e3626364434d521b.js +0 -1
  875. package/.next/static/chunks/app/api/repositories/sync/route-e3626364434d521b.js +0 -1
  876. package/.next/static/chunks/app/api/repositories/validate-path/route-e3626364434d521b.js +0 -1
  877. package/.next/static/chunks/app/api/sidebar/group-order/route-e3626364434d521b.js +0 -1
  878. package/.next/static/chunks/app/api/skills/[id]/route-e3626364434d521b.js +0 -1
  879. package/.next/static/chunks/app/api/skills/installations/route-e3626364434d521b.js +0 -1
  880. package/.next/static/chunks/app/api/skills/operations/route-e3626364434d521b.js +0 -1
  881. package/.next/static/chunks/app/api/skills/reindex/route-e3626364434d521b.js +0 -1
  882. package/.next/static/chunks/app/api/skills/route-e3626364434d521b.js +0 -1
  883. package/.next/static/chunks/app/api/slash-commands/route-e3626364434d521b.js +0 -1
  884. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-e3626364434d521b.js +0 -1
  885. package/.next/static/chunks/app/api/tasks/[taskId]/route-e3626364434d521b.js +0 -1
  886. package/.next/static/chunks/app/api/templates/[id]/route-e3626364434d521b.js +0 -1
  887. package/.next/static/chunks/app/api/templates/route-e3626364434d521b.js +0 -1
  888. package/.next/static/chunks/app/api/todos/route-e3626364434d521b.js +0 -1
  889. package/.next/static/chunks/app/api/verification/runs/[runId]/route-e3626364434d521b.js +0 -1
  890. package/.next/static/chunks/app/api/verification/runs/route-e3626364434d521b.js +0 -1
  891. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-e3626364434d521b.js +0 -1
  892. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-e3626364434d521b.js +0 -1
  893. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-e3626364434d521b.js +0 -1
  894. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-e3626364434d521b.js +0 -1
  895. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-e3626364434d521b.js +0 -1
  896. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-e3626364434d521b.js +0 -1
  897. package/.next/static/chunks/app/api/worktrees/[id]/env/route-e3626364434d521b.js +0 -1
  898. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-e3626364434d521b.js +0 -1
  899. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-e3626364434d521b.js +0 -1
  900. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-e3626364434d521b.js +0 -1
  901. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-e3626364434d521b.js +0 -1
  902. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-e3626364434d521b.js +0 -1
  903. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-e3626364434d521b.js +0 -1
  904. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-e3626364434d521b.js +0 -1
  905. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-e3626364434d521b.js +0 -1
  906. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-e3626364434d521b.js +0 -1
  907. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-e3626364434d521b.js +0 -1
  908. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-e3626364434d521b.js +0 -1
  909. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-e3626364434d521b.js +0 -1
  910. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-e3626364434d521b.js +0 -1
  911. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-e3626364434d521b.js +0 -1
  912. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-e3626364434d521b.js +0 -1
  913. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-e3626364434d521b.js +0 -1
  914. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-e3626364434d521b.js +0 -1
  915. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-e3626364434d521b.js +0 -1
  916. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-e3626364434d521b.js +0 -1
  917. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-e3626364434d521b.js +0 -1
  918. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-e3626364434d521b.js +0 -1
  919. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-e3626364434d521b.js +0 -1
  920. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-e3626364434d521b.js +0 -1
  921. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-e3626364434d521b.js +0 -1
  922. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-e3626364434d521b.js +0 -1
  923. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-e3626364434d521b.js +0 -1
  924. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-e3626364434d521b.js +0 -1
  925. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-e3626364434d521b.js +0 -1
  926. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-e3626364434d521b.js +0 -1
  927. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-e3626364434d521b.js +0 -1
  928. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-e3626364434d521b.js +0 -1
  929. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-e3626364434d521b.js +0 -1
  930. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-e3626364434d521b.js +0 -1
  931. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-e3626364434d521b.js +0 -1
  932. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-e3626364434d521b.js +0 -1
  933. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-e3626364434d521b.js +0 -1
  934. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-e3626364434d521b.js +0 -1
  935. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-e3626364434d521b.js +0 -1
  936. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-e3626364434d521b.js +0 -1
  937. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-e3626364434d521b.js +0 -1
  938. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-e3626364434d521b.js +0 -1
  939. package/.next/static/chunks/app/api/worktrees/[id]/route-e3626364434d521b.js +0 -1
  940. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-e3626364434d521b.js +0 -1
  941. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-e3626364434d521b.js +0 -1
  942. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-e3626364434d521b.js +0 -1
  943. package/.next/static/chunks/app/api/worktrees/[id]/search/route-e3626364434d521b.js +0 -1
  944. package/.next/static/chunks/app/api/worktrees/[id]/send/route-e3626364434d521b.js +0 -1
  945. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-e3626364434d521b.js +0 -1
  946. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-e3626364434d521b.js +0 -1
  947. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-e3626364434d521b.js +0 -1
  948. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-e3626364434d521b.js +0 -1
  949. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-e3626364434d521b.js +0 -1
  950. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-e3626364434d521b.js +0 -1
  951. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-e3626364434d521b.js +0 -1
  952. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-e3626364434d521b.js +0 -1
  953. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-e3626364434d521b.js +0 -1
  954. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-e3626364434d521b.js +0 -1
  955. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-e3626364434d521b.js +0 -1
  956. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-e3626364434d521b.js +0 -1
  957. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-e3626364434d521b.js +0 -1
  958. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-e3626364434d521b.js +0 -1
  959. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-e3626364434d521b.js +0 -1
  960. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
  961. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-e3626364434d521b.js +0 -1
  962. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-e3626364434d521b.js +0 -1
  963. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-e3626364434d521b.js +0 -1
  964. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-e3626364434d521b.js +0 -1
  965. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-e3626364434d521b.js +0 -1
  966. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-e3626364434d521b.js +0 -1
  967. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-e3626364434d521b.js +0 -1
  968. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-e3626364434d521b.js +0 -1
  969. package/.next/static/chunks/app/api/worktrees/route-e3626364434d521b.js +0 -1
  970. package/.next/static/chunks/app/manifest.webmanifest/route-e3626364434d521b.js +0 -1
  971. package/.next/static/chunks/app/more/page-03867ab635d197c7.js +0 -1
  972. package/.next/static/chunks/app/proxy/[...path]/route-e3626364434d521b.js +0 -1
  973. package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +0 -1
  974. package/.next/static/chunks/app/sessions/page-4d5382b257077c14.js +0 -1
  975. package/.next/static/chunks/app/worktrees/[id]/layout-e3626364434d521b.js +0 -1
  976. package/.next/static/chunks/app/worktrees/[id]/page-817378dd7c580774.js +0 -1
  977. package/.next/static/chunks/app/worktrees/[id]/terminal/page-00ad5d9a62a71cab.js +0 -1
  978. package/.next/static/css/6266bde3bce465a2.css +0 -1
  979. /package/.next/static/{Dvfs4ZThl5vBhJGP-ZQuJ → 7K0XXFu_ty4wRSkl4X21E}/_ssgManifest.js +0 -0
@@ -0,0 +1,184 @@
1
+ /**
2
+ * `~/.codex/version.json` — what codex itself already knows about its updates
3
+ * (Issue #2069).
4
+ *
5
+ * ## Why a file rather than a request
6
+ *
7
+ * codex runs its own release check and writes the answer next to its config:
8
+ *
9
+ * ```json
10
+ * {"latest_version":"0.151.0","last_checked_at":"2026-08-30T15:12:18.082219Z","dismissed_version":null}
11
+ * ```
12
+ *
13
+ * So "is there a newer codex?" is answerable with a `readFileSync` and no
14
+ * network at all. That is the whole reason this module exists rather than a
15
+ * registry query: `GET /api/agents/versions` is rendered on a settings screen
16
+ * and inside the agent pane, and #1913's rule — do not put a network round trip
17
+ * on a surface that renders a list — applies to a fetch exactly as it applies to
18
+ * a child process. The trade is that the answer is only as fresh as the last
19
+ * time codex itself looked, which is the correct freshness: it is codex's own
20
+ * notion of "you are behind", the same one its TUI banner uses.
21
+ *
22
+ * ## Fail-open, in every direction
23
+ *
24
+ * The file is written by another program, on its own schedule, in a format it
25
+ * owns. It is legitimately **absent** (a fresh install, a codex that has never
26
+ * run), legitimately **null-valued** (`dismissed_version` is null until the user
27
+ * dismisses a banner), and it can be a half-written temp file caught mid-rename.
28
+ * None of those is an error here: every failure resolves to
29
+ * {@link EMPTY_CODEX_VERSION_FILE} and the caller reports "no update known",
30
+ * which is exactly what the surfaces render when codex is not installed either.
31
+ * The acceptance criterion for this Issue names that behaviour directly —
32
+ * 「`version.json` が無い / 壊れている環境で落ちない」— and
33
+ * `tests/unit/updates/codex-version-2069.test.ts` pins it case by case.
34
+ *
35
+ * ## `$CODEX_HOME`: why it is resolved here, and where the two rules diverge
36
+ *
37
+ * `lib/hooks/sources/codex/hooks-config.getCodexHome()` answers the same
38
+ * question, and this module cannot call it: that function reaches `@/lib/logger`
39
+ * through `config/safe-directory`, and `tsconfig.cli.json` resets `"paths"` to
40
+ * `{}` — so one alias import anywhere in this module's transitive closure breaks
41
+ * `npm run build:cli` with TS2307 (the #1933 defect PR #1991 fixed), and
42
+ * `commandmate agents update` puts this file in the CLI's closure. The variable
43
+ * NAME therefore exists in two files, and
44
+ * `tests/unit/updates/codex-home-parity-2069.test.ts` is the join: it imports
45
+ * both and fails if the spellings or the shared rules ever drift.
46
+ *
47
+ * The rules are deliberately identical except for one case, and that case is a
48
+ * correctness fix rather than a divergence for its own sake:
49
+ *
50
+ * | `$CODEX_HOME` | hooks-config | here |
51
+ * |--------------------------|-------------------------------------|---------------------|
52
+ * | unset | `~/.codex` | `~/.codex` |
53
+ * | absolute | that path | that path |
54
+ * | inside `/proc`/`/sys`/`/dev` | `~/.codex` (#1774) | `~/.codex` |
55
+ * | **relative** | passed through **verbatim** | **null = unknown** |
56
+ *
57
+ * `resolveSafeDirectory` returns a relative candidate unchanged, and
58
+ * `hooks-config` puts that value on codex's own launch line — so codex resolves
59
+ * it against **the agent's worktree cwd**, and `CODEX_HOME=.codex-shared` means
60
+ * codex writes `<worktree>/.codex-shared/version.json`. This process is not in
61
+ * that worktree and, with several worktrees open, cannot say which one was
62
+ * meant. Falling back to `~/.codex` there is the one genuinely bad answer: it
63
+ * is not "no data", it is an unrelated install's version, reported with the
64
+ * same confidence as a real reading. So a relative value resolves to null and
65
+ * every surface renders "no update information", which is what they already
66
+ * render when codex has never run.
67
+ *
68
+ * @module lib/updates/codex-version
69
+ */
70
+ /**
71
+ * The one thing this module reads out of the environment.
72
+ *
73
+ * Narrower than `NodeJS.ProcessEnv` on purpose: vitest's type augmentation
74
+ * makes `NODE_ENV` REQUIRED on that interface, so a test could not hand these
75
+ * functions a two-key literal without also declaring a `NODE_ENV` that has
76
+ * nothing to do with what is being tested.
77
+ */
78
+ export type CodexVersionEnv = Readonly<Record<string, string | undefined>>;
79
+ /** The file codex writes its release check into, inside `$CODEX_HOME`. */
80
+ export declare const CODEX_VERSION_FILENAME = "version.json";
81
+ /**
82
+ * Largest `version.json` this module will parse.
83
+ *
84
+ * Three short fields; anything past this is not the file we mean. A cap rather
85
+ * than trust because the read happens on a request path and the file is written
86
+ * by another process — an oversized file is discarded, not truncated and parsed.
87
+ */
88
+ export declare const CODEX_VERSION_FILE_MAX_BYTES: number;
89
+ /** What {@link readCodexVersionFile} could recover from the file. */
90
+ export interface CodexVersionFile {
91
+ /** `latest_version`, normalized to `major.minor.patch`, or null. */
92
+ latestVersion: string | null;
93
+ /** `dismissed_version`, normalized, or null (the ordinary value). */
94
+ dismissedVersion: string | null;
95
+ /** `last_checked_at` verbatim — an opaque timestamp string, or null. */
96
+ lastCheckedAt: string | null;
97
+ /**
98
+ * Absolute path that was read, or null when `$CODEX_HOME` is relative and the
99
+ * file's location therefore depends on a worktree this process cannot name.
100
+ */
101
+ path: string | null;
102
+ /** False when the file was missing, oversized, unreadable or malformed. */
103
+ readable: boolean;
104
+ }
105
+ /** The answer for every failure: "codex has told us nothing". */
106
+ export declare const EMPTY_CODEX_VERSION_FILE: Omit<CodexVersionFile, 'path'>;
107
+ /**
108
+ * The directory codex keeps its state in, as seen from THIS process.
109
+ *
110
+ * See the table in the module header for the four cases. The one that returns
111
+ * null is a relative `$CODEX_HOME`: `hooks-config` forwards such a value to
112
+ * codex verbatim, codex resolves it against the agent's worktree cwd, and this
113
+ * process has no worktree — so the honest answer is "cannot tell", not
114
+ * `~/.codex`.
115
+ *
116
+ * @param env - Environment to read. Injectable so tests need no `process.env`
117
+ * mutation.
118
+ * @returns An absolute directory path, or null when it cannot be determined.
119
+ */
120
+ export declare function getCodexHomeForVersionRead(env?: CodexVersionEnv): string | null;
121
+ /**
122
+ * Absolute path of the file codex writes its release check into, or null when
123
+ * {@link getCodexHomeForVersionRead} cannot determine the directory.
124
+ */
125
+ export declare function getCodexVersionFilePath(env?: CodexVersionEnv): string | null;
126
+ /**
127
+ * Read `$CODEX_HOME/version.json`.
128
+ *
129
+ * Never throws and never rejects: see the module header. A file that parses but
130
+ * carries junk in a field yields null for **that field only**, so a codex build
131
+ * that adds or renames a key still gives up whatever the rest of it says.
132
+ *
133
+ * @param options.path - Read this file instead of the resolved default (tests,
134
+ * and an isolated-HOME verification run).
135
+ * @param options.env - Environment used to resolve the default path.
136
+ */
137
+ export declare function readCodexVersionFile(options?: {
138
+ path?: string;
139
+ env?: CodexVersionEnv;
140
+ }): CodexVersionFile;
141
+ /** What the two update surfaces render for codex. */
142
+ export interface CodexUpdateStatus {
143
+ /** What `codex --version` reported, or null when it is not installed. */
144
+ installed: string | null;
145
+ /** codex's own `latest_version`, or null when it has not looked. */
146
+ latestVersion: string | null;
147
+ /** codex's own `dismissed_version`, or null. */
148
+ dismissedVersion: string | null;
149
+ /** True only when BOTH versions are known AND latest is strictly newer. */
150
+ updateAvailable: boolean;
151
+ /**
152
+ * True when `dismissed_version` names the update that is available — i.e.
153
+ * **something** answered codex's update banner with "not this version".
154
+ *
155
+ * **Not necessarily the user.** The digit that writes `dismissed_version` is
156
+ * the same one CommandMate can be configured to send for codex's in-pane
157
+ * update dialog (#2068, `CM_CODEX_UPDATE_DIALOG`), and on the default policy
158
+ * CommandMate sends it on every codex launch. So on a stock install this flag
159
+ * goes true without anybody having decided anything, and wording that says
160
+ * "you dismissed this" would be blaming the user for the server's own
161
+ * automatic answer.
162
+ *
163
+ * That is why it is reported and never acted on: it does not hide the update,
164
+ * it does not disable the button, and the copy beside it
165
+ * (`common.agentUpdates.dismissed`) says only that the version was dismissed
166
+ * in codex — without naming who did it.
167
+ */
168
+ dismissedInCodex: boolean;
169
+ /** Where the "latest" half came from, or null when nothing was readable. */
170
+ source: 'version.json' | null;
171
+ }
172
+ /**
173
+ * Combine the installed version with codex's own release check.
174
+ *
175
+ * Both halves are "no answer"-tolerant, and every kind of no-answer resolves to
176
+ * `updateAvailable: false` — not installed, never checked, unparseable. That is
177
+ * the same posture `DetectorFreshnessRow.stale` takes, and for the same reason:
178
+ * an update prompt the user cannot act on is worse than no prompt.
179
+ *
180
+ * @param installed - Output of the `codex --version` probe, or null.
181
+ * @param file - What {@link readCodexVersionFile} recovered.
182
+ */
183
+ export declare function evaluateCodexUpdate(installed: string | null, file: CodexVersionFile): CodexUpdateStatus;
184
+ //# sourceMappingURL=codex-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-version.d.ts","sourceRoot":"","sources":["../../../src/lib/updates/codex-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAQH;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAa3E,0EAA0E;AAC1E,eAAO,MAAM,sBAAsB,iBAAiB,CAAC;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,QAAY,CAAC;AAEtD,qEAAqE;AACrE,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wEAAwE;IACxE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAKnE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,GAAE,eAA6B,GAAG,MAAM,GAAG,IAAI,CAS5F;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,eAA6B,GAAG,MAAM,GAAG,IAAI,CAGzF;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,eAAe,CAAA;CAAO,GACrD,gBAAgB,CA2BlB;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oEAAoE;IACpE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4EAA4E;IAC5E,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,EAAE,gBAAgB,GACrB,iBAAiB,CAiBnB"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /**
3
+ * `~/.codex/version.json` — what codex itself already knows about its updates
4
+ * (Issue #2069).
5
+ *
6
+ * ## Why a file rather than a request
7
+ *
8
+ * codex runs its own release check and writes the answer next to its config:
9
+ *
10
+ * ```json
11
+ * {"latest_version":"0.151.0","last_checked_at":"2026-08-30T15:12:18.082219Z","dismissed_version":null}
12
+ * ```
13
+ *
14
+ * So "is there a newer codex?" is answerable with a `readFileSync` and no
15
+ * network at all. That is the whole reason this module exists rather than a
16
+ * registry query: `GET /api/agents/versions` is rendered on a settings screen
17
+ * and inside the agent pane, and #1913's rule — do not put a network round trip
18
+ * on a surface that renders a list — applies to a fetch exactly as it applies to
19
+ * a child process. The trade is that the answer is only as fresh as the last
20
+ * time codex itself looked, which is the correct freshness: it is codex's own
21
+ * notion of "you are behind", the same one its TUI banner uses.
22
+ *
23
+ * ## Fail-open, in every direction
24
+ *
25
+ * The file is written by another program, on its own schedule, in a format it
26
+ * owns. It is legitimately **absent** (a fresh install, a codex that has never
27
+ * run), legitimately **null-valued** (`dismissed_version` is null until the user
28
+ * dismisses a banner), and it can be a half-written temp file caught mid-rename.
29
+ * None of those is an error here: every failure resolves to
30
+ * {@link EMPTY_CODEX_VERSION_FILE} and the caller reports "no update known",
31
+ * which is exactly what the surfaces render when codex is not installed either.
32
+ * The acceptance criterion for this Issue names that behaviour directly —
33
+ * 「`version.json` が無い / 壊れている環境で落ちない」— and
34
+ * `tests/unit/updates/codex-version-2069.test.ts` pins it case by case.
35
+ *
36
+ * ## `$CODEX_HOME`: why it is resolved here, and where the two rules diverge
37
+ *
38
+ * `lib/hooks/sources/codex/hooks-config.getCodexHome()` answers the same
39
+ * question, and this module cannot call it: that function reaches `@/lib/logger`
40
+ * through `config/safe-directory`, and `tsconfig.cli.json` resets `"paths"` to
41
+ * `{}` — so one alias import anywhere in this module's transitive closure breaks
42
+ * `npm run build:cli` with TS2307 (the #1933 defect PR #1991 fixed), and
43
+ * `commandmate agents update` puts this file in the CLI's closure. The variable
44
+ * NAME therefore exists in two files, and
45
+ * `tests/unit/updates/codex-home-parity-2069.test.ts` is the join: it imports
46
+ * both and fails if the spellings or the shared rules ever drift.
47
+ *
48
+ * The rules are deliberately identical except for one case, and that case is a
49
+ * correctness fix rather than a divergence for its own sake:
50
+ *
51
+ * | `$CODEX_HOME` | hooks-config | here |
52
+ * |--------------------------|-------------------------------------|---------------------|
53
+ * | unset | `~/.codex` | `~/.codex` |
54
+ * | absolute | that path | that path |
55
+ * | inside `/proc`/`/sys`/`/dev` | `~/.codex` (#1774) | `~/.codex` |
56
+ * | **relative** | passed through **verbatim** | **null = unknown** |
57
+ *
58
+ * `resolveSafeDirectory` returns a relative candidate unchanged, and
59
+ * `hooks-config` puts that value on codex's own launch line — so codex resolves
60
+ * it against **the agent's worktree cwd**, and `CODEX_HOME=.codex-shared` means
61
+ * codex writes `<worktree>/.codex-shared/version.json`. This process is not in
62
+ * that worktree and, with several worktrees open, cannot say which one was
63
+ * meant. Falling back to `~/.codex` there is the one genuinely bad answer: it
64
+ * is not "no data", it is an unrelated install's version, reported with the
65
+ * same confidence as a real reading. So a relative value resolves to null and
66
+ * every surface renders "no update information", which is what they already
67
+ * render when codex has never run.
68
+ *
69
+ * @module lib/updates/codex-version
70
+ */
71
+ Object.defineProperty(exports, "__esModule", { value: true });
72
+ exports.EMPTY_CODEX_VERSION_FILE = exports.CODEX_VERSION_FILE_MAX_BYTES = exports.CODEX_VERSION_FILENAME = void 0;
73
+ exports.getCodexHomeForVersionRead = getCodexHomeForVersionRead;
74
+ exports.getCodexVersionFilePath = getCodexVersionFilePath;
75
+ exports.readCodexVersionFile = readCodexVersionFile;
76
+ exports.evaluateCodexUpdate = evaluateCodexUpdate;
77
+ const fs_1 = require("fs");
78
+ const os_1 = require("os");
79
+ const path_1 = require("path");
80
+ const system_directories_1 = require("../../config/system-directories");
81
+ const version_probes_1 = require("../detection/version-probes");
82
+ /**
83
+ * codex's own config-directory override.
84
+ *
85
+ * NOT exported: `lib/hooks/sources/codex/hooks-config` already exports this name
86
+ * and that one is the repository's single public spelling. A second exported
87
+ * `CODEX_HOME_ENV_VAR` is how two modules end up disagreeing about it, and the
88
+ * `@/`-import rule above is the only reason the literal exists twice at all.
89
+ * `tests/unit/updates/codex-home-parity-2069.test.ts` pins the two together.
90
+ */
91
+ const CODEX_HOME_ENV_VAR = 'CODEX_HOME';
92
+ /** The file codex writes its release check into, inside `$CODEX_HOME`. */
93
+ exports.CODEX_VERSION_FILENAME = 'version.json';
94
+ /**
95
+ * Largest `version.json` this module will parse.
96
+ *
97
+ * Three short fields; anything past this is not the file we mean. A cap rather
98
+ * than trust because the read happens on a request path and the file is written
99
+ * by another process — an oversized file is discarded, not truncated and parsed.
100
+ */
101
+ exports.CODEX_VERSION_FILE_MAX_BYTES = 64 * 1024;
102
+ /** The answer for every failure: "codex has told us nothing". */
103
+ exports.EMPTY_CODEX_VERSION_FILE = {
104
+ latestVersion: null,
105
+ dismissedVersion: null,
106
+ lastCheckedAt: null,
107
+ readable: false,
108
+ };
109
+ /**
110
+ * The directory codex keeps its state in, as seen from THIS process.
111
+ *
112
+ * See the table in the module header for the four cases. The one that returns
113
+ * null is a relative `$CODEX_HOME`: `hooks-config` forwards such a value to
114
+ * codex verbatim, codex resolves it against the agent's worktree cwd, and this
115
+ * process has no worktree — so the honest answer is "cannot tell", not
116
+ * `~/.codex`.
117
+ *
118
+ * @param env - Environment to read. Injectable so tests need no `process.env`
119
+ * mutation.
120
+ * @returns An absolute directory path, or null when it cannot be determined.
121
+ */
122
+ function getCodexHomeForVersionRead(env = process.env) {
123
+ const fallback = (0, path_1.join)((0, os_1.homedir)(), '.codex');
124
+ const configured = env[CODEX_HOME_ENV_VAR];
125
+ if (!configured)
126
+ return fallback;
127
+ // Matches `resolveSafeDirectory`: a /proc, /sys or /dev path is refused and
128
+ // the built-in default is used, on both sides of the join.
129
+ if ((0, system_directories_1.isVirtualFilesystemPath)(configured))
130
+ return fallback;
131
+ if (!(0, path_1.isAbsolute)(configured))
132
+ return null;
133
+ return configured;
134
+ }
135
+ /**
136
+ * Absolute path of the file codex writes its release check into, or null when
137
+ * {@link getCodexHomeForVersionRead} cannot determine the directory.
138
+ */
139
+ function getCodexVersionFilePath(env = process.env) {
140
+ const home = getCodexHomeForVersionRead(env);
141
+ return home === null ? null : (0, path_1.join)(home, exports.CODEX_VERSION_FILENAME);
142
+ }
143
+ /** Read one field as a normalized version, tolerating null / wrong types. */
144
+ function readVersionField(raw, key) {
145
+ const value = raw[key];
146
+ if (typeof value !== 'string')
147
+ return null;
148
+ return (0, version_probes_1.parseCliVersion)(value);
149
+ }
150
+ /**
151
+ * Read `$CODEX_HOME/version.json`.
152
+ *
153
+ * Never throws and never rejects: see the module header. A file that parses but
154
+ * carries junk in a field yields null for **that field only**, so a codex build
155
+ * that adds or renames a key still gives up whatever the rest of it says.
156
+ *
157
+ * @param options.path - Read this file instead of the resolved default (tests,
158
+ * and an isolated-HOME verification run).
159
+ * @param options.env - Environment used to resolve the default path.
160
+ */
161
+ function readCodexVersionFile(options = {}) {
162
+ const path = options.path ?? getCodexVersionFilePath(options.env);
163
+ const empty = { ...exports.EMPTY_CODEX_VERSION_FILE, path };
164
+ // Unknown directory (a relative `$CODEX_HOME`): read nothing rather than read
165
+ // the wrong install's file. See the table in the module header.
166
+ if (path === null)
167
+ return empty;
168
+ try {
169
+ const stat = (0, fs_1.statSync)(path);
170
+ if (!stat.isFile())
171
+ return empty;
172
+ if (stat.size > exports.CODEX_VERSION_FILE_MAX_BYTES)
173
+ return empty;
174
+ const parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf-8'));
175
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
176
+ return empty;
177
+ const raw = parsed;
178
+ return {
179
+ latestVersion: readVersionField(raw, 'latest_version'),
180
+ dismissedVersion: readVersionField(raw, 'dismissed_version'),
181
+ lastCheckedAt: typeof raw.last_checked_at === 'string' ? raw.last_checked_at : null,
182
+ path,
183
+ readable: true,
184
+ };
185
+ }
186
+ catch {
187
+ return empty;
188
+ }
189
+ }
190
+ /**
191
+ * Combine the installed version with codex's own release check.
192
+ *
193
+ * Both halves are "no answer"-tolerant, and every kind of no-answer resolves to
194
+ * `updateAvailable: false` — not installed, never checked, unparseable. That is
195
+ * the same posture `DetectorFreshnessRow.stale` takes, and for the same reason:
196
+ * an update prompt the user cannot act on is worse than no prompt.
197
+ *
198
+ * @param installed - Output of the `codex --version` probe, or null.
199
+ * @param file - What {@link readCodexVersionFile} recovered.
200
+ */
201
+ function evaluateCodexUpdate(installed, file) {
202
+ const updateAvailable = installed !== null &&
203
+ file.latestVersion !== null &&
204
+ (0, version_probes_1.compareCliVersions)(file.latestVersion, installed) > 0;
205
+ return {
206
+ installed,
207
+ latestVersion: file.latestVersion,
208
+ dismissedVersion: file.dismissedVersion,
209
+ updateAvailable,
210
+ dismissedInCodex: updateAvailable &&
211
+ file.dismissedVersion !== null &&
212
+ file.dismissedVersion === file.latestVersion,
213
+ source: file.readable ? 'version.json' : null,
214
+ };
215
+ }
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Loader and validator for `.commandmate/verify.yaml`.
3
+ *
4
+ * Canonical spec: docs/design/verification-config.md
5
+ * Phase 0 reference implementation: .claude/skills/cmate-verify/scripts/verify-run.sh
6
+ *
7
+ * Server-only: reads from disk, so import this from API routes / CLI only.
8
+ */
9
+ export interface VerifyGate {
10
+ id: string;
11
+ command: string;
12
+ timeoutSec: number;
13
+ /**
14
+ * Name of a machine-wide lock this gate must hold while it runs (Issue #1771).
15
+ *
16
+ * Declares "only one of these may run on this machine at a time", which a
17
+ * gate owning a fixed port, database or emulator needs and which command and
18
+ * timeout cannot express. Two parallel worktrees running such a gate at once
19
+ * make the second fail on the resource, and `GATE e2e FAIL exit=1` reads
20
+ * exactly like the change being broken.
21
+ *
22
+ * Optional rather than `string | null`: contracts store their gate list as
23
+ * JSON in `tasks.contract_json` and are read back with `JSON.parse`, never
24
+ * re-validated, so every row written before this field existed simply has no
25
+ * key — and `undefined` is the honest reading of that.
26
+ */
27
+ mutex?: string;
28
+ /**
29
+ * Re-run this gate once, in the same tree, when its command exits non-zero
30
+ * (Issue #1772). `1` opts in; `0` (the default) is the behaviour every gate
31
+ * had before this field existed.
32
+ *
33
+ * Only 0 and 1 are accepted. A gate allowed three or four attempts stops
34
+ * being a gate: enough re-runs turn any red into a green, and the value of
35
+ * this field is precisely that it cannot. One retry answers the one question
36
+ * worth asking — "does this reproduce in the same tree?" — and nothing more.
37
+ *
38
+ * Optional for the same reason {@link VerifyGate.mutex} is: contracts store
39
+ * their gate list as JSON in `tasks.contract_json` and read it back with
40
+ * `JSON.parse` without re-validating, so a row written before this field
41
+ * existed simply has no key.
42
+ */
43
+ retryOnFail?: number;
44
+ /**
45
+ * Whether a FLAKY outcome — failed, then passed on the retry — counts as a
46
+ * pass (Issue #1772). Default false: the gate does not get weaker by opting
47
+ * into a retry, it only gets a name for what happened.
48
+ *
49
+ * Declared per gate rather than per repository because it is a statement
50
+ * about *this* gate's failure mode. `unit` failing on a random UUID that
51
+ * happens to contain a forbidden substring is noise; `e2e` failing once and
52
+ * passing once is usually a real race in the product. An `options`-level flag
53
+ * would force those two into one answer, and would also be declarable for
54
+ * gates that never opted into a retry, where it can never fire.
55
+ *
56
+ * `true` without `retryOnFail: 1` is a config error rather than a no-op: no
57
+ * retry means no FLAKY, so the declaration could never take effect.
58
+ */
59
+ flakyIsPass?: boolean;
60
+ }
61
+ export interface VerifyOptions {
62
+ /** null when unset; the caller resolves the repository default branch. */
63
+ baseRef: string | null;
64
+ skipInPrimaryCheckout: boolean;
65
+ maxLogTailBytes: number;
66
+ /**
67
+ * Whether `work-evidence` demands a COMMIT rather than any change at all
68
+ * (Issue #1628, D-4). Default false — the gate's job has always been "is
69
+ * there work here to verify", and a dirty tree answers that.
70
+ *
71
+ * Turn it on in a repository whose delegations end in a commit (the task
72
+ * contract preamble tells agents "未 commit の作業は未完了とみなされる", and
73
+ * without this the gate happily passes `commits=0 uncommitted=1`, so
74
+ * `RESULT passed` proved nothing about the commit). Repository-wide by
75
+ * design: it is a property of how the repository is worked, not of one run.
76
+ */
77
+ requireCommit: boolean;
78
+ /**
79
+ * Whether the built-in `env-clean` gate judges this repository's runs
80
+ * (Issue #1740). Default false — every contract written before the gate
81
+ * existed must keep its verdict, and a gate that starts failing runs the day
82
+ * it lands is a gate that gets switched off again.
83
+ *
84
+ * Turning it on has a second effect: baselines are only recorded (at task
85
+ * creation) while it is on, because a snapshot of the machine is a side effect
86
+ * and the off state must have none. A run without a baseline reports UNKNOWN,
87
+ * never a pass.
88
+ */
89
+ requireEnvClean: boolean;
90
+ }
91
+ export interface VerifyConfig {
92
+ version: 1;
93
+ gates: VerifyGate[];
94
+ options: VerifyOptions;
95
+ }
96
+ /**
97
+ * Built-in gate that answers "is there any work here to verify?".
98
+ *
99
+ * Declared here rather than in the runner so modules that only reason *about*
100
+ * gate selection (task contracts) can name it without importing the engine.
101
+ */
102
+ export declare const WORK_EVIDENCE_GATE_ID = "work-evidence";
103
+ /**
104
+ * Built-in gate that reconciles the changed files against the contract's
105
+ * `scope.allow` / `scope.deny` (#1546). Declared alongside work-evidence for the
106
+ * same reason: `lib/tasks/contract-message.ts` has to name it while resolving a
107
+ * contract's gate list, and must not pull the engine in to do so.
108
+ */
109
+ export declare const SCOPE_GATE_ID = "scope";
110
+ /**
111
+ * Built-in gate that reconciles the *machine* against the snapshot taken when
112
+ * the task was created (#1740): listening CommandMate servers, `mcbd-*` tmux
113
+ * sessions, `$HOME` and `~/.commandmate`. `scope` answers what a delegation
114
+ * changed inside the repository; this answers what it changed outside one.
115
+ */
116
+ export declare const ENV_CLEAN_GATE_ID = "env-clean";
117
+ /** Gate IDs reserved for built-in gates; using one in `gates` is a config error. */
118
+ export declare const RESERVED_GATE_IDS: readonly ["work-evidence", "scope", "env-clean"];
119
+ export declare const VERIFY_CONFIG_RELATIVE_PATH = ".commandmate/verify.yaml";
120
+ /**
121
+ * Gate ids a default full run executes, in the order the runner records them
122
+ * (Issue #2061).
123
+ *
124
+ * The Verification pane needs a denominator while a run is in flight — gate
125
+ * rows are created as each gate starts, so "3 gates recorded" is progress, not
126
+ * a total. Declared here rather than in the pane because the composition is the
127
+ * runner's: `work-evidence`, then `scope`, then `env-clean` only when a
128
+ * declaration switched it on, then verify.yaml's own gates in file order.
129
+ *
130
+ * A *default* run, which is what the pane's "run verification" button starts.
131
+ * A run narrowed with `--gates` / `gateIds` executes a subset of this.
132
+ *
133
+ * @param contractGates gate definitions the worktree's execution contract
134
+ * carries (#1791). They run after verify.yaml's, exactly as
135
+ * `declaredGates()` orders them, and leaving them out understated both
136
+ * the pane's progress denominator and — since #2063 made the list
137
+ * selectable — which gates an operator is allowed to re-run: a run whose
138
+ * only failure was a contract gate offered nothing to re-run at all.
139
+ */
140
+ export declare function defaultPlannedGateIds(config: VerifyConfig, contractGates?: readonly VerifyGate[]): string[];
141
+ export declare const DEFAULT_TIMEOUT_SEC = 600;
142
+ export declare const DEFAULT_MAX_LOG_TAIL_BYTES = 8192;
143
+ /**
144
+ * Shape a gate id may take, wherever a gate is declared.
145
+ *
146
+ * Exported because the task contract declares gates too (#1791) and names them
147
+ * in `verify.gates`. A second copy of this expression would let the two
148
+ * declaration sites drift into accepting different ids, and a contract gate the
149
+ * runner refuses to resolve is a completion criterion nothing can evaluate.
150
+ */
151
+ export declare const GATE_ID_PATTERN: RegExp;
152
+ /**
153
+ * Shape a `mutex` name may take (Issue #1771).
154
+ *
155
+ * Wider than {@link GATE_ID_PATTERN} because a mutex names a *resource*, not a
156
+ * gate: two repositories that both bind port 60303 should be able to agree on
157
+ * `port.60303` and be serialized against each other. Narrow enough that the
158
+ * name is safe as a path segment — no separator, no whitespace, nothing a shell
159
+ * re-interprets — because both runners turn it into
160
+ * `~/.commandmate/locks/<name>.lock`.
161
+ */
162
+ export declare const GATE_MUTEX_PATTERN: RegExp;
163
+ /** Keeps the lock directory name inside every filesystem's limit. */
164
+ export declare const MAX_GATE_MUTEX_LENGTH = 64;
165
+ /**
166
+ * Largest `retryOnFail` a gate may declare (Issue #1772).
167
+ *
168
+ * Deliberately 1, and deliberately a named constant rather than a literal in
169
+ * one `if`: the ceiling is the feature. A gate that may re-run until it passes
170
+ * reports the machine's luck, not the work.
171
+ */
172
+ export declare const MAX_RETRY_ON_FAIL = 1;
173
+ export declare class VerifyConfigError extends Error {
174
+ readonly issues: string[];
175
+ constructor(issues: string[]);
176
+ }
177
+ /**
178
+ * Validate a list of `{ id, command, timeoutSec }` entries.
179
+ *
180
+ * Shared with the task contract's `verify.gateDefinitions` (#1791), which
181
+ * declares gates in the same shape and must be held to the same constraints —
182
+ * id pattern, reserved ids, duplicates, integer timeout in range. Calling this
183
+ * is what makes "the same constraints" a fact rather than a comment: a contract
184
+ * gate accepted here is one the runner can execute and the report can name.
185
+ *
186
+ * Deliberately does *not* decide whether the list may be absent or empty. That
187
+ * is the caller's rule: verify.yaml requires at least one gate, a contract that
188
+ * declares none is the normal case.
189
+ *
190
+ * @param at path prefix for issue messages (`gates`, `verify.gateDefinitions`)
191
+ * @returns the accepted entries; an entry that produced an issue is dropped so
192
+ * the result never carries a value that failed validation
193
+ */
194
+ export declare function validateGateEntries(value: unknown, at: string, issues: string[]): VerifyGate[];
195
+ /**
196
+ * Read and validate `<repoPath>/.commandmate/verify.yaml`.
197
+ *
198
+ * @returns the validated config, or null when the file does not exist
199
+ * @throws VerifyConfigError with every violation collected in `issues`
200
+ */
201
+ export declare function loadVerifyConfig(repoPath: string): VerifyConfig | null;
202
+ //# sourceMappingURL=verify-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-config.d.ts","sourceRoot":"","sources":["../../../src/lib/verification/verify-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;OAUG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;OAUG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,kDAIpB,CAAC;AAEX,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,aAAa,GAAE,SAAS,UAAU,EAAO,GACxC,MAAM,EAAE,CAWV;AAED,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAM/C;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,QAA8B,CAAC;AAE3D;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAsB,CAAC;AAEtD,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAYnC,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE;CAK7B;AA6CD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAe9F;AA2OD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAYtE"}