commandmate 0.44.1 → 0.44.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +169 -169
  3. package/.next/app-path-routes-manifest.json +35 -35
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +0 -6
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/update/route.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route.js +1 -1
  12. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/app/update/route.js +2 -2
  15. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/auth/login/route.js +1 -1
  18. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/capabilities/route.js +1 -1
  22. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/route.js +1 -1
  24. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  25. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  27. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  28. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/external-apps/route.js +1 -1
  33. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  37. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  40. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  41. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  43. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  44. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/push/escalation/route.js +1 -1
  48. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/push/subscriptions/route.js +2 -2
  50. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/push/vapid/route.js +1 -1
  52. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  54. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  55. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/relays/route.js +1 -1
  57. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  58. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  61. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  63. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/clone/route.js +1 -1
  66. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/restore/route.js +1 -1
  70. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  71. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/route.js +1 -1
  73. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/scan/route.js +1 -1
  76. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/sync/route.js +1 -1
  79. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  83. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  84. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/sidebar/group-order/route.js +1 -1
  87. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/skills/[id]/route.js +1 -1
  89. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/skills/route.js +1 -1
  94. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/templates/[id]/route.js +2 -2
  99. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/templates/route.js +2 -2
  101. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  106. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
  117. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  128. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  129. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -2
  192. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  193. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -2
  195. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  196. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  199. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
  208. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
  211. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
  214. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  219. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
  238. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
  240. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  260. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  263. package/.next/server/app/api/worktrees/route.js +1 -1
  264. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  265. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  267. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  269. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  270. package/.next/server/app/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  272. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  273. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  274. package/.next/server/app/sessions/page.js +1 -1
  275. package/.next/server/app/sessions/page.js.nft.json +1 -1
  276. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  280. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/worktrees/[id]/page.js +11 -11
  282. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  283. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  285. package/.next/server/app-paths-manifest.json +35 -35
  286. package/.next/server/chunks/1191.js +2 -2
  287. package/.next/server/chunks/1210.js +1 -1
  288. package/.next/server/chunks/1559.js +2 -0
  289. package/.next/server/chunks/1789.js +1 -0
  290. package/.next/server/chunks/2119.js +1 -1
  291. package/.next/server/chunks/2404.js +1 -1
  292. package/.next/server/chunks/2445.js +1 -1
  293. package/.next/server/chunks/2460.js +1 -0
  294. package/.next/server/chunks/2710.js +1 -1
  295. package/.next/server/chunks/2908.js +1 -0
  296. package/.next/server/chunks/2980.js +1 -1
  297. package/.next/server/chunks/3241.js +1 -1
  298. package/.next/server/chunks/3480.js +1 -1
  299. package/.next/server/chunks/3718.js +1 -1
  300. package/.next/server/chunks/4207.js +2 -2
  301. package/.next/server/chunks/450.js +1 -1
  302. package/.next/server/chunks/4672.js +5 -0
  303. package/.next/server/chunks/{9353.js → 4718.js} +2 -2
  304. package/.next/server/chunks/4837.js +14 -0
  305. package/.next/server/chunks/5048.js +1 -1
  306. package/.next/server/chunks/5209.js +1 -0
  307. package/.next/server/chunks/5595.js +1 -0
  308. package/.next/server/chunks/5625.js +25 -0
  309. package/.next/server/chunks/5845.js +1 -0
  310. package/.next/server/chunks/611.js +1 -1
  311. package/.next/server/chunks/6130.js +1 -1
  312. package/.next/server/chunks/6401.js +1 -1
  313. package/.next/server/chunks/6781.js +1 -1
  314. package/.next/server/chunks/6793.js +3 -3
  315. package/.next/server/chunks/7491.js +2 -2
  316. package/.next/server/chunks/7905.js +1 -1
  317. package/.next/server/chunks/850.js +1 -0
  318. package/.next/server/chunks/8543.js +1 -1
  319. package/.next/server/chunks/8728.js +3 -3
  320. package/.next/server/chunks/8791.js +1 -1
  321. package/.next/server/chunks/8800.js +1 -1
  322. package/.next/server/chunks/8918.js +7 -7
  323. package/.next/server/chunks/9130.js +1 -5
  324. package/.next/server/chunks/9390.js +2 -3
  325. package/.next/server/chunks/9584.js +1 -1
  326. package/.next/server/chunks/9627.js +6 -6
  327. package/.next/server/chunks/9731.js +3 -3
  328. package/.next/server/middleware-manifest.json +5 -5
  329. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  330. package/.next/server/pages/500.html +1 -1
  331. package/.next/server/server-reference-manifest.json +1 -1
  332. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  333. package/.next/static/chunks/{2407-f1f258d4a1d92620.js → 2407-06d35bb1aa02de80.js} +1 -1
  334. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  335. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  336. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  337. package/.next/static/chunks/app/{layout-da66300cc20244ed.js → layout-0d1750b833f5cc3e.js} +1 -1
  338. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  339. package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
  340. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  341. package/.next/static/css/057f64a65726c439.css +1 -0
  342. package/.next/trace +13 -13
  343. package/dist/cli/commands/ask.d.ts.map +1 -1
  344. package/dist/cli/commands/ask.js +120 -119
  345. package/dist/cli/commands/attach.d.ts +94 -0
  346. package/dist/cli/commands/attach.d.ts.map +1 -1
  347. package/dist/cli/commands/attach.js +145 -7
  348. package/dist/cli/commands/auto-yes.js +1 -1
  349. package/dist/cli/commands/capture.d.ts.map +1 -1
  350. package/dist/cli/commands/capture.js +10 -13
  351. package/dist/cli/commands/command-target.d.ts +23 -0
  352. package/dist/cli/commands/command-target.d.ts.map +1 -0
  353. package/dist/cli/commands/command-target.js +25 -0
  354. package/dist/cli/commands/instances.d.ts.map +1 -1
  355. package/dist/cli/commands/instances.js +41 -2
  356. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  357. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  358. package/dist/cli/commands/message-dispatch.js +63 -0
  359. package/dist/cli/commands/reply.d.ts.map +1 -1
  360. package/dist/cli/commands/reply.js +2 -5
  361. package/dist/cli/commands/respond.d.ts.map +1 -1
  362. package/dist/cli/commands/respond.js +3 -6
  363. package/dist/cli/commands/send.d.ts.map +1 -1
  364. package/dist/cli/commands/send.js +149 -146
  365. package/dist/cli/commands/wait.d.ts.map +1 -1
  366. package/dist/cli/commands/wait.js +608 -416
  367. package/dist/cli/types/api-responses.d.ts +174 -27
  368. package/dist/cli/types/api-responses.d.ts.map +1 -1
  369. package/dist/cli/types/api-responses.js +4 -2
  370. package/dist/cli/utils/api-client.d.ts +25 -5
  371. package/dist/cli/utils/api-client.d.ts.map +1 -1
  372. package/dist/cli/utils/api-client.js +87 -55
  373. package/dist/cli/utils/server-url.d.ts +1 -0
  374. package/dist/cli/utils/server-url.d.ts.map +1 -1
  375. package/dist/cli/utils/server-url.js +7 -0
  376. package/dist/config/uat-isolation.d.ts +140 -0
  377. package/dist/config/uat-isolation.d.ts.map +1 -0
  378. package/dist/config/uat-isolation.js +246 -0
  379. package/dist/lib/global-state.d.ts +12 -0
  380. package/dist/lib/global-state.d.ts.map +1 -0
  381. package/dist/lib/global-state.js +16 -0
  382. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  383. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  384. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  385. package/dist/lib/session/prompt-view.d.ts +228 -0
  386. package/dist/lib/session/prompt-view.d.ts.map +1 -0
  387. package/dist/lib/session/prompt-view.js +290 -0
  388. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  389. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  390. package/dist/lib/session/status-evidence-type.js +2 -0
  391. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  392. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  393. package/dist/server/locales/en/worktree.json +3 -1
  394. package/dist/server/locales/ja/worktree.json +3 -1
  395. package/dist/server/server.js +5 -3
  396. package/dist/server/src/cli/types/api-responses.js +4 -2
  397. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  398. package/dist/server/src/config/uat-isolation.js +246 -0
  399. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  400. package/dist/server/src/lib/auto-yes-lifecycle.js +139 -0
  401. package/dist/server/src/lib/auto-yes-poller.js +465 -160
  402. package/dist/server/src/lib/auto-yes-state.js +2 -2
  403. package/dist/server/src/lib/cli-tools/antigravity.js +39 -80
  404. package/dist/server/src/lib/cli-tools/base.js +151 -0
  405. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  406. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  407. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  408. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  409. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  410. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  411. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  412. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  413. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  414. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  415. package/dist/server/src/lib/detection/cli-patterns.js +374 -3047
  416. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  417. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  418. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  419. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  420. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  421. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  422. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  423. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  424. package/dist/server/src/lib/detection/status-detector.js +1 -1
  425. package/dist/server/src/lib/detection/tools/antigravity/detect.js +12 -60
  426. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  427. package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
  428. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  429. package/dist/server/src/lib/detection/tools/claude/detect.js +11 -17
  430. package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
  431. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  432. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  433. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +1 -1
  434. package/dist/server/src/lib/detection/tools/codex/detect.js +71 -130
  435. package/dist/server/src/lib/detection/tools/codex/live-region.js +104 -0
  436. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  437. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  438. package/dist/server/src/lib/detection/tools/command-code/detect.js +19 -50
  439. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  440. package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
  441. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  442. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  443. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  444. package/dist/server/src/lib/detection/tools/copilot/detect.js +13 -35
  445. package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
  446. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  447. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  448. package/dist/server/src/lib/detection/tools/frame.js +36 -2
  449. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  450. package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
  451. package/dist/server/src/lib/detection/tools/live-region.js +204 -0
  452. package/dist/server/src/lib/detection/tools/opencode/detect.js +11 -49
  453. package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
  454. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  455. package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
  456. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +10 -42
  457. package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
  458. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  459. package/dist/server/src/lib/detection/tools/run-detection.js +31 -50
  460. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  461. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  462. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  463. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  464. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  465. package/dist/server/src/lib/global-state.js +16 -0
  466. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  467. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  468. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  469. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  470. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  471. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  472. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  473. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  474. package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
  475. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  476. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  477. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  478. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  479. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  480. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  481. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  482. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  483. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  484. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  485. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  486. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  487. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  488. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  489. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  490. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  491. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  492. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  493. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  494. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  495. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  496. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  497. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  498. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  499. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  500. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  501. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  502. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  503. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +16 -4
  504. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  505. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  506. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  507. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  508. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  509. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  510. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  511. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  512. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  513. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  514. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  515. package/dist/server/src/lib/polling/response-checker.js +666 -1162
  516. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  517. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  518. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  519. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  520. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  521. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  522. package/dist/server/src/lib/prompt-answer-sender.js +6 -5
  523. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  524. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  525. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  526. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  527. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  528. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -2
  529. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  530. package/dist/server/src/lib/relay/relay-delivery.js +6 -2
  531. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  532. package/dist/server/src/lib/relay/relay-triggers.js +9 -0
  533. package/dist/server/src/lib/resource-cleanup.js +6 -4
  534. package/dist/server/src/lib/response-cleaner.js +24 -1
  535. package/dist/server/src/lib/response-extractor.js +16 -0
  536. package/dist/server/src/lib/schedule-manager.js +8 -10
  537. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  538. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  539. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  540. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  541. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  542. package/dist/server/src/lib/session/agent-event-state.js +106 -1854
  543. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  544. package/dist/server/src/lib/session/agent-event-turn.js +811 -0
  545. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  546. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  547. package/dist/server/src/lib/session/claude-executor.js +45 -5
  548. package/dist/server/src/lib/session/claude-session.js +21 -65
  549. package/dist/server/src/lib/session/cli-session.js +17 -0
  550. package/dist/server/src/lib/session/current-output-builder.js +454 -1103
  551. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  552. package/dist/server/src/lib/session/current-output-types.js +9 -0
  553. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  554. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  555. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  556. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  557. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  558. package/dist/server/src/lib/session/prompt-view.js +290 -0
  559. package/dist/server/src/lib/session/prompt-waiting-composition.js +35 -0
  560. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  561. package/dist/server/src/lib/session/send-user-message.js +1 -1
  562. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  563. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  564. package/dist/server/src/lib/session/status-evidence.js +2 -2
  565. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  566. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  567. package/dist/server/src/lib/session/waiting-kind.js +3 -0
  568. package/dist/server/src/lib/session-cleanup.js +6 -8
  569. package/dist/server/src/lib/skills/install-plan.js +2 -1
  570. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  571. package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
  572. package/dist/server/src/lib/timer-manager.js +6 -8
  573. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  574. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  575. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  576. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  577. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  578. package/dist/server/src/lib/tmux/tmux.js +33 -59
  579. package/dist/server/src/lib/tui-accumulator.js +2 -2
  580. package/dist/server/src/lib/version-checker.js +6 -6
  581. package/dist/server/src/lib/ws-server.js +47 -11
  582. package/docs/en/user-guide/webapp-guide.md +27 -3
  583. package/package.json +1 -1
  584. package/release-notes/0.44.2.json +33 -0
  585. package/release-notes/0.44.3.json +82 -0
  586. package/scripts/hooks/cmate-agent-event.sh +18 -0
  587. package/.next/server/chunks/1068.js +0 -1
  588. package/.next/server/chunks/434.js +0 -1
  589. package/.next/server/chunks/5775.js +0 -1
  590. package/.next/server/chunks/6474.js +0 -14
  591. package/.next/server/chunks/650.js +0 -1
  592. package/.next/server/chunks/6661.js +0 -1
  593. package/.next/server/chunks/8583.js +0 -1
  594. package/.next/server/chunks/964.js +0 -1
  595. package/.next/server/chunks/967.js +0 -1
  596. package/.next/server/chunks/9882.js +0 -25
  597. package/.next/static/chunks/591-308072f285c34787.js +0 -1
  598. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  599. package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +0 -1
  600. package/.next/static/css/38070d879efa1371.css +0 -1
  601. package/dist/server/src/lib/cli-tools/index.js +0 -41
  602. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  603. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
  604. /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ /**
3
+ * The two-layer status merge: the screen scrape set against the agent's own
4
+ * account of its turn (Issue #3215).
5
+ *
6
+ * Moved verbatim out of `current-output-builder`, which re-exports
7
+ * `mergeStructuredStatus`, `ScraperVerdict` and `MergedStatusVerdict` under the
8
+ * same names, so an import from either module reads the same declaration. The
9
+ * comments came along unedited: where one says "this module", it was written
10
+ * about `current-output-builder`.
11
+ *
12
+ * `summarizeAskUserQuestion`, `staleReadyCandidate` and `readNewestPromptAt`
13
+ * are exported for `buildPayload` and for nothing else; they are not part of
14
+ * what `current-output-builder` re-exports.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.summarizeAskUserQuestion = summarizeAskUserQuestion;
18
+ exports.mergeStructuredStatus = mergeStructuredStatus;
19
+ exports.staleReadyCandidate = staleReadyCandidate;
20
+ exports.readNewestPromptAt = readNewestPromptAt;
21
+ // Issue #2429: the send ledger, read directly from `chat-db` rather than from
22
+ // the `@/lib/db` barrel because that barrel does not re-export it. It is the
23
+ // SAME row `commandmate wait` asks for over
24
+ // `GET /api/worktrees/:id/messages?limit=1&unit=pairs` (see `readNewestPromptAt`
25
+ // in `cli/commands/wait.ts`), so the server and the CLI cannot disagree about
26
+ // when this instance was last handed a prompt.
27
+ const chat_db_1 = require("../../lib/db/chat-db");
28
+ const logger_1 = require("../../lib/logger");
29
+ const prompt_waiting_composition_1 = require("../../lib/session/prompt-waiting-composition");
30
+ // Issue #3215: the name is the one this line has always been logged under. It
31
+ // is what an operator greps for, so it did not move with the code.
32
+ const logger = (0, logger_1.createLogger)('current-output-builder');
33
+ /**
34
+ * The `AskUserQuestion` call as the degraded prompt can describe it
35
+ * (Issue #1726).
36
+ *
37
+ * Only the first question, and no option numbers — see
38
+ * {@link StructuredAskUserQuestionSummary} for why a layer that cannot see the
39
+ * screen must not publish numbers for it.
40
+ */
41
+ function summarizeAskUserQuestion(episode) {
42
+ const first = episode?.spec.questions[0];
43
+ if (!first)
44
+ return null;
45
+ return {
46
+ question: first.question,
47
+ labels: first.choices.map((choice) => choice.label),
48
+ questionCount: episode.spec.questions.length,
49
+ // Issue #2951: a question that takes a typed answer, so the panel and the
50
+ // phone sheet can offer an input for it.
51
+ ...(first.custom ? { custom: true } : {}),
52
+ };
53
+ }
54
+ /**
55
+ * Prefer the agent's own account of what it is doing over the screen scrape
56
+ * (Issue #1723).
57
+ *
58
+ * Pure, and exported so the whole precedence table can be tested without a tmux
59
+ * session behind it.
60
+ *
61
+ * ## Why the scraper still wins in two cases
62
+ *
63
+ * **`waiting` on the scraper's side always wins.** A frame the detector reads
64
+ * as a prompt, a selection list or a pager is a frame a human has to act on,
65
+ * and this Issue deliberately does not touch `isPromptWaiting` / `promptData` /
66
+ * `isSelectionListActive` (they are #1725's). Letting a structured `running`
67
+ * overwrite `sessionStatus` while those three still said "answer me" would
68
+ * publish a self-contradicting payload. It is also the empirically necessary
69
+ * rule: the live capture found that Claude emits **no event at all** while an
70
+ * `AskUserQuestion` selection or "Ready to submit your answers?" screen is up
71
+ * (`agent-hooks-live-verification.md` §5.6), so the newest structured fact
72
+ * there is the `user_prompt_submit` that opened the turn — `running` — while
73
+ * the truth on screen is "waiting for a human". That is precisely the #1708
74
+ * stall, and the scraper is the only layer that can see it.
75
+ *
76
+ * **A structured `waiting` is applied only through the prompt-waiting state**
77
+ * (Issue #1725). #1723 recorded `Notification(permission_prompt)` and stopped
78
+ * there, for a reason that had to be answered before it could be promoted:
79
+ * nothing marks a permission prompt as *answered*, so a verdict read off the
80
+ * last event alone would stick until the next `Stop` and describe a session
81
+ * that went back to work minutes ago. `getStructuredPromptWaiting` is that
82
+ * answer — it is released by `Stop` / `user_prompt_submit` / a generation
83
+ * change, by the scraper reporting the frame it corroborated has cleared, and
84
+ * by expiry. So the `waiting` promoted here is the one that survives all of
85
+ * those, passed in explicitly; the raw `structured.status === 'waiting'` still
86
+ * decides nothing on its own.
87
+ *
88
+ * ## `isUnclassifiedActive` is not this function's to move (Issue #2011)
89
+ *
90
+ * The flag is carried through from the scraper on every path. It answers "could
91
+ * the detection layer read this frame?", and no amount of knowledge about the
92
+ * TURN changes the answer for the FRAME:
93
+ *
94
+ * - a static overlay left on screen after a turn (`/help`, #1497) reads as
95
+ * `running`/`no_recent_output` while the structured layer says `ready` — the
96
+ * structured layer adds nothing about the screen, and clearing the flag would
97
+ * take away the navigation hatch the user needs to escape;
98
+ * - a frame nobody can classify while the structured layer says `running` is
99
+ * still a frame nobody can classify. `wait`'s unclassified dwell (exit 10)
100
+ * is the last hatch for a screen that produces no events at all, and #1708
101
+ * exists because it was missing. A structured `running` does not prove a
102
+ * human is not needed — see the AskUserQuestion case above.
103
+ *
104
+ * `#1723`'s reported case — `Stop` arrives while the spinner is still painted —
105
+ * needs no help from here: that frame reads `running`/`thinking_indicator`, which
106
+ * is classified, so the flag was already down and `wait` completes on the
107
+ * structured `ready` alone.
108
+ *
109
+ * What this function DOES move is `evidence`, and only upwards: see
110
+ * {@link hookClosedTurn}.
111
+ *
112
+ * @param turn - The published turn record for this instance, or null. Read only
113
+ * for {@link hookClosedTurn}; `structured` remains the status authority.
114
+ */
115
+ function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn = null, lastPromptAt = null) {
116
+ if (scraper.status === 'waiting') {
117
+ return { ...scraper, structuredApplied: false };
118
+ }
119
+ // Issue #1725, the OR rule at the status level: the scraper reads this frame
120
+ // as running or ready, and the agent has told us a dialog is in front of it.
121
+ // Publishing `running` next to `isPromptWaiting: true` would be a payload
122
+ // that contradicts itself, and every consumer of `sessionStatus` — the
123
+ // sidebar dot, `deriveSessionStatus`, the worktrees API — would show a worker
124
+ // that needs a human as one that is busy.
125
+ if (promptWaiting !== null) {
126
+ return {
127
+ status: 'waiting',
128
+ reason: (0, prompt_waiting_composition_1.structuredWaitingReason)(promptWaiting),
129
+ thinking: false,
130
+ // Untouched: what the scraper could read about this frame does not change
131
+ // because the agent told us a dialog is open (Issue #1924).
132
+ evidence: scraper.evidence,
133
+ isUnclassifiedActive: scraper.isUnclassifiedActive,
134
+ structuredApplied: true,
135
+ };
136
+ }
137
+ if (structured === null || structured.status === 'waiting') {
138
+ return { ...scraper, structuredApplied: false };
139
+ }
140
+ // Issue #2429: the structured `ready` is about a turn older than the prompt
141
+ // this instance is currently answering, and the screen says so. See
142
+ // {@link structuredReadyPredatesPrompt} for why that combination is the only
143
+ // one in which the scraper wins a `running`.
144
+ if (structuredReadyPredatesPrompt(scraper, structured, turn, lastPromptAt)) {
145
+ return { ...scraper, structuredApplied: false };
146
+ }
147
+ const thinking = structured.status === 'running';
148
+ // Issue #2011 (対応 2): the agent's own turn close IS positive evidence.
149
+ //
150
+ // #1927 (DR2-003) guarded this override with `scraper.evidence === 'positive'`
151
+ // to stop a structured `ready` clearing `isUnclassifiedActive` on a frame
152
+ // nobody could read. It over-corrected twice over. First, the conjunct made
153
+ // the whole expression a no-op: `evidence = cond ? 'positive' : scraper.evidence`
154
+ // where `cond` requires `scraper.evidence === 'positive'` returns
155
+ // `scraper.evidence` on both arms, so the branch could not change a value in
156
+ // any direction. Second, the fix it was reaching for belonged one field over —
157
+ // the hatch is held open by {@link ScraperVerdict.isUnclassifiedActive}, which
158
+ // is carried through below rather than re-derived, so the evidence no longer
159
+ // has to be understated to protect it.
160
+ //
161
+ // What that leaves is a payload that stopped contradicting itself. A pane
162
+ // whose `reason` reads `hook_stop` while `statusEvidence` reads `'none'` is
163
+ // denying, in one field, the strongest positive signal this server can get: a
164
+ // `Stop` from the agent, for a turn this server watched open. `closedAt >
165
+ // openedAt` is what narrows it to that case — a `Stop` that arrived with no
166
+ // turn open publishes `openedAt: null` (see `recordAgentEvent`), and a close
167
+ // the SCREEN inferred carries one of the other {@link TurnCloseReason} values.
168
+ // Freshness needs no bound of its own: `getStructuredSessionState` answered
169
+ // null above once the display event passed STRUCTURED_STATE_MAX_AGE_MS.
170
+ //
171
+ // `scraper.status === 'running'` is deliberately NOT required. The session this
172
+ // Issue was reported from sat at `ready`/`input_prompt` with `closedBy: 'stop'`
173
+ // — the agent had said it was done and the frame agreed — and the old conjunct
174
+ // is what kept publishing `'none'` for it.
175
+ const evidence = structured.status === 'ready' && hookClosedTurn(turn) ? 'positive' : scraper.evidence;
176
+ return {
177
+ status: structured.status,
178
+ reason: structured.reason,
179
+ thinking,
180
+ evidence,
181
+ // Issue #2011: what the structured layer knows about the TURN says nothing
182
+ // about whether this FRAME could be read. #1708's dwell and the nav hatch
183
+ // are the last way out of a pane nothing can drive, and a `Stop` does not
184
+ // make an unreadable pane readable — see the `/help` overlay fixture in
185
+ // `tests/unit/lib/detection/fixtures/claude-live-2011/`.
186
+ isUnclassifiedActive: scraper.isUnclassifiedActive,
187
+ structuredApplied: true,
188
+ };
189
+ }
190
+ /**
191
+ * Whether the agent's own `Stop` closed a turn this server watched open
192
+ * (Issue #2011, 対応 2).
193
+ *
194
+ * Both halves are required. `closedBy: 'stop'` rules out the five close reasons
195
+ * that are the server's inference rather than the agent's word (`stale`,
196
+ * `generation`, `session_end`, `scraper_evidence`, `resync_idle`), and
197
+ * `closedAt > openedAt` rules out a `Stop` whose turn was never observed
198
+ * opening — `recordAgentEvent` publishes `openedAt: null` for that, and a close
199
+ * with nothing behind it is not a completion anybody watched.
200
+ */
201
+ function hookClosedTurn(turn) {
202
+ if (turn === null)
203
+ return false;
204
+ const { closedBy, closedAt, openedAt } = turn;
205
+ return closedBy === 'stop' && closedAt !== null && openedAt !== null && closedAt > openedAt;
206
+ }
207
+ /**
208
+ * Whether a structured `ready` could be about a turn that ended before the
209
+ * prompt now on screen (Issue #2429).
210
+ *
211
+ * The cheap half of {@link structuredReadyPredatesPrompt}, split out because
212
+ * `buildPayload` asks it FIRST: it is the gate on the one database read this
213
+ * rule needs, and a session that is not in this state must not pay for the send
214
+ * ledger on every poll. One expression, two callers — the alternative is the
215
+ * "two expressions for one fact" the merge's own docblock says is how this
216
+ * layer drifts.
217
+ *
218
+ * Three conjuncts, and all three are about the same instant:
219
+ *
220
+ * - **the screen is positively generating.** `ScraperVerdict.thinking` is
221
+ * `isGeneratingStatus`, i.e. `running` with `thinking_indicator` /
222
+ * `opencode_processing_indicator` behind it — a spinner, `✻ Thinking…` or
223
+ * `esc to interrupt` that a tool's own pattern matched. It is deliberately
224
+ * NOT `scraper.status === 'running'`: the `no_recent_output` and
225
+ * `unknown_frame` floors are also `running`, and neither is evidence of
226
+ * anything. A frame that merely stopped changing must never retire a `Stop`
227
+ * the agent actually sent.
228
+ * - **the structured layer says `ready`.** `running` and `waiting` already win
229
+ * on their own paths and are not in question here.
230
+ * - **that `ready` came from the agent's own `Stop`.**
231
+ * `getStructuredSessionState` publishes `ready / hook_stop` exactly when the
232
+ * turn record carries `closedBy: 'stop'` with a `closedAt`, so the record is
233
+ * read rather than the folded reason.
234
+ *
235
+ * `openedAt` is deliberately not required, which is what separates this from
236
+ * {@link hookClosedTurn}. A `Stop` that arrived with no turn open publishes
237
+ * `openedAt: null`, and for the tool this Issue was reported from that is the
238
+ * ORDINARY shape: Command Code cannot emit `UserPromptSubmit` (its loader
239
+ * validates the event name against a closed list) and emits no
240
+ * `PreToolUse` / `PostToolUse` on a turn that calls no tool, so nothing ever
241
+ * opens the turn. Requiring an `openedAt` here would exclude precisely the case
242
+ * this rule exists for.
243
+ */
244
+ function staleReadyCandidate(scraper, structured, turn) {
245
+ if (!scraper.thinking)
246
+ return false;
247
+ if (structured === null || structured.status !== 'ready')
248
+ return false;
249
+ if (turn === null)
250
+ return false;
251
+ return turn.closedBy === 'stop' && turn.closedAt !== null;
252
+ }
253
+ /**
254
+ * Whether the structured layer's `ready` has been outlived by the newest prompt
255
+ * this instance was handed (Issue #2429).
256
+ *
257
+ * ## The defect this closes
258
+ *
259
+ * The merge above prefers the agent's own account to the screen, and until this
260
+ * Issue the only exception was a scraper `waiting` (#1708). That is correct for
261
+ * every tool that can say when a turn BEGINS — claude, codex, copilot, gemini
262
+ * and antigravity all post a turn-opening event, so a live turn replaces the
263
+ * previous turn's `stop` before the first generating frame is ever read.
264
+ *
265
+ * Command Code can post neither: no `UserPromptSubmit`, and no `PreToolUse` /
266
+ * `PostToolUse` on a turn that calls no tool. The previous turn's `ready /
267
+ * hook_stop` therefore stays the newest structured fact for the whole of the
268
+ * next turn, and the merge published it over a pane that was visibly generating.
269
+ * Measured 2026-09-08 on a 19 s turn: `sessionStatus` read `ready / hook_stop`
270
+ * from 4 s to 18 s while the status row said `esc to interrupt`. `commandmate
271
+ * wait` reads that field — not the frame — for "is at its composer", so #1975's
272
+ * 60 s unanswered-prompt hold was the only thing standing between a long turn
273
+ * and a `basis=scraper_ready` completion reported before the reply existed.
274
+ *
275
+ * ## Why a comparison rather than a timer
276
+ *
277
+ * The same comparison `wait` already makes (`outstandingPrompt`), against the
278
+ * same two server-stamped facts: the turn's `closedAt`, and the timestamp of
279
+ * the newest user row in the chat ledger. A `Stop` that POSTDATES the newest
280
+ * prompt is this turn's own — the agent finished, the spinner on the frame is a
281
+ * repaint that has not settled, and the structured `ready` keeps winning. A
282
+ * `Stop` that predates it has reported neither the start nor the end of the
283
+ * work now on screen, and about that work it says nothing at all.
284
+ *
285
+ * Shortening #1975's hold would have been the other repair, and the Issue rules
286
+ * it out for a reason worth restating here: the hold is what stops a false
287
+ * completion during a turn nobody has reported yet, so a shorter one moves the
288
+ * false completion earlier rather than removing it.
289
+ *
290
+ * @param lastPromptAt - Epoch ms of the newest prompt handed to this instance,
291
+ * or null when the ledger was not read or holds none. Null decides nothing:
292
+ * an unreadable ledger is not evidence that nothing was sent, so the
293
+ * structured verdict stands exactly as it did before this Issue.
294
+ */
295
+ function structuredReadyPredatesPrompt(scraper, structured, turn, lastPromptAt) {
296
+ if (lastPromptAt === null)
297
+ return false;
298
+ if (!staleReadyCandidate(scraper, structured, turn))
299
+ return false;
300
+ const closedAt = turn?.closedAt ?? null;
301
+ return closedAt !== null && closedAt < lastPromptAt;
302
+ }
303
+ /**
304
+ * When this instance was last handed a prompt, or null (Issue #2429).
305
+ *
306
+ * The server's half of the comparison `commandmate wait` makes over HTTP. Both
307
+ * sides read the same row — the newest `role: 'user'` message scoped to this
308
+ * (worktree, tool, instance) — so the field this function feeds and the notice
309
+ * `wait` prints cannot describe different sends.
310
+ *
311
+ * Best effort, like {@link recordUnclassifiedFrame} and
312
+ * {@link recordStructuredPrompt}: the caller is building a payload, and a
313
+ * ledger that cannot be read must cost this one comparison and nothing else.
314
+ * Null is reported rather than a guess, and null leaves the pre-#2429
315
+ * precedence in place — an unreadable ledger is not evidence that nothing was
316
+ * sent, which is the position `wait` takes on the same read.
317
+ */
318
+ function readNewestPromptAt(db, worktreeId, cliToolId, instanceId) {
319
+ try {
320
+ const row = (0, chat_db_1.getLastUserMessageForInstance)(db, worktreeId, cliToolId, instanceId);
321
+ if (!row)
322
+ return null;
323
+ const at = row.timestamp instanceof Date ? row.timestamp.getTime() : NaN;
324
+ return Number.isFinite(at) ? at : null;
325
+ }
326
+ catch (error) {
327
+ logger.debug('newest-prompt-read-failed', {
328
+ worktreeId,
329
+ cliToolId,
330
+ instanceId,
331
+ error: error instanceof Error ? error.message : String(error),
332
+ });
333
+ return null;
334
+ }
335
+ }
@@ -47,13 +47,12 @@ exports.clearWaitingEpisodes = clearWaitingEpisodes;
47
47
  exports.clearWaitingTransitionListeners = clearWaitingTransitionListeners;
48
48
  const auto_yes_state_1 = require("../../lib/auto-yes-state");
49
49
  const logger_1 = require("../../lib/logger");
50
+ const global_state_1 = require("../global-state");
50
51
  const logger = (0, logger_1.createLogger)('waiting-episode-state');
51
52
  /** compositeKey -> the wait currently in progress for that instance. */
52
- const episodes = globalThis.__sessionWaitingEpisodes ??
53
- (globalThis.__sessionWaitingEpisodes = new Map());
53
+ const episodes = (0, global_state_1.getOrInitGlobal)('__sessionWaitingEpisodes', () => new Map());
54
54
  /** Subscribers to the edge. See the module docblock. */
55
- const listeners = globalThis.__sessionWaitingTransitionListeners ??
56
- (globalThis.__sessionWaitingTransitionListeners = new Set());
55
+ const listeners = (0, global_state_1.getOrInitGlobal)('__sessionWaitingTransitionListeners', () => new Set());
57
56
  /**
58
57
  * Subscribe to waiting edges.
59
58
  *
@@ -33,6 +33,7 @@ const status_detector_1 = require("../../lib/detection/status-detector");
33
33
  * |--------------------------------------------------|------------------|
34
34
  * | not waiting | `null` |
35
35
  * | `hasActivePrompt` | `'prompt'` |
36
+ * | `apiAnswerable` (#3184: answered over the agent's API) | `'prompt'` |
36
37
  * | scraper `waiting` + a {@link SELECTION_LIST_REASONS} reason | `'menu'` |
37
38
  * | anything else that is still waiting | `'unclassified'` |
38
39
  *
@@ -52,6 +53,8 @@ function deriveWaitingKind(input) {
52
53
  return null;
53
54
  if (input.hasActivePrompt)
54
55
  return 'prompt';
56
+ if (input.apiAnswerable === true)
57
+ return 'prompt';
55
58
  if (input.scraperStatus === 'waiting' && status_detector_1.SELECTION_LIST_REASONS.has(input.scraperReason)) {
56
59
  return 'menu';
57
60
  }
@@ -16,10 +16,9 @@ exports.createOwnedSessionKiller = createOwnedSessionKiller;
16
16
  exports.cleanupGlobalSessions = cleanupGlobalSessions;
17
17
  exports.syncWorktreesAndCleanup = syncWorktreesAndCleanup;
18
18
  const response_poller_1 = require("./polling/response-poller");
19
- const auto_yes_manager_1 = require("./polling/auto-yes-manager");
19
+ const auto_yes_lifecycle_1 = require("./auto-yes-lifecycle");
20
20
  const schedule_manager_1 = require("./schedule-manager");
21
21
  const timer_manager_1 = require("./timer-manager");
22
- const global_session_poller_1 = require("./polling/global-session-poller");
23
22
  const tmux_capture_cache_1 = require("./tmux/tmux-capture-cache");
24
23
  const types_1 = require("./cli-tools/types");
25
24
  const global_session_constants_1 = require("./session/global-session-constants");
@@ -87,7 +86,9 @@ async function cleanupWorktreeSessions(worktreeId, killSessionFn) {
87
86
  // 2. Stop auto-yes-poller for all agents (Issue #138, #525: byWorktree helper)
88
87
  // Order: stopAutoYesPollingByWorktree -> deleteAutoYesStateByWorktree -> stopScheduleForWorktree (Issue #404)
89
88
  try {
90
- (0, auto_yes_manager_1.stopAutoYesPollingByWorktree)(worktreeId);
89
+ // Issue #3184: the `worktree-deleted` row of the Auto-Yes lifecycle table,
90
+ // in its two halves so the two failures stay reported apart.
91
+ (0, auto_yes_lifecycle_1.stopAutoYesPollersFor)('worktree-deleted', { scope: 'worktree', worktreeId });
91
92
  result.pollersStopped.push('auto-yes-poller');
92
93
  }
93
94
  catch (error) {
@@ -97,7 +98,7 @@ async function cleanupWorktreeSessions(worktreeId, killSessionFn) {
97
98
  }
98
99
  // 3. Delete auto-yes state for all agents (Issue #404, #525: byWorktree helper)
99
100
  try {
100
- (0, auto_yes_manager_1.deleteAutoYesStateByWorktree)(worktreeId);
101
+ (0, auto_yes_lifecycle_1.applyAutoYesStateRule)('worktree-deleted', { scope: 'worktree', worktreeId });
101
102
  result.pollersStopped.push('auto-yes-state');
102
103
  }
103
104
  catch (error) {
@@ -213,8 +214,7 @@ function createOwnedSessionKiller(pathById) {
213
214
  }
214
215
  /**
215
216
  * Clean up all global assistant sessions.
216
- * Issue #649: Kill any orphaned mcbd-{cli_tool_id}-__global__ tmux sessions
217
- * and stop all global session pollers.
217
+ * Issue #649: Kill any orphaned mcbd-{cli_tool_id}-__global__ tmux sessions.
218
218
  *
219
219
  * Called during server shutdown and syncWorktreesAndCleanup.
220
220
  * Errors are logged but do not propagate (cleanup is best-effort).
@@ -222,8 +222,6 @@ function createOwnedSessionKiller(pathById) {
222
222
  * @returns Number of sessions killed
223
223
  */
224
224
  async function cleanupGlobalSessions() {
225
- // Stop all global pollers first
226
- (0, global_session_poller_1.stopAllGlobalSessionPolling)();
227
225
  let sessionsKilled = 0;
228
226
  const manager = manager_1.CLIToolManager.getInstance();
229
227
  for (const cliToolId of types_1.CLI_TOOL_IDS) {
@@ -41,6 +41,7 @@ const schema_1 = require("../../lib/skills/schema");
41
41
  const constants_1 = require("../../lib/skills/constants");
42
42
  const snapshot_store_1 = require("../../lib/skills/snapshot-store");
43
43
  const preview_diff_1 = require("../../lib/skills/preview-diff");
44
+ const global_state_1 = require("../global-state");
44
45
  // =============================================================================
45
46
  // Layout and limits
46
47
  // =============================================================================
@@ -206,7 +207,7 @@ function parseInstalledReceipt(bytes) {
206
207
  return null;
207
208
  }
208
209
  }
209
- const cache = globalThis.__skillInstallPlans ?? (globalThis.__skillInstallPlans = { records: new Map() });
210
+ const cache = (0, global_state_1.getOrInitGlobal)('__skillInstallPlans', () => ({ records: new Map() }));
210
211
  function dropRecord(record) {
211
212
  cache.records.delete(record.token);
212
213
  // The snapshot reference was taken for this plan; an unconsumed plan must not
@@ -38,8 +38,8 @@ const skill_security_config_1 = require("../../config/skill-security-config");
38
38
  const system_directories_1 = require("../../config/system-directories");
39
39
  const skills_1 = require("../../lib/skills");
40
40
  const integrity_1 = require("../../lib/skills/integrity");
41
- const state = globalThis.__skillSnapshotStore ??
42
- (globalThis.__skillSnapshotStore = { rootDir: null, records: new Map(), totalBytes: 0 });
41
+ const global_state_1 = require("../global-state");
42
+ const state = (0, global_state_1.getOrInitGlobal)('__skillSnapshotStore', () => ({ rootDir: null, records: new Map(), totalBytes: 0 }));
43
43
  const SNAPSHOT_FILE_SUFFIX = '.artifact';
44
44
  // =============================================================================
45
45
  // Initialization
@@ -42,6 +42,7 @@ const integrity_1 = require("../../lib/skills/integrity");
42
42
  const install_plan_1 = require("../../lib/skills/install-plan");
43
43
  const constants_2 = require("../../lib/skills/constants");
44
44
  const preview_diff_1 = require("../../lib/skills/preview-diff");
45
+ const global_state_1 = require("../global-state");
45
46
  /** Stable machine reasons, one per disposition plus the plan-level failures. */
46
47
  exports.SkillUninstallReason = {
47
48
  /** Recorded, unchanged, and therefore deletable. */
@@ -256,8 +257,7 @@ function canonicalJson(value) {
256
257
  function computeSkillUninstallBindingHash(binding) {
257
258
  return (0, crypto_1.createHash)('sha256').update(canonicalJson(binding)).digest('hex');
258
259
  }
259
- const cache = globalThis.__skillUninstallPlans ??
260
- (globalThis.__skillUninstallPlans = { records: new Map() });
260
+ const cache = (0, global_state_1.getOrInitGlobal)('__skillUninstallPlans', () => ({ records: new Map() }));
261
261
  /** Token grammar. Anything else is rejected before the store is consulted. */
262
262
  exports.SKILL_UNINSTALL_PLAN_TOKEN_PATTERN = /^[0-9a-f]{48}$/;
263
263
  const SKILL_UNINSTALL_PLAN_TOKEN_BYTES = 24;
@@ -21,16 +21,14 @@ const db_instance_1 = require("../lib/db/db-instance");
21
21
  const logger_1 = require("../lib/logger");
22
22
  const timer_constants_1 = require("../config/timer-constants");
23
23
  const send_user_message_1 = require("../lib/session/send-user-message");
24
+ const global_state_1 = require("./global-state");
24
25
  const logger = (0, logger_1.createLogger)('timer-manager');
25
26
  function getState() {
26
- if (!globalThis.__timerManagerState) {
27
- globalThis.__timerManagerState = {
28
- timers: new Map(),
29
- timerWorktrees: new Map(),
30
- initialized: false,
31
- };
32
- }
33
- return globalThis.__timerManagerState;
27
+ return (0, global_state_1.getOrInitGlobal)('__timerManagerState', () => ({
28
+ timers: new Map(),
29
+ timerWorktrees: new Map(),
30
+ initialized: false,
31
+ }));
34
32
  }
35
33
  // =============================================================================
36
34
  // Timer Execution [DP-004/CON-MF-001]
@@ -45,6 +45,7 @@ exports.resetGeometryDelegationState = resetGeometryDelegationState;
45
45
  const child_process_1 = require("child_process");
46
46
  const util_1 = require("util");
47
47
  const tmux_session_surface_1 = require("../session/tmux-session-surface");
48
+ const global_state_1 = require("../global-state");
48
49
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
49
50
  /** tmux calls here are interactive-latency, not long-running. */
50
51
  const TMUX_TIMEOUT = 5000;
@@ -56,10 +57,8 @@ const TMUX_TIMEOUT = 5000;
56
57
  * (the status helper, the response checker) share a single tmux round-trip.
57
58
  */
58
59
  exports.DELEGATION_TTL_MS = 1000;
59
- const cache = globalThis.__cmGeometryDelegationCache ??
60
- (globalThis.__cmGeometryDelegationCache = new Map());
61
- const lastObserved = globalThis.__cmGeometryDelegationEdge ??
62
- (globalThis.__cmGeometryDelegationEdge = new Map());
60
+ const cache = (0, global_state_1.getOrInitGlobal)('__cmGeometryDelegationCache', () => new Map());
61
+ const lastObserved = (0, global_state_1.getOrInitGlobal)('__cmGeometryDelegationEdge', () => new Map());
63
62
  /**
64
63
  * Whether `@cm_delegated` is set to `1` on a session.
65
64
  *
@@ -27,8 +27,9 @@ exports.registerLegacyAlias = registerLegacyAlias;
27
27
  exports.lookupLegacyAlias = lookupLegacyAlias;
28
28
  exports.dropLegacyAliasByLegacyName = dropLegacyAliasByLegacyName;
29
29
  exports.clearLegacyAliasesForTests = clearLegacyAliasesForTests;
30
+ const global_state_1 = require("../global-state");
30
31
  function aliases() {
31
- return (globalThis.__cmLegacySessionAliases ??= new Map());
32
+ return (0, global_state_1.getOrInitGlobal)('__cmLegacySessionAliases', () => new Map());
32
33
  }
33
34
  /**
34
35
  * Serve the new-format session name `newName` with the existing legacy session
@@ -28,11 +28,12 @@ const tmux_session_surface_1 = require("../session/tmux-session-surface");
28
28
  const session_hook_scripts_1 = require("./session-hook-scripts");
29
29
  const geometry_delegation_1 = require("./geometry-delegation");
30
30
  const logger_1 = require("../logger");
31
+ const global_state_1 = require("../global-state");
31
32
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
32
33
  const logger = (0, logger_1.createLogger)('tmux-session-hooks');
33
34
  /** tmux calls here are interactive-latency, not long-running. */
34
35
  const TMUX_TIMEOUT = 5000;
35
- const ensured = globalThis.__cmEnsuredSessionHooks ?? (globalThis.__cmEnsuredSessionHooks = new Set());
36
+ const ensured = (0, global_state_1.getOrInitGlobal)('__cmEnsuredSessionHooks', () => new Set());
36
37
  /**
37
38
  * Reconcile a session's opt-in `client-attached` hooks with the environment.
38
39
  *
@@ -58,14 +58,14 @@ const child_process_1 = require("child_process");
58
58
  const util_1 = require("util");
59
59
  const tmux_session_surface_1 = require("../session/tmux-session-surface");
60
60
  const logger_1 = require("../logger");
61
+ const global_state_1 = require("../global-state");
61
62
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
62
63
  const logger = (0, logger_1.createLogger)('tmux-session-status');
63
64
  /** tmux calls here are interactive-latency, not long-running. */
64
65
  const TMUX_TIMEOUT = 5000;
65
- const published = globalThis.__cmPublishedTmuxStatus ??
66
- (globalThis.__cmPublishedTmuxStatus = new Map());
66
+ const published = (0, global_state_1.getOrInitGlobal)('__cmPublishedTmuxStatus', () => new Map());
67
67
  /** Sessions this process has already uninstalled the surface from. */
68
- const cleared = globalThis.__cmClearedTmuxStatus ?? (globalThis.__cmClearedTmuxStatus = new Set());
68
+ const cleared = (0, global_state_1.getOrInitGlobal)('__cmClearedTmuxStatus', () => new Set());
69
69
  /**
70
70
  * Write one session's state onto its tmux session, if it changed.
71
71
  *
@@ -30,6 +30,7 @@ exports.resetCacheForTesting = resetCacheForTesting;
30
30
  exports.getOrFetchCapture = getOrFetchCapture;
31
31
  /** Cache entry structure */
32
32
  const logger_1 = require("../../lib/logger");
33
+ const global_state_1 = require("../global-state");
33
34
  const logger = (0, logger_1.createLogger)('tmux-capture-cache');
34
35
  // =========================================================================
35
36
  // Constants
@@ -79,10 +80,10 @@ function isCaptureWindowSaturated(capturedLineCount, windowLines = exports.CACHE
79
80
  return windowLines > 0 && capturedLineCount >= windowLines;
80
81
  }
81
82
  function getCache() {
82
- return (globalThis.__tmuxCaptureCache ??= new Map());
83
+ return (0, global_state_1.getOrInitGlobal)('__tmuxCaptureCache', () => new Map());
83
84
  }
84
85
  function getInflight() {
85
- return (globalThis.__tmuxCaptureCacheInflight ??= new Map());
86
+ return (0, global_state_1.getOrInitGlobal)('__tmuxCaptureCacheInflight', () => new Map());
86
87
  }
87
88
  // =========================================================================
88
89
  // sliceOutput()