commandmate 0.26.1 → 0.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (840) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +430 -402
  3. package/.next/app-path-routes-manifest.json +32 -28
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/react-loadable-manifest.json +6 -6
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +24 -0
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update-check/route.js +1 -1
  12. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  14. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  15. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js +1 -1
  26. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/terminal/route.js +2 -2
  29. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js +1 -1
  32. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/capabilities/route.js +1 -0
  38. package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
  39. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
  40. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/fs/browse/route.js +2 -2
  46. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  47. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/fs/recent-paths/route.js +2 -2
  49. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  50. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  52. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  53. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/hooks/claude-done/route.js +19 -1
  55. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  56. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  58. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  59. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/push/escalation/route.js +1 -1
  63. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  64. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  66. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/push/vapid/route.js +1 -1
  68. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  69. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  72. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  74. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  76. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/clone/route.js +1 -1
  79. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/repositories/restore/route.js +1 -1
  83. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  84. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/repositories/route.js +1 -1
  86. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  87. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/repositories/scan/route.js +1 -1
  89. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  90. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/repositories/sync/route.js +1 -1
  92. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  93. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  95. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  96. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  104. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  107. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/todos/route.js +1 -1
  111. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  113. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/verification/runs/route.js +1 -1
  115. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -0
  123. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
  124. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
  125. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -1
  131. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  132. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/env/route.js +2 -0
  134. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
  135. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
  136. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  142. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -0
  195. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
  196. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
  197. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -5
  204. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  205. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -6
  210. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  214. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/send/route.js +3 -1
  216. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  237. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route.js +3 -1
  246. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  247. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/route.js +1 -1
  271. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/chat/page.js +2 -2
  274. package/.next/server/app/chat/page.js.nft.json +1 -1
  275. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  276. package/.next/server/app/login/page.js +2 -2
  277. package/.next/server/app/login/page.js.nft.json +1 -1
  278. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/more/page.js +2 -2
  281. package/.next/server/app/more/page.js.nft.json +1 -1
  282. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/page.js +1 -1
  285. package/.next/server/app/page.js.nft.json +1 -1
  286. package/.next/server/app/page_client-reference-manifest.js +1 -1
  287. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/repositories/page.js +2 -2
  289. package/.next/server/app/repositories/page.js.nft.json +1 -1
  290. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  291. package/.next/server/app/review/page.js +1 -1
  292. package/.next/server/app/review/page.js.nft.json +1 -1
  293. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  294. package/.next/server/app/sessions/page.js +1 -1
  295. package/.next/server/app/sessions/page.js.nft.json +1 -1
  296. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app/skills/[skillId]/page.js +2 -2
  298. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  299. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  300. package/.next/server/app/skills/installed/page.js +2 -2
  301. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  302. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  303. package/.next/server/app/skills/page.js +2 -2
  304. package/.next/server/app/skills/page.js.nft.json +1 -1
  305. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  306. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  307. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  308. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  309. package/.next/server/app/worktrees/[id]/page.js +9 -7
  310. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  311. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  312. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  313. package/.next/server/app-paths-manifest.json +32 -28
  314. package/.next/server/chunks/1029.js +1 -1
  315. package/.next/server/chunks/1068.js +3 -1
  316. package/.next/server/chunks/1296.js +1 -1
  317. package/.next/server/chunks/1538.js +7 -0
  318. package/.next/server/chunks/1601.js +2 -2
  319. package/.next/server/chunks/2119.js +1 -1
  320. package/.next/server/chunks/2404.js +3 -2
  321. package/.next/server/chunks/2445.js +1 -1
  322. package/.next/server/chunks/2546.js +1 -1
  323. package/.next/server/chunks/2689.js +13 -0
  324. package/.next/server/chunks/2759.js +8 -0
  325. package/.next/server/chunks/2839.js +1 -0
  326. package/.next/server/chunks/3241.js +1 -1
  327. package/.next/server/chunks/3292.js +1 -0
  328. package/.next/server/chunks/3417.js +1 -1
  329. package/.next/server/chunks/3480.js +1 -17
  330. package/.next/server/chunks/4393.js +1 -1
  331. package/.next/server/chunks/4423.js +1 -0
  332. package/.next/server/chunks/4444.js +22 -8
  333. package/.next/server/chunks/4565.js +3 -0
  334. package/.next/server/chunks/467.js +1 -0
  335. package/.next/server/chunks/4905.js +5 -0
  336. package/.next/server/chunks/5017.js +1 -0
  337. package/.next/server/chunks/5089.js +1 -0
  338. package/.next/server/chunks/5164.js +1 -1
  339. package/.next/server/chunks/5220.js +1 -0
  340. package/.next/server/chunks/5354.js +1 -0
  341. package/.next/server/chunks/552.js +19 -0
  342. package/.next/server/chunks/5571.js +1 -1
  343. package/.next/server/chunks/5998.js +3 -3
  344. package/.next/server/chunks/6130.js +1 -1
  345. package/.next/server/chunks/6274.js +11 -11
  346. package/.next/server/chunks/6285.js +1 -1
  347. package/.next/server/chunks/6401.js +1 -1
  348. package/.next/server/chunks/6781.js +1 -1
  349. package/.next/server/chunks/7472.js +1 -0
  350. package/.next/server/chunks/7506.js +1 -0
  351. package/.next/server/chunks/848.js +1 -1
  352. package/.next/server/chunks/8536.js +1 -1
  353. package/.next/server/chunks/880.js +1 -1
  354. package/.next/server/chunks/8807.js +5 -5
  355. package/.next/server/chunks/9067.js +1 -1
  356. package/.next/server/chunks/9284.js +1 -0
  357. package/.next/server/chunks/9358.js +1 -1
  358. package/.next/server/chunks/9508.js +1 -0
  359. package/.next/server/chunks/9938.js +1 -0
  360. package/.next/server/middleware-build-manifest.js +1 -1
  361. package/.next/server/middleware-manifest.json +5 -5
  362. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  363. package/.next/server/pages/500.html +1 -1
  364. package/.next/server/server-reference-manifest.json +1 -1
  365. package/.next/static/9IXgWfBUtnEnRqnbmErTp/_buildManifest.js +1 -0
  366. package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
  367. package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
  368. package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
  369. package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
  370. package/.next/static/chunks/{6381-0e097c0286155883.js → 6381-8cfe50a5ca5425b1.js} +1 -1
  371. package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
  372. package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
  373. package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
  374. package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
  375. package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
  376. package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
  377. package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
  378. package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
  379. package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
  380. package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
  381. package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
  382. package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
  383. package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
  384. package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
  385. package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
  386. package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
  387. package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
  388. package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
  389. package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
  390. package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
  391. package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
  392. package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
  393. package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
  394. package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
  395. package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
  396. package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
  397. package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
  398. package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
  399. package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
  400. package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
  401. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
  402. package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
  403. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
  404. package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
  405. package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
  406. package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
  407. package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
  408. package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
  409. package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
  410. package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
  411. package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
  412. package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
  413. package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
  414. package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
  415. package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
  416. package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
  417. package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
  418. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
  419. package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
  420. package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
  421. package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
  422. package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
  423. package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
  424. package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
  497. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
  498. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
  499. package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
  500. package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
  501. package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
  502. package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
  503. package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
  504. package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
  505. package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
  506. package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
  507. package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
  508. package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
  509. package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
  510. package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
  511. package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
  512. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
  513. package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
  514. package/.next/static/chunks/app/worktrees/[id]/page-f7b3dfbe757dc6b8.js +1 -0
  515. package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
  516. package/.next/static/css/928e5a8830fbf997.css +1 -0
  517. package/.next/trace +13 -12
  518. package/.next/types/app/api/capabilities/route.ts +347 -0
  519. package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
  520. package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
  521. package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
  522. package/.next/types/routes.d.ts +5 -1
  523. package/.next/types/validator.ts +36 -0
  524. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  525. package/dist/cli/commands/auto-yes.js +40 -2
  526. package/dist/cli/commands/capture.d.ts.map +1 -1
  527. package/dist/cli/commands/capture.js +28 -13
  528. package/dist/cli/commands/instances.d.ts +30 -18
  529. package/dist/cli/commands/instances.d.ts.map +1 -1
  530. package/dist/cli/commands/instances.js +32 -36
  531. package/dist/cli/commands/ls.d.ts.map +1 -1
  532. package/dist/cli/commands/ls.js +73 -1
  533. package/dist/cli/commands/respond.d.ts.map +1 -1
  534. package/dist/cli/commands/respond.js +18 -1
  535. package/dist/cli/commands/send.d.ts.map +1 -1
  536. package/dist/cli/commands/send.js +21 -15
  537. package/dist/cli/commands/status.d.ts.map +1 -1
  538. package/dist/cli/commands/status.js +38 -0
  539. package/dist/cli/commands/wait.d.ts +26 -0
  540. package/dist/cli/commands/wait.d.ts.map +1 -1
  541. package/dist/cli/commands/wait.js +390 -43
  542. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  543. package/dist/cli/config/cli-dependencies.js +16 -0
  544. package/dist/cli/config/cli-tool-ids.d.ts +11 -0
  545. package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
  546. package/dist/cli/config/cli-tool-ids.js +12 -1
  547. package/dist/cli/types/api-responses.d.ts +443 -2
  548. package/dist/cli/types/api-responses.d.ts.map +1 -1
  549. package/dist/cli/utils/api-client.d.ts +18 -0
  550. package/dist/cli/utils/api-client.d.ts.map +1 -1
  551. package/dist/cli/utils/api-client.js +22 -0
  552. package/dist/cli/utils/server-capabilities.d.ts +56 -0
  553. package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
  554. package/dist/cli/utils/server-capabilities.js +166 -0
  555. package/dist/cli/utils/session-target.d.ts +70 -0
  556. package/dist/cli/utils/session-target.d.ts.map +1 -0
  557. package/dist/cli/utils/session-target.js +118 -0
  558. package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
  559. package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
  560. package/dist/lib/cli-tools/copilot-executable.js +155 -0
  561. package/dist/lib/cli-tools/types.d.ts +61 -0
  562. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  563. package/dist/lib/cli-tools/types.js +41 -0
  564. package/dist/lib/detection/ansi.d.ts +2 -1
  565. package/dist/lib/detection/ansi.d.ts.map +1 -1
  566. package/dist/lib/detection/ansi.js +3 -2
  567. package/dist/lib/detection/tools/verified-against.d.ts +84 -0
  568. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
  569. package/dist/lib/detection/tools/verified-against.js +88 -0
  570. package/dist/lib/detection/version-probes.d.ts +207 -0
  571. package/dist/lib/detection/version-probes.d.ts.map +1 -0
  572. package/dist/lib/detection/version-probes.js +290 -0
  573. package/dist/lib/security/env-sanitizer.d.ts +198 -0
  574. package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
  575. package/dist/lib/security/env-sanitizer.js +232 -0
  576. package/dist/server/locales/en/notifications.json +17 -6
  577. package/dist/server/locales/ja/notifications.json +17 -6
  578. package/dist/server/src/config/activity-bar-config.js +4 -0
  579. package/dist/server/src/config/cli-tool-timing-config.js +59 -2
  580. package/dist/server/src/config/copilot-constants.js +11 -1
  581. package/dist/server/src/config/detection-evidence-config.js +129 -0
  582. package/dist/server/src/config/schedule-config.js +56 -7
  583. package/dist/server/src/config/tmux-pane-config.js +18 -1
  584. package/dist/server/src/lib/auto-yes-poller.js +36 -0
  585. package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
  586. package/dist/server/src/lib/cli-tools/base.js +131 -10
  587. package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
  588. package/dist/server/src/lib/cli-tools/claude.js +1 -1
  589. package/dist/server/src/lib/cli-tools/codex.js +6 -2
  590. package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
  591. package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
  592. package/dist/server/src/lib/cli-tools/copilot.js +307 -81
  593. package/dist/server/src/lib/cli-tools/gemini.js +8 -6
  594. package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
  595. package/dist/server/src/lib/cli-tools/index.js +11 -1
  596. package/dist/server/src/lib/cli-tools/manager.js +56 -4
  597. package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
  598. package/dist/server/src/lib/cli-tools/opencode.js +233 -30
  599. package/dist/server/src/lib/cli-tools/session-name.js +57 -0
  600. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
  601. package/dist/server/src/lib/cli-tools/types.js +41 -0
  602. package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
  603. package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
  604. package/dist/server/src/lib/cmate-parser.js +12 -4
  605. package/dist/server/src/lib/db/db.js +5 -1
  606. package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
  607. package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
  608. package/dist/server/src/lib/detection/ansi.js +3 -2
  609. package/dist/server/src/lib/detection/cli-patterns.js +901 -67
  610. package/dist/server/src/lib/detection/composer-text.js +455 -0
  611. package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
  612. package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
  613. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
  614. package/dist/server/src/lib/detection/status-detector.js +76 -675
  615. package/dist/server/src/lib/detection/status-reason.js +57 -0
  616. package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
  617. package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
  618. package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
  619. package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
  620. package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
  621. package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
  622. package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
  623. package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
  624. package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
  625. package/dist/server/src/lib/detection/tools/frame.js +47 -0
  626. package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
  627. package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
  628. package/dist/server/src/lib/detection/tools/registry.js +58 -0
  629. package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
  630. package/dist/server/src/lib/detection/tools/types.js +34 -0
  631. package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
  632. package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
  633. package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
  634. package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
  635. package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
  636. package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
  637. package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
  638. package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
  639. package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
  640. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
  641. package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
  642. package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
  643. package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
  644. package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
  645. package/dist/server/src/lib/hooks/sources/index.js +3 -1
  646. package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
  647. package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
  648. package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
  649. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
  650. package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
  651. package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
  652. package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
  653. package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
  654. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
  655. package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
  656. package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
  657. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
  658. package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
  659. package/dist/server/src/lib/job-executor.js +16 -4
  660. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
  661. package/dist/server/src/lib/polling/response-checker.js +243 -26
  662. package/dist/server/src/lib/push/failure-episode-state.js +127 -0
  663. package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
  664. package/dist/server/src/lib/push/index.js +35 -1
  665. package/dist/server/src/lib/push/prompt-card-state.js +93 -0
  666. package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
  667. package/dist/server/src/lib/push/push-sender.js +82 -7
  668. package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
  669. package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
  670. package/dist/server/src/lib/response-cleaner.js +93 -20
  671. package/dist/server/src/lib/response-extractor.js +98 -5
  672. package/dist/server/src/lib/security/env-sanitizer.js +179 -5
  673. package/dist/server/src/lib/session/agent-event-state.js +1038 -189
  674. package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
  675. package/dist/server/src/lib/session/claude-executor.js +23 -3
  676. package/dist/server/src/lib/session/claude-session.js +11 -1
  677. package/dist/server/src/lib/session/composer-clear.js +95 -0
  678. package/dist/server/src/lib/session/current-output-builder.js +267 -25
  679. package/dist/server/src/lib/session/provisional-turn.js +310 -0
  680. package/dist/server/src/lib/session/resolve-session-target.js +156 -0
  681. package/dist/server/src/lib/session/send-user-message.js +14 -18
  682. package/dist/server/src/lib/session/session-start-error.js +53 -1
  683. package/dist/server/src/lib/session/status-evidence.js +217 -0
  684. package/dist/server/src/lib/session/structured-prompt.js +46 -4
  685. package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
  686. package/dist/server/src/lib/tmux/key-sequence.js +120 -0
  687. package/dist/server/src/lib/tmux/tmux.js +91 -19
  688. package/dist/server/src/lib/tui-accumulator.js +68 -1
  689. package/dist/server/src/lib/verification/gate-runner.js +84 -1
  690. package/dist/server/src/lib/ws-server.js +8 -5
  691. package/dist/server/src/types/cli-tool-contracts.js +75 -0
  692. package/dist/server/src/types/terminal-keys.js +37 -0
  693. package/dist/types/cli-tool-contracts.d.ts +235 -0
  694. package/dist/types/cli-tool-contracts.d.ts.map +1 -0
  695. package/dist/types/cli-tool-contracts.js +75 -0
  696. package/package.json +3 -2
  697. package/public/sw.js +65 -2
  698. package/.next/server/chunks/1841.js +0 -1
  699. package/.next/server/chunks/233.js +0 -1
  700. package/.next/server/chunks/3022.js +0 -1
  701. package/.next/server/chunks/3270.js +0 -1
  702. package/.next/server/chunks/4455.js +0 -1
  703. package/.next/server/chunks/5959.js +0 -27
  704. package/.next/server/chunks/7458.js +0 -6
  705. package/.next/server/chunks/8730.js +0 -1
  706. package/.next/server/chunks/9058.js +0 -1
  707. package/.next/server/chunks/9687.js +0 -3
  708. package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
  709. package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
  710. package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
  711. package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
  712. package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
  713. package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
  714. package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
  715. package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
  716. package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
  717. package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
  718. package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
  719. package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
  720. package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
  721. package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
  722. package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
  723. package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
  724. package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
  725. package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
  726. package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
  727. package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
  728. package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
  729. package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
  730. package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
  731. package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
  732. package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
  733. package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
  734. package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
  735. package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
  736. package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
  737. package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
  738. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
  739. package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
  740. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
  741. package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
  742. package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
  743. package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
  744. package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
  745. package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
  746. package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
  747. package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
  748. package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
  749. package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
  750. package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
  751. package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
  752. package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
  753. package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
  754. package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
  755. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
  756. package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
  757. package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
  758. package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
  759. package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
  760. package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
  761. package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
  762. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
  763. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
  764. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
  765. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
  766. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
  767. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
  768. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
  769. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  770. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
  771. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
  772. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
  773. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
  774. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
  775. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
  776. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
  777. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
  778. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
  779. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
  780. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
  781. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
  782. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
  783. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
  796. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
  797. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
  798. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
  799. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
  800. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
  801. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
  802. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
  803. package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
  804. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
  805. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
  806. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
  807. package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
  808. package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
  809. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
  810. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
  811. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
  812. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
  813. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
  814. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
  815. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
  816. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
  817. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
  818. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
  819. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
  820. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
  821. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
  822. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
  823. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
  824. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
  825. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
  826. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  827. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
  828. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  829. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
  830. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
  831. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
  832. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
  833. package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
  834. package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
  835. package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
  836. package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
  837. package/.next/static/chunks/app/worktrees/[id]/page-fdfca039b7f5837e.js +0 -1
  838. package/.next/static/css/e865c4979a41aa03.css +0 -1
  839. package/.next/static/wyFLOpmKpr45BHZ4svYpE/_buildManifest.js +0 -1
  840. /package/.next/static/{wyFLOpmKpr45BHZ4svYpE → 9IXgWfBUtnEnRqnbmErTp}/_ssgManifest.js +0 -0
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Environment Variable Sanitizer
3
+ * Issue #294: Sanitizes environment variables for child processes
4
+ *
5
+ * Removes sensitive environment variables (auth tokens, certificates, database paths)
6
+ * before spawning child processes like `claude -p`.
7
+ *
8
+ * [S1-001/S4-001] Centralized sensitive key management
9
+ *
10
+ * ## What this file defends — the one sentence (Issue #1996)
11
+ *
12
+ * **A CommandMate process must hand its children neither a credential nor the
13
+ * identity of the agent that started it.**
14
+ *
15
+ * Two halves, and they fail differently:
16
+ *
17
+ * - **Credentials** — {@link SENSITIVE_ENV_KEYS}. A child that can read them
18
+ * can act as this server, or read its database.
19
+ * - **The launching agent's identity** — {@link AGENT_CORRELATION_ENV_KEYS}:
20
+ * every variable `AgentLaunchPlan.env` writes onto an agent's launch line
21
+ * that says *which server to report to* and *as which instance*. A child
22
+ * that inherits them reports somebody else's work as that instance's.
23
+ *
24
+ * A per-tool config redirect (`CODEX_HOME`) is on the launch line too and is
25
+ * deliberately **not** stripped: it says where a tool reads its own settings,
26
+ * which is neither a credential nor an identity, and a child that inherits one
27
+ * is unaffected.
28
+ *
29
+ * ## Issue #1942 — why a *prefix* joined the list
30
+ *
31
+ * 設計方針書 §13.2 S8 asks for two halves. #1904 landed the first: the values a
32
+ * hook needs are handed to the agent on its launch line (`CM_HOOK_PORT=3011
33
+ * copilot`) instead of being baked into a machine-global settings file. This is
34
+ * the second: those variables must not travel any further than the agent.
35
+ *
36
+ * The leak this closes is not the agent's own children — CommandMate does not
37
+ * own that environment — it is **CommandMate's**. A server started from inside
38
+ * a pane CommandMate itself launched inherits that pane's launch line, and
39
+ * every child *this* process then spawns (`claude -p` for Assistant Chat, the
40
+ * slash-command probes, `copilot --version`) inherits it in turn. The values
41
+ * are a correlation key and a port: a relay firing from one of those children
42
+ * posts its events to another server, attributed to an instance that is not the
43
+ * one running. Nothing errors; the events simply land on the wrong session.
44
+ *
45
+ * ## Issue #1996 — why the prefix could not be the whole rule
46
+ *
47
+ * #1942 chose `CM_HOOK_*` because a namespace is stronger than a list: the next
48
+ * variable in it is stripped whether or not its author reads this file. That
49
+ * reasoning is still right, and the prefix stays. What was wrong was the
50
+ * premise that the namespace *covers the launch line*. Building all seven
51
+ * sources' `prepareLaunch` and reading `env` back — the measurement is pinned in
52
+ * `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` — finds six identity
53
+ * variables, and two of them start with `CM_HOOK_`.
54
+ *
55
+ * The other four produce the same failure #1942 named, by two measured routes:
56
+ *
57
+ * - `scripts/hooks/cmate-agent-event.sh` reads `CM_AGENT_TOOL` from the
58
+ * environment (`TOOL="${CM_AGENT_TOOL:-claude}"`) and, with no `CM_HOOK_URL`,
59
+ * falls back to `http://127.0.0.1:${CM_PORT:-3000}/api/hooks/agent-event`.
60
+ * Stripping only the `CM_HOOK_` half therefore makes the destination *valid
61
+ * again* — usually the live server — while the attribution stays wrong. The
62
+ * event lands, on the wrong tool.
63
+ * - The generated antigravity `PreToolUse` command gates on
64
+ * `[ -z "${CM_PERMISSION_HOOK_URL:-}" ]`, which is its whole test for "am I a
65
+ * CommandMate-launched session". `~/.gemini/config/hooks.json` is a
66
+ * machine-global singleton, so an inherited `CM_PERMISSION_HOOK_URL` makes
67
+ * any agy started under one of CommandMate's children ask *another
68
+ * instance's* server for permission, and obey the answer.
69
+ *
70
+ * ### Why the prefix was not simply widened to `CM_AGENT_`
71
+ *
72
+ * Because `CM_AGENT_` is not CommandMate's own namespace, and the sentence that
73
+ * justifies the `CM_HOOK_` prefix — "there is no operator value here to
74
+ * preserve" — is false for it. `CM_AGENT_HOOKS_INJECT` and `CM_AGENT_HOOKS_DIR`
75
+ * are **operator switches read from the ambient environment**
76
+ * (`hooks/sources/copilot/hook-settings.ts`, `hooks/hook-settings-generator.ts`);
77
+ * stripping them would silently change a child's configuration. #1942's own test
78
+ * already pinned that shape. And `CM_PERMISSION_HOOK_URL` shares no prefix with
79
+ * anything, so no namespace rule could have covered the set in any case.
80
+ *
81
+ * Renaming the four into `CM_HOOK_*` so the prefix *would* suffice was
82
+ * considered and rejected: `CM_AGENT_TOOL` is documented in the shipped relay's
83
+ * own `--help` and depended on by the hand-configured hooks of #1549, and
84
+ * `~/.copilot/settings.json` / `~/.gemini/config/hooks.json` are machine-global
85
+ * files already on disk carrying the old names — every already-configured
86
+ * session would stop correlating until rewritten.
87
+ *
88
+ * So the rule is a **union**: the credential list, the enumerated identity set,
89
+ * and the `CM_HOOK_` prefix that still covers whatever is invented inside it.
90
+ *
91
+ * ## The join with `lib/hooks`, and what replaces the prefix as a drift guard
92
+ *
93
+ * `lib/security` does not import `lib/hooks` — the dependency already runs the
94
+ * other way (`hooks/agent-event-service`, `hooks/sources/copilot/hook-settings`
95
+ * and `hooks/sources/codex/hooks-config` all import
96
+ * `lib/security/path-validator`), and inverting it would put a package cycle
97
+ * underneath four child-process spawners. `tests/unit/guards/security-no-hooks-import.test.ts`
98
+ * holds that.
99
+ *
100
+ * The enumeration below is therefore a second copy of a list `lib/hooks` also
101
+ * declares, and two tests are the join:
102
+ *
103
+ * 1. `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` builds all seven
104
+ * `prepareLaunch` plans and asserts their env keys are **exactly**
105
+ * `AGENT_CORRELATION_ENV_VARS` plus `AGENT_LAUNCH_CONFIG_ENV_VARS`. A source
106
+ * that starts writing a new variable — in any namespace — goes red there, by
107
+ * name.
108
+ * 2. `tests/unit/security/child-process-agent-env-1996.test.ts` takes that
109
+ * declared list and proves, with a real child process, that none of it is
110
+ * readable. Deleting a name from {@link AGENT_CORRELATION_ENV_KEYS} does not
111
+ * shrink what that test iterates, so the deletion is what goes red.
112
+ *
113
+ * Together those two are stronger than the prefix was, because the prefix never
114
+ * covered a name outside its own namespace at all.
115
+ */
116
+ /**
117
+ * List of environment variable keys that must be removed before
118
+ * passing environment to child processes.
119
+ *
120
+ * These include authentication tokens, TLS certificates, IP restriction
121
+ * settings, and database paths that should not be inherited by spawned
122
+ * CLI tool processes.
123
+ *
124
+ * `CM_AUTH_TOKEN` — the **plaintext** bearer token — joined in Issue #1996. Only
125
+ * the `_HASH` form was listed, and the plaintext one is what a request is
126
+ * actually authenticated with: measured with a real child, `claude -p` and the
127
+ * version probes could read it back. It is expected in a server's environment
128
+ * (the CLI's own `--token` warning tells operators to prefer the variable, and
129
+ * §10.7 of the 設計方針書 has the agent's hooks read it "from process
130
+ * inheritance"), and `lib/slash-command-catalog`'s docblock already claimed a
131
+ * probe "never hands CommandMate's auth token … to a third-party CLI".
132
+ *
133
+ * Nothing that spawns with {@link sanitizeEnvForChildProcess} needs it: none of
134
+ * the five call sites configures hooks for its child. The **agent's** pane is
135
+ * unaffected — tmux inherits the server's environment directly and never goes
136
+ * through this function — so `$CM_AUTH_TOKEN` still expands in a hook.
137
+ */
138
+ export declare const SENSITIVE_ENV_KEYS: readonly ["CLAUDECODE", "CM_AUTH_TOKEN", "CM_AUTH_TOKEN_HASH", "CM_AUTH_EXPIRE", "CM_HTTPS_KEY", "CM_HTTPS_CERT", "CM_ALLOWED_IPS", "CM_TRUST_PROXY", "CM_DB_PATH", "GH_DEBUG"];
139
+ /**
140
+ * The namespace CommandMate writes onto an agent's launch line (Issue #1942).
141
+ *
142
+ * Kept alongside {@link AGENT_CORRELATION_ENV_KEYS} rather than replaced by it.
143
+ * Inside this namespace the prefix is still the stronger rule — a `CM_HOOK_*`
144
+ * variable invented next year is stripped whether or not anyone remembers this
145
+ * file exists, and `CM_HOOK_` is CommandMate's own namespace, so there is no
146
+ * operator value here to preserve. What #1996 measured is that the namespace is
147
+ * two of the launch line's six identity variables, not all of them; see the
148
+ * module comment.
149
+ */
150
+ export declare const COMMANDMATE_HOOK_ENV_PREFIX = "CM_HOOK_";
151
+ /**
152
+ * Every variable an agent's launch line uses to say **which server to report to
153
+ * and as which instance** (Issue #1996).
154
+ *
155
+ * The measured contents of `AgentLaunchPlan.env` across all seven sources, minus
156
+ * the per-tool config redirects. `lib/hooks/sources/launch-command` declares the
157
+ * same set as `AGENT_CORRELATION_ENV_VARS`; this is the second copy, and the two
158
+ * tests named in the module comment are the join. Sorted, so a diff against the
159
+ * measured set reads cleanly.
160
+ *
161
+ * Two of them are inside {@link COMMANDMATE_HOOK_ENV_PREFIX} and would be
162
+ * stripped anyway. They are listed regardless: this array is the statement of
163
+ * *what the rule is about*, and a reader who has to subtract a prefix to see the
164
+ * set is a reader who will get it wrong again.
165
+ */
166
+ export declare const AGENT_CORRELATION_ENV_KEYS: readonly ["CM_AGENT_INSTANCE_ID", "CM_AGENT_TOOL", "CM_AGENT_WORKTREE_ID", "CM_HOOK_PORT", "CM_HOOK_URL", "CM_PERMISSION_HOOK_URL"];
167
+ /**
168
+ * Whether `key` is removed from a child process's environment.
169
+ *
170
+ * @param key - An environment variable name
171
+ * @returns `true` for a listed secret, a launch-line identity variable, or
172
+ * anything in CommandMate's hook namespace
173
+ */
174
+ export declare function isStrippedChildProcessEnvKey(key: string): boolean;
175
+ /**
176
+ * Create a sanitized copy of process.env suitable for child processes.
177
+ *
178
+ * Removes every key {@link isStrippedChildProcessEnvKey} claims: the listed
179
+ * secrets (Issue #294/#545/#1996), the launch-line identity of the agent this
180
+ * process was started under (Issue #1996), and CommandMate's own `CM_HOOK_*`
181
+ * namespace (Issue #1942). Non-sensitive variables (PATH, HOME, NODE_ENV, etc.)
182
+ * are preserved, including the operator's own `CM_AGENT_HOOKS_*` switches.
183
+ *
184
+ * @returns A shallow copy of process.env with sensitive keys removed
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * import { execFile } from 'child_process';
189
+ * import { sanitizeEnvForChildProcess } from './env-sanitizer';
190
+ *
191
+ * execFile('claude', ['-p', message], {
192
+ * env: sanitizeEnvForChildProcess(),
193
+ * cwd: worktreePath,
194
+ * });
195
+ * ```
196
+ */
197
+ export declare function sanitizeEnvForChildProcess(): NodeJS.ProcessEnv;
198
+ //# sourceMappingURL=env-sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-sanitizer.d.ts","sourceRoot":"","sources":["../../../src/lib/security/env-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkHG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,kBAAkB,iLAWrB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,aAAa,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,0BAA0B,qIAO7B,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMjE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,UAAU,CAQ9D"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ /**
3
+ * Environment Variable Sanitizer
4
+ * Issue #294: Sanitizes environment variables for child processes
5
+ *
6
+ * Removes sensitive environment variables (auth tokens, certificates, database paths)
7
+ * before spawning child processes like `claude -p`.
8
+ *
9
+ * [S1-001/S4-001] Centralized sensitive key management
10
+ *
11
+ * ## What this file defends — the one sentence (Issue #1996)
12
+ *
13
+ * **A CommandMate process must hand its children neither a credential nor the
14
+ * identity of the agent that started it.**
15
+ *
16
+ * Two halves, and they fail differently:
17
+ *
18
+ * - **Credentials** — {@link SENSITIVE_ENV_KEYS}. A child that can read them
19
+ * can act as this server, or read its database.
20
+ * - **The launching agent's identity** — {@link AGENT_CORRELATION_ENV_KEYS}:
21
+ * every variable `AgentLaunchPlan.env` writes onto an agent's launch line
22
+ * that says *which server to report to* and *as which instance*. A child
23
+ * that inherits them reports somebody else's work as that instance's.
24
+ *
25
+ * A per-tool config redirect (`CODEX_HOME`) is on the launch line too and is
26
+ * deliberately **not** stripped: it says where a tool reads its own settings,
27
+ * which is neither a credential nor an identity, and a child that inherits one
28
+ * is unaffected.
29
+ *
30
+ * ## Issue #1942 — why a *prefix* joined the list
31
+ *
32
+ * 設計方針書 §13.2 S8 asks for two halves. #1904 landed the first: the values a
33
+ * hook needs are handed to the agent on its launch line (`CM_HOOK_PORT=3011
34
+ * copilot`) instead of being baked into a machine-global settings file. This is
35
+ * the second: those variables must not travel any further than the agent.
36
+ *
37
+ * The leak this closes is not the agent's own children — CommandMate does not
38
+ * own that environment — it is **CommandMate's**. A server started from inside
39
+ * a pane CommandMate itself launched inherits that pane's launch line, and
40
+ * every child *this* process then spawns (`claude -p` for Assistant Chat, the
41
+ * slash-command probes, `copilot --version`) inherits it in turn. The values
42
+ * are a correlation key and a port: a relay firing from one of those children
43
+ * posts its events to another server, attributed to an instance that is not the
44
+ * one running. Nothing errors; the events simply land on the wrong session.
45
+ *
46
+ * ## Issue #1996 — why the prefix could not be the whole rule
47
+ *
48
+ * #1942 chose `CM_HOOK_*` because a namespace is stronger than a list: the next
49
+ * variable in it is stripped whether or not its author reads this file. That
50
+ * reasoning is still right, and the prefix stays. What was wrong was the
51
+ * premise that the namespace *covers the launch line*. Building all seven
52
+ * sources' `prepareLaunch` and reading `env` back — the measurement is pinned in
53
+ * `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` — finds six identity
54
+ * variables, and two of them start with `CM_HOOK_`.
55
+ *
56
+ * The other four produce the same failure #1942 named, by two measured routes:
57
+ *
58
+ * - `scripts/hooks/cmate-agent-event.sh` reads `CM_AGENT_TOOL` from the
59
+ * environment (`TOOL="${CM_AGENT_TOOL:-claude}"`) and, with no `CM_HOOK_URL`,
60
+ * falls back to `http://127.0.0.1:${CM_PORT:-3000}/api/hooks/agent-event`.
61
+ * Stripping only the `CM_HOOK_` half therefore makes the destination *valid
62
+ * again* — usually the live server — while the attribution stays wrong. The
63
+ * event lands, on the wrong tool.
64
+ * - The generated antigravity `PreToolUse` command gates on
65
+ * `[ -z "${CM_PERMISSION_HOOK_URL:-}" ]`, which is its whole test for "am I a
66
+ * CommandMate-launched session". `~/.gemini/config/hooks.json` is a
67
+ * machine-global singleton, so an inherited `CM_PERMISSION_HOOK_URL` makes
68
+ * any agy started under one of CommandMate's children ask *another
69
+ * instance's* server for permission, and obey the answer.
70
+ *
71
+ * ### Why the prefix was not simply widened to `CM_AGENT_`
72
+ *
73
+ * Because `CM_AGENT_` is not CommandMate's own namespace, and the sentence that
74
+ * justifies the `CM_HOOK_` prefix — "there is no operator value here to
75
+ * preserve" — is false for it. `CM_AGENT_HOOKS_INJECT` and `CM_AGENT_HOOKS_DIR`
76
+ * are **operator switches read from the ambient environment**
77
+ * (`hooks/sources/copilot/hook-settings.ts`, `hooks/hook-settings-generator.ts`);
78
+ * stripping them would silently change a child's configuration. #1942's own test
79
+ * already pinned that shape. And `CM_PERMISSION_HOOK_URL` shares no prefix with
80
+ * anything, so no namespace rule could have covered the set in any case.
81
+ *
82
+ * Renaming the four into `CM_HOOK_*` so the prefix *would* suffice was
83
+ * considered and rejected: `CM_AGENT_TOOL` is documented in the shipped relay's
84
+ * own `--help` and depended on by the hand-configured hooks of #1549, and
85
+ * `~/.copilot/settings.json` / `~/.gemini/config/hooks.json` are machine-global
86
+ * files already on disk carrying the old names — every already-configured
87
+ * session would stop correlating until rewritten.
88
+ *
89
+ * So the rule is a **union**: the credential list, the enumerated identity set,
90
+ * and the `CM_HOOK_` prefix that still covers whatever is invented inside it.
91
+ *
92
+ * ## The join with `lib/hooks`, and what replaces the prefix as a drift guard
93
+ *
94
+ * `lib/security` does not import `lib/hooks` — the dependency already runs the
95
+ * other way (`hooks/agent-event-service`, `hooks/sources/copilot/hook-settings`
96
+ * and `hooks/sources/codex/hooks-config` all import
97
+ * `lib/security/path-validator`), and inverting it would put a package cycle
98
+ * underneath four child-process spawners. `tests/unit/guards/security-no-hooks-import.test.ts`
99
+ * holds that.
100
+ *
101
+ * The enumeration below is therefore a second copy of a list `lib/hooks` also
102
+ * declares, and two tests are the join:
103
+ *
104
+ * 1. `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` builds all seven
105
+ * `prepareLaunch` plans and asserts their env keys are **exactly**
106
+ * `AGENT_CORRELATION_ENV_VARS` plus `AGENT_LAUNCH_CONFIG_ENV_VARS`. A source
107
+ * that starts writing a new variable — in any namespace — goes red there, by
108
+ * name.
109
+ * 2. `tests/unit/security/child-process-agent-env-1996.test.ts` takes that
110
+ * declared list and proves, with a real child process, that none of it is
111
+ * readable. Deleting a name from {@link AGENT_CORRELATION_ENV_KEYS} does not
112
+ * shrink what that test iterates, so the deletion is what goes red.
113
+ *
114
+ * Together those two are stronger than the prefix was, because the prefix never
115
+ * covered a name outside its own namespace at all.
116
+ */
117
+ Object.defineProperty(exports, "__esModule", { value: true });
118
+ exports.AGENT_CORRELATION_ENV_KEYS = exports.COMMANDMATE_HOOK_ENV_PREFIX = exports.SENSITIVE_ENV_KEYS = void 0;
119
+ exports.isStrippedChildProcessEnvKey = isStrippedChildProcessEnvKey;
120
+ exports.sanitizeEnvForChildProcess = sanitizeEnvForChildProcess;
121
+ /**
122
+ * List of environment variable keys that must be removed before
123
+ * passing environment to child processes.
124
+ *
125
+ * These include authentication tokens, TLS certificates, IP restriction
126
+ * settings, and database paths that should not be inherited by spawned
127
+ * CLI tool processes.
128
+ *
129
+ * `CM_AUTH_TOKEN` — the **plaintext** bearer token — joined in Issue #1996. Only
130
+ * the `_HASH` form was listed, and the plaintext one is what a request is
131
+ * actually authenticated with: measured with a real child, `claude -p` and the
132
+ * version probes could read it back. It is expected in a server's environment
133
+ * (the CLI's own `--token` warning tells operators to prefer the variable, and
134
+ * §10.7 of the 設計方針書 has the agent's hooks read it "from process
135
+ * inheritance"), and `lib/slash-command-catalog`'s docblock already claimed a
136
+ * probe "never hands CommandMate's auth token … to a third-party CLI".
137
+ *
138
+ * Nothing that spawns with {@link sanitizeEnvForChildProcess} needs it: none of
139
+ * the five call sites configures hooks for its child. The **agent's** pane is
140
+ * unaffected — tmux inherits the server's environment directly and never goes
141
+ * through this function — so `$CM_AUTH_TOKEN` still expands in a hook.
142
+ */
143
+ exports.SENSITIVE_ENV_KEYS = [
144
+ 'CLAUDECODE',
145
+ 'CM_AUTH_TOKEN', // Issue #1996: plaintext bearer token, not just its hash
146
+ 'CM_AUTH_TOKEN_HASH',
147
+ 'CM_AUTH_EXPIRE',
148
+ 'CM_HTTPS_KEY',
149
+ 'CM_HTTPS_CERT',
150
+ 'CM_ALLOWED_IPS',
151
+ 'CM_TRUST_PROXY',
152
+ 'CM_DB_PATH',
153
+ 'GH_DEBUG', // Issue #545: Prevent gh debug output in child processes [SEC4-003]
154
+ ];
155
+ /**
156
+ * The namespace CommandMate writes onto an agent's launch line (Issue #1942).
157
+ *
158
+ * Kept alongside {@link AGENT_CORRELATION_ENV_KEYS} rather than replaced by it.
159
+ * Inside this namespace the prefix is still the stronger rule — a `CM_HOOK_*`
160
+ * variable invented next year is stripped whether or not anyone remembers this
161
+ * file exists, and `CM_HOOK_` is CommandMate's own namespace, so there is no
162
+ * operator value here to preserve. What #1996 measured is that the namespace is
163
+ * two of the launch line's six identity variables, not all of them; see the
164
+ * module comment.
165
+ */
166
+ exports.COMMANDMATE_HOOK_ENV_PREFIX = 'CM_HOOK_';
167
+ /**
168
+ * Every variable an agent's launch line uses to say **which server to report to
169
+ * and as which instance** (Issue #1996).
170
+ *
171
+ * The measured contents of `AgentLaunchPlan.env` across all seven sources, minus
172
+ * the per-tool config redirects. `lib/hooks/sources/launch-command` declares the
173
+ * same set as `AGENT_CORRELATION_ENV_VARS`; this is the second copy, and the two
174
+ * tests named in the module comment are the join. Sorted, so a diff against the
175
+ * measured set reads cleanly.
176
+ *
177
+ * Two of them are inside {@link COMMANDMATE_HOOK_ENV_PREFIX} and would be
178
+ * stripped anyway. They are listed regardless: this array is the statement of
179
+ * *what the rule is about*, and a reader who has to subtract a prefix to see the
180
+ * set is a reader who will get it wrong again.
181
+ */
182
+ exports.AGENT_CORRELATION_ENV_KEYS = [
183
+ 'CM_AGENT_INSTANCE_ID',
184
+ 'CM_AGENT_TOOL',
185
+ 'CM_AGENT_WORKTREE_ID',
186
+ 'CM_HOOK_PORT',
187
+ 'CM_HOOK_URL',
188
+ 'CM_PERMISSION_HOOK_URL',
189
+ ];
190
+ /**
191
+ * Whether `key` is removed from a child process's environment.
192
+ *
193
+ * @param key - An environment variable name
194
+ * @returns `true` for a listed secret, a launch-line identity variable, or
195
+ * anything in CommandMate's hook namespace
196
+ */
197
+ function isStrippedChildProcessEnvKey(key) {
198
+ return (exports.SENSITIVE_ENV_KEYS.includes(key) ||
199
+ exports.AGENT_CORRELATION_ENV_KEYS.includes(key) ||
200
+ key.startsWith(exports.COMMANDMATE_HOOK_ENV_PREFIX));
201
+ }
202
+ /**
203
+ * Create a sanitized copy of process.env suitable for child processes.
204
+ *
205
+ * Removes every key {@link isStrippedChildProcessEnvKey} claims: the listed
206
+ * secrets (Issue #294/#545/#1996), the launch-line identity of the agent this
207
+ * process was started under (Issue #1996), and CommandMate's own `CM_HOOK_*`
208
+ * namespace (Issue #1942). Non-sensitive variables (PATH, HOME, NODE_ENV, etc.)
209
+ * are preserved, including the operator's own `CM_AGENT_HOOKS_*` switches.
210
+ *
211
+ * @returns A shallow copy of process.env with sensitive keys removed
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * import { execFile } from 'child_process';
216
+ * import { sanitizeEnvForChildProcess } from './env-sanitizer';
217
+ *
218
+ * execFile('claude', ['-p', message], {
219
+ * env: sanitizeEnvForChildProcess(),
220
+ * cwd: worktreePath,
221
+ * });
222
+ * ```
223
+ */
224
+ function sanitizeEnvForChildProcess() {
225
+ const env = { ...process.env };
226
+ for (const key of Object.keys(env)) {
227
+ if (isStrippedChildProcessEnvKey(key)) {
228
+ delete env[key];
229
+ }
230
+ }
231
+ return env;
232
+ }
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "title": "Notifications",
3
- "description": "Get a push notification when an agent is waiting for you or finishes a session — even when the app is closed.",
3
+ "description": "Get a push notification when something needs you a prompt, a failed verification, an upstream API fault, or a session that could not start — even when the app is closed. Completions are optional.",
4
4
  "enable": "Enable notifications",
5
5
  "enabling": "Enabling…",
6
6
  "enabledOnThisDevice": "Notifications are enabled on this device.",
7
7
  "unsubscribe": "Unsubscribe this device",
8
8
  "types": {
9
9
  "heading": "Notify me about",
10
- "promptWaiting": "Prompt waiting",
11
- "promptWaitingDesc": "When an agent is waiting for your reply",
12
- "completion": "Session complete",
13
- "completionDesc": "When an agent finishes a session"
10
+ "promptWaiting": "When you need to act",
11
+ "promptWaitingDesc": "A prompt waiting for you, a failed verification gate, an upstream API fault, or a session that could not start. Nothing moves until you do",
12
+ "completion": "Also tell me about completions (optional)",
13
+ "completionDesc": "Ordinary completions that need nothing from you. Off by default on newly registered devices (change it for this device here)"
14
14
  },
15
15
  "permission": {
16
16
  "denied": "Notifications are blocked in your browser settings. Allow them for this site to receive push notifications."
@@ -34,7 +34,18 @@
34
34
  "terminalAttentionWithExcerpt": "Needs attention in the terminal: {excerpt}",
35
35
  "terminalAttention": "Needs attention in the terminal",
36
36
  "stillWaitingPrompt": "Still waiting for your reply ({minutes} min)",
37
- "stillWaitingTerminal": "Still needs attention in the terminal ({minutes} min)"
37
+ "stillWaitingTerminal": "Still needs attention in the terminal ({minutes} min)",
38
+ "failureVerificationWithExcerpt": "Verification failed: {excerpt}",
39
+ "failureVerification": "Verification failed",
40
+ "failureUpstreamWithExcerpt": "Stalled by an upstream API fault: {excerpt}",
41
+ "failureUpstream": "Stalled by an upstream API fault",
42
+ "failureSessionStartWithExcerpt": "Could not start the session: {excerpt}",
43
+ "failureSessionStart": "Could not start the session",
44
+ "failureSessionUnavailableWithExcerpt": "Could not start the session: {excerpt} is not installed",
45
+ "failureSessionUnavailable": "Could not start the session: the CLI tool is not installed",
46
+ "failureWithExcerpt": "Failed: {excerpt}",
47
+ "failure": "Failed",
48
+ "promptResolved": "Handled — answered on another device"
38
49
  },
39
50
  "escalation": {
40
51
  "heading": "Reminder",
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "title": "通知",
3
- "description": "エージェントが応答待ちになったり、セッションが完了したときに、アプリを開いていなくてもプッシュ通知を受け取れます。",
3
+ "description": "対応が必要になったとき(応答待ち・検証の不合格・上流APIの障害・セッションの起動失敗)に、アプリを開いていなくてもプッシュ通知を受け取れます。対応の要らない完了通知は任意です。",
4
4
  "enable": "通知を有効にする",
5
5
  "enabling": "有効化中…",
6
6
  "enabledOnThisDevice": "この端末で通知が有効です。",
7
7
  "unsubscribe": "この端末の通知を解除",
8
8
  "types": {
9
9
  "heading": "通知する種別",
10
- "promptWaiting": "応答待ち",
11
- "promptWaitingDesc": "エージェントがあなたの応答を待っているとき",
12
- "completion": "セッション完了",
13
- "completionDesc": "エージェントがセッションを完了したとき"
10
+ "promptWaiting": "対応が必要なとき",
11
+ "promptWaitingDesc": "応答待ち・検証ゲートの不合格・上流APIの障害・セッションの起動失敗。あなたが動かないと進みません",
12
+ "completion": "完了も知らせる(任意)",
13
+ "completionDesc": "対応の要らない正常完了。新しく登録した端末では既定でオフです(この端末の設定はここで変えられます)"
14
14
  },
15
15
  "permission": {
16
16
  "denied": "ブラウザの設定で通知がブロックされています。このサイトの通知を許可してください。"
@@ -34,7 +34,18 @@
34
34
  "terminalAttentionWithExcerpt": "端末の確認が必要です: {excerpt}",
35
35
  "terminalAttention": "端末の確認が必要です",
36
36
  "stillWaitingPrompt": "まだ応答待ちです({minutes}分経過)",
37
- "stillWaitingTerminal": "まだ端末の確認が必要です({minutes}分経過)"
37
+ "stillWaitingTerminal": "まだ端末の確認が必要です({minutes}分経過)",
38
+ "failureVerificationWithExcerpt": "検証ゲート不合格: {excerpt}",
39
+ "failureVerification": "検証ゲートに不合格しました",
40
+ "failureUpstreamWithExcerpt": "上流APIの障害で停止しています: {excerpt}",
41
+ "failureUpstream": "上流APIの障害で停止しています",
42
+ "failureSessionStartWithExcerpt": "セッションを起動できませんでした: {excerpt}",
43
+ "failureSessionStart": "セッションを起動できませんでした",
44
+ "failureSessionUnavailableWithExcerpt": "セッションを起動できませんでした: {excerpt} がインストールされていません",
45
+ "failureSessionUnavailable": "セッションを起動できませんでした: CLI ツールがインストールされていません",
46
+ "failureWithExcerpt": "失敗しました: {excerpt}",
47
+ "failure": "失敗しました",
48
+ "promptResolved": "対応済みです(他の端末で応答されました)"
38
49
  },
39
50
  "escalation": {
40
51
  "heading": "再通知",
@@ -37,6 +37,10 @@ exports.ACTIVITIES = [
37
37
  // rather than inserted so the existing ArrowUp/ArrowDown order — which users
38
38
  // and tests both index by position — is unchanged.
39
39
  { id: 'verification', labelKey: 'activityBar.verification', icon: lucide_react_1.ShieldCheck },
40
+ // Issue #1968: the masked `.env` editor. Appended for the same reason
41
+ // `verification` was — the ArrowUp/ArrowDown order is indexed by position by
42
+ // both users and tests, so an insert would silently renumber every tab.
43
+ { id: 'env', labelKey: 'activityBar.env', icon: lucide_react_1.KeyRound },
40
44
  ];
41
45
  /**
42
46
  * Set of valid ActivityId values for runtime validation.
@@ -20,7 +20,7 @@
20
20
  * All values are preserved from the original literals (no behavior change).
21
21
  */
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.CLAUDE_RESTART_DELAY_MS = exports.CLAUDE_ENV_SANITIZE_WAIT_MS = exports.VIBE_LOCAL_DOUBLE_ENTER_WAIT_MS = exports.OPENCODE_EXIT_WAIT_MS = exports.CODEX_DIALOG_SETTLE_MS = exports.TUI_EXIT_WAIT_MS = exports.TUI_INTERRUPT_SETTLE_MS = exports.TUI_MESSAGE_PROCESSED_WAIT_MS = exports.TUI_TEXT_INPUT_WAIT_MS = exports.TUI_SESSION_CREATE_WAIT_MS = void 0;
23
+ exports.CLAUDE_RESTART_DELAY_MS = exports.CLAUDE_ENV_SANITIZE_WAIT_MS = exports.VIBE_LOCAL_DOUBLE_ENTER_WAIT_MS = exports.COPILOT_EXIT_WAIT_MS = exports.OPENCODE_INTERRUPT_SECOND_ESCAPE_DELAY_MS = exports.OPENCODE_EXIT_WAIT_MS = exports.CODEX_DIALOG_SETTLE_MS = exports.TUI_EXIT_WAIT_MS = exports.TUI_INTERRUPT_SETTLE_MS = exports.TUI_MESSAGE_PROCESSED_WAIT_MS = exports.TUI_TEXT_INPUT_WAIT_MS = exports.TUI_SESSION_CREATE_WAIT_MS = void 0;
24
24
  /**
25
25
  * Wait (ms) after `createSession()` before sending the first keys, giving tmux
26
26
  * time to spin up the session.
@@ -48,8 +48,9 @@ exports.TUI_INTERRUPT_SETTLE_MS = 300;
48
48
  /**
49
49
  * Wait (ms) after an exit/quit command (or Ctrl+D) for the CLI to shut down
50
50
  * gracefully before the tmux session is killed.
51
- * Sites: codex / gemini / vibe-local / copilot killSession(),
51
+ * Sites: codex / gemini / vibe-local killSession(),
52
52
  * session-key-sender stopSession().
53
+ * (copilot moved to {@link COPILOT_EXIT_WAIT_MS} in Issue #1905.)
53
54
  */
54
55
  exports.TUI_EXIT_WAIT_MS = 500;
55
56
  /**
@@ -62,8 +63,64 @@ exports.CODEX_DIALOG_SETTLE_MS = 500;
62
63
  * Wait (ms) for OpenCode to process its `/exit` TUI command. Longer than the
63
64
  * generic exit wait because OpenCode's TUI teardown is slower.
64
65
  * Site: opencode killSession().
66
+ *
67
+ * Issue #1905 measured the teardown on opencode 1.18.21 (private tmux socket,
68
+ * 200x50): once `/exit` is submitted as body-then-Enter the TUI is gone in
69
+ * 0.445 / 0.456 / 0.458 s (n=3), so this window is not the binding constraint.
70
+ * It was left at 2000 rather than tightened because the measurement is for an
71
+ * unloaded machine.
65
72
  */
66
73
  exports.OPENCODE_EXIT_WAIT_MS = 2000;
74
+ /**
75
+ * Wait (ms) between the two Escape presses that abort an opencode turn.
76
+ *
77
+ * opencode 1.18 does not interrupt on a single Escape. The first press re-labels
78
+ * the footer `esc interrupt` -> `esc again to interrupt` and abandons nothing;
79
+ * only a SECOND Escape inside that label's lifetime aborts the turn.
80
+ *
81
+ * Issue #1894 measured the label on opencode 1.18.21 (private tmux socket,
82
+ * 80x200): sampling the footer every ~360 ms after one Escape, `esc again to
83
+ * interrupt` is up from 0.31 s through 4.71 s and the row has reverted to `esc
84
+ * interrupt` by 5.07 s. So the deadline is five seconds, and a single Escape
85
+ * really does nothing -- the generation continued to a natural
86
+ * `Build ... 11.3s` completion in 3 runs out of 3.
87
+ *
88
+ * 300 ms is the design policy's number
89
+ * (`docs/design/multi-agent-state-architecture.md` §6.3) and it is kept, because
90
+ * both directions of error are bounded by real measurements rather than by
91
+ * taste:
92
+ *
93
+ * - too LATE is the dangerous side (the turn is not aborted and the pane just
94
+ * collects Escapes). Driving the real `OpenCodeTool.interrupt()` against a
95
+ * live 1.18.21 session, the whole call -- `send-keys`, this wait, `send-keys`
96
+ * -- took 317 ms end to end, i.e. the two tmux executions cost ~17 ms and the
97
+ * press lands at 6% of the deadline. Even the crude shell harness used for
98
+ * the first probe, which pays a python interpreter per step, landed its
99
+ * second press at 594 ms: 8x inside the window.
100
+ * - too EARLY would risk the second press being swallowed before opencode has
101
+ * armed the label. The label was already up at the first sample after the
102
+ * first press (0.31 s), and both the 317 ms and the 594 ms double-press
103
+ * aborted the turn (`▣ Build · GPT-5.6 Luna · interrupted` mid-sentence), so
104
+ * the arming cost is well under one wait.
105
+ *
106
+ * Site: opencode interrupt().
107
+ */
108
+ exports.OPENCODE_INTERRUPT_SECOND_ESCAPE_DELAY_MS = 300;
109
+ /**
110
+ * Wait (ms) for Copilot to process its `/exit` TUI command before the tmux
111
+ * session is killed. Copilot-specific because {@link TUI_EXIT_WAIT_MS} (500) is
112
+ * shorter than the shutdown actually takes.
113
+ * Site: copilot killSession().
114
+ *
115
+ * Issue #1905 measured GitHub Copilot CLI 1.0.80 in a private tmux socket
116
+ * (200x50, unloaded). Time from the submitting keystroke to the pane's process
117
+ * no longer being `copilot`, across every exit spelling copilot accepts:
118
+ * 1.006 / 1.109 / 1.115 / 1.118 / 1.204 / 1.208 / 1.288 / 1.330 / 1.795 /
119
+ * 2.165 / 2.193 s. Every sample is past 500 ms, i.e. the generic constant
120
+ * guaranteed the tmux kill landed mid-shutdown; 3000 covers the slowest sample
121
+ * with room for a loaded machine.
122
+ */
123
+ exports.COPILOT_EXIT_WAIT_MS = 3000;
67
124
  /**
68
125
  * Wait (ms) between the two Enter key presses in vibe-local's IME submit mode
69
126
  * (first Enter inserts a newline, second Enter submits).
@@ -9,7 +9,7 @@
9
9
  * - src/lib/cli-tools/copilot.ts
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.MAX_MODEL_NAME_LENGTH = exports.MODEL_NAME_PATTERN = exports.COPILOT_MODEL_SWITCH_TIMEOUT_MS = exports.COPILOT_TRUNCATION_MARKER = exports.COPILOT_MAX_MESSAGE_LENGTH = exports.COPILOT_TEXT_INPUT_DELAY_MS = exports.COPILOT_SEND_ENTER_DELAY_MS = void 0;
12
+ exports.COPILOT_INSTALL_HINT = exports.MAX_MODEL_NAME_LENGTH = exports.MODEL_NAME_PATTERN = exports.COPILOT_MODEL_SWITCH_TIMEOUT_MS = exports.COPILOT_TRUNCATION_MARKER = exports.COPILOT_MAX_MESSAGE_LENGTH = exports.COPILOT_TEXT_INPUT_DELAY_MS = exports.COPILOT_SEND_ENTER_DELAY_MS = void 0;
13
13
  /**
14
14
  * Delay (ms) after sending text before pressing Enter.
15
15
  * Copilot CLI auto-enters multi-line mode when text exceeds pane width.
@@ -53,3 +53,13 @@ exports.MODEL_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9\-._/:]*$/;
53
53
  * Issue #588: Shared validation constant.
54
54
  */
55
55
  exports.MAX_MODEL_NAME_LENGTH = 128;
56
+ /**
57
+ * How to install GitHub Copilot CLI, as shown when a session refuses to start.
58
+ * Issue #1907.
59
+ *
60
+ * The message this replaced was `gh extension install github/gh-copilot`, which
61
+ * installs a different, retired product (the `suggest` / `explain` extension).
62
+ * Copilot CLI is a standalone binary now, and `gh copilot` is a preview command
63
+ * built into `gh` that downloads it rather than a way of installing it.
64
+ */
65
+ exports.COPILOT_INSTALL_HINT = 'Install with: brew install copilot-cli (macOS) or npm i -g @github/copilot';