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
@@ -16,6 +16,7 @@ exports.buildCompositeKey = buildCompositeKey;
16
16
  exports.extractWorktreeId = extractWorktreeId;
17
17
  exports.extractCliToolId = extractCliToolId;
18
18
  exports.extractInstanceId = extractInstanceId;
19
+ exports.autoYesAnswerModeOf = autoYesAnswerModeOf;
19
20
  exports.isAutoYesExpired = isAutoYesExpired;
20
21
  exports.getAutoYesState = getAutoYesState;
21
22
  exports.setAutoYesEnabled = setAutoYesEnabled;
@@ -36,12 +37,14 @@ exports.getCompositeKeysByWorktree = getCompositeKeysByWorktree;
36
37
  exports.deleteAutoYesStateByWorktree = deleteAutoYesStateByWorktree;
37
38
  exports.getEnabledAutoYesByWorktree = getEnabledAutoYesByWorktree;
38
39
  exports.getRestartReleasedAutoYesByWorktree = getRestartReleasedAutoYesByWorktree;
40
+ exports.getEnabledAutoYesAnswerModeByWorktree = getEnabledAutoYesAnswerModeByWorktree;
39
41
  exports.migrateAutoYesStateWorktreeIds = migrateAutoYesStateWorktreeIds;
40
42
  exports.calculateBackoffInterval = calculateBackoffInterval;
41
43
  const auto_yes_config_1 = require("../config/auto-yes-config");
42
44
  const path_validator_1 = require("./security/path-validator");
43
45
  const types_1 = require("./cli-tools/types");
44
46
  const logger_1 = require("../lib/logger");
47
+ const auto_yes_answer_mode_1 = require("../types/auto-yes-answer-mode");
45
48
  const global_state_1 = require("./global-state");
46
49
  const logger = (0, logger_1.createLogger)('auto-yes-state');
47
50
  // =============================================================================
@@ -124,6 +127,14 @@ function extractInstanceId(compositeKey) {
124
127
  // parts[2] = alias instanceId; fall back to parts[1] (cliToolId) for primary keys.
125
128
  return parts[2] ?? parts[1] ?? null;
126
129
  }
130
+ /**
131
+ * The answer mode a state stands for (Issue #3863): its own, or
132
+ * `recommended` for a state that predates the field. Not meaningful on a
133
+ * disabled state, whose mode a later enable does not inherit.
134
+ */
135
+ function autoYesAnswerModeOf(state) {
136
+ return state.answerMode ?? auto_yes_answer_mode_1.DEFAULT_AUTO_YES_ANSWER_MODE;
137
+ }
127
138
  /** In-memory storage for auto-yes states (globalThis for hot reload persistence) */
128
139
  const autoYesStates = (0, global_state_1.getOrInitGlobal)('__autoYesStates', () => new Map());
129
140
  // =============================================================================
@@ -196,10 +207,17 @@ function getAutoYesState(worktreeId, cliToolId = 'claude', instanceId) {
196
207
  * Defaults to DEFAULT_AUTO_YES_DURATION (1 hour) when omitted.
197
208
  * @param stopPattern - Optional regex pattern for stop condition (Issue #314).
198
209
  * @param instanceId - Optional instance identifier (Issue #896; defaults to primary).
199
- */
200
- function setAutoYesEnabled(worktreeId, cliToolId, enabled, duration, stopPattern, instanceId) {
210
+ * @param answerMode - Issue #3863: how questions are answered. Omitted, an
211
+ * enable over a LIVE grant keeps that grant's mode, and any other enable —
212
+ * from off, or over a grant that has run out — starts at `recommended`.
213
+ * Whether the grant is live is read through {@link getAutoYesState}, which
214
+ * turns an expired grant into a disabled one first, so an enable at or after
215
+ * the deadline is a new grant, not a continuation. Ignored when disabling.
216
+ */
217
+ function setAutoYesEnabled(worktreeId, cliToolId, enabled, duration, stopPattern, instanceId, answerMode) {
201
218
  const key = buildCompositeKey(worktreeId, cliToolId, instanceId);
202
219
  if (enabled) {
220
+ const current = answerMode === undefined ? getAutoYesState(worktreeId, cliToolId, instanceId) : null;
203
221
  const now = Date.now();
204
222
  const effectiveDuration = duration ?? auto_yes_config_1.DEFAULT_AUTO_YES_DURATION;
205
223
  const state = {
@@ -207,6 +225,7 @@ function setAutoYesEnabled(worktreeId, cliToolId, enabled, duration, stopPattern
207
225
  enabledAt: now,
208
226
  expiresAt: now + effectiveDuration,
209
227
  stopPattern,
228
+ answerMode: answerMode ?? (current?.enabled ? autoYesAnswerModeOf(current) : auto_yes_answer_mode_1.DEFAULT_AUTO_YES_ANSWER_MODE),
210
229
  };
211
230
  autoYesStates.set(key, state);
212
231
  notifyChangeAfterShutdown();
@@ -681,6 +700,35 @@ function getRestartReleasedAutoYesByWorktree() {
681
700
  }
682
701
  return byWorktree;
683
702
  }
703
+ /**
704
+ * The answer mode of every armed instance, grouped by worktree and keyed by
705
+ * instance, for the worktree list (Issue #3863).
706
+ *
707
+ * Its own map rather than a field on {@link getEnabledAutoYesByWorktree}'s
708
+ * entries, whose `{ enabled, expiresAt }` shape the list pins (#2512). The same
709
+ * instances that map holds (armed, read through {@link getAutoYesState} so an
710
+ * expiry resolved at read time drops out), each with the mode it runs under.
711
+ *
712
+ * @returns worktreeId -> instanceId -> mode; worktrees with nothing armed are absent
713
+ */
714
+ function getEnabledAutoYesAnswerModeByWorktree() {
715
+ const byWorktree = new Map();
716
+ // A snapshot of the keys: an expired read below rewrites its own entry.
717
+ for (const key of Array.from(autoYesStates.keys())) {
718
+ const cliToolId = extractCliToolId(key);
719
+ if (!cliToolId)
720
+ continue;
721
+ const worktreeId = extractWorktreeId(key);
722
+ const instanceId = extractInstanceId(key) ?? cliToolId;
723
+ const state = getAutoYesState(worktreeId, cliToolId, instanceId);
724
+ if (!state?.enabled)
725
+ continue;
726
+ const entries = byWorktree.get(worktreeId) ?? {};
727
+ entries[instanceId] = autoYesAnswerModeOf(state);
728
+ byWorktree.set(worktreeId, entries);
729
+ }
730
+ return byWorktree;
731
+ }
684
732
  /**
685
733
  * Re-key every auto-yes state whose worktree ID is being renamed
686
734
  * (Issue #1621 Phase 3).
@@ -289,7 +289,7 @@ function withoutTrailingBlankRows(lines) {
289
289
  end--;
290
290
  return lines.slice(0, end);
291
291
  }
292
- /** Default bounded read-back attempts before giving up (throwing). */
292
+ /** Default bounded recovery Enters (each read back) before giving up (throwing). */
293
293
  const DEFAULT_VERIFY_ATTEMPTS = 4;
294
294
  /**
295
295
  * First non-blank line of the message, trimmed. This is what a TUI shows on the
@@ -427,12 +427,61 @@ function comparePasteToken(token, message) {
427
427
  * and its first line is the input line. Every other frame (a one-row
428
428
  * composer, an empty or ghost one, none at all, another tool) is read exactly
429
429
  * as before.
430
+ *
431
+ * Issue #3880 (H-2): this is also the reader before Enter
432
+ * ({@link classifyPasteLanded}) and in the error text ({@link describeComposer}).
433
+ * The paste check used to read the twelve-row tail with {@link readComposer}
434
+ * alone, so a codex composer taller than that window (a 20-line paste, or 600
435
+ * bytes wrapped in a narrow pane) put its `›` row above the window — `unseen`,
436
+ * and the body that was in the composer was withdrawn and reported as not
437
+ * landed — and a continuation row starting with `>` (a Markdown quote) was taken
438
+ * for the input line — `mismatch`. The same frame read after Enter was
439
+ * `pending`. One reader on both sides of Enter keeps the two verdicts about the
440
+ * same composer.
441
+ */
442
+ /**
443
+ * Everything a codex composer holds, for deciding that a pasted body arrived in
444
+ * full (Issue #3880).
445
+ *
446
+ * `extractComposerText` answers for the UI: its text stops at 2,000 characters,
447
+ * at 40 rows and at the composer's first blank row, so a composer that matches
448
+ * it may still be missing the rest of the body — or hold something after it.
449
+ * This reads the raw rows instead, from the `›` row down to the last block of
450
+ * the frame (codex's model / cwd footer), so a body with blank lines, more than
451
+ * 40 rows or more than 2,000 characters is compared whole, and anything typed
452
+ * after the body is part of what is compared.
430
453
  */
454
+ function codexComposerRegion(output) {
455
+ const raw = output.split('\n');
456
+ const box = (0, composer_text_1.findCodexInputBox)(raw);
457
+ if (box === null)
458
+ return null;
459
+ const isBlank = (row) => (0, cli_patterns_1.stripAnsi)(row).trim() === '';
460
+ let end = raw.length - 1;
461
+ while (end >= 0 && isBlank(raw[end]))
462
+ end--;
463
+ let lastBlockStart = end;
464
+ while (lastBlockStart > 0 && !isBlank(raw[lastBlockStart - 1]))
465
+ lastBlockStart--;
466
+ const stop = lastBlockStart > box.lastRow ? lastBlockStart - 1 : end;
467
+ const rows = raw.slice(box.firstRow, stop + 1).map((row) => (0, cli_patterns_1.stripAnsi)(row));
468
+ rows[0] = rows[0].replace(/^\s*\u203A ?/, '');
469
+ return rows.join('\n');
470
+ }
431
471
  function readSubmitComposer(output, cliToolId, reader, lines, windowLines) {
432
472
  if (cliToolId === 'codex' && reader === 'input-line-marker') {
433
473
  const read = (0, composer_text_1.extractComposerText)(output, cliToolId);
434
- if (read.state === 'content' && read.text.includes('\n')) {
435
- return { kind: 'text', text: firstNonBlankLine(read.text), rows: read.text.split('\n') };
474
+ if (read.state === 'content') {
475
+ const region = codexComposerRegion(output) ?? read.text;
476
+ if (read.text.includes('\n')) {
477
+ return { kind: 'text', text: firstNonBlankLine(read.text), rows: read.text.split('\n'), region };
478
+ }
479
+ // Issue #3880 (N1): a one-row excerpt is read as before for its verdict
480
+ // after Enter, but still carries the whole region — `head` with the rest of
481
+ // the body under a blank row is one excerpt row and must not pass for the
482
+ // whole body before Enter.
483
+ const single = readComposer(reader, lines, windowLines);
484
+ return single.kind === 'text' ? { ...single, region } : single;
436
485
  }
437
486
  }
438
487
  return readComposer(reader, lines, windowLines);
@@ -530,14 +579,48 @@ function isSubmitted(output, cliToolId, message, composerSpec = (0, composer_spe
530
579
  * 3. Anything else — the idle placeholder, a ghost suggestion, no composer —
531
580
  * shows nothing of the body. `unseen`, which the caller decides about.
532
581
  *
533
- * Reads the same tail window as {@link classifySubmit}, so a history echo of an
534
- * earlier message above the composer is never mistaken for this one.
582
+ * Reads the composer the way {@link classifySubmit} does
583
+ * ({@link readSubmitComposer}), so a history echo of an earlier message above the
584
+ * composer is never mistaken for this one, and a frame both functions see holds
585
+ * the same composer for both (Issue #3880). A multi-row codex composer is
586
+ * compared as a whole ({@link codexComposerRegion}), whitespace removed
587
+ * (wrapping and continuation indent proof): only the WHOLE body is `landed`;
588
+ * the body's beginning alone is `pasting` (never enough to press Enter on), the
589
+ * body plus anything else or text from inside it is `mismatch`. The whole body
590
+ * is checked before placeholders, so a body that itself quotes
591
+ * `[Pasted Content 600 chars]` is its own text, not codex's placeholder; a real
592
+ * placeholder is only ever the composer's first row.
535
593
  */
536
594
  function classifyPasteLanded(output, cliToolId, message, composerSpec = (0, composer_spec_1.resolveComposerSpec)(cliToolId)) {
537
595
  const lines = withoutTrailingBlankRows((0, cli_patterns_1.stripAnsi)(output).split('\n'));
538
- const composer = readComposer(composerSpec.reader, lines, lines.slice(-VERIFY_WINDOW_LINES));
596
+ const composer = readSubmitComposer(output, cliToolId, composerSpec.reader, lines, lines.slice(-VERIFY_WINDOW_LINES));
539
597
  if (composer.kind !== 'text')
540
598
  return 'unseen';
599
+ if (composer.region !== undefined) {
600
+ const shown = compactText(composer.region);
601
+ const body = compactText(message);
602
+ if (shown === body)
603
+ return 'landed';
604
+ const placeholder = findPasteTokens(composer.text);
605
+ if (placeholder.tokens.length > 0) {
606
+ // A placeholder plus anything else — on its row or under it — is not the body as sent.
607
+ const below = compactText(composer.region.split('\n').slice(1).join('\n'));
608
+ if (placeholder.tokens.length > 1 || placeholder.rest !== '' || below !== '')
609
+ return 'mismatch';
610
+ return comparePasteToken(placeholder.tokens[0], message);
611
+ }
612
+ if (body.startsWith(shown))
613
+ return 'pasting';
614
+ // The body's beginning followed by something else, the body plus more, or a
615
+ // piece from inside it: the composer holds something other than the body.
616
+ if (inputMatchesBody(composer.text, message) || shown.startsWith(body) || body.includes(shown)) {
617
+ return 'mismatch';
618
+ }
619
+ return 'unseen';
620
+ }
621
+ // The whole body on one row is the body, even when it quotes a placeholder.
622
+ if (compactText(composer.text) === compactText(message))
623
+ return 'landed';
541
624
  const { tokens, rest } = findPasteTokens(composer.text);
542
625
  if (tokens.length === 0) {
543
626
  if (inputMatchesBody(composer.text, message))
@@ -591,9 +674,9 @@ async function pasteBody(sessionName, message) {
591
674
  }
592
675
  }
593
676
  /** The composer's first row, for an error message a person has to act on. */
594
- function describeComposer(output, composerSpec) {
677
+ function describeComposer(output, cliToolId, composerSpec) {
595
678
  const lines = withoutTrailingBlankRows((0, cli_patterns_1.stripAnsi)(output).split('\n'));
596
- const composer = readComposer(composerSpec.reader, lines, lines.slice(-VERIFY_WINDOW_LINES));
679
+ const composer = readSubmitComposer(output, cliToolId, composerSpec.reader, lines, lines.slice(-VERIFY_WINDOW_LINES));
597
680
  if (composer.kind === 'absent')
598
681
  return 'no composer on screen';
599
682
  if (composer.kind === 'empty')
@@ -666,7 +749,7 @@ async function confirmPasteLanded(params) {
666
749
  }
667
750
  const bytes = Buffer.byteLength(message, 'utf8');
668
751
  const lineCount = message.split('\n').length;
669
- const shown = describeComposer(output, composer);
752
+ const shown = describeComposer(output, cliToolId, composer);
670
753
  await withdrawUnsentBody(sessionName, cliToolId, composer);
671
754
  (0, tmux_capture_cache_1.invalidateCache)(sessionName);
672
755
  logger.error('paste-not-landed', { sessionName, cliToolId, state, bytes, lines: lineCount, shown });
@@ -730,7 +813,7 @@ async function confirmTypedBodyLanded(params) {
730
813
  return;
731
814
  }
732
815
  const bytes = Buffer.byteLength(message, 'utf8');
733
- const shown = describeComposer(output, composer);
816
+ const shown = describeComposer(output, cliToolId, composer);
734
817
  await withdrawUnsentBody(sessionName, cliToolId, composer);
735
818
  (0, tmux_capture_cache_1.invalidateCache)(sessionName);
736
819
  logger.error('typed-body-not-landed', { sessionName, cliToolId, bytes, attempts, shown });
@@ -819,9 +902,10 @@ async function clearComposerBeforeSend(sessionName, cliToolId, composerSpec = (0
819
902
  *
820
903
  * The body and Enter are always separate tmux commands (never batched), so the
821
904
  * TUI cannot swallow the Enter inside a bracketed-paste buffer. After the
822
- * initial submit the pane is read back up to `verifyAttempts` times; each time
823
- * it is still pending an extra Enter is sent. If submit can never be confirmed
824
- * the function THROWS — callers must surface that as a failure, never as
905
+ * initial submit the pane is read back; each time it is still pending an extra
906
+ * Enter is sent, up to `verifyAttempts` of them, and every Enter — the last one
907
+ * included (Issue #3880) — is read back before a verdict. If submit can never
908
+ * be confirmed the function THROWS — callers must surface that as a failure, never as
825
909
  * success (Issues #1469/#1470/#1471).
826
910
  *
827
911
  * A body longer than {@link LITERAL_SEND_MAX_BYTES} is pasted instead of typed,
@@ -884,8 +968,14 @@ async function sendMessageWithSubmitVerification(params) {
884
968
  }
885
969
  // 4. Read-back verification: confirm the message left the input box, resend
886
970
  // Enter while it is still pending, and throw if it never submits.
971
+ //
972
+ // Every Enter is followed by a read (Issue #3880, H-1): `attempts` resends
973
+ // take `attempts + 1` reads. The loop used to resend on its last pending read
974
+ // and throw straight after, so a message that only that last Enter submitted
975
+ // was reported "could not be confirmed" — a sent message as exit 99. The
976
+ // last read sends nothing: no Enter goes out that is not read back.
887
977
  const attempts = Math.max(1, verifyAttempts);
888
- for (let attempt = 0; attempt < attempts; attempt++) {
978
+ for (let attempt = 0; attempt <= attempts; attempt++) {
889
979
  await new Promise((resolve) => setTimeout(resolve, verifyDelayMs));
890
980
  const output = await (0, tmux_1.capturePane)(sessionName, { startLine: -composer.verifyCaptureLines });
891
981
  const state = classifySubmit(output, cliToolId, message, composer);
@@ -913,6 +1003,9 @@ async function sendMessageWithSubmitVerification(params) {
913
1003
  logger.error('submit-replaced-by-tui-completion', { sessionName, cliToolId, attempt });
914
1004
  throw new Error(`Message was replaced by a TUI autocompletion for session ${sessionName}; the input no longer matches the sent text. Cleared the input line without submitting to avoid executing a different command.`);
915
1005
  }
1006
+ // state === 'pending' after the final resend's read-back: give up below.
1007
+ if (attempt === attempts)
1008
+ break;
916
1009
  // state === 'pending' — still typed-but-unsent, resend a single Enter and re-check.
917
1010
  logger.warn('submit-not-confirmed:resending-enter', {
918
1011
  sessionName,
@@ -715,7 +715,11 @@ function recordAnsweredPrompt(db, params) {
715
715
  }
716
716
  const answeredAt = new Date().toISOString();
717
717
  if (target) {
718
- const updated = { ...target.parsed, status: 'answered', answer, answeredAt, answeredBy };
718
+ // Issue #3881 (review P2-2): the row keeps the reading it was saved with;
719
+ // one saved without a reading (before #3881) takes the answerer's, so a
720
+ // row's classification does not depend on which writer came first.
721
+ const reading = target.parsed.reading === undefined && promptData.reading !== undefined ? { reading: promptData.reading } : {};
722
+ const updated = { ...target.parsed, ...reading, status: 'answered', answer, answeredAt, answeredBy };
719
723
  updatePromptData(db, target.id, updated);
720
724
  return { message: getMessageById(db, target.id), created: false };
721
725
  }
@@ -21,6 +21,7 @@
21
21
  */
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
23
  exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.VERIFICATION_GATE_SOURCES = exports.VERIFICATION_TRIGGERS = void 0;
24
+ exports.parseGateTiming = parseGateTiming;
24
25
  exports.createVerificationRun = createVerificationRun;
25
26
  exports.finishVerificationRun = finishVerificationRun;
26
27
  exports.createGateResult = createGateResult;
@@ -54,6 +55,20 @@ exports.VERIFICATION_TRIGGERS = ['manual', 'wait', 'api', 'task'];
54
55
  * The runtime tuple mirrors the CHECK constraint in migration v56.
55
56
  */
56
57
  exports.VERIFICATION_GATE_SOURCES = ['builtin', 'verify.yaml', 'contract'];
58
+ /**
59
+ * How much of a gate's `log_tail` the history listing reads: enough for the
60
+ * `[timing]` line, which is the last line — never the log body.
61
+ */
62
+ const TIMING_TAIL_CHARS = 200;
63
+ /** The last line of `logEnd`, when it is the runner's `[timing]` line. */
64
+ const TIMING_LINE = /(?:^|\n)\[timing\] queue=(\d+(?:\.\d+)?)s mutex=(\d+(?:\.\d+)?)s run=(\d+(?:\.\d+)?)s\s*$/;
65
+ /** The {@link VerificationGateTiming} of a gate whose `log_tail` ends with `logEnd`, or null. */
66
+ function parseGateTiming(logEnd) {
67
+ const match = TIMING_LINE.exec(logEnd ?? '');
68
+ if (!match)
69
+ return null;
70
+ return { queueSec: Number(match[1]), mutexSec: Number(match[2]), runSec: Number(match[3]) };
71
+ }
57
72
  const RUN_COLUMNS = `
58
73
  id, worktree_id, instance_id, task_id, trigger, status, base_ref, started_at, finished_at
59
74
  `;
@@ -247,7 +262,8 @@ function clampInt(value, fallback, min, max) {
247
262
  }
248
263
  /**
249
264
  * Recent runs across worktrees, newest first, each with its gate verdicts but
250
- * no log bodies (Issue #1593).
265
+ * no log bodies (Issue #1593). A gate's `[timing]` line is the one piece of its
266
+ * log that is carried, parsed into numbers (`timing`, Issue #3884).
251
267
  *
252
268
  * `worktreeId` is optional because the advisor that consumes this (#1594) looks
253
269
  * at a repository's trend, not one worktree's. Ordering follows the same
@@ -285,7 +301,8 @@ function listVerificationRunsForPeriod(db, opts = {}) {
285
301
  const placeholders = runRows.map(() => '?').join(', ');
286
302
  const gateRows = db
287
303
  .prepare(`
288
- SELECT run_id, gate_id, status, exit_code, duration_ms, source
304
+ SELECT run_id, gate_id, status, exit_code, duration_ms, source,
305
+ substr(log_tail, -${TIMING_TAIL_CHARS}) AS log_end
289
306
  FROM verification_gate_results
290
307
  WHERE run_id IN (${placeholders})
291
308
  ORDER BY started_at ASC, id ASC
@@ -300,6 +317,10 @@ function listVerificationRunsForPeriod(db, opts = {}) {
300
317
  durationMs: row.duration_ms,
301
318
  source: row.source ?? null,
302
319
  };
320
+ // Only the numbers leave this function: the log stays out of the listing (#3884).
321
+ const timing = parseGateTiming(row.log_end);
322
+ if (timing)
323
+ summary.timing = timing;
303
324
  const bucket = byRun.get(row.run_id);
304
325
  if (bucket)
305
326
  bucket.push(summary);
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Which option of a question the question itself recommends (Issue #3863).
4
+ *
5
+ * Auto-Yes's `recommended` answer mode answers a question with the option
6
+ * whose TITLE ends in a recommendation marker — `(Recommended)`, `(推奨)` or
7
+ * `(推奨)`. The title, not the label as a whole: on Claude's and Command
8
+ * Code's pickers an option is a title row and, under it, a description, and a
9
+ * description may end in the same words (`… see Recommended Next Actions`),
10
+ * or quote the marker. So the readers that still know where a title ends —
11
+ * the block reader, Command Code's question reader and Claude's
12
+ * AskUserQuestion parser — say per option what its title shows:
13
+ *
14
+ * - `true`: the title ends in a marker;
15
+ * - `false`: it does not;
16
+ * - `'unknown'`: the reader could not tell the title from what follows it
17
+ * (a continuation row that may be the title wrapping or a description).
18
+ *
19
+ * A reader never answers `false` for a title it could not delimit: a marker
20
+ * on the part it could not place would make "no option is recommended" (the
21
+ * default is then answered) a guess.
22
+ *
23
+ * The labels themselves, and every text a contract's deny patterns are
24
+ * matched against, are left as they were read.
25
+ *
26
+ * Leaf module: imports nothing.
27
+ *
28
+ * @module lib/detection/option-recommendation
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.isRecommendedTitle = isRecommendedTitle;
32
+ exports.isRecommendationMarker = isRecommendationMarker;
33
+ exports.upperBoundColumns = upperBoundColumns;
34
+ exports.lowerBoundPaneColumns = lowerBoundPaneColumns;
35
+ exports.cannotBeWrapOf = cannotBeWrapOf;
36
+ /**
37
+ * A marker at the very end of a title, standing on its own: what precedes it
38
+ * is the start of the title, white space, or anything but an ASCII letter or
39
+ * digit (`dispatch (Recommended)`, `する(推奨)`), never a word it is glued
40
+ * to (`Not(Recommended)`). Case as the tools write it. Anchored, no nested
41
+ * quantifiers (ReDoS-safe).
42
+ */
43
+ const RECOMMENDATION_MARKER_PATTERN = /(?:^|[^A-Za-z0-9])(?:\(Recommended\)|(推奨)|\(推奨\))$/;
44
+ /**
45
+ * Whether a title — the option's whole title, wrapped rows joined — ends in a
46
+ * recommendation marker.
47
+ *
48
+ * @param title - The option's title, without its number or cursor
49
+ */
50
+ function isRecommendedTitle(title) {
51
+ return RECOMMENDATION_MARKER_PATTERN.test(title.trim());
52
+ }
53
+ /** The markers, as a row holding nothing else spells them. */
54
+ const RECOMMENDATION_MARKERS = new Set(['(Recommended)', '(推奨)', '(推奨)']);
55
+ /**
56
+ * Whether a row holds a marker and nothing else — the tail of a title that
57
+ * wrapped right before its marker (`❯ 1. 整えた状態で続行` / `(Recommended)`).
58
+ */
59
+ function isRecommendationMarker(row) {
60
+ return RECOMMENDATION_MARKERS.has(row.trim());
61
+ }
62
+ /** One code point that occupies no terminal column. */
63
+ const COMBINING_MARK = /^\p{M}$/u;
64
+ /**
65
+ * An UPPER bound on the columns a row occupies: printable ASCII is one
66
+ * column, a combining mark none, and anything else is counted as two (East
67
+ * Asian wide characters are two; no other code point is wider). Used with a
68
+ * LOWER bound on the pane width, so "it would have fit" is never claimed for
69
+ * a row that might not have.
70
+ */
71
+ function upperBoundColumns(text) {
72
+ let columns = 0;
73
+ for (const char of text) {
74
+ const code = char.codePointAt(0) ?? 0;
75
+ if (code >= 0x20 && code < 0x7f)
76
+ columns += 1;
77
+ else if (!COMBINING_MARK.test(char))
78
+ columns += 2;
79
+ }
80
+ return columns;
81
+ }
82
+ /**
83
+ * A LOWER bound on the pane width: the widest row of the frame, counting one
84
+ * column per code point (combining marks none). A row the pane drew is never
85
+ * wider than the pane.
86
+ */
87
+ function lowerBoundPaneColumns(rows) {
88
+ let widest = 0;
89
+ for (const row of rows) {
90
+ let columns = 0;
91
+ for (const char of row.trimEnd()) {
92
+ if (!COMBINING_MARK.test(char))
93
+ columns += 1;
94
+ }
95
+ if (columns > widest)
96
+ widest = columns;
97
+ }
98
+ return widest;
99
+ }
100
+ /**
101
+ * Whether `next` cannot be the wrapped tail of `row` — the pane would have
102
+ * kept `next`'s first word on `row`.
103
+ *
104
+ * Terminals word-wrap a title: a row ends early only when the following word
105
+ * would not fit. So when `row` plus a space plus that word fits inside the
106
+ * pane, `row` did not wrap there and `next` begins something else (the
107
+ * option's description). Judged with an upper bound on what the row and the
108
+ * word occupy and a lower bound on the pane, so a `true` is never a guess; a
109
+ * `false` only says the row MAY have wrapped.
110
+ *
111
+ * @param row - The option's row, as drawn (indent and number included)
112
+ * @param next - The row under it
113
+ * @param paneColumns - {@link lowerBoundPaneColumns} of the frame
114
+ */
115
+ function cannotBeWrapOf(row, next, paneColumns) {
116
+ const firstWord = next.trim().split(/\s+/, 1)[0] ?? '';
117
+ if (firstWord === '')
118
+ return false;
119
+ return upperBoundColumns(row.trimEnd()) + 1 + upperBoundColumns(firstWord) <= paneColumns;
120
+ }