commandmate 0.27.0 → 0.28.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 (918) hide show
  1. package/.env.example +28 -0
  2. package/.next/BUILD_ID +1 -1
  3. package/.next/app-build-manifest.json +286 -256
  4. package/.next/app-path-routes-manifest.json +36 -32
  5. package/.next/build-manifest.json +2 -2
  6. package/.next/prerender-manifest.json +12 -12
  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/app/update/route.js +1 -1
  11. package/.next/server/app/api/app/update/route.js.nft.json +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route.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/assistant/conversation/route.js +1 -1
  16. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  17. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  19. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  20. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/assistant/messages/route.js +1 -1
  22. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  23. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/assistant/session/route.js +1 -1
  25. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  26. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/assistant/start/route.js +32 -1
  28. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  29. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/assistant/terminal/route.js +34 -3
  31. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  32. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/assistant/tools/route.js +1 -1
  34. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  35. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/capabilities/route.js +1 -1
  40. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/daily-summary/route.js +1 -1
  42. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  43. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  45. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  46. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  48. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  49. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  51. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  52. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/external-apps/route.js +1 -1
  54. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  55. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/fs/browse/route.js +1 -1
  57. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  58. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/fs/recent-paths/route.js +1 -1
  60. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  61. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  63. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  64. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  66. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  67. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  69. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  70. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/metrics/vibe/route.js +1 -1
  72. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  73. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/push/escalation/route.js +1 -1
  76. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  77. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/push/subscriptions/route.js +7 -1
  79. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  80. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/push/vapid/route.js +1 -1
  82. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  83. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  85. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  86. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  88. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  89. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  91. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  92. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  94. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  95. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/repositories/clone/route.js +1 -1
  97. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  98. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  100. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  101. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/repositories/restore/route.js +1 -1
  103. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  104. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/repositories/route.js +1 -1
  106. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  107. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/repositories/scan/route.js +1 -1
  109. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  110. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/repositories/sync/route.js +1 -1
  112. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  113. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  115. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  116. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  118. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  119. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  121. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/skills/installations/route.js +1 -1
  123. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  124. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/skills/operations/route.js +1 -1
  126. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  127. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/skills/reindex/route.js +1 -1
  129. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  130. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  132. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  134. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
  136. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  137. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  139. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  140. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/templates/[id]/route.js +2 -2
  142. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  143. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/templates/route.js +2 -2
  145. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  146. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/todos/route.js +1 -1
  148. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  149. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  151. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  152. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/verification/runs/route.js +1 -1
  154. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  155. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  158. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  161. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  167. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
  169. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -2
  172. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  181. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  182. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  185. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -0
  256. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -0
  257. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -0
  258. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  268. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +4 -4
  271. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  275. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  278. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -0
  283. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -0
  284. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -0
  285. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -0
  286. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -0
  287. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -0
  288. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -0
  289. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -0
  290. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -0
  291. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  293. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  296. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  299. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  302. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +5 -1
  304. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  305. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  308. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/schedules/route.js +6 -2
  310. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  311. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  314. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/send/route.js +7 -3
  316. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  317. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  319. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  320. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  322. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  323. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  326. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  328. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  329. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  330. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  331. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  332. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  333. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  334. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  335. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  336. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  337. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  338. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  339. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  340. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  341. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  342. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  343. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  344. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  345. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  346. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  347. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  348. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  349. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  350. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  351. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  352. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  353. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  354. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  355. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  356. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  357. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  358. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  359. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  360. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -3
  361. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  362. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  363. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  364. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  365. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  366. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  367. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  368. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  369. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  370. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  371. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  372. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  373. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  374. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  375. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  376. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  377. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  378. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  379. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  380. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  381. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  382. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  383. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  384. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  385. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  386. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  387. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  388. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  389. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  390. package/.next/server/app/api/worktrees/route.js +1 -1
  391. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  392. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  393. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  394. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  395. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  396. package/.next/server/app/more/page.js +1 -1
  397. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  398. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  399. package/.next/server/app/page_client-reference-manifest.js +1 -1
  400. package/.next/server/app/proxy/[...path]/route.js +1 -1
  401. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  402. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  403. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  404. package/.next/server/app/review/page.js +1 -1
  405. package/.next/server/app/review/page.js.nft.json +1 -1
  406. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  407. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  408. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  409. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  410. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  411. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
  412. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  413. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  414. package/.next/server/app/worktrees/[id]/page.js +15 -10
  415. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  416. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  417. package/.next/server/app/worktrees/[id]/terminal/page.js +2 -2
  418. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  419. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  420. package/.next/server/app-paths-manifest.json +36 -32
  421. package/.next/server/chunks/1058.js +1 -0
  422. package/.next/server/chunks/1068.js +1 -3
  423. package/.next/server/chunks/1191.js +13 -0
  424. package/.next/server/chunks/1296.js +1 -1
  425. package/.next/server/chunks/1601.js +2 -2
  426. package/.next/server/chunks/1714.js +7 -0
  427. package/.next/server/chunks/1886.js +5 -0
  428. package/.next/server/chunks/1944.js +1 -0
  429. package/.next/server/chunks/2119.js +1 -1
  430. package/.next/server/chunks/221.js +19 -0
  431. package/.next/server/chunks/222.js +1 -0
  432. package/.next/server/chunks/2328.js +1 -1
  433. package/.next/server/chunks/2366.js +1 -0
  434. package/.next/server/chunks/2404.js +2 -2
  435. package/.next/server/chunks/243.js +1 -0
  436. package/.next/server/chunks/2445.js +1 -1
  437. package/.next/server/chunks/2759.js +1 -1
  438. package/.next/server/chunks/3346.js +1 -1
  439. package/.next/server/chunks/3480.js +17 -1
  440. package/.next/server/chunks/3558.js +1 -0
  441. package/.next/server/chunks/4299.js +1 -0
  442. package/.next/server/chunks/4393.js +1 -1
  443. package/.next/server/chunks/5017.js +1 -1
  444. package/.next/server/chunks/5089.js +1 -1
  445. package/.next/server/chunks/5354.js +1 -1
  446. package/.next/server/chunks/5571.js +1 -1
  447. package/.next/server/chunks/6130.js +1 -1
  448. package/.next/server/chunks/6274.js +11 -10
  449. package/.next/server/chunks/6285.js +1 -1
  450. package/.next/server/chunks/6337.js +1 -0
  451. package/.next/server/chunks/6401.js +1 -1
  452. package/.next/server/chunks/663.js +78 -0
  453. package/.next/server/chunks/7472.js +1 -1
  454. package/.next/server/chunks/7824.js +1 -0
  455. package/.next/server/chunks/7905.js +1 -0
  456. package/.next/server/chunks/880.js +1 -1
  457. package/.next/server/chunks/8807.js +84 -18
  458. package/.next/server/chunks/9130.js +5 -0
  459. package/.next/server/chunks/9328.js +1 -1
  460. package/.next/server/chunks/9358.js +1 -1
  461. package/.next/server/chunks/9508.js +1 -1
  462. package/.next/server/chunks/9584.js +1 -0
  463. package/.next/server/chunks/9627.js +274 -0
  464. package/.next/server/chunks/9798.js +2 -0
  465. package/.next/server/chunks/9938.js +1 -1
  466. package/.next/server/middleware-manifest.json +5 -5
  467. package/.next/server/pages/500.html +1 -1
  468. package/.next/server/server-reference-manifest.json +1 -1
  469. package/.next/static/chunks/1188-8567ee5ecfef02ee.js +1 -0
  470. package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +1 -0
  471. package/.next/static/chunks/3968-8d8ca15657748bfb.js +1 -0
  472. package/.next/static/chunks/6381-d921ab728eda1191.js +1 -0
  473. package/.next/static/chunks/app/api/app/update/route-9247d6b9d647f750.js +1 -0
  474. package/.next/static/chunks/app/api/app/update-check/route-9247d6b9d647f750.js +1 -0
  475. package/.next/static/chunks/app/api/assistant/conversation/route-9247d6b9d647f750.js +1 -0
  476. package/.next/static/chunks/app/api/assistant/current-output/route-9247d6b9d647f750.js +1 -0
  477. package/.next/static/chunks/app/api/assistant/messages/route-9247d6b9d647f750.js +1 -0
  478. package/.next/static/chunks/app/api/assistant/session/route-9247d6b9d647f750.js +1 -0
  479. package/.next/static/chunks/app/api/assistant/start/route-9247d6b9d647f750.js +1 -0
  480. package/.next/static/chunks/app/api/assistant/terminal/route-9247d6b9d647f750.js +1 -0
  481. package/.next/static/chunks/app/api/assistant/tools/route-9247d6b9d647f750.js +1 -0
  482. package/.next/static/chunks/app/api/auth/login/route-9247d6b9d647f750.js +1 -0
  483. package/.next/static/chunks/app/api/auth/logout/route-9247d6b9d647f750.js +1 -0
  484. package/.next/static/chunks/app/api/auth/status/route-9247d6b9d647f750.js +1 -0
  485. package/.next/static/chunks/app/api/capabilities/route-9247d6b9d647f750.js +1 -0
  486. package/.next/static/chunks/app/api/daily-summary/route-9247d6b9d647f750.js +1 -0
  487. package/.next/static/chunks/app/api/daily-summary/status/route-9247d6b9d647f750.js +1 -0
  488. package/.next/static/chunks/app/api/external-apps/[id]/health/route-9247d6b9d647f750.js +1 -0
  489. package/.next/static/chunks/app/api/external-apps/[id]/route-9247d6b9d647f750.js +1 -0
  490. package/.next/static/chunks/app/api/external-apps/route-9247d6b9d647f750.js +1 -0
  491. package/.next/static/chunks/app/api/fs/browse/route-9247d6b9d647f750.js +1 -0
  492. package/.next/static/chunks/app/api/fs/recent-paths/route-9247d6b9d647f750.js +1 -0
  493. package/.next/static/chunks/app/api/hooks/agent-event/route-9247d6b9d647f750.js +1 -0
  494. package/.next/static/chunks/app/api/hooks/claude-done/route-9247d6b9d647f750.js +1 -0
  495. package/.next/static/chunks/app/api/hooks/permission-request/route-9247d6b9d647f750.js +1 -0
  496. package/.next/static/chunks/app/api/metrics/vibe/route-9247d6b9d647f750.js +1 -0
  497. package/.next/static/chunks/app/api/ollama/models/route-9247d6b9d647f750.js +1 -0
  498. package/.next/static/chunks/app/api/push/escalation/route-9247d6b9d647f750.js +1 -0
  499. package/.next/static/chunks/app/api/push/subscriptions/route-9247d6b9d647f750.js +1 -0
  500. package/.next/static/chunks/app/api/push/vapid/route-9247d6b9d647f750.js +1 -0
  501. package/.next/static/chunks/app/api/repositories/[id]/route-9247d6b9d647f750.js +1 -0
  502. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-9247d6b9d647f750.js +1 -0
  503. package/.next/static/chunks/app/api/repositories/[id]/todos/route-9247d6b9d647f750.js +1 -0
  504. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-9247d6b9d647f750.js +1 -0
  505. package/.next/static/chunks/app/api/repositories/clone/route-9247d6b9d647f750.js +1 -0
  506. package/.next/static/chunks/app/api/repositories/excluded/route-9247d6b9d647f750.js +1 -0
  507. package/.next/static/chunks/app/api/repositories/restore/route-9247d6b9d647f750.js +1 -0
  508. package/.next/static/chunks/app/api/repositories/route-9247d6b9d647f750.js +1 -0
  509. package/.next/static/chunks/app/api/repositories/scan/route-9247d6b9d647f750.js +1 -0
  510. package/.next/static/chunks/app/api/repositories/sync/route-9247d6b9d647f750.js +1 -0
  511. package/.next/static/chunks/app/api/repositories/validate-path/route-9247d6b9d647f750.js +1 -0
  512. package/.next/static/chunks/app/api/sidebar/group-order/route-9247d6b9d647f750.js +1 -0
  513. package/.next/static/chunks/app/api/skills/[id]/route-9247d6b9d647f750.js +1 -0
  514. package/.next/static/chunks/app/api/skills/installations/route-9247d6b9d647f750.js +1 -0
  515. package/.next/static/chunks/app/api/skills/operations/route-9247d6b9d647f750.js +1 -0
  516. package/.next/static/chunks/app/api/skills/reindex/route-9247d6b9d647f750.js +1 -0
  517. package/.next/static/chunks/app/api/skills/route-9247d6b9d647f750.js +1 -0
  518. package/.next/static/chunks/app/api/slash-commands/route-9247d6b9d647f750.js +1 -0
  519. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-9247d6b9d647f750.js +1 -0
  520. package/.next/static/chunks/app/api/tasks/[taskId]/route-9247d6b9d647f750.js +1 -0
  521. package/.next/static/chunks/app/api/templates/[id]/route-9247d6b9d647f750.js +1 -0
  522. package/.next/static/chunks/app/api/templates/route-9247d6b9d647f750.js +1 -0
  523. package/.next/static/chunks/app/api/todos/route-9247d6b9d647f750.js +1 -0
  524. package/.next/static/chunks/app/api/verification/runs/[runId]/route-9247d6b9d647f750.js +1 -0
  525. package/.next/static/chunks/app/api/verification/runs/route-9247d6b9d647f750.js +1 -0
  526. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-9247d6b9d647f750.js +1 -0
  527. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-9247d6b9d647f750.js +1 -0
  528. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-9247d6b9d647f750.js +1 -0
  529. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-9247d6b9d647f750.js +1 -0
  530. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-9247d6b9d647f750.js +1 -0
  531. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-9247d6b9d647f750.js +1 -0
  532. package/.next/static/chunks/app/api/worktrees/[id]/env/route-9247d6b9d647f750.js +1 -0
  533. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-9247d6b9d647f750.js +1 -0
  534. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-9247d6b9d647f750.js +1 -0
  535. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-9247d6b9d647f750.js +1 -0
  536. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-9247d6b9d647f750.js +1 -0
  537. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-9247d6b9d647f750.js +1 -0
  538. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-9247d6b9d647f750.js +1 -0
  539. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-9247d6b9d647f750.js +1 -0
  540. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-9247d6b9d647f750.js +1 -0
  541. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-9247d6b9d647f750.js +1 -0
  542. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-9247d6b9d647f750.js +1 -0
  543. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-9247d6b9d647f750.js +1 -0
  544. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-9247d6b9d647f750.js +1 -0
  545. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-9247d6b9d647f750.js +1 -0
  546. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-9247d6b9d647f750.js +1 -0
  547. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-9247d6b9d647f750.js +1 -0
  548. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-9247d6b9d647f750.js +1 -0
  549. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-9247d6b9d647f750.js +1 -0
  550. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-9247d6b9d647f750.js +1 -0
  551. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-9247d6b9d647f750.js +1 -0
  552. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-9247d6b9d647f750.js +1 -0
  553. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-9247d6b9d647f750.js +1 -0
  554. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-9247d6b9d647f750.js +1 -0
  555. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-9247d6b9d647f750.js +1 -0
  556. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-9247d6b9d647f750.js +1 -0
  557. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-9247d6b9d647f750.js +1 -0
  558. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-9247d6b9d647f750.js +1 -0
  559. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-9247d6b9d647f750.js +1 -0
  560. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-9247d6b9d647f750.js +1 -0
  561. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-9247d6b9d647f750.js +1 -0
  562. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-9247d6b9d647f750.js +1 -0
  563. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-9247d6b9d647f750.js +1 -0
  564. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-9247d6b9d647f750.js +1 -0
  565. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-9247d6b9d647f750.js +1 -0
  566. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-9247d6b9d647f750.js +1 -0
  567. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-9247d6b9d647f750.js +1 -0
  568. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-9247d6b9d647f750.js +1 -0
  569. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-9247d6b9d647f750.js +1 -0
  570. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-9247d6b9d647f750.js +1 -0
  571. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-9247d6b9d647f750.js +1 -0
  572. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-9247d6b9d647f750.js +1 -0
  573. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-9247d6b9d647f750.js +1 -0
  574. package/.next/static/chunks/app/api/worktrees/[id]/route-9247d6b9d647f750.js +1 -0
  575. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-9247d6b9d647f750.js +1 -0
  576. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-9247d6b9d647f750.js +1 -0
  577. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-9247d6b9d647f750.js +1 -0
  578. package/.next/static/chunks/app/api/worktrees/[id]/search/route-9247d6b9d647f750.js +1 -0
  579. package/.next/static/chunks/app/api/worktrees/[id]/send/route-9247d6b9d647f750.js +1 -0
  580. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-9247d6b9d647f750.js +1 -0
  581. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-9247d6b9d647f750.js +1 -0
  582. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-9247d6b9d647f750.js +1 -0
  583. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-9247d6b9d647f750.js +1 -0
  584. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-9247d6b9d647f750.js +1 -0
  585. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-9247d6b9d647f750.js +1 -0
  586. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-9247d6b9d647f750.js +1 -0
  587. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-9247d6b9d647f750.js +1 -0
  588. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-9247d6b9d647f750.js +1 -0
  589. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-9247d6b9d647f750.js +1 -0
  590. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-9247d6b9d647f750.js +1 -0
  591. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-9247d6b9d647f750.js +1 -0
  592. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-9247d6b9d647f750.js +1 -0
  593. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-9247d6b9d647f750.js +1 -0
  594. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-9247d6b9d647f750.js +1 -0
  595. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-9247d6b9d647f750.js +1 -0
  596. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-9247d6b9d647f750.js +1 -0
  597. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-9247d6b9d647f750.js +1 -0
  598. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-9247d6b9d647f750.js +1 -0
  599. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-9247d6b9d647f750.js +1 -0
  600. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-9247d6b9d647f750.js +1 -0
  601. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-9247d6b9d647f750.js +1 -0
  602. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-9247d6b9d647f750.js +1 -0
  603. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-9247d6b9d647f750.js +1 -0
  604. package/.next/static/chunks/app/api/worktrees/route-9247d6b9d647f750.js +1 -0
  605. package/.next/static/chunks/app/manifest.webmanifest/route-9247d6b9d647f750.js +1 -0
  606. package/.next/static/chunks/app/more/page-03867ab635d197c7.js +1 -0
  607. package/.next/static/chunks/app/proxy/[...path]/route-9247d6b9d647f750.js +1 -0
  608. package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +1 -0
  609. package/.next/static/chunks/app/worktrees/[id]/layout-9247d6b9d647f750.js +1 -0
  610. package/.next/static/chunks/app/worktrees/[id]/page-27b7cb2e77099eec.js +1 -0
  611. package/.next/static/chunks/app/worktrees/[id]/terminal/page-00ad5d9a62a71cab.js +1 -0
  612. package/.next/static/css/98722bc4152cedcc.css +1 -0
  613. package/.next/trace +13 -13
  614. package/.next/types/app/api/worktrees/[id]/instances/opencode/route.ts +347 -0
  615. package/.next/types/app/api/worktrees/[id]/opencode/diff/route.ts +347 -0
  616. package/.next/types/app/api/worktrees/[id]/opencode/session/route.ts +347 -0
  617. package/.next/types/app/api/worktrees/[id]/opencode/share/route.ts +347 -0
  618. package/.next/types/routes.d.ts +5 -1
  619. package/.next/types/validator.ts +36 -0
  620. package/README.md +9 -1
  621. package/dist/cli/commands/init.d.ts.map +1 -1
  622. package/dist/cli/commands/init.js +66 -0
  623. package/dist/cli/commands/instances.d.ts.map +1 -1
  624. package/dist/cli/commands/instances.js +46 -1
  625. package/dist/cli/commands/interrupt.d.ts +25 -0
  626. package/dist/cli/commands/interrupt.d.ts.map +1 -0
  627. package/dist/cli/commands/interrupt.js +146 -0
  628. package/dist/cli/commands/report.d.ts.map +1 -1
  629. package/dist/cli/commands/report.js +11 -4
  630. package/dist/cli/commands/respond.d.ts.map +1 -1
  631. package/dist/cli/commands/respond.js +146 -1
  632. package/dist/cli/commands/status.d.ts.map +1 -1
  633. package/dist/cli/commands/status.js +104 -0
  634. package/dist/cli/commands/wait.d.ts.map +1 -1
  635. package/dist/cli/commands/wait.js +39 -1
  636. package/dist/cli/config/agent-target-options.d.ts +12 -0
  637. package/dist/cli/config/agent-target-options.d.ts.map +1 -1
  638. package/dist/cli/config/agent-target-options.js +15 -1
  639. package/dist/cli/docs/agent-operations.d.ts +1 -1
  640. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  641. package/dist/cli/docs/agent-operations.js +34 -0
  642. package/dist/cli/program.d.ts.map +1 -1
  643. package/dist/cli/program.js +6 -0
  644. package/dist/cli/types/api-responses.d.ts +375 -0
  645. package/dist/cli/types/api-responses.d.ts.map +1 -1
  646. package/dist/cli/types/index.d.ts +63 -0
  647. package/dist/cli/types/index.d.ts.map +1 -1
  648. package/dist/cli/types/index.js +31 -1
  649. package/dist/cli/utils/daemon.d.ts.map +1 -1
  650. package/dist/cli/utils/daemon.js +3 -0
  651. package/dist/cli/utils/env-setup.d.ts +24 -0
  652. package/dist/cli/utils/env-setup.d.ts.map +1 -1
  653. package/dist/cli/utils/env-setup.js +70 -0
  654. package/dist/cli/utils/vapid-keygen.d.ts +74 -0
  655. package/dist/cli/utils/vapid-keygen.d.ts.map +1 -0
  656. package/dist/cli/utils/vapid-keygen.js +111 -0
  657. package/dist/lib/cli-tools/types.d.ts +11 -1
  658. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  659. package/dist/lib/detection/tools/verified-against.d.ts +14 -3
  660. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  661. package/dist/lib/detection/tools/verified-against.js +14 -3
  662. package/dist/lib/push/vapid.d.ts +178 -0
  663. package/dist/lib/push/vapid.d.ts.map +1 -0
  664. package/dist/lib/push/vapid.js +293 -0
  665. package/dist/lib/server/localhost-self-check.d.ts +203 -0
  666. package/dist/lib/server/localhost-self-check.d.ts.map +1 -0
  667. package/dist/lib/server/localhost-self-check.js +333 -0
  668. package/dist/server/locales/en/notifications.json +23 -1
  669. package/dist/server/locales/ja/notifications.json +23 -1
  670. package/dist/server/server.js +103 -0
  671. package/dist/server/src/config/image-extensions.js +244 -0
  672. package/dist/server/src/config/opencode-constants.js +69 -0
  673. package/dist/server/src/config/tmux-pane-config.js +100 -1
  674. package/dist/server/src/lib/cli-tools/base.js +33 -48
  675. package/dist/server/src/lib/cli-tools/opencode-config.js +12 -0
  676. package/dist/server/src/lib/cli-tools/opencode.js +435 -7
  677. package/dist/server/src/lib/cli-tools/start-availability.js +160 -0
  678. package/dist/server/src/lib/cmate-cli-tool-parser.js +328 -7
  679. package/dist/server/src/lib/cmate-parser.js +12 -0
  680. package/dist/server/src/lib/db/agent-instances-db.js +129 -0
  681. package/dist/server/src/lib/db/agent-session-cost-db.js +204 -0
  682. package/dist/server/src/lib/db/agent-session-cost-sampler.js +194 -0
  683. package/dist/server/src/lib/db/chat-db.js +33 -0
  684. package/dist/server/src/lib/db/db-instance.js +11 -0
  685. package/dist/server/src/lib/db/db.js +8 -3
  686. package/dist/server/src/lib/db/migrations/index.js +6 -0
  687. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  688. package/dist/server/src/lib/db/migrations/v57-push-subscription-defaults-notice.js +54 -0
  689. package/dist/server/src/lib/db/migrations/v58-agent-session-costs.js +100 -0
  690. package/dist/server/src/lib/db/migrations/v59-opencode-instance-settings.js +71 -0
  691. package/dist/server/src/lib/db/push-subscriptions-db.js +56 -5
  692. package/dist/server/src/lib/detection/cli-patterns.js +17 -6
  693. package/dist/server/src/lib/detection/excerpt.js +48 -0
  694. package/dist/server/src/lib/detection/model-info-extractor.js +26 -3
  695. package/dist/server/src/lib/detection/opencode-modal-overlay.js +400 -0
  696. package/dist/server/src/lib/detection/opencode-pane-obstruction.js +181 -0
  697. package/dist/server/src/lib/detection/status-detector.js +7 -0
  698. package/dist/server/src/lib/detection/status-reason.js +20 -0
  699. package/dist/server/src/lib/detection/terminal-columns.js +94 -0
  700. package/dist/server/src/lib/detection/tools/opencode/detect.js +43 -0
  701. package/dist/server/src/lib/detection/tools/opencode/prompt.js +20 -0
  702. package/dist/server/src/lib/detection/tools/verified-against.js +14 -3
  703. package/dist/server/src/lib/detection/upstream-faults.js +7 -22
  704. package/dist/server/src/lib/hooks/agent-session-telemetry.js +324 -0
  705. package/dist/server/src/lib/hooks/pending-decision-kind.js +72 -0
  706. package/dist/server/src/lib/hooks/sources/define-source.js +88 -0
  707. package/dist/server/src/lib/hooks/sources/opencode/client.js +907 -2
  708. package/dist/server/src/lib/hooks/sources/opencode/diff.js +336 -0
  709. package/dist/server/src/lib/hooks/sources/opencode/history.js +480 -0
  710. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +76 -7
  711. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +222 -0
  712. package/dist/server/src/lib/hooks/sources/opencode/mappers.js +31 -0
  713. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +45 -0
  714. package/dist/server/src/lib/hooks/sources/opencode/ports.js +16 -0
  715. package/dist/server/src/lib/hooks/sources/opencode/push.js +307 -0
  716. package/dist/server/src/lib/hooks/sources/opencode/reattach.js +284 -0
  717. package/dist/server/src/lib/hooks/sources/opencode/runtime.js +165 -2
  718. package/dist/server/src/lib/hooks/sources/opencode/source.js +46 -2
  719. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +407 -4
  720. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +383 -0
  721. package/dist/server/src/lib/hooks/structured-decision-response.js +460 -0
  722. package/dist/server/src/lib/job-executor.js +43 -20
  723. package/dist/server/src/lib/polling/response-checker.js +43 -16
  724. package/dist/server/src/lib/polling/structured-history-gate.js +75 -0
  725. package/dist/server/src/lib/prompt-answer-sender.js +153 -2
  726. package/dist/server/src/lib/push/delivery-health.js +237 -0
  727. package/dist/server/src/lib/push/failure-push-notifier.js +109 -7
  728. package/dist/server/src/lib/push/index.js +25 -1
  729. package/dist/server/src/lib/push/prompt-card-state.js +254 -14
  730. package/dist/server/src/lib/push/push-sender.js +63 -12
  731. package/dist/server/src/lib/push/resolution-push-notifier.js +15 -3
  732. package/dist/server/src/lib/push/vapid.js +264 -5
  733. package/dist/server/src/lib/push/waiting-push-notifier.js +7 -0
  734. package/dist/server/src/lib/server/localhost-self-check.js +333 -0
  735. package/dist/server/src/lib/session/agent-event-state.js +169 -4
  736. package/dist/server/src/lib/session/claude-executor.js +152 -15
  737. package/dist/server/src/lib/session/current-output-builder.js +182 -15
  738. package/dist/server/src/lib/session/opencode-session-api.js +214 -0
  739. package/dist/server/src/lib/session/opencode-session-recall.js +168 -0
  740. package/dist/server/src/lib/session/opencode-session-store.js +274 -0
  741. package/dist/server/src/lib/session/provisional-turn.js +54 -1
  742. package/dist/server/src/lib/session/send-user-message.js +6 -5
  743. package/dist/server/src/lib/session/structured-prompt.js +53 -2
  744. package/dist/server/src/lib/skills/compatibility-matrix.js +50 -1
  745. package/dist/server/src/lib/tmux/tmux.js +74 -4
  746. package/dist/server/src/lib/verification/gate-runner.js +71 -8
  747. package/dist/server/src/types/agent-session.js +63 -0
  748. package/dist/server/src/types/agent-transcript.js +80 -0
  749. package/dist/server/src/types/opencode-export.js +228 -0
  750. package/dist/server/src/types/opencode-instance-settings.js +140 -0
  751. package/dist/server/src/types/opencode-share.js +111 -0
  752. package/dist/server/src/types/terminal-keys.js +69 -1
  753. package/dist/types/cli-tool-contracts.d.ts +48 -0
  754. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  755. package/dist/types/terminal-keys.d.ts +89 -0
  756. package/dist/types/terminal-keys.d.ts.map +1 -0
  757. package/dist/types/terminal-keys.js +105 -0
  758. package/package.json +1 -1
  759. package/.next/server/chunks/1029.js +0 -1
  760. package/.next/server/chunks/1239.js +0 -1
  761. package/.next/server/chunks/1538.js +0 -7
  762. package/.next/server/chunks/2546.js +0 -1
  763. package/.next/server/chunks/2689.js +0 -13
  764. package/.next/server/chunks/3292.js +0 -1
  765. package/.next/server/chunks/3417.js +0 -1
  766. package/.next/server/chunks/3736.js +0 -1
  767. package/.next/server/chunks/4423.js +0 -1
  768. package/.next/server/chunks/4444.js +0 -32
  769. package/.next/server/chunks/4565.js +0 -3
  770. package/.next/server/chunks/467.js +0 -1
  771. package/.next/server/chunks/4905.js +0 -5
  772. package/.next/server/chunks/552.js +0 -19
  773. package/.next/server/chunks/5998.js +0 -74
  774. package/.next/server/chunks/6919.js +0 -1
  775. package/.next/server/chunks/7970.js +0 -229
  776. package/.next/server/chunks/8536.js +0 -1
  777. package/.next/server/chunks/9284.js +0 -1
  778. package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +0 -1
  779. package/.next/static/chunks/6381-b7250e8ca7a44c6c.js +0 -1
  780. package/.next/static/chunks/8521-c43994fb58501d13.js +0 -1
  781. package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +0 -1
  782. package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +0 -1
  783. package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +0 -1
  784. package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +0 -1
  785. package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +0 -1
  786. package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +0 -1
  787. package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +0 -1
  788. package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +0 -1
  789. package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +0 -1
  790. package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +0 -1
  791. package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +0 -1
  792. package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +0 -1
  793. package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +0 -1
  794. package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +0 -1
  795. package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +0 -1
  796. package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +0 -1
  797. package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +0 -1
  798. package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +0 -1
  799. package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +0 -1
  800. package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +0 -1
  801. package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +0 -1
  802. package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +0 -1
  803. package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +0 -1
  804. package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +0 -1
  805. package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +0 -1
  806. package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +0 -1
  807. package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +0 -1
  808. package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +0 -1
  809. package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +0 -1
  810. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +0 -1
  811. package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +0 -1
  812. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +0 -1
  813. package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +0 -1
  814. package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +0 -1
  815. package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +0 -1
  816. package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +0 -1
  817. package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +0 -1
  818. package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +0 -1
  819. package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +0 -1
  820. package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +0 -1
  821. package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +0 -1
  822. package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +0 -1
  823. package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +0 -1
  824. package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +0 -1
  825. package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +0 -1
  826. package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +0 -1
  827. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +0 -1
  828. package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +0 -1
  829. package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +0 -1
  830. package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +0 -1
  831. package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +0 -1
  832. package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +0 -1
  833. package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +0 -1
  834. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +0 -1
  835. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +0 -1
  836. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +0 -1
  837. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +0 -1
  838. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +0 -1
  839. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +0 -1
  840. package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +0 -1
  841. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +0 -1
  842. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +0 -1
  843. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +0 -1
  844. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +0 -1
  845. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +0 -1
  846. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +0 -1
  847. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +0 -1
  848. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +0 -1
  849. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +0 -1
  850. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +0 -1
  851. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +0 -1
  852. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +0 -1
  853. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +0 -1
  854. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +0 -1
  855. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +0 -1
  856. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +0 -1
  857. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +0 -1
  858. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +0 -1
  859. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +0 -1
  860. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +0 -1
  861. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +0 -1
  862. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +0 -1
  863. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +0 -1
  864. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +0 -1
  865. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +0 -1
  866. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +0 -1
  867. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +0 -1
  868. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +0 -1
  869. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +0 -1
  870. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +0 -1
  871. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +0 -1
  872. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +0 -1
  873. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +0 -1
  874. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +0 -1
  875. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +0 -1
  876. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +0 -1
  877. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +0 -1
  878. package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +0 -1
  879. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +0 -1
  880. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +0 -1
  881. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +0 -1
  882. package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +0 -1
  883. package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +0 -1
  884. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +0 -1
  885. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +0 -1
  886. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +0 -1
  887. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +0 -1
  888. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +0 -1
  889. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +0 -1
  890. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +0 -1
  891. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +0 -1
  892. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +0 -1
  893. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +0 -1
  894. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +0 -1
  895. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +0 -1
  896. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +0 -1
  897. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +0 -1
  898. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +0 -1
  899. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +0 -1
  900. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +0 -1
  901. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +0 -1
  902. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +0 -1
  903. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +0 -1
  904. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +0 -1
  905. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +0 -1
  906. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +0 -1
  907. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +0 -1
  908. package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +0 -1
  909. package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +0 -1
  910. package/.next/static/chunks/app/more/page-3266dfa945972649.js +0 -1
  911. package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +0 -1
  912. package/.next/static/chunks/app/review/page-8f63aff862fee421.js +0 -1
  913. package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +0 -1
  914. package/.next/static/chunks/app/worktrees/[id]/page-e4f28966b4fc0ce1.js +0 -1
  915. package/.next/static/chunks/app/worktrees/[id]/terminal/page-a75fe180a7233b2b.js +0 -1
  916. package/.next/static/css/928e5a8830fbf997.css +0 -1
  917. /package/.next/static/{t0BoV4H46ZgKmTjSi7GIz → 0GHE2JGlFzqvSBZAcBFSt}/_buildManifest.js +0 -0
  918. /package/.next/static/{t0BoV4H46ZgKmTjSi7GIz → 0GHE2JGlFzqvSBZAcBFSt}/_ssgManifest.js +0 -0
@@ -0,0 +1,460 @@
1
+ "use strict";
2
+ /**
3
+ * Answering an approval by decision id, for the sources that have one
4
+ * (Issue #1898-3).
5
+ *
6
+ * `commandmate respond` sends a keystroke. That is the only thing it could ever
7
+ * do for a screen-scraped dialog, and it is why the route it posts to
8
+ * (`/api/worktrees/:id/prompt-response`) re-captures the pane, runs
9
+ * `detectPrompt`, and refuses with `prompt_no_longer_active` when nothing
10
+ * parses. On opencode that refusal was the *normal* outcome: the structured
11
+ * layer knew perfectly well a dialog was open — `wait` said so, in a sentence
12
+ * telling the operator to use `respond` — and `respond` then exited 99, leaving
13
+ * pressing a key in the tmux pane as the only way to answer.
14
+ *
15
+ * The dialog was never the thing to answer. opencode's approval is a REST
16
+ * object with an id, held open until somebody replies to it (#1758 §5.5), and
17
+ * that is what this module answers.
18
+ *
19
+ * ## The capability gate
20
+ *
21
+ * {@link AgentSourceCapabilities.eventIdentity} — "where a frame-unique id for
22
+ * this source comes from" — is the declared value that decides whether an
23
+ * approval can be addressed at all, and it is read rather than inferred from a
24
+ * tool id (§4 D3 of `docs/design/multi-agent-state-architecture.md`). A source
25
+ * that publishes no per-decision id has nothing for `respond` to name, so it
26
+ * falls through to the pre-#1898 keystroke path unchanged.
27
+ *
28
+ * ## The scope rule (DR4-003 / S6)
29
+ *
30
+ * The decision id is **never taken from the caller**. It is read back from the
31
+ * source for the (worktree, tool, instance) the request already resolved to,
32
+ * and the answer selects among *those* by option number. A cross-instance or
33
+ * cross-worktree id therefore cannot be expressed, let alone delivered — the
34
+ * IDOR the design policy asks to be closed is closed by construction rather
35
+ * than by a lookup that has to remember to filter.
36
+ *
37
+ * ## Questions are answered here too, and NOT as verdicts (Issue #2039)
38
+ *
39
+ * Until #2039 a pending `question.asked` was declined outright, and the reason
40
+ * given was sound but was read as one reason too many: a question is answered
41
+ * with a *choice* from a list the agent supplied, not with one of the three
42
+ * approval verdicts, and its numbers are the picker's rather than these. All of
43
+ * that is still true. What #2039 adds is the *other* mapping — see
44
+ * {@link questionDecisionOptions} and {@link resolveStructuredQuestionAnswer},
45
+ * which turn an option number, an option label or free text into the
46
+ * `answers: string[][]` that `POST /question/:id/reply` takes, and produce a
47
+ * `{ kind: 'answer' }` verdict that no permission path can consume.
48
+ *
49
+ * The two vocabularies never meet. `resolveStructuredDecisionOption` resolves
50
+ * against {@link STRUCTURED_DECISION_OPTIONS} — three fixed verdicts — and the
51
+ * question resolver resolves against the choices *this question* published;
52
+ * neither falls back to the other. A verdict delivered to a question is refused
53
+ * at the source (`question-needs-answer-verdict` in `sources/opencode/source`)
54
+ * and an `answer` delivered to an approval has no wire value
55
+ * (`toOpencodePermissionReply` answers null), so a crossed wire fails closed on
56
+ * both sides rather than approving something.
57
+ *
58
+ * ## What is deliberately not answered here
59
+ *
60
+ * A question **selected off `listPending()` by this function**. See
61
+ * {@link answerStructuredDecision}: it goes on picking approvals only, because
62
+ * choosing to route a bare `commandmate respond <worktree> 2` onto a pending
63
+ * question is Issue #2040's decision (its rule is "exactly one pending decision,
64
+ * or 404/409"), and the mapping this module now exports is what #2040 calls when
65
+ * it makes it. The addressed path — `{ decisionId, answer }` — does not have
66
+ * that ambiguity to resolve and answers questions today: see
67
+ * `app/api/worktrees/[id]/respond/structured-decision`.
68
+ *
69
+ * A `permissionDecision` record. That field says what **this server** decided
70
+ * on the agent's behalf while nobody was looking, which is the thing that would
71
+ * otherwise be invisible; a verdict a person typed is already visible in the
72
+ * response they got back, and filing it there would make the field's own
73
+ * question ("did Auto-Yes approve something?") unanswerable.
74
+ *
75
+ * @module lib/hooks/structured-decision-response
76
+ */
77
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
78
+ if (k2 === undefined) k2 = k;
79
+ var desc = Object.getOwnPropertyDescriptor(m, k);
80
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
81
+ desc = { enumerable: true, get: function() { return m[k]; } };
82
+ }
83
+ Object.defineProperty(o, k2, desc);
84
+ }) : (function(o, m, k, k2) {
85
+ if (k2 === undefined) k2 = k;
86
+ o[k2] = m[k];
87
+ }));
88
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
89
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
90
+ }) : function(o, v) {
91
+ o["default"] = v;
92
+ });
93
+ var __importStar = (this && this.__importStar) || (function () {
94
+ var ownKeys = function(o) {
95
+ ownKeys = Object.getOwnPropertyNames || function (o) {
96
+ var ar = [];
97
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
98
+ return ar;
99
+ };
100
+ return ownKeys(o);
101
+ };
102
+ return function (mod) {
103
+ if (mod && mod.__esModule) return mod;
104
+ var result = {};
105
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
106
+ __setModuleDefault(result, mod);
107
+ return result;
108
+ };
109
+ })();
110
+ Object.defineProperty(exports, "__esModule", { value: true });
111
+ exports.MAX_QUESTION_FREE_TEXT_LENGTH = exports.STRUCTURED_REJECT_MESSAGE = void 0;
112
+ exports.resolveStructuredDecisionOption = resolveStructuredDecisionOption;
113
+ exports.questionDecisionOptions = questionDecisionOptions;
114
+ exports.resolveStructuredQuestionAnswer = resolveStructuredQuestionAnswer;
115
+ exports.questionAnswerVerdict = questionAnswerVerdict;
116
+ exports.answerStructuredDecision = answerStructuredDecision;
117
+ const logger_1 = require("../../lib/logger");
118
+ const structured_prompt_1 = require("../../lib/session/structured-prompt");
119
+ const pending_decisions_1 = require("./sources/pending-decisions");
120
+ const registry_1 = require("./sources/registry");
121
+ const agent_event_types_1 = require("./agent-event-types");
122
+ const logger = (0, logger_1.createLogger)('lib/hooks/structured-decision-response');
123
+ /** The message a rejection carries to the agent. It reaches it verbatim. */
124
+ exports.STRUCTURED_REJECT_MESSAGE = 'Rejected by the operator via `commandmate respond`.';
125
+ /**
126
+ * Spellings each verdict accepts, beyond its own number and `reply` word.
127
+ *
128
+ * `yes` resolves to **once** rather than to `always`, and that asymmetry is the
129
+ * safety rule this whole subsystem is built on: a wrong allow executes a
130
+ * command, so an ambiguous approval takes the narrowest of the two. `no`
131
+ * resolves to `reject` because there is nothing narrower for it to mean.
132
+ *
133
+ * Resolving words at all is safe *here* and nowhere else. #1681's rule — that
134
+ * `respond <id> no` must never be sent at a numbered dialog — is about
135
+ * keystrokes: Enter takes whatever the cursor is on, so a word that is not a
136
+ * number arrives as the highlighted default. Nothing is typed on this path; the
137
+ * word picks a verdict, and the verdict is POSTed by name.
138
+ */
139
+ const VERDICT_ALIASES = {
140
+ 1: ['once', 'allow once', 'allow', 'yes', 'y'],
141
+ 2: ['always', 'allow always', 'allow-always'],
142
+ 3: ['reject', 'deny', 'no', 'n'],
143
+ };
144
+ /** The verdict each option number stands for. */
145
+ function verdictFor(optionNumber) {
146
+ switch (optionNumber) {
147
+ case 1:
148
+ return { kind: 'allowOnce' };
149
+ case 2:
150
+ return { kind: 'allowAlways' };
151
+ case 3:
152
+ return { kind: 'deny', message: exports.STRUCTURED_REJECT_MESSAGE };
153
+ default:
154
+ return null;
155
+ }
156
+ }
157
+ /**
158
+ * Resolve an answer against the option list.
159
+ *
160
+ * @returns The option, or null when nothing matched
161
+ */
162
+ function resolveStructuredDecisionOption(answer) {
163
+ const normalized = answer.trim().toLowerCase();
164
+ if (normalized === '')
165
+ return null;
166
+ for (const option of structured_prompt_1.STRUCTURED_DECISION_OPTIONS) {
167
+ if (normalized === String(option.number))
168
+ return option;
169
+ if (normalized === option.label.toLowerCase())
170
+ return option;
171
+ if (normalized === option.reply)
172
+ return option;
173
+ if ((VERDICT_ALIASES[option.number] ?? []).includes(normalized))
174
+ return option;
175
+ }
176
+ return null;
177
+ }
178
+ // =============================================================================
179
+ // Questions (Issue #2039)
180
+ // =============================================================================
181
+ /**
182
+ * Cap on a free-text answer to a question.
183
+ *
184
+ * The same bound `ask-user-question-payload` puts on the question TEXT, applied
185
+ * to the reply for the symmetric reason: both are prose that reaches the agent
186
+ * verbatim, and the request body this is read from is whatever a caller chose to
187
+ * POST. **Refused, never truncated** — the rule #1932 states for ids holds for
188
+ * prose too, one step weaker: a truncated id answers the wrong approval, and a
189
+ * truncated sentence answers the right question with something the operator did
190
+ * not say.
191
+ */
192
+ exports.MAX_QUESTION_FREE_TEXT_LENGTH = 1000;
193
+ /**
194
+ * The choices one question offers, numbered the way `respond` numbers them
195
+ * (Issue #2039).
196
+ *
197
+ * Shaped as {@link StructuredDecisionOption} on purpose, and this is the design
198
+ * judgement to know about rather than an economy of types. Issue #2040 maps a
199
+ * bare `commandmate respond <worktree> <n>` onto whatever single decision an
200
+ * instance is holding, and it must be able to do that without asking which KIND
201
+ * of decision it is: an approval publishes three fixed verdicts, a question
202
+ * publishes its own list, and both come back as `{ number, label, reply }`. What
203
+ * `reply` MEANS still differs — for a verdict it is opencode's wire word
204
+ * (`once` / `always` / `reject`), for a choice it is the label itself, which is
205
+ * exactly what `answers: string[][]` carries — but neither caller has to know
206
+ * that, because the value goes straight onto the wire in both cases.
207
+ *
208
+ * Only the first question is numbered. See
209
+ * {@link resolveStructuredQuestionAnswer} for why a multi-question call is
210
+ * refused rather than partially answered.
211
+ *
212
+ * @param spec - The question the agent published
213
+ * @returns One option per choice, 1-based in payload order; empty when the spec
214
+ * carries no questions
215
+ */
216
+ function questionDecisionOptions(spec) {
217
+ const entry = spec.questions[0];
218
+ if (!entry)
219
+ return [];
220
+ return entry.choices.map((choice, index) => ({
221
+ number: index + 1,
222
+ label: choice.label,
223
+ // The wire value for a question IS the label (#1758 §5.2.4:
224
+ // `{"answers":[["Blue"]]}`), so `reply` is not a second spelling of it.
225
+ reply: choice.label,
226
+ }));
227
+ }
228
+ /**
229
+ * A selection is written as digits, optionally several of them.
230
+ *
231
+ * Anchored and digits-only so it can never half-match: `1,3` is a selection,
232
+ * `1 apple` is not, and the fall-through for anything that is not a selection is
233
+ * a label match and then free text. The order matters — a numeric answer is
234
+ * resolved as a NUMBER first and refused if it is out of range, rather than
235
+ * quietly becoming free text, because "3" typed at a two-option question is an
236
+ * operator who miscounted and not an operator who meant to say the word three.
237
+ */
238
+ const QUESTION_SELECTION_PATTERN = /^\d+(?:\s*[,\s]\s*\d+)*$/;
239
+ /** The `1 = Red, 2 = Blue` list every refusal quotes back. */
240
+ function describeQuestionOptions(options) {
241
+ return options.map((option) => `${option.number} = ${option.label}`).join(', ');
242
+ }
243
+ /**
244
+ * Turn an operator's answer into the `answers` a question reply carries
245
+ * (Issue #2039).
246
+ *
247
+ * Three forms, resolved in this order:
248
+ *
249
+ * 1. **option numbers** — `2`, or `1,3` when the agent declared `multiSelect`.
250
+ * Resolved against {@link questionDecisionOptions}, so the numbers are the
251
+ * payload's own order rather than a screen's.
252
+ * 2. **an option label** — `Blue`, case-insensitively. The same convenience
253
+ * `resolveStructuredDecisionOption` offers, and safe for the same reason:
254
+ * nothing is typed at a pane, so #1681's "a word arrives as the highlighted
255
+ * default" cannot happen here.
256
+ * 3. **free text** — anything else, sent as the single answer.
257
+ *
258
+ * ## Why a multi-question call is refused
259
+ *
260
+ * `answers` is one array PER QUESTION, in payload order (#1758 §5.2.4). A single
261
+ * answer string can name choices for one of them, and there is no measured
262
+ * meaning for the arrays belonging to the others — an empty array is not known
263
+ * to mean "skip". Answering the first and guessing the rest would deliver an
264
+ * answer the operator did not give, so a call carrying more than one question is
265
+ * refused and the terminal keeps it. Every `question.asked` captured so far
266
+ * carries exactly one (`tests/fixtures/hooks/opencode/question-asked.json`), and
267
+ * the browser payload only ever summarises the first
268
+ * (`summarizeAskUserQuestion`), so this is the honest bound rather than a
269
+ * shortcut.
270
+ *
271
+ * @param spec - The question, as `listPending()` reported it
272
+ * @param answer - What the operator sent
273
+ * @returns The reply, or the reason it is not one
274
+ */
275
+ function resolveStructuredQuestionAnswer(spec, answer) {
276
+ const trimmed = answer.trim();
277
+ if (trimmed === '') {
278
+ return {
279
+ ok: false,
280
+ reason: 'unresolvable_answer',
281
+ message: 'An empty answer names no choice.',
282
+ };
283
+ }
284
+ if (spec.questions.length !== 1) {
285
+ return {
286
+ ok: false,
287
+ reason: 'multi_question_unsupported',
288
+ message: `This call asks ${spec.questions.length} questions and \`answers\` carries one array ` +
289
+ 'per question; a single answer cannot say what the others are. Answer it in the terminal.',
290
+ };
291
+ }
292
+ const entry = spec.questions[0];
293
+ const options = questionDecisionOptions(spec);
294
+ if (QUESTION_SELECTION_PATTERN.test(trimmed)) {
295
+ const picked = [];
296
+ for (const token of trimmed.split(/[,\s]+/)) {
297
+ const option = options.find((candidate) => candidate.number === Number(token));
298
+ if (!option) {
299
+ return {
300
+ ok: false,
301
+ reason: 'answer_out_of_range',
302
+ message: `'${trimmed}' names no choice this question offers. ` +
303
+ `${describeQuestionOptions(options)}.`,
304
+ };
305
+ }
306
+ // A repeated number is the same choice, not a second one — de-duplicated
307
+ // here so `1,1` cannot make a single-select answer look like two.
308
+ if (!picked.some((already) => already.number === option.number))
309
+ picked.push(option);
310
+ }
311
+ if (picked.length > 1 && !entry.multiSelect) {
312
+ return {
313
+ ok: false,
314
+ reason: 'multi_select_not_offered',
315
+ message: 'This question accepts one choice. Send a single number: ' +
316
+ `${describeQuestionOptions(options)}.`,
317
+ };
318
+ }
319
+ return {
320
+ ok: true,
321
+ resolved: {
322
+ answers: [picked.map((option) => option.reply)],
323
+ selected: picked,
324
+ freeText: false,
325
+ },
326
+ };
327
+ }
328
+ const labelled = options.find((option) => option.label.toLowerCase() === trimmed.toLowerCase());
329
+ if (labelled) {
330
+ return {
331
+ ok: true,
332
+ resolved: { answers: [[labelled.reply]], selected: [labelled], freeText: false },
333
+ };
334
+ }
335
+ if (trimmed.length > exports.MAX_QUESTION_FREE_TEXT_LENGTH) {
336
+ return {
337
+ ok: false,
338
+ reason: 'unresolvable_answer',
339
+ message: `A free-text answer is limited to ${exports.MAX_QUESTION_FREE_TEXT_LENGTH} characters; ` +
340
+ 'this one is longer and is refused rather than cut short.',
341
+ };
342
+ }
343
+ return { ok: true, resolved: { answers: [[trimmed]], selected: [], freeText: true } };
344
+ }
345
+ /**
346
+ * The verdict a resolved question answer is delivered as (Issue #2039).
347
+ *
348
+ * A one-line constructor rather than an inline object literal, because the
349
+ * `answer` member of {@link Verdict} is the only one that carries a payload and
350
+ * building it beside the permission verdicts is how the two get confused.
351
+ */
352
+ function questionAnswerVerdict(resolved) {
353
+ return { kind: 'answer', answers: resolved.answers };
354
+ }
355
+ /**
356
+ * Answer the approval this instance is blocked on, if it has one.
357
+ *
358
+ * Never throws. Every failure resolves to `not-applicable`, which puts the
359
+ * caller back on the path it took before this module existed — the same
360
+ * fail-open rule the adjudicator follows, for the same reason: a `respond` that
361
+ * cannot reach the structured layer must still be able to press a key.
362
+ *
363
+ * `--default` is refused rather than guessed. There is a highlighted option in
364
+ * the TUI, but nothing on the wire says which, and inventing one would make
365
+ * `respond --default` approve a command on the strength of an assumption.
366
+ */
367
+ async function answerStructuredDecision({ worktreeId, cliToolId, instanceId, answer, useDefault = false, }) {
368
+ const source = (0, registry_1.getAgentEventSource)(cliToolId);
369
+ if (source.capabilities.eventIdentity === null) {
370
+ return { kind: 'not-applicable', reason: 'no-decision-identity' };
371
+ }
372
+ const target = { worktreeId, cliToolId, instanceId };
373
+ let pending;
374
+ try {
375
+ pending = await source.listPending(target);
376
+ }
377
+ catch (error) {
378
+ logger.warn('structured-decision-unreachable', {
379
+ worktreeId,
380
+ cliToolId,
381
+ instanceId: instanceId ?? cliToolId,
382
+ error: error instanceof Error ? error.message : String(error),
383
+ });
384
+ return { kind: 'not-applicable', reason: 'source-unreachable' };
385
+ }
386
+ const permissions = pending.filter((decision) => decision.kind === 'permission');
387
+ if (permissions.length === 0) {
388
+ return { kind: 'not-applicable', reason: 'no-pending-decision' };
389
+ }
390
+ // The oldest is the one a human has been looking at. `GET /permission` lists
391
+ // them in the order the agent raised them, and an agent asks one thing at a
392
+ // time, so this is a tie-break rather than a policy — but it has to be
393
+ // written down, because answering the newest would silently approve the wrong
394
+ // command on the day it is not a tie.
395
+ const decision = permissions[0];
396
+ if (permissions.length > 1) {
397
+ logger.info('structured-decision-multiple-pending', {
398
+ worktreeId,
399
+ cliToolId,
400
+ instanceId: instanceId ?? cliToolId,
401
+ pending: permissions.length,
402
+ answering: decision.id,
403
+ });
404
+ }
405
+ if (useDefault) {
406
+ return {
407
+ kind: 'refused',
408
+ reason: 'unresolvable_answer',
409
+ message: '--default cannot answer a structured approval: the agent publishes no default verdict. ' +
410
+ `Send a number instead — ${structured_prompt_1.STRUCTURED_DECISION_OPTIONS.map((option) => `${option.number} = ${option.label}`).join(', ')}.`,
411
+ };
412
+ }
413
+ const option = answer === undefined ? null : resolveStructuredDecisionOption(answer);
414
+ if (!option) {
415
+ return {
416
+ kind: 'refused',
417
+ reason: 'answer_out_of_range',
418
+ message: `'${answer ?? ''}' is not one of the verdicts this approval accepts. ` +
419
+ structured_prompt_1.STRUCTURED_DECISION_OPTIONS.map((each) => `${each.number} = ${each.label} (${each.reply})`).join(', ') +
420
+ '.',
421
+ };
422
+ }
423
+ const verdict = verdictFor(option.number);
424
+ // Unreachable while the option list and `verdictFor` agree; refusing rather
425
+ // than asserting keeps a future fourth option from being delivered as an
426
+ // allow by accident.
427
+ if (!verdict) {
428
+ return {
429
+ kind: 'refused',
430
+ reason: 'unresolvable_answer',
431
+ message: `Option ${option.number} has no verdict on this server.`,
432
+ };
433
+ }
434
+ const { delivery } = await (0, pending_decisions_1.answerPendingDecisionWithReceipt)(source, target, decision, verdict);
435
+ const delivered = delivery?.delivered === true;
436
+ if (delivered && source.capabilities.permissionReplyReleasesPrompt) {
437
+ // The same release the agent's own `permission.replied` frame would take,
438
+ // through the same state machine — and taken here as well because the frame
439
+ // may be seconds away and the operator is watching this response.
440
+ const { recordAgentEvent } = await Promise.resolve().then(() => __importStar(require('../../lib/session/agent-event-state')));
441
+ recordAgentEvent(worktreeId, cliToolId, instanceId, {
442
+ event: 'notification',
443
+ at: Date.now(),
444
+ detail: agent_event_types_1.PERMISSION_REPLIED_DETAIL,
445
+ sessionId: decision.conversationId,
446
+ decisionId: decision.id,
447
+ promptSettled: true,
448
+ });
449
+ }
450
+ logger.info('structured-decision-answered', {
451
+ worktreeId,
452
+ cliToolId,
453
+ instanceId: instanceId ?? cliToolId,
454
+ decisionId: decision.id,
455
+ optionNumber: option.number,
456
+ reply: option.reply,
457
+ delivered,
458
+ });
459
+ return { kind: 'answered', decisionId: decision.id, option, delivered };
460
+ }
@@ -14,7 +14,7 @@ exports.createExecutionLog = createExecutionLog;
14
14
  exports.updateExecutionLog = updateExecutionLog;
15
15
  exports.updateScheduleLastExecuted = updateScheduleLastExecuted;
16
16
  exports.recoverRunningLogs = recoverRunningLogs;
17
- exports.resolveModelOption = resolveModelOption;
17
+ exports.resolveScheduleExecuteOptions = resolveScheduleExecuteOptions;
18
18
  exports.executeSchedule = executeSchedule;
19
19
  const crypto_1 = require("crypto");
20
20
  const claude_executor_1 = require("./session/claude-executor");
@@ -101,33 +101,56 @@ function recoverRunningLogs() {
101
101
  }
102
102
  }
103
103
  // =============================================================================
104
- // Model Resolution
104
+ // Execution Option Resolution
105
105
  // =============================================================================
106
106
  /**
107
- * Resolve the model option for a scheduled execution (DR1-004).
107
+ * Resolve the CLI options for a scheduled execution (DR1-004, Issue #2044).
108
108
  *
109
- * Two sources, because a model reaches a schedule two different ways:
110
- * - **the CMATE.md CLI Tool column** (`<tool> --model <name>`), for every tool in
111
- * {@link TOOLS_WITH_MODEL_SUPPORT};
109
+ * Two sources, because what a schedule asks for reaches it two different ways:
110
+ *
111
+ * - **the CMATE.md CLI Tool column**, read by
112
+ * {@link resolveScheduleCommandOptions} — `--model` for every tool in
113
+ * `TOOLS_WITH_MODEL_SUPPORT`, plus opencode's `--agent` / `--variant` /
114
+ * `--continue` / `--title` for the ids in `TOOLS_WITH_RUN_OPTIONS`;
112
115
  * - **the DB** (`worktree.vibe_local_model`), for vibe-local, whose model is
113
116
  * chosen in the worktree's Agent settings rather than written in the file.
114
117
  *
115
- * Issue #1914: the first branch used to read `entry.cliToolId === 'copilot'`,
116
- * a second hard-coded copy of the parser's Set. That is what made
117
- * `buildCliArgs()`'s `opencode run -m …` branch unreachable the parser would
118
- * have to start accepting `opencode --model x` *and* somebody would have to
119
- * remember this line. Reading the Set means adding an id in one place wires the
120
- * whole path, and a tool added to the Set can no longer have its model silently
121
- * dropped here.
118
+ * ## Why the CMATE.md side is not implemented here (Issue #2044)
119
+ *
120
+ * This function was `resolveModelOption()` the name it still has in older
121
+ * docs and it inlined the CMATE.md rule as `if (entry.model &&
122
+ * TOOLS_WITH_MODEL_SUPPORT.has(...)) return { model: entry.model }`. That shape
123
+ * can express exactly one option, so when #2044 taught the column to say
124
+ * `opencode --agent plan --variant high`, the parser accepted it, the validator
125
+ * accepted it, the writer round-tripped it, `buildCliArgs()` knew what to do
126
+ * with it — and this line silently dropped all four flags. It is the same
127
+ * failure #1914 fixed one field earlier (a second hard-coded copy of the
128
+ * parser's Set), which is the argument for delegating rather than adding four
129
+ * more `if`s: the column's grammar is the parser's business, and a call site
130
+ * that re-states any part of it is a copy that will drift.
131
+ *
132
+ * The renaming is not cosmetic. "Model option" was true when `{ model }` was
133
+ * the only thing that could come back; a function that also carries an agent and
134
+ * a session title needs a name a reader can trust.
135
+ *
136
+ * ## Order
137
+ *
138
+ * CMATE.md first, DB second. The two are disjoint in practice — vibe-local is in
139
+ * neither Set, so `resolveScheduleCommandOptions()` always answers `undefined`
140
+ * for it — and the order is the one the previous implementation had, kept so
141
+ * that a tool later added to `TOOLS_WITH_MODEL_SUPPORT` *and* given a DB model
142
+ * resolves the file over the database, which is what "the schedule says so"
143
+ * should mean.
122
144
  *
123
145
  * @param entry - Schedule entry from CMATE.md
124
146
  * @param worktree - Worktree row from DB
125
- * @returns ExecuteCommandOptions with model, or undefined
147
+ * @returns Options to hand `executeClaudeCommand`, or undefined when the row
148
+ * asks for nothing beyond the tool's defaults
126
149
  */
127
- function resolveModelOption(entry, worktree) {
128
- if (entry.model && cmate_cli_tool_parser_1.TOOLS_WITH_MODEL_SUPPORT.has(entry.cliToolId)) {
129
- return { model: entry.model };
130
- }
150
+ function resolveScheduleExecuteOptions(entry, worktree) {
151
+ const fromCmate = (0, cmate_cli_tool_parser_1.resolveScheduleCommandOptions)(entry);
152
+ if (fromCmate)
153
+ return fromCmate;
131
154
  if (entry.cliToolId === 'vibe-local' && worktree.vibe_local_model) {
132
155
  return { model: worktree.vibe_local_model };
133
156
  }
@@ -160,8 +183,8 @@ async function executeSchedule(state) {
160
183
  updateExecutionLog(logId, 'failed', 'Worktree not found', null);
161
184
  return;
162
185
  }
163
- // Resolve model via centralized helper (DR1-004)
164
- const options = resolveModelOption(state.entry, worktree);
186
+ // Resolve the CLI options via the centralized helper (DR1-004, #2044)
187
+ const options = resolveScheduleExecuteOptions(state.entry, worktree);
165
188
  const result = await (0, claude_executor_1.executeClaudeCommand)(state.entry.message, worktree.path, state.entry.cliToolId, state.entry.permission, options);
166
189
  updateExecutionLog(logId, result.status, result.output, result.exitCode);
167
190
  updateScheduleLastExecuted(state.scheduleId);
@@ -27,6 +27,7 @@ const tui_accumulator_1 = require("../tui-accumulator");
27
27
  const prompt_dedup_1 = require("./prompt-dedup");
28
28
  const prompt_dedup_state_1 = require("./prompt-dedup-state");
29
29
  const response_dedup_1 = require("./response-dedup");
30
+ const structured_history_gate_1 = require("./structured-history-gate");
30
31
  const response_poller_core_1 = require("./response-poller-core");
31
32
  const push_1 = require("../../lib/push");
32
33
  // Issue #1790: imported by deep path, not through `@/lib/push`. Suites that
@@ -798,8 +799,19 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
798
799
  return false;
799
800
  }
800
801
  }
802
+ // Issue #2041: opencode's own server is publishing this reply as Markdown
803
+ // over the SSE stream `lib/hooks/sources/opencode/history` is writing from,
804
+ // so the scrape below would be a second copy of the same turn — the agent's
805
+ // text once as it wrote it and once as its TUI drew it, 200 columns wide.
806
+ //
807
+ // Read here rather than at the top of the function on purpose: everything
808
+ // above this line is bookkeeping the event stream has no second producer for
809
+ // (the prompt row, Auto-Yes, the waiting episode, the push fan-out), and the
810
+ // liveness answer is only allowed to suppress the two calls that RECORD THE
811
+ // REPLY. See `./structured-history-gate` for the whole argument.
812
+ const structuredHistoryLive = (0, structured_history_gate_1.isStructuredHistoryWriterLive)(worktreeId, cliToolId, instanceId);
801
813
  // Create Markdown log file for the conversation pair
802
- if (cleanedResponse) {
814
+ if (cleanedResponse && !structuredHistoryLive) {
803
815
  await (0, conversation_logger_1.recordClaudeConversation)(db, worktreeId, cleanedResponse, cliToolId);
804
816
  }
805
817
  // Mark any pending prompts as answered
@@ -815,21 +827,36 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
815
827
  logger.info('race-condition-detected-skipping-save-re');
816
828
  return false;
817
829
  }
818
- // Create new CLI tool message in database
819
- const message = (0, db_1.createMessage)(db, {
820
- worktreeId,
821
- role: 'assistant',
822
- content: cleanedResponse,
823
- messageType: 'normal',
824
- timestamp: new Date(),
825
- cliToolId,
826
- instanceId: resolvedInstanceId,
827
- summary: claudeMetadata?.summary,
828
- logFileName: claudeMetadata?.logFileName,
829
- requestId: claudeMetadata?.requestId,
830
- });
831
- // Broadcast message to WebSocket clients
832
- (0, ws_server_1.broadcastMessage)('message', { worktreeId, message });
830
+ // Issue #2041: the one write the structured path replaces. The scraped text
831
+ // is dropped, not saved-and-deduped, because the two renderings of one turn
832
+ // are not byte-comparable — the pane's copy is hard-wrapped at the pane
833
+ // width and gutter-prefixed, so no content check could ever recognise them
834
+ // as the same reply.
835
+ if (!structuredHistoryLive) {
836
+ // Create new CLI tool message in database
837
+ const message = (0, db_1.createMessage)(db, {
838
+ worktreeId,
839
+ role: 'assistant',
840
+ content: cleanedResponse,
841
+ messageType: 'normal',
842
+ timestamp: new Date(),
843
+ cliToolId,
844
+ instanceId: resolvedInstanceId,
845
+ summary: claudeMetadata?.summary,
846
+ logFileName: claudeMetadata?.logFileName,
847
+ requestId: claudeMetadata?.requestId,
848
+ });
849
+ // Broadcast message to WebSocket clients
850
+ (0, ws_server_1.broadcastMessage)('message', { worktreeId, message });
851
+ }
852
+ else {
853
+ logger.info('structured-history-scrape-suppressed', {
854
+ worktreeId,
855
+ cliToolId,
856
+ instanceId: resolvedInstanceId,
857
+ scrapedLength: cleanedResponse.length,
858
+ });
859
+ }
833
860
  // Issue #1790: the agent has just produced a reply, so whatever it was
834
861
  // waiting for is over. Closing the episode here is what makes a *second*
835
862
  // prompt in the same session notify again: without it a wait opened by the