commandmate 0.49.3 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (877) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +454 -408
  3. package/.next/app-path-routes-manifest.json +19 -13
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/react-loadable-manifest.json +1 -1
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +32 -0
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/capabilities/route.js +1 -1
  19. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/daily-summary/route.js +1 -1
  21. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  22. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  24. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  25. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/hooks/agent-event/route.js +1 -103
  32. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  33. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  35. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  36. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  38. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  39. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/push/escalation/route.js +1 -1
  43. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  44. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  46. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/push/vapid/route.js +1 -1
  48. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  49. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  51. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  52. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -1
  54. package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -1
  55. package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/relays/[relayId]/route.js +1 -1
  57. package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/relays/route.js +1 -1
  59. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  60. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/remote/pair/route.js +2 -2
  62. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/[id]/role-defaults/route.js +1 -0
  64. package/.next/server/app/api/repositories/[id]/role-defaults/route.js.nft.json +1 -0
  65. package/.next/server/app/api/repositories/[id]/role-defaults/route_client-reference-manifest.js +1 -0
  66. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  68. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  69. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/clone/route.js +1 -1
  71. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  72. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/restore/route.js +1 -1
  75. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/route.js +1 -1
  78. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  79. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/scan/route.js +1 -1
  81. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/sync/route.js +1 -1
  84. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  85. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  87. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/roles/[id]/route.js +1 -0
  89. package/.next/server/app/api/roles/[id]/route.js.nft.json +1 -0
  90. package/.next/server/app/api/roles/[id]/route_client-reference-manifest.js +1 -0
  91. package/.next/server/app/api/roles/route.js +1 -0
  92. package/.next/server/app/api/roles/route.js.nft.json +1 -0
  93. package/.next/server/app/api/roles/route_client-reference-manifest.js +1 -0
  94. package/.next/server/app/api/settings/agent-role-defaults/route.js +1 -0
  95. package/.next/server/app/api/settings/agent-role-defaults/route.js.nft.json +1 -0
  96. package/.next/server/app/api/settings/agent-role-defaults/route_client-reference-manifest.js +1 -0
  97. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  98. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  99. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/slash-commands/route.js +1 -1
  108. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  111. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  115. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/verification/runs/route.js +1 -1
  117. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  120. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  123. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  126. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
  132. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  133. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  136. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  139. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  145. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  146. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  198. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/instances/roles/route.js +1 -0
  200. package/.next/server/app/api/worktrees/[id]/instances/roles/route.js.nft.json +1 -0
  201. package/.next/server/app/api/worktrees/[id]/instances/roles/route_client-reference-manifest.js +1 -0
  202. package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js +1 -0
  203. package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js.nft.json +1 -0
  204. package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route_client-reference-manifest.js +1 -0
  205. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -2
  209. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  210. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  238. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  243. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  244. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  246. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  247. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  249. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  250. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -104
  256. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  275. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  280. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  283. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
  285. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  286. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -103
  288. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  289. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  294. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  296. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  304. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  305. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  307. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  308. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  311. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  314. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/route.js +1 -1
  316. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  317. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  319. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  320. package/.next/server/app/more/page.js +1 -1
  321. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  322. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  323. package/.next/server/app/page_client-reference-manifest.js +1 -1
  324. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  325. package/.next/server/app/repositories/page.js +2 -2
  326. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  327. package/.next/server/app/review/page.js +1 -1
  328. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  329. package/.next/server/app/sessions/page.js +1 -1
  330. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  331. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  332. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  333. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  334. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  335. package/.next/server/app/worktrees/[id]/page.js +11 -11
  336. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  337. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  338. package/.next/server/app-paths-manifest.json +19 -13
  339. package/.next/server/chunks/1184.js +5 -0
  340. package/.next/server/chunks/1501.js +5 -5
  341. package/.next/server/chunks/1656.js +2 -2
  342. package/.next/server/chunks/1957.js +2 -2
  343. package/.next/server/chunks/1990.js +103 -0
  344. package/.next/server/chunks/2119.js +1 -1
  345. package/.next/server/chunks/2404.js +1 -1
  346. package/.next/server/chunks/2445.js +1 -1
  347. package/.next/server/chunks/2819.js +1 -0
  348. package/.next/server/chunks/2897.js +1 -1
  349. package/.next/server/chunks/3042.js +2 -0
  350. package/.next/server/chunks/3241.js +1 -1
  351. package/.next/server/chunks/3294.js +3 -0
  352. package/.next/server/chunks/3417.js +1 -1
  353. package/.next/server/chunks/3480.js +1 -1
  354. package/.next/server/chunks/3505.js +2 -6
  355. package/.next/server/chunks/3543.js +1 -1
  356. package/.next/server/chunks/3801.js +2 -2
  357. package/.next/server/chunks/3945.js +1 -1
  358. package/.next/server/chunks/4207.js +1 -1
  359. package/.next/server/chunks/454.js +1 -0
  360. package/.next/server/chunks/4645.js +1 -0
  361. package/.next/server/chunks/4911.js +1 -1
  362. package/.next/server/chunks/5350.js +6 -2
  363. package/.next/server/chunks/5354.js +1 -1
  364. package/.next/server/chunks/5571.js +1 -1
  365. package/.next/server/chunks/6009.js +12 -0
  366. package/.next/server/chunks/6130.js +1 -1
  367. package/.next/server/chunks/6285.js +1 -1
  368. package/.next/server/chunks/6401.js +1 -1
  369. package/.next/server/chunks/6486.js +2 -2
  370. package/.next/server/chunks/6569.js +1 -0
  371. package/.next/server/chunks/6781.js +1 -1
  372. package/.next/server/chunks/6793.js +4 -4
  373. package/.next/server/chunks/696.js +3 -0
  374. package/.next/server/chunks/7023.js +3 -3
  375. package/.next/server/chunks/{9702.js → 7083.js} +1 -1
  376. package/.next/server/chunks/741.js +1 -0
  377. package/.next/server/chunks/7662.js +1 -0
  378. package/.next/server/chunks/7905.js +1 -1
  379. package/.next/server/chunks/8143.js +33 -0
  380. package/.next/server/chunks/8581.js +6 -6
  381. package/.next/server/chunks/8728.js +2 -2
  382. package/.next/server/chunks/8782.js +1 -1
  383. package/.next/server/chunks/8807.js +97 -10
  384. package/.next/server/chunks/8918.js +3 -105
  385. package/.next/server/chunks/8955.js +1 -0
  386. package/.next/server/chunks/923.js +1 -0
  387. package/.next/server/chunks/9390.js +2 -2
  388. package/.next/server/chunks/9627.js +5 -5
  389. package/.next/server/chunks/973.js +1 -0
  390. package/.next/server/chunks/9731.js +3 -3
  391. package/.next/server/middleware-build-manifest.js +1 -1
  392. package/.next/server/middleware-manifest.json +5 -5
  393. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  394. package/.next/server/pages/500.html +1 -1
  395. package/.next/server/server-reference-manifest.json +1 -1
  396. package/.next/static/chunks/2314-2c9d587a27e8f731.js +1 -0
  397. package/.next/static/chunks/2407-ee881c99e218975b.js +1 -0
  398. package/.next/static/chunks/3931-24d7e245a93feb25.js +1 -0
  399. package/.next/static/chunks/4548-9afa02fd18afa6c7.js +1 -0
  400. package/.next/static/chunks/{5794-7975b8e51e731b19.js → 5794-38b3b504b3d97e04.js} +1 -1
  401. package/.next/static/chunks/{6966-d8dc6032410ffaba.js → 6966-dbfa4a43397f8c6d.js} +1 -1
  402. package/.next/static/chunks/7090-28e83f5a0efdb3b4.js +1 -0
  403. package/.next/static/chunks/7229.016d007c467a3600.js +1 -0
  404. package/.next/static/chunks/{8407-35bbfc84793d7004.js → 8407-dd6a8062fc449899.js} +1 -1
  405. package/.next/static/chunks/app/api/agents/update/route-476063c3571b81dd.js +1 -0
  406. package/.next/static/chunks/app/api/agents/versions/route-476063c3571b81dd.js +1 -0
  407. package/.next/static/chunks/app/api/app/release-notes/route-476063c3571b81dd.js +1 -0
  408. package/.next/static/chunks/app/api/app/update/route-476063c3571b81dd.js +1 -0
  409. package/.next/static/chunks/app/api/app/update-check/route-476063c3571b81dd.js +1 -0
  410. package/.next/static/chunks/app/api/auth/login/route-476063c3571b81dd.js +1 -0
  411. package/.next/static/chunks/app/api/auth/logout/route-476063c3571b81dd.js +1 -0
  412. package/.next/static/chunks/app/api/auth/status/route-476063c3571b81dd.js +1 -0
  413. package/.next/static/chunks/app/api/capabilities/route-476063c3571b81dd.js +1 -0
  414. package/.next/static/chunks/app/api/daily-summary/route-476063c3571b81dd.js +1 -0
  415. package/.next/static/chunks/app/api/daily-summary/status/route-476063c3571b81dd.js +1 -0
  416. package/.next/static/chunks/app/api/external-apps/[id]/health/route-476063c3571b81dd.js +1 -0
  417. package/.next/static/chunks/app/api/external-apps/[id]/route-476063c3571b81dd.js +1 -0
  418. package/.next/static/chunks/app/api/external-apps/route-476063c3571b81dd.js +1 -0
  419. package/.next/static/chunks/app/api/fs/browse/route-476063c3571b81dd.js +1 -0
  420. package/.next/static/chunks/app/api/fs/recent-paths/route-476063c3571b81dd.js +1 -0
  421. package/.next/static/chunks/app/api/hooks/agent-event/route-476063c3571b81dd.js +1 -0
  422. package/.next/static/chunks/app/api/hooks/claude-done/route-476063c3571b81dd.js +1 -0
  423. package/.next/static/chunks/app/api/hooks/permission-request/route-476063c3571b81dd.js +1 -0
  424. package/.next/static/chunks/app/api/metrics/vibe/route-476063c3571b81dd.js +1 -0
  425. package/.next/static/chunks/app/api/ollama/models/route-476063c3571b81dd.js +1 -0
  426. package/.next/static/chunks/app/api/push/escalation/route-476063c3571b81dd.js +1 -0
  427. package/.next/static/chunks/app/api/push/subscriptions/route-476063c3571b81dd.js +1 -0
  428. package/.next/static/chunks/app/api/push/vapid/route-476063c3571b81dd.js +1 -0
  429. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-476063c3571b81dd.js +1 -0
  430. package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-476063c3571b81dd.js +1 -0
  431. package/.next/static/chunks/app/api/relays/[relayId]/route-476063c3571b81dd.js +1 -0
  432. package/.next/static/chunks/app/api/relays/route-476063c3571b81dd.js +1 -0
  433. package/.next/static/chunks/app/api/remote/pair/route-476063c3571b81dd.js +1 -0
  434. package/.next/static/chunks/app/api/repositories/[id]/role-defaults/route-476063c3571b81dd.js +1 -0
  435. package/.next/static/chunks/app/api/repositories/[id]/route-476063c3571b81dd.js +1 -0
  436. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-476063c3571b81dd.js +1 -0
  437. package/.next/static/chunks/app/api/repositories/clone/route-476063c3571b81dd.js +1 -0
  438. package/.next/static/chunks/app/api/repositories/excluded/route-476063c3571b81dd.js +1 -0
  439. package/.next/static/chunks/app/api/repositories/restore/route-476063c3571b81dd.js +1 -0
  440. package/.next/static/chunks/app/api/repositories/route-476063c3571b81dd.js +1 -0
  441. package/.next/static/chunks/app/api/repositories/scan/route-476063c3571b81dd.js +1 -0
  442. package/.next/static/chunks/app/api/repositories/sync/route-476063c3571b81dd.js +1 -0
  443. package/.next/static/chunks/app/api/repositories/validate-path/route-476063c3571b81dd.js +1 -0
  444. package/.next/static/chunks/app/api/roles/[id]/route-476063c3571b81dd.js +1 -0
  445. package/.next/static/chunks/app/api/roles/route-476063c3571b81dd.js +1 -0
  446. package/.next/static/chunks/app/api/settings/agent-role-defaults/route-476063c3571b81dd.js +1 -0
  447. package/.next/static/chunks/app/api/settings/default-agents/route-476063c3571b81dd.js +1 -0
  448. package/.next/static/chunks/app/api/settings/default-surface-mode/route-476063c3571b81dd.js +1 -0
  449. package/.next/static/chunks/app/api/sidebar/group-order/route-476063c3571b81dd.js +1 -0
  450. package/.next/static/chunks/app/api/skills/[id]/route-476063c3571b81dd.js +1 -0
  451. package/.next/static/chunks/app/api/skills/installations/route-476063c3571b81dd.js +1 -0
  452. package/.next/static/chunks/app/api/skills/operations/route-476063c3571b81dd.js +1 -0
  453. package/.next/static/chunks/app/api/skills/reindex/route-476063c3571b81dd.js +1 -0
  454. package/.next/static/chunks/app/api/skills/route-476063c3571b81dd.js +1 -0
  455. package/.next/static/chunks/app/api/slash-commands/route-476063c3571b81dd.js +1 -0
  456. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-476063c3571b81dd.js +1 -0
  457. package/.next/static/chunks/app/api/tasks/[taskId]/route-476063c3571b81dd.js +1 -0
  458. package/.next/static/chunks/app/api/templates/[id]/route-476063c3571b81dd.js +1 -0
  459. package/.next/static/chunks/app/api/templates/route-476063c3571b81dd.js +1 -0
  460. package/.next/static/chunks/app/api/verification/runs/[runId]/route-476063c3571b81dd.js +1 -0
  461. package/.next/static/chunks/app/api/verification/runs/route-476063c3571b81dd.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-476063c3571b81dd.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-476063c3571b81dd.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-476063c3571b81dd.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-476063c3571b81dd.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-476063c3571b81dd.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-476063c3571b81dd.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-476063c3571b81dd.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-476063c3571b81dd.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/env/route-476063c3571b81dd.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-476063c3571b81dd.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-476063c3571b81dd.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-476063c3571b81dd.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-476063c3571b81dd.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-476063c3571b81dd.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-476063c3571b81dd.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-476063c3571b81dd.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-476063c3571b81dd.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-476063c3571b81dd.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-476063c3571b81dd.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-476063c3571b81dd.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-476063c3571b81dd.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-476063c3571b81dd.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-476063c3571b81dd.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-476063c3571b81dd.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-476063c3571b81dd.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-476063c3571b81dd.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-476063c3571b81dd.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-476063c3571b81dd.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-476063c3571b81dd.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-476063c3571b81dd.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-476063c3571b81dd.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-476063c3571b81dd.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-476063c3571b81dd.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-476063c3571b81dd.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-476063c3571b81dd.js +1 -0
  497. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-476063c3571b81dd.js +1 -0
  498. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-476063c3571b81dd.js +1 -0
  499. package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/route-476063c3571b81dd.js +1 -0
  500. package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/settle/route-476063c3571b81dd.js +1 -0
  501. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-476063c3571b81dd.js +1 -0
  502. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-476063c3571b81dd.js +1 -0
  503. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-476063c3571b81dd.js +1 -0
  504. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-476063c3571b81dd.js +1 -0
  505. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-476063c3571b81dd.js +1 -0
  506. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-476063c3571b81dd.js +1 -0
  507. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-476063c3571b81dd.js +1 -0
  508. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-476063c3571b81dd.js +1 -0
  509. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-476063c3571b81dd.js +1 -0
  510. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-476063c3571b81dd.js +1 -0
  511. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-476063c3571b81dd.js +1 -0
  512. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-476063c3571b81dd.js +1 -0
  513. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-476063c3571b81dd.js +1 -0
  514. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-476063c3571b81dd.js +1 -0
  515. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-476063c3571b81dd.js +1 -0
  516. package/.next/static/chunks/app/api/worktrees/[id]/route-476063c3571b81dd.js +1 -0
  517. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-476063c3571b81dd.js +1 -0
  518. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-476063c3571b81dd.js +1 -0
  519. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-476063c3571b81dd.js +1 -0
  520. package/.next/static/chunks/app/api/worktrees/[id]/search/route-476063c3571b81dd.js +1 -0
  521. package/.next/static/chunks/app/api/worktrees/[id]/send/route-476063c3571b81dd.js +1 -0
  522. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-476063c3571b81dd.js +1 -0
  523. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-476063c3571b81dd.js +1 -0
  524. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-476063c3571b81dd.js +1 -0
  525. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-476063c3571b81dd.js +1 -0
  526. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-476063c3571b81dd.js +1 -0
  527. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-476063c3571b81dd.js +1 -0
  528. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-476063c3571b81dd.js +1 -0
  529. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-476063c3571b81dd.js +1 -0
  530. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-476063c3571b81dd.js +1 -0
  531. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-476063c3571b81dd.js +1 -0
  532. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-476063c3571b81dd.js +1 -0
  533. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-476063c3571b81dd.js +1 -0
  534. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-476063c3571b81dd.js +1 -0
  535. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-476063c3571b81dd.js +1 -0
  536. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-476063c3571b81dd.js +1 -0
  537. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-476063c3571b81dd.js +1 -0
  538. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-476063c3571b81dd.js +1 -0
  539. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-476063c3571b81dd.js +1 -0
  540. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-476063c3571b81dd.js +1 -0
  541. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-476063c3571b81dd.js +1 -0
  542. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-476063c3571b81dd.js +1 -0
  543. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-476063c3571b81dd.js +1 -0
  544. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-476063c3571b81dd.js +1 -0
  545. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-476063c3571b81dd.js +1 -0
  546. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-476063c3571b81dd.js +1 -0
  547. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-476063c3571b81dd.js +1 -0
  548. package/.next/static/chunks/app/api/worktrees/route-476063c3571b81dd.js +1 -0
  549. package/.next/static/chunks/app/layout-7bf800fcc5e025b1.js +1 -0
  550. package/.next/static/chunks/app/manifest.webmanifest/route-476063c3571b81dd.js +1 -0
  551. package/.next/static/chunks/app/more/{page-ff5af5ca48774c89.js → page-e8f5780f6e4fb657.js} +1 -1
  552. package/.next/static/chunks/app/{page-b4863bfe0452e09d.js → page-869f353a4ac4e15b.js} +1 -1
  553. package/.next/static/chunks/app/proxy/[...path]/route-476063c3571b81dd.js +1 -0
  554. package/.next/static/chunks/app/repositories/page-bedb505687010f18.js +1 -0
  555. package/.next/static/chunks/app/review/page-87c4a9b0de50fa80.js +1 -0
  556. package/.next/static/chunks/app/sessions/{page-c6eb7c02db2f4c80.js → page-82ca46793789fce4.js} +1 -1
  557. package/.next/static/chunks/app/worktrees/[id]/layout-476063c3571b81dd.js +1 -0
  558. package/.next/static/chunks/app/worktrees/[id]/page-570eb79fbbd1a934.js +1 -0
  559. package/.next/static/chunks/{webpack-838df0273b03af19.js → webpack-16b1a3143fa42ca0.js} +1 -1
  560. package/.next/static/css/d4f2c9522cf1b449.css +1 -0
  561. package/.next/static/z4d8-5MaLkoD-4EhueZwk/_buildManifest.js +1 -0
  562. package/.next/trace +14 -13
  563. package/.next/types/app/api/repositories/[id]/role-defaults/route.ts +347 -0
  564. package/.next/types/app/api/roles/[id]/route.ts +347 -0
  565. package/.next/types/app/api/roles/route.ts +347 -0
  566. package/.next/types/app/api/settings/agent-role-defaults/route.ts +347 -0
  567. package/.next/types/app/api/worktrees/[id]/instances/roles/route.ts +347 -0
  568. package/.next/types/app/api/worktrees/[id]/instances/roles/settle/route.ts +347 -0
  569. package/.next/types/routes.d.ts +7 -1
  570. package/.next/types/validator.ts +54 -0
  571. package/dist/cli/commands/instances.d.ts +1 -0
  572. package/dist/cli/commands/instances.d.ts.map +1 -1
  573. package/dist/cli/commands/instances.js +290 -33
  574. package/dist/cli/commands/message-dispatch.d.ts +25 -3
  575. package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
  576. package/dist/cli/commands/message-dispatch.js +26 -6
  577. package/dist/cli/commands/relays.d.ts +5 -0
  578. package/dist/cli/commands/relays.d.ts.map +1 -1
  579. package/dist/cli/commands/relays.js +37 -1
  580. package/dist/cli/commands/roles.d.ts +11 -0
  581. package/dist/cli/commands/roles.d.ts.map +1 -0
  582. package/dist/cli/commands/roles.js +392 -0
  583. package/dist/cli/commands/send.d.ts.map +1 -1
  584. package/dist/cli/commands/send.js +526 -38
  585. package/dist/cli/docs/agent-operations.d.ts +1 -1
  586. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  587. package/dist/cli/docs/agent-operations.js +91 -3
  588. package/dist/cli/index.d.ts +4 -0
  589. package/dist/cli/index.d.ts.map +1 -1
  590. package/dist/cli/index.js +6 -0
  591. package/dist/cli/types/api-responses.d.ts +54 -0
  592. package/dist/cli/types/api-responses.d.ts.map +1 -1
  593. package/dist/cli/types/index.d.ts +38 -0
  594. package/dist/cli/types/index.d.ts.map +1 -1
  595. package/dist/cli/types/index.js +15 -1
  596. package/dist/cli/utils/agent-instances.d.ts +29 -1
  597. package/dist/cli/utils/agent-instances.d.ts.map +1 -1
  598. package/dist/cli/utils/agent-instances.js +67 -7
  599. package/dist/cli/utils/agent-roles.d.ts +75 -0
  600. package/dist/cli/utils/agent-roles.d.ts.map +1 -0
  601. package/dist/cli/utils/agent-roles.js +238 -0
  602. package/dist/cli/utils/api-client-errors.d.ts +23 -1
  603. package/dist/cli/utils/api-client-errors.d.ts.map +1 -1
  604. package/dist/cli/utils/api-client-errors.js +14 -2
  605. package/dist/cli/utils/api-client.d.ts +8 -0
  606. package/dist/cli/utils/api-client.d.ts.map +1 -1
  607. package/dist/cli/utils/api-client.js +13 -1
  608. package/dist/cli/utils/role-failure.d.ts +31 -0
  609. package/dist/cli/utils/role-failure.d.ts.map +1 -0
  610. package/dist/cli/utils/role-failure.js +90 -0
  611. package/dist/cli/utils/role-input.d.ts +16 -0
  612. package/dist/cli/utils/role-input.d.ts.map +1 -0
  613. package/dist/cli/utils/role-input.js +78 -0
  614. package/dist/cli/utils/security-logger.d.ts +17 -0
  615. package/dist/cli/utils/security-logger.d.ts.map +1 -1
  616. package/dist/cli/utils/security-logger.js +44 -5
  617. package/dist/lib/detection/tools/verified-against.d.ts +16 -0
  618. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  619. package/dist/lib/detection/tools/verified-against.js +16 -0
  620. package/dist/lib/session/send-attempt-types.d.ts +4 -0
  621. package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
  622. package/dist/lib/verification/verify-config.d.ts +22 -0
  623. package/dist/lib/verification/verify-config.d.ts.map +1 -1
  624. package/dist/lib/verification/verify-config.js +32 -2
  625. package/dist/server/locales/en/worktree.json +25 -6
  626. package/dist/server/locales/ja/worktree.json +25 -6
  627. package/dist/server/src/config/safe-directory.js +30 -0
  628. package/dist/server/src/lib/agent-roles/adapters.js +174 -0
  629. package/dist/server/src/lib/agent-roles/artifacts.js +638 -0
  630. package/dist/server/src/lib/agent-roles/composition.js +222 -0
  631. package/dist/server/src/lib/agent-roles/fingerprint.js +21 -0
  632. package/dist/server/src/lib/agent-roles/jsonc.js +85 -0
  633. package/dist/server/src/lib/agent-roles/launch-errors.js +58 -0
  634. package/dist/server/src/lib/agent-roles/pane-env.js +63 -0
  635. package/dist/server/src/lib/agent-roles/resolve.js +375 -0
  636. package/dist/server/src/lib/agent-roles/toml-basic.js +140 -0
  637. package/dist/server/src/lib/agent-roles/unicode.js +16 -0
  638. package/dist/server/src/lib/agent-roles/validation.js +61 -0
  639. package/dist/server/src/lib/cli-tools/antigravity.js +39 -6
  640. package/dist/server/src/lib/cli-tools/base.js +63 -5
  641. package/dist/server/src/lib/cli-tools/claude-auto-default-nudge.js +141 -0
  642. package/dist/server/src/lib/cli-tools/claude.js +7 -1
  643. package/dist/server/src/lib/cli-tools/codex.js +134 -21
  644. package/dist/server/src/lib/cli-tools/command-code.js +24 -1
  645. package/dist/server/src/lib/cli-tools/copilot.js +36 -7
  646. package/dist/server/src/lib/cli-tools/gemini.js +37 -3
  647. package/dist/server/src/lib/cli-tools/launch-answer-skips.js +76 -0
  648. package/dist/server/src/lib/cli-tools/opencode-v2.js +10 -0
  649. package/dist/server/src/lib/cli-tools/opencode.js +58 -7
  650. package/dist/server/src/lib/cli-tools/submit-composer-read.js +24 -4
  651. package/dist/server/src/lib/cli-tools/vibe-local.js +25 -1
  652. package/dist/server/src/lib/db/agent-instances-db.js +53 -0
  653. package/dist/server/src/lib/db/agent-roles-db.js +409 -0
  654. package/dist/server/src/lib/db/agent-session-cost-sampler.js +3 -2
  655. package/dist/server/src/lib/db/db-instance.js +7 -37
  656. package/dist/server/src/lib/db/migrations/index.js +4 -0
  657. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  658. package/dist/server/src/lib/db/migrations/v64-agent-roles.js +123 -0
  659. package/dist/server/src/lib/db/migrations/v65-agent-instance-creation-keys.js +42 -0
  660. package/dist/server/src/lib/db/relay-db.js +35 -0
  661. package/dist/server/src/lib/detection/cli-patterns.js +13 -3
  662. package/dist/server/src/lib/detection/model-info-extractor.js +1 -1
  663. package/dist/server/src/lib/detection/tools/claude/patterns.js +76 -0
  664. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +5 -0
  665. package/dist/server/src/lib/detection/tools/codex/detect.js +5 -1
  666. package/dist/server/src/lib/detection/tools/codex/patterns.js +52 -2
  667. package/dist/server/src/lib/detection/tools/codex/prompt.js +23 -3
  668. package/dist/server/src/lib/detection/tools/opencode/detect.js +30 -15
  669. package/dist/server/src/lib/detection/tools/opencode/patterns.js +268 -7
  670. package/dist/server/src/lib/detection/tools/opencode/readiness.js +16 -7
  671. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +51 -15
  672. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +195 -11
  673. package/dist/server/src/lib/detection/tools/run-detection.js +5 -2
  674. package/dist/server/src/lib/detection/tools/verified-against.js +16 -0
  675. package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +22 -0
  676. package/dist/server/src/lib/git/git-common-dir.js +192 -0
  677. package/dist/server/src/lib/hooks/hook-settings-generator.js +8 -2
  678. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +31 -1
  679. package/dist/server/src/lib/hooks/sources/launch-command.js +31 -8
  680. package/dist/server/src/lib/hooks/sources/opencode/client.js +20 -0
  681. package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +24 -0
  682. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +208 -35
  683. package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +7 -1
  684. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +117 -2
  685. package/dist/server/src/lib/job-executor.js +18 -1
  686. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +58 -4
  687. package/dist/server/src/lib/polling/response-checker.js +32 -7
  688. package/dist/server/src/lib/relay/relay-delivery-block.js +150 -0
  689. package/dist/server/src/lib/relay/relay-delivery.js +59 -2
  690. package/dist/server/src/lib/response-cleaner.js +13 -3
  691. package/dist/server/src/lib/response-extractor.js +38 -3
  692. package/dist/server/src/lib/session/agent-session-lifecycle.js +9 -1
  693. package/dist/server/src/lib/session/claude-executor.js +13 -1
  694. package/dist/server/src/lib/session/claude-session.js +109 -13
  695. package/dist/server/src/lib/session/instance-input-lock.js +93 -4
  696. package/dist/server/src/lib/session/role-launch.js +722 -0
  697. package/dist/server/src/lib/session/send-attempt-state.js +7 -0
  698. package/dist/server/src/lib/session/send-user-message.js +6 -0
  699. package/dist/server/src/lib/session/session-generation-archive.js +7 -8
  700. package/dist/server/src/lib/session/session-launch-flight.js +33 -1
  701. package/dist/server/src/lib/session/worktree-session-reconcile.js +5 -0
  702. package/dist/server/src/lib/test-run-detection.js +53 -0
  703. package/dist/server/src/lib/tmux/read-mode.js +4 -0
  704. package/dist/server/src/lib/tmux/session-hook-scripts.js +36 -4
  705. package/dist/server/src/lib/tui-accumulator.js +14 -5
  706. package/dist/server/src/lib/verification/env-clean-gate.js +117 -12
  707. package/dist/server/src/lib/verification/gate-runner.js +9 -8
  708. package/dist/server/src/lib/verification/verify-config.js +32 -2
  709. package/dist/server/src/types/agent-roles.js +56 -0
  710. package/dist/types/agent-roles.d.ts +351 -0
  711. package/dist/types/agent-roles.d.ts.map +1 -0
  712. package/dist/types/agent-roles.js +56 -0
  713. package/docs/en/user-guide/webapp-guide.md +16 -0
  714. package/package.json +2 -1
  715. package/release-notes/0.50.0.json +113 -0
  716. package/.next/server/chunks/1308.js +0 -1
  717. package/.next/server/chunks/4490.js +0 -1
  718. package/.next/server/chunks/4936.js +0 -1
  719. package/.next/server/chunks/610.js +0 -1
  720. package/.next/server/chunks/6119.js +0 -1
  721. package/.next/server/chunks/7491.js +0 -3
  722. package/.next/server/chunks/7926.js +0 -1
  723. package/.next/server/chunks/9360.js +0 -2
  724. package/.next/server/chunks/9584.js +0 -1
  725. package/.next/static/LNfVZiq6FZwKsV7L9Mi6M/_buildManifest.js +0 -1
  726. package/.next/static/chunks/2407-87ec01332344ec2b.js +0 -1
  727. package/.next/static/chunks/344-e1cefd00787060e4.js +0 -1
  728. package/.next/static/chunks/3931-3ef48b8d97357282.js +0 -1
  729. package/.next/static/chunks/7229.7f0f5a7032b612b4.js +0 -1
  730. package/.next/static/chunks/8165-263172c17ae8e8c3.js +0 -1
  731. package/.next/static/chunks/app/api/agents/update/route-96fc12d400b49b13.js +0 -1
  732. package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +0 -1
  733. package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +0 -1
  734. package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +0 -1
  735. package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +0 -1
  736. package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +0 -1
  737. package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +0 -1
  738. package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +0 -1
  739. package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +0 -1
  740. package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +0 -1
  741. package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +0 -1
  742. package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +0 -1
  743. package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +0 -1
  744. package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +0 -1
  745. package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +0 -1
  746. package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +0 -1
  747. package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +0 -1
  748. package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +0 -1
  749. package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +0 -1
  750. package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +0 -1
  751. package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +0 -1
  752. package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +0 -1
  753. package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +0 -1
  754. package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +0 -1
  755. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +0 -1
  756. package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +0 -1
  757. package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +0 -1
  758. package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +0 -1
  759. package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +0 -1
  760. package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +0 -1
  761. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +0 -1
  762. package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +0 -1
  763. package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +0 -1
  764. package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +0 -1
  765. package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +0 -1
  766. package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +0 -1
  767. package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +0 -1
  768. package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +0 -1
  769. package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +0 -1
  770. package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +0 -1
  771. package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +0 -1
  772. package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +0 -1
  773. package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +0 -1
  774. package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +0 -1
  775. package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +0 -1
  776. package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +0 -1
  777. package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +0 -1
  778. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +0 -1
  779. package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +0 -1
  780. package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +0 -1
  781. package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +0 -1
  782. package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +0 -1
  783. package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +0 -1
  784. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +0 -1
  785. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +0 -1
  786. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +0 -1
  787. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +0 -1
  788. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +0 -1
  789. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +0 -1
  790. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +0 -1
  791. package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +0 -1
  792. package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +0 -1
  793. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +0 -1
  794. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +0 -1
  795. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +0 -1
  796. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +0 -1
  797. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +0 -1
  798. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +0 -1
  799. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +0 -1
  800. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +0 -1
  801. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +0 -1
  802. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +0 -1
  803. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +0 -1
  804. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +0 -1
  805. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +0 -1
  806. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +0 -1
  807. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +0 -1
  808. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +0 -1
  809. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +0 -1
  810. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +0 -1
  811. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +0 -1
  812. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +0 -1
  813. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +0 -1
  814. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +0 -1
  815. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +0 -1
  816. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +0 -1
  817. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +0 -1
  818. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +0 -1
  819. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +0 -1
  820. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +0 -1
  821. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +0 -1
  822. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +0 -1
  823. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +0 -1
  824. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +0 -1
  825. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +0 -1
  826. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +0 -1
  827. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +0 -1
  828. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +0 -1
  829. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +0 -1
  830. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +0 -1
  831. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +0 -1
  832. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +0 -1
  833. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +0 -1
  834. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +0 -1
  835. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +0 -1
  836. package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +0 -1
  837. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +0 -1
  838. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +0 -1
  839. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +0 -1
  840. package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +0 -1
  841. package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +0 -1
  842. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +0 -1
  843. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +0 -1
  844. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +0 -1
  845. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +0 -1
  846. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +0 -1
  847. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +0 -1
  848. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +0 -1
  849. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +0 -1
  850. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +0 -1
  851. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +0 -1
  852. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +0 -1
  853. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +0 -1
  854. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +0 -1
  855. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +0 -1
  856. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +0 -1
  857. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +0 -1
  858. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +0 -1
  859. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +0 -1
  860. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +0 -1
  861. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +0 -1
  862. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +0 -1
  863. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +0 -1
  864. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +0 -1
  865. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +0 -1
  866. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +0 -1
  867. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +0 -1
  868. package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +0 -1
  869. package/.next/static/chunks/app/layout-b9d8aef70e4f17b2.js +0 -1
  870. package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +0 -1
  871. package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.js +0 -1
  872. package/.next/static/chunks/app/repositories/page-71f5a5ac29b0370d.js +0 -1
  873. package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +0 -1
  874. package/.next/static/chunks/app/worktrees/[id]/layout-96fc12d400b49b13.js +0 -1
  875. package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +0 -1
  876. package/.next/static/css/c1e307d05daf93b6.css +0 -1
  877. /package/.next/static/{LNfVZiq6FZwKsV7L9Mi6M → z4d8-5MaLkoD-4EhueZwk}/_ssgManifest.js +0 -0
@@ -0,0 +1,409 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INSTANCE_CREATION_KEY_TTL_MS = exports.AgentRoleInUseError = exports.AgentRoleNameChangedError = exports.AgentRoleVersionConflictError = exports.AgentRoleNameConflictError = exports.AgentRoleNotFoundError = exports.AgentRoleValidationError = void 0;
4
+ exports.listAgentRoles = listAgentRoles;
5
+ exports.getAgentRole = getAgentRole;
6
+ exports.createAgentRole = createAgentRole;
7
+ exports.getAgentRoleReferences = getAgentRoleReferences;
8
+ exports.updateAgentRole = updateAgentRole;
9
+ exports.deleteAgentRole = deleteAgentRole;
10
+ exports.getSystemRoleDefaults = getSystemRoleDefaults;
11
+ exports.setSystemRoleDefault = setSystemRoleDefault;
12
+ exports.getRepositoryRoleStates = getRepositoryRoleStates;
13
+ exports.setRepositoryRoleState = setRepositoryRoleState;
14
+ exports.getInstanceRoleState = getInstanceRoleState;
15
+ exports.setInstanceRoleState = setInstanceRoleState;
16
+ exports.hasAnyRoleSetting = hasAnyRoleSetting;
17
+ exports.getInstanceCreationKey = getInstanceCreationKey;
18
+ exports.recordInstanceCreationKey = recordInstanceCreationKey;
19
+ exports.settleInstanceCreationKey = settleInstanceCreationKey;
20
+ exports.recordRoleLaunch = recordRoleLaunch;
21
+ exports.getLatestRoleLaunchRecords = getLatestRoleLaunchRecords;
22
+ /**
23
+ * Role tables (Issue #4114, migration v64).
24
+ *
25
+ * Every write that could leave a reference half done runs in a transaction. The
26
+ * body is never logged and never placed in an error message.
27
+ *
28
+ * @module lib/db/agent-roles-db
29
+ */
30
+ const crypto_1 = require("crypto");
31
+ const fingerprint_1 = require("../../lib/agent-roles/fingerprint");
32
+ const validation_1 = require("../../lib/agent-roles/validation");
33
+ class AgentRoleValidationError extends Error {
34
+ constructor(message) {
35
+ super(message);
36
+ this.name = 'AgentRoleValidationError';
37
+ }
38
+ }
39
+ exports.AgentRoleValidationError = AgentRoleValidationError;
40
+ class AgentRoleNotFoundError extends Error {
41
+ roleId;
42
+ constructor(roleId) {
43
+ super(`Role not found: ${roleId}`);
44
+ this.roleId = roleId;
45
+ this.name = 'AgentRoleNotFoundError';
46
+ }
47
+ }
48
+ exports.AgentRoleNotFoundError = AgentRoleNotFoundError;
49
+ class AgentRoleNameConflictError extends Error {
50
+ constructor(name) {
51
+ super(`A role named "${name}" already exists`);
52
+ this.name = 'AgentRoleNameConflictError';
53
+ }
54
+ }
55
+ exports.AgentRoleNameConflictError = AgentRoleNameConflictError;
56
+ class AgentRoleVersionConflictError extends Error {
57
+ currentBodyVersion;
58
+ constructor(currentBodyVersion) {
59
+ super(`The role is at body version ${currentBodyVersion}`);
60
+ this.currentBodyVersion = currentBodyVersion;
61
+ this.name = 'AgentRoleVersionConflictError';
62
+ }
63
+ }
64
+ exports.AgentRoleVersionConflictError = AgentRoleVersionConflictError;
65
+ class AgentRoleNameChangedError extends Error {
66
+ currentName;
67
+ constructor(currentName) {
68
+ super('The role was renamed since it was read');
69
+ this.currentName = currentName;
70
+ this.name = 'AgentRoleNameChangedError';
71
+ }
72
+ }
73
+ exports.AgentRoleNameChangedError = AgentRoleNameChangedError;
74
+ class AgentRoleInUseError extends Error {
75
+ references;
76
+ constructor(references) {
77
+ super('The role is in use');
78
+ this.references = references;
79
+ this.name = 'AgentRoleInUseError';
80
+ }
81
+ }
82
+ exports.AgentRoleInUseError = AgentRoleInUseError;
83
+ function mapRole(row) {
84
+ return {
85
+ id: row.id,
86
+ name: row.name,
87
+ body: row.body,
88
+ bodyVersion: row.body_version,
89
+ bodyFingerprint: (0, fingerprint_1.computeBodyFingerprint)(row.body),
90
+ bodyBytes: Buffer.byteLength(row.body, 'utf8'),
91
+ createdAt: row.created_at,
92
+ updatedAt: row.updated_at,
93
+ };
94
+ }
95
+ function isUniqueNameViolation(error) {
96
+ return error instanceof Error && error.message.includes('UNIQUE constraint failed: agent_roles.name');
97
+ }
98
+ function validatedName(name) {
99
+ const normalized = (0, validation_1.normalizeRoleName)(name);
100
+ if (!normalized.ok)
101
+ throw new AgentRoleValidationError(normalized.problem);
102
+ return normalized.name;
103
+ }
104
+ function assertBody(body) {
105
+ const problem = (0, validation_1.roleBodyProblem)(body);
106
+ if (problem)
107
+ throw new AgentRoleValidationError(problem);
108
+ }
109
+ // ---------------------------------------------------------------------------
110
+ // Roles
111
+ // ---------------------------------------------------------------------------
112
+ /** Every role, by name. */
113
+ function listAgentRoles(db) {
114
+ const rows = db.prepare('SELECT * FROM agent_roles ORDER BY name ASC').all();
115
+ return rows.map(mapRole);
116
+ }
117
+ function getAgentRole(db, id) {
118
+ const row = db.prepare('SELECT * FROM agent_roles WHERE id = ?').get(id);
119
+ return row ? mapRole(row) : null;
120
+ }
121
+ /**
122
+ * @throws {AgentRoleValidationError} The name or body is not acceptable
123
+ * @throws {AgentRoleNameConflictError} The name is taken
124
+ */
125
+ function createAgentRole(db, input) {
126
+ const name = validatedName(input.name);
127
+ assertBody(input.body);
128
+ // Short and hex: it becomes part of a generated file name.
129
+ const id = (0, crypto_1.randomBytes)(8).toString('hex');
130
+ const now = Date.now();
131
+ try {
132
+ db.prepare(`INSERT INTO agent_roles (id, name, body, body_version, created_at, updated_at) VALUES (?, ?, ?, 1, ?, ?)`).run(id, name, input.body, now, now);
133
+ }
134
+ catch (error) {
135
+ if (isUniqueNameViolation(error))
136
+ throw new AgentRoleNameConflictError(name);
137
+ throw error;
138
+ }
139
+ return getAgentRole(db, id);
140
+ }
141
+ /** What points directly at this role. */
142
+ function getAgentRoleReferences(db, roleId) {
143
+ const instances = db
144
+ .prepare(`SELECT worktree_id AS worktreeId, instance_id AS instanceId FROM agent_instance_roles
145
+ WHERE role_id = ? ORDER BY worktree_id, instance_id`)
146
+ .all(roleId);
147
+ const repositories = db
148
+ .prepare(`SELECT d.repository_id AS repositoryId, r.path AS repositoryPath, d.cli_tool_id AS cliToolId
149
+ FROM agent_role_repository_defaults d JOIN repositories r ON r.id = d.repository_id
150
+ WHERE d.role_id = ? ORDER BY r.path, d.cli_tool_id`)
151
+ .all(roleId);
152
+ const system = db
153
+ .prepare(`SELECT cli_tool_id AS cliToolId FROM agent_role_system_defaults WHERE role_id = ? ORDER BY cli_tool_id`)
154
+ .all(roleId);
155
+ return { instances, repositories, system };
156
+ }
157
+ /**
158
+ * Edit a role. The body version moves only when the bytes change, so a rename is
159
+ * not a new version of the text.
160
+ *
161
+ * @param input.expectedBodyVersion - When given, the edit applies only at this version
162
+ * @param input.expectedName - When given, the edit applies only under this name, or
163
+ * when the role already has the name asked for
164
+ * @throws {AgentRoleNotFoundError}
165
+ * @throws {AgentRoleVersionConflictError} Someone else got there first; nothing changed
166
+ * @throws {AgentRoleNameChangedError} Someone else renamed it first; nothing changed
167
+ * @throws {AgentRoleValidationError}
168
+ * @throws {AgentRoleNameConflictError}
169
+ */
170
+ function updateAgentRole(db, id, input) {
171
+ const name = input.name === undefined ? undefined : validatedName(input.name);
172
+ if (input.body !== undefined)
173
+ assertBody(input.body);
174
+ const newBody = input.body;
175
+ return db.transaction(() => {
176
+ const before = getAgentRole(db, id);
177
+ if (!before)
178
+ throw new AgentRoleNotFoundError(id);
179
+ if (input.expectedBodyVersion !== undefined && input.expectedBodyVersion !== before.bodyVersion) {
180
+ throw new AgentRoleVersionConflictError(before.bodyVersion);
181
+ }
182
+ if (input.expectedName !== undefined && input.expectedName !== before.name && name !== before.name) {
183
+ throw new AgentRoleNameChangedError(before.name);
184
+ }
185
+ const bodyChanged = newBody !== undefined && newBody !== before.body;
186
+ try {
187
+ db.prepare(`UPDATE agent_roles SET name = ?, body = ?, body_version = ?, updated_at = ? WHERE id = ?`).run(name ?? before.name, newBody ?? before.body, bodyChanged ? before.bodyVersion + 1 : before.bodyVersion, Date.now(), id);
188
+ }
189
+ catch (error) {
190
+ if (isUniqueNameViolation(error))
191
+ throw new AgentRoleNameConflictError(name ?? before.name);
192
+ throw error;
193
+ }
194
+ return {
195
+ before,
196
+ after: getAgentRole(db, id),
197
+ affected: getAgentRoleReferences(db, id),
198
+ };
199
+ })();
200
+ }
201
+ /**
202
+ * Delete a role. With `force`, the settings pointing at it go in the same
203
+ * transaction, so they read as "inherit" afterwards and not as an explicit none.
204
+ * Launch records and generated files stay.
205
+ *
206
+ * @throws {AgentRoleNotFoundError}
207
+ * @throws {AgentRoleInUseError} It has references and `force` was not given
208
+ */
209
+ function deleteAgentRole(db, id, options = {}) {
210
+ return db.transaction(() => {
211
+ const role = getAgentRole(db, id);
212
+ if (!role)
213
+ throw new AgentRoleNotFoundError(id);
214
+ const affected = getAgentRoleReferences(db, id);
215
+ const inUse = affected.instances.length + affected.repositories.length + affected.system.length > 0;
216
+ if (inUse && !options.force)
217
+ throw new AgentRoleInUseError(affected);
218
+ db.prepare('DELETE FROM agent_instance_roles WHERE role_id = ?').run(id);
219
+ db.prepare('DELETE FROM agent_role_repository_defaults WHERE role_id = ?').run(id);
220
+ db.prepare('DELETE FROM agent_role_system_defaults WHERE role_id = ?').run(id);
221
+ db.prepare('DELETE FROM agent_roles WHERE id = ?').run(id);
222
+ return { role, affected };
223
+ })();
224
+ }
225
+ function assertRoleExists(db, roleId) {
226
+ if (!db.prepare('SELECT 1 FROM agent_roles WHERE id = ?').get(roleId)) {
227
+ throw new AgentRoleNotFoundError(roleId);
228
+ }
229
+ }
230
+ // ---------------------------------------------------------------------------
231
+ // Settings
232
+ // ---------------------------------------------------------------------------
233
+ function toStoredState(row) {
234
+ if (!row)
235
+ return { state: 'inherit' };
236
+ if (row.role_id === null)
237
+ return { state: 'none' };
238
+ return { state: 'role', roleId: row.role_id, roleName: row.role_name };
239
+ }
240
+ /** @returns The tools with a system default. A missing key means unset. */
241
+ function getSystemRoleDefaults(db) {
242
+ const rows = db
243
+ .prepare(`SELECT d.cli_tool_id, d.role_id, r.name AS role_name
244
+ FROM agent_role_system_defaults d JOIN agent_roles r ON r.id = d.role_id`)
245
+ .all();
246
+ return Object.fromEntries(rows.map((row) => [row.cli_tool_id, { roleId: row.role_id, roleName: row.role_name }]));
247
+ }
248
+ /**
249
+ * @param roleId - The role, or null for unset (no row)
250
+ * @throws {AgentRoleNotFoundError}
251
+ */
252
+ function setSystemRoleDefault(db, cliToolId, roleId) {
253
+ if (roleId === null) {
254
+ db.prepare('DELETE FROM agent_role_system_defaults WHERE cli_tool_id = ?').run(cliToolId);
255
+ return;
256
+ }
257
+ assertRoleExists(db, roleId);
258
+ db.prepare(`INSERT INTO agent_role_system_defaults (cli_tool_id, role_id, updated_at) VALUES (?, ?, ?)
259
+ ON CONFLICT(cli_tool_id) DO UPDATE SET role_id = excluded.role_id, updated_at = excluded.updated_at`).run(cliToolId, roleId, Date.now());
260
+ }
261
+ /** @returns The tools with a row for this root. A missing key means inherit. */
262
+ function getRepositoryRoleStates(db, repositoryId) {
263
+ const rows = db
264
+ .prepare(`SELECT d.cli_tool_id, d.role_id, r.name AS role_name
265
+ FROM agent_role_repository_defaults d LEFT JOIN agent_roles r ON r.id = d.role_id
266
+ WHERE d.repository_id = ?`)
267
+ .all(repositoryId);
268
+ return Object.fromEntries(rows.map((row) => [row.cli_tool_id, toStoredState(row)]));
269
+ }
270
+ /** @throws {AgentRoleNotFoundError} */
271
+ function setRepositoryRoleState(db, repositoryId, cliToolId, input) {
272
+ if (input.state === 'inherit') {
273
+ db.prepare('DELETE FROM agent_role_repository_defaults WHERE repository_id = ? AND cli_tool_id = ?').run(repositoryId, cliToolId);
274
+ return;
275
+ }
276
+ const roleId = input.state === 'role' ? input.roleId : null;
277
+ if (roleId !== null)
278
+ assertRoleExists(db, roleId);
279
+ db.prepare(`INSERT INTO agent_role_repository_defaults (repository_id, cli_tool_id, role_id, updated_at) VALUES (?, ?, ?, ?)
280
+ ON CONFLICT(repository_id, cli_tool_id) DO UPDATE SET role_id = excluded.role_id, updated_at = excluded.updated_at`).run(repositoryId, cliToolId, roleId, Date.now());
281
+ }
282
+ function getInstanceRoleState(db, worktreeId, instanceId) {
283
+ const row = db
284
+ .prepare(`SELECT i.role_id, r.name AS role_name
285
+ FROM agent_instance_roles i LEFT JOIN agent_roles r ON r.id = i.role_id
286
+ WHERE i.worktree_id = ? AND i.instance_id = ?`)
287
+ .get(worktreeId, instanceId);
288
+ return toStoredState(row);
289
+ }
290
+ /**
291
+ * Whether the target may hold a setting is for the caller to decide
292
+ * (`agent-roles/management.ts`): this writes what it is told.
293
+ *
294
+ * @throws {AgentRoleNotFoundError}
295
+ */
296
+ function setInstanceRoleState(db, worktreeId, instanceId, input) {
297
+ if (input.state === 'inherit') {
298
+ db.prepare('DELETE FROM agent_instance_roles WHERE worktree_id = ? AND instance_id = ?').run(worktreeId, instanceId);
299
+ return;
300
+ }
301
+ const roleId = input.state === 'role' ? input.roleId : null;
302
+ if (roleId !== null)
303
+ assertRoleExists(db, roleId);
304
+ db.prepare(`INSERT INTO agent_instance_roles (worktree_id, instance_id, role_id, updated_at) VALUES (?, ?, ?, ?)
305
+ ON CONFLICT(worktree_id, instance_id) DO UPDATE SET role_id = excluded.role_id, updated_at = excluded.updated_at`).run(worktreeId, instanceId, roleId, Date.now());
306
+ }
307
+ /**
308
+ * Whether any level holds a setting. With none, every instance of every tool
309
+ * resolves to no role, so a launch need not run git to find that out (#4115).
310
+ */
311
+ function hasAnyRoleSetting(db) {
312
+ const row = db
313
+ .prepare(`SELECT (EXISTS (SELECT 1 FROM agent_instance_roles)
314
+ OR EXISTS (SELECT 1 FROM agent_role_repository_defaults)
315
+ OR EXISTS (SELECT 1 FROM agent_role_system_defaults)) AS present`)
316
+ .get();
317
+ return row?.present === 1;
318
+ }
319
+ // ---------------------------------------------------------------------------
320
+ // Creation keys (#4132, migration v65)
321
+ // ---------------------------------------------------------------------------
322
+ /** How long a key is remembered. A request's deadline is seconds, so a late one is well inside it. */
323
+ exports.INSTANCE_CREATION_KEY_TTL_MS = 24 * 60 * 60 * 1000;
324
+ function getInstanceCreationKey(db, worktreeId, key) {
325
+ const row = db
326
+ .prepare(`SELECT instance_id, request_fingerprint FROM agent_instance_creation_keys
327
+ WHERE worktree_id = ? AND idempotency_key = ?`)
328
+ .get(worktreeId, key);
329
+ return row ? { instanceId: row.instance_id, requestFingerprint: row.request_fingerprint } : null;
330
+ }
331
+ function writeInstanceCreationKey(db, worktreeId, key, record) {
332
+ const now = Date.now();
333
+ db.prepare('DELETE FROM agent_instance_creation_keys WHERE created_at < ?').run(now - exports.INSTANCE_CREATION_KEY_TTL_MS);
334
+ db.prepare(`INSERT INTO agent_instance_creation_keys (worktree_id, idempotency_key, instance_id, request_fingerprint, created_at)
335
+ VALUES (?, ?, ?, ?, ?)`).run(worktreeId, key, record.instanceId, record.requestFingerprint, now);
336
+ }
337
+ /** Written in the transaction that creates the row, so one never exists without the other. */
338
+ function recordInstanceCreationKey(db, worktreeId, key, instanceId, requestFingerprint) {
339
+ writeInstanceCreationKey(db, worktreeId, key, { instanceId, requestFingerprint });
340
+ }
341
+ /**
342
+ * What a key came to. One that has made nothing is marked given up on here, so a request
343
+ * still on its way with it makes nothing either: the answer holds from now on.
344
+ *
345
+ * @returns The instance it made, or null when it made none and never will
346
+ */
347
+ function settleInstanceCreationKey(db, worktreeId, key) {
348
+ return db.transaction(() => {
349
+ const existing = getInstanceCreationKey(db, worktreeId, key);
350
+ if (existing)
351
+ return existing.instanceId;
352
+ writeInstanceCreationKey(db, worktreeId, key, { instanceId: null, requestFingerprint: null });
353
+ return null;
354
+ })();
355
+ }
356
+ function mapLaunchRecord(row) {
357
+ return {
358
+ id: row.id,
359
+ worktreeId: row.worktree_id,
360
+ instanceId: row.instance_id,
361
+ cliToolId: row.cli_tool_id,
362
+ phase: row.phase,
363
+ sessionGeneration: row.session_generation,
364
+ source: row.source,
365
+ repositoryId: row.repository_id,
366
+ roleId: row.role_id,
367
+ roleName: row.role_name,
368
+ bodyVersion: row.body_version,
369
+ bodyFingerprint: row.body_fingerprint,
370
+ injectionFingerprint: row.injection_fingerprint,
371
+ artifactFingerprint: row.artifact_fingerprint,
372
+ adapterId: row.adapter_id,
373
+ adapterVersion: row.adapter_version,
374
+ wrapperVersion: row.wrapper_version,
375
+ artifactPath: row.artifact_path,
376
+ effectiveAgent: row.effective_agent,
377
+ compositionSourceFingerprint: row.composition_source_fingerprint,
378
+ noRoleReason: row.no_role_reason,
379
+ recordedAt: row.recorded_at,
380
+ };
381
+ }
382
+ /**
383
+ * Add one line of evidence. There is no function that changes one.
384
+ *
385
+ * @throws When this generation already has a record of this phase
386
+ */
387
+ function recordRoleLaunch(db, record) {
388
+ const id = (0, crypto_1.randomUUID)();
389
+ db.prepare(`INSERT INTO agent_role_launch_records (
390
+ id, worktree_id, instance_id, cli_tool_id, phase, session_generation, source,
391
+ repository_id, role_id, role_name, body_version, body_fingerprint,
392
+ injection_fingerprint, artifact_fingerprint, adapter_id, adapter_version,
393
+ wrapper_version, artifact_path, effective_agent, composition_source_fingerprint,
394
+ no_role_reason, recorded_at
395
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, record.worktreeId, record.instanceId, record.cliToolId, record.phase, record.sessionGeneration, record.source, record.repositoryId, record.roleId, record.roleName, record.bodyVersion, record.bodyFingerprint, record.injectionFingerprint, record.artifactFingerprint, record.adapterId, record.adapterVersion, record.wrapperVersion, record.artifactPath, record.effectiveAgent, record.compositionSourceFingerprint, record.noRoleReason, Date.now());
396
+ return id;
397
+ }
398
+ /** The latest record of each phase for one instance. Ties on the clock go to the later insert. */
399
+ function getLatestRoleLaunchRecords(db, worktreeId, instanceId) {
400
+ const latest = (phase) => {
401
+ const row = db
402
+ .prepare(`SELECT * FROM agent_role_launch_records
403
+ WHERE worktree_id = ? AND instance_id = ? AND phase = ?
404
+ ORDER BY recorded_at DESC, rowid DESC LIMIT 1`)
405
+ .get(worktreeId, instanceId, phase);
406
+ return row ? mapLaunchRecord(row) : null;
407
+ };
408
+ return { requested: latest('requested'), launched: latest('launched') };
409
+ }
@@ -41,6 +41,7 @@ exports.stopAgentSessionCostSampler = stopAgentSessionCostSampler;
41
41
  const agent_session_telemetry_1 = require("../../lib/hooks/agent-session-telemetry");
42
42
  const types_1 = require("../../lib/cli-tools/types");
43
43
  const logger_1 = require("../../lib/logger");
44
+ const test_run_detection_1 = require("../../lib/test-run-detection");
44
45
  const agent_session_cost_db_1 = require("./agent-session-cost-db");
45
46
  const logger = (0, logger_1.createLogger)('agent-session-cost-sampler');
46
47
  /**
@@ -160,7 +161,7 @@ function sampleAgentSessionCosts(db, now = Date.now()) {
160
161
  * needing to know which kind of process it is in.
161
162
  *
162
163
  * The timer is `unref()`d so it never keeps Node alive, and skipped outright
163
- * under Vitest: a suite that opens a database should not acquire a background
164
+ * in a test run ({@link isUnderTest}): a suite that opens a database should not acquire a background
164
165
  * writer to a file it is about to delete.
165
166
  *
166
167
  * @param db - Database instance to write into
@@ -169,7 +170,7 @@ function sampleAgentSessionCosts(db, now = Date.now()) {
169
170
  function startAgentSessionCostSampler(db) {
170
171
  if (globalThis.__agentSessionCostSampler)
171
172
  return false;
172
- if (process.env.VITEST || process.env.NODE_ENV === 'test')
173
+ if ((0, test_run_detection_1.isUnderTest)())
173
174
  return false;
174
175
  const timer = setInterval(() => {
175
176
  try {
@@ -10,8 +10,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  return (mod && mod.__esModule) ? mod : { "default": mod };
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.TEST_DB_ROOT_ENV = void 0;
14
- exports.isInsideVitestWorker = isInsideVitestWorker;
13
+ exports.TEST_DB_ROOT_ENV = exports.isInsideVitestWorker = void 0;
15
14
  exports.assertTestDatabasePathIsolated = assertTestDatabasePathIsolated;
16
15
  exports.getDbInstance = getDbInstance;
17
16
  exports.closeDbInstance = closeDbInstance;
@@ -21,6 +20,8 @@ const abi_recovery_1 = require("./abi-recovery");
21
20
  const agent_session_cost_sampler_1 = require("./agent-session-cost-sampler");
22
21
  const env_1 = require("../../lib/env");
23
22
  const system_directories_1 = require("../../config/system-directories");
23
+ const test_run_detection_1 = require("../../lib/test-run-detection");
24
+ Object.defineProperty(exports, "isInsideVitestWorker", { enumerable: true, get: function () { return test_run_detection_1.isInsideVitestWorker; } });
24
25
  let dbInstance = null;
25
26
  /**
26
27
  * `fs` / `os` are required lazily, as getDbInstance() always did for `fs`: a
@@ -35,36 +36,6 @@ function nodeTmpdir() {
35
36
  // eslint-disable-next-line @typescript-eslint/no-require-imports
36
37
  return require('os').tmpdir();
37
38
  }
38
- /**
39
- * Issue #4086: is this code running inside a Vitest worker?
40
- *
41
- * Read off the worker state Vitest itself installs on `globalThis` (its
42
- * `getWorkerState()` reads the same `__vitest_worker__` global, in the forks
43
- * and threads pools alike), not off environment variables: the environment is
44
- * both inherited and editable. A test may swap `NODE_ENV` to `production`
45
- * mid-run (tests/unit/pwa/ServiceWorkerRegistrar.test.tsx does) and must stay
46
- * guarded, while a child process started outside Vitest inherits `VITEST` and
47
- * must not be taken for a test run.
48
- */
49
- function isInsideVitestWorker() {
50
- const state = globalThis.__vitest_worker__;
51
- return typeof state === 'object' && state !== null;
52
- }
53
- /**
54
- * Issue #4086: is this a test run (the guard's on-switch)?
55
- *
56
- * Inside a Vitest worker: always, whatever `NODE_ENV` says right now.
57
- * Outside one: only with `NODE_ENV=test` (a test's own child process, which
58
- * also inherits the per-process CM_DB_PATH). `VITEST` alone never counts —
59
- * the daemon spreads `process.env` into the server it starts
60
- * (src/cli/utils/daemon.ts buildChildEnv), so a `NODE_ENV=production` server
61
- * started from a shell where `VITEST` was left behind opens its real database.
62
- */
63
- function isUnderTest(env, inVitestWorker) {
64
- if (inVitestWorker)
65
- return true;
66
- return (env.NODE_ENV ?? '').trim() === 'test';
67
- }
68
39
  /** realpath of the nearest existing ancestor, with the missing tail re-joined. */
69
40
  function physicalPath(target) {
70
41
  const fs = nodeFs();
@@ -101,8 +72,7 @@ exports.TEST_DB_ROOT_ENV = 'CM_TEST_DB_ROOT';
101
72
  * databases tests/setup.ts hands out — not under the temp dir, because
102
73
  * `validateDbPath` rejects /tmp and /var, where every OS temp dir lives). Not
103
74
  * only the one setup path, so tests that name their own database keep working.
104
- * Active inside a Vitest worker (even while a test has swapped `NODE_ENV`) and
105
- * in a process with `NODE_ENV=test`; a no-op otherwise, so a real server is
75
+ * Active when {@link isUnderTest} says so; a no-op otherwise, so a real server is
106
76
  * never affected — including one that inherited `VITEST` but runs with
107
77
  * `NODE_ENV=production`.
108
78
  *
@@ -110,8 +80,8 @@ exports.TEST_DB_ROOT_ENV = 'CM_TEST_DB_ROOT';
110
80
  * passes `false` to ask how a process outside Vitest would be judged
111
81
  * @throws Error when under test and `dbPath` is in neither directory
112
82
  */
113
- function assertTestDatabasePathIsolated(dbPath, env = process.env, tmpRoot = nodeTmpdir(), inVitestWorker = isInsideVitestWorker()) {
114
- if (!isUnderTest(env, inVitestWorker))
83
+ function assertTestDatabasePathIsolated(dbPath, env = process.env, tmpRoot = nodeTmpdir(), inVitestWorker = (0, test_run_detection_1.isInsideVitestWorker)()) {
84
+ if (!(0, test_run_detection_1.isUnderTest)(env, inVitestWorker))
115
85
  return;
116
86
  const resolved = path_1.default.resolve(dbPath);
117
87
  const roots = [tmpRoot, env[exports.TEST_DB_ROOT_ENV]]
@@ -179,7 +149,7 @@ function getDbInstance() {
179
149
  throw error;
180
150
  }
181
151
  dbInstance = db;
182
- if (isUnderTest(process.env, isInsideVitestWorker())) {
152
+ if ((0, test_run_detection_1.isUnderTest)()) {
183
153
  (globalThis.__commandmateTestDbClosers ??= new Set()).add(closeDbInstance);
184
154
  }
185
155
  // Issue #2044: the agent cost ledger needs somebody to copy the in-memory
@@ -47,6 +47,8 @@ const v60_session_relays_1 = require("./v60-session-relays");
47
47
  const v61_session_notes_1 = require("./v61-session-notes");
48
48
  const v62_session_relays_bind_1 = require("./v62-session-relays-bind");
49
49
  const v63_session_relays_delivery_attempt_1 = require("./v63-session-relays-delivery-attempt");
50
+ const v64_agent_roles_1 = require("./v64-agent-roles");
51
+ const v65_agent_instance_creation_keys_1 = require("./v65-agent-instance-creation-keys");
50
52
  /**
51
53
  * Complete ordered list of all migrations.
52
54
  * Used internally by the barrel file (db-migrations.ts); NOT exported from the barrel (DR2-004).
@@ -97,4 +99,6 @@ exports.migrations = [
97
99
  ...v61_session_notes_1.v61_migrations,
98
100
  ...v62_session_relays_bind_1.v62_migrations,
99
101
  ...v63_session_relays_delivery_attempt_1.v63_migrations,
102
+ ...v64_agent_roles_1.v64_migrations,
103
+ ...v65_agent_instance_creation_keys_1.v65_migrations,
100
104
  ];
@@ -18,7 +18,7 @@ const pre_migration_backup_1 = require("./pre-migration-backup");
18
18
  * Current schema version
19
19
  * Increment this when adding new migrations
20
20
  */
21
- exports.CURRENT_SCHEMA_VERSION = 63;
21
+ exports.CURRENT_SCHEMA_VERSION = 65;
22
22
  /**
23
23
  * Get current schema version from database
24
24
  */
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /**
3
+ * Migration v64: roles (Epic #4112, Issue #4114).
4
+ *
5
+ * ## The three states of a setting
6
+ *
7
+ * A level holds a role, an explicit "no role", or nothing, in which case the next
8
+ * level decides. No row is "nothing" and a NULL `role_id` is the explicit none.
9
+ * The system level has no explicit none (`role_id NOT NULL`): it is the last level.
10
+ *
11
+ * ## Why no reference to `agent_roles` is `ON DELETE SET NULL`
12
+ *
13
+ * NULL means "explicitly none", so a deleted role would quietly become a decision
14
+ * nobody made. They are `RESTRICT`, and `deleteAgentRole` with `force` removes the
15
+ * rows in one transaction, which reads as "inherit".
16
+ *
17
+ * ## Why `agent_instance_roles` is its own table
18
+ *
19
+ * `setAgentInstances` deletes and re-inserts every roster row, so a column on
20
+ * `agent_instances` would be wiped by each rename and reorder (the same reason as
21
+ * v59). It has no foreign key to `agent_instances` for the same reason: the
22
+ * replace would cascade into it. `pruneAgentInstanceRoles` removes the ids that
23
+ * really left. `worktree_id` follows the convention `getWorktreeChildTables()`
24
+ * looks for, so a row follows a worktree id rename and goes with its worktree.
25
+ *
26
+ * ## The launch record
27
+ *
28
+ * A snapshot of what was resolved, kept as evidence, so `repository_id` and
29
+ * `role_id` are deliberately not foreign keys: a deleted role or repository
30
+ * must neither take the evidence along nor block a `force` delete. There is no
31
+ * body and no secret column. Nothing updates a row, but there is deliberately no
32
+ * `RAISE(ABORT)` trigger enforcing that: `getWriteGuardedTables` reads one as
33
+ * "append-only ledger" and the row would no longer follow a worktree id rename.
34
+ *
35
+ * The rollback drops the five tables, which is the whole of what this adds.
36
+ */
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.v64_migrations = exports.V64_AGENT_ROLE_TABLES = void 0;
39
+ /** In dependency order. The rollback drops them from the end. */
40
+ exports.V64_AGENT_ROLE_TABLES = [
41
+ 'agent_roles',
42
+ 'agent_role_system_defaults',
43
+ 'agent_role_repository_defaults',
44
+ 'agent_instance_roles',
45
+ 'agent_role_launch_records',
46
+ ];
47
+ exports.v64_migrations = [
48
+ {
49
+ version: 64,
50
+ name: 'agent-roles',
51
+ up: (db) => {
52
+ db.exec(`
53
+ CREATE TABLE agent_roles (
54
+ id TEXT PRIMARY KEY,
55
+ name TEXT NOT NULL COLLATE NOCASE UNIQUE,
56
+ body TEXT NOT NULL,
57
+ body_version INTEGER NOT NULL,
58
+ created_at INTEGER NOT NULL,
59
+ updated_at INTEGER NOT NULL
60
+ );
61
+
62
+ CREATE TABLE agent_role_system_defaults (
63
+ cli_tool_id TEXT PRIMARY KEY,
64
+ role_id TEXT NOT NULL REFERENCES agent_roles(id) ON DELETE RESTRICT,
65
+ updated_at INTEGER NOT NULL
66
+ );
67
+
68
+ CREATE TABLE agent_role_repository_defaults (
69
+ repository_id TEXT NOT NULL REFERENCES repositories(id) ON DELETE CASCADE,
70
+ cli_tool_id TEXT NOT NULL,
71
+ role_id TEXT REFERENCES agent_roles(id) ON DELETE RESTRICT,
72
+ updated_at INTEGER NOT NULL,
73
+ PRIMARY KEY (repository_id, cli_tool_id)
74
+ );
75
+
76
+ CREATE TABLE agent_instance_roles (
77
+ worktree_id TEXT NOT NULL REFERENCES worktrees(id) ON DELETE CASCADE,
78
+ instance_id TEXT NOT NULL,
79
+ role_id TEXT REFERENCES agent_roles(id) ON DELETE RESTRICT,
80
+ updated_at INTEGER NOT NULL,
81
+ PRIMARY KEY (worktree_id, instance_id)
82
+ );
83
+
84
+ CREATE TABLE agent_role_launch_records (
85
+ id TEXT PRIMARY KEY,
86
+ worktree_id TEXT NOT NULL REFERENCES worktrees(id) ON DELETE CASCADE,
87
+ instance_id TEXT NOT NULL,
88
+ cli_tool_id TEXT NOT NULL,
89
+ phase TEXT NOT NULL CHECK (phase IN ('requested','launched')),
90
+ session_generation TEXT NOT NULL,
91
+ source TEXT NOT NULL,
92
+ repository_id TEXT,
93
+ role_id TEXT,
94
+ role_name TEXT,
95
+ body_version INTEGER,
96
+ body_fingerprint TEXT,
97
+ injection_fingerprint TEXT,
98
+ artifact_fingerprint TEXT,
99
+ adapter_id TEXT,
100
+ adapter_version TEXT,
101
+ wrapper_version TEXT,
102
+ artifact_path TEXT,
103
+ effective_agent TEXT,
104
+ composition_source_fingerprint TEXT,
105
+ no_role_reason TEXT,
106
+ recorded_at INTEGER NOT NULL,
107
+ UNIQUE (worktree_id, instance_id, session_generation, phase)
108
+ );
109
+
110
+ CREATE INDEX idx_agent_role_repository_defaults_role ON agent_role_repository_defaults(role_id);
111
+ CREATE INDEX idx_agent_instance_roles_role ON agent_instance_roles(role_id);
112
+ CREATE INDEX idx_agent_role_system_defaults_role ON agent_role_system_defaults(role_id);
113
+ CREATE INDEX idx_agent_role_launch_records_latest
114
+ ON agent_role_launch_records(worktree_id, instance_id, phase, recorded_at);
115
+ `);
116
+ },
117
+ down: (db) => {
118
+ for (const table of [...exports.V64_AGENT_ROLE_TABLES].reverse()) {
119
+ db.exec(`DROP TABLE IF EXISTS ${table}`);
120
+ }
121
+ },
122
+ },
123
+ ];