commandmate 0.47.0 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +501 -501
  3. package/.next/app-path-routes-manifest.json +34 -34
  4. package/.next/build-manifest.json +8 -8
  5. package/.next/diagnostics/framework.json +1 -1
  6. package/.next/next-minimal-server.js.nft.json +1 -1
  7. package/.next/next-server.js.nft.json +1 -1
  8. package/.next/prerender-manifest.json +12 -12
  9. package/.next/react-loadable-manifest.json +1 -1
  10. package/.next/required-server-files.json +1 -1
  11. package/.next/server/app/_not-found/page.js +2 -2
  12. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/agents/update/route.js +2 -2
  15. package/.next/server/app/api/agents/update/route.js.nft.json +1 -1
  16. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/agents/versions/route.js +1 -1
  18. package/.next/server/app/api/agents/versions/route.js.nft.json +1 -1
  19. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/app/release-notes/route.js +1 -1
  21. package/.next/server/app/api/app/release-notes/route.js.nft.json +1 -1
  22. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/app/update/route.js +5 -5
  24. package/.next/server/app/api/app/update/route.js.nft.json +1 -1
  25. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/app/update-check/route.js +1 -1
  27. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
  28. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/auth/login/route.js +1 -1
  30. package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  31. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/auth/logout/route.js +1 -1
  33. package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  34. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/status/route.js +1 -1
  36. package/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  37. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/capabilities/route.js +1 -1
  39. package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
  40. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/daily-summary/route.js +1 -1
  42. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  43. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  45. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  46. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  48. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  49. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  51. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  52. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/external-apps/route.js +1 -1
  54. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  55. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/fs/browse/route.js +1 -1
  57. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
  58. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/fs/recent-paths/route.js +1 -1
  60. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
  61. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  63. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  64. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  66. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  67. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  69. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  70. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/metrics/vibe/route.js +2 -2
  72. package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
  73. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/ollama/models/route.js +1 -1
  75. package/.next/server/app/api/ollama/models/route.js.nft.json +1 -1
  76. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/push/escalation/route.js +1 -1
  78. package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
  79. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  81. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  82. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/push/vapid/route.js +1 -1
  84. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  85. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  87. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  88. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/relays/route.js +1 -1
  90. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  91. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/remote/pair/route.js +2 -2
  93. package/.next/server/app/api/remote/pair/route.js.nft.json +1 -1
  94. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  96. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  97. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  99. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  100. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/repositories/clone/route.js +1 -1
  102. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  103. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  105. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  106. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/repositories/restore/route.js +1 -1
  108. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  109. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/repositories/route.js +1 -1
  111. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  112. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/repositories/scan/route.js +1 -1
  114. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  115. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/repositories/sync/route.js +1 -1
  117. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  118. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/repositories/validate-path/route.js +1 -1
  120. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
  121. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  123. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  124. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/settings/default-surface-mode/route.js +1 -1
  126. package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -1
  127. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  129. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  130. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/skills/[id]/route.js +1 -1
  132. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  133. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/skills/installations/route.js +1 -1
  135. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  136. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/skills/operations/route.js +2 -2
  138. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
  139. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/skills/reindex/route.js +1 -1
  141. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
  142. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/skills/route.js +1 -1
  144. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  145. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/slash-commands/route.js +1 -1
  147. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  148. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/tasks/[taskId]/cancel/route.js +1 -1
  150. package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  151. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  153. package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
  154. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/templates/[id]/route.js +1 -1
  156. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  157. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/templates/route.js +1 -1
  159. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  160. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  162. package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
  163. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/verification/runs/route.js +1 -1
  165. package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
  166. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  169. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  175. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -1
  178. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  181. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +7 -7
  183. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/env/route.js +2 -2
  192. package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +3 -3
  198. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  229. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  232. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  235. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  238. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  244. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  247. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  250. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  253. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  256. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  259. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  262. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  268. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  271. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js.nft.json +1 -1
  274. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  275. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  276. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  277. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  278. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  280. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  281. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  283. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  284. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  286. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  287. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  289. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  290. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
  291. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  292. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  293. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  295. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  296. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  298. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  299. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  301. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  302. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
  304. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  305. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  307. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  308. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  310. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  311. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  313. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  314. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  316. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  317. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
  319. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  320. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  322. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  323. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  325. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  326. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  327. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  328. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  329. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  330. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  331. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  332. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  333. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  334. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  335. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  336. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  337. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  338. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  339. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  340. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  341. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +5 -5
  342. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  343. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  344. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  345. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  346. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  347. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  348. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  349. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  350. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  351. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  352. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  353. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  354. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  355. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  356. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
  357. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
  358. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  359. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  360. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  361. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  362. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  363. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  364. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  365. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  366. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  367. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  368. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  369. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  370. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  371. package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
  372. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  373. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  374. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -103
  375. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  376. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  377. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  378. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  379. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  380. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  381. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  382. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  383. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  384. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  385. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  386. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  387. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  388. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  389. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  390. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  391. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  392. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  393. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  394. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  395. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  396. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  397. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  398. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +2 -2
  399. package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -1
  400. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  401. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  402. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  403. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  404. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  405. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  406. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  407. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  408. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
  409. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  410. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  411. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
  412. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  413. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  414. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  415. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  416. package/.next/server/app/api/worktrees/apply-default-agents/route.js +1 -1
  417. package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -1
  418. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  419. package/.next/server/app/api/worktrees/route.js +1 -1
  420. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  421. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  422. package/.next/server/app/apple-icon.png/route.js +1 -1
  423. package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
  424. package/.next/server/app/apple-icon.png.meta +1 -1
  425. package/.next/server/app/icon.png/route.js +1 -1
  426. package/.next/server/app/icon.png/route.js.nft.json +1 -1
  427. package/.next/server/app/icon.png.meta +1 -1
  428. package/.next/server/app/icon1.png/route.js +1 -1
  429. package/.next/server/app/icon1.png/route.js.nft.json +1 -1
  430. package/.next/server/app/icon1.png.meta +1 -1
  431. package/.next/server/app/icon2.png/route.js +1 -1
  432. package/.next/server/app/icon2.png/route.js.nft.json +1 -1
  433. package/.next/server/app/icon2.png.meta +1 -1
  434. package/.next/server/app/login/page.js +2 -2
  435. package/.next/server/app/login/page.js.nft.json +1 -1
  436. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  437. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  438. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  439. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  440. package/.next/server/app/manifest.webmanifest.meta +1 -1
  441. package/.next/server/app/more/page.js +2 -2
  442. package/.next/server/app/more/page.js.nft.json +1 -1
  443. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  444. package/.next/server/app/offline/page.js +2 -2
  445. package/.next/server/app/offline/page.js.nft.json +1 -1
  446. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  447. package/.next/server/app/page.js +2 -2
  448. package/.next/server/app/page.js.nft.json +1 -1
  449. package/.next/server/app/page_client-reference-manifest.js +1 -1
  450. package/.next/server/app/proxy/[...path]/route.js +1 -1
  451. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  452. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  453. package/.next/server/app/repositories/page.js +2 -2
  454. package/.next/server/app/repositories/page.js.nft.json +1 -1
  455. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  456. package/.next/server/app/review/page.js +2 -2
  457. package/.next/server/app/review/page.js.nft.json +1 -1
  458. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  459. package/.next/server/app/sessions/page.js +2 -2
  460. package/.next/server/app/sessions/page.js.nft.json +1 -1
  461. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  462. package/.next/server/app/skills/[skillId]/page.js +2 -2
  463. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  464. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  465. package/.next/server/app/skills/installed/page.js +2 -2
  466. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  467. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  468. package/.next/server/app/skills/page.js +2 -2
  469. package/.next/server/app/skills/page.js.nft.json +1 -1
  470. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  471. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  472. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  473. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  474. package/.next/server/app/worktrees/[id]/page.js +12 -12
  475. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  476. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  477. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  478. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  479. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  480. package/.next/server/app-paths-manifest.json +34 -34
  481. package/.next/server/chunks/{5048.js → 1185.js} +1 -1
  482. package/.next/server/chunks/1191.js +11 -4
  483. package/.next/server/chunks/1501.js +1 -1
  484. package/.next/server/chunks/1601.js +2 -2
  485. package/.next/server/chunks/1656.js +19 -0
  486. package/.next/server/chunks/1945.js +3 -3
  487. package/.next/server/chunks/1990.js +103 -0
  488. package/.next/server/chunks/2119.js +1 -1
  489. package/.next/server/chunks/2404.js +1 -1
  490. package/.next/server/chunks/2422.js +1 -1
  491. package/.next/server/chunks/2445.js +1 -1
  492. package/.next/server/chunks/2534.js +1 -1
  493. package/.next/server/chunks/255.js +1 -0
  494. package/.next/server/chunks/3241.js +1 -1
  495. package/.next/server/chunks/3505.js +7 -0
  496. package/.next/server/chunks/3897.js +22 -0
  497. package/.next/server/chunks/4072.js +5 -5
  498. package/.next/server/chunks/4248.js +1 -1
  499. package/.next/server/chunks/4280.js +1 -0
  500. package/.next/server/chunks/463.js +1 -0
  501. package/.next/server/chunks/5209.js +1 -1
  502. package/.next/server/chunks/5611.js +1 -1
  503. package/.next/server/chunks/6119.js +1 -0
  504. package/.next/server/chunks/6130.js +1 -1
  505. package/.next/server/chunks/6345.js +1 -1
  506. package/.next/server/chunks/6401.js +1 -1
  507. package/.next/server/chunks/6486.js +9 -8
  508. package/.next/server/chunks/6781.js +1 -1
  509. package/.next/server/chunks/6784.js +1 -0
  510. package/.next/server/chunks/720.js +103 -0
  511. package/.next/server/chunks/7604.js +2 -0
  512. package/.next/server/chunks/7905.js +1 -1
  513. package/.next/server/chunks/8581.js +7 -7
  514. package/.next/server/chunks/8728.js +3 -3
  515. package/.next/server/chunks/8791.js +1 -1
  516. package/.next/server/chunks/8807.js +19 -18
  517. package/.next/server/chunks/8918.js +2 -104
  518. package/.next/server/chunks/9130.js +1 -1
  519. package/.next/server/chunks/936.js +1 -1
  520. package/.next/server/chunks/9390.js +1 -1
  521. package/.next/server/chunks/9540.js +1 -1
  522. package/.next/server/chunks/9627.js +4 -4
  523. package/.next/server/chunks/9731.js +3 -3
  524. package/.next/server/middleware-build-manifest.js +1 -1
  525. package/.next/server/middleware-manifest.json +5 -5
  526. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  527. package/.next/server/pages/500.html +1 -1
  528. package/.next/server/pages/_document.js.nft.json +1 -1
  529. package/.next/server/pages/_error.js +3 -3
  530. package/.next/server/pages/_error.js.nft.json +1 -1
  531. package/.next/server/server-reference-manifest.json +1 -1
  532. package/.next/server/src/middleware.js.map +1 -1
  533. package/.next/static/chunks/{1111.5ab4f0ffb0d944e5.js → 1111.1b653d4a9816a0a7.js} +8 -8
  534. package/.next/static/chunks/{1255-7e5873f06b25e129.js → 1255-a85690d352f4f8fd.js} +1 -1
  535. package/.next/static/chunks/2099-c3e0ab70a1b95dd3.js +1 -0
  536. package/.next/static/chunks/{2407-b2f524f99f7fc353.js → 2407-26139a8a2f1adbe8.js} +1 -1
  537. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  538. package/.next/static/chunks/{2863-6a07ec82fb52f4dd.js → 2863-f0121af1cbbedb3b.js} +1 -1
  539. package/.next/static/chunks/{8165-263172c17ae8e8c3.js → 8165-c68b3dc844210e6a.js} +1 -1
  540. package/.next/static/chunks/8407-35bbfc84793d7004.js +1 -0
  541. package/.next/static/chunks/9079-406b84d3cc891a87.js +1 -0
  542. package/.next/static/chunks/9465-b59bb255b376c813.js +1 -0
  543. package/.next/static/chunks/app/{layout-419eaf7de340f4ab.js → layout-46b4cbf07520d9b6.js} +1 -1
  544. package/.next/static/chunks/app/sessions/page-fb241bed579c67aa.js +1 -0
  545. package/.next/static/chunks/app/worktrees/[id]/page-cbc7749a33450cc5.js +1 -0
  546. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  547. package/.next/static/chunks/main-37ca13e38030fe8b.js +1 -0
  548. package/.next/static/chunks/{webpack-468b7b33030234b3.js → webpack-838df0273b03af19.js} +1 -1
  549. package/.next/trace +13 -13
  550. package/dist/cli/commands/auto-yes.d.ts +24 -0
  551. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  552. package/dist/cli/commands/auto-yes.js +73 -3
  553. package/dist/cli/commands/instances.d.ts.map +1 -1
  554. package/dist/cli/commands/instances.js +10 -1
  555. package/dist/cli/commands/prompt.d.ts.map +1 -1
  556. package/dist/cli/commands/prompt.js +28 -14
  557. package/dist/cli/commands/send.d.ts.map +1 -1
  558. package/dist/cli/commands/send.js +15 -0
  559. package/dist/cli/commands/wait.d.ts.map +1 -1
  560. package/dist/cli/commands/wait.js +108 -14
  561. package/dist/cli/docs/agent-operations.d.ts +2 -2
  562. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  563. package/dist/cli/docs/agent-operations.js +27 -0
  564. package/dist/cli/types/api-responses.d.ts +131 -4
  565. package/dist/cli/types/api-responses.d.ts.map +1 -1
  566. package/dist/cli/types/index.d.ts +4 -0
  567. package/dist/cli/types/index.d.ts.map +1 -1
  568. package/dist/cli/utils/resource-resolvers.d.ts +0 -18
  569. package/dist/cli/utils/resource-resolvers.d.ts.map +1 -1
  570. package/dist/cli/utils/resource-resolvers.js +1 -51
  571. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +65 -2
  572. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
  573. package/dist/lib/polling/auto-yes-suppression-reason.js +36 -2
  574. package/dist/lib/prompt-observation/types.d.ts +13 -0
  575. package/dist/lib/prompt-observation/types.d.ts.map +1 -1
  576. package/dist/server/locales/en/worktree.json +2 -1
  577. package/dist/server/locales/ja/worktree.json +2 -1
  578. package/dist/server/src/lib/auto-yes-poller-answer-target.js +38 -0
  579. package/dist/server/src/lib/auto-yes-poller-keys.js +35 -0
  580. package/dist/server/src/lib/auto-yes-poller-session-presence.js +26 -0
  581. package/dist/server/src/lib/auto-yes-poller-tick.js +233 -0
  582. package/dist/server/src/lib/auto-yes-poller.js +468 -792
  583. package/dist/server/src/lib/auto-yes-state.js +50 -2
  584. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +107 -14
  585. package/dist/server/src/lib/db/chat-db.js +5 -1
  586. package/dist/server/src/lib/db/verification-db.js +23 -2
  587. package/dist/server/src/lib/detection/option-recommendation.js +120 -0
  588. package/dist/server/src/lib/detection/prompt-detect-multiple-choice-approval-context.js +290 -0
  589. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +396 -268
  590. package/dist/server/src/lib/detection/prompt-detector.js +92 -21
  591. package/dist/server/src/lib/detection/prompt-screen-key.js +60 -0
  592. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +158 -35
  593. package/dist/server/src/lib/detection/tools/claude/detect.js +111 -10
  594. package/dist/server/src/lib/detection/tools/command-code/dialog.js +67 -0
  595. package/dist/server/src/lib/detection/tools/dialog-block.js +16 -0
  596. package/dist/server/src/lib/detection/waiting-screen-reading.js +98 -0
  597. package/dist/server/src/lib/hooks/permission-adjudication.js +26 -0
  598. package/dist/server/src/lib/hooks/permission-decision-service.js +49 -4
  599. package/dist/server/src/lib/hooks/permission-request-payload.js +20 -0
  600. package/dist/server/src/lib/hooks/sources/antigravity/source.js +21 -0
  601. package/dist/server/src/lib/hooks/sources/claude/source.js +3 -0
  602. package/dist/server/src/lib/hooks/sources/codex/source.js +2 -0
  603. package/dist/server/src/lib/hooks/sources/command-code/source.js +2 -0
  604. package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
  605. package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
  606. package/dist/server/src/lib/hooks/sources/legacy-relay.js +2 -0
  607. package/dist/server/src/lib/hooks/sources/opencode/ingest.js +6 -0
  608. package/dist/server/src/lib/hooks/sources/opencode/source.js +2 -0
  609. package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +6 -0
  610. package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +2 -0
  611. package/dist/server/src/lib/hooks/sources/pending-decisions.js +14 -2
  612. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +14 -3
  613. package/dist/server/src/lib/polling/antigravity-receipt-episodes.js +21 -1
  614. package/dist/server/src/lib/polling/auto-yes-confirm-page.js +2 -2
  615. package/dist/server/src/lib/polling/auto-yes-confirmation-ledger-types.js +117 -0
  616. package/dist/server/src/lib/polling/auto-yes-confirmation-ledger.js +1091 -0
  617. package/dist/server/src/lib/polling/auto-yes-decision-state.js +195 -0
  618. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +139 -10
  619. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +14 -0
  620. package/dist/server/src/lib/polling/auto-yes-ledger-records.js +143 -0
  621. package/dist/server/src/lib/polling/auto-yes-manual-answer.js +122 -0
  622. package/dist/server/src/lib/polling/auto-yes-option-effect.js +157 -0
  623. package/dist/server/src/lib/polling/auto-yes-policy.js +46 -11
  624. package/dist/server/src/lib/polling/auto-yes-poller-capture.js +63 -0
  625. package/dist/server/src/lib/polling/auto-yes-poller-enter-fallback.js +37 -0
  626. package/dist/server/src/lib/polling/auto-yes-poller-generation.js +192 -0
  627. package/dist/server/src/lib/polling/auto-yes-poller-receipt-log.js +324 -0
  628. package/dist/server/src/lib/polling/auto-yes-poller-state.js +193 -26
  629. package/dist/server/src/lib/polling/auto-yes-poller-steps.js +279 -0
  630. package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +13 -2
  631. package/dist/server/src/lib/polling/auto-yes-question-choice.js +57 -0
  632. package/dist/server/src/lib/polling/auto-yes-resolver.js +117 -22
  633. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +36 -2
  634. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +25 -1
  635. package/dist/server/src/lib/polling/prompt-screen-reading.js +232 -0
  636. package/dist/server/src/lib/polling/response-checker-blank-response.js +30 -0
  637. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +39 -0
  638. package/dist/server/src/lib/polling/response-checker.js +138 -53
  639. package/dist/server/src/lib/prompt-answer-sender.js +104 -10
  640. package/dist/server/src/lib/prompt-observation/appearance.js +165 -0
  641. package/dist/server/src/lib/push/notification-dedup.js +15 -2
  642. package/dist/server/src/lib/push/prompt-card-state.js +140 -19
  643. package/dist/server/src/lib/push/prompt-push-gate.js +158 -12
  644. package/dist/server/src/lib/push/push-sender.js +23 -3
  645. package/dist/server/src/lib/push/resolution-push-notifier.js +14 -0
  646. package/dist/server/src/lib/push/waiting-push-notifier.js +139 -17
  647. package/dist/server/src/lib/realtime/terminal-broadcast.js +16 -0
  648. package/dist/server/src/lib/session/agent-event-state.js +25 -5
  649. package/dist/server/src/lib/session/agent-event-turn.js +140 -46
  650. package/dist/server/src/lib/session/cli-session.js +21 -2
  651. package/dist/server/src/lib/session/current-output-builder.js +64 -11
  652. package/dist/server/src/lib/session/send-attempt-state.js +23 -7
  653. package/dist/server/src/lib/session/waiting-episode-binding-observation.js +289 -0
  654. package/dist/server/src/lib/session/waiting-episode-binding-resolve.js +38 -0
  655. package/dist/server/src/lib/session/waiting-episode-binding.js +276 -0
  656. package/dist/server/src/lib/session/waiting-episode-state.js +307 -17
  657. package/dist/server/src/lib/session/waiting-episode-verdict.js +174 -0
  658. package/dist/server/src/lib/tmux/tmux-capture-cache.js +76 -11
  659. package/dist/server/src/lib/tmux/tmux.js +54 -9
  660. package/dist/server/src/lib/verification/gate-runner.js +162 -13
  661. package/dist/server/src/lib/verification/machine-lock.js +5 -0
  662. package/dist/server/src/lib/ws-server.js +18 -3
  663. package/dist/server/src/types/auto-yes-answer-mode.js +38 -0
  664. package/dist/server/src/types/auto-yes-decision.js +61 -0
  665. package/dist/server/src/types/auto-yes.js +6 -0
  666. package/dist/server/src/types/prompt-reading.js +32 -0
  667. package/dist/types/auto-yes-answer-mode.d.ts +35 -0
  668. package/dist/types/auto-yes-answer-mode.d.ts.map +1 -0
  669. package/dist/types/auto-yes-answer-mode.js +38 -0
  670. package/docs/en/user-guide/webapp-guide.md +33 -4
  671. package/package.json +2 -2
  672. package/public/sw.js +76 -4
  673. package/release-notes/0.47.1.json +20 -0
  674. package/release-notes/0.47.2.json +20 -0
  675. package/release-notes/0.48.0.json +57 -0
  676. package/scripts/hooks/cmate-agent-event.sh +22 -0
  677. package/.next/server/chunks/1331.js +0 -22
  678. package/.next/server/chunks/1559.js +0 -2
  679. package/.next/server/chunks/1836.js +0 -1
  680. package/.next/server/chunks/1944.js +0 -1
  681. package/.next/server/chunks/2328.js +0 -1
  682. package/.next/server/chunks/2460.js +0 -1
  683. package/.next/server/chunks/5292.js +0 -7
  684. package/.next/server/chunks/5595.js +0 -1
  685. package/.next/server/chunks/7166.js +0 -19
  686. package/.next/server/chunks/9051.js +0 -1
  687. package/.next/server/chunks/9199.js +0 -1
  688. package/.next/static/chunks/602-1c1488959215e140.js +0 -1
  689. package/.next/static/chunks/8407-155f84e5ba05f1d5.js +0 -1
  690. package/.next/static/chunks/9079-24f9fa549ed298f1.js +0 -1
  691. package/.next/static/chunks/9465-e5a351baa941f31b.js +0 -1
  692. package/.next/static/chunks/app/sessions/page-e02f1adb1d1c1ccc.js +0 -1
  693. package/.next/static/chunks/app/worktrees/[id]/page-45294052ee3032f1.js +0 -1
  694. package/.next/static/chunks/main-ac91ed6e71380841.js +0 -1
  695. /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → PTlAswXLq8PAe2vUJ8dVP}/_buildManifest.js +0 -0
  696. /package/.next/static/{b5BiQC9F6r_XFPdA9cuSj → PTlAswXLq8PAe2vUJ8dVP}/_ssgManifest.js +0 -0
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ /**
3
+ * The observation half of `waiting-episode-binding` (Issue #3798): the
4
+ * observers' starts, the dating of a captured frame, and the plan of tables
5
+ * O-1 / O-2. Split out of `waiting-episode-binding` (Issue #3892), which
6
+ * re-exports all of it and carries the plan out (`commitWaitingObservation`).
7
+ *
8
+ * @module lib/session/waiting-episode-binding-observation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.startWaitingObservation = startWaitingObservation;
12
+ exports.startWorktreeWaitingObservations = startWorktreeWaitingObservations;
13
+ exports.captureFrameTime = captureFrameTime;
14
+ exports.captureObservedFrame = captureObservedFrame;
15
+ exports.planWaitingObservation = planWaitingObservation;
16
+ const async_hooks_1 = require("async_hooks");
17
+ const auto_yes_state_1 = require("../../lib/auto-yes-state");
18
+ const prompt_screen_key_1 = require("../../lib/detection/prompt-screen-key");
19
+ const agent_event_turn_1 = require("../../lib/session/agent-event-turn");
20
+ const waiting_episode_binding_resolve_1 = require("../../lib/session/waiting-episode-binding-resolve");
21
+ const waiting_episode_state_1 = require("../../lib/session/waiting-episode-state");
22
+ const waiting_episode_verdict_1 = require("../../lib/session/waiting-episode-verdict");
23
+ const global_state_1 = require("../global-state");
24
+ /** Where `cli-session` reports a frame's source to the observer it runs for (Issue #3798). */
25
+ function frameMetaSink() {
26
+ return (0, global_state_1.getOrInitGlobal)('__captureFrameMetaSink', () => new async_hooks_1.AsyncLocalStorage());
27
+ }
28
+ /** Fix the observer's start (design §2.5). Read-only. */
29
+ function startWaitingObservation(worktreeId, cliToolId, instanceId) {
30
+ return {
31
+ generation: (0, waiting_episode_binding_resolve_1.generationOf)({ worktreeId, cliToolId, instanceId }),
32
+ version: (0, waiting_episode_state_1.getEpisodeVersion)(worktreeId, cliToolId, instanceId),
33
+ };
34
+ }
35
+ /**
36
+ * Fix the start of every instance of a worktree at once (design §2.5): the
37
+ * status routes call it before `listSessions()`, so a session that started —
38
+ * and opened a wait — after the list was taken is not closed as gone by a
39
+ * probe that did not see it. Instances that have no version or generation yet
40
+ * are fixed at 0 / none.
41
+ */
42
+ function startWorktreeWaitingObservations(worktreeId) {
43
+ const prefix = `${worktreeId}${auto_yes_state_1.COMPOSITE_KEY_SEPARATOR}`;
44
+ const versions = (0, waiting_episode_state_1.snapshotEpisodeVersions)(worktreeId);
45
+ const generations = new Map();
46
+ for (const [key, at] of agent_event_turn_1.generationStartedAt) {
47
+ if (key.startsWith(prefix))
48
+ generations.set(key, at);
49
+ }
50
+ return {
51
+ startFor(cliToolId, instanceId) {
52
+ const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
53
+ return { generation: (0, agent_event_turn_1.toGenerationRef)(generations.get(key) ?? null), version: versions.get(key) ?? 0 };
54
+ },
55
+ };
56
+ }
57
+ /**
58
+ * When the frame a scraper just read was fetched (design §2.2
59
+ * `frameCapturedAt`), from `meta` — what the capture reported for that one
60
+ * frame ({@link captureObservedFrame}). A frame served from the cache, or
61
+ * joined to a fetch already in flight, is as old as that fetch, and is never
62
+ * one this observer fetched itself — even when that fetch started in the very
63
+ * millisecond the observer asked. Only a frame the capture fetched itself,
64
+ * starting at or after `requestedAt` (the moment the observer asked, after its
65
+ * start), counts as fetched after the start. A frame nothing was reported for
66
+ * (a capture module a test replaced) is dated 0, before any close (design
67
+ * §2.6): it opens no wait I6 would hold back, and closes no `screen`.
68
+ */
69
+ function captureFrameTime(meta, requestedAt) {
70
+ if (meta === null)
71
+ return { frameCapturedAt: 0, frameFetchedAfterStart: false };
72
+ return {
73
+ frameCapturedAt: Math.min(meta.fetchStartedAt, requestedAt),
74
+ frameFetchedAfterStart: meta.source === 'fetched' && meta.fetchStartedAt >= requestedAt,
75
+ };
76
+ }
77
+ /**
78
+ * Run one capture for an observer and date the frame it returns (Issue #3798):
79
+ * `cli-session` reports where THIS call's frame came from through an async
80
+ * context set up here, so another capture of the same session running at the
81
+ * same time — a different number of lines, a different text — cannot stand in
82
+ * for it.
83
+ */
84
+ async function captureObservedFrame(capture) {
85
+ const reported = { meta: null };
86
+ const requestedAt = Date.now();
87
+ const frame = await frameMetaSink().run((meta) => {
88
+ reported.meta = meta;
89
+ }, capture);
90
+ return { frame, frameTime: captureFrameTime(reported.meta, requestedAt) };
91
+ }
92
+ function screenBinding(generation, originTurnId) {
93
+ return { kind: 'screen', generation, originTurnId };
94
+ }
95
+ function sameBinding(a, b) {
96
+ if (a.kind !== b.kind)
97
+ return false;
98
+ switch (a.kind) {
99
+ case 'turn':
100
+ return a.turnId === b.turnId;
101
+ case 'dialog-only':
102
+ return a.recordTurnId === b.recordTurnId;
103
+ default:
104
+ return true;
105
+ }
106
+ }
107
+ /** Whether the Auto-Yes poller answered this episode and the screen now shows another confirmation (R1-7, PR 3). */
108
+ function answeredThenAnother(obs, episode, k) {
109
+ return (obs.freshPrompt === true &&
110
+ obs.lastAnswer != null &&
111
+ obs.lastAnswer.episodeId === episode.episodeId &&
112
+ k !== null &&
113
+ k !== obs.lastAnswer.screenKey);
114
+ }
115
+ /** Table O-1: a `waiting` reading on the instance's episode (or none). */
116
+ function verdictForWaiting(obs, episode, humanHeld, c, k, current) {
117
+ if (episode === null)
118
+ return { action: 'opened', binding: c };
119
+ const binding = episode.binding;
120
+ // The row below the table: a binding of another generation is replaced (P3-2).
121
+ if (!(0, waiting_episode_verdict_1.sameGeneration)(binding.generation, current))
122
+ return { action: 'replaced', binding: c };
123
+ if (humanHeld) {
124
+ if (binding.kind === 'screen')
125
+ return { action: 'kept' };
126
+ return { action: 'rebound', binding: screenBinding(current, binding.kind === 'turn' ? binding.turnId : null) };
127
+ }
128
+ switch (binding.kind) {
129
+ case 'turn': {
130
+ const stillOpen = c.kind === 'turn' && c.turnId === binding.turnId;
131
+ if (stillOpen)
132
+ return answeredThenAnother(obs, episode, k) ? { action: 'replaced', binding: c } : { action: 'kept' };
133
+ if (c.kind === 'turn')
134
+ return { action: 'replaced', binding: c };
135
+ // T has ended (stop, screen evidence, the 30-minute stale bound — R2-3):
136
+ // only another confirmation replaces it.
137
+ return obs.freshPrompt === true && k !== null && k !== episode.promptScreenKey
138
+ ? { action: 'replaced', binding: c }
139
+ : { action: 'kept' };
140
+ }
141
+ case 'dialog-only':
142
+ if (c.kind === 'turn')
143
+ return { action: 'rebound', binding: c };
144
+ if (c.kind === 'dialog-only' && c.recordTurnId !== binding.recordTurnId)
145
+ return { action: 'replaced', binding: c };
146
+ return { action: 'kept' };
147
+ case 'unattributed':
148
+ if (c.kind === 'unattributed') {
149
+ return answeredThenAnother(obs, episode, k) ? { action: 'replaced', binding: c } : { action: 'kept' };
150
+ }
151
+ if (c.kind === 'dialog-only')
152
+ return { action: 'rebound', binding: c };
153
+ // c = turn(N): the wait turned out to be N's when it shows the same confirmation (R2-4).
154
+ return k !== null && k === episode.promptScreenKey
155
+ ? { action: 'rebound', binding: c }
156
+ : { action: 'replaced', binding: c };
157
+ case 'screen':
158
+ return c.kind === 'turn' && c.turnId === binding.originTurnId
159
+ ? { action: 'rebound', binding: c }
160
+ : { action: 'replaced', binding: c };
161
+ default:
162
+ binding;
163
+ return { action: 'kept' };
164
+ }
165
+ }
166
+ /** Table O-2: the closing side. Null when the reading closes nothing. */
167
+ function closeReasonFor(obs, episode) {
168
+ const { reading } = obs;
169
+ if (reading.kind === 'gone')
170
+ return 'session-gone';
171
+ if (reading.kind !== 'not-waiting')
172
+ return null;
173
+ switch (obs.observer) {
174
+ case 'status-probe':
175
+ return 'screen-cleared';
176
+ case 'response-checker':
177
+ return 'response-recorded';
178
+ case 'auto-yes-poller':
179
+ // A screen only after a frame fetched since it became one (R3-1, P3-1);
180
+ // any other wait only when the poller answered it (PR 3, 規則 3).
181
+ if (episode.binding.kind === 'screen') {
182
+ return obs.frameCapturedAt > Math.max(episode.openedAt, episode.boundAt) ? 'screen-cleared' : null;
183
+ }
184
+ return obs.lastAnswer != null && obs.lastAnswer.episodeId === episode.episodeId ? 'poller-answered' : null;
185
+ default:
186
+ obs.observer;
187
+ return null;
188
+ }
189
+ }
190
+ /** Why the old episode of a replacement ended. */
191
+ function replacedBecause(old, next, current) {
192
+ if (!(0, waiting_episode_verdict_1.sameGeneration)(old.generation, current))
193
+ return 'generation';
194
+ return next.kind === 'turn' || next.kind === 'dialog-only' ? 'turn-superseded' : 'screen-cleared';
195
+ }
196
+ /**
197
+ * Decide what one observation does to the instance's episode (design §2.4
198
+ * 規則 3・4・5, tables O-1 / O-2 and preconditions 1–3). Reads the store and
199
+ * the turn model; writes nothing.
200
+ */
201
+ function planWaitingObservation(obs) {
202
+ const at = obs.now ?? Date.now();
203
+ const parts = { worktreeId: obs.worktreeId, cliToolId: obs.cliToolId, instanceId: obs.instanceId };
204
+ const episode = (0, waiting_episode_state_1.getWaitingEpisodeRecord)(obs.worktreeId, obs.cliToolId, obs.instanceId);
205
+ const current = (0, waiting_episode_binding_resolve_1.generationOf)(parts);
206
+ const base = {
207
+ observation: obs,
208
+ action: 'ignored',
209
+ episodeId: episode?.episodeId ?? null,
210
+ since: obs.reading.kind === 'waiting' ? episode?.since ?? null : null,
211
+ next: null,
212
+ binding: null,
213
+ closeReason: null,
214
+ ignoredBecause: null,
215
+ at,
216
+ };
217
+ const ignored = (because) => ({
218
+ ...base,
219
+ action: 'ignored',
220
+ ignoredBecause: because,
221
+ });
222
+ // Precondition 1: the observer started in another generation.
223
+ if (!(0, waiting_episode_verdict_1.sameGeneration)(obs.start.generation, current))
224
+ return ignored('generation');
225
+ const versionMoved = obs.start.version !== (0, waiting_episode_state_1.getEpisodeVersion)(obs.worktreeId, obs.cliToolId, obs.instanceId) && obs.freshPrompt !== true;
226
+ const { reading } = obs;
227
+ if (reading.kind !== 'waiting') {
228
+ // Table O-2.
229
+ if (episode === null)
230
+ return ignored('nothing-open');
231
+ if (reading.kind === 'unknown')
232
+ return ignored('unknown-frame');
233
+ const reason = closeReasonFor(obs, episode);
234
+ if (reason === null)
235
+ return ignored('not-this-observer');
236
+ if (versionMoved)
237
+ return ignored('version');
238
+ return { ...base, action: 'closed', closeReason: reason, since: null };
239
+ }
240
+ // Table O-1.
241
+ const k = reading.promptData !== null ? (0, prompt_screen_key_1.promptScreenKey)(reading.promptData) : null;
242
+ // 規則 1: a person's screen is `screen` whatever the turn model says, with
243
+ // the open turn as its origin.
244
+ const resolved = (0, waiting_episode_binding_resolve_1.resolveEpisodeBinding)(parts, at);
245
+ const c = reading.humanHeld
246
+ ? screenBinding(current, resolved.kind === 'turn' ? resolved.turnId : null)
247
+ : resolved;
248
+ const verdict = verdictForWaiting(obs, episode, reading.humanHeld, c, k, current);
249
+ if (verdict.action === 'kept')
250
+ return { ...base, action: 'kept' };
251
+ // Precondition 2 (I5 (b) / (d)) and 3 (I6).
252
+ if (versionMoved)
253
+ return ignored('version');
254
+ const lastClosed = (0, waiting_episode_state_1.getLastClosedEpisode)(obs.worktreeId, obs.cliToolId, obs.instanceId);
255
+ const closedBeforeOwnFetch = obs.frameFetchedAfterStart === true &&
256
+ obs.start.version === (0, waiting_episode_state_1.getEpisodeVersion)(obs.worktreeId, obs.cliToolId, obs.instanceId);
257
+ if (lastClosed !== null &&
258
+ !closedBeforeOwnFetch &&
259
+ obs.frameCapturedAt <= lastClosed.at &&
260
+ (k === null || k === lastClosed.promptScreenKey)) {
261
+ return ignored('stale-frame');
262
+ }
263
+ if (verdict.action === 'rebound') {
264
+ if (episode !== null && sameBinding(episode.binding, verdict.binding))
265
+ return { ...base, action: 'kept' };
266
+ return { ...base, action: 'rebound', binding: verdict.binding };
267
+ }
268
+ const binding = verdict.binding;
269
+ const structuredSince = reading.structuredSince;
270
+ const since = verdict.action === 'opened' || episode === null
271
+ ? structuredSince ?? at
272
+ : structuredSince !== null && structuredSince > episode.since
273
+ ? structuredSince
274
+ : at;
275
+ const next = {
276
+ since,
277
+ kind: reading.waitingKind,
278
+ binding,
279
+ openedBy: obs.observer,
280
+ promptScreenKey: k,
281
+ };
282
+ return {
283
+ ...base,
284
+ action: verdict.action,
285
+ since,
286
+ next,
287
+ closeReason: verdict.action === 'replaced' && episode !== null ? replacedBecause(episode.binding, binding, current) : null,
288
+ };
289
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * What a new waiting episode is bound to, read from the turn model (Issue #3798).
4
+ * Split out of `waiting-episode-binding` (Issue #3892), which re-exports it.
5
+ *
6
+ * @module lib/session/waiting-episode-binding-resolve
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.generationOf = generationOf;
10
+ exports.resolveEpisodeBinding = resolveEpisodeBinding;
11
+ const auto_yes_state_1 = require("../../lib/auto-yes-state");
12
+ const agent_event_turn_1 = require("../../lib/session/agent-event-turn");
13
+ function generationOf(parts) {
14
+ return (0, agent_event_turn_1.toGenerationRef)((0, agent_event_turn_1.currentGeneration)((0, auto_yes_state_1.buildCompositeKey)(parts.worktreeId, parts.cliToolId, parts.instanceId)));
15
+ }
16
+ /**
17
+ * What an episode opening now is bound to (design §2.4 規則 1).
18
+ *
19
+ * Read from the fenced, aged turn record — the same reading `getAgentTurn`
20
+ * gives every other reader — with the live decisions counted without retiring
21
+ * the expired ones, so deciding a binding writes nothing a transition would
22
+ * later read differently.
23
+ */
24
+ function resolveEpisodeBinding(parts, at) {
25
+ const generation = generationOf(parts);
26
+ const turn = (0, agent_event_turn_1.getAgentTurn)(parts.worktreeId, parts.cliToolId, parts.instanceId, at);
27
+ if (turn === null)
28
+ return { kind: 'unattributed', generation, lastClosedTurnId: null };
29
+ if (turn.closedAt === null && turn.openedAt !== null) {
30
+ return { kind: 'turn', generation, turnId: turn.turnId };
31
+ }
32
+ if (turn.closedAt === null && (0, agent_event_turn_1.liveDecisionCount)(turn, at) > 0) {
33
+ return { kind: 'dialog-only', generation, recordTurnId: turn.turnId, sessionId: turn.sessionId };
34
+ }
35
+ // A closed turn, or a record holding no live decision (an `idle_prompt`
36
+ // display record, or a forecast whose 20 s ran out).
37
+ return { kind: 'unattributed', generation, lastClosedTurnId: turn.turnId };
38
+ }
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ /**
3
+ * Which turn a waiting episode belongs to, and what the turn transitions do to
4
+ * it (Issue #3798).
5
+ *
6
+ * The episode store (`waiting-episode-state`) knows when a wait began and what
7
+ * it is bound to; the turn model (`agent-event-turn`) knows how each delivery
8
+ * moved the instance's turn. This module joins the two:
9
+ *
10
+ * - {@link resolveEpisodeBinding} decides what a new episode is bound to, from
11
+ * the turn model as it stands (design §2.4 規則 1). It is registered with the
12
+ * store, so an episode `observeWaitingEdge` opens is bound like any other.
13
+ * - {@link applyTurnOutcomesToEpisode} is the T table (design §2.4): what a
14
+ * transition's outcome does to the open episode. It runs in the synchronous
15
+ * step that recorded the delivery (`recordAgentEvent`'s end,
16
+ * `beginAgentEventGeneration`, the two `report*Pending`, the duplicate-window
17
+ * restore) and never after an `await`, so a closer that resumes later
18
+ * cannot reach a wait that opened meanwhile (design §2.5).
19
+ * - {@link captureLegacyStopTarget} / {@link settleLegacyStop} are the one
20
+ * closer that cannot be synchronous: `/api/hooks/claude-done` names no
21
+ * session and awaits a capture and a log before it is done (design 規則 6).
22
+ * - {@link planWaitingObservation} / {@link commitWaitingObservation} are the
23
+ * tables O-1 and O-2 (design §2.4 規則 3・4・5): what one observer's reading
24
+ * of a frame does to the open episode. The three observers — the status
25
+ * probe, the response poller and the Auto-Yes poller — fix an
26
+ * {@link ObservationStart} before their first `await` and are refused when
27
+ * the episode moved meanwhile (I5 (b)), or when the frame was fetched
28
+ * before the close of the very confirmation it shows (I6).
29
+ *
30
+ * The store is a leaf and does not import this module; this module registers
31
+ * itself with the store and with the turn model through `globalThis` when it is
32
+ * loaded. `agent-event-state` imports it, and so does every module that calls
33
+ * the observation functions — the resolver is registered by the import that
34
+ * uses it, not by a transitive one (design R2-10, PR 1a review P3-2).
35
+ *
36
+ * Design: `docs/design/issue-3798-waiting-episode.md`.
37
+ *
38
+ * @module lib/session/waiting-episode-binding
39
+ */
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.startWorktreeWaitingObservations = exports.startWaitingObservation = exports.planWaitingObservation = exports.captureObservedFrame = exports.captureFrameTime = exports.resolveEpisodeBinding = exports.verdictForOutcome = void 0;
42
+ exports.applyTurnOutcomesToEpisode = applyTurnOutcomesToEpisode;
43
+ exports.commitWaitingObservation = commitWaitingObservation;
44
+ exports.observeWaiting = observeWaiting;
45
+ exports.captureLegacyStopTarget = captureLegacyStopTarget;
46
+ exports.settleLegacyStop = settleLegacyStop;
47
+ exports.clearWaitingEpisodeBindingState = clearWaitingEpisodeBindingState;
48
+ const auto_yes_state_1 = require("../../lib/auto-yes-state");
49
+ const logger_1 = require("../../lib/logger");
50
+ const agent_event_turn_1 = require("../../lib/session/agent-event-turn");
51
+ const waiting_episode_binding_observation_1 = require("../../lib/session/waiting-episode-binding-observation");
52
+ const waiting_episode_binding_resolve_1 = require("../../lib/session/waiting-episode-binding-resolve");
53
+ Object.defineProperty(exports, "resolveEpisodeBinding", { enumerable: true, get: function () { return waiting_episode_binding_resolve_1.resolveEpisodeBinding; } });
54
+ const waiting_episode_state_1 = require("../../lib/session/waiting-episode-state");
55
+ const waiting_episode_verdict_1 = require("../../lib/session/waiting-episode-verdict");
56
+ Object.defineProperty(exports, "verdictForOutcome", { enumerable: true, get: function () { return waiting_episode_verdict_1.verdictForOutcome; } });
57
+ const global_state_1 = require("../global-state");
58
+ const logger = (0, logger_1.createLogger)('waiting-episode-binding');
59
+ /**
60
+ * compositeKey -> the generation in which a structured `stop` was last
61
+ * applied. While it names the current generation, the agent's own hook speaks
62
+ * for the end of its turns and `claude-done` does not close (規則 6).
63
+ */
64
+ const hookStopGeneration = (0, global_state_1.getOrInitGlobal)('__waitingHookStopGeneration', () => new Map());
65
+ /** Mark that the agent's own hook reported a stop in this generation (規則 6). */
66
+ function noteHookStop(key, outcome) {
67
+ if (outcome.kind === 'stopped' || outcome.kind === 'stop-without-turn') {
68
+ hookStopGeneration.set(key, outcome.generation);
69
+ }
70
+ }
71
+ function applyVerdict(parts, episode, outcome, verdict, at) {
72
+ const base = { outcome: outcome.kind, episodeId: episode.episodeId };
73
+ if (verdict.action === 'close') {
74
+ const closed = (0, waiting_episode_state_1.closeEpisode)(parts, episode.episodeId, verdict.reason, at);
75
+ if (closed) {
76
+ logger.info('waiting-episode-closed-by-turn', {
77
+ worktreeId: parts.worktreeId,
78
+ cliToolId: parts.cliToolId,
79
+ instanceId: parts.instanceId ?? parts.cliToolId,
80
+ episodeId: episode.episodeId,
81
+ outcome: outcome.kind,
82
+ reason: verdict.reason,
83
+ });
84
+ }
85
+ return { ...base, action: closed ? 'closed' : 'none', ...(closed ? { reason: verdict.reason } : {}) };
86
+ }
87
+ if (verdict.action === 'rebind') {
88
+ const rebound = (0, waiting_episode_state_1.rebindEpisode)(parts, episode.episodeId, verdict.binding, at);
89
+ if (rebound) {
90
+ logger.debug('waiting-episode-rebound', {
91
+ worktreeId: parts.worktreeId,
92
+ instanceId: parts.instanceId ?? parts.cliToolId,
93
+ episodeId: episode.episodeId,
94
+ outcome: outcome.kind,
95
+ binding: verdict.binding.kind,
96
+ });
97
+ }
98
+ return { ...base, action: rebound ? 'rebound' : 'none' };
99
+ }
100
+ if (verdict.action === 'unmatched') {
101
+ logger.warn('waiting-episode-unmatched', {
102
+ worktreeId: parts.worktreeId,
103
+ instanceId: parts.instanceId ?? parts.cliToolId,
104
+ episodeId: episode.episodeId,
105
+ outcome: outcome.kind,
106
+ binding: episode.binding.kind,
107
+ });
108
+ }
109
+ return { ...base, action: 'none' };
110
+ }
111
+ /**
112
+ * Apply a delivery's transition outcomes to the instance's open episode
113
+ * (Issue #3798, design §2.4 T table), in order.
114
+ *
115
+ * Called in the synchronous step that produced the outcomes. Never throws: the
116
+ * turn has been recorded already, and a failure here must not cost the hook
117
+ * its answer (design §2.6). An episode it leaves open is still closed by the
118
+ * screen observers.
119
+ *
120
+ * @param at - Epoch ms of the change; defaults to now
121
+ */
122
+ function applyTurnOutcomesToEpisode(parts, outcomes, at = Date.now()) {
123
+ const effects = [];
124
+ try {
125
+ const key = (0, auto_yes_state_1.buildCompositeKey)(parts.worktreeId, parts.cliToolId, parts.instanceId);
126
+ for (const outcome of outcomes) {
127
+ noteHookStop(key, outcome);
128
+ const episode = (0, waiting_episode_state_1.getWaitingEpisodeRecord)(parts.worktreeId, parts.cliToolId, parts.instanceId);
129
+ if (episode === null) {
130
+ effects.push({ outcome: outcome.kind, action: 'none', episodeId: null });
131
+ continue;
132
+ }
133
+ const verdict = (0, waiting_episode_verdict_1.verdictForOutcome)(outcome, episode.binding, (0, waiting_episode_binding_resolve_1.generationOf)(parts));
134
+ effects.push(applyVerdict(parts, episode, outcome, verdict, at));
135
+ }
136
+ }
137
+ catch (error) {
138
+ logger.warn('waiting-episode-turn-sync-failed', {
139
+ worktreeId: parts.worktreeId,
140
+ instanceId: parts.instanceId ?? parts.cliToolId,
141
+ error: error instanceof Error ? error.message : String(error),
142
+ });
143
+ }
144
+ return effects;
145
+ }
146
+ var waiting_episode_binding_observation_2 = require("../../lib/session/waiting-episode-binding-observation");
147
+ Object.defineProperty(exports, "captureFrameTime", { enumerable: true, get: function () { return waiting_episode_binding_observation_2.captureFrameTime; } });
148
+ Object.defineProperty(exports, "captureObservedFrame", { enumerable: true, get: function () { return waiting_episode_binding_observation_2.captureObservedFrame; } });
149
+ Object.defineProperty(exports, "planWaitingObservation", { enumerable: true, get: function () { return waiting_episode_binding_observation_2.planWaitingObservation; } });
150
+ Object.defineProperty(exports, "startWaitingObservation", { enumerable: true, get: function () { return waiting_episode_binding_observation_2.startWaitingObservation; } });
151
+ Object.defineProperty(exports, "startWorktreeWaitingObservations", { enumerable: true, get: function () { return waiting_episode_binding_observation_2.startWorktreeWaitingObservations; } });
152
+ /**
153
+ * Carry out a plan (design I5 (b)). Each write names the episode the plan was
154
+ * made about, so a plan committed late changes nothing that moved since.
155
+ *
156
+ * @returns What was done — `ignored` also when the episode moved after the plan
157
+ */
158
+ function commitWaitingObservation(plan) {
159
+ const obs = plan.observation;
160
+ const parts = { worktreeId: obs.worktreeId, cliToolId: obs.cliToolId, instanceId: obs.instanceId };
161
+ try {
162
+ switch (plan.action) {
163
+ case 'kept':
164
+ if (plan.episodeId === null || obs.reading.kind !== 'waiting')
165
+ return 'ignored';
166
+ return (0, waiting_episode_state_1.updateEpisodeKind)(parts, plan.episodeId, obs.reading.waitingKind) ? 'kept' : 'ignored';
167
+ case 'opened':
168
+ if (plan.next === null || (0, waiting_episode_state_1.getWaitingEpisodeRecord)(obs.worktreeId, obs.cliToolId, obs.instanceId) !== null) {
169
+ return 'ignored';
170
+ }
171
+ (0, waiting_episode_state_1.openEpisode)(parts, plan.next, plan.at);
172
+ return 'opened';
173
+ case 'replaced':
174
+ if (plan.next === null || plan.episodeId === null || plan.closeReason === null)
175
+ return 'ignored';
176
+ return (0, waiting_episode_state_1.replaceEpisode)(parts, plan.episodeId, plan.next, plan.closeReason, plan.at) !== null
177
+ ? 'replaced'
178
+ : 'ignored';
179
+ case 'rebound':
180
+ if (plan.binding === null || plan.episodeId === null)
181
+ return 'ignored';
182
+ return (0, waiting_episode_state_1.rebindEpisode)(parts, plan.episodeId, plan.binding, plan.at) ? 'rebound' : 'ignored';
183
+ case 'closed':
184
+ if (plan.episodeId === null || plan.closeReason === null)
185
+ return 'ignored';
186
+ return (0, waiting_episode_state_1.closeEpisode)(parts, plan.episodeId, plan.closeReason, plan.at) ? 'closed' : 'ignored';
187
+ case 'ignored':
188
+ if (plan.ignoredBecause === 'version' || plan.ignoredBecause === 'stale-frame' || plan.ignoredBecause === 'generation') {
189
+ logger.debug('waiting-observation-ignored', {
190
+ worktreeId: obs.worktreeId,
191
+ instanceId: obs.instanceId ?? obs.cliToolId,
192
+ observer: obs.observer,
193
+ reading: obs.reading.kind,
194
+ because: plan.ignoredBecause,
195
+ });
196
+ }
197
+ return 'ignored';
198
+ default:
199
+ plan.action;
200
+ return 'ignored';
201
+ }
202
+ }
203
+ catch (error) {
204
+ logger.warn('waiting-observation-failed', {
205
+ worktreeId: obs.worktreeId,
206
+ instanceId: obs.instanceId ?? obs.cliToolId,
207
+ observer: obs.observer,
208
+ error: error instanceof Error ? error.message : String(error),
209
+ });
210
+ return 'ignored';
211
+ }
212
+ }
213
+ /** {@link planWaitingObservation} and {@link commitWaitingObservation} in one step; the plan with what was done. */
214
+ function observeWaiting(obs) {
215
+ const plan = (0, waiting_episode_binding_observation_1.planWaitingObservation)(obs);
216
+ const action = commitWaitingObservation(plan);
217
+ return action === plan.action ? plan : { ...plan, action };
218
+ }
219
+ /**
220
+ * Fix the episode a legacy (`claude-done`) stop is about, before its first
221
+ * capture `await` (design 規則 6). The body read before it cannot be helped: the
222
+ * worktree id is in the body — a known limit (design §8).
223
+ */
224
+ function captureLegacyStopTarget(worktreeId, cliToolId, instanceId) {
225
+ const parts = { worktreeId, cliToolId, instanceId };
226
+ return {
227
+ generation: (0, waiting_episode_binding_resolve_1.generationOf)(parts),
228
+ episodeId: (0, waiting_episode_state_1.getWaitingEpisodeRecord)(worktreeId, cliToolId, instanceId)?.episodeId ?? null,
229
+ };
230
+ }
231
+ /**
232
+ * Close the episode a legacy stop was fixed on, if it is still the open one
233
+ * (design 規則 6). Nothing when the hook reported a stop in this generation
234
+ * (the hook speaks for the end of turns; closing again is the double close the
235
+ * rule forbids), when another episode opened meanwhile, or for a screen only a
236
+ * person drives.
237
+ *
238
+ * @param at - Epoch ms; defaults to now
239
+ */
240
+ function settleLegacyStop(worktreeId, cliToolId, instanceId, target, at = Date.now()) {
241
+ try {
242
+ const parts = { worktreeId, cliToolId, instanceId };
243
+ const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
244
+ const episode = (0, waiting_episode_state_1.getWaitingEpisodeRecord)(worktreeId, cliToolId, instanceId);
245
+ if (episode === null)
246
+ return 'nothing-open';
247
+ const current = (0, waiting_episode_binding_resolve_1.generationOf)(parts);
248
+ if (target.episodeId === null ||
249
+ episode.episodeId !== target.episodeId ||
250
+ !(0, waiting_episode_verdict_1.sameGeneration)(target.generation, current)) {
251
+ return 'target-gone';
252
+ }
253
+ const hookStop = hookStopGeneration.get(key);
254
+ if (hookStop !== undefined && (0, waiting_episode_verdict_1.sameGeneration)(hookStop, current))
255
+ return 'hook-authority';
256
+ if (episode.binding.kind === 'screen')
257
+ return 'screen';
258
+ return (0, waiting_episode_state_1.closeEpisode)(parts, episode.episodeId, 'legacy-stop', at) ? 'closed' : 'target-gone';
259
+ }
260
+ catch (error) {
261
+ logger.warn('waiting-episode-legacy-stop-failed', {
262
+ worktreeId,
263
+ instanceId: instanceId ?? cliToolId,
264
+ error: error instanceof Error ? error.message : String(error),
265
+ });
266
+ return 'nothing-open';
267
+ }
268
+ }
269
+ /** Forget the hook-stop marks. Test seam, called by `clearAgentStopEvents`. */
270
+ function clearWaitingEpisodeBindingState() {
271
+ hookStopGeneration.clear();
272
+ }
273
+ (0, waiting_episode_state_1.registerEpisodeBindingResolver)(waiting_episode_binding_resolve_1.resolveEpisodeBinding);
274
+ (0, agent_event_turn_1.registerTurnOutcomeSink)((parts, outcomes) => {
275
+ applyTurnOutcomesToEpisode(parts, outcomes);
276
+ });