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
@@ -6,14 +6,24 @@
6
6
  * `AutoYesPollerState`. Must not import auto-yes-poller.ts (cycle).
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.partialAnswerScreenKey = exports.UNIDENTIFIED_SCREEN_KEY = void 0;
10
+ exports.getAutoYesLastAnswer = getAutoYesLastAnswer;
9
11
  exports.promptFrameKey = promptFrameKey;
10
12
  exports.warnOncePerFrame = warnOncePerFrame;
11
- exports.partialAnswerScreenKey = partialAnswerScreenKey;
13
+ exports.partialAnswerCovers = partialAnswerCovers;
14
+ exports.ledgerScreenKey = ledgerScreenKey;
15
+ exports.approvalTargetWithoutCursor = approvalTargetWithoutCursor;
12
16
  exports.getPartialAnswer = getPartialAnswer;
13
17
  exports.forgetPartialAnswer = forgetPartialAnswer;
18
+ exports.personSendsInFlight = personSendsInFlight;
14
19
  exports.forgetPartialAnswersByWorktree = forgetPartialAnswersByWorktree;
20
+ exports.releasePartialAnswerToHuman = releasePartialAnswerToHuman;
21
+ exports.identifyPartialAnswerScreen = identifyPartialAnswerScreen;
22
+ exports.keepPartialAnswerByPerson = keepPartialAnswerByPerson;
23
+ exports.nextSendOrder = nextSendOrder;
15
24
  exports.clearPartialAnswers = clearPartialAnswers;
16
25
  exports.beginSendAttempt = beginSendAttempt;
26
+ exports.beginManualSendAttempt = beginManualSendAttempt;
17
27
  exports.settleSendAttempt = settleSendAttempt;
18
28
  exports.hasMovedSendInFlight = hasMovedSendInFlight;
19
29
  exports.movePartialAnswers = movePartialAnswers;
@@ -22,7 +32,18 @@ const logger_1 = require("../../lib/logger");
22
32
  const auto_yes_state_1 = require("../auto-yes-state");
23
33
  const global_state_1 = require("../global-state");
24
34
  const auto_yes_enter_fallback_state_1 = require("./auto-yes-enter-fallback-state");
35
+ const appearance_1 = require("../prompt-observation/appearance");
36
+ const prompt_screen_key_1 = require("../detection/prompt-screen-key");
25
37
  const logger = (0, logger_1.createLogger)('auto-yes-poller');
38
+ /**
39
+ * The Auto-Yes poller's last answer for one instance (Issue #3798), for the
40
+ * other observers of the same waiting episode (the response poller). Read off
41
+ * `globalThis` (`__autoYesPollerStates`) as the push gate reads the poller's
42
+ * answer time, so a reader need not import the poller.
43
+ */
44
+ function getAutoYesLastAnswer(compositeKey) {
45
+ return globalThis.__autoYesPollerStates?.get(compositeKey)?.lastAnswer ?? null;
46
+ }
26
47
  /**
27
48
  * Issue #2995: what makes two ticks "the same prompt" for `warnOncePerFrame`.
28
49
  *
@@ -63,29 +84,82 @@ function warnOncePerFrame(pollerState, frameKey, event, fields) {
63
84
  logger.warn(event, fields);
64
85
  }
65
86
  /**
66
- * Which prompt a stopped answer is about (Issue #3706): the type, the question,
67
- * the option labels and `approvalTarget` — what {@link promptFrameKey} tells
68
- * apart — but NOT where the cursor is. The keys that were sent may have moved
69
- * the cursor themselves (a `Down` whose Enter was withheld), and that must not
70
- * make the same list read as a new one; a different list or a different command
71
- * under the same question is a new prompt and is answered.
87
+ * The screen key of a person's send made with no prompt read off the screen
88
+ * (Issue #3880: the capture before it failed). A hold at it covers whatever
89
+ * confirmation the next tick reads, and takes that confirmation's key there
90
+ * ({@link identifyPartialAnswerScreen}); from then on it is released like any
91
+ * other — the screen changing, the session relaunched, a person's answer going
92
+ * through — and before then by a frame with no prompt on it.
72
93
  */
73
- function partialAnswerScreenKey(promptData) {
74
- const options = promptData.type === 'multiple_choice'
75
- ? promptData.options.map((o) => `${o.number}.${o.label}`).join('\n')
76
- : promptData.options.join('\n');
77
- return [(0, prompt_key_1.generatePromptKey)(promptData), options, withoutCursorMarks(promptData.approvalTarget ?? '')].join('\u0000');
94
+ exports.UNIDENTIFIED_SCREEN_KEY = '\u0000unidentified-screen';
95
+ /** Whether a hold (or a send) at `heldScreenKey` covers the confirmation at `screenKey`. */
96
+ function partialAnswerCovers(heldScreenKey, screenKey) {
97
+ return heldScreenKey === screenKey || heldScreenKey === exports.UNIDENTIFIED_SCREEN_KEY;
78
98
  }
99
+ /** Issue #3798: moved to `detection/prompt-screen-key`, where the waiting episodes read it too. */
100
+ var prompt_screen_key_2 = require("../detection/prompt-screen-key");
101
+ Object.defineProperty(exports, "partialAnswerScreenKey", { enumerable: true, get: function () { return prompt_screen_key_2.promptScreenKey; } });
79
102
  /**
80
- * `approvalTarget` with the cursor taken out: the generic parser copies the
81
- * option panel into it, `❯` row included, so a moved cursor would otherwise
82
- * read as another prompt. Leading indentation goes too — the cursor row is the
83
- * one indented differently.
103
+ * Which confirmation the ledger counts a prompt as (Issue #3820): the
104
+ * {@link partialAnswerScreenKey} reading where the option rows can be told,
105
+ * and otherwise one that still keeps the body. That key's fallback takes the
106
+ * marks and indent off every row — for a partial answer, two bodies reading as
107
+ * one screen holds the prompt for a human, the safe side — but for counting it
108
+ * makes two confirmations whose commands differ by a `>` or an indent one.
109
+ * Here only the rows that ARE the options the reader read — the row's number
110
+ * and label match one of `promptData.options` — lose their gutter (where the
111
+ * cursor sits); every other row, a numbered line of the body included, stays
112
+ * byte for byte. The match takes the separator as the readers do: `1.`, `1)`
113
+ * or a bare `1` followed by any run of spaces (`❯ 1 Yes`).
84
114
  */
85
- function withoutCursorMarks(text) {
115
+ function ledgerScreenKey(promptData) {
116
+ if (promptData.type !== 'multiple_choice')
117
+ return (0, prompt_screen_key_1.promptScreenKey)(promptData);
118
+ const target = promptData.approvalTarget ?? '';
119
+ const aligned = (0, appearance_1.approvalTargetWithOptionRowsAligned)(target, promptData.options.map((o) => o.label), (read, named) => read.startsWith(named));
120
+ if (aligned !== null)
121
+ return (0, prompt_screen_key_1.promptScreenKey)(promptData);
122
+ const options = promptData.options.map((o) => `${o.number}.${o.label}`).join('\n');
123
+ return [(0, prompt_key_1.generatePromptKey)(promptData), options, withOptionRowGuttersAligned(target, promptData.options)].join('\u0000');
124
+ }
125
+ /**
126
+ * `approvalTarget` with only the cursor taken out of its option rows, or null
127
+ * when the prompt has none (Issue #3821, the identity of the confirmation an
128
+ * Auto-Yes decision is about). The reading {@link ledgerScreenKey} keeps: the
129
+ * rows the block reader adopted as the options are aligned
130
+ * (`approvalTargetWithOptionRowsAligned`), else only the rows that ARE the
131
+ * prompt's options lose their gutter; the body — its indent, a `>`, a blank
132
+ * row — stays byte for byte, so two commands that differ there are two
133
+ * confirmations (#3817), and a moved cursor is the same one.
134
+ */
135
+ function approvalTargetWithoutCursor(promptData) {
136
+ const target = promptData.approvalTarget;
137
+ if (typeof target !== 'string')
138
+ return null;
139
+ if (promptData.type !== 'multiple_choice')
140
+ return target;
141
+ return ((0, appearance_1.approvalTargetWithOptionRowsAligned)(target, promptData.options.map((o) => o.label), (read, named) => read.startsWith(named)) ?? withOptionRowGuttersAligned(target, promptData.options));
142
+ }
143
+ /** A row's leading cursor marks and indentation. */
144
+ const LEADING_MARKS_PATTERN = /^[\s\u276F\u203A>\u25B6\u25BA\u25CF\u25CB\u25C9\u2192]+/u;
145
+ /** A row's option number and the text after its separator (`1.`, `1)` or `1`, then spaces). */
146
+ const OPTION_ROW_PATTERN = /^(\d+)(?:[.)]\s*|\s+)(.*)$/u;
147
+ const collapseSpaces = (text) => text.replace(/\s+/gu, ' ').trim();
148
+ /** Rows that match one of `options` lose their leading marks and indent; the rest stay. */
149
+ function withOptionRowGuttersAligned(text, options) {
86
150
  return text
87
151
  .split('\n')
88
- .map((line) => line.replace(/^[\s\u276F\u203A>\u25B6\u25BA\u25CF\u25CB\u25C9\u2192]+/u, ''))
152
+ .map((line) => {
153
+ const row = OPTION_ROW_PATTERN.exec(line.replace(LEADING_MARKS_PATTERN, ''));
154
+ if (row === null)
155
+ return line;
156
+ const rest = collapseSpaces(row[2]);
157
+ const isOption = options.some((option) => {
158
+ const label = collapseSpaces(option.label);
159
+ return option.number === Number(row[1]) && label !== '' && rest.startsWith(label);
160
+ });
161
+ return isOption ? line.replace(LEADING_MARKS_PATTERN, '') : line;
162
+ })
89
163
  .join('\n');
90
164
  }
91
165
  /** compositeKey -> the answer stopped part-way. globalThis for hot reload (#153). */
@@ -104,6 +178,7 @@ function getPartialAnswer(compositeKey, epoch) {
104
178
  }
105
179
  return partial;
106
180
  }
181
+ const NO_ATTEMPTS = new Set();
107
182
  /**
108
183
  * Forget it: the prompt left the screen, another prompt came up, or the session ended.
109
184
  *
@@ -115,6 +190,8 @@ function getPartialAnswer(compositeKey, epoch) {
115
190
  * and records as before. Expiring is the mark: it drops the attempt from the
116
191
  * registry, so no per-key "forgotten up to seq" state has to outlive it.
117
192
  *
193
+ * @param spare - Issue #3880: sends that are not expired (a person's, at agy's
194
+ * dialog the ungated reading still shows)
118
195
  * @param screenKey - Given when the memory is dropped because ANOTHER prompt is
119
196
  * on screen (re-instruction 3): only the sends at the forgotten memory's
120
197
  * screen are expired. A send at the screen now shown (Y, carried here by a
@@ -122,16 +199,27 @@ function getPartialAnswer(compositeKey, epoch) {
122
199
  * stop is still remembered when it comes back. Omitted (the prompt left the
123
200
  * screen), every send under the key is expired.
124
201
  */
125
- function forgetPartialAnswer(compositeKey, screenKey) {
202
+ function forgetPartialAnswer(compositeKey, screenKey, spare = NO_ATTEMPTS) {
126
203
  partialAnswers.delete(compositeKey);
127
204
  for (const attempt of [...sendAttempts]) {
128
205
  if (attempt.recordKey !== compositeKey)
129
206
  continue;
130
207
  if (screenKey !== undefined && attempt.screenKey !== screenKey)
131
208
  continue;
209
+ if (spare.has(attempt))
210
+ continue;
132
211
  expireSendAttempt(attempt);
133
212
  }
134
213
  }
214
+ /**
215
+ * A person's sends still in flight under this key, to this session epoch
216
+ * (Issue #3880): agy's gated reading seeing no prompt does not say the screen
217
+ * they type at is gone, so the tick checks the ungated reading before it
218
+ * expires them ({@link forgetPartialAnswer}'s `spare`).
219
+ */
220
+ function personSendsInFlight(compositeKey, epoch) {
221
+ return [...sendAttempts].filter((attempt) => attempt.byPerson === true && attempt.recordKey === compositeKey && attempt.recordEpoch === epoch);
222
+ }
135
223
  /**
136
224
  * {@link forgetPartialAnswer} for every instance of a worktree, and the sends
137
225
  * still in flight there are expired (Issue #3713): a slow tick that comes back
@@ -149,6 +237,53 @@ function forgetPartialAnswersByWorktree(worktreeId) {
149
237
  expireSendAttempt(attempt);
150
238
  }
151
239
  }
240
+ /**
241
+ * A person's answer went through, or was refused before any key (Issue #3880):
242
+ * the answer Auto-Yes held at that confirmation is theirs now, so the hold is
243
+ * dropped — only one recorded before the person's answer began (`before`, its
244
+ * {@link nextSendOrder}). A hold recorded since, by a send begun after theirs
245
+ * (another person's from another screen, a tick's), is about what that send
246
+ * did and stays. Only the record: a send still in flight records what it did
247
+ * when it comes back. Not called when a person's own send may have left keys
248
+ * on the pane, nor at the START of their answer.
249
+ */
250
+ function releasePartialAnswerToHuman(compositeKey, before) {
251
+ const recorded = partialAnswers.get(compositeKey);
252
+ if (recorded !== undefined && recorded.seq < before)
253
+ partialAnswers.delete(compositeKey);
254
+ }
255
+ /**
256
+ * The hold's screen, now that a tick read the confirmation on screen (Issue
257
+ * #3880): a hold at {@link UNIDENTIFIED_SCREEN_KEY} takes `screenKey`.
258
+ */
259
+ function identifyPartialAnswerScreen(compositeKey, screenKey) {
260
+ const recorded = partialAnswers.get(compositeKey);
261
+ if (recorded?.screenKey === exports.UNIDENTIFIED_SCREEN_KEY)
262
+ partialAnswers.set(compositeKey, { ...recorded, screenKey });
263
+ }
264
+ /**
265
+ * Put back a person's hold the tick dropped because its gated reading saw no
266
+ * prompt, while agy's dialog it is about is still up past the receipt window
267
+ * (Issue #3880). Only into the same session, and over nothing newer.
268
+ */
269
+ function keepPartialAnswerByPerson(compositeKey, partial, screenKey) {
270
+ if ((0, auto_yes_enter_fallback_state_1.getEnterFallbackSessionEpoch)(compositeKey) !== partial.epoch)
271
+ return;
272
+ const recorded = partialAnswers.get(compositeKey);
273
+ if (recorded !== undefined && recorded.seq > partial.seq)
274
+ return;
275
+ partialAnswers.set(compositeKey, { ...partial, screenKey });
276
+ }
277
+ /**
278
+ * A place in the order sends are registered in (Issue #3880): a person's
279
+ * answer takes one as it begins, so the hold it releases when it ends is only
280
+ * one recorded by a send registered before it began. What its own send
281
+ * records is ordered by that send's registration instead
282
+ * ({@link beginManualSendAttempt}).
283
+ */
284
+ function nextSendOrder() {
285
+ return ++sendAttemptSeq.last;
286
+ }
152
287
  /** Forget every one, and expire every send in flight: server shutdown, and a test seam. */
153
288
  function clearPartialAnswers() {
154
289
  partialAnswers.clear();
@@ -158,8 +293,12 @@ function clearPartialAnswers() {
158
293
  /** The sends in flight. globalThis for hot reload (#153), like the Map above. */
159
294
  const sendAttempts = (0, global_state_1.getOrInitGlobal)('__autoYesSendAttempts', () => new Set());
160
295
  const sendAttemptSeq = (0, global_state_1.getOrInitGlobal)('__autoYesSendAttemptSeq', () => ({ last: 0 }));
161
- /** Register a send about to start (the poller, before `sendPromptAnswer`). */
162
- function beginSendAttempt(compositeKey, screenKey, epoch) {
296
+ /**
297
+ * Register a send about to start (the poller, before `sendPromptAnswer`).
298
+ *
299
+ * @param ledger - Issue #3820: the ledger's handle for this send, if any
300
+ */
301
+ function beginSendAttempt(compositeKey, screenKey, epoch, ledger = null) {
163
302
  const attempt = {
164
303
  seq: ++sendAttemptSeq.last,
165
304
  screenKey,
@@ -167,16 +306,43 @@ function beginSendAttempt(compositeKey, screenKey, epoch) {
167
306
  recordEpoch: epoch,
168
307
  moved: false,
169
308
  state: 'pending',
309
+ ledger,
310
+ };
311
+ sendAttempts.add(attempt);
312
+ return attempt;
313
+ }
314
+ /**
315
+ * Register a person's send about to start (Issue #3880): the screen it types
316
+ * at and the session epoch it goes to, fixed now, and its place among the
317
+ * sends taken now too, as Auto-Yes's own is — not when the answer began: an
318
+ * answer that waited before its first key (the re-verification of the screen)
319
+ * may send after one begun later, and then its keys are the newer ones.
320
+ * Settled with {@link settleSendAttempt} like Auto-Yes's own, so it records a
321
+ * hold only for the session the keys went to, never over a hold of a send
322
+ * registered after it, and not at all once the screen it typed at was seen gone.
323
+ */
324
+ function beginManualSendAttempt(compositeKey, screenKey) {
325
+ const attempt = {
326
+ seq: ++sendAttemptSeq.last,
327
+ screenKey,
328
+ recordKey: compositeKey,
329
+ recordEpoch: (0, auto_yes_enter_fallback_state_1.getEnterFallbackSessionEpoch)(compositeKey),
330
+ moved: false,
331
+ state: 'pending',
332
+ byPerson: true,
333
+ ledger: null,
170
334
  };
171
335
  sendAttempts.add(attempt);
172
336
  return attempt;
173
337
  }
174
338
  /**
175
339
  * The send came back. `keysSent` — it was stopped with keys already on the
176
- * pane — records the partial answer under the attempt's key as it is now, when
177
- * that key's session is still the one the keys went to; otherwise (sent in
178
- * full, stopped before any key, or failed) only the attempt itself is removed.
179
- * A second call, or a call on an expired attempt, does nothing.
340
+ * pane, or (Issue #3880) a tmux call of it ended without an exit status and
341
+ * its keys may be there — records the partial answer under the attempt's key
342
+ * as it is now, when that key's session is still the one the keys went to;
343
+ * otherwise (sent in full, stopped before any key, or failed with nothing
344
+ * sent) only the attempt itself is removed. A second call, or a call on an
345
+ * expired attempt, does nothing.
180
346
  */
181
347
  function settleSendAttempt(attempt, keysSent, at = Date.now()) {
182
348
  if (attempt.state !== 'pending')
@@ -198,6 +364,7 @@ function settleSendAttempt(attempt, keysSent, at = Date.now()) {
198
364
  epoch: attempt.recordEpoch,
199
365
  at,
200
366
  seq: attempt.seq,
367
+ ...(attempt.byPerson ? { byPerson: true } : {}),
201
368
  });
202
369
  }
203
370
  function expireSendAttempt(attempt) {
@@ -217,7 +384,7 @@ function hasMovedSendInFlight(compositeKey, epoch, screenKey) {
217
384
  if (attempt.moved &&
218
385
  attempt.recordKey === compositeKey &&
219
386
  attempt.recordEpoch === epoch &&
220
- attempt.screenKey === screenKey) {
387
+ partialAnswerCovers(attempt.screenKey, screenKey)) {
221
388
  return true;
222
389
  }
223
390
  }
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-Yes poller: synchronous steps of `detectAndRespondToPrompt` that decide
4
+ * whether a read prompt is left alone (Issue #3781) (Issue #3783: split out of
5
+ * `auto-yes-poller.ts`).
6
+ *
7
+ * Does not statically import `auto-yes-poller.ts` (no cycle outside the
8
+ * baseline in `import-cycles-baseline-3482`, which does not count dynamic
9
+ * `import()`).
10
+ *
11
+ * @module lib/polling/auto-yes-poller-steps
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.withheldForEarlierSend = withheldForEarlierSend;
15
+ exports.answerModeOfTick = answerModeOfTick;
16
+ exports.questionAnsweringOf = questionAnsweringOf;
17
+ exports.withheldAsQuestion = withheldAsQuestion;
18
+ exports.withheldAtSend = withheldAtSend;
19
+ exports.resolveAnswerUnderPolicy = resolveAnswerUnderPolicy;
20
+ exports.skippedForUnownedSession = skippedForUnownedSession;
21
+ const auto_yes_resolver_1 = require("./auto-yes-resolver");
22
+ const auto_yes_policy_1 = require("./auto-yes-policy");
23
+ const auto_yes_suppression_reason_1 = require("./auto-yes-suppression-reason");
24
+ const auto_yes_state_1 = require("../auto-yes-state");
25
+ const auto_yes_dialog_gate_1 = require("./auto-yes-dialog-gate");
26
+ const auto_yes_answer_mode_1 = require("../../types/auto-yes-answer-mode");
27
+ const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
28
+ const auto_yes_prompt_suppression_1 = require("./auto-yes-prompt-suppression");
29
+ const auto_yes_confirmation_ledger_1 = require("./auto-yes-confirmation-ledger");
30
+ /**
31
+ * Step 2.5 of `detectAndRespondToPrompt`: whether an earlier send to this
32
+ * screen keeps the prompt from being answered now.
33
+ *
34
+ * @returns true when the prompt is withheld (the caller returns `no_answer`)
35
+ */
36
+ function withheldForEarlierSend(judged, screenKey, epoch) {
37
+ const { worktreeId, cliToolId, instanceId, compositeKey, pollerState, promptData, frameKey } = judged;
38
+ const partial = (0, auto_yes_poller_state_1.getPartialAnswer)(compositeKey, epoch);
39
+ if (partial !== null) {
40
+ if ((0, auto_yes_poller_state_1.partialAnswerCovers)(partial.screenKey, screenKey)) {
41
+ // Issue #3880: a person's send made with no prompt read (the capture
42
+ // failed) holds the first confirmation read after it, as that one.
43
+ (0, auto_yes_poller_state_1.identifyPartialAnswerScreen)(compositeKey, screenKey);
44
+ (0, auto_yes_prompt_suppression_1.suppressAndWarnOnce)(judged, {
45
+ reason: auto_yes_suppression_reason_1.PARTIAL_ANSWER_SUPPRESSION_REASON,
46
+ mode: null,
47
+ promptType: promptData.type,
48
+ }, `${frameKey}\u0000partial-answer`, 'poller:auto-yes-skipped-partial-answer', { promptType: promptData.type, stoppedAt: partial.at });
49
+ return true;
50
+ }
51
+ // Another prompt is on screen: only the sends at the forgotten one's
52
+ // screen go with it (#3713) — one in flight at this screen keeps its hold.
53
+ (0, auto_yes_poller_state_1.forgetPartialAnswer)(compositeKey, partial.screenKey);
54
+ }
55
+ // Issue #3713: a worktree ID move carried an answer still being sent to
56
+ // this session's key. Its keys may already be on the pane, and how its send
57
+ // ends is not known yet — so this screen gets no keys until it comes back
58
+ // (recorded as a partial answer above, or gone).
59
+ if ((0, auto_yes_poller_state_1.hasMovedSendInFlight)(compositeKey, epoch, screenKey)) {
60
+ // Issue #3820: a stop the policy record never carries — the ledger's own reason.
61
+ (0, auto_yes_confirmation_ledger_1.withholdLedgerConfirmation)(judged, 'moved-send-in-flight');
62
+ (0, auto_yes_poller_state_1.warnOncePerFrame)(pollerState, `${frameKey}\u0000moved-send-in-flight`, 'poller:auto-yes-skipped-moved-send-in-flight', { worktreeId, cliToolId, instanceId, promptType: promptData.type });
63
+ return true;
64
+ }
65
+ return false;
66
+ }
67
+ /**
68
+ * The answer mode a tick acts under (Issue #3863): the grant the tick read
69
+ * (its generation's, #3706), or — for a direct caller with no generation —
70
+ * the instance's grant as it stands, if it is on. Neither: the default,
71
+ * `recommended`. A grant that cannot be read is `careful`, the mode that
72
+ * answers less.
73
+ */
74
+ function answerModeOfTick(worktreeId, cliToolId, instanceId, grant) {
75
+ if (grant !== undefined)
76
+ return (0, auto_yes_state_1.autoYesAnswerModeOf)(grant);
77
+ try {
78
+ const state = (0, auto_yes_state_1.getAutoYesState)(worktreeId, cliToolId, instanceId);
79
+ return state?.enabled ? (0, auto_yes_state_1.autoYesAnswerModeOf)(state) : auto_yes_answer_mode_1.DEFAULT_AUTO_YES_ANSWER_MODE;
80
+ }
81
+ catch {
82
+ return 'careful';
83
+ }
84
+ }
85
+ /**
86
+ * Issue #3863: what the resolver needs to answer the prompt as a question
87
+ * under `answerMode`, or undefined when it is not answered as one — not a
88
+ * question reader's picker, or the mode is `careful` (which never answers it).
89
+ */
90
+ function questionAnsweringOf(judged, answerMode) {
91
+ // Issue #3881 (review N3): the shared table, which the observation reads too.
92
+ const kind = (0, auto_yes_dialog_gate_1.classifyAutoYesQuestion)(judged.promptData, judged.dialogGate, judged.cliToolId);
93
+ if ((0, auto_yes_dialog_gate_1.autoYesQuestionTreatment)(kind, answerMode) !== 'recommended-choice')
94
+ return undefined;
95
+ return { optionRecommendations: judged.optionRecommendations };
96
+ }
97
+ /**
98
+ * Step 3.7 of `detectAndRespondToPrompt` (Issue #3822): a question to the
99
+ * operator is left to the human when Auto-Yes's answer mode says so.
100
+ *
101
+ * Issue #3863: which questions, by {@link classifyAutoYesQuestion}:
102
+ *
103
+ * - a question reader's picker (Claude's AskUserQuestion, Command Code's
104
+ * question screen) — left to a human under the `careful` answer mode; under
105
+ * `recommended` it goes on to step 4, which answers it with its recommended
106
+ * option (`auto-yes-question-choice`). Judged without the dialog gate, so a
107
+ * `legacy` tool and the `CM_AUTOYES_DIALOG_GATE` kill switch change nothing
108
+ * here;
109
+ * - OpenCode V2's question form — left to a human under either mode;
110
+ * - Issue #3881: a copilot / codex numbered list nothing marks as a question
111
+ * or as a permission (`'unidentified'`) — left to a human under `careful`;
112
+ * under `recommended` it goes on to step 4 and is answered as before.
113
+ *
114
+ * Not a contract verdict, so `allowPromptTypes` cannot bring it back: an
115
+ * `allow-listed` contract naming `multiple_choice` delegates permission
116
+ * dialogs, not the operator's questions.
117
+ *
118
+ * Recorded as `question-left-to-human` — a question in general, not the
119
+ * `Submit` / `Cancel` confirm page that follows one (`question-confirm-page`,
120
+ * #3748, recorded at step 3.3 before this step is reached).
121
+ *
122
+ * @returns true when the prompt is withheld (the caller returns `no_answer`)
123
+ */
124
+ function withheldAsQuestion(judged) {
125
+ const { promptData, dialogGate, cliToolId } = judged;
126
+ const kind = (0, auto_yes_dialog_gate_1.classifyAutoYesQuestion)(promptData, dialogGate, cliToolId);
127
+ if (kind === null)
128
+ return false;
129
+ const answerMode = judged.answerMode ?? auto_yes_answer_mode_1.DEFAULT_AUTO_YES_ANSWER_MODE;
130
+ if ((0, auto_yes_dialog_gate_1.autoYesQuestionTreatment)(kind, answerMode) !== 'left-to-human')
131
+ return false;
132
+ withholdQuestion(judged, answerMode, false, kind);
133
+ return true;
134
+ }
135
+ /** Record a question left to a human (`question-left-to-human`), warning once per frame. */
136
+ function withholdQuestion(judged, answerMode, atSend, kind) {
137
+ const { promptData, frameKey, dialogGate } = judged;
138
+ (0, auto_yes_prompt_suppression_1.suppressAndWarnOnce)(judged, { reason: auto_yes_suppression_reason_1.QUESTION_LEFT_TO_HUMAN_SUPPRESSION_REASON, mode: null, promptType: promptData.type }, `${frameKey}\u0000question`, 'poller:auto-yes-skipped-question', {
139
+ reason: auto_yes_suppression_reason_1.QUESTION_LEFT_TO_HUMAN_SUPPRESSION_REASON,
140
+ promptType: promptData.type,
141
+ dialogKind: dialogGate?.dialog?.kind ?? null,
142
+ // Issue #3881: `unidentified` — not known to be a question, nor not one.
143
+ questionKind: kind,
144
+ question: (0, auto_yes_prompt_suppression_1.truncateForLog)(promptData.question),
145
+ answerMode,
146
+ ...(atSend ? { atSend: true } : {}),
147
+ });
148
+ }
149
+ /**
150
+ * The last look before a key (Issue #3822): is the answer still Auto-Yes's to
151
+ * send? Asked after the last wait before the send (the ownership check), so
152
+ * nothing it reads can change before the first key goes out.
153
+ *
154
+ * - With a `generation` (a poller tick), Auto-Yes must still be on and inside
155
+ * its window. `getAutoYesState` disables an expired grant on read, the
156
+ * boundary the hook and the next tick see. Without one (direct callers,
157
+ * tests) the grant is not checked, as the tick checks nothing then (#3706).
158
+ * - The contract is read again past the policy cache, so a switched contract,
159
+ * an `off`, or a deny pattern added since the tick's lookup withholds the
160
+ * key. A read that fails is "contract unknown" (`policy-lookup-failed`), as
161
+ * in step 4, and so is a grant that cannot be read.
162
+ * - Issue #3863: the answer mode is read off that grant again. A question the
163
+ * `careful` mode leaves to a human gets no key, whatever the tick began
164
+ * under; the question's answer is resolved again under the mode as it is.
165
+ * (A mode change replaces the grant, so a tick that began under the old one
166
+ * has usually stopped at its last generation check already.)
167
+ *
168
+ * The `PermissionRequest` hook is not asked this: its `allow` IS the answer,
169
+ * decided against the grant and the contract when the hook is answered, and
170
+ * nothing is typed afterwards for a later look to stop.
171
+ *
172
+ * @param checkGrant - Whether the grant is checked (a tick with a generation)
173
+ * @returns true when the key is withheld (the caller returns `no_answer`)
174
+ */
175
+ function withheldAtSend(judged, checkGrant) {
176
+ const { worktreeId, cliToolId, instanceId, pollerState, promptData, frameKey } = judged;
177
+ let answerMode = judged.answerMode ?? auto_yes_answer_mode_1.DEFAULT_AUTO_YES_ANSWER_MODE;
178
+ if (checkGrant) {
179
+ let grant;
180
+ try {
181
+ grant = (0, auto_yes_state_1.getAutoYesState)(worktreeId, cliToolId, instanceId);
182
+ }
183
+ catch {
184
+ return withholdAsUnknown(judged);
185
+ }
186
+ if (!grant?.enabled) {
187
+ // Auto-Yes is off: nothing is recorded as withheld (the poller stops on
188
+ // its next tick and the state says why), only that the key was not sent.
189
+ (0, auto_yes_poller_state_1.warnOncePerFrame)(pollerState, `${frameKey}\u0000at-send-disabled`, 'poller:auto-yes-withheld-at-send', {
190
+ worktreeId,
191
+ cliToolId,
192
+ instanceId,
193
+ reason: grant?.stopReason === 'expired' ? 'expired' : 'auto-yes-disabled',
194
+ promptType: promptData.type,
195
+ });
196
+ return true;
197
+ }
198
+ answerMode = (0, auto_yes_state_1.autoYesAnswerModeOf)(grant);
199
+ const questionKind = (0, auto_yes_dialog_gate_1.classifyAutoYesQuestion)(promptData, judged.dialogGate, cliToolId);
200
+ if (answerMode === 'careful' && questionKind !== null
201
+ && (0, auto_yes_dialog_gate_1.autoYesQuestionTreatment)(questionKind, answerMode) === 'left-to-human') {
202
+ withholdQuestion(judged, answerMode, true, questionKind);
203
+ return true;
204
+ }
205
+ }
206
+ const policy = (0, auto_yes_policy_1.getSessionAutoYesPolicy)(worktreeId, cliToolId, instanceId, { fresh: true });
207
+ const resolution = (0, auto_yes_resolver_1.resolveAutoAnswerWithPolicy)(promptData, policy, cliToolId, questionAnsweringOf(judged, answerMode));
208
+ if (resolution.suppressedBy) {
209
+ const mode = (0, auto_yes_resolver_1.policyLookupMode)(policy);
210
+ (0, auto_yes_prompt_suppression_1.suppressAndWarnOnce)(judged, { reason: resolution.suppressedBy, mode, promptType: promptData.type, pattern: resolution.pattern }, `${frameKey}\u0000${resolution.suppressedBy}\u0000${mode ?? ''}\u0000${resolution.pattern ?? ''}`, 'poller:auto-yes-suppressed-by-policy', {
211
+ reason: resolution.suppressedBy,
212
+ mode,
213
+ pattern: resolution.pattern,
214
+ promptType: promptData.type,
215
+ atSend: true,
216
+ });
217
+ return true;
218
+ }
219
+ return false;
220
+ }
221
+ function withholdAsUnknown(judged) {
222
+ const { promptData, frameKey } = judged;
223
+ (0, auto_yes_prompt_suppression_1.suppressAndWarnOnce)(judged, { reason: auto_yes_suppression_reason_1.POLICY_LOOKUP_FAILED_SUPPRESSION_REASON, mode: null, promptType: promptData.type }, `${frameKey}\u0000${auto_yes_suppression_reason_1.POLICY_LOOKUP_FAILED_SUPPRESSION_REASON}\u0000at-send`, 'poller:auto-yes-suppressed-by-policy', { reason: auto_yes_suppression_reason_1.POLICY_LOOKUP_FAILED_SUPPRESSION_REASON, mode: null, promptType: promptData.type, atSend: true });
224
+ return true;
225
+ }
226
+ /**
227
+ * Step 4 of `detectAndRespondToPrompt`: the auto answer under the execution
228
+ * contract's policy, recording the suppression when the policy withholds it.
229
+ *
230
+ * @returns The answer to send, or null when there is none
231
+ */
232
+ function resolveAnswerUnderPolicy(judged) {
233
+ const { worktreeId, cliToolId, instanceId, promptData, frameKey } = judged;
234
+ // Issue #3822: a failed lookup reaches the resolver as unknown and withholds.
235
+ const policy = (0, auto_yes_policy_1.getSessionAutoYesPolicy)(worktreeId, cliToolId, instanceId);
236
+ // Issue #3863: a question the `recommended` mode answers takes its recommended option.
237
+ const resolution = (0, auto_yes_resolver_1.resolveAutoAnswerWithPolicy)(promptData, policy, cliToolId, questionAnsweringOf(judged, judged.answerMode ?? auto_yes_answer_mode_1.DEFAULT_AUTO_YES_ANSWER_MODE));
238
+ if (resolution.suppressedBy) {
239
+ const mode = (0, auto_yes_resolver_1.policyLookupMode)(policy);
240
+ // Issue #1684: the log line alone leaves a CLI-driven pipeline blind to
241
+ // why its worker stalled. Record the suppression so buildCurrentOutput
242
+ // can publish it (`autoYes.lastSuppression` in capture --json).
243
+ (0, auto_yes_prompt_suppression_1.suppressAndWarnOnce)(judged, {
244
+ reason: resolution.suppressedBy,
245
+ mode,
246
+ promptType: promptData.type,
247
+ pattern: resolution.pattern,
248
+ }, `${frameKey}\u0000${resolution.suppressedBy}\u0000${mode ?? ''}\u0000${resolution.pattern ?? ''}`, 'poller:auto-yes-suppressed-by-policy', {
249
+ reason: resolution.suppressedBy,
250
+ mode,
251
+ pattern: resolution.pattern,
252
+ promptType: promptData.type,
253
+ });
254
+ }
255
+ return resolution.answer;
256
+ }
257
+ /**
258
+ * Issue #2865: whether the session is not this server's to type into (another
259
+ * server created it, or the worktree is gone), warning once per frame.
260
+ *
261
+ * @returns true when the caller returns `no_answer`
262
+ */
263
+ function skippedForUnownedSession(judged, sessionName, ownership) {
264
+ const { worktreeId, cliToolId, instanceId, pollerState, frameKey } = judged;
265
+ if (ownership === null || ownership.verdict === 'foreign') {
266
+ // Issue #3820: as above, the ledger's own reason.
267
+ (0, auto_yes_confirmation_ledger_1.withholdLedgerConfirmation)(judged, 'foreign-session');
268
+ (0, auto_yes_poller_state_1.warnOncePerFrame)(pollerState, `${frameKey}\u0000${sessionName}\u0000${ownership ? 'foreign' : 'worktree_not_found'}`, 'poller:auto-yes-skipped-foreign-session', {
269
+ worktreeId,
270
+ cliToolId,
271
+ instanceId,
272
+ sessionName,
273
+ sessionPath: ownership?.sessionPath ?? null,
274
+ reason: ownership ? 'foreign' : 'worktree_not_found',
275
+ });
276
+ return true;
277
+ }
278
+ return false;
279
+ }
@@ -24,6 +24,7 @@ const auto_yes_confirm_page_1 = require("./auto-yes-confirm-page");
24
24
  const auto_yes_suppression_state_1 = require("./auto-yes-suppression-state");
25
25
  const auto_yes_dialog_gate_1 = require("./auto-yes-dialog-gate");
26
26
  const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
27
+ const auto_yes_confirmation_ledger_1 = require("./auto-yes-confirmation-ledger");
27
28
  /**
28
29
  * Issue #3214: the form the four suppression exits of `detectAndRespondToPrompt`
29
30
  * share. Records why Auto-Yes left the prompt alone (`recordPolicySuppression`,
@@ -38,6 +39,8 @@ const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
38
39
  function suppressAndWarnOnce(prompt, suppression, warnFrameKey, event, detail) {
39
40
  const { worktreeId, cliToolId, instanceId } = prompt;
40
41
  (0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, cliToolId, instanceId, suppression);
42
+ // Issue #3820: the same stop, as an interval of the confirmation on screen.
43
+ (0, auto_yes_confirmation_ledger_1.withholdLedgerConfirmation)(prompt, suppression.reason);
41
44
  (0, auto_yes_poller_state_1.warnOncePerFrame)(prompt.pollerState, warnFrameKey, event, {
42
45
  worktreeId,
43
46
  cliToolId,
@@ -244,8 +247,8 @@ function suppressIfNotOursToAnswer(prompt, frame) {
244
247
  //
245
248
  // Issue #3748: Claude's confirmation page (`Ready to submit your answers?` /
246
249
  // `❯ 1. Submit answers` / `2. Cancel`) is the same page and is declined the
247
- // same way. Judged by `isAutoYesDeclinedConfirmPage`, which the browser's
248
- // fallback (`useAutoYes`) asks too, and recorded with a reason of its own,
250
+ // same way. Judged by `isAutoYesDeclinedConfirmPage` (the browser's fallback,
251
+ // `useAutoYes`, read the same page by its options until #3821 retired it), and recorded with a reason of its own,
249
252
  // `question-confirm-page`, which `cmate wait` names as such (it reused
250
253
  // `unclassified-frame`, whose wording says no detector recognised the frame).
251
254
  if ((0, auto_yes_confirm_page_1.isAutoYesDeclinedConfirmPage)(cliToolId, frame)) {
@@ -280,6 +283,7 @@ function suppressIfNotOursToAnswer(prompt, frame) {
280
283
  if (!dialogGate.allowed) {
281
284
  return { kind: 'dialog-gate-refused', dialogGate };
282
285
  }
286
+ prompt.dialogGate = dialogGate;
283
287
  return { kind: 'ours' };
284
288
  }
285
289
  /**
@@ -296,6 +300,8 @@ function suppressUnclassifiedFrame(prompt, dialogGate) {
296
300
  gateMode: dialogGate.mode,
297
301
  });
298
302
  }
303
+ /** Issue #3820: the ledger's screen key for agy's startup trust screen (not a `partialAnswerScreenKey`). */
304
+ const ANTIGRAVITY_TRUST_SCREEN_LEDGER_KEY = 'antigravity-startup-trust';
299
305
  /**
300
306
  * Issue #3757: agy's startup folder-trust screen, which the tick read as no
301
307
  * prompt at all — it is unnumbered, so neither agy's dialog reader nor the
@@ -330,6 +336,11 @@ function suppressAntigravityTrustScreen(worktreeId, instanceId, pollerState, fra
330
336
  mode: null,
331
337
  promptType: 'multiple_choice',
332
338
  });
339
+ // Issue #3820: unnumbered, so no prompt data and no screen key of its own —
340
+ // the screen is one confirmation for as long as it stays up.
341
+ const ledgerScope = { worktreeId, cliToolId: 'antigravity', instanceId };
342
+ (0, auto_yes_confirmation_ledger_1.observeLedgerScreen)(ledgerScope, ANTIGRAVITY_TRUST_SCREEN_LEDGER_KEY, 'multiple_choice');
343
+ (0, auto_yes_confirmation_ledger_1.withholdLedgerConfirmation)(ledgerScope, auto_yes_suppression_reason_1.STARTUP_TRUST_UNHANDLED_SUPPRESSION_REASON);
333
344
  (0, auto_yes_poller_state_1.warnOncePerFrame)(pollerState, 'antigravity-startup-trust', 'poller:auto-yes-skipped-startup-trust', {
334
345
  worktreeId,
335
346
  cliToolId: 'antigravity',