commandmate 0.44.2 → 0.45.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 (621) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +289 -289
  3. package/.next/app-path-routes-manifest.json +20 -20
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/next-server.js.nft.json +1 -1
  6. package/.next/prerender-manifest.json +12 -12
  7. package/.next/react-loadable-manifest.json +26 -32
  8. package/.next/required-server-files.json +1 -1
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/update/route.js +1 -1
  11. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/agents/versions/route.js +1 -1
  13. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/app/update/route.js +2 -2
  16. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/auth/login/route.js +1 -1
  19. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/capabilities/route.js +1 -1
  23. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/daily-summary/route.js +1 -1
  25. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  26. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  28. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  29. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  32. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/external-apps/route.js +1 -1
  34. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  38. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  39. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  41. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  42. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  44. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  45. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/push/escalation/route.js +1 -1
  49. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/push/subscriptions/route.js +2 -2
  51. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/push/vapid/route.js +1 -1
  53. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  55. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  56. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/relays/route.js +1 -1
  58. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  59. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  62. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  65. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js +1 -1
  67. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  68. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js +1 -1
  71. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  72. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/route.js +1 -1
  74. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  75. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js +1 -1
  77. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  78. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js +1 -1
  80. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  81. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  84. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  85. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  88. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route.js +1 -1
  90. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/skills/route.js +1 -1
  95. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/templates/[id]/route.js +2 -2
  100. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/templates/route.js +2 -2
  102. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  107. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  110. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  113. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  119. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  122. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  125. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  130. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
  184. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  204. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  209. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  210. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  212. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  213. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  215. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  216. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  237. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  241. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  246. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/route.js +1 -1
  265. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  268. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/page_client-reference-manifest.js +1 -1
  272. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  275. package/.next/server/app/sessions/page.js +1 -1
  276. package/.next/server/app/sessions/page.js.nft.json +1 -1
  277. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/worktrees/[id]/page.js +11 -11
  283. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  284. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  285. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app-paths-manifest.json +20 -20
  287. package/.next/server/chunks/1191.js +2 -2
  288. package/.next/server/chunks/1210.js +1 -1
  289. package/.next/server/chunks/1503.js +2 -2
  290. package/.next/server/chunks/1559.js +2 -0
  291. package/.next/server/chunks/1789.js +1 -0
  292. package/.next/server/chunks/1944.js +1 -1
  293. package/.next/server/chunks/2119.js +1 -1
  294. package/.next/server/chunks/22.js +1 -1
  295. package/.next/server/chunks/2404.js +1 -1
  296. package/.next/server/chunks/2445.js +1 -1
  297. package/.next/server/chunks/2460.js +1 -1
  298. package/.next/server/chunks/2710.js +2 -2
  299. package/.next/server/chunks/2908.js +1 -1
  300. package/.next/server/chunks/2980.js +1 -1
  301. package/.next/server/chunks/3241.js +1 -1
  302. package/.next/server/chunks/3480.js +1 -1
  303. package/.next/server/chunks/3718.js +1 -1
  304. package/.next/server/chunks/4207.js +2 -2
  305. package/.next/server/chunks/450.js +1 -1
  306. package/.next/server/chunks/{9353.js → 4718.js} +2 -2
  307. package/.next/server/chunks/4802.js +1 -1
  308. package/.next/server/chunks/4837.js +14 -0
  309. package/.next/server/chunks/5048.js +1 -1
  310. package/.next/server/chunks/5064.js +1 -1
  311. package/.next/server/chunks/5209.js +1 -0
  312. package/.next/server/chunks/5292.js +7 -0
  313. package/.next/server/chunks/5595.js +1 -1
  314. package/.next/server/chunks/5625.js +25 -0
  315. package/.next/server/chunks/5737.js +1 -1
  316. package/.next/server/chunks/6065.js +1 -1
  317. package/.next/server/chunks/611.js +1 -1
  318. package/.next/server/chunks/6130.js +1 -1
  319. package/.next/server/chunks/6401.js +1 -1
  320. package/.next/server/chunks/6781.js +1 -1
  321. package/.next/server/chunks/6793.js +3 -3
  322. package/.next/server/chunks/7491.js +2 -2
  323. package/.next/server/chunks/7905.js +1 -1
  324. package/.next/server/chunks/850.js +1 -1
  325. package/.next/server/chunks/8728.js +3 -3
  326. package/.next/server/chunks/8791.js +1 -1
  327. package/.next/server/chunks/8800.js +1 -1
  328. package/.next/server/chunks/8918.js +6 -8
  329. package/.next/server/chunks/9051.js +1 -1
  330. package/.next/server/chunks/9130.js +1 -1
  331. package/.next/server/chunks/9390.js +2 -2
  332. package/.next/server/chunks/9584.js +1 -1
  333. package/.next/server/chunks/9627.js +6 -6
  334. package/.next/server/chunks/9731.js +3 -3
  335. package/.next/server/middleware-build-manifest.js +1 -1
  336. package/.next/server/middleware-manifest.json +5 -5
  337. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  338. package/.next/server/pages/500.html +1 -1
  339. package/.next/server/server-reference-manifest.json +1 -1
  340. package/.next/static/chunks/1464.09cd37fee202ec4b.js +1 -0
  341. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  342. package/.next/static/chunks/2053-390e77fce43b555c.js +1 -0
  343. package/.next/static/chunks/{2407-051f6f84226a9f2c.js → 2407-dd4a0f04f1349221.js} +1 -1
  344. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  345. package/.next/static/chunks/{2751-9ef0f4b450bd4ef0.js → 2751-5f0b2702accd164d.js} +1 -1
  346. package/.next/static/chunks/{282.6b6f2e31a96674dd.js → 282.a1013532fd9a61b4.js} +1 -1
  347. package/.next/static/chunks/3237.94c29281d9ec122e.js +1 -0
  348. package/.next/static/chunks/3480.2e21f62e5e9d3ba5.js +1 -0
  349. package/.next/static/chunks/4290.c06dbe243819fea0.js +66 -0
  350. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  351. package/.next/static/chunks/{5222.305dc0ebba9c0784.js → 5222.39e2034d3fce233c.js} +1 -1
  352. package/.next/static/chunks/{7095.8c869e553133a40e.js → 7095.87323a4fdf426341.js} +1 -1
  353. package/.next/static/chunks/{7485.442b21101fca7257.js → 7485.8a2a9d7c5396aa26.js} +3 -3
  354. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  355. package/.next/static/chunks/app/{layout-9da1ab602bcb3051.js → layout-07d040cb3d3ea657.js} +1 -1
  356. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  357. package/.next/static/chunks/app/worktrees/[id]/page-35f0e31a725d1c89.js +1 -0
  358. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  359. package/.next/static/chunks/{webpack-021f0741f22dd16a.js → webpack-165d8df9acd1c5d4.js} +1 -1
  360. package/.next/static/css/057f64a65726c439.css +1 -0
  361. package/.next/trace +13 -13
  362. package/dist/cli/commands/ask.d.ts.map +1 -1
  363. package/dist/cli/commands/ask.js +120 -119
  364. package/dist/cli/commands/attach.d.ts +94 -0
  365. package/dist/cli/commands/attach.d.ts.map +1 -1
  366. package/dist/cli/commands/attach.js +145 -7
  367. package/dist/cli/commands/auto-yes.js +1 -1
  368. package/dist/cli/commands/capture.d.ts.map +1 -1
  369. package/dist/cli/commands/capture.js +3 -5
  370. package/dist/cli/commands/command-target.d.ts +23 -0
  371. package/dist/cli/commands/command-target.d.ts.map +1 -0
  372. package/dist/cli/commands/command-target.js +25 -0
  373. package/dist/cli/commands/instances.d.ts.map +1 -1
  374. package/dist/cli/commands/instances.js +41 -2
  375. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  376. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  377. package/dist/cli/commands/message-dispatch.js +63 -0
  378. package/dist/cli/commands/reply.d.ts.map +1 -1
  379. package/dist/cli/commands/reply.js +2 -5
  380. package/dist/cli/commands/respond.d.ts.map +1 -1
  381. package/dist/cli/commands/respond.js +3 -6
  382. package/dist/cli/commands/send.d.ts.map +1 -1
  383. package/dist/cli/commands/send.js +149 -146
  384. package/dist/cli/commands/skill-format.d.ts +8 -0
  385. package/dist/cli/commands/skill-format.d.ts.map +1 -1
  386. package/dist/cli/commands/skill-format.js +13 -3
  387. package/dist/cli/commands/wait.d.ts.map +1 -1
  388. package/dist/cli/commands/wait.js +657 -431
  389. package/dist/cli/types/api-responses.d.ts +156 -27
  390. package/dist/cli/types/api-responses.d.ts.map +1 -1
  391. package/dist/cli/types/api-responses.js +4 -2
  392. package/dist/cli/utils/api-client.d.ts +25 -5
  393. package/dist/cli/utils/api-client.d.ts.map +1 -1
  394. package/dist/cli/utils/api-client.js +87 -55
  395. package/dist/cli/utils/server-url.d.ts +1 -0
  396. package/dist/cli/utils/server-url.d.ts.map +1 -1
  397. package/dist/cli/utils/server-url.js +7 -0
  398. package/dist/cli/utils/verify-runner.d.ts +21 -0
  399. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  400. package/dist/cli/utils/verify-runner.js +38 -1
  401. package/dist/config/uat-isolation.d.ts +140 -0
  402. package/dist/config/uat-isolation.d.ts.map +1 -0
  403. package/dist/config/uat-isolation.js +246 -0
  404. package/dist/lib/global-state.d.ts +12 -0
  405. package/dist/lib/global-state.d.ts.map +1 -0
  406. package/dist/lib/global-state.js +16 -0
  407. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  408. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  409. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  410. package/dist/lib/session/prompt-view.d.ts +26 -3
  411. package/dist/lib/session/prompt-view.d.ts.map +1 -1
  412. package/dist/lib/session/prompt-view.js +26 -3
  413. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  414. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  415. package/dist/lib/session/status-evidence-type.js +2 -0
  416. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  417. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  418. package/dist/server/locales/en/worktree.json +8 -2
  419. package/dist/server/locales/ja/worktree.json +8 -2
  420. package/dist/server/src/cli/types/api-responses.js +4 -2
  421. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  422. package/dist/server/src/config/uat-isolation.js +246 -0
  423. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  424. package/dist/server/src/lib/auto-yes-lifecycle.js +6 -0
  425. package/dist/server/src/lib/auto-yes-poller.js +450 -160
  426. package/dist/server/src/lib/auto-yes-state.js +2 -2
  427. package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
  428. package/dist/server/src/lib/cli-tools/base.js +151 -0
  429. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  430. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  431. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  432. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  433. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  434. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  435. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  436. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  437. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  438. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  439. package/dist/server/src/lib/detection/cli-patterns.js +374 -3065
  440. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  441. package/dist/server/src/lib/detection/model-info-extractor.js +57 -3
  442. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  443. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  444. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  445. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  446. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  447. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  448. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  449. package/dist/server/src/lib/detection/status-detector.js +1 -1
  450. package/dist/server/src/lib/detection/tools/antigravity/detect.js +5 -29
  451. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  452. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  453. package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
  454. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  455. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  456. package/dist/server/src/lib/detection/tools/codex/detect.js +46 -85
  457. package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
  458. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  459. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  460. package/dist/server/src/lib/detection/tools/command-code/detect.js +8 -50
  461. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  462. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  463. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  464. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  465. package/dist/server/src/lib/detection/tools/copilot/detect.js +10 -35
  466. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  467. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  468. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  469. package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
  470. package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
  471. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  472. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
  473. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  474. package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
  475. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  476. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  477. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  478. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  479. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  480. package/dist/server/src/lib/git/git-exec.js +23 -5
  481. package/dist/server/src/lib/global-state.js +16 -0
  482. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  483. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  484. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  485. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  486. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  487. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  488. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  489. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  490. package/dist/server/src/lib/hooks/sources/claude/self-resume.js +213 -0
  491. package/dist/server/src/lib/hooks/sources/claude/source.js +57 -10
  492. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  493. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  494. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  495. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  496. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  497. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  498. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  499. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  500. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  501. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  502. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  503. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  504. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  505. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  506. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  507. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  508. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  509. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  510. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  511. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  512. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  513. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  514. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  515. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  516. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  517. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  518. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  519. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  520. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  521. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  522. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  523. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  524. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  525. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  526. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  527. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  528. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  529. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  530. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  531. package/dist/server/src/lib/polling/response-checker.js +641 -1142
  532. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  533. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  534. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  535. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  536. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  537. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  538. package/dist/server/src/lib/prompt-answer-sender.js +5 -4
  539. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  540. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  541. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  542. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  543. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  544. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -5
  545. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  546. package/dist/server/src/lib/relay/relay-delivery.js +3 -2
  547. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  548. package/dist/server/src/lib/response-cleaner.js +24 -1
  549. package/dist/server/src/lib/response-extractor.js +16 -0
  550. package/dist/server/src/lib/schedule-manager.js +8 -10
  551. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  552. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  553. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  554. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  555. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  556. package/dist/server/src/lib/session/agent-event-state.js +107 -1854
  557. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  558. package/dist/server/src/lib/session/agent-event-turn.js +862 -0
  559. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  560. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  561. package/dist/server/src/lib/session/claude-executor.js +45 -5
  562. package/dist/server/src/lib/session/claude-session.js +21 -65
  563. package/dist/server/src/lib/session/cli-session.js +17 -0
  564. package/dist/server/src/lib/session/current-output-builder.js +449 -1107
  565. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  566. package/dist/server/src/lib/session/current-output-types.js +9 -0
  567. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  568. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  569. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  570. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  571. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  572. package/dist/server/src/lib/session/prompt-view.js +26 -3
  573. package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
  574. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  575. package/dist/server/src/lib/session/send-user-message.js +1 -1
  576. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  577. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  578. package/dist/server/src/lib/session/status-evidence.js +2 -2
  579. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  580. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  581. package/dist/server/src/lib/session-cleanup.js +1 -5
  582. package/dist/server/src/lib/skills/install-plan.js +3 -1
  583. package/dist/server/src/lib/skills/preview-diff.js +24 -3
  584. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  585. package/dist/server/src/lib/skills/uninstall-plan.js +3 -2
  586. package/dist/server/src/lib/timer-manager.js +6 -8
  587. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  588. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  589. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  590. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  591. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  592. package/dist/server/src/lib/tmux/tmux.js +33 -59
  593. package/dist/server/src/lib/tui-accumulator.js +2 -2
  594. package/dist/server/src/lib/verification/env-clean-gate.js +6 -5
  595. package/dist/server/src/lib/version-checker.js +6 -6
  596. package/dist/server/src/lib/ws-server.js +47 -11
  597. package/docs/en/user-guide/commands-guide.md +0 -1
  598. package/docs/en/user-guide/webapp-guide.md +27 -3
  599. package/package.json +3 -2
  600. package/release-notes/0.44.3.json +82 -0
  601. package/release-notes/0.45.0.json +41 -0
  602. package/scripts/hooks/cmate-agent-event.sh +38 -0
  603. package/.next/server/chunks/1068.js +0 -1
  604. package/.next/server/chunks/4372.js +0 -5
  605. package/.next/server/chunks/6474.js +0 -14
  606. package/.next/server/chunks/967.js +0 -1
  607. package/.next/server/chunks/9798.js +0 -2
  608. package/.next/server/chunks/9882.js +0 -25
  609. package/.next/static/chunks/2053-85a974ddfe7498fe.js +0 -1
  610. package/.next/static/chunks/4290.6cf86f68d73b6e77.js +0 -82
  611. package/.next/static/chunks/4459.a94b52985a76509a.js +0 -1
  612. package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
  613. package/.next/static/chunks/5951.616956b6aa5df63f.js +0 -1
  614. package/.next/static/chunks/9856.15463dd58437e2ac.js +0 -1
  615. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  616. package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +0 -1
  617. package/.next/static/css/38070d879efa1371.css +0 -1
  618. package/dist/server/src/lib/cli-tools/index.js +0 -41
  619. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  620. /package/.next/static/{QlCqLjorauDDBXPa-C7TK → TPWbZB3zBp3Zv_eFEOlmt}/_buildManifest.js +0 -0
  621. /package/.next/static/{QlCqLjorauDDBXPa-C7TK → TPWbZB3zBp3Zv_eFEOlmt}/_ssgManifest.js +0 -0
@@ -125,10 +125,11 @@ function frameDecisionId(payload) {
125
125
  * The decision id ({@link frameDecisionId}) — the `per_…` / `frm_…` the reply
126
126
  * URL takes. An approval and the reply that settles it carry the SAME id, which
127
127
  * is why `classifyAgentEventDelivery` keys on `(event, detail, identity)`
128
- * rather than on the id alone. Every other frame (the `session.execution.*`
129
- * boundaries) answers null and keeps the time window, as v1's `session.idle`
130
- * does. The envelope's `evt_…` is not used, for v1's reason: nothing measured
131
- * says it is unique per frame.
128
+ * rather than on the id alone. Every other frame answers null. Of those only
129
+ * `session.execution.started` meets the time window (the `succeeded` /
130
+ * `failed` / `interrupted` boundaries are `stop`s, which it never suppresses —
131
+ * see `classifyAgentEventDelivery`). The envelope's `evt_…` is not used, for
132
+ * v1's reason: nothing measured says it is unique per frame.
132
133
  */
133
134
  function opencodeV2EventIdentity(payload) {
134
135
  return (0, event_mapper_1.readEventIdentity)(frameDecisionId(payload));
@@ -38,13 +38,14 @@ const path_1 = require("path");
38
38
  const logger_1 = require("../../../../lib/logger");
39
39
  const ports_1 = require("../opencode/ports");
40
40
  const secrets_1 = require("./secrets");
41
+ const global_state_1 = require("../../../global-state");
41
42
  const logger = (0, logger_1.createLogger)('lib/hooks/sources/opencode-v2/ports');
42
43
  /** Ports OpenCode V2 servers are started on. Disjoint from v1's 4200–4299. */
43
44
  exports.OPENCODE_V2_PORT_RANGE = { min: 4300, max: 4399 };
44
45
  const PORT_SPAN = exports.OPENCODE_V2_PORT_RANGE.max - exports.OPENCODE_V2_PORT_RANGE.min + 1;
45
46
  /** File name of the persisted assignments inside the state directory. */
46
47
  exports.OPENCODE_V2_PORT_FILE_NAME = 'ports.json';
47
- const assignments = (globalThis.__opencodeV2PortAssignments ??= new Map());
48
+ const assignments = (0, global_state_1.getOrInitGlobal)('__opencodeV2PortAssignments', () => new Map());
48
49
  /** Absolute path of the persisted assignments. */
49
50
  function getOpencodeV2PortFilePath() {
50
51
  return (0, path_1.join)((0, secrets_1.getOpencodeV2StateDir)(), exports.OPENCODE_V2_PORT_FILE_NAME);
@@ -37,7 +37,6 @@ exports.OPENCODE_V2_MAX_RESYNCED_DECISIONS = exports.OPENCODE_V2_MAX_REJECTED_PR
37
37
  exports.isOpencodeV2Subscribed = isOpencodeV2Subscribed;
38
38
  exports.getOpencodeV2Liveness = getOpencodeV2Liveness;
39
39
  exports.isOpencodeV2StructuredHistoryLive = isOpencodeV2StructuredHistoryLive;
40
- exports.getOpencodeV2SubscribedPort = getOpencodeV2SubscribedPort;
41
40
  exports.openOpencodeV2Subscription = openOpencodeV2Subscription;
42
41
  exports.closeOpencodeV2Subscription = closeOpencodeV2Subscription;
43
42
  exports.resetOpencodeV2Subscriptions = resetOpencodeV2Subscriptions;
@@ -45,6 +44,7 @@ exports.resyncOpencodeV2Pending = resyncOpencodeV2Pending;
45
44
  exports.deliverOpencodeV2Frame = deliverOpencodeV2Frame;
46
45
  exports.refreshOpencodeV2UsageOnFrame = refreshOpencodeV2UsageOnFrame;
47
46
  exports.recordOpencodeV2TurnEnd = recordOpencodeV2TurnEnd;
47
+ const global_state_1 = require("../../../../lib/global-state");
48
48
  const agent_session_telemetry_1 = require("../../../../lib/hooks/agent-session-telemetry");
49
49
  const logger_1 = require("../../../../lib/logger");
50
50
  const event_mapper_1 = require("../event-mapper");
@@ -72,9 +72,9 @@ exports.OPENCODE_V2_MAX_REJECTED_PROBES = 3;
72
72
  * off a server CommandMate does not police.
73
73
  */
74
74
  exports.OPENCODE_V2_MAX_RESYNCED_DECISIONS = 50;
75
- const subscriptions = (globalThis.__opencodeV2Subscriptions ??= new Map());
75
+ const subscriptions = (0, global_state_1.getOrInitGlobal)('__opencodeV2Subscriptions', () => new Map());
76
76
  /** The last liveness of a subscription that ended on its own, for `liveness()`. */
77
- const endedLiveness = (globalThis.__opencodeV2EndedLiveness ??= new Map());
77
+ const endedLiveness = (0, global_state_1.getOrInitGlobal)('__opencodeV2EndedLiveness', () => new Map());
78
78
  /** Whether a subscription is open for the instance. */
79
79
  function isOpencodeV2Subscribed(target) {
80
80
  return subscriptions.has((0, secrets_1.opencodeV2KeyOf)(target));
@@ -97,10 +97,6 @@ function getOpencodeV2Liveness(target) {
97
97
  function isOpencodeV2StructuredHistoryLive(target) {
98
98
  return getOpencodeV2Liveness(target).state === 'live';
99
99
  }
100
- /** The port an open subscription reads, or null. */
101
- function getOpencodeV2SubscribedPort(target) {
102
- return subscriptions.get((0, secrets_1.opencodeV2KeyOf)(target))?.port ?? null;
103
- }
104
100
  function handleFor(state) {
105
101
  return {
106
102
  close: async () => {
@@ -58,6 +58,7 @@ const event_mapper_1 = require("../event-mapper");
58
58
  const client_1 = require("./client");
59
59
  const history_1 = require("./history");
60
60
  const secrets_1 = require("./secrets");
61
+ const global_state_1 = require("../../../global-state");
61
62
  const logger = (0, logger_1.createLogger)('lib/hooks/sources/opencode-v2/usage');
62
63
  /** The frame that says a session's running total moved. */
63
64
  exports.OPENCODE_V2_USAGE_EVENT_TYPE = 'session.usage.updated';
@@ -179,7 +180,7 @@ async function refreshOpencodeV2SessionUsage(target, port, sessionId, isCurrent
179
180
  }
180
181
  }
181
182
  /** One refresh in flight per instance, on `globalThis` for #1736's reason. */
182
- const slots = (globalThis.__opencodeV2UsageRefreshes ??= new Map());
183
+ const slots = (0, global_state_1.getOrInitGlobal)('__opencodeV2UsageRefreshes', () => new Map());
183
184
  /** Forget in-flight markers. Test seam. */
184
185
  function resetOpencodeV2UsageRefreshes() {
185
186
  slots.clear();
@@ -36,8 +36,9 @@ exports.answerPendingDecision = answerPendingDecision;
36
36
  exports.answerPendingDecisionWithReceipt = answerPendingDecisionWithReceipt;
37
37
  const auto_yes_state_1 = require("../../../lib/auto-yes-state");
38
38
  const logger_1 = require("../../../lib/logger");
39
+ const global_state_1 = require("../../global-state");
39
40
  const logger = (0, logger_1.createLogger)('lib/hooks/sources/pending-decisions');
40
- const pendingByInstance = (globalThis.__agentSourcePendingDecisions ??= new Map());
41
+ const pendingByInstance = (0, global_state_1.getOrInitGlobal)('__agentSourcePendingDecisions', () => new Map());
41
42
  /**
42
43
  * Cap on simultaneously open slots for one instance.
43
44
  *
@@ -42,9 +42,10 @@ const source_5 = require("./codex/source");
42
42
  const source_6 = require("./opencode/source");
43
43
  const source_7 = require("./command-code/source");
44
44
  const source_8 = require("./opencode-v2/source");
45
- const registered = (globalThis.__agentEventSources ??= new Map());
45
+ const global_state_1 = require("../../global-state");
46
+ const registered = (0, global_state_1.getOrInitGlobal)('__agentEventSources', () => new Map());
46
47
  /** Memoised compatibility sources, so repeated lookups return one object. */
47
- const legacy = (globalThis.__agentEventLegacySources ??= new Map());
48
+ const legacy = (0, global_state_1.getOrInitGlobal)('__agentEventLegacySources', () => new Map());
48
49
  /**
49
50
  * Add or replace a tool's source.
50
51
  *
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ /**
3
+ * Helpers the per-tool transcript `history.ts` modules share.
4
+ *
5
+ * Each of these was written out once per tool with only the turn type's name
6
+ * differing. The turn type is reduced to the one field these read.
7
+ *
8
+ * @module lib/hooks/sources/transcript-history
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.resolveAssistantTimestampMs = resolveAssistantTimestampMs;
45
+ exports.nextTurnOpensAt = nextTurnOpensAt;
46
+ exports.isReadableFile = isReadableFile;
47
+ exports.selectUnwrittenTurns = selectUnwrittenTurns;
48
+ exports.resolveSessionIdFromEvents = resolveSessionIdFromEvents;
49
+ exports.acceptPathUnderRoot = acceptPathUnderRoot;
50
+ exports.growTurnRowTo = growTurnRowTo;
51
+ exports.refreshTurnRowsTo = refreshTurnRowsTo;
52
+ const promises_1 = require("fs/promises");
53
+ const path_1 = require("path");
54
+ /**
55
+ * When the assistant row for this turn is dated.
56
+ *
57
+ * **The turn's LAST assistant record, not its prompt (Issue #2273).** #2121
58
+ * dated the reply by the prompt record's clock so that a row written a poll late
59
+ * still sorted where the conversation put it, and #2196 moved it one millisecond
60
+ * on so that `groupMessagesIntoPairs` — which orders by timestamp and nothing
61
+ * else — could never return the answer above the question. Both properties
62
+ * survive: `earliest` is a floor this never goes under.
63
+ *
64
+ * What neither accounted for is the row that lands BETWEEN the prompt and the
65
+ * reply. A tool approval is written when the dialog appears, seconds into the
66
+ * turn, and the chat surface orders its rows by timestamp — so a reply dated at
67
+ * the turn's start draws ABOVE an approval that really happened before it. The
68
+ * measured case is in the Issue: prompt `04:49:50.989Z`, reply `04:49:54.000Z`,
69
+ * approval `04:49:57.513Z`, rendered as question → answer → approval.
70
+ *
71
+ * The turn's last assistant record is the moment the reply was finished, so
72
+ * everything the turn produced on the way sorts before it. `lastRecordAt` is 0
73
+ * when the window held no timestamped assistant record for the turn, and the row
74
+ * is then dated exactly where #2196 put it.
75
+ *
76
+ * `nextTurnOpensAt` is the ceiling. The next turn's prompt row may be a `/send`
77
+ * row written while THIS turn was still running — a queued prompt — and a reply
78
+ * that overtook it would be paired with the wrong question.
79
+ *
80
+ * @param lastRecordAt - Epoch ms of the turn's last assistant record, or 0
81
+ * @param nextTurnOpensAt - Epoch ms of the next turn's user row, or null when
82
+ * this is the newest turn in the window
83
+ */
84
+ function resolveAssistantTimestampMs(turn, userRow, lastRecordAt = 0, nextTurnOpensAt = null) {
85
+ const earliest = userRow.timestampMs === null
86
+ ? turn.startedAt
87
+ : Math.max(turn.startedAt, userRow.timestampMs + 1);
88
+ const latest = nextTurnOpensAt === null ? Number.POSITIVE_INFINITY : nextTurnOpensAt - 1;
89
+ return Math.max(earliest, Math.min(lastRecordAt, latest));
90
+ }
91
+ /**
92
+ * The instant the next pending turn's prompt row carries, or null (Issue #2273).
93
+ *
94
+ * The user row's own timestamp when there is one, because that is what History
95
+ * sorts on and it can be EARLIER than the turn's start — an adopted `/send` row
96
+ * was written when CommandMate handed the text to the pane, which for a queued
97
+ * prompt is while the previous turn was still running. The turn's start is the
98
+ * fallback for a turn that produced no row at all.
99
+ */
100
+ function nextTurnOpensAt(turns, userRows, index) {
101
+ const next = turns[index + 1];
102
+ if (!next)
103
+ return null;
104
+ return userRows[index + 1]?.timestampMs ?? next.startedAt;
105
+ }
106
+ async function isReadableFile(path) {
107
+ try {
108
+ return (await (0, promises_1.stat)(path)).isFile();
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ }
114
+ /**
115
+ * The turns still to write: search backwards from the newest turn for one that
116
+ * is already a row, and take everything after it (Issue #2246).
117
+ *
118
+ * Record order and never a timestamp. A window with no anchor answers with the
119
+ * newest turn alone. The tools differ only in how a turn's request id is built.
120
+ *
121
+ * @param turns - Every turn in the window, oldest first
122
+ * @param requestIdOf - The request id the tool records a turn's user row under
123
+ */
124
+ async function selectUnwrittenTurns(target, turns, requestIdOf) {
125
+ const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
126
+ Promise.resolve().then(() => __importStar(require('../../../lib/db/db-instance'))),
127
+ Promise.resolve().then(() => __importStar(require('../../../lib/db'))),
128
+ ]);
129
+ const db = getDbInstance();
130
+ for (let index = turns.length - 1; index >= 0; index -= 1) {
131
+ const requestId = requestIdOf(turns[index]);
132
+ if (!findMessageByRequestId(db, target.worktreeId, requestId))
133
+ continue;
134
+ return {
135
+ turns: turns.slice(index + 1),
136
+ previousStartedAt: turns[index].startedAt,
137
+ anchored: true,
138
+ };
139
+ }
140
+ return {
141
+ turns: turns.slice(-1),
142
+ previousStartedAt: turns.length > 1 ? turns[turns.length - 2].startedAt : 0,
143
+ anchored: false,
144
+ };
145
+ }
146
+ /**
147
+ * The session id this instance's transcript is under, or null.
148
+ *
149
+ * Reads the structured event state first and falls back to the latched value.
150
+ * The import is dynamic so that `agent-event-state`'s module graph does not
151
+ * become a static dependency of the poller.
152
+ *
153
+ * @param pointers - The tool's latched session ids, keyed by `key`
154
+ * @param key - This instance's key in `pointers`
155
+ * @param logger - The calling tool's logger
156
+ * @param failureEvent - The event name the tool logs when the state module is unreachable
157
+ */
158
+ async function resolveSessionIdFromEvents(target, pointers, key, logger, failureEvent) {
159
+ try {
160
+ const { getLastAgentEvent } = await Promise.resolve().then(() => __importStar(require('../../../lib/session/agent-event-state')));
161
+ const sessionId = getLastAgentEvent(target.worktreeId, target.cliToolId, target.instanceId)?.sessionId;
162
+ if (typeof sessionId === 'string' && sessionId.length > 0) {
163
+ pointers.set(key, sessionId);
164
+ return sessionId;
165
+ }
166
+ }
167
+ catch (error) {
168
+ // A state module that cannot be reached is one that knows no session id.
169
+ logger.debug(failureEvent, {
170
+ worktreeId: target.worktreeId,
171
+ instanceId: target.instanceId ?? target.cliToolId,
172
+ error: error instanceof Error ? error.message : String(error),
173
+ });
174
+ }
175
+ return pointers.get(key) ?? null;
176
+ }
177
+ /**
178
+ * A path named by something other than the tool's module, accepted only if it
179
+ * ends in `extension`, carries no NUL and is under `rootDir`.
180
+ *
181
+ * Containment is checked on the *resolved* path so that `..` cannot climb out.
182
+ *
183
+ * @returns The resolved path, or null when it is not acceptable
184
+ */
185
+ function acceptPathUnderRoot(rootDir, extension, candidate) {
186
+ if (!candidate.endsWith(extension))
187
+ return null;
188
+ if (candidate.includes('\0'))
189
+ return null;
190
+ const root = (0, path_1.resolve)(rootDir);
191
+ const resolved = (0, path_1.resolve)(candidate);
192
+ if (resolved !== root && !resolved.startsWith(root + path_1.sep))
193
+ return null;
194
+ return resolved;
195
+ }
196
+ /**
197
+ * Replace a saved row whose body has since grown (Issue #2264).
198
+ *
199
+ * Strictly longer, never merely different; `message_updated`, never `message`.
200
+ *
201
+ * @param updatedEvent - The event name the tool logs on replacement
202
+ * @returns Whether the row was replaced
203
+ */
204
+ async function growTurnRowTo(target, existing, rendered, path, logger, updatedEvent) {
205
+ const instanceId = target.instanceId ?? target.cliToolId;
206
+ // No `typeof previous !== 'string'` guard, unlike antigravity/history.ts:
207
+ // `chat_messages.content` is `TEXT NOT NULL`, so it is always a string here.
208
+ const previousLength = existing.content.length;
209
+ if (rendered.body.length <= previousLength)
210
+ return false;
211
+ const [{ getDbInstance }, { updateMessageContent }, { broadcastMessage }] = await Promise.all([
212
+ Promise.resolve().then(() => __importStar(require('../../../lib/db/db-instance'))),
213
+ Promise.resolve().then(() => __importStar(require('../../../lib/db'))),
214
+ Promise.resolve().then(() => __importStar(require('../../../lib/ws-server'))),
215
+ ]);
216
+ updateMessageContent(getDbInstance(), existing.id, rendered.body);
217
+ broadcastMessage('message_updated', {
218
+ worktreeId: target.worktreeId,
219
+ message: { ...existing, content: rendered.body },
220
+ });
221
+ logger.info(updatedEvent, {
222
+ worktreeId: target.worktreeId,
223
+ instanceId,
224
+ sessionId: rendered.sessionId,
225
+ requestId: existing.requestId,
226
+ path,
227
+ previousLength,
228
+ bodyLength: rendered.body.length,
229
+ textBlocks: rendered.textBlocks,
230
+ toolBlocks: rendered.toolBlocks,
231
+ });
232
+ return true;
233
+ }
234
+ /**
235
+ * Re-read the newest already-written turns and grow the short ones (#2264).
236
+ *
237
+ * Turns that are still open are skipped; the database is asked before the turn
238
+ * is rendered.
239
+ *
240
+ * @param candidates - Already-written turns, oldest first
241
+ * @returns How many rows were replaced
242
+ */
243
+ async function refreshTurnRowsTo(target, candidates, path, tool) {
244
+ if (candidates.length === 0)
245
+ return 0;
246
+ const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
247
+ Promise.resolve().then(() => __importStar(require('../../../lib/db/db-instance'))),
248
+ Promise.resolve().then(() => __importStar(require('../../../lib/db'))),
249
+ ]);
250
+ const db = getDbInstance();
251
+ let updated = 0;
252
+ for (const turn of candidates) {
253
+ if (!tool.isWritable(turn))
254
+ continue;
255
+ const existing = findMessageByRequestId(db, target.worktreeId, tool.requestIdOf(turn));
256
+ if (!existing)
257
+ continue;
258
+ if (await tool.grow(target, existing, tool.render(turn), path))
259
+ updated += 1;
260
+ }
261
+ return updated;
262
+ }
@@ -68,6 +68,9 @@
68
68
  */
69
69
  Object.defineProperty(exports, "__esModule", { value: true });
70
70
  exports.TURN_REASONING_LABEL = exports.TURN_TOOL_LOG_LABEL = void 0;
71
+ exports.collapseToLine = collapseToLine;
72
+ exports.boundDetail = boundDetail;
73
+ exports.truncateTurnBody = truncateTurnBody;
71
74
  exports.separateTurnBody = separateTurnBody;
72
75
  /**
73
76
  * The bold first line of the folded tool section.
@@ -89,6 +92,34 @@ exports.TURN_TOOL_LOG_LABEL = 'Tool calls';
89
92
  * `components/worktree/ChatMessageBubble`.
90
93
  */
91
94
  exports.TURN_REASONING_LABEL = 'Thinking';
95
+ /**
96
+ * A tool title on one line.
97
+ *
98
+ * A `bash` title is the command, and a heredoc puts newlines in it. Left alone
99
+ * they would end the list item and turn the rest of the command into body text.
100
+ */
101
+ function collapseToLine(value) {
102
+ return value.replace(/\s+/g, ' ').trim();
103
+ }
104
+ /**
105
+ * A tool detail cut to `max` characters, the last one being `…`.
106
+ *
107
+ * The cap is each reader's own constant; the cut is the same in all of them.
108
+ */
109
+ function boundDetail(value, max) {
110
+ return value.length <= max ? value : `${value.slice(0, max - 1)}…`;
111
+ }
112
+ /**
113
+ * A turn body cut to `max` characters, the tail being `marker`.
114
+ *
115
+ * The cap and the marker are each reader's own constants; the cut is the same
116
+ * in all of them.
117
+ */
118
+ function truncateTurnBody(body, max, marker) {
119
+ if (body.length <= max)
120
+ return body;
121
+ return body.slice(0, max - marker.length) + marker;
122
+ }
92
123
  /**
93
124
  * Put one block inside a blockquote, line by line.
94
125
  *
@@ -33,9 +33,9 @@ exports.recordToolInputNormalization = recordToolInputNormalization;
33
33
  exports.getLastToolInputNormalization = getLastToolInputNormalization;
34
34
  exports.clearToolInputNormalizations = clearToolInputNormalizations;
35
35
  const auto_yes_state_1 = require("../../lib/auto-yes-state");
36
+ const global_state_1 = require("../global-state");
36
37
  /** compositeKey -> the most recent normalisation for that session. */
37
- const lastNormalizations = globalThis.__toolInputNormalizations ??
38
- (globalThis.__toolInputNormalizations = new Map());
38
+ const lastNormalizations = (0, global_state_1.getOrInitGlobal)('__toolInputNormalizations', () => new Map());
39
39
  /**
40
40
  * Record that `instanceId`'s last permission request arrived in a shape this
41
41
  * server had to rewrite before it could judge it.
@@ -43,6 +43,7 @@ exports.recordAntigravityPermissionReceipt = recordAntigravityPermissionReceipt;
43
43
  exports.hasRecentAntigravityPermissionReceipt = hasRecentAntigravityPermissionReceipt;
44
44
  exports.resetAntigravityPermissionReceiptsForTests = resetAntigravityPermissionReceiptsForTests;
45
45
  const auto_yes_state_1 = require("../../lib/auto-yes-state");
46
+ const global_state_1 = require("../global-state");
46
47
  /**
47
48
  * How long after a `PreToolUse` question a dialog still counts as its dialog.
48
49
  *
@@ -53,8 +54,7 @@ const auto_yes_state_1 = require("../../lib/auto-yes-state");
53
54
  * cover it.
54
55
  */
55
56
  exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS = 8_000;
56
- const receipts = globalThis.__antigravityPermissionReceipts ??
57
- (globalThis.__antigravityPermissionReceipts = new Map());
57
+ const receipts = (0, global_state_1.getOrInitGlobal)('__antigravityPermissionReceipts', () => new Map());
58
58
  /**
59
59
  * How long an entry is kept before it is dropped on the next write.
60
60
  *
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-Yes's Enter record and the session epoch it belongs to (Issue #3397).
4
+ *
5
+ * Split out of `./auto-yes-enter-fallback` so that this — the part a session's
6
+ * lifecycle has to touch — imports nothing from detection. `beginAgentSession`
7
+ * (every tool's `startSession`, on the creation path) calls
8
+ * {@link beginEnterFallbackSession}: a new process on the same instance key is
9
+ * a new screen history, and an Enter sent to the previous process's dialog must
10
+ * neither be published against the new one (`currentPrompt: true` for the same
11
+ * question) nor keep the poller from answering it (`enterFallbackSentKey`).
12
+ *
13
+ * @module lib/polling/auto-yes-enter-fallback-state
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.enterFallbackScreenKey = enterFallbackScreenKey;
17
+ exports.recordEnterFallbackSent = recordEnterFallbackSent;
18
+ exports.recordEnterFallbackNoEffect = recordEnterFallbackNoEffect;
19
+ exports.getLastEnterFallback = getLastEnterFallback;
20
+ exports.publishEnterFallback = publishEnterFallback;
21
+ exports.forgetEnterFallback = forgetEnterFallback;
22
+ exports.forgetEnterFallbacksByWorktree = forgetEnterFallbacksByWorktree;
23
+ exports.clearEnterFallbacks = clearEnterFallbacks;
24
+ exports.beginEnterFallbackSession = beginEnterFallbackSession;
25
+ exports.getEnterFallbackSessionEpoch = getEnterFallbackSessionEpoch;
26
+ const prompt_key_1 = require("../../lib/detection/prompt-key");
27
+ const auto_yes_state_1 = require("../../lib/auto-yes-state");
28
+ const global_state_1 = require("../global-state");
29
+ /**
30
+ * What tells two prompts apart for the published record: the type, the
31
+ * question and the option labels.
32
+ *
33
+ * Not the poller's `promptFrameKey`: that one also carries the cursor and
34
+ * `approvalTarget`, and the status API reads a different number of rows than
35
+ * the poller does, so `approvalTarget` can differ between the two readings of
36
+ * one screen. The record is matched against the status API's prompt (to say
37
+ * "Auto-Yes sent Enter" under the window it was sent to), so it is keyed on
38
+ * what both readings share.
39
+ */
40
+ function enterFallbackScreenKey(promptData) {
41
+ const options = promptData.type === 'multiple_choice'
42
+ ? promptData.options.map((o) => `${o.number}.${o.label}`)
43
+ : promptData.options;
44
+ return [(0, prompt_key_1.generatePromptKey)(promptData), ...options].join('\u0000');
45
+ }
46
+ /**
47
+ * compositeKey -> the last Enter. `globalThis` for the reason
48
+ * `auto-yes-suppression-state` gives: the poller writes it and the
49
+ * `current-output` route reads it, and under `next dev` the two are bundled apart.
50
+ */
51
+ const lastEnterFallbacks = (0, global_state_1.getOrInitGlobal)('__autoYesEnterFallbacks', () => new Map());
52
+ /**
53
+ * Record that Auto-Yes sent its Enter to a screen.
54
+ *
55
+ * @param at - Epoch ms; defaults to now. Overridable so tests are deterministic.
56
+ */
57
+ function recordEnterFallbackSent(worktreeId, cliToolId, instanceId, sent, at = Date.now()) {
58
+ lastEnterFallbacks.set((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), {
59
+ outcome: 'sent',
60
+ ...sent,
61
+ sentAt: at,
62
+ at,
63
+ });
64
+ }
65
+ /**
66
+ * Record that the screen the last Enter went to is still up. A no-op when there
67
+ * is no record, or when it is about another screen.
68
+ *
69
+ * @param at - Epoch ms; defaults to now
70
+ */
71
+ function recordEnterFallbackNoEffect(worktreeId, cliToolId, instanceId, screenKey, at = Date.now()) {
72
+ const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
73
+ const record = lastEnterFallbacks.get(key);
74
+ if (!record || record.screenKey !== screenKey)
75
+ return;
76
+ lastEnterFallbacks.set(key, { ...record, outcome: 'no-effect', at });
77
+ }
78
+ /** @returns The last Enter for this session, or null when Auto-Yes never sent one. */
79
+ function getLastEnterFallback(worktreeId, cliToolId, instanceId) {
80
+ return lastEnterFallbacks.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
81
+ }
82
+ /**
83
+ * The record as published, judged against the prompt the payload carries.
84
+ *
85
+ * @param promptData - The screen-read prompt of the same payload, or null
86
+ */
87
+ function publishEnterFallback(record, promptData) {
88
+ if (record === null)
89
+ return null;
90
+ return {
91
+ outcome: record.outcome,
92
+ promptType: record.promptType,
93
+ refusalReason: record.refusalReason,
94
+ sentAt: record.sentAt,
95
+ at: record.at,
96
+ currentPrompt: promptData != null && enterFallbackScreenKey(promptData) === record.screenKey,
97
+ };
98
+ }
99
+ /**
100
+ * Drop one session's record (Issue #3397). Called wherever the poller for it is
101
+ * stopped — `stopAutoYesPolling`, which the kill-session route (through
102
+ * `releaseAutoYes`), the Auto-Yes disable route and an expired / disabled grant
103
+ * all reach. A record that outlived its session would read `currentPrompt: true`
104
+ * against the same question on the NEXT session, and the window would say
105
+ * "Auto-Yes sent Enter" about an Enter nobody sent there.
106
+ */
107
+ function forgetEnterFallback(compositeKey) {
108
+ lastEnterFallbacks.delete(compositeKey);
109
+ }
110
+ /** {@link forgetEnterFallback} for every instance of a worktree. */
111
+ function forgetEnterFallbacksByWorktree(worktreeId) {
112
+ for (const key of (0, auto_yes_state_1.filterCompositeKeysByWorktree)([...lastEnterFallbacks.keys()], worktreeId)) {
113
+ lastEnterFallbacks.delete(key);
114
+ }
115
+ }
116
+ /** Drop every record: server shutdown (`stopAllAutoYesPolling`), and a test seam. */
117
+ function clearEnterFallbacks() {
118
+ lastEnterFallbacks.clear();
119
+ }
120
+ // =============================================================================
121
+ // The session epoch
122
+ // =============================================================================
123
+ /**
124
+ * compositeKey -> how many sessions have been begun on it in this process.
125
+ * `globalThis` for the same reason as the record: `startSession` and the poller
126
+ * can be bundled apart under `next dev`.
127
+ */
128
+ const sessionEpochs = (0, global_state_1.getOrInitGlobal)('__autoYesEnterFallbackEpochs', () => new Map());
129
+ /**
130
+ * A new agent process is being created for this instance (called from
131
+ * `beginAgentSession`): the record is dropped, and the epoch moves on so the
132
+ * poller drops its own per-screen keys at its next tick.
133
+ */
134
+ function beginEnterFallbackSession(worktreeId, cliToolId, instanceId) {
135
+ const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
136
+ lastEnterFallbacks.delete(key);
137
+ sessionEpochs.set(key, (sessionEpochs.get(key) ?? 0) + 1);
138
+ }
139
+ /** The instance's current session epoch (0 until a session is begun). */
140
+ function getEnterFallbackSessionEpoch(compositeKey) {
141
+ return sessionEpochs.get(compositeKey) ?? 0;
142
+ }