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
@@ -19,14 +19,20 @@ exports.isCodexStalePrompt = isCodexStalePrompt;
19
19
  exports.isCodexModelPickerFrame = isCodexModelPickerFrame;
20
20
  const cli_patterns_1 = require("../../cli-patterns");
21
21
  const prompt_detector_1 = require("../../prompt-detector");
22
+ const verdicts_1 = require("../verdicts");
22
23
  const status_reason_1 = require("../../status-reason");
23
24
  const cli_patterns_2 = require("./cli-patterns");
24
25
  const prompt_1 = require("./prompt");
25
26
  const frame_1 = require("../frame");
26
27
  const dialog_block_1 = require("../dialog-block");
28
+ const live_region_1 = require("./live-region");
29
+ const patterns_1 = require("./patterns");
27
30
  const run_detection_1 = require("../run-detection");
28
31
  const verified_against_1 = require("../verified-against");
29
32
  const thinking_constants_1 = require("../../../../config/thinking-constants");
33
+ function detectCodexPrompt(clean) {
34
+ return (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex'));
35
+ }
30
36
  /** codex-cli build these rules were read off (#1628 / #1829 / #1890; value in ../verified-against, #1929). */
31
37
  exports.VERIFIED_AGAINST = verified_against_1.CODEX_VERIFIED_AGAINST;
32
38
  /**
@@ -43,38 +49,6 @@ exports.VERIFIED_AGAINST = verified_against_1.CODEX_VERIFIED_AGAINST;
43
49
  */
44
50
  const CODEX_CONFIRMATION_FOOTER_PATTERN = /press\s+(?:number|enter)\s+to\s+confirm/i;
45
51
  const CODEX_NUMBERED_OPTION_PATTERN = /^\s*[❯›●]?\s*\d{1,2}[.)]\s/;
46
- /**
47
- * Index of the Codex status bar within the last 10 content rows, or -1.
48
- *
49
- * Issue #2818: a bar carrying a thread title or the Plan-mode badge after the
50
- * path (codex 0.154.0+) is the same bar, so it is a boundary too. Without it
51
- * such frames fell to branch D, whose 15-row tail still holds a finished
52
- * turn's `• Ran …` record, and an idle session read `running`.
53
- */
54
- function findCodexFooterBoundary(contentLines) {
55
- for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
56
- const line = contentLines[ci];
57
- if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(line) || cli_patterns_1.CODEX_TRAILED_STATUS_BAR_PATTERN.test(line))
58
- return ci;
59
- }
60
- return -1;
61
- }
62
- /**
63
- * Exclusive end of the conversation area — the row below the status bar, with
64
- * the padding above it walked off (Issue #1928).
65
- *
66
- * The same boundary branches 0.8 and 2.7 compute inline, named once so
67
- * `detectDialog` reads the region THEY read. Falls back to the whole frame when
68
- * the bar cannot be located, which is Issue #1150's drift case: there the tail
69
- * is the conversation, so the dialog rule still has the right rows.
70
- */
71
- function findCodexContentEnd(contentLines) {
72
- const boundary = findCodexFooterBoundary(contentLines);
73
- let end = boundary >= 0 ? boundary - 1 : contentLines.length - 1;
74
- while (end >= 0 && contentLines[end].trim() === '')
75
- end--;
76
- return end + 1;
77
- }
78
52
  /**
79
53
  * Issue #1160: decide whether a Codex prompt that detectPrompt() matched is a stale,
80
54
  * already-answered prompt left in the 50-line scan window rather than an active one.
@@ -98,7 +72,7 @@ function findCodexContentEnd(contentLines) {
98
72
  * here — keeping the guard conservative against flipping a genuine prompt to running.
99
73
  */
100
74
  function isCodexStalePrompt(contentLines) {
101
- const footerBoundary = findCodexFooterBoundary(contentLines);
75
+ const footerBoundary = (0, live_region_1.findCodexFooterBoundary)(contentLines);
102
76
  const end = footerBoundary >= 0 ? footerBoundary : contentLines.length;
103
77
  let lastPromptIdx = -1;
104
78
  let lastThinkingIdx = -1;
@@ -163,9 +137,28 @@ function isCodexApprovalRequest(promptDetection, selectionWindow) {
163
137
  function isCodexDialogGlyphTail(raw) {
164
138
  return (0, cli_patterns_2.findCodexBottomGlyphRow)(raw)?.kind === 'option';
165
139
  }
140
+ /**
141
+ * Issue #3205: the bottom content row as the idle/running branches read it.
142
+ *
143
+ * A composer holding several lines puts its continuation rows below the `›`
144
+ * row, so `lastRow` is then the composer's last line (` world`), which is
145
+ * neither the `›` the idle branch looks for nor anything codex is working on —
146
+ * branch C read every such frame as `running`. When the live region's composer
147
+ * ends on `lastRow`, the composer's `›` row is returned instead, so its 2nd and
148
+ * later lines are read as composer text and never as transcript or a working
149
+ * row. Any other frame keeps `lastRow`.
150
+ */
151
+ function codexTailRowAboveComposerText(frame, lastRow) {
152
+ const region = (0, frame_1.liveRegionOf)(frame, 'codex');
153
+ if (region.anchor !== 'composer' || region.composerEndRow !== lastRow)
154
+ return lastRow;
155
+ return region.startRow;
156
+ }
166
157
  exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
167
158
  tool: 'codex',
168
159
  verifiedAgainst: exports.VERIFIED_AGAINST,
160
+ // Issue #3183: where the live part of the frame begins (`./live-region.ts`).
161
+ liveRegion: live_region_1.CODEX_LIVE_REGION,
169
162
  beforePrompt(frame) {
170
163
  const { contentLines } = frame;
171
164
  // 0.6. The composer is the pane's bottom → no dialog is open (Issue #2841).
@@ -175,7 +168,11 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
175
168
  // dialog is up, so a composer at the bottom vetoes all of them at once, and
176
169
  // the chain goes on to the prompt / thinking / idle readings it would have
177
170
  // reached had the transcript not quoted anything.
178
- if ((0, cli_patterns_2.isCodexComposerAtBottom)(frame.raw, contentLines, findCodexContentEnd(contentLines))) {
171
+ //
172
+ // Issue #3183: "the composer is the bottom" is the live region's
173
+ // `composerAtBottom`, located once by `normalizeFrame` from
174
+ // `CODEX_LIVE_REGION` (the #2841 reading, unchanged).
175
+ if ((0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom) {
179
176
  return null;
180
177
  }
181
178
  // 0.7. Codex: pager / edit-previous (transcript) mode detection (Issue #1017)
@@ -193,14 +190,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
193
190
  // content must not be misread as one. CODEX_PAGER_FOOTER_PATTERN does not match the
194
191
  // genuine "/model" selection footer, so the 0.8 path below is unaffected (no regression).
195
192
  if (cli_patterns_1.CODEX_PAGER_FOOTER_PATTERN.test(frame.lastLines)) {
196
- return {
197
- status: 'waiting',
198
- confidence: 'high',
199
- reason: status_reason_1.STATUS_REASON.CODEX_PAGER,
200
- hasActivePrompt: false,
201
- evidence: 'positive',
202
- promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
203
- };
193
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_PAGER, detectCodexPrompt(frame.clean));
204
194
  }
205
195
  // 0.75. Codex: the hooks review screens (Issue #1829)
206
196
  // codex-cli 0.148.0 answers "1. Review hooks" with a two-screen review UI:
@@ -213,16 +203,9 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
213
203
  // interactive element and nothing but a keypress moves them: that is `waiting`.
214
204
  // Checked ahead of prompt detection because the transcript rows on screen 2 are
215
205
  // ordinary text that must not be read as options.
216
- const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)(frame.clean);
206
+ const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)((0, frame_1.withLiveRegion)(frame, 'codex'));
217
207
  if (codexLifecycleDialog === 'hooks-list' || codexLifecycleDialog === 'hooks-detail') {
218
- return {
219
- status: 'waiting',
220
- confidence: 'high',
221
- reason: status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW,
222
- hasActivePrompt: false,
223
- evidence: 'positive',
224
- promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
225
- };
208
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW, detectCodexPrompt(frame.clean));
226
209
  }
227
210
  // 0.8. Codex: selection list detection BEFORE prompt detection (Issue #622)
228
211
  // CODEX_SELECTION_LIST_PATTERN matches "press enter to confirm/select" footer.
@@ -238,11 +221,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
238
221
  // Issue #1150: the status bar is located via CODEX_STATUS_BAR_PATTERN (version-
239
222
  // independent; matches both legacy "N% left ·" and v0.141 "model · path" bars),
240
223
  // and since #2818 via CODEX_TRAILED_STATUS_BAR_PATTERN too (0.154+ "· <title>").
241
- const codexFooterBoundary = findCodexFooterBoundary(contentLines);
242
- let codexContentEnd = codexFooterBoundary >= 0 ? codexFooterBoundary - 1 : contentLines.length - 1;
243
- while (codexContentEnd >= 0 && contentLines[codexContentEnd].trim() === '') {
244
- codexContentEnd--;
245
- }
224
+ const codexContentEnd = (0, live_region_1.findCodexContentEnd)(contentLines) - 1;
246
225
  if (codexContentEnd >= 0) {
247
226
  const codexSelectionWindow = contentLines
248
227
  .slice(Math.max(0, codexContentEnd - frame_1.STATUS_CHECK_LINE_COUNT + 1), codexContentEnd + 1)
@@ -255,7 +234,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
255
234
  if (cli_patterns_1.CODEX_SELECTION_LIST_PATTERN.test(codexSelectionWindow) ||
256
235
  cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(codexLastRow) ||
257
236
  cli_patterns_1.CODEX_EFFORT_PICKER_FOOTER_PATTERN.test(codexLastRow)) {
258
- const codexPromptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex'));
237
+ const codexPromptDetection = detectCodexPrompt(frame.clean);
259
238
  // Issue #1628: an approval request wears the same footer as a menu but is the
260
239
  // agent blocked on the human, so it must surface as an active prompt (exit 10
261
240
  // for `wait`, PromptPanel in the UI) instead of a navigable list. The #1160
@@ -263,23 +242,9 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
263
242
  // still inside the window, with Codex running below it, is dead scrollback.
264
243
  if (isCodexApprovalRequest(codexPromptDetection, codexSelectionWindow) &&
265
244
  !isCodexStalePrompt(contentLines)) {
266
- return {
267
- status: 'waiting',
268
- confidence: 'high',
269
- reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
270
- hasActivePrompt: true,
271
- evidence: 'positive',
272
- promptDetection: codexPromptDetection,
273
- };
245
+ return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, codexPromptDetection);
274
246
  }
275
- return {
276
- status: 'waiting',
277
- confidence: 'high',
278
- reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
279
- hasActivePrompt: false,
280
- evidence: 'positive',
281
- promptDetection: codexPromptDetection,
282
- };
247
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST, codexPromptDetection);
283
248
  }
284
249
  }
285
250
  // 0.85. Codex: every OTHER dialog — recognised by structure (Issue #2310)
@@ -310,32 +275,18 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
310
275
  // block with codex working below it is scrollback, not a dialog — and the
311
276
  // glyph rule agrees independently, because the bottom-most `›` on such a
312
277
  // frame is the composer codex draws while it works.
313
- const codexDialogFrame = (0, cli_patterns_2.readCodexDialogFrame)(frame.raw, contentLines, findCodexContentEnd(contentLines));
278
+ const codexDialogFrame = (0, cli_patterns_2.readCodexDialogFrame)(frame.raw, contentLines, (0, live_region_1.findCodexContentEnd)(contentLines));
314
279
  if (codexDialogFrame && !isCodexStalePrompt(contentLines)) {
315
280
  // The footer is not consulted for the verdict; an unrecognised one means
316
281
  // codex reworded a screen, which is worth saying out loud exactly once.
317
282
  if (!codexDialogFrame.footerRecognised) {
318
283
  (0, cli_patterns_2.reportCodexDialogFooterDrift)(codexDialogFrame.footer);
319
284
  }
320
- const codexPromptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex'));
285
+ const codexPromptDetection = detectCodexPrompt(frame.clean);
321
286
  if (codexPromptDetection.isPrompt) {
322
- return {
323
- status: 'waiting',
324
- confidence: 'high',
325
- reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
326
- hasActivePrompt: true,
327
- evidence: 'positive',
328
- promptDetection: codexPromptDetection,
329
- };
287
+ return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, codexPromptDetection);
330
288
  }
331
- return {
332
- status: 'waiting',
333
- confidence: 'high',
334
- reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
335
- hasActivePrompt: false,
336
- evidence: 'positive',
337
- promptDetection: codexPromptDetection,
338
- };
289
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST, codexPromptDetection);
339
290
  }
340
291
  return null;
341
292
  },
@@ -343,7 +294,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
343
294
  // Issue #2841: a prompt above the composer is conversation text, not a
344
295
  // dialog — the same veto branch 0.6 applies to the status branches.
345
296
  return (isCodexStalePrompt(frame.contentLines) ||
346
- (0, cli_patterns_2.isCodexComposerAtBottom)(frame.raw, frame.contentLines, findCodexContentEnd(frame.contentLines)));
297
+ (0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom);
347
298
  },
348
299
  // §4 D1 決定 4 (Issue #1928). All three inputs are readings this module
349
300
  // already performs for its status branches, passed rather than recomputed:
@@ -353,13 +304,15 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
353
304
  // Issue #2841: Auto-Yes and `respond` act on this answer, so it takes the
354
305
  // same veto as the status branches — before the lifecycle screens too, whose
355
306
  // wording (`Do you trust …`) can be quoted like any other.
356
- const contentEnd = findCodexContentEnd(frame.contentLines);
357
- if ((0, cli_patterns_2.isCodexComposerAtBottom)(frame.raw, frame.contentLines, contentEnd))
307
+ // Issue #3183: the veto itself is applied by `createToolStatusDetector`'s
308
+ // wrapper from the live region, for every tool; this early return only
309
+ // saves the parse.
310
+ if ((0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom)
358
311
  return null;
359
312
  return (0, prompt_1.detectCodexDialog)(frame, {
360
- contentEnd,
313
+ contentEnd: (0, live_region_1.findCodexContentEnd)(frame.contentLines),
361
314
  stalePrompt: isCodexStalePrompt(frame.contentLines),
362
- lifecycleDialog: (0, cli_patterns_1.getCodexLifecycleDialog)(frame.clean),
315
+ lifecycleDialog: (0, cli_patterns_1.getCodexLifecycleDialog)((0, frame_1.withLiveRegion)(frame, 'codex')),
363
316
  });
364
317
  },
365
318
  afterThinking(frame) {
@@ -370,26 +323,25 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
370
323
  // A. Thinking indicators (• Ran, • Planning) in the conversation area → should show spinner
371
324
  // B. Idle prompt (›) at the end of the conversation area → should show ready
372
325
  // Strategy: find the Codex status bar, extract content above it, then check for thinking/idle.
373
- const codexFooterBoundary = findCodexFooterBoundary(contentLines);
326
+ const codexFooterBoundary = (0, live_region_1.findCodexFooterBoundary)(contentLines);
374
327
  if (codexFooterBoundary >= 0) {
375
328
  // Find last non-empty content line above footer (skip padding + input area)
376
329
  let lastContentIdx = codexFooterBoundary - 1;
377
330
  while (lastContentIdx >= 0 && contentLines[lastContentIdx].trim() === '') {
378
331
  lastContentIdx--;
379
332
  }
333
+ // Issue #3205: a multi-line composer ends on its own `›` row here.
334
+ lastContentIdx = codexTailRowAboveComposerText(frame, lastContentIdx);
380
335
  if (lastContentIdx >= 0) {
381
336
  // A. Check content area for thinking indicators (wider window than the shared step)
382
337
  const codexThinkingWindow = contentLines
383
338
  .slice(Math.max(0, lastContentIdx - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastContentIdx + 1)
384
339
  .join('\n');
385
- if ((0, cli_patterns_1.detectThinking)('codex', codexThinkingWindow)) {
386
- return {
387
- status: 'running',
388
- confidence: 'high',
389
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
390
- hasActivePrompt: false,
391
- evidence: 'positive',
392
- };
340
+ // Issue #3337: or the live status row, whatever its bullet and header —
341
+ // codex 0.160.0's `◦ Working (43s • esc to interrupt)` frame reached B.
342
+ if ((0, cli_patterns_1.detectThinking)('codex', codexThinkingWindow) ||
343
+ patterns_1.CODEX_LIVE_STATUS_ROW_PATTERN.test(codexThinkingWindow)) {
344
+ return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
393
345
  }
394
346
  // B. Check if the last content line is the idle › prompt.
395
347
  // The last non-empty line above the status bar is the current active line.
@@ -409,26 +361,14 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
409
361
  // ANSI has been stripped still reports idle exactly as it did before.
410
362
  if (cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[lastContentIdx].trim()) &&
411
363
  !isCodexDialogGlyphTail(frame.raw)) {
412
- return {
413
- status: 'ready',
414
- confidence: 'high',
415
- reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
416
- hasActivePrompt: false,
417
- evidence: 'positive',
418
- };
364
+ return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
419
365
  }
420
366
  // C. Fallback: status bar present but neither thinking nor idle › detected.
421
367
  // This means Codex is actively processing — command output has pushed the
422
368
  // • Ran/• Working indicators beyond the 5-line thinking window.
423
369
  // The status bar ("model · N% left · path") is always visible during Codex
424
370
  // sessions, and the only idle state (›) was checked in B above.
425
- return {
426
- status: 'running',
427
- confidence: 'high',
428
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
429
- hasActivePrompt: false,
430
- evidence: 'positive',
431
- };
371
+ return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
432
372
  }
433
373
  }
434
374
  else {
@@ -449,17 +389,15 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
449
389
  while (codexTailIdx >= 0 && contentLines[codexTailIdx].trim() === '') {
450
390
  codexTailIdx--;
451
391
  }
392
+ // Issue #3205: as in 2.7, a multi-line composer is read from its `›` row.
393
+ codexTailIdx = codexTailRowAboveComposerText(frame, codexTailIdx);
452
394
  const codexTailIsIdlePrompt = codexTailIdx >= 0 &&
453
395
  cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[codexTailIdx].trim()) &&
454
396
  !isCodexDialogGlyphTail(frame.raw);
455
- if (!codexTailIsIdlePrompt && (0, cli_patterns_1.detectThinking)('codex', frame.lastLines)) {
456
- return {
457
- status: 'running',
458
- confidence: 'high',
459
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
460
- hasActivePrompt: false,
461
- evidence: 'positive',
462
- };
397
+ if (!codexTailIsIdlePrompt &&
398
+ ((0, cli_patterns_1.detectThinking)('codex', frame.lastLines) ||
399
+ patterns_1.CODEX_LIVE_STATUS_ROW_PATTERN.test(frame.lastLines))) {
400
+ return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
463
401
  }
464
402
  }
465
403
  return null;
@@ -477,13 +415,16 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
477
415
  * `detectDialog` vouches for, so the same words quoted in a reply do not count.
478
416
  * `/prompt-response` does not call this and keeps accepting an answer.
479
417
  *
480
- * @param cleanOutput - The capture Auto-Yes judged (ANSI and box drawing stripped)
418
+ * @param cleanOutput - The capture Auto-Yes judged (ANSI and box drawing
419
+ * stripped), or the frame the poller normalised once for the tick (Issue #3183)
481
420
  */
482
421
  function isCodexModelPickerFrame(cleanOutput) {
483
- const frame = (0, frame_1.normalizeFrame)(cleanOutput);
422
+ const frame = typeof cleanOutput === 'string'
423
+ ? (0, frame_1.normalizeFrame)(cleanOutput, 'codex')
424
+ : (0, frame_1.withLiveRegion)(cleanOutput, 'codex');
484
425
  if (!exports.codexStatusDetector.detectDialog(frame))
485
426
  return false;
486
- const contentEnd = findCodexContentEnd(frame.contentLines);
427
+ const contentEnd = (0, live_region_1.findCodexContentEnd)(frame.contentLines);
487
428
  const block = (0, dialog_block_1.findNumberedOptionBlock)((0, cli_patterns_1.stripBoxDrawing)(frame.clean).split('\n'), contentEnd);
488
429
  return (block !== null &&
489
430
  (cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(block.footer) ||
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * Codex's live region (Issue #3183; design doc §7 "codex").
4
+ *
5
+ * - **composer** — the bottom-most genuine `›` row ({@link findCodexComposerRow},
6
+ * the #892 rule), with "is it the bottom of the pane?" answered by
7
+ * {@link isCodexComposerAtBottom} (the #2841 rule: the RAW glyph row's SGR
8
+ * first, the stripped last content row otherwise). Before #3183 those were two
9
+ * separate readings in two files; they are now the two halves of one marker.
10
+ * Measured: `codex-dialogs-0157/quoted-approval-idle.txt` L997 (composer) under
11
+ * the quotation at L40-L49.
12
+ * - **composer end** — the composer's last row (Issue #3205). A composer holding
13
+ * several lines draws its continuation rows under the `›` row, so the bottom
14
+ * content row is then the composer's last line, not the `›` row. The extent is
15
+ * `composer-text.ts`'s {@link findCodexInputBox} (the #1890 reading), mapped
16
+ * onto `contentLines` by {@link findCodexComposerEndRow}.
17
+ * - **dialog top** — not declared. codex removes its composer while a dialog is
18
+ * open and the dialog takes the bottom of the pane (`codex-dialogs-0157/
19
+ * approval.txt` L987-L1000), so the whole frame is the right fallback.
20
+ *
21
+ * @module lib/detection/tools/codex/live-region
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.CODEX_LIVE_REGION = void 0;
25
+ exports.findCodexFooterBoundary = findCodexFooterBoundary;
26
+ exports.findCodexContentEnd = findCodexContentEnd;
27
+ exports.findCodexComposerEndRow = findCodexComposerEndRow;
28
+ const cli_patterns_1 = require("../../cli-patterns");
29
+ const cli_patterns_2 = require("./cli-patterns");
30
+ const composer_text_1 = require("../../composer-text");
31
+ const ansi_1 = require("../../ansi");
32
+ const live_region_1 = require("../live-region");
33
+ /**
34
+ * Index of the Codex status bar within the last 10 content rows, or -1.
35
+ *
36
+ * Issue #2818: a bar carrying a thread title or the Plan-mode badge after the
37
+ * path (codex 0.154.0+) is the same bar, so it is a boundary too. Without it
38
+ * such frames fell to branch D, whose 15-row tail still holds a finished
39
+ * turn's `• Ran …` record, and an idle session read `running`.
40
+ */
41
+ function findCodexFooterBoundary(contentLines) {
42
+ for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
43
+ const line = contentLines[ci];
44
+ if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(line) || cli_patterns_1.CODEX_TRAILED_STATUS_BAR_PATTERN.test(line))
45
+ return ci;
46
+ }
47
+ return -1;
48
+ }
49
+ /**
50
+ * Exclusive end of the conversation area — the row below the status bar, with
51
+ * the padding above it walked off (Issue #1928).
52
+ *
53
+ * Falls back to the whole frame when the bar cannot be located, which is
54
+ * Issue #1150's drift case: there the tail is the conversation, so the dialog
55
+ * rule still has the right rows.
56
+ */
57
+ function findCodexContentEnd(contentLines) {
58
+ const boundary = findCodexFooterBoundary(contentLines);
59
+ let end = boundary >= 0 ? boundary - 1 : contentLines.length - 1;
60
+ while (end >= 0 && contentLines[end].trim() === '')
61
+ end--;
62
+ return end + 1;
63
+ }
64
+ /**
65
+ * Index into `contentLines` of the composer's last row, given its `›` row
66
+ * (Issue #3205).
67
+ *
68
+ * The rows are counted on the RAW capture by {@link findCodexInputBox}, which
69
+ * is what reads the composer's text for `send` (#1890), so both answer with the
70
+ * same rows. `contentLines` has had its blank rows compacted, so the raw index
71
+ * cannot be used as it is; the composer block holds no blank row, though, so
72
+ * its row count carries over once its first row is the same text as
73
+ * `composerRow`. Anything else — no input box found, or a different first row —
74
+ * answers `composerRow`: the one-row composer every rule read before #3205.
75
+ */
76
+ function findCodexComposerEndRow(raw, contentLines, composerRow, contentEnd) {
77
+ const rawLines = raw.split('\n');
78
+ const box = (0, composer_text_1.findCodexInputBox)(rawLines);
79
+ if (box === null)
80
+ return composerRow;
81
+ if ((0, ansi_1.stripAnsi)(rawLines[box.firstRow]).trim() !== contentLines[composerRow]?.trim())
82
+ return composerRow;
83
+ const end = Math.min(composerRow + (box.lastRow - box.firstRow), contentEnd - 1);
84
+ return Math.max(composerRow, end);
85
+ }
86
+ exports.CODEX_LIVE_REGION = {
87
+ composer: {
88
+ locate({ raw, contentLines }) {
89
+ const contentEnd = findCodexContentEnd(contentLines);
90
+ const atBottom = (0, cli_patterns_2.isCodexComposerAtBottom)(raw, contentLines, contentEnd);
91
+ const row = (0, cli_patterns_1.findCodexComposerRow)(contentLines);
92
+ if (row >= 0) {
93
+ return { start: row, end: findCodexComposerEndRow(raw, contentLines, row, contentEnd), atBottom };
94
+ }
95
+ if (!atBottom)
96
+ return null;
97
+ // The raw glyph row said "composer" although its text reads as a numbered
98
+ // row (a hand-typed `1. buy milk`): the composer is the last content row.
99
+ const start = (0, live_region_1.lastContentRow)(contentLines.slice(0, contentEnd));
100
+ return start < 0 ? null : { start, end: start, atBottom: true };
101
+ },
102
+ },
103
+ composerHidesDialogs: true,
104
+ };