commandmate 0.47.0 → 0.47.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) 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 +36 -36
  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 +15 -15
  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 +2 -2
  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 +4 -4
  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 +36 -36
  481. package/.next/server/chunks/{5048.js → 1185.js} +1 -1
  482. package/.next/server/chunks/1656.js +19 -0
  483. package/.next/server/chunks/2460.js +1 -1
  484. package/.next/server/chunks/255.js +1 -0
  485. package/.next/server/chunks/3241.js +1 -1
  486. package/.next/server/chunks/3505.js +7 -0
  487. package/.next/server/chunks/3897.js +22 -0
  488. package/.next/server/chunks/4072.js +5 -5
  489. package/.next/server/chunks/463.js +1 -0
  490. package/.next/server/chunks/5209.js +1 -1
  491. package/.next/server/chunks/5595.js +1 -1
  492. package/.next/server/chunks/5611.js +1 -1
  493. package/.next/server/chunks/610.js +1 -0
  494. package/.next/server/chunks/6119.js +1 -0
  495. package/.next/server/chunks/6130.js +1 -1
  496. package/.next/server/chunks/6345.js +1 -1
  497. package/.next/server/chunks/6401.js +1 -1
  498. package/.next/server/chunks/6781.js +1 -1
  499. package/.next/server/chunks/6784.js +1 -0
  500. package/.next/server/chunks/8581.js +1 -1
  501. package/.next/server/chunks/8728.js +2 -2
  502. package/.next/server/chunks/8918.js +1 -1
  503. package/.next/server/chunks/9130.js +1 -1
  504. package/.next/server/chunks/936.js +1 -1
  505. package/.next/server/chunks/9390.js +1 -1
  506. package/.next/server/chunks/9540.js +1 -1
  507. package/.next/server/chunks/9627.js +1 -1
  508. package/.next/server/chunks/9731.js +3 -3
  509. package/.next/server/middleware-build-manifest.js +1 -1
  510. package/.next/server/middleware-manifest.json +5 -5
  511. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  512. package/.next/server/pages/500.html +1 -1
  513. package/.next/server/pages/_document.js.nft.json +1 -1
  514. package/.next/server/pages/_error.js +3 -3
  515. package/.next/server/pages/_error.js.nft.json +1 -1
  516. package/.next/server/server-reference-manifest.json +1 -1
  517. package/.next/server/src/middleware.js.map +1 -1
  518. package/.next/static/chunks/{1111.5ab4f0ffb0d944e5.js → 1111.1b653d4a9816a0a7.js} +8 -8
  519. package/.next/static/chunks/{1255-7e5873f06b25e129.js → 1255-a85690d352f4f8fd.js} +1 -1
  520. package/.next/static/chunks/{2407-b2f524f99f7fc353.js → 2407-a6533805a86d05bd.js} +1 -1
  521. package/.next/static/chunks/9465-b59bb255b376c813.js +1 -0
  522. package/.next/static/chunks/app/{layout-419eaf7de340f4ab.js → layout-538d8d2746ad1588.js} +1 -1
  523. package/.next/static/chunks/app/worktrees/[id]/page-46aced20b2b1c010.js +1 -0
  524. package/.next/static/chunks/main-37ca13e38030fe8b.js +1 -0
  525. package/.next/static/chunks/{webpack-468b7b33030234b3.js → webpack-838df0273b03af19.js} +1 -1
  526. package/.next/trace +13 -13
  527. package/dist/cli/commands/prompt.d.ts.map +1 -1
  528. package/dist/cli/commands/prompt.js +23 -11
  529. package/dist/cli/commands/wait.d.ts.map +1 -1
  530. package/dist/cli/commands/wait.js +7 -1
  531. package/dist/cli/types/api-responses.d.ts +15 -2
  532. package/dist/cli/types/api-responses.d.ts.map +1 -1
  533. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +11 -0
  534. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
  535. package/dist/lib/polling/auto-yes-suppression-reason.js +4 -1
  536. package/dist/server/src/lib/auto-yes-poller.js +269 -554
  537. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +88 -6
  538. package/dist/server/src/lib/detection/prompt-detector.js +1 -1
  539. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +1 -1
  540. package/dist/server/src/lib/hooks/permission-adjudication.js +26 -0
  541. package/dist/server/src/lib/hooks/permission-decision-service.js +42 -4
  542. package/dist/server/src/lib/hooks/permission-request-payload.js +20 -0
  543. package/dist/server/src/lib/hooks/sources/antigravity/source.js +21 -0
  544. package/dist/server/src/lib/hooks/sources/claude/source.js +3 -0
  545. package/dist/server/src/lib/hooks/sources/codex/source.js +2 -0
  546. package/dist/server/src/lib/hooks/sources/command-code/source.js +2 -0
  547. package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
  548. package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
  549. package/dist/server/src/lib/hooks/sources/legacy-relay.js +2 -0
  550. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +6 -0
  551. package/dist/server/src/lib/hooks/sources/opencode/source.js +2 -0
  552. package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +6 -0
  553. package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +2 -0
  554. package/dist/server/src/lib/hooks/sources/pending-decisions.js +14 -2
  555. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +14 -3
  556. package/dist/server/src/lib/polling/antigravity-receipt-episodes.js +21 -1
  557. package/dist/server/src/lib/polling/auto-yes-confirmation-ledger-types.js +114 -0
  558. package/dist/server/src/lib/polling/auto-yes-confirmation-ledger.js +1060 -0
  559. package/dist/server/src/lib/polling/auto-yes-ledger-records.js +143 -0
  560. package/dist/server/src/lib/polling/auto-yes-policy.js +36 -7
  561. package/dist/server/src/lib/polling/auto-yes-poller-capture.js +50 -0
  562. package/dist/server/src/lib/polling/auto-yes-poller-enter-fallback.js +37 -0
  563. package/dist/server/src/lib/polling/auto-yes-poller-generation.js +151 -0
  564. package/dist/server/src/lib/polling/auto-yes-poller-receipt-log.js +287 -0
  565. package/dist/server/src/lib/polling/auto-yes-poller-state.js +75 -6
  566. package/dist/server/src/lib/polling/auto-yes-poller-steps.js +109 -0
  567. package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +11 -0
  568. package/dist/server/src/lib/polling/auto-yes-resolver.js +21 -1
  569. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +4 -1
  570. package/dist/server/src/lib/polling/response-checker-blank-response.js +30 -0
  571. package/dist/server/src/lib/polling/response-checker.js +5 -10
  572. package/dist/server/src/lib/prompt-observation/appearance.js +165 -0
  573. package/package.json +2 -2
  574. package/release-notes/0.47.1.json +20 -0
  575. package/release-notes/0.47.2.json +20 -0
  576. package/scripts/hooks/cmate-agent-event.sh +22 -0
  577. package/.next/server/chunks/1331.js +0 -22
  578. package/.next/server/chunks/1836.js +0 -1
  579. package/.next/server/chunks/1944.js +0 -1
  580. package/.next/server/chunks/2328.js +0 -1
  581. package/.next/server/chunks/5292.js +0 -7
  582. package/.next/server/chunks/7166.js +0 -19
  583. package/.next/server/chunks/9051.js +0 -1
  584. package/.next/server/chunks/9199.js +0 -1
  585. package/.next/static/chunks/9465-e5a351baa941f31b.js +0 -1
  586. package/.next/static/chunks/app/worktrees/[id]/page-45294052ee3032f1.js +0 -1
  587. package/.next/static/chunks/main-ac91ed6e71380841.js +0 -1
  588. /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → etorRtpxbQqqOzdUeXdw2}/_buildManifest.js +0 -0
  589. /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → etorRtpxbQqqOzdUeXdw2}/_ssgManifest.js +0 -0
@@ -707,6 +707,11 @@ function extractInstructionText(lines, questionEndIndex, effectiveEnd) {
707
707
  *
708
708
  * Horizontal rules count too: Codex draws one between turns.
709
709
  *
710
+ * [Issue #3817] Not inside the panel's own frame: the command a panel shows can
711
+ * carry the same glyphs (a here-document's `> quoted` rows), drawn deeper than
712
+ * the panel's header, question and option rows. See
713
+ * {@link findApprovalContextStart}.
714
+ *
710
715
  * Anchored at the start of the trimmed line — ReDoS safe (no repetition).
711
716
  */
712
717
  const TURN_BOUNDARY_PATTERN = /^[⏺⎿●○•✔✓✖✗✘›»❯└├>]/;
@@ -721,7 +726,32 @@ const TURN_BOUNDARY_PATTERN = /^[⏺⎿●○•✔✓✖✗✘›»❯└├>]/
721
726
  * command + description + blank.
722
727
  */
723
728
  exports.APPROVAL_TARGET_MAX_LOOKBACK = 12;
724
- /** True when this line belongs to a previous turn rather than the prompt panel. */
729
+ /**
730
+ * A previous tool call's result row (Issue #3817): claude's `⎿`, codex's `└` /
731
+ * `├` output continuation. Never the user's echo or a quote (`>`).
732
+ */
733
+ const RESULT_MARKER_PATTERN = /^[⎿└├]/;
734
+ /** Width of a row's leading whitespace. */
735
+ function indentOf(line) {
736
+ return line.length - line.trimStart().length;
737
+ }
738
+ /**
739
+ * The column the dialog's own frame is drawn at (Issue #3817): the least
740
+ * indented non-blank row from the question down to `panelEnd`. Those rows are
741
+ * the question, the option block and the footer — claude puts them at column 1
742
+ * and the command at column 3, codex its `› 1.` cursor at column 0.
743
+ */
744
+ function panelFrameIndent(lines, questionLineIndex, panelEnd) {
745
+ let indent = Infinity;
746
+ for (let i = questionLineIndex; i < Math.min(panelEnd, lines.length); i++) {
747
+ const line = lines[i];
748
+ if (line === undefined || line.trim() === '')
749
+ continue;
750
+ indent = Math.min(indent, indentOf(line));
751
+ }
752
+ return indent === Infinity ? 0 : indent;
753
+ }
754
+ /** True when this line carries a transcript marker or is a rule. */
725
755
  function isTurnBoundaryLine(rawLine) {
726
756
  if (rawLine === undefined)
727
757
  return false;
@@ -738,21 +768,73 @@ function isTurnBoundaryLine(rawLine) {
738
768
  * Everything above the returned index is a previous turn and must never reach a
739
769
  * deny pattern — that poisoning is Issue #1699.
740
770
  *
771
+ * [Issue #3817] A marker row indented deeper than the dialog's frame
772
+ * ({@link panelFrameIndent}) is the body of the command the panel asks about
773
+ * when a frame row sits above it — the `> quoted` rows of a here-document
774
+ * under a claude panel's ` Bash command` header. Cutting there took the command
775
+ * rows above it out of the deny surface. The previous turn's markers are drawn
776
+ * at or left of the frame (`⏺`, the user's `> msg` / `❯ msg` echo, a rule), or
777
+ * deeper with no frame row above them (claude's ` ⎿` result right under its
778
+ * `⏺`), and both still end the scan.
779
+ *
780
+ * A frame row cannot be told from a body row drawn at the frame's column (a
781
+ * shell here-document's `EOF`), so a frame row is taken as an older panel's
782
+ * header only in one shape: a tool-use block — a marker row at the frame's
783
+ * column, then that row, then deeper rows that are all result markers
784
+ * ({@link RESULT_MARKER_PATTERN}). Anything else between two frame rows is read
785
+ * as body: when the screen cannot tell, the deny surface is taken wide.
786
+ *
741
787
  * Shared by both detector paths: multiple_choice passes its `questionEndIndex`,
742
788
  * yes_no the line its pattern matched on.
743
789
  *
744
790
  * @param lines - Full frame, already ANSI/box stripped
745
791
  * @param questionLineIndex - Line the prompt's own question sits on
792
+ * @param panelEnd - Exclusive end of the dialog's own rows (Issue #3817); their
793
+ * least indented row is the frame. Defaults to the question row alone.
746
794
  * @returns Index of the first line of the current prompt's own block
747
795
  */
748
- function findApprovalContextStart(lines, questionLineIndex) {
796
+ function findApprovalContextStart(lines, questionLineIndex, panelEnd = questionLineIndex + 1) {
749
797
  const floor = Math.max(0, questionLineIndex - exports.APPROVAL_TARGET_MAX_LOOKBACK);
798
+ const frameIndent = panelFrameIndent(lines, questionLineIndex, panelEnd);
799
+ // The lowest deeper marker row with no frame row found above it yet.
800
+ let unenclosed = -1;
801
+ // The deeper rows since the last frame row: are they all result markers?
802
+ let segmentRows = 0;
803
+ let segmentAllResults = true;
750
804
  for (let i = questionLineIndex - 1; i >= floor; i--) {
751
- if (isTurnBoundaryLine(lines[i])) {
752
- return i + 1;
805
+ const line = lines[i];
806
+ if (line === undefined || line.trim() === '')
807
+ continue;
808
+ const atFrame = indentOf(line) <= frameIndent;
809
+ const marker = isTurnBoundaryLine(line);
810
+ if (marker && atFrame)
811
+ return (unenclosed >= 0 ? unenclosed : i) + 1;
812
+ if (!atFrame) {
813
+ if (marker && unenclosed < 0)
814
+ unenclosed = i;
815
+ segmentRows++;
816
+ segmentAllResults &&= RESULT_MARKER_PATTERN.test(line.trim());
817
+ continue;
818
+ }
819
+ // A frame row: an older tool-use block's header only in that one shape.
820
+ if (unenclosed >= 0 && segmentRows > 0 && segmentAllResults && isMarkerRowAtFrameAbove(lines, i, floor, frameIndent)) {
821
+ return unenclosed + 1;
753
822
  }
823
+ unenclosed = -1;
824
+ segmentRows = 0;
825
+ segmentAllResults = true;
754
826
  }
755
- return floor;
827
+ return unenclosed >= 0 ? unenclosed + 1 : floor;
828
+ }
829
+ /** True when the nearest non-blank row above `row` is a marker row at the frame's column. */
830
+ function isMarkerRowAtFrameAbove(lines, row, floor, frameIndent) {
831
+ for (let i = row - 1; i >= floor; i--) {
832
+ const line = lines[i];
833
+ if (line === undefined || line.trim() === '')
834
+ continue;
835
+ return indentOf(line) <= frameIndent && isTurnBoundaryLine(line);
836
+ }
837
+ return false;
756
838
  }
757
839
  /**
758
840
  * Join a slice of the frame into an approval-target string.
@@ -800,7 +882,7 @@ function extractApprovalTarget(lines, questionEndIndex, effectiveEnd, floor = 0)
800
882
  if (questionEndIndex < 0) {
801
883
  return undefined;
802
884
  }
803
- return joinApprovalTarget(lines, Math.max(floor, findApprovalContextStart(lines, questionEndIndex)), effectiveEnd);
885
+ return joinApprovalTarget(lines, Math.max(floor, findApprovalContextStart(lines, questionEndIndex, effectiveEnd)), effectiveEnd);
804
886
  }
805
887
  /**
806
888
  * Build the final PromptDetectionResult for a multiple choice prompt.
@@ -70,7 +70,7 @@ function locateMatchLines(tailText, tailStart, match) {
70
70
  */
71
71
  function yesNoApprovalTarget(lines, tailText, tailStart, match) {
72
72
  const { startLine, endLine } = locateMatchLines(tailText, tailStart, match);
73
- return (0, prompt_detect_multiple_choice_1.joinApprovalTarget)(lines, (0, prompt_detect_multiple_choice_1.findApprovalContextStart)(lines, startLine), endLine + 1);
73
+ return (0, prompt_detect_multiple_choice_1.joinApprovalTarget)(lines, (0, prompt_detect_multiple_choice_1.findApprovalContextStart)(lines, startLine, endLine + 1), endLine + 1);
74
74
  }
75
75
  /**
76
76
  * Creates a yes/no prompt detection result.
@@ -229,7 +229,7 @@ function detectAntigravityNumberedDialogPrompt(text) {
229
229
  // turn's boundary and below at the footer, so the command in the
230
230
  // `Requesting permission for:` block and in the labels is judged and
231
231
  // nothing from an earlier, already-answered approval is.
232
- approvalTarget: (0, prompt_detect_multiple_choice_1.joinApprovalTarget)(lines, (0, prompt_detect_multiple_choice_1.findApprovalContextStart)(lines, dialog.questionRow), dialog.footerRow),
232
+ approvalTarget: (0, prompt_detect_multiple_choice_1.joinApprovalTarget)(lines, (0, prompt_detect_multiple_choice_1.findApprovalContextStart)(lines, dialog.questionRow, dialog.footerRow), dialog.footerRow),
233
233
  }, normalized, truncate_raw_content_1.truncateRawContent);
234
234
  }
235
235
  /**
@@ -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,6 +115,7 @@ 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
  *
@@ -144,21 +146,28 @@ function decidePermissionRequest(session, payload, deps = {}) {
144
146
  // Issue #1902: the third argument is what stops a normalised payload from
145
147
  // being judged on its whole body. See `collectToolInputMatchTexts`.
146
148
  (0, permission_request_payload_1.collectToolInputMatchTexts)(payload.toolName, payload.toolInput, payload.toolInputNormalization), policy);
149
+ // Issue #3822: an unknown policy (the lookup failed) is a denial here, so the
150
+ // hook abstains — the dialog is drawn — rather than allowing unattended.
147
151
  if (denial) {
148
152
  return {
149
153
  behavior: null,
150
154
  reason: 'policy-suppressed',
151
155
  suppressedBy: denial.reason,
152
156
  pattern: denial.pattern,
153
- mode: policy?.mode ?? null,
157
+ mode: (0, auto_yes_resolver_1.policyLookupMode)(policy),
154
158
  };
155
159
  }
156
- return { behavior: 'allow', reason: 'auto-yes', mode: policy?.mode ?? null };
160
+ return { behavior: 'allow', reason: 'auto-yes', mode: (0, auto_yes_resolver_1.policyLookupMode)(policy) };
157
161
  }
158
162
  /**
159
163
  * Persist an `allow` to the prompt history `capture --prompts` reads
160
164
  * (Issue #1685's layer).
161
165
  *
166
+ * Issue #3820: only on a source that declares
167
+ * {@link AgentSourceCapabilities.permissionAllowSuppressesDialog} — see
168
+ * {@link resolvePermissionRequest}. On agy the premise below does not hold
169
+ * (its dialog is drawn after an allow, and the screen's answer is the record).
170
+ *
162
171
  * Only `allow` is written here, and that asymmetry is deliberate. An allowed
163
172
  * request never draws a dialog, so this row is the *only* record that anything
164
173
  * happened — without it, Auto-Yes v2 approves commands invisibly. Every other
@@ -365,8 +374,9 @@ function reportPendingDialog(session, payload) {
365
374
  * {@link PermissionDecisionDeps}. Omit in the server.
366
375
  * @returns The verdict the route serialises
367
376
  */
368
- function resolvePermissionRequest(session, payload, deps = {}) {
377
+ function resolvePermissionRequest(session, payload, deps = {}, options = {}) {
369
378
  const decision = decidePermissionRequest(session, payload, deps);
379
+ const { capabilities } = (0, registry_1.getAgentEventSource)(session.cliToolId);
370
380
  // Issue #1902: before anything else, and regardless of the verdict. The
371
381
  // adjudicated `tool_input` is not the one copilot sent, and the design
372
382
  // policy's discoverability rule (§7) says a rewrite nobody can observe is a
@@ -421,8 +431,36 @@ function resolvePermissionRequest(session, payload, deps = {}) {
421
431
  pattern: decision.pattern,
422
432
  });
423
433
  }
424
- if (decision.behavior === 'allow' && payload) {
434
+ // Issue #3820 (design §5.1): an allow is an answer only where it draws no
435
+ // dialog. On agy the dialog is drawn anyway and the poller's answer writes
436
+ // the row, so a row here was the same approval twice — and, when agy ran the
437
+ // call by its own allow-list, an approval CommandMate never gave.
438
+ if (decision.behavior === 'allow' && payload && capabilities.permissionAllowSuppressesDialog) {
425
439
  (deps.recordAllow ?? recordAllowedPermission)(session, payload);
426
440
  }
441
+ recordHookRequestInLedger(session, payload, decision, capabilities.permissionAllowSuppressesDialog, options);
427
442
  return decision;
428
443
  }
444
+ /**
445
+ * The ledger's half of a hook request (Issue #3820, design §2.3, §3.4): what was
446
+ * decided — an allow that draws no dialog is the confirmation, anything else
447
+ * leaves the waiting to the screen's confirmation — and the CLI's own mode when
448
+ * the payload states it. Nothing without a `hookRequestId`, which only the hook
449
+ * route issues. The ledger never throws, and nothing here decides anything.
450
+ */
451
+ function recordHookRequestInLedger(session, payload, decision, allowSuppressesDialog, options) {
452
+ if (!options.hookRequestId)
453
+ return;
454
+ (0, auto_yes_confirmation_ledger_1.decideLedgerHookRequest)(options.hookRequestId, {
455
+ outcome: decision.behavior === 'allow' ? 'allow' : 'abstained',
456
+ ...(decision.behavior === 'allow' ? {} : { abstainReason: decision.reason }),
457
+ allowSuppressesDialog,
458
+ promptType: exports.PERMISSION_REQUEST_PROMPT_TYPE,
459
+ // PR 3 (design §2.4): agy's call, tying the request to the screen's
460
+ // confirmation and to the call's `PostToolUse`.
461
+ ...(payload?.callId ? { callId: payload.callId } : {}),
462
+ });
463
+ if (payload?.permissionMode) {
464
+ (0, auto_yes_confirmation_ledger_1.observeLedgerCliMode)(session, payload.permissionMode);
465
+ }
466
+ }
@@ -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).
@@ -24,7 +24,8 @@
24
24
  * ## What is kept
25
25
  *
26
26
  * ONE entry per instance: the tool name and the arrival time of the most recent
27
- * question. A second question replaces the first, because the only thing asked
27
+ * question, and the call it asked about (`callId`, Issue #3820) when the body
28
+ * named one. A second question replaces the first, because the only thing asked
28
29
  * of this record is "was there one lately".
29
30
  *
30
31
  * The screen carries no tool name (only the option labels), so the caller that
@@ -42,6 +43,7 @@ exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS = void 0;
42
43
  exports.recordAntigravityPermissionReceipt = recordAntigravityPermissionReceipt;
43
44
  exports.hasRecentAntigravityPermissionReceipt = hasRecentAntigravityPermissionReceipt;
44
45
  exports.getAntigravityPermissionReceiptAt = getAntigravityPermissionReceiptAt;
46
+ exports.getAntigravityPermissionReceiptCallId = getAntigravityPermissionReceiptCallId;
45
47
  exports.resetAntigravityPermissionReceiptsForTests = resetAntigravityPermissionReceiptsForTests;
46
48
  const auto_yes_state_1 = require("../../lib/auto-yes-state");
47
49
  const global_state_1 = require("../global-state");
@@ -87,12 +89,14 @@ const observations = (0, global_state_1.getOrInitGlobal)('__antigravityReceiptOb
87
89
  * @param instanceId - Agent instance id (the tool id itself for the primary)
88
90
  * @param toolName - Tool the request named, or null when the payload had none
89
91
  * @param at - Epoch ms the request arrived
92
+ * @param callId - Issue #3820: the call the request asked about
93
+ * (`PermissionRequestPayload.callId`), null when it named none
90
94
  */
91
- function recordAntigravityPermissionReceipt(worktreeId, cliToolId, instanceId, toolName, at = Date.now()) {
95
+ function recordAntigravityPermissionReceipt(worktreeId, cliToolId, instanceId, toolName, at = Date.now(), callId = null) {
92
96
  if (toolName === null)
93
97
  return;
94
98
  pruneExpiredReceipts(at);
95
- receipts.set((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), { toolName, at });
99
+ receipts.set((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), { toolName, at, callId });
96
100
  }
97
101
  /**
98
102
  * Did agy ask CommandMate about a tool call, for this instance, within
@@ -121,6 +125,13 @@ function hasRecentAntigravityPermissionReceipt(worktreeId, cliToolId, instanceId
121
125
  function getAntigravityPermissionReceiptAt(worktreeId, cliToolId, instanceId) {
122
126
  return receipts.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId))?.at ?? null;
123
127
  }
128
+ /**
129
+ * The call the latest question asked about (Issue #3820), or null when it
130
+ * named none or none was received. For the ledger only.
131
+ */
132
+ function getAntigravityPermissionReceiptCallId(worktreeId, cliToolId, instanceId) {
133
+ return receipts.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId))?.callId ?? null;
134
+ }
124
135
  /** Empty the record. Tests only: production entries age out on their own. */
125
136
  function resetAntigravityPermissionReceiptsForTests() {
126
137
  receipts.clear();