commandmate 0.44.1 → 0.44.3

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 (604) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +169 -169
  3. package/.next/app-path-routes-manifest.json +35 -35
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +0 -6
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route.js +1 -1
  12. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update/route.js +2 -2
  15. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/login/route.js +1 -1
  18. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/capabilities/route.js +1 -1
  22. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/route.js +1 -1
  24. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  25. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  27. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  28. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/external-apps/route.js +1 -1
  33. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  37. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  40. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  41. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  43. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  44. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/push/escalation/route.js +1 -1
  48. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/push/subscriptions/route.js +2 -2
  50. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/push/vapid/route.js +1 -1
  52. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  54. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  55. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/relays/route.js +1 -1
  57. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  58. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/clone/route.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/restore/route.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  71. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/route.js +1 -1
  73. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/scan/route.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/sync/route.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  83. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  84. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/skills/[id]/route.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/route.js +1 -1
  94. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/templates/[id]/route.js +2 -2
  99. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/templates/route.js +2 -2
  101. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  106. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -2
  192. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -2
  195. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  208. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  211. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  214. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/route.js +1 -1
  264. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  267. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  273. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/sessions/page.js +1 -1
  275. package/.next/server/app/sessions/page.js.nft.json +1 -1
  276. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/worktrees/[id]/page.js +11 -11
  282. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  283. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  285. package/.next/server/app-paths-manifest.json +35 -35
  286. package/.next/server/chunks/1191.js +2 -2
  287. package/.next/server/chunks/1210.js +1 -1
  288. package/.next/server/chunks/1559.js +2 -0
  289. package/.next/server/chunks/1789.js +1 -0
  290. package/.next/server/chunks/2119.js +1 -1
  291. package/.next/server/chunks/2404.js +1 -1
  292. package/.next/server/chunks/2445.js +1 -1
  293. package/.next/server/chunks/2460.js +1 -0
  294. package/.next/server/chunks/2710.js +1 -1
  295. package/.next/server/chunks/2908.js +1 -0
  296. package/.next/server/chunks/2980.js +1 -1
  297. package/.next/server/chunks/3241.js +1 -1
  298. package/.next/server/chunks/3480.js +1 -1
  299. package/.next/server/chunks/3718.js +1 -1
  300. package/.next/server/chunks/4207.js +2 -2
  301. package/.next/server/chunks/450.js +1 -1
  302. package/.next/server/chunks/4672.js +5 -0
  303. package/.next/server/chunks/{9353.js → 4718.js} +2 -2
  304. package/.next/server/chunks/4837.js +14 -0
  305. package/.next/server/chunks/5048.js +1 -1
  306. package/.next/server/chunks/5209.js +1 -0
  307. package/.next/server/chunks/5595.js +1 -0
  308. package/.next/server/chunks/5625.js +25 -0
  309. package/.next/server/chunks/5845.js +1 -0
  310. package/.next/server/chunks/611.js +1 -1
  311. package/.next/server/chunks/6130.js +1 -1
  312. package/.next/server/chunks/6401.js +1 -1
  313. package/.next/server/chunks/6781.js +1 -1
  314. package/.next/server/chunks/6793.js +3 -3
  315. package/.next/server/chunks/7491.js +2 -2
  316. package/.next/server/chunks/7905.js +1 -1
  317. package/.next/server/chunks/850.js +1 -0
  318. package/.next/server/chunks/8543.js +1 -1
  319. package/.next/server/chunks/8728.js +3 -3
  320. package/.next/server/chunks/8791.js +1 -1
  321. package/.next/server/chunks/8800.js +1 -1
  322. package/.next/server/chunks/8918.js +7 -7
  323. package/.next/server/chunks/9130.js +1 -5
  324. package/.next/server/chunks/9390.js +2 -3
  325. package/.next/server/chunks/9584.js +1 -1
  326. package/.next/server/chunks/9627.js +6 -6
  327. package/.next/server/chunks/9731.js +3 -3
  328. package/.next/server/middleware-manifest.json +5 -5
  329. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  330. package/.next/server/pages/500.html +1 -1
  331. package/.next/server/server-reference-manifest.json +1 -1
  332. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  333. package/.next/static/chunks/{2407-f1f258d4a1d92620.js → 2407-06d35bb1aa02de80.js} +1 -1
  334. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  335. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  336. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  337. package/.next/static/chunks/app/{layout-da66300cc20244ed.js → layout-0d1750b833f5cc3e.js} +1 -1
  338. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  339. package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
  340. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  341. package/.next/static/css/057f64a65726c439.css +1 -0
  342. package/.next/trace +13 -13
  343. package/dist/cli/commands/ask.d.ts.map +1 -1
  344. package/dist/cli/commands/ask.js +120 -119
  345. package/dist/cli/commands/attach.d.ts +94 -0
  346. package/dist/cli/commands/attach.d.ts.map +1 -1
  347. package/dist/cli/commands/attach.js +145 -7
  348. package/dist/cli/commands/auto-yes.js +1 -1
  349. package/dist/cli/commands/capture.d.ts.map +1 -1
  350. package/dist/cli/commands/capture.js +10 -13
  351. package/dist/cli/commands/command-target.d.ts +23 -0
  352. package/dist/cli/commands/command-target.d.ts.map +1 -0
  353. package/dist/cli/commands/command-target.js +25 -0
  354. package/dist/cli/commands/instances.d.ts.map +1 -1
  355. package/dist/cli/commands/instances.js +41 -2
  356. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  357. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  358. package/dist/cli/commands/message-dispatch.js +63 -0
  359. package/dist/cli/commands/reply.d.ts.map +1 -1
  360. package/dist/cli/commands/reply.js +2 -5
  361. package/dist/cli/commands/respond.d.ts.map +1 -1
  362. package/dist/cli/commands/respond.js +3 -6
  363. package/dist/cli/commands/send.d.ts.map +1 -1
  364. package/dist/cli/commands/send.js +149 -146
  365. package/dist/cli/commands/wait.d.ts.map +1 -1
  366. package/dist/cli/commands/wait.js +608 -416
  367. package/dist/cli/types/api-responses.d.ts +174 -27
  368. package/dist/cli/types/api-responses.d.ts.map +1 -1
  369. package/dist/cli/types/api-responses.js +4 -2
  370. package/dist/cli/utils/api-client.d.ts +25 -5
  371. package/dist/cli/utils/api-client.d.ts.map +1 -1
  372. package/dist/cli/utils/api-client.js +87 -55
  373. package/dist/cli/utils/server-url.d.ts +1 -0
  374. package/dist/cli/utils/server-url.d.ts.map +1 -1
  375. package/dist/cli/utils/server-url.js +7 -0
  376. package/dist/config/uat-isolation.d.ts +140 -0
  377. package/dist/config/uat-isolation.d.ts.map +1 -0
  378. package/dist/config/uat-isolation.js +246 -0
  379. package/dist/lib/global-state.d.ts +12 -0
  380. package/dist/lib/global-state.d.ts.map +1 -0
  381. package/dist/lib/global-state.js +16 -0
  382. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  383. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  384. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  385. package/dist/lib/session/prompt-view.d.ts +228 -0
  386. package/dist/lib/session/prompt-view.d.ts.map +1 -0
  387. package/dist/lib/session/prompt-view.js +290 -0
  388. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  389. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  390. package/dist/lib/session/status-evidence-type.js +2 -0
  391. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  392. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  393. package/dist/server/locales/en/worktree.json +3 -1
  394. package/dist/server/locales/ja/worktree.json +3 -1
  395. package/dist/server/server.js +5 -3
  396. package/dist/server/src/cli/types/api-responses.js +4 -2
  397. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  398. package/dist/server/src/config/uat-isolation.js +246 -0
  399. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  400. package/dist/server/src/lib/auto-yes-lifecycle.js +139 -0
  401. package/dist/server/src/lib/auto-yes-poller.js +465 -160
  402. package/dist/server/src/lib/auto-yes-state.js +2 -2
  403. package/dist/server/src/lib/cli-tools/antigravity.js +39 -80
  404. package/dist/server/src/lib/cli-tools/base.js +151 -0
  405. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  406. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  407. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  408. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  409. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  410. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  411. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  412. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  413. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  414. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  415. package/dist/server/src/lib/detection/cli-patterns.js +374 -3047
  416. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  417. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  418. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  419. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  420. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  421. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  422. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  423. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  424. package/dist/server/src/lib/detection/status-detector.js +1 -1
  425. package/dist/server/src/lib/detection/tools/antigravity/detect.js +12 -60
  426. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  427. package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
  428. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  429. package/dist/server/src/lib/detection/tools/claude/detect.js +11 -17
  430. package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
  431. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  432. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  433. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +1 -1
  434. package/dist/server/src/lib/detection/tools/codex/detect.js +71 -130
  435. package/dist/server/src/lib/detection/tools/codex/live-region.js +104 -0
  436. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  437. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  438. package/dist/server/src/lib/detection/tools/command-code/detect.js +19 -50
  439. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  440. package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
  441. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  442. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  443. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  444. package/dist/server/src/lib/detection/tools/copilot/detect.js +13 -35
  445. package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
  446. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  447. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  448. package/dist/server/src/lib/detection/tools/frame.js +36 -2
  449. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  450. package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
  451. package/dist/server/src/lib/detection/tools/live-region.js +204 -0
  452. package/dist/server/src/lib/detection/tools/opencode/detect.js +11 -49
  453. package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
  454. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  455. package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
  456. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +10 -42
  457. package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
  458. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  459. package/dist/server/src/lib/detection/tools/run-detection.js +31 -50
  460. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  461. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  462. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  463. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  464. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  465. package/dist/server/src/lib/global-state.js +16 -0
  466. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  467. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  468. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  469. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  470. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  471. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  472. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  473. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  474. package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
  475. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  476. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  477. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  478. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  479. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  480. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  481. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  482. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  483. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  484. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  485. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  486. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  487. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  488. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  489. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  490. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  491. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  492. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  493. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  494. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  495. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  496. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  497. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  498. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  499. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  500. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  501. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  502. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  503. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +16 -4
  504. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  505. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  506. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  507. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  508. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  509. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  510. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  511. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  512. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  513. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  514. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  515. package/dist/server/src/lib/polling/response-checker.js +666 -1162
  516. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  517. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  518. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  519. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  520. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  521. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  522. package/dist/server/src/lib/prompt-answer-sender.js +6 -5
  523. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  524. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  525. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  526. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  527. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  528. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -2
  529. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  530. package/dist/server/src/lib/relay/relay-delivery.js +6 -2
  531. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  532. package/dist/server/src/lib/relay/relay-triggers.js +9 -0
  533. package/dist/server/src/lib/resource-cleanup.js +6 -4
  534. package/dist/server/src/lib/response-cleaner.js +24 -1
  535. package/dist/server/src/lib/response-extractor.js +16 -0
  536. package/dist/server/src/lib/schedule-manager.js +8 -10
  537. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  538. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  539. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  540. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  541. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  542. package/dist/server/src/lib/session/agent-event-state.js +106 -1854
  543. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  544. package/dist/server/src/lib/session/agent-event-turn.js +811 -0
  545. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  546. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  547. package/dist/server/src/lib/session/claude-executor.js +45 -5
  548. package/dist/server/src/lib/session/claude-session.js +21 -65
  549. package/dist/server/src/lib/session/cli-session.js +17 -0
  550. package/dist/server/src/lib/session/current-output-builder.js +454 -1103
  551. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  552. package/dist/server/src/lib/session/current-output-types.js +9 -0
  553. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  554. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  555. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  556. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  557. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  558. package/dist/server/src/lib/session/prompt-view.js +290 -0
  559. package/dist/server/src/lib/session/prompt-waiting-composition.js +35 -0
  560. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  561. package/dist/server/src/lib/session/send-user-message.js +1 -1
  562. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  563. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  564. package/dist/server/src/lib/session/status-evidence.js +2 -2
  565. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  566. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  567. package/dist/server/src/lib/session/waiting-kind.js +3 -0
  568. package/dist/server/src/lib/session-cleanup.js +6 -8
  569. package/dist/server/src/lib/skills/install-plan.js +2 -1
  570. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  571. package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
  572. package/dist/server/src/lib/timer-manager.js +6 -8
  573. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  574. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  575. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  576. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  577. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  578. package/dist/server/src/lib/tmux/tmux.js +33 -59
  579. package/dist/server/src/lib/tui-accumulator.js +2 -2
  580. package/dist/server/src/lib/version-checker.js +6 -6
  581. package/dist/server/src/lib/ws-server.js +47 -11
  582. package/docs/en/user-guide/webapp-guide.md +27 -3
  583. package/package.json +1 -1
  584. package/release-notes/0.44.2.json +33 -0
  585. package/release-notes/0.44.3.json +82 -0
  586. package/scripts/hooks/cmate-agent-event.sh +18 -0
  587. package/.next/server/chunks/1068.js +0 -1
  588. package/.next/server/chunks/434.js +0 -1
  589. package/.next/server/chunks/5775.js +0 -1
  590. package/.next/server/chunks/6474.js +0 -14
  591. package/.next/server/chunks/650.js +0 -1
  592. package/.next/server/chunks/6661.js +0 -1
  593. package/.next/server/chunks/8583.js +0 -1
  594. package/.next/server/chunks/964.js +0 -1
  595. package/.next/server/chunks/967.js +0 -1
  596. package/.next/server/chunks/9882.js +0 -25
  597. package/.next/static/chunks/591-308072f285c34787.js +0 -1
  598. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  599. package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +0 -1
  600. package/.next/static/css/38070d879efa1371.css +0 -1
  601. package/dist/server/src/lib/cli-tools/index.js +0 -41
  602. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  603. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
  604. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
@@ -120,7 +120,7 @@ exports.antigravityTranscriptPath = antigravityTranscriptPath;
120
120
  exports.acceptAntigravityTranscriptPath = acceptAntigravityTranscriptPath;
121
121
  exports.captureAntigravityTranscriptTurn = captureAntigravityTranscriptTurn;
122
122
  exports.resolveAntigravityTranscriptPath = resolveAntigravityTranscriptPath;
123
- const promises_1 = require("fs/promises");
123
+ const global_state_1 = require("../../../../lib/global-state");
124
124
  const os_1 = require("os");
125
125
  const path_1 = require("path");
126
126
  const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
@@ -129,6 +129,7 @@ const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder
129
129
  const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
130
130
  const logger_1 = require("../../../../lib/logger");
131
131
  const agent_transcript_1 = require("../../../../types/agent-transcript");
132
+ const transcript_history_1 = require("../transcript-history");
132
133
  const transcript_1 = require("./transcript");
133
134
  const logger = (0, logger_1.createLogger)('lib/hooks/sources/antigravity/history');
134
135
  /**
@@ -178,7 +179,7 @@ const ANTIGRAVITY_CONVERSATION_ID_PATTERN = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9
178
179
  * agy sends `conversationId` on every event it delivers — but a future one that
179
180
  * did not would otherwise blank the pointer mid-session.
180
181
  */
181
- const conversationPointers = (globalThis.__antigravityTranscriptConversations ??= new Map());
182
+ const conversationPointers = (0, global_state_1.getOrInitGlobal)('__antigravityTranscriptConversations', () => new Map());
182
183
  /**
183
184
  * How many written-but-unconfirmed turns one instance may be following (#2443).
184
185
  *
@@ -212,7 +213,7 @@ exports.ANTIGRAVITY_UNSETTLED_TURN_LIMIT = 16;
212
213
  * coverage #2438 shipped. Persisting it would make a row's repair depend on a
213
214
  * table that outlives the transcript window it can only be repaired from.
214
215
  */
215
- const unsettledTurns = (globalThis.__antigravityUnsettledTurns ??= new Map());
216
+ const unsettledTurns = (0, global_state_1.getOrInitGlobal)('__antigravityUnsettledTurns', () => new Map());
216
217
  function keyOf(target) {
217
218
  return (0, auto_yes_state_1.buildCompositeKey)(target.worktreeId, target.cliToolId, target.instanceId);
218
219
  }
@@ -346,24 +347,7 @@ async function resolveAntigravityStopAt(target) {
346
347
  * status quo.
347
348
  */
348
349
  async function resolveAntigravityConversationId(target) {
349
- const key = keyOf(target);
350
- try {
351
- const { getLastAgentEvent } = await Promise.resolve().then(() => __importStar(require('../../../../lib/session/agent-event-state')));
352
- const conversationId = getLastAgentEvent(target.worktreeId, target.cliToolId, target.instanceId)?.sessionId;
353
- if (typeof conversationId === 'string' && conversationId.length > 0) {
354
- conversationPointers.set(key, conversationId);
355
- return conversationId;
356
- }
357
- }
358
- catch (error) {
359
- // A state module that cannot be reached is one that knows no conversation.
360
- logger.debug('antigravity-transcript-conversation-lookup-failed', {
361
- worktreeId: target.worktreeId,
362
- instanceId: target.instanceId ?? target.cliToolId,
363
- error: error instanceof Error ? error.message : String(error),
364
- });
365
- }
366
- return conversationPointers.get(key) ?? null;
350
+ return (0, transcript_history_1.resolveSessionIdFromEvents)(target, conversationPointers, keyOf(target), logger, 'antigravity-transcript-conversation-lookup-failed');
367
351
  }
368
352
  /**
369
353
  * `~/.gemini/antigravity-cli`.
@@ -408,15 +392,7 @@ function antigravityTranscriptPath(agyHome, conversationId) {
408
392
  * @returns The resolved path, or null when it is not acceptable
409
393
  */
410
394
  function acceptAntigravityTranscriptPath(agyHome, candidate) {
411
- if (!candidate.endsWith(transcript_1.ANTIGRAVITY_TRANSCRIPT_EXTENSION))
412
- return null;
413
- if (candidate.includes('\0'))
414
- return null;
415
- const root = (0, path_1.resolve)(antigravityBrainRoot(agyHome));
416
- const resolved = (0, path_1.resolve)(candidate);
417
- if (resolved !== root && !resolved.startsWith(root + path_1.sep))
418
- return null;
419
- return resolved;
395
+ return (0, transcript_history_1.acceptPathUnderRoot)(antigravityBrainRoot(agyHome), transcript_1.ANTIGRAVITY_TRANSCRIPT_EXTENSION, candidate);
420
396
  }
421
397
  /**
422
398
  * Read this instance's unwritten turns out of its transcript and write them.
@@ -616,7 +592,7 @@ async function captureAntigravityTranscriptTurn(target, capture = {}, report) {
616
592
  let captured = false;
617
593
  for (let index = 0; index < pending.turns.length; index += 1) {
618
594
  const turn = pending.turns[index];
619
- captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], (0, transcript_1.antigravityTurnLastRecordAt)(turn), nextTurnOpensAt(pending.turns, userRows, index)), path, report);
595
+ captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), (0, transcript_history_1.resolveAssistantTimestampMs)(turn, userRows[index], (0, transcript_1.antigravityTurnLastRecordAt)(turn), (0, transcript_history_1.nextTurnOpensAt)(pending.turns, userRows, index)), path, report);
620
596
  // Issue #2443: a row now exists for this turn, and whether it is the body
621
597
  // agy finished on is a separate question from whether it could be saved.
622
598
  // An unconfirmed one joins the follow list so that its conclusion is still
@@ -675,27 +651,7 @@ async function resolveAntigravityTranscriptPath(target, capture = {}) {
675
651
  * @param turns - Every turn in the window, oldest first
676
652
  */
677
653
  async function selectUnwrittenAntigravityTurns(target, turns) {
678
- const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
679
- Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
680
- Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
681
- ]);
682
- const db = getDbInstance();
683
- for (let index = turns.length - 1; index >= 0; index -= 1) {
684
- const turn = turns[index];
685
- const requestId = (0, agent_transcript_1.antigravityTurnRequestId)(turn.conversationId, turn.stepIndex);
686
- if (!findMessageByRequestId(db, target.worktreeId, requestId))
687
- continue;
688
- return {
689
- turns: turns.slice(index + 1),
690
- previousStartedAt: turn.startedAt,
691
- anchored: true,
692
- };
693
- }
694
- return {
695
- turns: turns.slice(-1),
696
- previousStartedAt: turns.length > 1 ? turns[turns.length - 2].startedAt : 0,
697
- anchored: false,
698
- };
654
+ return (0, transcript_history_1.selectUnwrittenTurns)(target, turns, (turn) => (0, agent_transcript_1.antigravityTurnRequestId)(turn.conversationId, turn.stepIndex));
699
655
  }
700
656
  /**
701
657
  * The transcript file for this conversation, or null.
@@ -712,15 +668,7 @@ async function locateAntigravityTranscript(agyHome, conversationId) {
712
668
  const accepted = acceptAntigravityTranscriptPath(agyHome, candidate);
713
669
  if (!accepted)
714
670
  return null;
715
- return (await isReadableFile(accepted)) ? accepted : null;
716
- }
717
- async function isReadableFile(path) {
718
- try {
719
- return (await (0, promises_1.stat)(path)).isFile();
720
- }
721
- catch {
722
- return false;
723
- }
671
+ return (await (0, transcript_history_1.isReadableFile)(accepted)) ? accepted : null;
724
672
  }
725
673
  /**
726
674
  * Record the prompt this turn answers, before the reply is written (#2196).
@@ -757,7 +705,7 @@ async function recordAntigravityUserTurn(target, turn, previousStartedAt = 0) {
757
705
  }
758
706
  return recorded;
759
707
  }
760
- /**
708
+ /*
761
709
  * When the assistant row for this turn is dated.
762
710
  *
763
711
  * **The turn's LAST record, not its first (Issue #2273).** #2196 dated the reply
@@ -789,14 +737,7 @@ async function recordAntigravityUserTurn(target, turn, previousStartedAt = 0) {
789
737
  * @param nextTurnOpensAt - Epoch ms of the next turn's user row, or null when
790
738
  * this is the newest turn in the window
791
739
  */
792
- function resolveAssistantTimestampMs(turn, userRow, lastRecordAt = 0, nextTurnOpensAt = null) {
793
- const earliest = userRow.timestampMs === null
794
- ? turn.startedAt
795
- : Math.max(turn.startedAt, userRow.timestampMs + 1);
796
- const latest = nextTurnOpensAt === null ? Number.POSITIVE_INFINITY : nextTurnOpensAt - 1;
797
- return Math.max(earliest, Math.min(lastRecordAt, latest));
798
- }
799
- /**
740
+ /*
800
741
  * The instant the next pending turn's prompt row carries, or null (Issue #2273).
801
742
  *
802
743
  * The user row's own timestamp when there is one, because that is what History
@@ -805,12 +746,6 @@ function resolveAssistantTimestampMs(turn, userRow, lastRecordAt = 0, nextTurnOp
805
746
  * prompt is while the previous turn was still running. The turn's start is the
806
747
  * fallback for a turn that produced no row at all.
807
748
  */
808
- function nextTurnOpensAt(turns, userRows, index) {
809
- const next = turns[index + 1];
810
- if (!next)
811
- return null;
812
- return userRows[index + 1]?.timestampMs ?? next.startedAt;
813
- }
814
749
  /**
815
750
  * How many already-written turns are re-rendered and compared (Issue #2438).
816
751
  *
@@ -80,10 +80,12 @@ exports.buildAntigravityStopHookCommand = buildAntigravityStopHookCommand;
80
80
  exports.buildAntigravityPermissionHookCommand = buildAntigravityPermissionHookCommand;
81
81
  exports.buildAntigravityHookConfig = buildAntigravityHookConfig;
82
82
  exports.mergeAntigravityHooksConfig = mergeAntigravityHooksConfig;
83
+ exports.inspectAntigravityHooksConfigReadOnly = inspectAntigravityHooksConfigReadOnly;
83
84
  exports.writeAntigravityHooksConfig = writeAntigravityHooksConfig;
84
85
  exports.buildAntigravityLaunchCommand = buildAntigravityLaunchCommand;
85
86
  const os_1 = require("os");
86
87
  const path_1 = require("path");
88
+ const uat_isolation_1 = require("../../../../config/uat-isolation");
87
89
  const types_1 = require("../../../../lib/cli-tools/types");
88
90
  const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
89
91
  const hook_settings_generator_1 = require("../../../../lib/hooks/hook-settings-generator");
@@ -359,9 +361,58 @@ function buildAntigravityHookConfig(relayPath) {
359
361
  function mergeAntigravityHooksConfig(existing, config) {
360
362
  return { ...existing, [exports.ANTIGRAVITY_HOOK_NAME]: config };
361
363
  }
364
+ /**
365
+ * Whether the shared `~/.gemini/config/hooks.json` may be used, unwritten, by a
366
+ * server in UAT isolation mode (`CM_UAT_ISOLATION=1`, Issue #3360).
367
+ *
368
+ * Usable only when the file holds CommandMate's named hook and nothing else,
369
+ * exactly as this build writes it. A comparison against the merge with what is
370
+ * there would keep the user's own hooks (one may post straight to production)
371
+ * and still compare equal, so any other top-level key is refused, with its own
372
+ * reason.
373
+ */
374
+ function inspectAntigravityHooksConfigReadOnly(options = {}) {
375
+ const configPath = getAntigravityHooksConfigPath(options);
376
+ if (!(0, hook_settings_generator_1.isHookInjectionEnabled)()) {
377
+ return {
378
+ usable: false,
379
+ reason: 'CM_AGENT_HOOKS_INJECT=0',
380
+ fix: 'Do not combine CM_AGENT_HOOKS_INJECT=0 with UAT isolation.',
381
+ };
382
+ }
383
+ const relayPath = (0, hook_settings_generator_1.resolveRelayScriptPath)();
384
+ if (!relayPath) {
385
+ return { usable: false, reason: 'this build ships no relay script', fix: uat_isolation_1.UAT_SAME_BUILD_FIX };
386
+ }
387
+ const existing = (0, shared_config_tree_1.readJsonObjectFile)(configPath);
388
+ if (existing === null) {
389
+ logger.info('antigravity-hooks-config-absent-readonly', { configPath });
390
+ return { usable: false, reason: `${configPath} does not exist or cannot be read`, fix: uat_isolation_1.UAT_SAME_BUILD_FIX };
391
+ }
392
+ if (Object.keys(existing).some((key) => key !== exports.ANTIGRAVITY_HOOK_NAME)) {
393
+ logger.info('antigravity-hooks-config-foreign-readonly', { configPath });
394
+ return {
395
+ usable: false,
396
+ reason: `${configPath} also holds hooks (or keys) CommandMate did not write, which would run in the UAT session`,
397
+ fix: 'Skip antigravity scenarios in this UAT, or run it where the shared hooks file holds only the hook CommandMate writes.',
398
+ };
399
+ }
400
+ const own = mergeAntigravityHooksConfig(null, buildAntigravityHookConfig(relayPath));
401
+ if (JSON.stringify(existing) !== JSON.stringify(own)) {
402
+ logger.info('antigravity-hooks-config-differs-readonly', { configPath });
403
+ return { usable: false, reason: `${configPath} differs from what this build writes`, fix: uat_isolation_1.UAT_SAME_BUILD_FIX };
404
+ }
405
+ return { usable: true, configPath };
406
+ }
362
407
  /**
363
408
  * Write `~/.gemini/config/hooks.json`.
364
409
  *
410
+ * Under `CM_UAT_ISOLATION=1` (Issue #3360) nothing is written: an existing file
411
+ * that already holds exactly this config is reused, anything else answers null
412
+ * (and `source.prepareLaunch` then refuses the launch). Under `own-home`
413
+ * (Issue #3312) it is written once the path checks out, else this throws
414
+ * `UatIsolationLaunchRefusedError`.
415
+ *
365
416
  * @returns The path written, or null when injection is off or not possible
366
417
  */
367
418
  function writeAntigravityHooksConfig(options = {}) {
@@ -373,9 +424,20 @@ function writeAntigravityHooksConfig(options = {}) {
373
424
  return null;
374
425
  }
375
426
  const configPath = getAntigravityHooksConfigPath(options);
427
+ // Issue #3312: outside the fail-open `try` on purpose — under `own-home` a
428
+ // path outside the dedicated user's HOME refuses the launch.
429
+ const policy = (0, uat_isolation_1.sharedHookWritePolicy)('antigravity', [configPath]);
376
430
  try {
431
+ if (policy === 'read-only') {
432
+ // Issue #3360: the file is the user's, shared with their production
433
+ // server, and names a relay by this checkout's path. A UAT server writes
434
+ // nothing to it; see {@link inspectAntigravityHooksConfigReadOnly}.
435
+ const inspection = inspectAntigravityHooksConfigReadOnly(options);
436
+ return inspection.usable ? inspection.configPath : null;
437
+ }
377
438
  const existing = (0, shared_config_tree_1.readJsonObjectFile)(configPath);
378
- (0, shared_config_tree_1.writeJsonObjectFile)(configPath, mergeAntigravityHooksConfig(existing, buildAntigravityHookConfig(relayPath)));
439
+ const merged = mergeAntigravityHooksConfig(existing, buildAntigravityHookConfig(relayPath));
440
+ (0, shared_config_tree_1.writeJsonObjectFile)(configPath, merged);
379
441
  return configPath;
380
442
  }
381
443
  catch (error) {
@@ -66,6 +66,7 @@ exports.antigravityAgentEventSource = void 0;
66
66
  exports.parseAntigravityPermissionRequest = parseAntigravityPermissionRequest;
67
67
  exports.encodeAntigravityVerdict = encodeAntigravityVerdict;
68
68
  exports.extractAntigravityEventDetail = extractAntigravityEventDetail;
69
+ const uat_isolation_1 = require("../../../../config/uat-isolation");
69
70
  const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
70
71
  const permission_request_payload_1 = require("../../../../lib/hooks/permission-request-payload");
71
72
  const define_source_1 = require("../define-source");
@@ -263,6 +264,21 @@ exports.antigravityAgentEventSource = (0, define_source_1.definePushHookSource)(
263
264
  // so no worktree path is needed and `prepareLaunch` really does write it.
264
265
  prepareLaunch: ({ target, executablePath }) => {
265
266
  const settingsPath = (0, hooks_config_1.writeAntigravityHooksConfig)();
267
+ // Issue #3360: under UAT isolation the shared file is never written, and a
268
+ // file this build did not produce is refused rather than launched against —
269
+ // agy reads `~/.gemini/config/hooks.json` whatever this server passes, so
270
+ // "without hooks" would mean production's hooks in the UAT session.
271
+ if (settingsPath === null && (0, uat_isolation_1.isUatIsolationEnabled)()) {
272
+ // Issue #3312: under `own-home` the file is written, not inspected, so a
273
+ // null here is a write that failed — still refused, never started bare.
274
+ if ((0, uat_isolation_1.getUatIsolationMode)() === 'own-home') {
275
+ throw new uat_isolation_1.UatIsolationLaunchRefusedError('antigravity', '~/.gemini/config/hooks.json could not be prepared', uat_isolation_1.UAT_SAME_BUILD_FIX);
276
+ }
277
+ const inspection = (0, hooks_config_1.inspectAntigravityHooksConfigReadOnly)();
278
+ throw inspection.usable
279
+ ? new uat_isolation_1.UatIsolationLaunchRefusedError('antigravity', '~/.gemini/config/hooks.json could not be prepared', uat_isolation_1.UAT_SAME_BUILD_FIX)
280
+ : new uat_isolation_1.UatIsolationLaunchRefusedError('antigravity', inspection.reason, inspection.fix);
281
+ }
266
282
  // #1846: the two correlation URLs are the plan's `env`. `worktreePath` is
267
283
  // in the context now and deliberately unused here — agy's config is one
268
284
  // file for the machine, so there is nothing per-worktree to write.
@@ -174,7 +174,7 @@ function readAntigravityToolCall(value) {
174
174
  const detail = args
175
175
  ? ((0, event_mapper_1.readStringField)(args, 'toolAction') ?? (0, event_mapper_1.readStringField)(args, 'toolSummary'))
176
176
  : null;
177
- return { name, detail: detail ? boundDetailText(collapseToLine(detail)) : null };
177
+ return { name, detail: detail ? boundDetailText((0, turn_body_1.collapseToLine)(detail)) : null };
178
178
  }
179
179
  /**
180
180
  * Read one parsed transcript line.
@@ -379,13 +379,8 @@ function renderThinking(text) {
379
379
  .join('\n');
380
380
  return `> **${exports.ANTIGRAVITY_THINKING_LABEL}**\n>\n${quoted}`;
381
381
  }
382
- function collapseToLine(value) {
383
- return value.replace(/\s+/g, ' ').trim();
384
- }
385
382
  function boundDetailText(value) {
386
- return value.length <= exports.MAX_ANTIGRAVITY_TOOL_DETAIL_LENGTH
387
- ? value
388
- : `${value.slice(0, exports.MAX_ANTIGRAVITY_TOOL_DETAIL_LENGTH - 1)}…`;
383
+ return (0, turn_body_1.boundDetail)(value, exports.MAX_ANTIGRAVITY_TOOL_DETAIL_LENGTH);
389
384
  }
390
385
  /**
391
386
  * Render one turn to Markdown.
@@ -432,11 +427,7 @@ function renderAntigravityTurn(turn) {
432
427
  unknown.add(record.type);
433
428
  }
434
429
  let body = (0, turn_body_1.separateTurnBody)(rendered).body;
435
- if (body.length > exports.MAX_ANTIGRAVITY_TURN_BODY_LENGTH) {
436
- body =
437
- body.slice(0, exports.MAX_ANTIGRAVITY_TURN_BODY_LENGTH - exports.ANTIGRAVITY_TURN_TRUNCATION_MARKER.length) +
438
- exports.ANTIGRAVITY_TURN_TRUNCATION_MARKER;
439
- }
430
+ body = (0, turn_body_1.truncateTurnBody)(body, exports.MAX_ANTIGRAVITY_TURN_BODY_LENGTH, exports.ANTIGRAVITY_TURN_TRUNCATION_MARKER);
440
431
  return {
441
432
  conversationId: turn.conversationId,
442
433
  stepIndex: turn.stepIndex,
@@ -99,6 +99,7 @@ exports.acceptClaudeTranscriptHint = acceptClaudeTranscriptHint;
99
99
  exports.captureClaudeTranscriptTurn = captureClaudeTranscriptTurn;
100
100
  exports.resolveClaudeTranscriptPath = resolveClaudeTranscriptPath;
101
101
  exports.readClaudeTurnProgress = readClaudeTurnProgress;
102
+ const global_state_1 = require("../../../../lib/global-state");
102
103
  const promises_1 = require("fs/promises");
103
104
  const os_1 = require("os");
104
105
  const path_1 = require("path");
@@ -107,6 +108,7 @@ const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder
107
108
  const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
108
109
  const logger_1 = require("../../../../lib/logger");
109
110
  const agent_transcript_1 = require("../../../../types/agent-transcript");
111
+ const transcript_history_1 = require("../transcript-history");
110
112
  const transcript_1 = require("./transcript");
111
113
  const logger = (0, logger_1.createLogger)('lib/hooks/sources/claude/history');
112
114
  /**
@@ -180,7 +182,7 @@ const CLAUDE_TRANSCRIPT_EXTENSION = '.jsonl';
180
182
  * mid-session. Same reasoning as `getLastKnownAgentModel`, which latches for the
181
183
  * same reason.
182
184
  */
183
- const sessionPointers = (globalThis.__claudeTranscriptSessions ??= new Map());
185
+ const sessionPointers = (0, global_state_1.getOrInitGlobal)('__claudeTranscriptSessions', () => new Map());
184
186
  function keyOf(target) {
185
187
  return (0, auto_yes_state_1.buildCompositeKey)(target.worktreeId, target.cliToolId, target.instanceId);
186
188
  }
@@ -196,24 +198,7 @@ function resetClaudeTranscriptSessions() {
196
198
  * become a static dependency of the poller.
197
199
  */
198
200
  async function resolveClaudeSessionId(target) {
199
- const key = keyOf(target);
200
- try {
201
- const { getLastAgentEvent } = await Promise.resolve().then(() => __importStar(require('../../../../lib/session/agent-event-state')));
202
- const sessionId = getLastAgentEvent(target.worktreeId, target.cliToolId, target.instanceId)?.sessionId;
203
- if (typeof sessionId === 'string' && sessionId.length > 0) {
204
- sessionPointers.set(key, sessionId);
205
- return sessionId;
206
- }
207
- }
208
- catch (error) {
209
- // A state module that cannot be reached is one that knows no session id.
210
- logger.debug('claude-transcript-session-lookup-failed', {
211
- worktreeId: target.worktreeId,
212
- instanceId: target.instanceId ?? target.cliToolId,
213
- error: error instanceof Error ? error.message : String(error),
214
- });
215
- }
216
- return sessionPointers.get(key) ?? null;
201
+ return (0, transcript_history_1.resolveSessionIdFromEvents)(target, sessionPointers, keyOf(target), logger, 'claude-transcript-session-lookup-failed');
217
202
  }
218
203
  /** `<home>/.claude/projects`. */
219
204
  function claudeProjectsRoot(homeDir) {
@@ -249,15 +234,7 @@ function claudeTranscriptPath(homeDir, worktreePath, sessionId) {
249
234
  * @returns The resolved path, or null when it is not acceptable
250
235
  */
251
236
  function acceptClaudeTranscriptHint(homeDir, hint) {
252
- if (!hint.endsWith(CLAUDE_TRANSCRIPT_EXTENSION))
253
- return null;
254
- if (hint.includes('\0'))
255
- return null;
256
- const root = (0, path_1.resolve)(claudeProjectsRoot(homeDir));
257
- const resolved = (0, path_1.resolve)(hint);
258
- if (resolved !== root && !resolved.startsWith(root + path_1.sep))
259
- return null;
260
- return resolved;
237
+ return (0, transcript_history_1.acceptPathUnderRoot)(claudeProjectsRoot(homeDir), CLAUDE_TRANSCRIPT_EXTENSION, hint);
261
238
  }
262
239
  /**
263
240
  * Read this instance's unwritten turns out of its transcript and write them.
@@ -467,7 +444,7 @@ async function captureClaudeTranscriptTurn(target, capture, report) {
467
444
  let captured = false;
468
445
  for (let index = 0; index < pending.turns.length; index += 1) {
469
446
  const turn = pending.turns[index];
470
- captured = await writeClaudeTurn(target, turn, (0, transcript_1.renderClaudeTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.promptUuid) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), path, report);
447
+ captured = await writeClaudeTurn(target, turn, (0, transcript_1.renderClaudeTurn)(turn), (0, transcript_history_1.resolveAssistantTimestampMs)(turn, userRows[index], lastRecordAt.get(turn.promptUuid) ?? 0, (0, transcript_history_1.nextTurnOpensAt)(pending.turns, userRows, index)), path, report);
471
448
  }
472
449
  if (captured) {
473
450
  // Issue #2437: History now holds this turn as the agent's own Markdown.
@@ -518,26 +495,7 @@ async function captureClaudeTranscriptTurn(target, capture, report) {
518
495
  * @param turns - Every turn in the window, oldest first
519
496
  */
520
497
  async function selectUnwrittenClaudeTurns(target, turns) {
521
- const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
522
- Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
523
- Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
524
- ]);
525
- const db = getDbInstance();
526
- for (let index = turns.length - 1; index >= 0; index -= 1) {
527
- const requestId = (0, agent_transcript_1.claudeTurnRequestId)(turns[index].promptUuid);
528
- if (!findMessageByRequestId(db, target.worktreeId, requestId))
529
- continue;
530
- return {
531
- turns: turns.slice(index + 1),
532
- previousStartedAt: turns[index].startedAt,
533
- anchored: true,
534
- };
535
- }
536
- return {
537
- turns: turns.slice(-1),
538
- previousStartedAt: turns.length > 1 ? turns[turns.length - 2].startedAt : 0,
539
- anchored: false,
540
- };
498
+ return (0, transcript_history_1.selectUnwrittenTurns)(target, turns, (turn) => (0, agent_transcript_1.claudeTurnRequestId)(turn.promptUuid));
541
499
  }
542
500
  /**
543
501
  * The transcript file this instance would be read from, or null (Issue #2246).
@@ -780,43 +738,6 @@ async function recordClaudeUserTurn(target, turn, previousStartedAt = 0) {
780
738
  }
781
739
  return recorded;
782
740
  }
783
- /**
784
- * When the assistant row for this turn is dated.
785
- *
786
- * **The turn's LAST assistant record, not its prompt (Issue #2273).** #2121
787
- * dated the reply by the prompt record's clock so that a row written a poll late
788
- * still sorted where the conversation put it, and #2196 moved it one millisecond
789
- * on so that `groupMessagesIntoPairs` — which orders by timestamp and nothing
790
- * else — could never return the answer above the question. Both properties
791
- * survive: `earliest` is a floor this never goes under.
792
- *
793
- * What neither accounted for is the row that lands BETWEEN the prompt and the
794
- * reply. A tool approval is written when the dialog appears, seconds into the
795
- * turn, and the chat surface orders its rows by timestamp — so a reply dated at
796
- * the turn's start draws ABOVE an approval that really happened before it. The
797
- * measured case is in the Issue: prompt `04:49:50.989Z`, reply `04:49:54.000Z`,
798
- * approval `04:49:57.513Z`, rendered as question → answer → approval.
799
- *
800
- * The turn's last assistant record is the moment the reply was finished, so
801
- * everything the turn produced on the way sorts before it. `lastRecordAt` is 0
802
- * when the window held no timestamped assistant record for the turn, and the row
803
- * is then dated exactly where #2196 put it.
804
- *
805
- * `nextTurnOpensAt` is the ceiling. The next turn's prompt row may be a `/send`
806
- * row written while THIS turn was still running — a queued prompt — and a reply
807
- * that overtook it would be paired with the wrong question.
808
- *
809
- * @param lastRecordAt - Epoch ms of the turn's last assistant record, or 0
810
- * @param nextTurnOpensAt - Epoch ms of the next turn's user row, or null when
811
- * this is the newest turn in the window
812
- */
813
- function resolveAssistantTimestampMs(turn, userRow, lastRecordAt = 0, nextTurnOpensAt = null) {
814
- const earliest = userRow.timestampMs === null
815
- ? turn.startedAt
816
- : Math.max(turn.startedAt, userRow.timestampMs + 1);
817
- const latest = nextTurnOpensAt === null ? Number.POSITIVE_INFINITY : nextTurnOpensAt - 1;
818
- return Math.max(earliest, Math.min(lastRecordAt, latest));
819
- }
820
741
  /**
821
742
  * When each turn's last assistant record was written (Issue #2273).
822
743
  *
@@ -850,21 +771,6 @@ function lastClaudeAssistantRecordAt(records) {
850
771
  }
851
772
  return at;
852
773
  }
853
- /**
854
- * The instant the next pending turn's prompt row carries, or null (Issue #2273).
855
- *
856
- * The user row's own timestamp when there is one, because that is what History
857
- * sorts on and it can be EARLIER than the turn's start — an adopted `/send` row
858
- * was written when CommandMate handed the text to the pane, which for a queued
859
- * prompt is while the previous turn was still running. The turn's start is the
860
- * fallback for a turn that produced no row at all.
861
- */
862
- function nextTurnOpensAt(turns, userRows, index) {
863
- const next = turns[index + 1];
864
- if (!next)
865
- return null;
866
- return userRows[index + 1]?.timestampMs ?? next.startedAt;
867
- }
868
774
  /**
869
775
  * The transcript file for this instance, or null.
870
776
  *
@@ -876,25 +782,17 @@ function nextTurnOpensAt(turns, userRows, index) {
876
782
  async function locateClaudeTranscript(homeDir, capture, sessionId) {
877
783
  if (sessionId) {
878
784
  const path = claudeTranscriptPath(homeDir, capture.worktreePath, sessionId);
879
- if (await isReadableFile(path))
785
+ if (await (0, transcript_history_1.isReadableFile)(path))
880
786
  return path;
881
787
  }
882
788
  const hint = capture.transcriptPathHint;
883
789
  if (typeof hint === 'string' && hint.length > 0) {
884
790
  const accepted = acceptClaudeTranscriptHint(homeDir, hint);
885
- if (accepted && (await isReadableFile(accepted)))
791
+ if (accepted && (await (0, transcript_history_1.isReadableFile)(accepted)))
886
792
  return accepted;
887
793
  }
888
794
  return null;
889
795
  }
890
- async function isReadableFile(path) {
891
- try {
892
- return (await (0, promises_1.stat)(path)).isFile();
893
- }
894
- catch {
895
- return false;
896
- }
897
- }
898
796
  /** `\n`, which in UTF-8 is one byte and never part of another character. */
899
797
  const LINE_FEED = 0x0a;
900
798
  /**
@@ -1156,7 +1054,7 @@ async function captureHeadlessClaudeTurn(target, records, sessionId, path, repor
1156
1054
  const captured = await writeClaudeTurn(target, turn,
1157
1055
  // An empty body stays empty, so the writer hands the turn back to the
1158
1056
  // scraper instead of saving a row that is nothing but the marker.
1159
- rendered.body.length === 0 ? rendered : markClaudeTurnHeadMissing(rendered), resolveAssistantTimestampMs(turn, NO_USER_ROW, headless.lastRecordAt, null), path, report);
1057
+ rendered.body.length === 0 ? rendered : markClaudeTurnHeadMissing(rendered), (0, transcript_history_1.resolveAssistantTimestampMs)(turn, NO_USER_ROW, headless.lastRecordAt, null), path, report);
1160
1058
  if (captured) {
1161
1059
  // Issue #2437, for the reason the prompt-opened path gives.
1162
1060
  await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
@@ -1218,32 +1116,7 @@ exports.CLAUDE_TURN_RECHECK_LIMIT = 3;
1218
1116
  * @returns Whether the row was replaced
1219
1117
  */
1220
1118
  async function growClaudeTurnRow(target, existing, rendered, path) {
1221
- const instanceId = target.instanceId ?? target.cliToolId;
1222
- const previousLength = existing.content.length;
1223
- if (rendered.body.length <= previousLength)
1224
- return false;
1225
- const [{ getDbInstance }, { updateMessageContent }, { broadcastMessage }] = await Promise.all([
1226
- Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
1227
- Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
1228
- Promise.resolve().then(() => __importStar(require('../../../../lib/ws-server'))),
1229
- ]);
1230
- updateMessageContent(getDbInstance(), existing.id, rendered.body);
1231
- broadcastMessage('message_updated', {
1232
- worktreeId: target.worktreeId,
1233
- message: { ...existing, content: rendered.body },
1234
- });
1235
- logger.info('claude-transcript-turn-updated', {
1236
- worktreeId: target.worktreeId,
1237
- instanceId,
1238
- sessionId: rendered.sessionId,
1239
- requestId: existing.requestId,
1240
- path,
1241
- previousLength,
1242
- bodyLength: rendered.body.length,
1243
- textBlocks: rendered.textBlocks,
1244
- toolBlocks: rendered.toolBlocks,
1245
- });
1246
- return true;
1119
+ return (0, transcript_history_1.growTurnRowTo)(target, existing, rendered, path, logger, 'claude-transcript-turn-updated');
1247
1120
  }
1248
1121
  /**
1249
1122
  * Re-read the newest already-written turns and grow the short ones (#2264).
@@ -1266,24 +1139,12 @@ async function growClaudeTurnRow(target, existing, rendered, path) {
1266
1139
  * @returns How many rows were replaced
1267
1140
  */
1268
1141
  async function refreshClaudeTurnRows(target, candidates, path) {
1269
- if (candidates.length === 0)
1270
- return 0;
1271
- const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
1272
- Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
1273
- Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
1274
- ]);
1275
- const db = getDbInstance();
1276
- let updated = 0;
1277
- for (const turn of candidates) {
1278
- if (!(0, transcript_1.isClaudeTurnWritable)(turn))
1279
- continue;
1280
- const existing = findMessageByRequestId(db, target.worktreeId, (0, agent_transcript_1.claudeTurnRequestId)(turn.promptUuid));
1281
- if (!existing)
1282
- continue;
1283
- if (await growClaudeTurnRow(target, existing, (0, transcript_1.renderClaudeTurn)(turn), path))
1284
- updated += 1;
1285
- }
1286
- return updated;
1142
+ return (0, transcript_history_1.refreshTurnRowsTo)(target, candidates, path, {
1143
+ isWritable: transcript_1.isClaudeTurnWritable,
1144
+ requestIdOf: (turn) => (0, agent_transcript_1.claudeTurnRequestId)(turn.promptUuid),
1145
+ render: transcript_1.renderClaudeTurn,
1146
+ grow: growClaudeTurnRow,
1147
+ });
1287
1148
  }
1288
1149
  /**
1289
1150
  * Write one rendered turn, unless it is already there.
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * A `UserPromptSubmit` that is a queued notice joining the running turn
4
+ * (Issue #3330).
5
+ *
6
+ * Claude Code queues the completion notice of a background task (a `Bash` run
7
+ * with `run_in_background`, a subagent) and hands it to the model the next time
8
+ * it can: after a tool result inside a running turn, or as the prompt of a turn
9
+ * of its own when the session is idle. Either way it fires `UserPromptSubmit`
10
+ * once per notice, and the prompt it reports is the notice — the text the
11
+ * transcript records as `queue-operation` content, which starts with
12
+ * `<task-notification>`.
13
+ *
14
+ * Measured on the server logs and transcripts of 2026-10-02 to 2026-10-05: of
15
+ * the 188 Claude `user_prompt_submit`s applied while a turn of theirs was still
16
+ * open, 178 matched a `queue-operation: remove` (`reason: absorbed_mid_turn`)
17
+ * of a `<task-notification>` one for one. A prompt the operator typed into a
18
+ * running turn is absorbed the same way but fires no hook at all (9 of 9
19
+ * removes of other content had no delivery beside them).
20
+ *
21
+ * The answer is about the payload only. Whether there is a running turn to join
22
+ * is the state's question (`applyTurnTransition`), and a notice that arrives
23
+ * while the agent is idle opens its turn as before.
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.QUEUED_NOTICE_FIELD = exports.CLAUDE_TASK_NOTIFICATION_PREFIX = void 0;
27
+ exports.isClaudeQueuedNoticePrompt = isClaudeQueuedNoticePrompt;
28
+ /** The tag every queued background-task notice begins with. */
29
+ exports.CLAUDE_TASK_NOTIFICATION_PREFIX = '<task-notification>';
30
+ /**
31
+ * The body field the relay script (`scripts/hooks/cmate-agent-event.sh`) sets
32
+ * to `true` in place of the prompt.
33
+ *
34
+ * The relay rebuilds the body it posts and does not forward the prompt — the
35
+ * operator's text has no business in a request whose receiver needs one bit of
36
+ * it — so it answers the question below itself and sends the answer.
37
+ */
38
+ exports.QUEUED_NOTICE_FIELD = 'queuedNotice';
39
+ /**
40
+ * Whether this `UserPromptSubmit` payload is a queued background-task notice.
41
+ *
42
+ * Two shapes say so: Claude's own payload (the injected `type: "http"` hook),
43
+ * whose `prompt` starts with the tag, and the relay script's body, which
44
+ * carries {@link QUEUED_NOTICE_FIELD} `: true` instead. Anything else —
45
+ * including a relay too old to send the field — answers false, which is the
46
+ * behaviour before this Issue.
47
+ */
48
+ function isClaudeQueuedNoticePrompt(payload) {
49
+ if (payload[exports.QUEUED_NOTICE_FIELD] === true)
50
+ return true;
51
+ const prompt = payload.prompt;
52
+ return typeof prompt === 'string' && prompt.trimStart().startsWith(exports.CLAUDE_TASK_NOTIFICATION_PREFIX);
53
+ }