commandmate 0.47.0 → 0.48.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 (696) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +501 -501
  3. package/.next/app-path-routes-manifest.json +34 -34
  4. package/.next/build-manifest.json +8 -8
  5. package/.next/diagnostics/framework.json +1 -1
  6. package/.next/next-minimal-server.js.nft.json +1 -1
  7. package/.next/next-server.js.nft.json +1 -1
  8. package/.next/prerender-manifest.json +12 -12
  9. package/.next/react-loadable-manifest.json +1 -1
  10. package/.next/required-server-files.json +1 -1
  11. package/.next/server/app/_not-found/page.js +2 -2
  12. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/agents/update/route.js +2 -2
  15. package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
  16. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/agents/versions/route.js +1 -1
  18. package/.next/server/app/api/agents/versions/route.js.nft.json +1 -1
  19. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/app/release-notes/route.js +1 -1
  21. package/.next/server/app/api/app/release-notes/route.js.nft.json +1 -1
  22. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/app/update/route.js +5 -5
  24. package/.next/server/app/api/app/update/route.js.nft.json +1 -1
  25. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/app/update-check/route.js +1 -1
  27. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
  28. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/auth/login/route.js +1 -1
  30. package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  31. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/auth/logout/route.js +1 -1
  33. package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  34. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/status/route.js +1 -1
  36. package/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  37. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/capabilities/route.js +1 -1
  39. package/.next/server/app/api/capabilities/route.js.nft.json +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 +2 -2
  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 +2 -2
  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.js +1 -1
  75. package/.next/server/app/api/ollama/models/route.js.nft.json +1 -1
  76. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/push/escalation/route.js +1 -1
  78. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  79. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  81. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  82. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/push/vapid/route.js +1 -1
  84. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  85. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  87. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  88. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/relays/route.js +1 -1
  90. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  91. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/remote/pair/route.js +2 -2
  93. package/.next/server/app/api/remote/pair/route.js.nft.json +1 -1
  94. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  96. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  97. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  99. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  100. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/repositories/clone/route.js +1 -1
  102. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  103. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  105. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  106. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/repositories/restore/route.js +1 -1
  108. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  109. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/repositories/route.js +1 -1
  111. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  112. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/repositories/scan/route.js +1 -1
  114. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  115. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/repositories/sync/route.js +1 -1
  117. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  118. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  120. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  121. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  123. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  124. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/settings/default-surface-mode/route.js +1 -1
  126. package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -1
  127. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  129. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  130. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/skills/[id]/route.js +1 -1
  132. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  133. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/skills/installations/route.js +1 -1
  135. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  136. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/skills/operations/route.js +2 -2
  138. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  139. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/skills/reindex/route.js +1 -1
  141. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  142. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/skills/route.js +1 -1
  144. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  145. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/slash-commands/route.js +1 -1
  147. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  148. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
  150. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  151. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  153. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  154. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/templates/[id]/route.js +1 -1
  156. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  157. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/templates/route.js +1 -1
  159. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  160. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  162. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  163. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/verification/runs/route.js +1 -1
  165. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  166. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  169. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  175. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -1
  178. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  181. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +7 -7
  183. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/env/route.js +2 -2
  192. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +3 -3
  198. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  253. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  256. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  259. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  262. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  268. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  271. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js.nft.json +1 -1
  274. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  277. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  280. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  283. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  286. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  289. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
  291. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  292. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  295. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  296. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  298. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  301. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  304. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  305. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  307. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  308. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  310. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  311. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  313. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  314. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  316. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  317. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  319. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  320. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  322. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  323. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  325. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  326. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  327. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  328. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  329. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  330. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  331. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  332. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  333. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  334. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  335. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  336. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  337. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  338. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  339. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  340. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  341. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +5 -5
  342. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  343. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  344. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  345. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  346. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  347. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  348. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  349. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  350. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  351. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  352. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  353. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  354. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  355. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  356. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  357. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  358. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  359. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  360. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  361. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  362. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  363. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  364. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  365. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  366. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  367. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  368. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  369. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  370. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  371. package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
  372. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  373. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  374. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -103
  375. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  376. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  377. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  378. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  379. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  380. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  381. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  382. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  383. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  384. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  385. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  386. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  387. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  388. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  389. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  390. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  391. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  392. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  393. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  394. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  395. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  396. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  397. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  398. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +2 -2
  399. package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -1
  400. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  401. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  402. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  403. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  404. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  405. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  406. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  407. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  408. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  409. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  410. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  411. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  412. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  413. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  414. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  415. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  416. package/.next/server/app/api/worktrees/apply-default-agents/route.js +1 -1
  417. package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -1
  418. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  419. package/.next/server/app/api/worktrees/route.js +1 -1
  420. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  421. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  422. package/.next/server/app/apple-icon.png/route.js +1 -1
  423. package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
  424. package/.next/server/app/apple-icon.png.meta +1 -1
  425. package/.next/server/app/icon.png/route.js +1 -1
  426. package/.next/server/app/icon.png/route.js.nft.json +1 -1
  427. package/.next/server/app/icon.png.meta +1 -1
  428. package/.next/server/app/icon1.png/route.js +1 -1
  429. package/.next/server/app/icon1.png/route.js.nft.json +1 -1
  430. package/.next/server/app/icon1.png.meta +1 -1
  431. package/.next/server/app/icon2.png/route.js +1 -1
  432. package/.next/server/app/icon2.png/route.js.nft.json +1 -1
  433. package/.next/server/app/icon2.png.meta +1 -1
  434. package/.next/server/app/login/page.js +2 -2
  435. package/.next/server/app/login/page.js.nft.json +1 -1
  436. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  437. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  438. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  439. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  440. package/.next/server/app/manifest.webmanifest.meta +1 -1
  441. package/.next/server/app/more/page.js +2 -2
  442. package/.next/server/app/more/page.js.nft.json +1 -1
  443. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  444. package/.next/server/app/offline/page.js +2 -2
  445. package/.next/server/app/offline/page.js.nft.json +1 -1
  446. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  447. package/.next/server/app/page.js +2 -2
  448. package/.next/server/app/page.js.nft.json +1 -1
  449. package/.next/server/app/page_client-reference-manifest.js +1 -1
  450. package/.next/server/app/proxy/[...path]/route.js +1 -1
  451. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  452. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  453. package/.next/server/app/repositories/page.js +2 -2
  454. package/.next/server/app/repositories/page.js.nft.json +1 -1
  455. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  456. package/.next/server/app/review/page.js +2 -2
  457. package/.next/server/app/review/page.js.nft.json +1 -1
  458. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  459. package/.next/server/app/sessions/page.js +2 -2
  460. package/.next/server/app/sessions/page.js.nft.json +1 -1
  461. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  462. package/.next/server/app/skills/[skillId]/page.js +2 -2
  463. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  464. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  465. package/.next/server/app/skills/installed/page.js +2 -2
  466. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  467. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  468. package/.next/server/app/skills/page.js +2 -2
  469. package/.next/server/app/skills/page.js.nft.json +1 -1
  470. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  471. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  472. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  473. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  474. package/.next/server/app/worktrees/[id]/page.js +12 -12
  475. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  476. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  477. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  478. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  479. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  480. package/.next/server/app-paths-manifest.json +34 -34
  481. package/.next/server/chunks/{5048.js → 1185.js} +1 -1
  482. package/.next/server/chunks/1191.js +11 -4
  483. package/.next/server/chunks/1501.js +1 -1
  484. package/.next/server/chunks/1601.js +2 -2
  485. package/.next/server/chunks/1656.js +19 -0
  486. package/.next/server/chunks/1945.js +3 -3
  487. package/.next/server/chunks/1990.js +103 -0
  488. package/.next/server/chunks/2119.js +1 -1
  489. package/.next/server/chunks/2404.js +1 -1
  490. package/.next/server/chunks/2422.js +1 -1
  491. package/.next/server/chunks/2445.js +1 -1
  492. package/.next/server/chunks/2534.js +1 -1
  493. package/.next/server/chunks/255.js +1 -0
  494. package/.next/server/chunks/3241.js +1 -1
  495. package/.next/server/chunks/3505.js +7 -0
  496. package/.next/server/chunks/3897.js +22 -0
  497. package/.next/server/chunks/4072.js +5 -5
  498. package/.next/server/chunks/4248.js +1 -1
  499. package/.next/server/chunks/4280.js +1 -0
  500. package/.next/server/chunks/463.js +1 -0
  501. package/.next/server/chunks/5209.js +1 -1
  502. package/.next/server/chunks/5611.js +1 -1
  503. package/.next/server/chunks/6119.js +1 -0
  504. package/.next/server/chunks/6130.js +1 -1
  505. package/.next/server/chunks/6345.js +1 -1
  506. package/.next/server/chunks/6401.js +1 -1
  507. package/.next/server/chunks/6486.js +9 -8
  508. package/.next/server/chunks/6781.js +1 -1
  509. package/.next/server/chunks/6784.js +1 -0
  510. package/.next/server/chunks/720.js +103 -0
  511. package/.next/server/chunks/7604.js +2 -0
  512. package/.next/server/chunks/7905.js +1 -1
  513. package/.next/server/chunks/8581.js +7 -7
  514. package/.next/server/chunks/8728.js +3 -3
  515. package/.next/server/chunks/8791.js +1 -1
  516. package/.next/server/chunks/8807.js +19 -18
  517. package/.next/server/chunks/8918.js +2 -104
  518. package/.next/server/chunks/9130.js +1 -1
  519. package/.next/server/chunks/936.js +1 -1
  520. package/.next/server/chunks/9390.js +1 -1
  521. package/.next/server/chunks/9540.js +1 -1
  522. package/.next/server/chunks/9627.js +4 -4
  523. package/.next/server/chunks/9731.js +3 -3
  524. package/.next/server/middleware-build-manifest.js +1 -1
  525. package/.next/server/middleware-manifest.json +5 -5
  526. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  527. package/.next/server/pages/500.html +1 -1
  528. package/.next/server/pages/_document.js.nft.json +1 -1
  529. package/.next/server/pages/_error.js +3 -3
  530. package/.next/server/pages/_error.js.nft.json +1 -1
  531. package/.next/server/server-reference-manifest.json +1 -1
  532. package/.next/server/src/middleware.js.map +1 -1
  533. package/.next/static/chunks/{1111.5ab4f0ffb0d944e5.js → 1111.1b653d4a9816a0a7.js} +8 -8
  534. package/.next/static/chunks/{1255-7e5873f06b25e129.js → 1255-a85690d352f4f8fd.js} +1 -1
  535. package/.next/static/chunks/2099-c3e0ab70a1b95dd3.js +1 -0
  536. package/.next/static/chunks/{2407-b2f524f99f7fc353.js → 2407-26139a8a2f1adbe8.js} +1 -1
  537. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  538. package/.next/static/chunks/{2863-6a07ec82fb52f4dd.js → 2863-f0121af1cbbedb3b.js} +1 -1
  539. package/.next/static/chunks/{8165-263172c17ae8e8c3.js → 8165-c68b3dc844210e6a.js} +1 -1
  540. package/.next/static/chunks/8407-35bbfc84793d7004.js +1 -0
  541. package/.next/static/chunks/9079-406b84d3cc891a87.js +1 -0
  542. package/.next/static/chunks/9465-b59bb255b376c813.js +1 -0
  543. package/.next/static/chunks/app/{layout-419eaf7de340f4ab.js → layout-46b4cbf07520d9b6.js} +1 -1
  544. package/.next/static/chunks/app/sessions/page-fb241bed579c67aa.js +1 -0
  545. package/.next/static/chunks/app/worktrees/[id]/page-cbc7749a33450cc5.js +1 -0
  546. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  547. package/.next/static/chunks/main-37ca13e38030fe8b.js +1 -0
  548. package/.next/static/chunks/{webpack-468b7b33030234b3.js → webpack-838df0273b03af19.js} +1 -1
  549. package/.next/trace +13 -13
  550. package/dist/cli/commands/auto-yes.d.ts +24 -0
  551. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  552. package/dist/cli/commands/auto-yes.js +73 -3
  553. package/dist/cli/commands/instances.d.ts.map +1 -1
  554. package/dist/cli/commands/instances.js +10 -1
  555. package/dist/cli/commands/prompt.d.ts.map +1 -1
  556. package/dist/cli/commands/prompt.js +28 -14
  557. package/dist/cli/commands/send.d.ts.map +1 -1
  558. package/dist/cli/commands/send.js +15 -0
  559. package/dist/cli/commands/wait.d.ts.map +1 -1
  560. package/dist/cli/commands/wait.js +108 -14
  561. package/dist/cli/docs/agent-operations.d.ts +2 -2
  562. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  563. package/dist/cli/docs/agent-operations.js +27 -0
  564. package/dist/cli/types/api-responses.d.ts +131 -4
  565. package/dist/cli/types/api-responses.d.ts.map +1 -1
  566. package/dist/cli/types/index.d.ts +4 -0
  567. package/dist/cli/types/index.d.ts.map +1 -1
  568. package/dist/cli/utils/resource-resolvers.d.ts +0 -18
  569. package/dist/cli/utils/resource-resolvers.d.ts.map +1 -1
  570. package/dist/cli/utils/resource-resolvers.js +1 -51
  571. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +65 -2
  572. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
  573. package/dist/lib/polling/auto-yes-suppression-reason.js +36 -2
  574. package/dist/lib/prompt-observation/types.d.ts +13 -0
  575. package/dist/lib/prompt-observation/types.d.ts.map +1 -1
  576. package/dist/server/locales/en/worktree.json +2 -1
  577. package/dist/server/locales/ja/worktree.json +2 -1
  578. package/dist/server/src/lib/auto-yes-poller-answer-target.js +38 -0
  579. package/dist/server/src/lib/auto-yes-poller-keys.js +35 -0
  580. package/dist/server/src/lib/auto-yes-poller-session-presence.js +26 -0
  581. package/dist/server/src/lib/auto-yes-poller-tick.js +233 -0
  582. package/dist/server/src/lib/auto-yes-poller.js +468 -792
  583. package/dist/server/src/lib/auto-yes-state.js +50 -2
  584. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +107 -14
  585. package/dist/server/src/lib/db/chat-db.js +5 -1
  586. package/dist/server/src/lib/db/verification-db.js +23 -2
  587. package/dist/server/src/lib/detection/option-recommendation.js +120 -0
  588. package/dist/server/src/lib/detection/prompt-detect-multiple-choice-approval-context.js +290 -0
  589. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +396 -268
  590. package/dist/server/src/lib/detection/prompt-detector.js +92 -21
  591. package/dist/server/src/lib/detection/prompt-screen-key.js +60 -0
  592. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +158 -35
  593. package/dist/server/src/lib/detection/tools/claude/detect.js +111 -10
  594. package/dist/server/src/lib/detection/tools/command-code/dialog.js +67 -0
  595. package/dist/server/src/lib/detection/tools/dialog-block.js +16 -0
  596. package/dist/server/src/lib/detection/waiting-screen-reading.js +98 -0
  597. package/dist/server/src/lib/hooks/permission-adjudication.js +26 -0
  598. package/dist/server/src/lib/hooks/permission-decision-service.js +49 -4
  599. package/dist/server/src/lib/hooks/permission-request-payload.js +20 -0
  600. package/dist/server/src/lib/hooks/sources/antigravity/source.js +21 -0
  601. package/dist/server/src/lib/hooks/sources/claude/source.js +3 -0
  602. package/dist/server/src/lib/hooks/sources/codex/source.js +2 -0
  603. package/dist/server/src/lib/hooks/sources/command-code/source.js +2 -0
  604. package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
  605. package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
  606. package/dist/server/src/lib/hooks/sources/legacy-relay.js +2 -0
  607. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +6 -0
  608. package/dist/server/src/lib/hooks/sources/opencode/source.js +2 -0
  609. package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +6 -0
  610. package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +2 -0
  611. package/dist/server/src/lib/hooks/sources/pending-decisions.js +14 -2
  612. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +14 -3
  613. package/dist/server/src/lib/polling/antigravity-receipt-episodes.js +21 -1
  614. package/dist/server/src/lib/polling/auto-yes-confirm-page.js +2 -2
  615. package/dist/server/src/lib/polling/auto-yes-confirmation-ledger-types.js +117 -0
  616. package/dist/server/src/lib/polling/auto-yes-confirmation-ledger.js +1091 -0
  617. package/dist/server/src/lib/polling/auto-yes-decision-state.js +195 -0
  618. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +139 -10
  619. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +14 -0
  620. package/dist/server/src/lib/polling/auto-yes-ledger-records.js +143 -0
  621. package/dist/server/src/lib/polling/auto-yes-manual-answer.js +122 -0
  622. package/dist/server/src/lib/polling/auto-yes-option-effect.js +157 -0
  623. package/dist/server/src/lib/polling/auto-yes-policy.js +46 -11
  624. package/dist/server/src/lib/polling/auto-yes-poller-capture.js +63 -0
  625. package/dist/server/src/lib/polling/auto-yes-poller-enter-fallback.js +37 -0
  626. package/dist/server/src/lib/polling/auto-yes-poller-generation.js +192 -0
  627. package/dist/server/src/lib/polling/auto-yes-poller-receipt-log.js +324 -0
  628. package/dist/server/src/lib/polling/auto-yes-poller-state.js +193 -26
  629. package/dist/server/src/lib/polling/auto-yes-poller-steps.js +279 -0
  630. package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +13 -2
  631. package/dist/server/src/lib/polling/auto-yes-question-choice.js +57 -0
  632. package/dist/server/src/lib/polling/auto-yes-resolver.js +117 -22
  633. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +36 -2
  634. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +25 -1
  635. package/dist/server/src/lib/polling/prompt-screen-reading.js +232 -0
  636. package/dist/server/src/lib/polling/response-checker-blank-response.js +30 -0
  637. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +39 -0
  638. package/dist/server/src/lib/polling/response-checker.js +138 -53
  639. package/dist/server/src/lib/prompt-answer-sender.js +104 -10
  640. package/dist/server/src/lib/prompt-observation/appearance.js +165 -0
  641. package/dist/server/src/lib/push/notification-dedup.js +15 -2
  642. package/dist/server/src/lib/push/prompt-card-state.js +140 -19
  643. package/dist/server/src/lib/push/prompt-push-gate.js +158 -12
  644. package/dist/server/src/lib/push/push-sender.js +23 -3
  645. package/dist/server/src/lib/push/resolution-push-notifier.js +14 -0
  646. package/dist/server/src/lib/push/waiting-push-notifier.js +139 -17
  647. package/dist/server/src/lib/realtime/terminal-broadcast.js +16 -0
  648. package/dist/server/src/lib/session/agent-event-state.js +25 -5
  649. package/dist/server/src/lib/session/agent-event-turn.js +140 -46
  650. package/dist/server/src/lib/session/cli-session.js +21 -2
  651. package/dist/server/src/lib/session/current-output-builder.js +64 -11
  652. package/dist/server/src/lib/session/send-attempt-state.js +23 -7
  653. package/dist/server/src/lib/session/waiting-episode-binding-observation.js +289 -0
  654. package/dist/server/src/lib/session/waiting-episode-binding-resolve.js +38 -0
  655. package/dist/server/src/lib/session/waiting-episode-binding.js +276 -0
  656. package/dist/server/src/lib/session/waiting-episode-state.js +307 -17
  657. package/dist/server/src/lib/session/waiting-episode-verdict.js +174 -0
  658. package/dist/server/src/lib/tmux/tmux-capture-cache.js +76 -11
  659. package/dist/server/src/lib/tmux/tmux.js +54 -9
  660. package/dist/server/src/lib/verification/gate-runner.js +162 -13
  661. package/dist/server/src/lib/verification/machine-lock.js +5 -0
  662. package/dist/server/src/lib/ws-server.js +18 -3
  663. package/dist/server/src/types/auto-yes-answer-mode.js +38 -0
  664. package/dist/server/src/types/auto-yes-decision.js +61 -0
  665. package/dist/server/src/types/auto-yes.js +6 -0
  666. package/dist/server/src/types/prompt-reading.js +32 -0
  667. package/dist/types/auto-yes-answer-mode.d.ts +35 -0
  668. package/dist/types/auto-yes-answer-mode.d.ts.map +1 -0
  669. package/dist/types/auto-yes-answer-mode.js +38 -0
  670. package/docs/en/user-guide/webapp-guide.md +33 -4
  671. package/package.json +2 -2
  672. package/public/sw.js +76 -4
  673. package/release-notes/0.47.1.json +20 -0
  674. package/release-notes/0.47.2.json +20 -0
  675. package/release-notes/0.48.0.json +57 -0
  676. package/scripts/hooks/cmate-agent-event.sh +22 -0
  677. package/.next/server/chunks/1331.js +0 -22
  678. package/.next/server/chunks/1559.js +0 -2
  679. package/.next/server/chunks/1836.js +0 -1
  680. package/.next/server/chunks/1944.js +0 -1
  681. package/.next/server/chunks/2328.js +0 -1
  682. package/.next/server/chunks/2460.js +0 -1
  683. package/.next/server/chunks/5292.js +0 -7
  684. package/.next/server/chunks/5595.js +0 -1
  685. package/.next/server/chunks/7166.js +0 -19
  686. package/.next/server/chunks/9051.js +0 -1
  687. package/.next/server/chunks/9199.js +0 -1
  688. package/.next/static/chunks/602-1c1488959215e140.js +0 -1
  689. package/.next/static/chunks/8407-155f84e5ba05f1d5.js +0 -1
  690. package/.next/static/chunks/9079-24f9fa549ed298f1.js +0 -1
  691. package/.next/static/chunks/9465-e5a351baa941f31b.js +0 -1
  692. package/.next/static/chunks/app/sessions/page-e02f1adb1d1c1ccc.js +0 -1
  693. package/.next/static/chunks/app/worktrees/[id]/page-45294052ee3032f1.js +0 -1
  694. package/.next/static/chunks/main-ac91ed6e71380841.js +0 -1
  695. /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → PTlAswXLq8PAe2vUJ8dVP}/_buildManifest.js +0 -0
  696. /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → PTlAswXLq8PAe2vUJ8dVP}/_ssgManifest.js +0 -0
@@ -78,6 +78,7 @@ const ansi_1 = require("../../ansi");
78
78
  const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-choice");
79
79
  const selection_shape_1 = require("../../selection-shape");
80
80
  const dialog_block_1 = require("../dialog-block");
81
+ const option_recommendation_1 = require("../../option-recommendation");
81
82
  const truncate_raw_content_1 = require("../../truncate-raw-content");
82
83
  /**
83
84
  * How many rows of dialog this reader will parse.
@@ -354,6 +355,8 @@ function readCommandCodeQuestionDialog(frame) {
354
355
  region,
355
356
  prompt: {
356
357
  ...built,
358
+ // Issue #3863: beside the payload, never in it — see `PromptDetectionResult`.
359
+ optionRecommendations: readCommandCodeOptionRecommendations(lines, regionRows.slice(block.firstRow), labels.length),
357
360
  promptData: {
358
361
  ...promptData,
359
362
  // Only ever added, never set to `false`: see the `checked` note above.
@@ -373,6 +376,70 @@ function readCommandCodeQuestionDialog(frame) {
373
376
  },
374
377
  };
375
378
  }
379
+ /** The option row's own prefix — indent, gutter, cursor and number — up to where its label starts. */
380
+ const OPTION_ROW_PREFIX_PATTERN = /^[^\S\n]*[│┃]?[^\S\n]*[❯›●>]?[^\S\n]*\d{1,2}[.)][^\S\n]+/;
381
+ /**
382
+ * What each option's title says about being recommended (Issue #3863,
383
+ * `option-recommendation`), read off the option rows again — the block reader
384
+ * joins everything under an option into its label, and this screen says
385
+ * which rows are the title.
386
+ *
387
+ * Measured on the reported capture (#2521, 1.53.0): an option's description
388
+ * starts on its own row at the option's LABEL column (`❯ 1. ` → five spaces),
389
+ * and only what the pane wraps lands further left (column 0 or 1). So under an
390
+ * option row:
391
+ *
392
+ * - a row at or right of the label column starts the description, and
393
+ * everything after it is description;
394
+ * - a row left of it, before any description, is the title wrapping — unless
395
+ * the row above could not have wrapped into it (its first word would have
396
+ * fit there, `cannotBeWrapOf`), in which case it is a description drawn
397
+ * further left (the synthetic indent 0 / 1 / 2 shapes #2522 reads), and the
398
+ * rest is description too;
399
+ * - `Submit` / `Next` and the hint bar under the last option are nobody's.
400
+ *
401
+ * Every option `'unknown'` when the walk does not find the same options the
402
+ * reading did.
403
+ *
404
+ * @param frameRows - Every row of the capture, for the pane's width
405
+ * @param optionRows - The region's rows from option 1's row on
406
+ * @param optionCount - How many options the reading found
407
+ */
408
+ function readCommandCodeOptionRecommendations(frameRows, optionRows, optionCount) {
409
+ const paneColumns = (0, option_recommendation_1.lowerBoundPaneColumns)(frameRows);
410
+ const titles = [];
411
+ let labelColumn = 0;
412
+ let lastTitleRow = '';
413
+ let inDescription = false;
414
+ for (const row of optionRows) {
415
+ if (row.trim() === '')
416
+ continue;
417
+ const parsed = (0, dialog_block_1.parseNumberedOptionRow)(row);
418
+ if (parsed !== null && parsed.number === titles.length + 1) {
419
+ titles.push([parsed.label]);
420
+ labelColumn = OPTION_ROW_PREFIX_PATTERN.exec(row)?.[0].length ?? 0;
421
+ lastTitleRow = row;
422
+ inDescription = false;
423
+ continue;
424
+ }
425
+ if (titles.length === 0)
426
+ break;
427
+ if (COMMAND_CODE_CONFIRM_ROW_PATTERN.test(row) || COMMAND_CODE_QUESTION_HINT_BAR_PATTERN.test(row))
428
+ continue;
429
+ if (inDescription)
430
+ continue;
431
+ const indent = row.length - row.trimStart().length;
432
+ if (indent >= labelColumn || (0, option_recommendation_1.cannotBeWrapOf)(lastTitleRow, row, paneColumns)) {
433
+ inDescription = true;
434
+ continue;
435
+ }
436
+ titles[titles.length - 1].push(row.trim());
437
+ lastTitleRow = row;
438
+ }
439
+ if (titles.length !== optionCount)
440
+ return Array.from({ length: optionCount }, () => 'unknown');
441
+ return titles.map((rows) => (0, option_recommendation_1.isRecommendedTitle)(rows.join(' ')));
442
+ }
376
443
  /**
377
444
  * The same reading as a `PromptDetectionResult | null`, for the call sites whose
378
445
  * only question is "is there an answerable prompt here?".
@@ -30,7 +30,9 @@
30
30
  * glyph or an SGR attribute, so both spellings parse to the same block.
31
31
  */
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.parseNumberedOptionRow = parseNumberedOptionRow;
33
34
  exports.findNumberedOptionBlock = findNumberedOptionBlock;
35
+ const option_recommendation_1 = require("../option-recommendation");
34
36
  /**
35
37
  * One numbered option row.
36
38
  *
@@ -58,6 +60,16 @@ const OPTION_ROW_PATTERN = /^[^\S\n]*[│┃]?[^\S\n]*([❯›●>])?[^\S\n]*(\d
58
60
  const DEFAULT_FOOTER_SCAN_ROWS = 8;
59
61
  /** How many rows one option block may span, wrapped continuations included. */
60
62
  const MAX_BLOCK_ROWS = 60;
63
+ /**
64
+ * Read one row as a numbered option row (`❯ 1. label`), or null.
65
+ *
66
+ * Exported for a tool module that walks the block's rows again to tell an
67
+ * option's title from its description (Issue #3863), so it reads an option
68
+ * row exactly as this reader does.
69
+ */
70
+ function parseNumberedOptionRow(row) {
71
+ return parseOptionRow(row);
72
+ }
61
73
  function parseOptionRow(row) {
62
74
  const match = OPTION_ROW_PATTERN.exec(row);
63
75
  if (!match)
@@ -117,6 +129,8 @@ function findNumberedOptionBlock(lines, endExclusive, footerScanRows = DEFAULT_F
117
129
  const lastRow = cursor;
118
130
  // 2. Walk up the run, collecting each option and any wrapped rows above it.
119
131
  const collected = [bottom];
132
+ // Issue #3863: whether rows were folded into each collected option's label.
133
+ const folded = [false];
120
134
  let expected = bottom.number - 1;
121
135
  let row = cursor - 1;
122
136
  let spanned = 1;
@@ -135,6 +149,7 @@ function findNumberedOptionBlock(lines, endExclusive, footerScanRows = DEFAULT_F
135
149
  const parsed = parseOptionRow(text);
136
150
  if (parsed && parsed.number === expected) {
137
151
  collected.unshift({ ...parsed, label: [parsed.label, ...pending].join(' ').trim() });
152
+ folded.unshift(pending.length > 0);
138
153
  pending = [];
139
154
  expected--;
140
155
  row--;
@@ -155,5 +170,6 @@ function findNumberedOptionBlock(lines, endExclusive, footerScanRows = DEFAULT_F
155
170
  firstRow: row + 1,
156
171
  lastRow,
157
172
  footer: footerRows.join('\n'),
173
+ optionRecommendations: collected.map((option, index) => folded[index] ? 'unknown' : (0, option_recommendation_1.isRecommendedTitle)(option.label)),
158
174
  };
159
175
  }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * One reading of a frame for the waiting episodes (Issue #3798, design §2.2 /
4
+ * 規則 1 / I9).
5
+ *
6
+ * Three observers read a frame and tell the episode store about it: the status
7
+ * probe (`worktree-status-helper`), the response poller and the Auto-Yes poller.
8
+ * They used to read it three ways — the Auto-Yes poller through the agy receipt
9
+ * window, which turns a real confirmation outside the window into "no prompt" —
10
+ * and a wait one of them saw as a person's screen another saw as nothing. Here
11
+ * is the one reading they share: whether the frame waits, what kind of wait it
12
+ * is, and whether only a person can end it (`humanHeld`), from the detector's
13
+ * verdict WITHOUT the receipt scope.
14
+ *
15
+ * `humanHeld` (規則 1) is all of: the detector says `waiting`, the same
16
+ * verdict's prompt reading says there is no prompt, and the agent reported no
17
+ * structured wait. So a copilot `ask_user` with four or more options (a prompt
18
+ * the detector reads, `isPrompt: true`) and an opencode permission strip the
19
+ * agent reported a decision for (a structured wait) are not a person's screen;
20
+ * a survey, a picker or a trust screen is.
21
+ *
22
+ * Detection layer: reads the detector and the waiting taxonomy, and nothing in
23
+ * `polling/` or the session stores.
24
+ *
25
+ * @module lib/detection/waiting-screen-reading
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.waitingReadingFromVerdict = waitingReadingFromVerdict;
29
+ exports.promptWaitingReading = promptWaitingReading;
30
+ exports.readWaitingScreen = readWaitingScreen;
31
+ const status_detector_1 = require("./status-detector");
32
+ const status_reason_1 = require("./status-reason");
33
+ const waiting_kind_1 = require("../../lib/session/waiting-kind");
34
+ /**
35
+ * The reasons that mean "no rule could read this frame" — the set
36
+ * `session/status-evidence`'s `isUnclassifiedFrame` names. Restated rather than
37
+ * imported because that module sits above this layer (it reads the agent's
38
+ * event store).
39
+ */
40
+ const UNCLASSIFIED_REASONS = new Set([
41
+ status_reason_1.STATUS_REASON.NO_RECENT_OUTPUT,
42
+ status_reason_1.STATUS_REASON.UNKNOWN_FRAME,
43
+ status_reason_1.STATUS_REASON.DEFAULT,
44
+ ]);
45
+ /**
46
+ * A reading from a verdict the caller has already made, with the caller's own
47
+ * composed answer to "is it waiting" (the status probe folds the structured
48
+ * layer and a launch in progress into it). `humanHeld` is decided here and
49
+ * nowhere else.
50
+ */
51
+ function waitingReadingFromVerdict(input) {
52
+ if (!input.waiting)
53
+ return { kind: 'not-waiting' };
54
+ const { verdict } = input;
55
+ return {
56
+ kind: 'waiting',
57
+ waitingKind: input.waitingKind,
58
+ humanHeld: verdict.status === 'waiting' && verdict.promptDetection.isPrompt === false && !input.structuredWaiting,
59
+ promptData: verdict.promptDetection.promptData ?? null,
60
+ structuredSince: input.structuredSince,
61
+ };
62
+ }
63
+ /**
64
+ * The reading of a prompt an observer has already read off the frame (the
65
+ * response poller's saved prompt). A prompt is never a person's screen.
66
+ */
67
+ function promptWaitingReading(promptData) {
68
+ return { kind: 'waiting', waitingKind: 'prompt', humanHeld: false, promptData, structuredSince: null };
69
+ }
70
+ /**
71
+ * Read one captured frame (design §2.2). The detector is asked without the
72
+ * receipt scope (I9); the structured wait, and whether the app answers it over
73
+ * the agent's API, are the caller's to look up — the status probe's reading of
74
+ * the same frame gives the same kind only when both are passed.
75
+ *
76
+ * `verdict` is the detector's answer on this same frame when the caller has
77
+ * already asked for it (to look the structured wait up with), so the frame is
78
+ * not judged twice.
79
+ */
80
+ function readWaitingScreen(input) {
81
+ const verdict = input.verdict ?? (0, status_detector_1.detectSessionStatus)(input.output, input.cliToolId, input.lastOutputTimestamp);
82
+ if (verdict.status === 'running' && UNCLASSIFIED_REASONS.has(verdict.reason))
83
+ return { kind: 'unknown' };
84
+ const waiting = verdict.status === 'waiting' || verdict.hasActivePrompt || input.structuredWaiting;
85
+ return waitingReadingFromVerdict({
86
+ verdict,
87
+ waiting,
88
+ waitingKind: (0, waiting_kind_1.deriveWaitingKind)({
89
+ waiting,
90
+ hasActivePrompt: verdict.hasActivePrompt,
91
+ scraperStatus: verdict.status,
92
+ scraperReason: verdict.reason,
93
+ apiAnswerable: input.apiAnswerable === true,
94
+ }),
95
+ structuredWaiting: input.structuredWaiting,
96
+ structuredSince: input.structuredSince,
97
+ });
98
+ }
@@ -29,6 +29,17 @@
29
29
  * capability block is the whole vocabulary (`docs/design/
30
30
  * multi-agent-state-architecture.md` §4 D3).
31
31
  *
32
+ * ## The ledger (Issue #3820)
33
+ *
34
+ * Each adjudication is written to the Auto-Yes confirmation ledger as the
35
+ * approval's confirmation, keyed by the decision id (design
36
+ * `docs/design/auto-yes-measurement-3820.md` §2.4): an `allow` is a send whose
37
+ * result is `delivered`, `settled` closes it, a policy's abstention withholds
38
+ * it. **No hook request is made here** — that id is the hook route's alone
39
+ * (§2.3, N2), so `resolvePermissionRequest` is called without one. The send is
40
+ * taken before the delivery is awaited and its result returned to it after
41
+ * (§2.5). The ledger never throws, and nothing here reads it back.
42
+ *
32
43
  * ## Why `permission-decision-service` is imported dynamically
33
44
  *
34
45
  * The same reason `sources/opencode/ingest` does it: that module reaches the
@@ -72,6 +83,7 @@ var __importStar = (this && this.__importStar) || (function () {
72
83
  Object.defineProperty(exports, "__esModule", { value: true });
73
84
  exports.adjudicatePendingPermission = adjudicatePendingPermission;
74
85
  const logger_1 = require("../../lib/logger");
86
+ const auto_yes_confirmation_ledger_1 = require("../../lib/polling/auto-yes-confirmation-ledger");
75
87
  const abstain_1 = require("./sources/abstain");
76
88
  const pending_decisions_1 = require("./sources/pending-decisions");
77
89
  const permission_decision_state_1 = require("./permission-decision-state");
@@ -121,6 +133,19 @@ async function adjudicatePendingPermission(source, target, decision, payload, tr
121
133
  });
122
134
  }
123
135
  }
136
+ // Issue #3820: the ledger's send is taken before the delivery's await, as the
137
+ // screen path takes its handle, so a result that comes back after the
138
+ // confirmation closed (a kill meanwhile) is that confirmation's late result
139
+ // rather than the answer of one opened again by the decision id.
140
+ const ledgerAttempt = (0, auto_yes_confirmation_ledger_1.beginLedgerApiAdjudication)(session, decision.id, {
141
+ outcome: verdictSource.behavior === 'allow' ? 'allow' : 'abstained',
142
+ ...(verdictSource.reason === 'policy-suppressed' && verdictSource.suppressedBy
143
+ ? { withholdReason: verdictSource.suppressedBy }
144
+ : {}),
145
+ // `PERMISSION_REQUEST_PROMPT_TYPE`, spelled out: the service is imported
146
+ // dynamically (above) and its suites mock it down to one export.
147
+ promptType: 'multiple_choice',
148
+ });
124
149
  // C2: the caller does not know whether this writes a response body or opens a
125
150
  // second connection, and must not. What it does now get back is whether the
126
151
  // verdict landed (#1898).
@@ -137,6 +162,7 @@ async function adjudicatePendingPermission(source, target, decision, payload, tr
137
162
  trigger,
138
163
  at: decision.askedAt,
139
164
  });
165
+ (0, auto_yes_confirmation_ledger_1.settleLedgerApiAdjudication)(ledgerAttempt, { delivered, settled });
140
166
  logger.info('permission-decision-adjudicated', {
141
167
  worktreeId: target.worktreeId,
142
168
  cliToolId: target.cliToolId,
@@ -78,6 +78,7 @@ const chat_db_1 = require("../../lib/db/chat-db");
78
78
  const auto_yes_policy_1 = require("../../lib/polling/auto-yes-policy");
79
79
  const auto_yes_resolver_1 = require("../../lib/polling/auto-yes-resolver");
80
80
  const auto_yes_suppression_state_1 = require("../../lib/polling/auto-yes-suppression-state");
81
+ const auto_yes_confirmation_ledger_1 = require("../../lib/polling/auto-yes-confirmation-ledger");
81
82
  const agent_event_state_1 = require("../../lib/session/agent-event-state");
82
83
  const logger_1 = require("../../lib/logger");
83
84
  const ask_user_question_payload_1 = require("./ask-user-question-payload");
@@ -114,9 +115,17 @@ function readContractPolicy(session) {
114
115
  * | payload unreadable | no-decision |
115
116
  * | `AskUserQuestion` | no-decision |
116
117
  * | Auto-Yes off / expired | no-decision |
118
+ * | contract lookup failed (Issue #3822) | no-decision + suppression |
117
119
  * | policy suppresses (mode off, deny pattern, type) | no-decision + suppression |
118
120
  * | otherwise | allow |
119
121
  *
122
+ * Issue #3822: the screen path reads the grant and the contract once more right
123
+ * before its first key (`withheldAtSend`). This path has no such moment: the
124
+ * `allow` returned here IS the answer — Claude runs the call without drawing a
125
+ * dialog and nothing is typed afterwards — so the grant and the contract it is
126
+ * judged against are read now, when the hook is answered, and the contract
127
+ * through the same cache-backed lookup (a failed read withholds, #3830).
128
+ *
120
129
  * @param session - Worktree / tool / instance the request came from
121
130
  * @param payload - Parsed payload, or null when it could not be parsed
122
131
  * @param deps - Substitutions for the database-backed lookups; see
@@ -144,21 +153,28 @@ function decidePermissionRequest(session, payload, deps = {}) {
144
153
  // Issue #1902: the third argument is what stops a normalised payload from
145
154
  // being judged on its whole body. See `collectToolInputMatchTexts`.
146
155
  (0, permission_request_payload_1.collectToolInputMatchTexts)(payload.toolName, payload.toolInput, payload.toolInputNormalization), policy);
156
+ // Issue #3822: an unknown policy (the lookup failed) is a denial here, so the
157
+ // hook abstains — the dialog is drawn — rather than allowing unattended.
147
158
  if (denial) {
148
159
  return {
149
160
  behavior: null,
150
161
  reason: 'policy-suppressed',
151
162
  suppressedBy: denial.reason,
152
163
  pattern: denial.pattern,
153
- mode: policy?.mode ?? null,
164
+ mode: (0, auto_yes_resolver_1.policyLookupMode)(policy),
154
165
  };
155
166
  }
156
- return { behavior: 'allow', reason: 'auto-yes', mode: policy?.mode ?? null };
167
+ return { behavior: 'allow', reason: 'auto-yes', mode: (0, auto_yes_resolver_1.policyLookupMode)(policy) };
157
168
  }
158
169
  /**
159
170
  * Persist an `allow` to the prompt history `capture --prompts` reads
160
171
  * (Issue #1685's layer).
161
172
  *
173
+ * Issue #3820: only on a source that declares
174
+ * {@link AgentSourceCapabilities.permissionAllowSuppressesDialog} — see
175
+ * {@link resolvePermissionRequest}. On agy the premise below does not hold
176
+ * (its dialog is drawn after an allow, and the screen's answer is the record).
177
+ *
162
178
  * Only `allow` is written here, and that asymmetry is deliberate. An allowed
163
179
  * request never draws a dialog, so this row is the *only* record that anything
164
180
  * happened — without it, Auto-Yes v2 approves commands invisibly. Every other
@@ -365,8 +381,9 @@ function reportPendingDialog(session, payload) {
365
381
  * {@link PermissionDecisionDeps}. Omit in the server.
366
382
  * @returns The verdict the route serialises
367
383
  */
368
- function resolvePermissionRequest(session, payload, deps = {}) {
384
+ function resolvePermissionRequest(session, payload, deps = {}, options = {}) {
369
385
  const decision = decidePermissionRequest(session, payload, deps);
386
+ const { capabilities } = (0, registry_1.getAgentEventSource)(session.cliToolId);
370
387
  // Issue #1902: before anything else, and regardless of the verdict. The
371
388
  // adjudicated `tool_input` is not the one copilot sent, and the design
372
389
  // policy's discoverability rule (§7) says a rewrite nobody can observe is a
@@ -421,8 +438,36 @@ function resolvePermissionRequest(session, payload, deps = {}) {
421
438
  pattern: decision.pattern,
422
439
  });
423
440
  }
424
- if (decision.behavior === 'allow' && payload) {
441
+ // Issue #3820 (design §5.1): an allow is an answer only where it draws no
442
+ // dialog. On agy the dialog is drawn anyway and the poller's answer writes
443
+ // the row, so a row here was the same approval twice — and, when agy ran the
444
+ // call by its own allow-list, an approval CommandMate never gave.
445
+ if (decision.behavior === 'allow' && payload && capabilities.permissionAllowSuppressesDialog) {
425
446
  (deps.recordAllow ?? recordAllowedPermission)(session, payload);
426
447
  }
448
+ recordHookRequestInLedger(session, payload, decision, capabilities.permissionAllowSuppressesDialog, options);
427
449
  return decision;
428
450
  }
451
+ /**
452
+ * The ledger's half of a hook request (Issue #3820, design §2.3, §3.4): what was
453
+ * decided — an allow that draws no dialog is the confirmation, anything else
454
+ * leaves the waiting to the screen's confirmation — and the CLI's own mode when
455
+ * the payload states it. Nothing without a `hookRequestId`, which only the hook
456
+ * route issues. The ledger never throws, and nothing here decides anything.
457
+ */
458
+ function recordHookRequestInLedger(session, payload, decision, allowSuppressesDialog, options) {
459
+ if (!options.hookRequestId)
460
+ return;
461
+ (0, auto_yes_confirmation_ledger_1.decideLedgerHookRequest)(options.hookRequestId, {
462
+ outcome: decision.behavior === 'allow' ? 'allow' : 'abstained',
463
+ ...(decision.behavior === 'allow' ? {} : { abstainReason: decision.reason }),
464
+ allowSuppressesDialog,
465
+ promptType: exports.PERMISSION_REQUEST_PROMPT_TYPE,
466
+ // PR 3 (design §2.4): agy's call, tying the request to the screen's
467
+ // confirmation and to the call's `PostToolUse`.
468
+ ...(payload?.callId ? { callId: payload.callId } : {}),
469
+ });
470
+ if (payload?.permissionMode) {
471
+ (0, auto_yes_confirmation_ledger_1.observeLedgerCliMode)(session, payload.permissionMode);
472
+ }
473
+ }
@@ -23,6 +23,7 @@
23
23
  */
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.MAX_TOOL_NAME_LENGTH = exports.ASK_USER_QUESTION_TOOL = exports.PERMISSION_REQUEST_EVENT_NAME = void 0;
26
+ exports.buildHookCallId = buildHookCallId;
26
27
  exports.parsePermissionRequestPayload = parsePermissionRequestPayload;
27
28
  exports.collectToolInputMatchTexts = collectToolInputMatchTexts;
28
29
  const tool_input_normalization_1 = require("./tool-input-normalization");
@@ -39,6 +40,25 @@ exports.PERMISSION_REQUEST_EVENT_NAME = 'PermissionRequest';
39
40
  exports.ASK_USER_QUESTION_TOOL = 'AskUserQuestion';
40
41
  /** Bound on `tool_name`; it is a Claude-side identifier, logged and stored. */
41
42
  exports.MAX_TOOL_NAME_LENGTH = 128;
43
+ /** A conversation id a call id may carry: an opaque id, no path or prose. */
44
+ const CALL_ID_CONVERSATION = /^[A-Za-z0-9._-]{1,128}$/;
45
+ /**
46
+ * `<conversationId>:<stepIdx>` (Issue #3820, design §2.1): `stepIdx` is unique
47
+ * within a conversation and starts again when agy is relaunched, so it is
48
+ * paired with the conversation. Null unless `stepIdx` is a non-negative safe
49
+ * integer and the conversation id an opaque id — a body without them is read
50
+ * as before, with no call id.
51
+ *
52
+ * @param conversationId - agy's `conversationId` (the relay's `sessionId`)
53
+ * @param stepIdx - The body's `stepIdx`, whatever it was
54
+ */
55
+ function buildHookCallId(conversationId, stepIdx) {
56
+ if (typeof conversationId !== 'string' || !CALL_ID_CONVERSATION.test(conversationId))
57
+ return null;
58
+ if (typeof stepIdx !== 'number' || !Number.isSafeInteger(stepIdx) || stepIdx < 0)
59
+ return null;
60
+ return `${conversationId}:${stepIdx}`;
61
+ }
42
62
  function readString(source, key) {
43
63
  const value = source[key];
44
64
  return typeof value === 'string' && value !== '' ? value : null;
@@ -64,6 +64,7 @@
64
64
  Object.defineProperty(exports, "__esModule", { value: true });
65
65
  exports.antigravityAgentEventSource = void 0;
66
66
  exports.parseAntigravityPermissionRequest = parseAntigravityPermissionRequest;
67
+ exports.readAntigravityPermissionCallId = readAntigravityPermissionCallId;
67
68
  exports.encodeAntigravityVerdict = encodeAntigravityVerdict;
68
69
  exports.extractAntigravityEventDetail = extractAntigravityEventDetail;
69
70
  const uat_isolation_1 = require("../../../../config/uat-isolation");
@@ -125,6 +126,23 @@ function parseAntigravityPermissionRequest(body) {
125
126
  permissionSuggestions: null,
126
127
  };
127
128
  }
129
+ /**
130
+ * The call agy's `PreToolUse` asks about, `<conversationId>:<stepIdx>`
131
+ * (Issue #3820, design `docs/design/auto-yes-measurement-3820.md` §2.4), or
132
+ * null when the body has no numeric `stepIdx` or no conversation id.
133
+ *
134
+ * Read beside {@link parseAntigravityPermissionRequest}, not inside it: the
135
+ * route puts it on the payload (`callId`) for the Auto-Yes ledger only. The
136
+ * parsed payload is what the adjudication judges, and it stays exactly what it
137
+ * was — `stepIdx` is still not a prompt id.
138
+ *
139
+ * @param body - Whatever was posted to `/api/hooks/permission-request`
140
+ */
141
+ function readAntigravityPermissionCallId(body) {
142
+ if (!(0, event_mapper_1.isPlainObject)(body))
143
+ return null;
144
+ return (0, permission_request_payload_1.buildHookCallId)((0, event_mapper_1.readStringField)(body, 'conversationId'), body.stepIdx);
145
+ }
128
146
  /**
129
147
  * Encode a verdict in agy's wire form (S6, #1757 R15).
130
148
  *
@@ -217,6 +235,9 @@ exports.antigravityAgentEventSource = (0, define_source_1.definePushHookSource)(
217
235
  // Not audited. Default = Claude's current behaviour.
218
236
  sessionStartMayArriveLate: false,
219
237
  permissionReplyReleasesPrompt: false,
238
+ // Issue #3820, measured (1.1.12 / 1.1.27 / 1.4.2): agy draws its dialog even
239
+ // after an `allow`, and the screen's answer is the record — no audit row.
240
+ permissionAllowSuppressesDialog: false,
220
241
  eventIdentity: null,
221
242
  resync: 'none',
222
243
  // Issue #2198. agy keeps a plain-JSONL transcript per conversation at
@@ -133,6 +133,9 @@ exports.claudeAgentEventSource = (0, define_source_1.definePushHookSource)({
133
133
  // A hook response body releases nothing observable. The dialog is released
134
134
  // by the screen, by `Stop`, or by expiry.
135
135
  permissionReplyReleasesPrompt: false,
136
+ // Issue #3820: an allowed `PermissionRequest` draws no dialog — the reply is
137
+ // the only record, so the audit row is written (#1724).
138
+ permissionAllowSuppressesDialog: true,
136
139
  // `tool_use_id` is present on tool events but absent on `PermissionRequest`
137
140
  // (D2), so there is no id that covers the frames dedup has to cover. The
138
141
  // time window stays.
@@ -108,6 +108,8 @@ exports.codexAgentEventSource = (0, define_source_1.definePushHookSource)({
108
108
  // current behaviour, which is what the state machine does today.
109
109
  sessionStartMayArriveLate: false,
110
110
  permissionReplyReleasesPrompt: false,
111
+ // Issue #3820: an allowed `PermissionRequest` draws no dialog.
112
+ permissionAllowSuppressesDialog: true,
111
113
  eventIdentity: null,
112
114
  resync: 'none',
113
115
  // Issue #2197. codex appends every record of a session to
@@ -230,6 +230,8 @@ exports.commandCodeAgentEventSource = (0, define_source_1.definePushHookSource)(
230
230
  sessionStartMayArriveLate: false,
231
231
  // A hook response body releases nothing observable, as on every push source.
232
232
  permissionReplyReleasesPrompt: false,
233
+ // Issue #3820: the hook arrives after the dialog was answered (see above).
234
+ permissionAllowSuppressesDialog: false,
233
235
  // `tool_use_id` is present on both tool events (`call_00_…`) and absent from
234
236
  // `SessionStart` and `Stop`, so there is no id covering the frames dedup has
235
237
  // to cover. The time window stays. Extraction is declared below regardless,
@@ -215,6 +215,8 @@ exports.copilotAgentEventSource = (0, define_source_1.definePushHookSource)({
215
215
  // module comment above.
216
216
  sessionStartMayArriveLate: true,
217
217
  permissionReplyReleasesPrompt: false,
218
+ // Issue #3820: an allowed `PreToolUse` runs the call without a dialog.
219
+ permissionAllowSuppressesDialog: true,
218
220
  // Not audited. No captured copilot payload carries a `tool_use_id`, so
219
221
  // `'tool-call-id'` would be a guess; whether one exists is still to be
220
222
  // measured. Default = Claude's fallback, the time window.
@@ -130,6 +130,8 @@ exports.geminiAgentEventSource = (0, define_source_1.definePushHookSource)({
130
130
  // Not audited. Default = Claude's current behaviour.
131
131
  sessionStartMayArriveLate: false,
132
132
  permissionReplyReleasesPrompt: false,
133
+ // Issue #3820: not measured, and no permission hook is registered.
134
+ permissionAllowSuppressesDialog: false,
133
135
  eventIdentity: null,
134
136
  resync: 'none',
135
137
  // Issue #2197. Nobody but the screen scraper records gemini replies.
@@ -65,6 +65,8 @@ function createLegacyRelaySource(cliToolId) {
65
65
  permissionHookPredictsDialog: false,
66
66
  sessionStartMayArriveLate: false,
67
67
  permissionReplyReleasesPrompt: false,
68
+ // Issue #3820: an unmeasured tool's allow is not assumed to answer a dialog.
69
+ permissionAllowSuppressesDialog: false,
68
70
  eventIdentity: null,
69
71
  resync: 'none',
70
72
  // Issue #2197. A tool on the compatibility relay has no reader, which
@@ -81,6 +81,7 @@ const logger_1 = require("../../../../lib/logger");
81
81
  const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
82
82
  const permission_adjudication_1 = require("../../../../lib/hooks/permission-adjudication");
83
83
  const pending_decision_kind_1 = require("../../../../lib/hooks/pending-decision-kind");
84
+ const auto_yes_confirmation_ledger_1 = require("../../../../lib/polling/auto-yes-confirmation-ledger");
84
85
  const agent_event_state_1 = require("../../../../lib/session/agent-event-state");
85
86
  const structured_prompt_1 = require("../../../../lib/session/structured-prompt");
86
87
  const event_mapper_1 = require("../event-mapper");
@@ -362,6 +363,11 @@ async function ingestOpencodeEvent(target, event) {
362
363
  record.decisionId = (0, mappers_1.repliedPermissionId)(event.raw);
363
364
  record.promptSettled = replyReleasesPrompt(target, instanceId);
364
365
  (0, agent_event_state_1.recordAgentEvent)(target.worktreeId, tool_id_1.OPENCODE_CLI_TOOL_ID, instanceId, record, options);
366
+ // Issue #3820: the approval's confirmation in the Auto-Yes ledger ends
367
+ // here when Auto-Yes did not settle it — who answered is not known.
368
+ if (record.decisionId) {
369
+ (0, auto_yes_confirmation_ledger_1.noteLedgerApiDecisionReplied)({ worktreeId: target.worktreeId, cliToolId: tool_id_1.OPENCODE_CLI_TOOL_ID, instanceId }, record.decisionId);
370
+ }
365
371
  logger.info('opencode-permission-reply-observed', {
366
372
  worktreeId: target.worktreeId,
367
373
  instanceId,
@@ -316,6 +316,8 @@ exports.opencodeAgentEventSource = (0, define_source_1.definePullEventSource)({
316
316
  // `permission.replied` arrives on the same stream and is a positive
317
317
  // statement that the dialog is gone (#1898). The only source that can say so.
318
318
  permissionReplyReleasesPrompt: true,
319
+ // Issue #3820: an allow is the approval itself, over the agent's API.
320
+ permissionAllowSuppressesDialog: true,
319
321
  // `per_...` — the id in the reply URL, which is the same id the frame
320
322
  // carries (#1899). Real identity, so this source does not need the time
321
323
  // window that loses the `stop` of a short turn.
@@ -64,6 +64,7 @@ const logger_1 = require("../../../../lib/logger");
64
64
  const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
65
65
  const permission_adjudication_1 = require("../../../../lib/hooks/permission-adjudication");
66
66
  const pending_decision_kind_1 = require("../../../../lib/hooks/pending-decision-kind");
67
+ const auto_yes_confirmation_ledger_1 = require("../../../../lib/polling/auto-yes-confirmation-ledger");
67
68
  const agent_event_state_1 = require("../../../../lib/session/agent-event-state");
68
69
  const structured_prompt_1 = require("../../../../lib/session/structured-prompt");
69
70
  const event_mapper_1 = require("../event-mapper");
@@ -207,6 +208,11 @@ async function ingestOpencodeV2Event(target, event, stopEffect = applyStop, load
207
208
  record.decisionId = (0, mappers_1.frameDecisionId)(event.raw);
208
209
  record.promptSettled = true;
209
210
  (0, agent_event_state_1.recordAgentEvent)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId, record, options);
211
+ // Issue #3820: as v1's `permission.replied` — the ledger's confirmation
212
+ // of this approval ends, by whoever answered it.
213
+ if (record.decisionId) {
214
+ (0, auto_yes_confirmation_ledger_1.noteLedgerApiDecisionReplied)({ worktreeId: target.worktreeId, cliToolId: tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId }, record.decisionId);
215
+ }
210
216
  }
211
217
  else if (event.event === 'notification' && event.detail === mappers_1.OPENCODE_V2_QUESTION_DETAIL) {
212
218
  const spec = await readQuestion(target, event, loadForm);
@@ -254,6 +254,8 @@ exports.opencodeV2AgentEventSource = (0, define_source_1.definePullEventSource)(
254
254
  permissionHookPredictsDialog: false,
255
255
  sessionStartMayArriveLate: false,
256
256
  permissionReplyReleasesPrompt: true,
257
+ // Issue #3820: an allow is the approval itself, over the agent's API.
258
+ permissionAllowSuppressesDialog: true,
257
259
  // Issue #2945: `per_…` / `frm_…`, the id the reply URL takes and the one
258
260
  // `permission.replied` / `form.replied` settle. Moves together with
259
261
  // `extractEventIdentity` below.
@@ -124,12 +124,24 @@ function resetPendingDecisions() {
124
124
  * function exists, cannot find out without going out of its way — whether the
125
125
  * verdict left through the response body or through a second HTTP call.
126
126
  *
127
+ * @param options.onReceipt - Issue #3820: handed the receipt — what
128
+ * {@link answerPendingDecisionWithReceipt} returns beside the body — before
129
+ * the body is returned. For a caller that records the delivery (the hook
130
+ * route's ledger) and writes the body whatever it says; the body is the same
131
+ * with or without it.
127
132
  * @returns The body to write. `{}` means "nothing to say here", which for a
128
133
  * hook is the measured no-decision reply and for a pull source is simply the
129
134
  * ack of a request whose answer went elsewhere.
130
135
  */
131
- async function answerPendingDecision(source, ref, decision, verdict) {
132
- return (await answerPendingDecisionWithReceipt(source, ref, decision, verdict)).body;
136
+ async function answerPendingDecision(source, ref, decision, verdict, options = {}) {
137
+ const { body, delivery } = await answerPendingDecisionWithReceipt(source, ref, decision, verdict);
138
+ try {
139
+ options.onReceipt?.(delivery);
140
+ }
141
+ catch {
142
+ // The receipt is the caller's record, never a reason to lose the body.
143
+ }
144
+ return body;
133
145
  }
134
146
  /**
135
147
  * Answer one decision and keep the receipt (Issue #1898).