commandmate 0.29.0 → 0.29.2

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 (907) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +444 -400
  3. package/.next/app-path-routes-manifest.json +31 -25
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +17 -0
  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 +2 -2
  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 +1 -1
  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/sidebar/group-order/route.js +1 -7
  127. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  128. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/skills/[id]/route.js +1 -1
  130. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  131. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/skills/installations/route.js +2 -2
  133. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  134. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/skills/operations/route.js +2 -2
  136. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  137. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/skills/reindex/route.js +1 -1
  139. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  140. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/skills/route.js +1 -1
  142. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  143. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/slash-commands/route.js +1 -1
  145. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  146. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
  148. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  149. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  151. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  152. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/templates/[id]/route.js +2 -2
  154. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  155. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/templates/route.js +2 -2
  157. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  158. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/todos/route.js +1 -1
  160. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  161. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  163. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  164. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/verification/runs/route.js +1 -1
  166. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  167. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  181. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  182. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -2
  184. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  185. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  191. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  193. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  275. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  278. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  280. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
  283. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  284. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  287. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  290. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  293. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  296. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  299. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  302. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  304. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  305. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  308. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  311. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  314. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  316. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  317. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  319. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  320. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  322. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  323. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  326. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -7
  328. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  329. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  330. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  331. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  332. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  333. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  334. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  335. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  336. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  337. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  338. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  339. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  340. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  341. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  342. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  343. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  344. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  345. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  346. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  347. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  348. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  349. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  350. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  351. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  352. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  353. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  354. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  355. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  356. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  357. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  358. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  359. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  360. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  361. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  362. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  363. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  364. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  365. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  366. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  367. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  368. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  369. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  370. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  371. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  372. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  373. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  374. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  375. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  376. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  377. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  378. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  379. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  380. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  381. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  382. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  383. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  384. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  385. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  386. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  387. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  388. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  389. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  390. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +2 -0
  391. package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -0
  392. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -0
  393. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  394. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  395. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  396. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -0
  397. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -0
  398. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -0
  399. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  400. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  401. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  402. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  403. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  404. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  405. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  406. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  407. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  408. package/.next/server/app/api/worktrees/apply-default-agents/route.js +1 -0
  409. package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -0
  410. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -0
  411. package/.next/server/app/api/worktrees/route.js +1 -1
  412. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  413. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  414. package/.next/server/app/chat/page.js +2 -2
  415. package/.next/server/app/chat/page.js.nft.json +1 -1
  416. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  417. package/.next/server/app/login/page.js +2 -2
  418. package/.next/server/app/login/page.js.nft.json +1 -1
  419. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  420. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  421. package/.next/server/app/more/page.js +2 -2
  422. package/.next/server/app/more/page.js.nft.json +1 -1
  423. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  424. package/.next/server/app/offline/page.js.nft.json +1 -1
  425. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  426. package/.next/server/app/page.js +1 -1
  427. package/.next/server/app/page.js.nft.json +1 -1
  428. package/.next/server/app/page_client-reference-manifest.js +1 -1
  429. package/.next/server/app/proxy/[...path]/route.js +1 -1
  430. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  431. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  432. package/.next/server/app/repositories/page.js +2 -2
  433. package/.next/server/app/repositories/page.js.nft.json +1 -1
  434. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  435. package/.next/server/app/review/page.js +1 -1
  436. package/.next/server/app/review/page.js.nft.json +1 -1
  437. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  438. package/.next/server/app/sessions/page.js +1 -1
  439. package/.next/server/app/sessions/page.js.nft.json +1 -1
  440. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  441. package/.next/server/app/skills/[skillId]/page.js +2 -2
  442. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  443. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  444. package/.next/server/app/skills/installed/page.js +2 -2
  445. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  446. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  447. package/.next/server/app/skills/page.js +2 -2
  448. package/.next/server/app/skills/page.js.nft.json +1 -1
  449. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  450. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  451. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  452. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  453. package/.next/server/app/worktrees/[id]/page.js +12 -12
  454. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  455. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  456. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  457. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  458. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  459. package/.next/server/app-paths-manifest.json +31 -25
  460. package/.next/server/chunks/1058.js +1 -1
  461. package/.next/server/chunks/1068.js +1 -1
  462. package/.next/server/chunks/1341.js +1 -0
  463. package/.next/server/chunks/1501.js +5 -0
  464. package/.next/server/chunks/1886.js +3 -4
  465. package/.next/server/chunks/2119.js +1 -1
  466. package/.next/server/chunks/2198.js +1 -0
  467. package/.next/server/chunks/221.js +7 -1
  468. package/.next/server/chunks/2404.js +1 -1
  469. package/.next/server/chunks/2445.js +1 -1
  470. package/.next/server/chunks/2759.js +1 -1
  471. package/.next/server/chunks/3543.js +1 -1
  472. package/.next/server/chunks/3558.js +1 -1
  473. package/.next/server/chunks/3707.js +15 -0
  474. package/.next/server/chunks/3722.js +25 -1
  475. package/.next/server/chunks/3869.js +1 -0
  476. package/.next/server/chunks/3945.js +1 -1
  477. package/.next/server/chunks/4299.js +1 -1
  478. package/.next/server/chunks/4390.js +1 -0
  479. package/.next/server/chunks/4393.js +1 -1
  480. package/.next/server/chunks/5017.js +1 -1
  481. package/.next/server/chunks/5164.js +1 -1
  482. package/.next/server/chunks/5571.js +1 -1
  483. package/.next/server/chunks/6130.js +1 -1
  484. package/.next/server/chunks/6285.js +1 -1
  485. package/.next/server/chunks/6781.js +1 -1
  486. package/.next/server/chunks/7366.js +5 -0
  487. package/.next/server/chunks/7824.js +1 -1
  488. package/.next/server/chunks/7905.js +1 -1
  489. package/.next/server/chunks/8118.js +1 -0
  490. package/.next/server/chunks/848.js +1 -1
  491. package/.next/server/chunks/880.js +3 -3
  492. package/.next/server/chunks/8800.js +3 -0
  493. package/.next/server/chunks/9123.js +2 -2
  494. package/.next/server/chunks/9508.js +1 -1
  495. package/.next/server/chunks/9627.js +30 -24
  496. package/.next/server/middleware-build-manifest.js +1 -1
  497. package/.next/server/middleware-manifest.json +5 -5
  498. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  499. package/.next/server/pages/500.html +1 -1
  500. package/.next/server/server-reference-manifest.json +1 -1
  501. package/.next/static/0YoRrahue4Vchxg1z83IQ/_buildManifest.js +1 -0
  502. package/.next/static/chunks/1379-af7af9e08f47c979.js +1 -0
  503. package/.next/static/chunks/{2053-c0e931eb4391baa1.js → 2053-3f299a7a2c7d6767.js} +1 -1
  504. package/.next/static/chunks/3922.9c1ec01fff819c88.js +1 -0
  505. package/.next/static/chunks/{3968-8d8ca15657748bfb.js → 4882-388e94fe0a03c2ba.js} +1 -1
  506. package/.next/static/chunks/5229-b2a81bb8fb5c19e9.js +1 -0
  507. package/.next/static/chunks/6381-9ba5198c0a6ff197.js +1 -0
  508. package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +1 -0
  509. package/.next/static/chunks/{1188-8567ee5ecfef02ee.js → 8593-fa0eb2802e0ce68a.js} +1 -1
  510. package/.next/static/chunks/app/api/agents/update/route-1c30fb8d4d6fa6ef.js +1 -0
  511. package/.next/static/chunks/app/api/agents/versions/route-1c30fb8d4d6fa6ef.js +1 -0
  512. package/.next/static/chunks/app/api/app/update/route-1c30fb8d4d6fa6ef.js +1 -0
  513. package/.next/static/chunks/app/api/app/update-check/route-1c30fb8d4d6fa6ef.js +1 -0
  514. package/.next/static/chunks/app/api/assistant/conversation/route-1c30fb8d4d6fa6ef.js +1 -0
  515. package/.next/static/chunks/app/api/assistant/current-output/route-1c30fb8d4d6fa6ef.js +1 -0
  516. package/.next/static/chunks/app/api/assistant/messages/route-1c30fb8d4d6fa6ef.js +1 -0
  517. package/.next/static/chunks/app/api/assistant/session/route-1c30fb8d4d6fa6ef.js +1 -0
  518. package/.next/static/chunks/app/api/assistant/start/route-1c30fb8d4d6fa6ef.js +1 -0
  519. package/.next/static/chunks/app/api/assistant/terminal/route-1c30fb8d4d6fa6ef.js +1 -0
  520. package/.next/static/chunks/app/api/assistant/tools/route-1c30fb8d4d6fa6ef.js +1 -0
  521. package/.next/static/chunks/app/api/auth/login/route-1c30fb8d4d6fa6ef.js +1 -0
  522. package/.next/static/chunks/app/api/auth/logout/route-1c30fb8d4d6fa6ef.js +1 -0
  523. package/.next/static/chunks/app/api/auth/status/route-1c30fb8d4d6fa6ef.js +1 -0
  524. package/.next/static/chunks/app/api/capabilities/route-1c30fb8d4d6fa6ef.js +1 -0
  525. package/.next/static/chunks/app/api/daily-summary/route-1c30fb8d4d6fa6ef.js +1 -0
  526. package/.next/static/chunks/app/api/daily-summary/status/route-1c30fb8d4d6fa6ef.js +1 -0
  527. package/.next/static/chunks/app/api/external-apps/[id]/health/route-1c30fb8d4d6fa6ef.js +1 -0
  528. package/.next/static/chunks/app/api/external-apps/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  529. package/.next/static/chunks/app/api/external-apps/route-1c30fb8d4d6fa6ef.js +1 -0
  530. package/.next/static/chunks/app/api/fs/browse/route-1c30fb8d4d6fa6ef.js +1 -0
  531. package/.next/static/chunks/app/api/fs/recent-paths/route-1c30fb8d4d6fa6ef.js +1 -0
  532. package/.next/static/chunks/app/api/hooks/agent-event/route-1c30fb8d4d6fa6ef.js +1 -0
  533. package/.next/static/chunks/app/api/hooks/claude-done/route-1c30fb8d4d6fa6ef.js +1 -0
  534. package/.next/static/chunks/app/api/hooks/permission-request/route-1c30fb8d4d6fa6ef.js +1 -0
  535. package/.next/static/chunks/app/api/metrics/vibe/route-1c30fb8d4d6fa6ef.js +1 -0
  536. package/.next/static/chunks/app/api/ollama/models/route-1c30fb8d4d6fa6ef.js +1 -0
  537. package/.next/static/chunks/app/api/push/escalation/route-1c30fb8d4d6fa6ef.js +1 -0
  538. package/.next/static/chunks/app/api/push/subscriptions/route-1c30fb8d4d6fa6ef.js +1 -0
  539. package/.next/static/chunks/app/api/push/vapid/route-1c30fb8d4d6fa6ef.js +1 -0
  540. package/.next/static/chunks/app/api/remote/pair/route-1c30fb8d4d6fa6ef.js +1 -0
  541. package/.next/static/chunks/app/api/repositories/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  542. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-1c30fb8d4d6fa6ef.js +1 -0
  543. package/.next/static/chunks/app/api/repositories/[id]/todos/route-1c30fb8d4d6fa6ef.js +1 -0
  544. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-1c30fb8d4d6fa6ef.js +1 -0
  545. package/.next/static/chunks/app/api/repositories/clone/route-1c30fb8d4d6fa6ef.js +1 -0
  546. package/.next/static/chunks/app/api/repositories/excluded/route-1c30fb8d4d6fa6ef.js +1 -0
  547. package/.next/static/chunks/app/api/repositories/restore/route-1c30fb8d4d6fa6ef.js +1 -0
  548. package/.next/static/chunks/app/api/repositories/route-1c30fb8d4d6fa6ef.js +1 -0
  549. package/.next/static/chunks/app/api/repositories/scan/route-1c30fb8d4d6fa6ef.js +1 -0
  550. package/.next/static/chunks/app/api/repositories/sync/route-1c30fb8d4d6fa6ef.js +1 -0
  551. package/.next/static/chunks/app/api/repositories/validate-path/route-1c30fb8d4d6fa6ef.js +1 -0
  552. package/.next/static/chunks/app/api/settings/default-agents/route-1c30fb8d4d6fa6ef.js +1 -0
  553. package/.next/static/chunks/app/api/sidebar/group-order/route-1c30fb8d4d6fa6ef.js +1 -0
  554. package/.next/static/chunks/app/api/skills/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  555. package/.next/static/chunks/app/api/skills/installations/route-1c30fb8d4d6fa6ef.js +1 -0
  556. package/.next/static/chunks/app/api/skills/operations/route-1c30fb8d4d6fa6ef.js +1 -0
  557. package/.next/static/chunks/app/api/skills/reindex/route-1c30fb8d4d6fa6ef.js +1 -0
  558. package/.next/static/chunks/app/api/skills/route-1c30fb8d4d6fa6ef.js +1 -0
  559. package/.next/static/chunks/app/api/slash-commands/route-1c30fb8d4d6fa6ef.js +1 -0
  560. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-1c30fb8d4d6fa6ef.js +1 -0
  561. package/.next/static/chunks/app/api/tasks/[taskId]/route-1c30fb8d4d6fa6ef.js +1 -0
  562. package/.next/static/chunks/app/api/templates/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  563. package/.next/static/chunks/app/api/templates/route-1c30fb8d4d6fa6ef.js +1 -0
  564. package/.next/static/chunks/app/api/todos/route-1c30fb8d4d6fa6ef.js +1 -0
  565. package/.next/static/chunks/app/api/verification/runs/[runId]/route-1c30fb8d4d6fa6ef.js +1 -0
  566. package/.next/static/chunks/app/api/verification/runs/route-1c30fb8d4d6fa6ef.js +1 -0
  567. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-1c30fb8d4d6fa6ef.js +1 -0
  568. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-1c30fb8d4d6fa6ef.js +1 -0
  569. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-1c30fb8d4d6fa6ef.js +1 -0
  570. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-1c30fb8d4d6fa6ef.js +1 -0
  571. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-1c30fb8d4d6fa6ef.js +1 -0
  572. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-1c30fb8d4d6fa6ef.js +1 -0
  573. package/.next/static/chunks/app/api/worktrees/[id]/env/route-1c30fb8d4d6fa6ef.js +1 -0
  574. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-1c30fb8d4d6fa6ef.js +1 -0
  575. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-1c30fb8d4d6fa6ef.js +1 -0
  576. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-1c30fb8d4d6fa6ef.js +1 -0
  577. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-1c30fb8d4d6fa6ef.js +1 -0
  578. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-1c30fb8d4d6fa6ef.js +1 -0
  579. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-1c30fb8d4d6fa6ef.js +1 -0
  580. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-1c30fb8d4d6fa6ef.js +1 -0
  581. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-1c30fb8d4d6fa6ef.js +1 -0
  582. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-1c30fb8d4d6fa6ef.js +1 -0
  583. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-1c30fb8d4d6fa6ef.js +1 -0
  584. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-1c30fb8d4d6fa6ef.js +1 -0
  585. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-1c30fb8d4d6fa6ef.js +1 -0
  586. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-1c30fb8d4d6fa6ef.js +1 -0
  587. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-1c30fb8d4d6fa6ef.js +1 -0
  588. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-1c30fb8d4d6fa6ef.js +1 -0
  589. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-1c30fb8d4d6fa6ef.js +1 -0
  590. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-1c30fb8d4d6fa6ef.js +1 -0
  591. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-1c30fb8d4d6fa6ef.js +1 -0
  592. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-1c30fb8d4d6fa6ef.js +1 -0
  593. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-1c30fb8d4d6fa6ef.js +1 -0
  594. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-1c30fb8d4d6fa6ef.js +1 -0
  595. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-1c30fb8d4d6fa6ef.js +1 -0
  596. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-1c30fb8d4d6fa6ef.js +1 -0
  597. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-1c30fb8d4d6fa6ef.js +1 -0
  598. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-1c30fb8d4d6fa6ef.js +1 -0
  599. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-1c30fb8d4d6fa6ef.js +1 -0
  600. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-1c30fb8d4d6fa6ef.js +1 -0
  601. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-1c30fb8d4d6fa6ef.js +1 -0
  602. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-1c30fb8d4d6fa6ef.js +1 -0
  603. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-1c30fb8d4d6fa6ef.js +1 -0
  604. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-1c30fb8d4d6fa6ef.js +1 -0
  605. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-1c30fb8d4d6fa6ef.js +1 -0
  606. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-1c30fb8d4d6fa6ef.js +1 -0
  607. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-1c30fb8d4d6fa6ef.js +1 -0
  608. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-1c30fb8d4d6fa6ef.js +1 -0
  609. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-1c30fb8d4d6fa6ef.js +1 -0
  610. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-1c30fb8d4d6fa6ef.js +1 -0
  611. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-1c30fb8d4d6fa6ef.js +1 -0
  612. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-1c30fb8d4d6fa6ef.js +1 -0
  613. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-1c30fb8d4d6fa6ef.js +1 -0
  614. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-1c30fb8d4d6fa6ef.js +1 -0
  615. package/.next/static/chunks/app/api/worktrees/[id]/route-1c30fb8d4d6fa6ef.js +1 -0
  616. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-1c30fb8d4d6fa6ef.js +1 -0
  617. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-1c30fb8d4d6fa6ef.js +1 -0
  618. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-1c30fb8d4d6fa6ef.js +1 -0
  619. package/.next/static/chunks/app/api/worktrees/[id]/search/route-1c30fb8d4d6fa6ef.js +1 -0
  620. package/.next/static/chunks/app/api/worktrees/[id]/send/route-1c30fb8d4d6fa6ef.js +1 -0
  621. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-1c30fb8d4d6fa6ef.js +1 -0
  622. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-1c30fb8d4d6fa6ef.js +1 -0
  623. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-1c30fb8d4d6fa6ef.js +1 -0
  624. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-1c30fb8d4d6fa6ef.js +1 -0
  625. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-1c30fb8d4d6fa6ef.js +1 -0
  626. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-1c30fb8d4d6fa6ef.js +1 -0
  627. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-1c30fb8d4d6fa6ef.js +1 -0
  628. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-1c30fb8d4d6fa6ef.js +1 -0
  629. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-1c30fb8d4d6fa6ef.js +1 -0
  630. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-1c30fb8d4d6fa6ef.js +1 -0
  631. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-1c30fb8d4d6fa6ef.js +1 -0
  632. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-1c30fb8d4d6fa6ef.js +1 -0
  633. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-1c30fb8d4d6fa6ef.js +1 -0
  634. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-1c30fb8d4d6fa6ef.js +1 -0
  635. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-1c30fb8d4d6fa6ef.js +1 -0
  636. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-1c30fb8d4d6fa6ef.js +1 -0
  637. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-1c30fb8d4d6fa6ef.js +1 -0
  638. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-1c30fb8d4d6fa6ef.js +1 -0
  639. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-1c30fb8d4d6fa6ef.js +1 -0
  640. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-1c30fb8d4d6fa6ef.js +1 -0
  641. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-1c30fb8d4d6fa6ef.js +1 -0
  642. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-1c30fb8d4d6fa6ef.js +1 -0
  643. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-1c30fb8d4d6fa6ef.js +1 -0
  644. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-1c30fb8d4d6fa6ef.js +1 -0
  645. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-1c30fb8d4d6fa6ef.js +1 -0
  646. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-1c30fb8d4d6fa6ef.js +1 -0
  647. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-1c30fb8d4d6fa6ef.js +1 -0
  648. package/.next/static/chunks/app/api/worktrees/route-1c30fb8d4d6fa6ef.js +1 -0
  649. package/.next/static/chunks/app/chat/{page-231df45127e876c2.js → page-9aa2011410895b0d.js} +1 -1
  650. package/.next/static/chunks/app/login/{page-03659dded846ef1d.js → page-af7241bb4c4a8e59.js} +1 -1
  651. package/.next/static/chunks/app/manifest.webmanifest/route-1c30fb8d4d6fa6ef.js +1 -0
  652. package/.next/static/chunks/app/more/page-75d3783da0d49a25.js +1 -0
  653. package/.next/static/chunks/app/{page-0305431f43195431.js → page-214f7ffa13a0cf10.js} +1 -1
  654. package/.next/static/chunks/app/proxy/[...path]/route-1c30fb8d4d6fa6ef.js +1 -0
  655. package/.next/static/chunks/app/repositories/{page-ae8fa55749976f79.js → page-4951cac905e50224.js} +1 -1
  656. package/.next/static/chunks/app/review/page-a0899b2d285318c3.js +1 -0
  657. package/.next/static/chunks/app/sessions/page-fb36145ec732092a.js +1 -0
  658. package/.next/static/chunks/app/skills/[skillId]/{page-aaf0bcb1dfb558b9.js → page-9099e26b60442873.js} +1 -1
  659. package/.next/static/chunks/app/skills/installed/{page-dafc486410e839b7.js → page-182e32368696d824.js} +1 -1
  660. package/.next/static/chunks/app/skills/{page-9e3c91da31514893.js → page-d3fdc88239ebe0ab.js} +1 -1
  661. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-90f96977c741bbf8.js → page-f3361237420719b4.js} +1 -1
  662. package/.next/static/chunks/app/worktrees/[id]/layout-1c30fb8d4d6fa6ef.js +1 -0
  663. package/.next/static/chunks/app/worktrees/[id]/page-ce6279d581d1df95.js +1 -0
  664. package/.next/static/chunks/{webpack-7e79064bfce988d7.js → webpack-9f75198882fdaf08.js} +1 -1
  665. package/.next/static/css/b326c8a734e1928e.css +1 -0
  666. package/.next/trace +13 -13
  667. package/.next/types/app/api/agents/update/route.ts +347 -0
  668. package/.next/types/app/api/agents/versions/route.ts +347 -0
  669. package/.next/types/app/api/settings/default-agents/route.ts +347 -0
  670. package/.next/types/app/api/worktrees/[id]/verify/config/route.ts +347 -0
  671. package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.ts +347 -0
  672. package/.next/types/app/api/worktrees/apply-default-agents/route.ts +347 -0
  673. package/.next/types/routes.d.ts +7 -1
  674. package/.next/types/validator.ts +54 -0
  675. package/dist/cli/commands/agents.d.ts +35 -0
  676. package/dist/cli/commands/agents.d.ts.map +1 -0
  677. package/dist/cli/commands/agents.js +212 -0
  678. package/dist/cli/commands/ls.d.ts.map +1 -1
  679. package/dist/cli/commands/ls.js +18 -0
  680. package/dist/cli/commands/verify.d.ts.map +1 -1
  681. package/dist/cli/commands/verify.js +111 -0
  682. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  683. package/dist/cli/config/cli-dependencies.js +11 -0
  684. package/dist/cli/docs/agent-operations.d.ts +1 -1
  685. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  686. package/dist/cli/docs/agent-operations.js +30 -0
  687. package/dist/cli/program.d.ts.map +1 -1
  688. package/dist/cli/program.js +6 -0
  689. package/dist/cli/types/api-responses.d.ts +58 -0
  690. package/dist/cli/types/api-responses.d.ts.map +1 -1
  691. package/dist/cli/types/index.d.ts +8 -0
  692. package/dist/cli/types/index.d.ts.map +1 -1
  693. package/dist/cli/utils/preflight.d.ts.map +1 -1
  694. package/dist/cli/utils/preflight.js +6 -0
  695. package/dist/config/system-directories.d.ts +101 -0
  696. package/dist/config/system-directories.d.ts.map +1 -0
  697. package/dist/config/system-directories.js +211 -0
  698. package/dist/lib/cli-tools/types.d.ts +15 -1
  699. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  700. package/dist/lib/detection/status-reason.d.ts +92 -0
  701. package/dist/lib/detection/status-reason.d.ts.map +1 -0
  702. package/dist/lib/detection/status-reason.js +94 -0
  703. package/dist/lib/updates/agent-updater.d.ts +247 -0
  704. package/dist/lib/updates/agent-updater.d.ts.map +1 -0
  705. package/dist/lib/updates/agent-updater.js +373 -0
  706. package/dist/lib/updates/agent-versions.d.ts +77 -0
  707. package/dist/lib/updates/agent-versions.d.ts.map +1 -0
  708. package/dist/lib/updates/agent-versions.js +138 -0
  709. package/dist/lib/updates/codex-version.d.ts +184 -0
  710. package/dist/lib/updates/codex-version.d.ts.map +1 -0
  711. package/dist/lib/updates/codex-version.js +215 -0
  712. package/dist/lib/verification/verify-config.d.ts +202 -0
  713. package/dist/lib/verification/verify-config.d.ts.map +1 -0
  714. package/dist/lib/verification/verify-config.js +429 -0
  715. package/dist/lib/verification/verify-draft.d.ts +182 -0
  716. package/dist/lib/verification/verify-draft.d.ts.map +1 -0
  717. package/dist/lib/verification/verify-draft.js +570 -0
  718. package/dist/server/src/cli/types/api-responses.js +9 -0
  719. package/dist/server/src/config/cli-tool-timing-config.js +15 -1
  720. package/dist/server/src/config/codex-update-dialog-config.js +154 -0
  721. package/dist/server/src/config/default-agents.js +138 -0
  722. package/dist/server/src/lib/cli-tools/antigravity.js +36 -12
  723. package/dist/server/src/lib/cli-tools/base.js +131 -0
  724. package/dist/server/src/lib/cli-tools/codex.js +350 -100
  725. package/dist/server/src/lib/cli-tools/copilot.js +34 -10
  726. package/dist/server/src/lib/cli-tools/gemini.js +34 -10
  727. package/dist/server/src/lib/cli-tools/liveness-spec.js +214 -0
  728. package/dist/server/src/lib/cli-tools/opencode.js +72 -19
  729. package/dist/server/src/lib/cli-tools/session-liveness.js +64 -0
  730. package/dist/server/src/lib/cli-tools/vibe-local.js +30 -10
  731. package/dist/server/src/lib/db/app-settings-db.js +142 -0
  732. package/dist/server/src/lib/db/worktree-db.js +178 -3
  733. package/dist/server/src/lib/detection/status-reason.js +17 -0
  734. package/dist/server/src/lib/detection/tool-liveness.js +233 -0
  735. package/dist/server/src/lib/detection/version-probes.js +290 -0
  736. package/dist/server/src/lib/git/worktrees.js +10 -0
  737. package/dist/server/src/lib/repo-config/agents-config.js +298 -0
  738. package/dist/server/src/lib/selected-agents-validator.js +93 -23
  739. package/dist/server/src/lib/session/claude-session.js +39 -108
  740. package/dist/server/src/lib/tmux/tmux.js +29 -0
  741. package/dist/server/src/lib/updates/agent-updater.js +373 -0
  742. package/dist/server/src/lib/updates/agent-versions.js +138 -0
  743. package/dist/server/src/lib/updates/codex-version.js +215 -0
  744. package/dist/server/src/lib/updates/index.js +42 -0
  745. package/dist/server/src/lib/verification/gate-runner.js +298 -37
  746. package/dist/server/src/lib/verification/machine-lock.js +11 -0
  747. package/dist/server/src/lib/verification/run-verdict-vocabulary.js +151 -0
  748. package/dist/server/src/lib/verification/verify-config.js +33 -0
  749. package/dist/server/src/types/sidebar.js +40 -9
  750. package/dist/types/cli-tool-contracts.d.ts +119 -0
  751. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  752. package/package.json +1 -1
  753. package/.next/server/chunks/1601.js +0 -7
  754. package/.next/server/chunks/222.js +0 -1
  755. package/.next/server/chunks/2366.js +0 -1
  756. package/.next/server/chunks/4689.js +0 -25
  757. package/.next/server/chunks/5089.js +0 -1
  758. package/.next/server/chunks/6274.js +0 -14
  759. package/.next/server/chunks/9067.js +0 -1
  760. package/.next/server/chunks/9373.js +0 -9
  761. package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +0 -1
  762. package/.next/static/chunks/3922.0d2e64daf9f187da.js +0 -1
  763. package/.next/static/chunks/5229-580b581fce5aeb52.js +0 -1
  764. package/.next/static/chunks/6381-c8d93ec301dbc380.js +0 -1
  765. package/.next/static/chunks/app/api/app/update/route-e3626364434d521b.js +0 -1
  766. package/.next/static/chunks/app/api/app/update-check/route-e3626364434d521b.js +0 -1
  767. package/.next/static/chunks/app/api/assistant/conversation/route-e3626364434d521b.js +0 -1
  768. package/.next/static/chunks/app/api/assistant/current-output/route-e3626364434d521b.js +0 -1
  769. package/.next/static/chunks/app/api/assistant/messages/route-e3626364434d521b.js +0 -1
  770. package/.next/static/chunks/app/api/assistant/session/route-e3626364434d521b.js +0 -1
  771. package/.next/static/chunks/app/api/assistant/start/route-e3626364434d521b.js +0 -1
  772. package/.next/static/chunks/app/api/assistant/terminal/route-e3626364434d521b.js +0 -1
  773. package/.next/static/chunks/app/api/assistant/tools/route-e3626364434d521b.js +0 -1
  774. package/.next/static/chunks/app/api/auth/login/route-e3626364434d521b.js +0 -1
  775. package/.next/static/chunks/app/api/auth/logout/route-e3626364434d521b.js +0 -1
  776. package/.next/static/chunks/app/api/auth/status/route-e3626364434d521b.js +0 -1
  777. package/.next/static/chunks/app/api/capabilities/route-e3626364434d521b.js +0 -1
  778. package/.next/static/chunks/app/api/daily-summary/route-e3626364434d521b.js +0 -1
  779. package/.next/static/chunks/app/api/daily-summary/status/route-e3626364434d521b.js +0 -1
  780. package/.next/static/chunks/app/api/external-apps/[id]/health/route-e3626364434d521b.js +0 -1
  781. package/.next/static/chunks/app/api/external-apps/[id]/route-e3626364434d521b.js +0 -1
  782. package/.next/static/chunks/app/api/external-apps/route-e3626364434d521b.js +0 -1
  783. package/.next/static/chunks/app/api/fs/browse/route-e3626364434d521b.js +0 -1
  784. package/.next/static/chunks/app/api/fs/recent-paths/route-e3626364434d521b.js +0 -1
  785. package/.next/static/chunks/app/api/hooks/agent-event/route-e3626364434d521b.js +0 -1
  786. package/.next/static/chunks/app/api/hooks/claude-done/route-e3626364434d521b.js +0 -1
  787. package/.next/static/chunks/app/api/hooks/permission-request/route-e3626364434d521b.js +0 -1
  788. package/.next/static/chunks/app/api/metrics/vibe/route-e3626364434d521b.js +0 -1
  789. package/.next/static/chunks/app/api/ollama/models/route-e3626364434d521b.js +0 -1
  790. package/.next/static/chunks/app/api/push/escalation/route-e3626364434d521b.js +0 -1
  791. package/.next/static/chunks/app/api/push/subscriptions/route-e3626364434d521b.js +0 -1
  792. package/.next/static/chunks/app/api/push/vapid/route-e3626364434d521b.js +0 -1
  793. package/.next/static/chunks/app/api/remote/pair/route-e3626364434d521b.js +0 -1
  794. package/.next/static/chunks/app/api/repositories/[id]/route-e3626364434d521b.js +0 -1
  795. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
  796. package/.next/static/chunks/app/api/repositories/[id]/todos/route-e3626364434d521b.js +0 -1
  797. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-e3626364434d521b.js +0 -1
  798. package/.next/static/chunks/app/api/repositories/clone/route-e3626364434d521b.js +0 -1
  799. package/.next/static/chunks/app/api/repositories/excluded/route-e3626364434d521b.js +0 -1
  800. package/.next/static/chunks/app/api/repositories/restore/route-e3626364434d521b.js +0 -1
  801. package/.next/static/chunks/app/api/repositories/route-e3626364434d521b.js +0 -1
  802. package/.next/static/chunks/app/api/repositories/scan/route-e3626364434d521b.js +0 -1
  803. package/.next/static/chunks/app/api/repositories/sync/route-e3626364434d521b.js +0 -1
  804. package/.next/static/chunks/app/api/repositories/validate-path/route-e3626364434d521b.js +0 -1
  805. package/.next/static/chunks/app/api/sidebar/group-order/route-e3626364434d521b.js +0 -1
  806. package/.next/static/chunks/app/api/skills/[id]/route-e3626364434d521b.js +0 -1
  807. package/.next/static/chunks/app/api/skills/installations/route-e3626364434d521b.js +0 -1
  808. package/.next/static/chunks/app/api/skills/operations/route-e3626364434d521b.js +0 -1
  809. package/.next/static/chunks/app/api/skills/reindex/route-e3626364434d521b.js +0 -1
  810. package/.next/static/chunks/app/api/skills/route-e3626364434d521b.js +0 -1
  811. package/.next/static/chunks/app/api/slash-commands/route-e3626364434d521b.js +0 -1
  812. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-e3626364434d521b.js +0 -1
  813. package/.next/static/chunks/app/api/tasks/[taskId]/route-e3626364434d521b.js +0 -1
  814. package/.next/static/chunks/app/api/templates/[id]/route-e3626364434d521b.js +0 -1
  815. package/.next/static/chunks/app/api/templates/route-e3626364434d521b.js +0 -1
  816. package/.next/static/chunks/app/api/todos/route-e3626364434d521b.js +0 -1
  817. package/.next/static/chunks/app/api/verification/runs/[runId]/route-e3626364434d521b.js +0 -1
  818. package/.next/static/chunks/app/api/verification/runs/route-e3626364434d521b.js +0 -1
  819. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-e3626364434d521b.js +0 -1
  820. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-e3626364434d521b.js +0 -1
  821. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-e3626364434d521b.js +0 -1
  822. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-e3626364434d521b.js +0 -1
  823. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-e3626364434d521b.js +0 -1
  824. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-e3626364434d521b.js +0 -1
  825. package/.next/static/chunks/app/api/worktrees/[id]/env/route-e3626364434d521b.js +0 -1
  826. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-e3626364434d521b.js +0 -1
  827. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-e3626364434d521b.js +0 -1
  828. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-e3626364434d521b.js +0 -1
  829. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-e3626364434d521b.js +0 -1
  830. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-e3626364434d521b.js +0 -1
  831. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-e3626364434d521b.js +0 -1
  832. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-e3626364434d521b.js +0 -1
  833. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-e3626364434d521b.js +0 -1
  834. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-e3626364434d521b.js +0 -1
  835. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-e3626364434d521b.js +0 -1
  836. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-e3626364434d521b.js +0 -1
  837. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-e3626364434d521b.js +0 -1
  838. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-e3626364434d521b.js +0 -1
  839. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-e3626364434d521b.js +0 -1
  840. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-e3626364434d521b.js +0 -1
  841. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-e3626364434d521b.js +0 -1
  842. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-e3626364434d521b.js +0 -1
  843. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-e3626364434d521b.js +0 -1
  844. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-e3626364434d521b.js +0 -1
  845. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-e3626364434d521b.js +0 -1
  846. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-e3626364434d521b.js +0 -1
  847. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-e3626364434d521b.js +0 -1
  848. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-e3626364434d521b.js +0 -1
  849. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-e3626364434d521b.js +0 -1
  850. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-e3626364434d521b.js +0 -1
  851. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-e3626364434d521b.js +0 -1
  852. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-e3626364434d521b.js +0 -1
  853. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-e3626364434d521b.js +0 -1
  854. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-e3626364434d521b.js +0 -1
  855. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-e3626364434d521b.js +0 -1
  856. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-e3626364434d521b.js +0 -1
  857. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-e3626364434d521b.js +0 -1
  858. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-e3626364434d521b.js +0 -1
  859. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-e3626364434d521b.js +0 -1
  860. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-e3626364434d521b.js +0 -1
  861. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-e3626364434d521b.js +0 -1
  862. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-e3626364434d521b.js +0 -1
  863. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-e3626364434d521b.js +0 -1
  864. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-e3626364434d521b.js +0 -1
  865. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-e3626364434d521b.js +0 -1
  866. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-e3626364434d521b.js +0 -1
  867. package/.next/static/chunks/app/api/worktrees/[id]/route-e3626364434d521b.js +0 -1
  868. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-e3626364434d521b.js +0 -1
  869. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-e3626364434d521b.js +0 -1
  870. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-e3626364434d521b.js +0 -1
  871. package/.next/static/chunks/app/api/worktrees/[id]/search/route-e3626364434d521b.js +0 -1
  872. package/.next/static/chunks/app/api/worktrees/[id]/send/route-e3626364434d521b.js +0 -1
  873. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-e3626364434d521b.js +0 -1
  874. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-e3626364434d521b.js +0 -1
  875. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-e3626364434d521b.js +0 -1
  876. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-e3626364434d521b.js +0 -1
  877. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-e3626364434d521b.js +0 -1
  878. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-e3626364434d521b.js +0 -1
  879. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-e3626364434d521b.js +0 -1
  880. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-e3626364434d521b.js +0 -1
  881. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-e3626364434d521b.js +0 -1
  882. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-e3626364434d521b.js +0 -1
  883. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-e3626364434d521b.js +0 -1
  884. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-e3626364434d521b.js +0 -1
  885. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-e3626364434d521b.js +0 -1
  886. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-e3626364434d521b.js +0 -1
  887. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-e3626364434d521b.js +0 -1
  888. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
  889. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-e3626364434d521b.js +0 -1
  890. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-e3626364434d521b.js +0 -1
  891. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-e3626364434d521b.js +0 -1
  892. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-e3626364434d521b.js +0 -1
  893. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-e3626364434d521b.js +0 -1
  894. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-e3626364434d521b.js +0 -1
  895. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-e3626364434d521b.js +0 -1
  896. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-e3626364434d521b.js +0 -1
  897. package/.next/static/chunks/app/api/worktrees/route-e3626364434d521b.js +0 -1
  898. package/.next/static/chunks/app/manifest.webmanifest/route-e3626364434d521b.js +0 -1
  899. package/.next/static/chunks/app/more/page-03867ab635d197c7.js +0 -1
  900. package/.next/static/chunks/app/proxy/[...path]/route-e3626364434d521b.js +0 -1
  901. package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +0 -1
  902. package/.next/static/chunks/app/sessions/page-4d5382b257077c14.js +0 -1
  903. package/.next/static/chunks/app/worktrees/[id]/layout-e3626364434d521b.js +0 -1
  904. package/.next/static/chunks/app/worktrees/[id]/page-c07b23b6ca58091c.js +0 -1
  905. package/.next/static/css/b6990f889f4f9515.css +0 -1
  906. package/.next/static/uulKcSOgyxChTo4SipUSF/_buildManifest.js +0 -1
  907. /package/.next/static/{uulKcSOgyxChTo4SipUSF → 0YoRrahue4Vchxg1z83IQ}/_ssgManifest.js +0 -0
@@ -0,0 +1,77 @@
1
+ /**
2
+ * "Which agent CLIs are installed, and is codex behind?" (Issue #2069)
3
+ *
4
+ * One row per tool for the two update surfaces — the More screen's card and the
5
+ * agent pane's — and the split in what a row carries is deliberate:
6
+ *
7
+ * - **every tool reports `installed` only.** That is this Issue's 実装内容 2:
8
+ * the probe table already exists, it answers without a network, and
9
+ * "installed 1.0.80" is the whole truth CommandMate has about a copilot.
10
+ * - **codex additionally reports `latestVersion` / `updateAvailable`**, because
11
+ * codex is the one tool that writes its own release check to disk. See
12
+ * `./codex-version`.
13
+ *
14
+ * Nothing here queries a registry. A row that says `updateAvailable: false` is
15
+ * saying "nothing on this machine claims otherwise", never "I checked online".
16
+ *
17
+ * ## Why not `getDetectorFreshness()`
18
+ *
19
+ * It answers a different question (are the *detector's rules* stale?) and — the
20
+ * reason that matters here — it caches for the life of the process. This module
21
+ * is read immediately after an update completes, so a permanent memo would show
22
+ * the old version forever and make the acceptance criterion 「完了後に
23
+ * `codex --version` が上がる」 unobservable from the UI. So the probes are run
24
+ * through the same `runDetectorVersionProbe` (same absolute-path resolution,
25
+ * same sanitized env, same timeout) behind a **TTL** instead, on the reasoning
26
+ * `config/installed-agents-cache` already wrote down: the user's loop is
27
+ * "install something, come back, look again".
28
+ *
29
+ * @module lib/updates/agent-versions
30
+ */
31
+ /**
32
+ * How long one fan-out of `--version` probes is reused.
33
+ *
34
+ * Same 30s as `config/installed-agents-cache`, and for the same reason: opening
35
+ * a screen twice in a row costs one fan-out, while a version that changed under
36
+ * the server shows up without a restart. An update finishing calls
37
+ * {@link clearAgentVersionsCache} rather than waiting this out.
38
+ */
39
+ export declare const AGENT_VERSIONS_CACHE_TTL_MS = 30000;
40
+ /** One tool's version row, as the API publishes it. */
41
+ export interface AgentVersionRow {
42
+ /** Catalog / `CLIToolType` id. */
43
+ tool: string;
44
+ /** What `--version` reported, or null when the tool is not on PATH. */
45
+ installed: string | null;
46
+ /** codex only: its own `latest_version`. Null for every other tool. */
47
+ latestVersion: string | null;
48
+ /** codex only: its own `dismissed_version`. Null for every other tool. */
49
+ dismissedVersion: string | null;
50
+ /** True only when a newer version is known AND the tool is installed. */
51
+ updateAvailable: boolean;
52
+ /** True when the available update is one the user dismissed inside codex. */
53
+ dismissedInCodex: boolean;
54
+ /** Whether CommandMate has an update flow for this tool at all. */
55
+ updatable: boolean;
56
+ /** Where `latestVersion` came from, or null when nothing said. */
57
+ source: 'version.json' | null;
58
+ }
59
+ /**
60
+ * Every tool's version row, cached for {@link AGENT_VERSIONS_CACHE_TTL_MS}.
61
+ *
62
+ * Single-flight: two concurrent callers share one fan-out rather than doubling
63
+ * the child processes.
64
+ *
65
+ * @param options.force - Skip the cache and re-probe. What the UI passes right
66
+ * after an update, so the new version is visible without a 30s wait.
67
+ * @param options.now - Injectable clock, used for BOTH the expiry comparison
68
+ * and the expiry that is written. Honouring it on only one side would leave
69
+ * the TTL untestable — see {@link expiryFrom}.
70
+ */
71
+ export declare function getAgentVersions(options?: {
72
+ force?: boolean;
73
+ now?: number;
74
+ }): Promise<AgentVersionRow[]>;
75
+ /** Drop the cached probe. Tests, and every surface that just ran an update. */
76
+ export declare function clearAgentVersionsCache(): void;
77
+ //# sourceMappingURL=agent-versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-versions.d.ts","sourceRoot":"","sources":["../../../src/lib/updates/agent-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,yEAAyE;IACzE,eAAe,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/B;AA2DD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,eAAe,EAAE,CAAC,CA2B5B;AAED,+EAA+E;AAC/E,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ /**
3
+ * "Which agent CLIs are installed, and is codex behind?" (Issue #2069)
4
+ *
5
+ * One row per tool for the two update surfaces — the More screen's card and the
6
+ * agent pane's — and the split in what a row carries is deliberate:
7
+ *
8
+ * - **every tool reports `installed` only.** That is this Issue's 実装内容 2:
9
+ * the probe table already exists, it answers without a network, and
10
+ * "installed 1.0.80" is the whole truth CommandMate has about a copilot.
11
+ * - **codex additionally reports `latestVersion` / `updateAvailable`**, because
12
+ * codex is the one tool that writes its own release check to disk. See
13
+ * `./codex-version`.
14
+ *
15
+ * Nothing here queries a registry. A row that says `updateAvailable: false` is
16
+ * saying "nothing on this machine claims otherwise", never "I checked online".
17
+ *
18
+ * ## Why not `getDetectorFreshness()`
19
+ *
20
+ * It answers a different question (are the *detector's rules* stale?) and — the
21
+ * reason that matters here — it caches for the life of the process. This module
22
+ * is read immediately after an update completes, so a permanent memo would show
23
+ * the old version forever and make the acceptance criterion 「完了後に
24
+ * `codex --version` が上がる」 unobservable from the UI. So the probes are run
25
+ * through the same `runDetectorVersionProbe` (same absolute-path resolution,
26
+ * same sanitized env, same timeout) behind a **TTL** instead, on the reasoning
27
+ * `config/installed-agents-cache` already wrote down: the user's loop is
28
+ * "install something, come back, look again".
29
+ *
30
+ * @module lib/updates/agent-versions
31
+ */
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.AGENT_VERSIONS_CACHE_TTL_MS = void 0;
34
+ exports.getAgentVersions = getAgentVersions;
35
+ exports.clearAgentVersionsCache = clearAgentVersionsCache;
36
+ const version_probes_1 = require("../detection/version-probes");
37
+ const codex_version_1 = require("./codex-version");
38
+ const agent_updater_1 = require("./agent-updater");
39
+ /**
40
+ * How long one fan-out of `--version` probes is reused.
41
+ *
42
+ * Same 30s as `config/installed-agents-cache`, and for the same reason: opening
43
+ * a screen twice in a row costs one fan-out, while a version that changed under
44
+ * the server shows up without a restart. An update finishing calls
45
+ * {@link clearAgentVersionsCache} rather than waiting this out.
46
+ */
47
+ exports.AGENT_VERSIONS_CACHE_TTL_MS = 30_000;
48
+ let cache = null;
49
+ let inFlight = null;
50
+ /** Probe one tool and build its row. codex gets the extra half. */
51
+ async function buildRow(tool) {
52
+ const installed = await (0, version_probes_1.runDetectorVersionProbe)(version_probes_1.DETECTOR_VERSION_PROBES[tool]);
53
+ const updatable = (0, agent_updater_1.isUpdatableAgentTool)(tool);
54
+ if (tool !== 'codex') {
55
+ return {
56
+ tool,
57
+ installed,
58
+ latestVersion: null,
59
+ dismissedVersion: null,
60
+ updateAvailable: false,
61
+ dismissedInCodex: false,
62
+ updatable,
63
+ source: null,
64
+ };
65
+ }
66
+ const status = (0, codex_version_1.evaluateCodexUpdate)(installed, (0, codex_version_1.readCodexVersionFile)());
67
+ return {
68
+ tool,
69
+ installed: status.installed,
70
+ latestVersion: status.latestVersion,
71
+ dismissedVersion: status.dismissedVersion,
72
+ updateAvailable: status.updateAvailable,
73
+ dismissedInCodex: status.dismissedInCodex,
74
+ updatable,
75
+ source: status.source,
76
+ };
77
+ }
78
+ async function computeRows() {
79
+ const tools = Object.keys(version_probes_1.DETECTOR_VERSION_PROBES).sort();
80
+ return Promise.all(tools.map(buildRow));
81
+ }
82
+ /**
83
+ * When a fan-out started at `startedAt` should stop being reused.
84
+ *
85
+ * Takes the caller's clock rather than reading `Date.now()` again, and that is
86
+ * the whole point of the helper: an injected `now` that is honoured on the READ
87
+ * side but ignored on the WRITE side makes every TTL assertion vacuous — the
88
+ * cache is stamped with a real epoch, a test's `now: 2_000` is smaller than it
89
+ * whatever the TTL is, and `AGENT_VERSIONS_CACHE_TTL_MS = 0` still passes.
90
+ */
91
+ function expiryFrom(startedAt) {
92
+ return startedAt + exports.AGENT_VERSIONS_CACHE_TTL_MS;
93
+ }
94
+ /**
95
+ * Every tool's version row, cached for {@link AGENT_VERSIONS_CACHE_TTL_MS}.
96
+ *
97
+ * Single-flight: two concurrent callers share one fan-out rather than doubling
98
+ * the child processes.
99
+ *
100
+ * @param options.force - Skip the cache and re-probe. What the UI passes right
101
+ * after an update, so the new version is visible without a 30s wait.
102
+ * @param options.now - Injectable clock, used for BOTH the expiry comparison
103
+ * and the expiry that is written. Honouring it on only one side would leave
104
+ * the TTL untestable — see {@link expiryFrom}.
105
+ */
106
+ async function getAgentVersions(options = {}) {
107
+ const now = options.now ?? Date.now();
108
+ if (options.force) {
109
+ cache = null;
110
+ }
111
+ else if (cache && cache.expiresAt > now) {
112
+ return cache.rows;
113
+ }
114
+ if (inFlight)
115
+ return inFlight;
116
+ inFlight = (async () => {
117
+ try {
118
+ const rows = await computeRows();
119
+ cache = { rows, expiresAt: expiryFrom(now) };
120
+ return rows;
121
+ }
122
+ catch {
123
+ // A probe fan-out that throws must not fail the surface that asked: the
124
+ // versions are an annotation, and an empty list renders as "unknown".
125
+ cache = { rows: [], expiresAt: expiryFrom(now) };
126
+ return [];
127
+ }
128
+ finally {
129
+ inFlight = null;
130
+ }
131
+ })();
132
+ return inFlight;
133
+ }
134
+ /** Drop the cached probe. Tests, and every surface that just ran an update. */
135
+ function clearAgentVersionsCache() {
136
+ cache = null;
137
+ inFlight = null;
138
+ }
@@ -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
+ }