commandmate 0.33.0 → 0.33.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +432 -425
  3. package/.next/app-path-routes-manifest.json +24 -23
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/diagnostics/framework.json +1 -1
  6. package/.next/next-server.js.nft.json +1 -1
  7. package/.next/prerender-manifest.json +9 -9
  8. package/.next/required-server-files.json +1 -2
  9. package/.next/routes-manifest.json +8 -0
  10. package/.next/server/app/_not-found/page_client-reference-manifest.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_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  16. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/messages/route.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/session/route.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/start/route.js +32 -1
  26. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/terminal/route.js +33 -2
  29. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  32. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  45. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  46. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  48. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  49. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  51. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  52. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/push/escalation/route.js +1 -1
  56. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  58. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/push/vapid/route.js +1 -1
  60. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  62. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  63. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/relays/route.js +1 -1
  65. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  66. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  70. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  72. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  74. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/repositories/clone/route.js +1 -1
  77. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  78. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/restore/route.js +1 -1
  81. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  82. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/repositories/route.js +1 -1
  84. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  85. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/repositories/scan/route.js +1 -1
  87. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  88. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/repositories/sync/route.js +1 -1
  90. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  91. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  94. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  105. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/todos/route.js +1 -1
  109. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  111. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/verification/runs/route.js +1 -1
  113. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  116. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  130. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -0
  185. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js.nft.json +1 -0
  186. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -0
  187. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
  249. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  250. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  255. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  274. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/api/worktrees/route.js +1 -1
  277. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  278. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/page.js +1 -1
  285. package/.next/server/app/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/repositories/page.js +1 -1
  288. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  289. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  290. package/.next/server/app/sessions/page.js +1 -1
  291. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  292. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  293. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  294. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  295. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  296. package/.next/server/app/worktrees/[id]/page.js +12 -12
  297. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  298. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  299. package/.next/server/app-paths-manifest.json +24 -23
  300. package/.next/server/chunks/1068.js +1 -0
  301. package/.next/server/chunks/1191.js +1 -1
  302. package/.next/server/chunks/1210.js +1 -1
  303. package/.next/server/chunks/1331.js +2 -2
  304. package/.next/server/chunks/1366.js +5 -3
  305. package/.next/server/chunks/1886.js +3 -3
  306. package/.next/server/chunks/2119.js +1 -1
  307. package/.next/server/chunks/2445.js +1 -1
  308. package/.next/server/chunks/2839.js +1 -0
  309. package/.next/server/chunks/3241.js +1 -1
  310. package/.next/server/chunks/3323.js +1 -0
  311. package/.next/server/chunks/3707.js +1 -1
  312. package/.next/server/chunks/3708.js +1 -1
  313. package/.next/server/chunks/4443.js +1 -1
  314. package/.next/server/chunks/5220.js +1 -1
  315. package/.next/server/chunks/5354.js +1 -1
  316. package/.next/server/chunks/595.js +2 -2
  317. package/.next/server/chunks/6337.js +1 -1
  318. package/.next/server/chunks/6401.js +1 -1
  319. package/.next/server/chunks/650.js +1 -0
  320. package/.next/server/chunks/6661.js +1 -1
  321. package/.next/server/chunks/6781.js +1 -0
  322. package/.next/server/chunks/6808.js +1 -0
  323. package/.next/server/chunks/6838.js +1 -1
  324. package/.next/server/chunks/7875.js +3 -3
  325. package/.next/server/chunks/8807.js +163 -131
  326. package/.next/server/chunks/8918.js +107 -5
  327. package/.next/server/chunks/9584.js +1 -1
  328. package/.next/server/middleware-build-manifest.js +1 -1
  329. package/.next/server/middleware-manifest.json +5 -5
  330. package/.next/server/pages/500.html +1 -1
  331. package/.next/server/server-reference-manifest.json +1 -1
  332. package/.next/server/src/middleware.js.map +1 -1
  333. package/.next/static/chunks/1255-7e5873f06b25e129.js +1 -0
  334. package/.next/static/chunks/{4718-d97f52cd932dc1ee.js → 4718-441a2af91f0374e9.js} +1 -1
  335. package/.next/static/chunks/app/api/agents/update/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
  336. package/.next/static/chunks/app/api/agents/versions/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
  337. package/.next/static/chunks/app/api/app/update/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
  338. package/.next/static/chunks/app/api/app/update-check/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
  339. package/.next/static/chunks/app/api/assistant/conversation/route-c4d2d5016c5f2a0a.js +1 -0
  340. package/.next/static/chunks/app/api/assistant/current-output/route-c4d2d5016c5f2a0a.js +1 -0
  341. package/.next/static/chunks/app/api/assistant/messages/route-c4d2d5016c5f2a0a.js +1 -0
  342. package/.next/static/chunks/app/api/assistant/session/route-c4d2d5016c5f2a0a.js +1 -0
  343. package/.next/static/chunks/app/api/assistant/start/route-c4d2d5016c5f2a0a.js +1 -0
  344. package/.next/static/chunks/app/api/assistant/terminal/route-c4d2d5016c5f2a0a.js +1 -0
  345. package/.next/static/chunks/app/api/assistant/tools/route-c4d2d5016c5f2a0a.js +1 -0
  346. package/.next/static/chunks/app/api/auth/login/route-c4d2d5016c5f2a0a.js +1 -0
  347. package/.next/static/chunks/app/api/auth/logout/route-c4d2d5016c5f2a0a.js +1 -0
  348. package/.next/static/chunks/app/api/auth/status/route-c4d2d5016c5f2a0a.js +1 -0
  349. package/.next/static/chunks/app/api/capabilities/route-c4d2d5016c5f2a0a.js +1 -0
  350. package/.next/static/chunks/app/api/daily-summary/route-c4d2d5016c5f2a0a.js +1 -0
  351. package/.next/static/chunks/app/api/daily-summary/status/route-c4d2d5016c5f2a0a.js +1 -0
  352. package/.next/static/chunks/app/api/external-apps/[id]/health/route-c4d2d5016c5f2a0a.js +1 -0
  353. package/.next/static/chunks/app/api/external-apps/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  354. package/.next/static/chunks/app/api/external-apps/route-c4d2d5016c5f2a0a.js +1 -0
  355. package/.next/static/chunks/app/api/fs/browse/route-c4d2d5016c5f2a0a.js +1 -0
  356. package/.next/static/chunks/app/api/fs/recent-paths/route-c4d2d5016c5f2a0a.js +1 -0
  357. package/.next/static/chunks/app/api/hooks/agent-event/route-c4d2d5016c5f2a0a.js +1 -0
  358. package/.next/static/chunks/app/api/hooks/claude-done/route-c4d2d5016c5f2a0a.js +1 -0
  359. package/.next/static/chunks/app/api/hooks/permission-request/route-c4d2d5016c5f2a0a.js +1 -0
  360. package/.next/static/chunks/app/api/metrics/vibe/route-c4d2d5016c5f2a0a.js +1 -0
  361. package/.next/static/chunks/app/api/ollama/models/route-c4d2d5016c5f2a0a.js +1 -0
  362. package/.next/static/chunks/app/api/push/escalation/route-c4d2d5016c5f2a0a.js +1 -0
  363. package/.next/static/chunks/app/api/push/subscriptions/route-c4d2d5016c5f2a0a.js +1 -0
  364. package/.next/static/chunks/app/api/push/vapid/route-c4d2d5016c5f2a0a.js +1 -0
  365. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
  366. package/.next/static/chunks/app/api/relays/route-c4d2d5016c5f2a0a.js +1 -0
  367. package/.next/static/chunks/app/api/remote/pair/route-c4d2d5016c5f2a0a.js +1 -0
  368. package/.next/static/chunks/app/api/repositories/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  369. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-c4d2d5016c5f2a0a.js +1 -0
  370. package/.next/static/chunks/app/api/repositories/[id]/todos/route-c4d2d5016c5f2a0a.js +1 -0
  371. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c4d2d5016c5f2a0a.js +1 -0
  372. package/.next/static/chunks/app/api/repositories/clone/route-c4d2d5016c5f2a0a.js +1 -0
  373. package/.next/static/chunks/app/api/repositories/excluded/route-c4d2d5016c5f2a0a.js +1 -0
  374. package/.next/static/chunks/app/api/repositories/restore/route-c4d2d5016c5f2a0a.js +1 -0
  375. package/.next/static/chunks/app/api/repositories/route-c4d2d5016c5f2a0a.js +1 -0
  376. package/.next/static/chunks/app/api/repositories/scan/route-c4d2d5016c5f2a0a.js +1 -0
  377. package/.next/static/chunks/app/api/repositories/sync/route-c4d2d5016c5f2a0a.js +1 -0
  378. package/.next/static/chunks/app/api/repositories/validate-path/route-c4d2d5016c5f2a0a.js +1 -0
  379. package/.next/static/chunks/app/api/settings/default-agents/route-c4d2d5016c5f2a0a.js +1 -0
  380. package/.next/static/chunks/app/api/settings/default-surface-mode/route-c4d2d5016c5f2a0a.js +1 -0
  381. package/.next/static/chunks/app/api/sidebar/group-order/route-c4d2d5016c5f2a0a.js +1 -0
  382. package/.next/static/chunks/app/api/skills/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  383. package/.next/static/chunks/app/api/skills/installations/route-c4d2d5016c5f2a0a.js +1 -0
  384. package/.next/static/chunks/app/api/skills/operations/route-c4d2d5016c5f2a0a.js +1 -0
  385. package/.next/static/chunks/app/api/skills/reindex/route-c4d2d5016c5f2a0a.js +1 -0
  386. package/.next/static/chunks/app/api/skills/route-c4d2d5016c5f2a0a.js +1 -0
  387. package/.next/static/chunks/app/api/slash-commands/route-c4d2d5016c5f2a0a.js +1 -0
  388. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
  389. package/.next/static/chunks/app/api/tasks/[taskId]/route-c4d2d5016c5f2a0a.js +1 -0
  390. package/.next/static/chunks/app/api/templates/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  391. package/.next/static/chunks/app/api/templates/route-c4d2d5016c5f2a0a.js +1 -0
  392. package/.next/static/chunks/app/api/todos/route-c4d2d5016c5f2a0a.js +1 -0
  393. package/.next/static/chunks/app/api/verification/runs/[runId]/route-c4d2d5016c5f2a0a.js +1 -0
  394. package/.next/static/chunks/app/api/verification/runs/route-c4d2d5016c5f2a0a.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c4d2d5016c5f2a0a.js +1 -0
  396. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c4d2d5016c5f2a0a.js +1 -0
  397. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c4d2d5016c5f2a0a.js +1 -0
  398. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c4d2d5016c5f2a0a.js +1 -0
  399. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c4d2d5016c5f2a0a.js +1 -0
  400. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c4d2d5016c5f2a0a.js +1 -0
  401. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c4d2d5016c5f2a0a.js +1 -0
  402. package/.next/static/chunks/app/api/worktrees/[id]/env/route-c4d2d5016c5f2a0a.js +1 -0
  403. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c4d2d5016c5f2a0a.js +1 -0
  404. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c4d2d5016c5f2a0a.js +1 -0
  405. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
  406. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c4d2d5016c5f2a0a.js +1 -0
  407. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c4d2d5016c5f2a0a.js +1 -0
  408. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c4d2d5016c5f2a0a.js +1 -0
  409. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c4d2d5016c5f2a0a.js +1 -0
  410. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c4d2d5016c5f2a0a.js +1 -0
  411. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c4d2d5016c5f2a0a.js +1 -0
  412. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c4d2d5016c5f2a0a.js +1 -0
  413. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c4d2d5016c5f2a0a.js +1 -0
  414. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c4d2d5016c5f2a0a.js +1 -0
  415. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c4d2d5016c5f2a0a.js +1 -0
  416. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c4d2d5016c5f2a0a.js +1 -0
  417. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c4d2d5016c5f2a0a.js +1 -0
  418. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c4d2d5016c5f2a0a.js +1 -0
  419. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c4d2d5016c5f2a0a.js +1 -0
  420. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c4d2d5016c5f2a0a.js +1 -0
  421. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c4d2d5016c5f2a0a.js +1 -0
  422. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c4d2d5016c5f2a0a.js +1 -0
  423. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c4d2d5016c5f2a0a.js +1 -0
  424. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c4d2d5016c5f2a0a.js +1 -0
  425. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c4d2d5016c5f2a0a.js +1 -0
  426. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c4d2d5016c5f2a0a.js +1 -0
  427. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c4d2d5016c5f2a0a.js +1 -0
  428. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c4d2d5016c5f2a0a.js +1 -0
  429. package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c4d2d5016c5f2a0a.js +1 -0
  430. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c4d2d5016c5f2a0a.js +1 -0
  431. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c4d2d5016c5f2a0a.js +1 -0
  432. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c4d2d5016c5f2a0a.js +1 -0
  433. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c4d2d5016c5f2a0a.js +1 -0
  434. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c4d2d5016c5f2a0a.js +1 -0
  435. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c4d2d5016c5f2a0a.js +1 -0
  436. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c4d2d5016c5f2a0a.js +1 -0
  437. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c4d2d5016c5f2a0a.js +1 -0
  438. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c4d2d5016c5f2a0a.js +1 -0
  439. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c4d2d5016c5f2a0a.js +1 -0
  440. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c4d2d5016c5f2a0a.js +1 -0
  441. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c4d2d5016c5f2a0a.js +1 -0
  442. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c4d2d5016c5f2a0a.js +1 -0
  443. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c4d2d5016c5f2a0a.js +1 -0
  444. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c4d2d5016c5f2a0a.js +1 -0
  445. package/.next/static/chunks/app/api/worktrees/[id]/route-c4d2d5016c5f2a0a.js +1 -0
  446. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c4d2d5016c5f2a0a.js +1 -0
  447. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c4d2d5016c5f2a0a.js +1 -0
  448. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c4d2d5016c5f2a0a.js +1 -0
  449. package/.next/static/chunks/app/api/worktrees/[id]/search/route-c4d2d5016c5f2a0a.js +1 -0
  450. package/.next/static/chunks/app/api/worktrees/[id]/send/route-c4d2d5016c5f2a0a.js +1 -0
  451. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c4d2d5016c5f2a0a.js +1 -0
  452. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c4d2d5016c5f2a0a.js +1 -0
  453. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c4d2d5016c5f2a0a.js +1 -0
  454. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c4d2d5016c5f2a0a.js +1 -0
  455. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c4d2d5016c5f2a0a.js +1 -0
  456. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c4d2d5016c5f2a0a.js +1 -0
  457. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c4d2d5016c5f2a0a.js +1 -0
  458. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c4d2d5016c5f2a0a.js +1 -0
  459. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c4d2d5016c5f2a0a.js +1 -0
  460. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c4d2d5016c5f2a0a.js +1 -0
  461. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c4d2d5016c5f2a0a.js +1 -0
  462. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c4d2d5016c5f2a0a.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c4d2d5016c5f2a0a.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c4d2d5016c5f2a0a.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c4d2d5016c5f2a0a.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c4d2d5016c5f2a0a.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c4d2d5016c5f2a0a.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c4d2d5016c5f2a0a.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c4d2d5016c5f2a0a.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c4d2d5016c5f2a0a.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c4d2d5016c5f2a0a.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c4d2d5016c5f2a0a.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c4d2d5016c5f2a0a.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/route-c4d2d5016c5f2a0a.js +1 -0
  478. package/.next/static/chunks/app/manifest.webmanifest/route-c4d2d5016c5f2a0a.js +1 -0
  479. package/.next/static/chunks/app/{page-6871cca022b24807.js → page-022090bf6f932818.js} +1 -1
  480. package/.next/static/chunks/app/proxy/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
  481. package/.next/static/chunks/app/repositories/{page-788ded1b72963d94.js → page-2576158c8420fda0.js} +1 -1
  482. package/.next/static/chunks/app/sessions/page-584adf11ae51df10.js +1 -0
  483. package/.next/static/chunks/app/worktrees/[id]/layout-c4d2d5016c5f2a0a.js +1 -0
  484. package/.next/static/chunks/app/worktrees/[id]/page-38edcd53e51f53b0.js +1 -0
  485. package/.next/static/chunks/{main-6092074a0dc78280.js → main-ac91ed6e71380841.js} +1 -1
  486. package/.next/static/css/acd46e25427a2080.css +1 -0
  487. package/.next/trace +13 -13
  488. package/.next/types/app/api/worktrees/[id]/instances/notes/route.ts +347 -0
  489. package/.next/types/routes.d.ts +2 -1
  490. package/.next/types/validator.ts +9 -0
  491. package/dist/server/locales/en/worktree.json +8 -0
  492. package/dist/server/locales/ja/worktree.json +8 -0
  493. package/dist/server/src/lib/assistant-response-saver.js +168 -12
  494. package/dist/server/src/lib/cli-tools/base.js +311 -1
  495. package/dist/server/src/lib/cli-tools/start-availability.js +52 -0
  496. package/dist/server/src/lib/db/agent-instances-db.js +213 -1
  497. package/dist/server/src/lib/db/migrations/index.js +2 -0
  498. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  499. package/dist/server/src/lib/db/migrations/v61-session-notes.js +85 -0
  500. package/dist/server/src/lib/hooks/sources/antigravity/history.js +204 -9
  501. package/dist/server/src/lib/hooks/sources/claude/history.js +29 -3
  502. package/dist/server/src/lib/hooks/sources/codex/history.js +29 -3
  503. package/dist/server/src/lib/hooks/sources/command-code/history.js +29 -3
  504. package/dist/server/src/lib/hooks/stop-history-capture.js +30 -4
  505. package/dist/server/src/lib/polling/response-checker.js +258 -9
  506. package/dist/server/src/lib/polling/response-poller-core.js +20 -0
  507. package/dist/server/src/lib/polling/structured-history-gate.js +26 -6
  508. package/dist/server/src/lib/push/failure-push-notifier.js +68 -1
  509. package/dist/server/src/lib/push/push-sender.js +16 -5
  510. package/dist/server/src/lib/response-cleaner.js +84 -0
  511. package/dist/server/src/lib/session/current-output-builder.js +156 -4
  512. package/package.json +2 -2
  513. package/.next/server/chunks/21.js +0 -1
  514. package/.next/server/chunks/3086.js +0 -1
  515. package/.next/server/chunks/3270.js +0 -1
  516. package/.next/server/chunks/3925.js +0 -1
  517. package/.next/server/chunks/5043.js +0 -1
  518. package/.next/server/chunks/6306.js +0 -1
  519. package/.next/server/chunks/6363.js +0 -1
  520. package/.next/server/chunks/6491.js +0 -103
  521. package/.next/server/chunks/7890.js +0 -1
  522. package/.next/server/chunks/8063.js +0 -32
  523. package/.next/server/chunks/8687.js +0 -1
  524. package/.next/static/chunks/1255-8cb587d9170b45ed.js +0 -1
  525. package/.next/static/chunks/app/api/assistant/conversation/route-8bc5b680c5f3eae4.js +0 -1
  526. package/.next/static/chunks/app/api/assistant/current-output/route-8bc5b680c5f3eae4.js +0 -1
  527. package/.next/static/chunks/app/api/assistant/messages/route-8bc5b680c5f3eae4.js +0 -1
  528. package/.next/static/chunks/app/api/assistant/session/route-8bc5b680c5f3eae4.js +0 -1
  529. package/.next/static/chunks/app/api/assistant/start/route-8bc5b680c5f3eae4.js +0 -1
  530. package/.next/static/chunks/app/api/assistant/terminal/route-8bc5b680c5f3eae4.js +0 -1
  531. package/.next/static/chunks/app/api/assistant/tools/route-8bc5b680c5f3eae4.js +0 -1
  532. package/.next/static/chunks/app/api/auth/login/route-8bc5b680c5f3eae4.js +0 -1
  533. package/.next/static/chunks/app/api/auth/logout/route-8bc5b680c5f3eae4.js +0 -1
  534. package/.next/static/chunks/app/api/auth/status/route-8bc5b680c5f3eae4.js +0 -1
  535. package/.next/static/chunks/app/api/capabilities/route-8bc5b680c5f3eae4.js +0 -1
  536. package/.next/static/chunks/app/api/daily-summary/route-8bc5b680c5f3eae4.js +0 -1
  537. package/.next/static/chunks/app/api/daily-summary/status/route-8bc5b680c5f3eae4.js +0 -1
  538. package/.next/static/chunks/app/api/external-apps/[id]/health/route-8bc5b680c5f3eae4.js +0 -1
  539. package/.next/static/chunks/app/api/external-apps/[id]/route-8bc5b680c5f3eae4.js +0 -1
  540. package/.next/static/chunks/app/api/external-apps/route-8bc5b680c5f3eae4.js +0 -1
  541. package/.next/static/chunks/app/api/fs/browse/route-8bc5b680c5f3eae4.js +0 -1
  542. package/.next/static/chunks/app/api/fs/recent-paths/route-8bc5b680c5f3eae4.js +0 -1
  543. package/.next/static/chunks/app/api/hooks/agent-event/route-8bc5b680c5f3eae4.js +0 -1
  544. package/.next/static/chunks/app/api/hooks/claude-done/route-8bc5b680c5f3eae4.js +0 -1
  545. package/.next/static/chunks/app/api/hooks/permission-request/route-8bc5b680c5f3eae4.js +0 -1
  546. package/.next/static/chunks/app/api/metrics/vibe/route-8bc5b680c5f3eae4.js +0 -1
  547. package/.next/static/chunks/app/api/ollama/models/route-8bc5b680c5f3eae4.js +0 -1
  548. package/.next/static/chunks/app/api/push/escalation/route-8bc5b680c5f3eae4.js +0 -1
  549. package/.next/static/chunks/app/api/push/subscriptions/route-8bc5b680c5f3eae4.js +0 -1
  550. package/.next/static/chunks/app/api/push/vapid/route-8bc5b680c5f3eae4.js +0 -1
  551. package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
  552. package/.next/static/chunks/app/api/relays/route-8bc5b680c5f3eae4.js +0 -1
  553. package/.next/static/chunks/app/api/remote/pair/route-8bc5b680c5f3eae4.js +0 -1
  554. package/.next/static/chunks/app/api/repositories/[id]/route-8bc5b680c5f3eae4.js +0 -1
  555. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +0 -1
  556. package/.next/static/chunks/app/api/repositories/[id]/todos/route-8bc5b680c5f3eae4.js +0 -1
  557. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8bc5b680c5f3eae4.js +0 -1
  558. package/.next/static/chunks/app/api/repositories/clone/route-8bc5b680c5f3eae4.js +0 -1
  559. package/.next/static/chunks/app/api/repositories/excluded/route-8bc5b680c5f3eae4.js +0 -1
  560. package/.next/static/chunks/app/api/repositories/restore/route-8bc5b680c5f3eae4.js +0 -1
  561. package/.next/static/chunks/app/api/repositories/route-8bc5b680c5f3eae4.js +0 -1
  562. package/.next/static/chunks/app/api/repositories/scan/route-8bc5b680c5f3eae4.js +0 -1
  563. package/.next/static/chunks/app/api/repositories/sync/route-8bc5b680c5f3eae4.js +0 -1
  564. package/.next/static/chunks/app/api/repositories/validate-path/route-8bc5b680c5f3eae4.js +0 -1
  565. package/.next/static/chunks/app/api/settings/default-agents/route-8bc5b680c5f3eae4.js +0 -1
  566. package/.next/static/chunks/app/api/settings/default-surface-mode/route-8bc5b680c5f3eae4.js +0 -1
  567. package/.next/static/chunks/app/api/sidebar/group-order/route-8bc5b680c5f3eae4.js +0 -1
  568. package/.next/static/chunks/app/api/skills/[id]/route-8bc5b680c5f3eae4.js +0 -1
  569. package/.next/static/chunks/app/api/skills/installations/route-8bc5b680c5f3eae4.js +0 -1
  570. package/.next/static/chunks/app/api/skills/operations/route-8bc5b680c5f3eae4.js +0 -1
  571. package/.next/static/chunks/app/api/skills/reindex/route-8bc5b680c5f3eae4.js +0 -1
  572. package/.next/static/chunks/app/api/skills/route-8bc5b680c5f3eae4.js +0 -1
  573. package/.next/static/chunks/app/api/slash-commands/route-8bc5b680c5f3eae4.js +0 -1
  574. package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
  575. package/.next/static/chunks/app/api/tasks/[taskId]/route-8bc5b680c5f3eae4.js +0 -1
  576. package/.next/static/chunks/app/api/templates/[id]/route-8bc5b680c5f3eae4.js +0 -1
  577. package/.next/static/chunks/app/api/templates/route-8bc5b680c5f3eae4.js +0 -1
  578. package/.next/static/chunks/app/api/todos/route-8bc5b680c5f3eae4.js +0 -1
  579. package/.next/static/chunks/app/api/verification/runs/[runId]/route-8bc5b680c5f3eae4.js +0 -1
  580. package/.next/static/chunks/app/api/verification/runs/route-8bc5b680c5f3eae4.js +0 -1
  581. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8bc5b680c5f3eae4.js +0 -1
  582. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8bc5b680c5f3eae4.js +0 -1
  583. package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-8bc5b680c5f3eae4.js +0 -1
  584. package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-8bc5b680c5f3eae4.js +0 -1
  585. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8bc5b680c5f3eae4.js +0 -1
  586. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8bc5b680c5f3eae4.js +0 -1
  587. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8bc5b680c5f3eae4.js +0 -1
  588. package/.next/static/chunks/app/api/worktrees/[id]/env/route-8bc5b680c5f3eae4.js +0 -1
  589. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8bc5b680c5f3eae4.js +0 -1
  590. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8bc5b680c5f3eae4.js +0 -1
  591. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8bc5b680c5f3eae4.js +0 -1
  592. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8bc5b680c5f3eae4.js +0 -1
  593. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8bc5b680c5f3eae4.js +0 -1
  594. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8bc5b680c5f3eae4.js +0 -1
  595. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8bc5b680c5f3eae4.js +0 -1
  596. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8bc5b680c5f3eae4.js +0 -1
  597. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8bc5b680c5f3eae4.js +0 -1
  598. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8bc5b680c5f3eae4.js +0 -1
  599. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8bc5b680c5f3eae4.js +0 -1
  600. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8bc5b680c5f3eae4.js +0 -1
  601. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8bc5b680c5f3eae4.js +0 -1
  602. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8bc5b680c5f3eae4.js +0 -1
  603. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8bc5b680c5f3eae4.js +0 -1
  604. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8bc5b680c5f3eae4.js +0 -1
  605. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8bc5b680c5f3eae4.js +0 -1
  606. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8bc5b680c5f3eae4.js +0 -1
  607. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8bc5b680c5f3eae4.js +0 -1
  608. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8bc5b680c5f3eae4.js +0 -1
  609. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8bc5b680c5f3eae4.js +0 -1
  610. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8bc5b680c5f3eae4.js +0 -1
  611. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8bc5b680c5f3eae4.js +0 -1
  612. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8bc5b680c5f3eae4.js +0 -1
  613. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8bc5b680c5f3eae4.js +0 -1
  614. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8bc5b680c5f3eae4.js +0 -1
  615. package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-8bc5b680c5f3eae4.js +0 -1
  616. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8bc5b680c5f3eae4.js +0 -1
  617. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8bc5b680c5f3eae4.js +0 -1
  618. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8bc5b680c5f3eae4.js +0 -1
  619. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8bc5b680c5f3eae4.js +0 -1
  620. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8bc5b680c5f3eae4.js +0 -1
  621. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8bc5b680c5f3eae4.js +0 -1
  622. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8bc5b680c5f3eae4.js +0 -1
  623. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8bc5b680c5f3eae4.js +0 -1
  624. package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-8bc5b680c5f3eae4.js +0 -1
  625. package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-8bc5b680c5f3eae4.js +0 -1
  626. package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-8bc5b680c5f3eae4.js +0 -1
  627. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8bc5b680c5f3eae4.js +0 -1
  628. package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-8bc5b680c5f3eae4.js +0 -1
  629. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8bc5b680c5f3eae4.js +0 -1
  630. package/.next/static/chunks/app/api/worktrees/[id]/route-8bc5b680c5f3eae4.js +0 -1
  631. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8bc5b680c5f3eae4.js +0 -1
  632. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8bc5b680c5f3eae4.js +0 -1
  633. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8bc5b680c5f3eae4.js +0 -1
  634. package/.next/static/chunks/app/api/worktrees/[id]/search/route-8bc5b680c5f3eae4.js +0 -1
  635. package/.next/static/chunks/app/api/worktrees/[id]/send/route-8bc5b680c5f3eae4.js +0 -1
  636. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8bc5b680c5f3eae4.js +0 -1
  637. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8bc5b680c5f3eae4.js +0 -1
  638. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8bc5b680c5f3eae4.js +0 -1
  639. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8bc5b680c5f3eae4.js +0 -1
  640. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8bc5b680c5f3eae4.js +0 -1
  641. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-8bc5b680c5f3eae4.js +0 -1
  642. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-8bc5b680c5f3eae4.js +0 -1
  643. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8bc5b680c5f3eae4.js +0 -1
  644. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8bc5b680c5f3eae4.js +0 -1
  645. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8bc5b680c5f3eae4.js +0 -1
  646. package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8bc5b680c5f3eae4.js +0 -1
  647. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8bc5b680c5f3eae4.js +0 -1
  648. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8bc5b680c5f3eae4.js +0 -1
  649. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8bc5b680c5f3eae4.js +0 -1
  650. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +0 -1
  651. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8bc5b680c5f3eae4.js +0 -1
  652. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8bc5b680c5f3eae4.js +0 -1
  653. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8bc5b680c5f3eae4.js +0 -1
  654. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8bc5b680c5f3eae4.js +0 -1
  655. package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-8bc5b680c5f3eae4.js +0 -1
  656. package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8bc5b680c5f3eae4.js +0 -1
  657. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
  658. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8bc5b680c5f3eae4.js +0 -1
  659. package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8bc5b680c5f3eae4.js +0 -1
  660. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8bc5b680c5f3eae4.js +0 -1
  661. package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-8bc5b680c5f3eae4.js +0 -1
  662. package/.next/static/chunks/app/api/worktrees/route-8bc5b680c5f3eae4.js +0 -1
  663. package/.next/static/chunks/app/manifest.webmanifest/route-8bc5b680c5f3eae4.js +0 -1
  664. package/.next/static/chunks/app/proxy/[...path]/route-8bc5b680c5f3eae4.js +0 -1
  665. package/.next/static/chunks/app/sessions/page-fa2d62f3e8436c69.js +0 -1
  666. package/.next/static/chunks/app/worktrees/[id]/layout-8bc5b680c5f3eae4.js +0 -1
  667. package/.next/static/chunks/app/worktrees/[id]/page-18a7d9374bd8c218.js +0 -1
  668. package/.next/static/css/fb455b4e308adbaa.css +0 -1
  669. /package/.next/static/{eVkZd6vpcQwyJIlbymCUg → 0a4qrU8WdUwQrlO4mfLMu}/_buildManifest.js +0 -0
  670. /package/.next/static/{eVkZd6vpcQwyJIlbymCUg → 0a4qrU8WdUwQrlO4mfLMu}/_ssgManifest.js +0 -0
@@ -17,7 +17,7 @@ const path_1 = __importDefault(require("path"));
17
17
  * Current schema version
18
18
  * Increment this when adding new migrations
19
19
  */
20
- exports.CURRENT_SCHEMA_VERSION = 60;
20
+ exports.CURRENT_SCHEMA_VERSION = 61;
21
21
  /**
22
22
  * Get current schema version from database
23
23
  */
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /**
3
+ * Migration v61: the one-line note an operator keeps beside a session (#2427).
4
+ *
5
+ * ## What a row is, and what it is emphatically not
6
+ *
7
+ * One row is a free-text reminder of what THIS session was last asked to do —
8
+ * "#2427 の DB 層", "レビュー待ち" — rewritten every time the operator hands the
9
+ * session a new instruction. It exists because a four-way split shows four
10
+ * terminals whose headers all read `claude`, and the pane that is three
11
+ * scrollbacks deep gives no answer to "which one was doing the migration".
12
+ *
13
+ * It is **not** an alias. `agent_instances.alias` is a *resolution key*: since
14
+ * Issue #2376 `--instance レビュー担当` finds the roster row whose alias matches,
15
+ * so an alias is a name the routing layer reads. A note is read by human eyes
16
+ * only, and nothing in `resolveInstanceSelector` (the `/resolve-target` route)
17
+ * or in `resolveInstanceCliTool` looks at this table. That separation is the
18
+ * point of storing it apart from the roster rather than widening the alias: a
19
+ * memo the operator rewrites hourly must never be able to change where the next
20
+ * `send` lands.
21
+ *
22
+ * ## Why a table of its own rather than a column on `agent_instances`
23
+ *
24
+ * The reason v59 gives, unchanged: `setAgentInstances` is a full REPLACE —
25
+ * `PATCH /api/worktrees/[id]` posts the whole roster and the write deletes every
26
+ * row for the worktree and re-inserts from the payload, which is
27
+ * `AgentInstance[]` (id, tool, alias, order) and nothing else. A `note` column
28
+ * there would be silently emptied every time somebody renamed an instance or
29
+ * dragged one up the list — i.e. by the two operations most likely to happen
30
+ * while a note is worth keeping. A separate table survives the replace, and
31
+ * `pruneSessionNotes` removes the rows whose instance genuinely went away.
32
+ *
33
+ * It also keeps `AgentInstance` — which is the roster PATCH's *input* shape, not
34
+ * merely its output — free of a field the writer would have to echo back to
35
+ * avoid erasing it.
36
+ *
37
+ * ## Column notes
38
+ *
39
+ * - **`note` is NOT NULL and a row means a note exists.** Clearing the text
40
+ * deletes the row (see `setSessionNote`) rather than storing `''`: an empty
41
+ * note and no note are indistinguishable to every reader, and the delete keeps
42
+ * the table to the sessions somebody actually annotated. That is also what
43
+ * makes "the note is empty" renderable as *absence* in the split header, which
44
+ * the Issue asks for.
45
+ * - **`updated_at` is displayed, not just bookkeeping.** The Issue's acceptance
46
+ * condition is that the note carries the time it was written, so the column is
47
+ * part of the payload rather than an audit field. Epoch milliseconds, matching
48
+ * v44 onward.
49
+ * - **`worktree_id` is spelled conventionally** so `getWorktreeChildTables()`
50
+ * finds it by introspection: the row then follows a worktree id rename
51
+ * (v54/v55) and is swept when the worktree is deleted, which is exactly as
52
+ * long as a note about one of that worktree's sessions can mean anything.
53
+ *
54
+ * The primary key is `(worktree_id, instance_id)` — the identity
55
+ * `agent_instances` uses and the identity a note is about. `cli_tool_id` is
56
+ * deliberately absent for v59's reason: an instance id belongs to one tool by
57
+ * construction (`resolveInstanceCliTool`), so a composite including it would let
58
+ * one session hold two contradictory notes.
59
+ *
60
+ * The rollback drops the table, which is the whole of what this migration adds.
61
+ */
62
+ Object.defineProperty(exports, "__esModule", { value: true });
63
+ exports.v61_migrations = void 0;
64
+ exports.v61_migrations = [
65
+ {
66
+ version: 61,
67
+ name: 'session-notes',
68
+ up: (db) => {
69
+ db.exec(`
70
+ CREATE TABLE IF NOT EXISTS session_notes (
71
+ worktree_id TEXT NOT NULL,
72
+ instance_id TEXT NOT NULL,
73
+ note TEXT NOT NULL,
74
+ updated_at INTEGER NOT NULL,
75
+
76
+ PRIMARY KEY (worktree_id, instance_id),
77
+ FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
78
+ );
79
+ `);
80
+ },
81
+ down: (db) => {
82
+ db.exec('DROP TABLE IF EXISTS session_notes;');
83
+ },
84
+ },
85
+ ];
@@ -91,7 +91,7 @@ var __importStar = (this && this.__importStar) || (function () {
91
91
  };
92
92
  })();
93
93
  Object.defineProperty(exports, "__esModule", { value: true });
94
- exports.ANTIGRAVITY_CLI_HOME_SEGMENTS = exports.ANTIGRAVITY_TRANSCRIPT_TAIL_BYTES = void 0;
94
+ exports.ANTIGRAVITY_TURN_RECHECK_LIMIT = exports.ANTIGRAVITY_CLI_HOME_SEGMENTS = exports.ANTIGRAVITY_TRANSCRIPT_TAIL_BYTES = void 0;
95
95
  exports.resetAntigravityTranscriptConversations = resetAntigravityTranscriptConversations;
96
96
  exports.resolveAntigravityConversationId = resolveAntigravityConversationId;
97
97
  exports.resolveAntigravityHome = resolveAntigravityHome;
@@ -106,6 +106,7 @@ const path_1 = require("path");
106
106
  const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
107
107
  const transcript_tail_1 = require("../../../../lib/history/transcript-tail");
108
108
  const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder");
109
+ const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
109
110
  const logger_1 = require("../../../../lib/logger");
110
111
  const agent_transcript_1 = require("../../../../types/agent-transcript");
111
112
  const transcript_1 = require("./transcript");
@@ -288,11 +289,29 @@ function acceptAntigravityTranscriptPath(agyHome, candidate) {
288
289
  *
289
290
  * Never throws.
290
291
  *
292
+ * **A row this reader wrote is not final (Issue #2438).** Before anything is
293
+ * written, the newest already-written turns — at most
294
+ * {@link ANTIGRAVITY_TURN_RECHECK_LIMIT} of them — are re-rendered and compared
295
+ * against the rows they produced, and a row whose turn now renders *strictly
296
+ * longer* is replaced in place. agy has no record that closes a turn, so an
297
+ * interim report reads as a finished answer (`isAntigravityTurnClosingRecord`)
298
+ * and used to freeze a half-written reply into History forever. That is a
299
+ * repair and not a second verdict: growing an older row changes neither the
300
+ * return value nor `report`, both of which are about the **newest** turn.
301
+ *
302
+ * Since Issue #2436 the false can explain itself: pass a
303
+ * `StructuredHistoryCaptureReport` and `outcome` is set to `'not_yet_closed'`
304
+ * when the newest turn is one the agent has not finished writing — the case the
305
+ * `-turn-open` line below reports, and the one where the caller's scraped copy
306
+ * is worth holding rather than saving. Every other false leaves it unset, which
307
+ * the gate reads as `'unavailable'`.
308
+ *
291
309
  * @param target - The instance whose turn just ended
292
310
  * @param capture - See {@link AntigravityTranscriptCapture}
311
+ * @param report - Optional out-parameter; see `StructuredHistoryCaptureReport`
293
312
  * @returns Whether History now holds this turn as the agent's own Markdown
294
313
  */
295
- async function captureAntigravityTranscriptTurn(target, capture = {}) {
314
+ async function captureAntigravityTranscriptTurn(target, capture = {}, report) {
296
315
  const instanceId = target.instanceId ?? target.cliToolId;
297
316
  try {
298
317
  const agyHome = capture.antigravityHome ?? resolveAntigravityHome();
@@ -348,12 +367,26 @@ async function captureAntigravityTranscriptTurn(target, capture = {}) {
348
367
  });
349
368
  }
350
369
  const pending = await selectUnwrittenAntigravityTurns(target, built.turns);
370
+ // Before anything is written: the rows that are already there (#2438). This
371
+ // is deliberately ahead of the early return below, because "the newest turn
372
+ // is already a row" is exactly the state the frozen row the Issue measured
373
+ // was stuck in — agy said "waiting for the worker", the writer saved that,
374
+ // and every later read answered true and did nothing while the conclusion
375
+ // sat in the transcript beside it. Written turns are re-checked whether or
376
+ // not anything is pending, so an old turn can be repaired in the same pass
377
+ // that writes a new one.
378
+ await refreshAntigravityTurnRows(target, built.turns
379
+ .slice(0, built.turns.length - pending.turns.length)
380
+ .slice(-exports.ANTIGRAVITY_TURN_RECHECK_LIMIT), path);
351
381
  if (pending.turns.length === 0) {
352
382
  logger.debug('antigravity-transcript-turns-already-saved', {
353
383
  worktreeId: target.worktreeId,
354
384
  instanceId,
355
385
  turnsInWindow: built.turns.length,
356
386
  });
387
+ // Issue #2437: this turn is already History's Markdown, so the pane rows
388
+ // behind it must stop being "unsaved output" the pre-send flush can pick up.
389
+ await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
357
390
  return true;
358
391
  }
359
392
  if (pending.turns.length > 1) {
@@ -380,7 +413,14 @@ async function captureAntigravityTranscriptTurn(target, capture = {}) {
380
413
  let captured = false;
381
414
  for (let index = 0; index < pending.turns.length; index += 1) {
382
415
  const turn = pending.turns[index];
383
- captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastAntigravityRecordAt(turn), nextTurnOpensAt(pending.turns, userRows, index)), path);
416
+ captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastAntigravityRecordAt(turn), nextTurnOpensAt(pending.turns, userRows, index)), path, report);
417
+ }
418
+ if (captured) {
419
+ // Issue #2437: History now holds this turn as the agent's own Markdown.
420
+ // Park the pre-send flush's cursor past the pane rows it covers, or a
421
+ // `/send` arriving before the next poll tick saves the whole finished turn
422
+ // a second time.
423
+ await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
384
424
  }
385
425
  return captured;
386
426
  }
@@ -577,6 +617,137 @@ function nextTurnOpensAt(turns, userRows, index) {
577
617
  return null;
578
618
  return userRows[index + 1]?.timestampMs ?? next.startedAt;
579
619
  }
620
+ /**
621
+ * How many already-written turns are re-rendered and compared (Issue #2438).
622
+ *
623
+ * The repair half of #2438 has to look at rows this reader has **already**
624
+ * written, which is the one thing the anchor rule of
625
+ * {@link selectUnwrittenAntigravityTurns} deliberately does not do — so it is
626
+ * bounded here rather than by the read window. Three, the number claude and
627
+ * command-code settled on in #2264 and for the same arithmetic: the poller runs
628
+ * every couple of seconds, re-rendering the whole window on every tick would
629
+ * make a repair the most expensive thing the poll does, and a turn that is going
630
+ * to grow grows within seconds of being written.
631
+ *
632
+ * The cost of the bound is paid by rows a session has already moved three turns
633
+ * past: those keep whatever they were written with. The measured case — one
634
+ * conversation whose only turn was `#0` — is inside it by a wide margin.
635
+ */
636
+ exports.ANTIGRAVITY_TURN_RECHECK_LIMIT = 3;
637
+ /**
638
+ * Replace a saved row whose body has since grown (Issue #2438).
639
+ *
640
+ * The defect this exists for is not that the wrong body was written; it is that
641
+ * the row was written **early**. `isAntigravityTurnClosingRecord` reads prose
642
+ * with no `tool_calls` as agy finishing, and an interim report — "waiting for
643
+ * the worker" — has exactly that shape. The row is keyed
644
+ * `antigravity-turn:<conversationId>#<stepIndex>`, so once it exists every later
645
+ * read finds it, answers "already saved", and the gate suppresses the scrape
646
+ * that could have carried the conclusion instead. Nothing else in the system
647
+ * ever revisits that row.
648
+ *
649
+ * **Strictly longer, never merely different.** Equality is the ordinary case and
650
+ * must cost nothing, and a body that got *shorter* between two reads is not a
651
+ * turn that grew — it is a window that slid, or a truncation marker, and
652
+ * overwriting a full reply with a shorter one is the one outcome worse than the
653
+ * bug. Longer implies different, so one comparison covers both.
654
+ *
655
+ * Only `content` moves. The row's `id`, `request_id`, `timestamp`, worktree,
656
+ * tool and instance are what History sorts and pairs on, and a repair that
657
+ * disturbed any of them would move an old answer to the bottom of the
658
+ * conversation.
659
+ *
660
+ * `message_updated`, never `message`: the row already existed and was already
661
+ * delivered when it was created, so a client that appended instead of replacing
662
+ * would show the reply twice.
663
+ *
664
+ * @param existing - The row `findMessageByRequestId` answered with
665
+ * @returns Whether the row was replaced
666
+ */
667
+ async function growAntigravityTurnRow(target, existing, rendered, path) {
668
+ const instanceId = target.instanceId ?? target.cliToolId;
669
+ // The stored body is the only evidence of what History holds, so a row that
670
+ // carries none is not evidence that anything grew. Same answer as "not
671
+ // longer": leave it alone. This runs inside the poller's save path, where the
672
+ // module contract is that nothing throws.
673
+ const previous = existing.content;
674
+ if (typeof previous !== 'string')
675
+ return false;
676
+ const previousLength = previous.length;
677
+ if (rendered.body.length <= previousLength)
678
+ return false;
679
+ const [{ getDbInstance }, { updateMessageContent }, { broadcastMessage }] = await Promise.all([
680
+ Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
681
+ Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
682
+ Promise.resolve().then(() => __importStar(require('../../../../lib/ws-server'))),
683
+ ]);
684
+ updateMessageContent(getDbInstance(), existing.id, rendered.body);
685
+ broadcastMessage('message_updated', {
686
+ worktreeId: target.worktreeId,
687
+ message: { ...existing, content: rendered.body },
688
+ });
689
+ logger.info('antigravity-transcript-turn-updated', {
690
+ worktreeId: target.worktreeId,
691
+ instanceId,
692
+ conversationId: rendered.conversationId,
693
+ stepIndex: rendered.stepIndex,
694
+ requestId: existing.requestId,
695
+ path,
696
+ previousLength,
697
+ bodyLength: rendered.body.length,
698
+ textBlocks: rendered.textBlocks,
699
+ toolBlocks: rendered.toolBlocks,
700
+ });
701
+ return true;
702
+ }
703
+ /**
704
+ * Re-read the newest already-written turns and grow the short ones (#2438).
705
+ *
706
+ * Runs before the pending turns are written and independently of whether there
707
+ * are any — the case it exists for is precisely the one
708
+ * {@link captureAntigravityTranscriptTurn} used to return `true` from without
709
+ * doing anything: the newest turn already has a row, and that row stopped at
710
+ * agy's interim report.
711
+ *
712
+ * Turns that are open again are skipped rather than compared. A turn whose last
713
+ * record is a `tool_calls` is one agy is still working through, its body is by
714
+ * definition not the final one, and a repair that raced the agent would rewrite
715
+ * the row on every poll of a long turn. **This is not a second chance to write
716
+ * a turn**: a candidate with no row is left alone, because the anchor rule
717
+ * already decided it is not this pass's to create.
718
+ *
719
+ * The database is asked before the turn is rendered, so a candidate with no row
720
+ * — every candidate, in a session this reader has never written to — costs one
721
+ * indexed lookup and no Markdown.
722
+ *
723
+ * Serialisation is the gate's, per instance: this adds no loop and no timer of
724
+ * its own, it is one more thing the poll's existing pass does.
725
+ *
726
+ * @param candidates - Already-written turns, oldest first, at most
727
+ * {@link ANTIGRAVITY_TURN_RECHECK_LIMIT}
728
+ * @returns How many rows were replaced
729
+ */
730
+ async function refreshAntigravityTurnRows(target, candidates, path) {
731
+ if (candidates.length === 0)
732
+ return 0;
733
+ const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
734
+ Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
735
+ Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
736
+ ]);
737
+ const db = getDbInstance();
738
+ let updated = 0;
739
+ for (const turn of candidates) {
740
+ if (!(0, transcript_1.isAntigravityTurnWritable)(turn))
741
+ continue;
742
+ const existing = findMessageByRequestId(db, target.worktreeId, (0, agent_transcript_1.antigravityTurnRequestId)(turn.conversationId, turn.stepIndex));
743
+ if (!existing)
744
+ continue;
745
+ if (await growAntigravityTurnRow(target, existing, (0, transcript_1.renderAntigravityTurn)(turn), path)) {
746
+ updated += 1;
747
+ }
748
+ }
749
+ return updated;
750
+ }
580
751
  /**
581
752
  * Write one rendered turn, unless it is already there.
582
753
  *
@@ -587,20 +758,36 @@ function nextTurnOpensAt(turns, userRows, index) {
587
758
  * Answering **true** for a turn that was already saved is deliberate. It means
588
759
  * "History holds this turn as Markdown", which is what the poller needs to know
589
760
  * — a second poll of the same finished turn must not save the pane's copy on top
590
- * of the row this path wrote.
761
+ * of the row this path wrote. Since #2438 that row is no longer left as it was
762
+ * found: it is the same comparison {@link growAntigravityTurnRow} makes for the
763
+ * turns the recheck window covers, made here where both the row and the turn
764
+ * are already in hand.
591
765
  *
592
766
  * @returns Whether History holds this turn as the agent's own Markdown
593
767
  */
594
- async function writeAntigravityTurn(target, turn, rendered, timestampMs, path) {
768
+ async function writeAntigravityTurn(target, turn, rendered, timestampMs, path, report) {
595
769
  const instanceId = target.instanceId ?? target.cliToolId;
770
+ // Issue #2436: the caller's report is about the turn THIS call is deciding.
771
+ // The loop above walks oldest-first, so a verdict left by an earlier turn has
772
+ // to be cleared before this one's is written.
773
+ if (report)
774
+ report.outcome = undefined;
596
775
  if (!(0, transcript_1.isAntigravityTurnWritable)(turn)) {
597
776
  // agy has not finished this answer and no later prompt has taken over, so
598
777
  // what is in the file is a turn in progress. Writing it would put a reply
599
- // with its last paragraph missing into History permanently — the row is
600
- // keyed on `(conversationId, step_index)`, so every later read finds it and
601
- // answers "already saved". That is Issue #2264, reported against claude and
778
+ // with its last paragraph missing into History — the row is keyed on
779
+ // `(conversationId, step_index)`, so every later read finds it and answers
780
+ // "already saved". That is Issue #2264, reported against claude and
602
781
  // structurally identical here: a turn cut off after its `tool_calls` renders
603
782
  // a *non-empty* body, so the emptiness guard below cannot see it.
783
+ //
784
+ // #2438 made such a row repairable rather than making it acceptable: a
785
+ // short row only grows while its turn is still among the newest
786
+ // {@link ANTIGRAVITY_TURN_RECHECK_LIMIT}, and nothing at all rewinds what a
787
+ // relay already delivered from it. Not writing it in the first place is
788
+ // still the fix; the repair is the second line.
789
+ if (report)
790
+ report.outcome = 'not_yet_closed';
604
791
  logger.info('antigravity-transcript-turn-open', {
605
792
  worktreeId: target.worktreeId,
606
793
  instanceId,
@@ -654,12 +841,20 @@ async function writeAntigravityTurn(target, turn, rendered, timestampMs, path) {
654
841
  Promise.resolve().then(() => __importStar(require('../../../../lib/ws-server'))),
655
842
  ]);
656
843
  const db = getDbInstance();
657
- if (findMessageByRequestId(db, target.worktreeId, requestId)) {
844
+ const existing = findMessageByRequestId(db, target.worktreeId, requestId);
845
+ if (existing) {
658
846
  logger.debug('antigravity-transcript-turn-already-saved', {
659
847
  worktreeId: target.worktreeId,
660
848
  instanceId,
661
849
  requestId,
662
850
  });
851
+ // The row may be one of the ones #2438 was reported for — saved at agy's
852
+ // interim report — and this is the one place that holds both the row and
853
+ // the turn. The comparison and the notification are not repeated here; see
854
+ // {@link growAntigravityTurnRow}. The verdict is unchanged: History holds
855
+ // this turn either way, and `report.outcome` is about this turn's
856
+ // completeness rather than about an edit.
857
+ await growAntigravityTurnRow(target, existing, rendered, path);
663
858
  return true;
664
859
  }
665
860
  const message = createMessage(db, {
@@ -104,6 +104,7 @@ const os_1 = require("os");
104
104
  const path_1 = require("path");
105
105
  const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
106
106
  const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder");
107
+ const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
107
108
  const logger_1 = require("../../../../lib/logger");
108
109
  const agent_transcript_1 = require("../../../../types/agent-transcript");
109
110
  const transcript_1 = require("./transcript");
@@ -266,10 +267,18 @@ function acceptClaudeTranscriptHint(homeDir, hint) {
266
267
  *
267
268
  * Never throws.
268
269
  *
270
+ * Since Issue #2436 the false can explain itself: pass a
271
+ * `StructuredHistoryCaptureReport` and `outcome` is set to `'not_yet_closed'`
272
+ * when the newest turn is one the agent has not finished writing — the case the
273
+ * `-turn-open` line below reports, and the one where the caller's scraped copy
274
+ * is worth holding rather than saving. Every other false leaves it unset, which
275
+ * the gate reads as `'unavailable'`.
276
+ *
269
277
  * @param target - The instance whose turn just ended
278
+ * @param report - Optional out-parameter; see `StructuredHistoryCaptureReport`
270
279
  * @returns Whether History now holds this instance's newest turn as Markdown
271
280
  */
272
- async function captureClaudeTranscriptTurn(target, capture) {
281
+ async function captureClaudeTranscriptTurn(target, capture, report) {
273
282
  const instanceId = target.instanceId ?? target.cliToolId;
274
283
  try {
275
284
  const homeDir = capture.homeDir ?? (0, os_1.homedir)();
@@ -340,6 +349,9 @@ async function captureClaudeTranscriptTurn(target, capture) {
340
349
  instanceId,
341
350
  turnsInWindow: built.turns.length,
342
351
  });
352
+ // Issue #2437: this turn is already History's Markdown, so the pane rows
353
+ // behind it must stop being "unsaved output" the pre-send flush can pick up.
354
+ await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
343
355
  return true;
344
356
  }
345
357
  if (pending.turns.length > 1) {
@@ -374,7 +386,14 @@ async function captureClaudeTranscriptTurn(target, capture) {
374
386
  let captured = false;
375
387
  for (let index = 0; index < pending.turns.length; index += 1) {
376
388
  const turn = pending.turns[index];
377
- 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);
389
+ 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);
390
+ }
391
+ if (captured) {
392
+ // Issue #2437: History now holds this turn as the agent's own Markdown.
393
+ // Park the pre-send flush's cursor past the pane rows it covers, or a
394
+ // `/send` arriving before the next poll tick saves the whole finished turn
395
+ // a second time.
396
+ await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
378
397
  }
379
398
  return captured;
380
399
  }
@@ -925,8 +944,13 @@ async function refreshClaudeTurnRows(target, candidates, path) {
925
944
  *
926
945
  * @returns Whether History holds this turn as the agent's own Markdown
927
946
  */
928
- async function writeClaudeTurn(target, turn, rendered, timestampMs, path) {
947
+ async function writeClaudeTurn(target, turn, rendered, timestampMs, path, report) {
929
948
  const instanceId = target.instanceId ?? target.cliToolId;
949
+ // Issue #2436: the caller's report is about the turn THIS call is deciding.
950
+ // The loop above walks oldest-first, so a verdict left by an earlier turn has
951
+ // to be cleared before this one's is written.
952
+ if (report)
953
+ report.outcome = undefined;
930
954
  if (!(0, transcript_1.isClaudeTurnWritable)(turn)) {
931
955
  // The agent has not said `end_turn` for this prompt and no later prompt has
932
956
  // taken over, so what is in the file is a turn in progress. Writing it would
@@ -941,6 +965,8 @@ async function writeClaudeTurn(target, turn, rendered, timestampMs, path) {
941
965
  // Handing it back to the scraper costs the Markdown rendering for this turn
942
966
  // and nothing else: the Stop receiver asks again after a short delay, and
943
967
  // the poller asks again when the pane returns to the composer.
968
+ if (report)
969
+ report.outcome = 'not_yet_closed';
944
970
  logger.info('claude-transcript-turn-open', {
945
971
  worktreeId: target.worktreeId,
946
972
  instanceId,
@@ -101,6 +101,7 @@ const path_1 = require("path");
101
101
  const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
102
102
  const transcript_tail_1 = require("../../../../lib/history/transcript-tail");
103
103
  const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder");
104
+ const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
104
105
  const logger_1 = require("../../../../lib/logger");
105
106
  const agent_transcript_1 = require("../../../../types/agent-transcript");
106
107
  const transcript_1 = require("./transcript");
@@ -332,11 +333,19 @@ async function scanForRollout(dir, sessionId, depth) {
332
333
  *
333
334
  * Never throws.
334
335
  *
336
+ * Since Issue #2436 the false can explain itself: pass a
337
+ * `StructuredHistoryCaptureReport` and `outcome` is set to `'not_yet_closed'`
338
+ * when the newest turn is one the agent has not finished writing — the case the
339
+ * `-turn-open` line below reports, and the one where the caller's scraped copy
340
+ * is worth holding rather than saving. Every other false leaves it unset, which
341
+ * the gate reads as `'unavailable'`.
342
+ *
335
343
  * @param target - The instance whose turn just ended
336
344
  * @param capture - See {@link CodexTranscriptCapture}
345
+ * @param report - Optional out-parameter; see `StructuredHistoryCaptureReport`
337
346
  * @returns Whether History now holds this turn as the agent's own Markdown
338
347
  */
339
- async function captureCodexTranscriptTurn(target, capture = {}) {
348
+ async function captureCodexTranscriptTurn(target, capture = {}, report) {
340
349
  const instanceId = target.instanceId ?? target.cliToolId;
341
350
  try {
342
351
  const codexHome = capture.codexHome ?? resolveCodexHome();
@@ -395,6 +404,9 @@ async function captureCodexTranscriptTurn(target, capture = {}) {
395
404
  instanceId,
396
405
  turnsInWindow: built.turns.length,
397
406
  });
407
+ // Issue #2437: this turn is already History's Markdown, so the pane rows
408
+ // behind it must stop being "unsaved output" the pre-send flush can pick up.
409
+ await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
398
410
  return true;
399
411
  }
400
412
  if (pending.turns.length > 1) {
@@ -428,7 +440,14 @@ async function captureCodexTranscriptTurn(target, capture = {}) {
428
440
  let captured = false;
429
441
  for (let index = 0; index < pending.turns.length; index += 1) {
430
442
  const turn = pending.turns[index];
431
- captured = await writeCodexTurn(target, turn, (0, transcript_1.renderCodexTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.turnId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), windowFacts);
443
+ captured = await writeCodexTurn(target, turn, (0, transcript_1.renderCodexTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.turnId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), windowFacts, report);
444
+ }
445
+ if (captured) {
446
+ // Issue #2437: History now holds this turn as the agent's own Markdown.
447
+ // Park the pre-send flush's cursor past the pane rows it covers, or a
448
+ // `/send` arriving before the next poll tick saves the whole finished turn
449
+ // a second time.
450
+ await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
432
451
  }
433
452
  return captured;
434
453
  }
@@ -670,14 +689,21 @@ function nextTurnOpensAt(turns, userRows, index) {
670
689
  *
671
690
  * @returns Whether History holds this turn as the agent's own Markdown
672
691
  */
673
- async function writeCodexTurn(target, turn, rendered, timestampMs, windowFacts) {
692
+ async function writeCodexTurn(target, turn, rendered, timestampMs, windowFacts, report) {
674
693
  const instanceId = target.instanceId ?? target.cliToolId;
694
+ // Issue #2436: the caller's report is about the turn THIS call is deciding.
695
+ // The loop above walks oldest-first, so a verdict left by an earlier turn has
696
+ // to be cleared before this one's is written.
697
+ if (report)
698
+ report.outcome = undefined;
675
699
  if (!turn.closed) {
676
700
  // codex has not written the `task_complete` for this `turn_id` yet, so what
677
701
  // is in the file is a turn in progress. Writing it would put a truncated
678
702
  // reply in History permanently — and unlike an empty one, a truncated one
679
703
  // looks finished. Handing it back to the scraper costs the Markdown
680
704
  // rendering for this turn and nothing else.
705
+ if (report)
706
+ report.outcome = 'not_yet_closed';
681
707
  logger.info('codex-transcript-turn-open', {
682
708
  worktreeId: target.worktreeId,
683
709
  instanceId,
@@ -135,6 +135,7 @@ const path_1 = require("path");
135
135
  const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
136
136
  const transcript_tail_1 = require("../../../../lib/history/transcript-tail");
137
137
  const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder");
138
+ const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
138
139
  const logger_1 = require("../../../../lib/logger");
139
140
  const agent_transcript_1 = require("../../../../types/agent-transcript");
140
141
  const transcript_1 = require("./transcript");
@@ -325,10 +326,18 @@ async function findCommandCodeTranscriptPath(homeDir, sessionId) {
325
326
  *
326
327
  * Never throws.
327
328
  *
329
+ * Since Issue #2436 the false can explain itself: pass a
330
+ * `StructuredHistoryCaptureReport` and `outcome` is set to `'not_yet_closed'`
331
+ * when the newest turn is one the agent has not finished writing — the case the
332
+ * `-turn-open` line below reports, and the one where the caller's scraped copy
333
+ * is worth holding rather than saving. Every other false leaves it unset, which
334
+ * the gate reads as `'unavailable'`.
335
+ *
328
336
  * @param target - The instance whose turn just ended
337
+ * @param report - Optional out-parameter; see `StructuredHistoryCaptureReport`
329
338
  * @returns Whether History now holds this instance's newest turn as Markdown
330
339
  */
331
- async function captureCommandCodeTranscriptTurn(target, capture) {
340
+ async function captureCommandCodeTranscriptTurn(target, capture, report) {
332
341
  const instanceId = target.instanceId ?? target.cliToolId;
333
342
  try {
334
343
  const homeDir = capture.commandCodeHome ?? (0, os_1.homedir)();
@@ -394,6 +403,9 @@ async function captureCommandCodeTranscriptTurn(target, capture) {
394
403
  instanceId,
395
404
  turnsInWindow: built.turns.length,
396
405
  });
406
+ // Issue #2437: this turn is already History's Markdown, so the pane rows
407
+ // behind it must stop being "unsaved output" the pre-send flush can pick up.
408
+ await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
397
409
  return true;
398
410
  }
399
411
  if (pending.turns.length > 1) {
@@ -426,7 +438,14 @@ async function captureCommandCodeTranscriptTurn(target, capture) {
426
438
  let captured = false;
427
439
  for (let index = 0; index < pending.turns.length; index += 1) {
428
440
  const turn = pending.turns[index];
429
- captured = await writeCommandCodeTurn(target, turn, (0, transcript_1.renderCommandCodeTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.promptId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), path);
441
+ captured = await writeCommandCodeTurn(target, turn, (0, transcript_1.renderCommandCodeTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.promptId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), path, report);
442
+ }
443
+ if (captured) {
444
+ // Issue #2437: History now holds this turn as the agent's own Markdown.
445
+ // Park the pre-send flush's cursor past the pane rows it covers, or a
446
+ // `/send` arriving before the next poll tick saves the whole finished turn
447
+ // a second time.
448
+ await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
430
449
  }
431
450
  return captured;
432
451
  }
@@ -773,8 +792,13 @@ async function refreshCommandCodeTurnRows(target, candidates, path) {
773
792
  *
774
793
  * @returns Whether History holds this turn as the agent's own Markdown
775
794
  */
776
- async function writeCommandCodeTurn(target, turn, rendered, timestampMs, path) {
795
+ async function writeCommandCodeTurn(target, turn, rendered, timestampMs, path, report) {
777
796
  const instanceId = target.instanceId ?? target.cliToolId;
797
+ // Issue #2436: the caller's report is about the turn THIS call is deciding.
798
+ // The loop above walks oldest-first, so a verdict left by an earlier turn has
799
+ // to be cleared before this one's is written.
800
+ if (report)
801
+ report.outcome = undefined;
778
802
  if (!(0, transcript_1.isCommandCodeTurnWritable)(turn)) {
779
803
  // The agent's last word in this turn reached for a tool and no later prompt
780
804
  // has taken over, so what is in the file is a turn in progress. Writing it
@@ -789,6 +813,8 @@ async function writeCommandCodeTurn(target, turn, rendered, timestampMs, path) {
789
813
  // Handing it back to the scraper costs the Markdown rendering for this turn
790
814
  // and nothing else: the Stop receiver asks again after a short delay, and
791
815
  // the poller asks again when the pane returns to the composer.
816
+ if (report)
817
+ report.outcome = 'not_yet_closed';
792
818
  logger.info('command-code-transcript-turn-open', {
793
819
  worktreeId: target.worktreeId,
794
820
  instanceId,