commandmate 0.44.2 → 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 (581) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +149 -149
  3. package/.next/app-path-routes-manifest.json +21 -21
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  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 -1
  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 -1
  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 +2 -2
  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 +21 -21
  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 -1
  294. package/.next/server/chunks/2710.js +1 -1
  295. package/.next/server/chunks/2908.js +1 -1
  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 -1
  308. package/.next/server/chunks/5625.js +25 -0
  309. package/.next/server/chunks/611.js +1 -1
  310. package/.next/server/chunks/6130.js +1 -1
  311. package/.next/server/chunks/6401.js +1 -1
  312. package/.next/server/chunks/6781.js +1 -1
  313. package/.next/server/chunks/6793.js +3 -3
  314. package/.next/server/chunks/7491.js +2 -2
  315. package/.next/server/chunks/7905.js +1 -1
  316. package/.next/server/chunks/850.js +1 -1
  317. package/.next/server/chunks/8728.js +3 -3
  318. package/.next/server/chunks/8791.js +1 -1
  319. package/.next/server/chunks/8800.js +1 -1
  320. package/.next/server/chunks/8918.js +7 -7
  321. package/.next/server/chunks/9130.js +1 -1
  322. package/.next/server/chunks/9390.js +2 -2
  323. package/.next/server/chunks/9584.js +1 -1
  324. package/.next/server/chunks/9627.js +6 -6
  325. package/.next/server/chunks/9731.js +3 -3
  326. package/.next/server/middleware-manifest.json +5 -5
  327. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  328. package/.next/server/pages/500.html +1 -1
  329. package/.next/server/server-reference-manifest.json +1 -1
  330. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  331. package/.next/static/chunks/{2407-051f6f84226a9f2c.js → 2407-06d35bb1aa02de80.js} +1 -1
  332. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  333. package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
  334. package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
  335. package/.next/static/chunks/app/{layout-9da1ab602bcb3051.js → layout-0d1750b833f5cc3e.js} +1 -1
  336. package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
  337. package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
  338. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  339. package/.next/static/css/057f64a65726c439.css +1 -0
  340. package/.next/trace +13 -13
  341. package/dist/cli/commands/ask.d.ts.map +1 -1
  342. package/dist/cli/commands/ask.js +120 -119
  343. package/dist/cli/commands/attach.d.ts +94 -0
  344. package/dist/cli/commands/attach.d.ts.map +1 -1
  345. package/dist/cli/commands/attach.js +145 -7
  346. package/dist/cli/commands/auto-yes.js +1 -1
  347. package/dist/cli/commands/capture.d.ts.map +1 -1
  348. package/dist/cli/commands/capture.js +3 -5
  349. package/dist/cli/commands/command-target.d.ts +23 -0
  350. package/dist/cli/commands/command-target.d.ts.map +1 -0
  351. package/dist/cli/commands/command-target.js +25 -0
  352. package/dist/cli/commands/instances.d.ts.map +1 -1
  353. package/dist/cli/commands/instances.js +41 -2
  354. package/dist/cli/commands/message-dispatch.d.ts +36 -0
  355. package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
  356. package/dist/cli/commands/message-dispatch.js +63 -0
  357. package/dist/cli/commands/reply.d.ts.map +1 -1
  358. package/dist/cli/commands/reply.js +2 -5
  359. package/dist/cli/commands/respond.d.ts.map +1 -1
  360. package/dist/cli/commands/respond.js +3 -6
  361. package/dist/cli/commands/send.d.ts.map +1 -1
  362. package/dist/cli/commands/send.js +149 -146
  363. package/dist/cli/commands/wait.d.ts.map +1 -1
  364. package/dist/cli/commands/wait.js +589 -431
  365. package/dist/cli/types/api-responses.d.ts +159 -27
  366. package/dist/cli/types/api-responses.d.ts.map +1 -1
  367. package/dist/cli/types/api-responses.js +4 -2
  368. package/dist/cli/utils/api-client.d.ts +25 -5
  369. package/dist/cli/utils/api-client.d.ts.map +1 -1
  370. package/dist/cli/utils/api-client.js +87 -55
  371. package/dist/cli/utils/server-url.d.ts +1 -0
  372. package/dist/cli/utils/server-url.d.ts.map +1 -1
  373. package/dist/cli/utils/server-url.js +7 -0
  374. package/dist/config/uat-isolation.d.ts +140 -0
  375. package/dist/config/uat-isolation.d.ts.map +1 -0
  376. package/dist/config/uat-isolation.js +246 -0
  377. package/dist/lib/global-state.d.ts +12 -0
  378. package/dist/lib/global-state.d.ts.map +1 -0
  379. package/dist/lib/global-state.js +16 -0
  380. package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
  381. package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
  382. package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
  383. package/dist/lib/session/prompt-view.d.ts +26 -3
  384. package/dist/lib/session/prompt-view.d.ts.map +1 -1
  385. package/dist/lib/session/prompt-view.js +26 -3
  386. package/dist/lib/session/status-evidence-type.d.ts +16 -0
  387. package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
  388. package/dist/lib/session/status-evidence-type.js +2 -0
  389. package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
  390. package/dist/lib/tmux/legacy-session-alias.js +2 -1
  391. package/dist/server/locales/en/worktree.json +3 -1
  392. package/dist/server/locales/ja/worktree.json +3 -1
  393. package/dist/server/src/cli/types/api-responses.js +4 -2
  394. package/dist/server/src/config/cli-tool-timing-config.js +1 -6
  395. package/dist/server/src/config/uat-isolation.js +246 -0
  396. package/dist/server/src/lib/assistant-response-saver.js +62 -3
  397. package/dist/server/src/lib/auto-yes-lifecycle.js +6 -0
  398. package/dist/server/src/lib/auto-yes-poller.js +450 -160
  399. package/dist/server/src/lib/auto-yes-state.js +2 -2
  400. package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
  401. package/dist/server/src/lib/cli-tools/base.js +151 -0
  402. package/dist/server/src/lib/cli-tools/codex.js +44 -80
  403. package/dist/server/src/lib/cli-tools/command-code.js +24 -56
  404. package/dist/server/src/lib/cli-tools/copilot.js +25 -67
  405. package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
  406. package/dist/server/src/lib/cli-tools/gemini.js +23 -73
  407. package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
  408. package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
  409. package/dist/server/src/lib/cli-tools/opencode.js +21 -85
  410. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
  411. package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
  412. package/dist/server/src/lib/detection/cli-patterns.js +374 -3065
  413. package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
  414. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
  415. package/dist/server/src/lib/detection/prompt-detector.js +2 -35
  416. package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
  417. package/dist/server/src/lib/detection/selection-shape.js +32 -520
  418. package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
  419. package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
  420. package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
  421. package/dist/server/src/lib/detection/tools/antigravity/detect.js +5 -29
  422. package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
  423. package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
  424. package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
  425. package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
  426. package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
  427. package/dist/server/src/lib/detection/tools/codex/detect.js +46 -85
  428. package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
  429. package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
  430. package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
  431. package/dist/server/src/lib/detection/tools/command-code/detect.js +8 -50
  432. package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
  433. package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
  434. package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
  435. package/dist/server/src/lib/detection/tools/context-above.js +20 -0
  436. package/dist/server/src/lib/detection/tools/copilot/detect.js +10 -35
  437. package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
  438. package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
  439. package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
  440. package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
  441. package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
  442. package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
  443. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
  444. package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
  445. package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
  446. package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
  447. package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
  448. package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
  449. package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
  450. package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
  451. package/dist/server/src/lib/global-state.js +16 -0
  452. package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
  453. package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
  454. package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
  455. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
  456. package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
  457. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
  458. package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
  459. package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
  460. package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
  461. package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
  462. package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
  463. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
  464. package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
  465. package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
  466. package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
  467. package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
  468. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
  469. package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
  470. package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
  471. package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
  472. package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
  473. package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
  474. package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
  475. package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
  476. package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
  477. package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
  478. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
  479. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
  480. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
  481. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
  482. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
  483. package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
  484. package/dist/server/src/lib/hooks/sources/registry.js +3 -2
  485. package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
  486. package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
  487. package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
  488. package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
  489. package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
  490. package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
  491. package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
  492. package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
  493. package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
  494. package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
  495. package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
  496. package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
  497. package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
  498. package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
  499. package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
  500. package/dist/server/src/lib/polling/response-checker.js +641 -1142
  501. package/dist/server/src/lib/polling/response-dedup.js +3 -4
  502. package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
  503. package/dist/server/src/lib/polling/response-poller-core.js +54 -20
  504. package/dist/server/src/lib/polling/startup-screen.js +142 -0
  505. package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
  506. package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
  507. package/dist/server/src/lib/prompt-answer-sender.js +5 -4
  508. package/dist/server/src/lib/push/failure-episode-state.js +2 -2
  509. package/dist/server/src/lib/push/notification-dedup.js +3 -4
  510. package/dist/server/src/lib/push/prompt-card-state.js +2 -2
  511. package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
  512. package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
  513. package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -5
  514. package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
  515. package/dist/server/src/lib/relay/relay-delivery.js +3 -2
  516. package/dist/server/src/lib/relay/relay-readiness.js +38 -1
  517. package/dist/server/src/lib/response-cleaner.js +24 -1
  518. package/dist/server/src/lib/response-extractor.js +16 -0
  519. package/dist/server/src/lib/schedule-manager.js +8 -10
  520. package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
  521. package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
  522. package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
  523. package/dist/server/src/lib/session/agent-event-model.js +562 -0
  524. package/dist/server/src/lib/session/agent-event-record.js +10 -0
  525. package/dist/server/src/lib/session/agent-event-state.js +106 -1854
  526. package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
  527. package/dist/server/src/lib/session/agent-event-turn.js +811 -0
  528. package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
  529. package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
  530. package/dist/server/src/lib/session/claude-executor.js +45 -5
  531. package/dist/server/src/lib/session/claude-session.js +21 -65
  532. package/dist/server/src/lib/session/cli-session.js +17 -0
  533. package/dist/server/src/lib/session/current-output-builder.js +450 -1103
  534. package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
  535. package/dist/server/src/lib/session/current-output-types.js +9 -0
  536. package/dist/server/src/lib/session/detection-divergence.js +55 -0
  537. package/dist/server/src/lib/session/global-session-constants.js +2 -13
  538. package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
  539. package/dist/server/src/lib/session/layer-disagreement.js +2 -2
  540. package/dist/server/src/lib/session/opencode-session-store.js +2 -1
  541. package/dist/server/src/lib/session/prompt-view.js +26 -3
  542. package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
  543. package/dist/server/src/lib/session/provisional-turn.js +3 -1
  544. package/dist/server/src/lib/session/send-user-message.js +1 -1
  545. package/dist/server/src/lib/session/session-starting-state.js +4 -6
  546. package/dist/server/src/lib/session/status-evidence-type.js +2 -0
  547. package/dist/server/src/lib/session/status-evidence.js +2 -2
  548. package/dist/server/src/lib/session/structured-status-merge.js +335 -0
  549. package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
  550. package/dist/server/src/lib/session-cleanup.js +1 -5
  551. package/dist/server/src/lib/skills/install-plan.js +2 -1
  552. package/dist/server/src/lib/skills/snapshot-store.js +2 -2
  553. package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
  554. package/dist/server/src/lib/timer-manager.js +6 -8
  555. package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
  556. package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
  557. package/dist/server/src/lib/tmux/session-hooks.js +2 -1
  558. package/dist/server/src/lib/tmux/session-status-options.js +3 -3
  559. package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
  560. package/dist/server/src/lib/tmux/tmux.js +33 -59
  561. package/dist/server/src/lib/tui-accumulator.js +2 -2
  562. package/dist/server/src/lib/version-checker.js +6 -6
  563. package/dist/server/src/lib/ws-server.js +47 -11
  564. package/docs/en/user-guide/webapp-guide.md +27 -3
  565. package/package.json +1 -1
  566. package/release-notes/0.44.3.json +82 -0
  567. package/scripts/hooks/cmate-agent-event.sh +18 -0
  568. package/.next/server/chunks/1068.js +0 -1
  569. package/.next/server/chunks/4372.js +0 -5
  570. package/.next/server/chunks/6474.js +0 -14
  571. package/.next/server/chunks/967.js +0 -1
  572. package/.next/server/chunks/9798.js +0 -2
  573. package/.next/server/chunks/9882.js +0 -25
  574. package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
  575. package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
  576. package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +0 -1
  577. package/.next/static/css/38070d879efa1371.css +0 -1
  578. package/dist/server/src/lib/cli-tools/index.js +0 -41
  579. package/dist/server/src/lib/polling/global-session-poller.js +0 -140
  580. /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
  581. /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
@@ -2,9 +2,10 @@
2
2
  /**
3
3
  * Claude Code's own detection patterns (Issue #1927).
4
4
  *
5
- * The regexes shared with other tools stay in `cli-patterns.ts`; what lives here
6
- * is what Issue #1927 had to measure to give Claude a §4 D1 idle rule, plus the
7
- * provenance of that measurement.
5
+ * What comes first is what Issue #1927 had to measure to give Claude a §4 D1
6
+ * idle rule, plus the provenance of that measurement. Below `VERIFIED_AGAINST`
7
+ * are the Claude patterns Issue #3217 moved here from `cli-patterns.ts`, which
8
+ * keeps the per-tool table and re-exports their public names.
8
9
  *
9
10
  * ## Why Claude needed a new rule at all
10
11
  *
@@ -45,7 +46,11 @@
45
46
  * argument #1893 used to make opencode's `▣ … · 2.3s` duration mandatory.
46
47
  */
47
48
  Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.VERIFIED_AGAINST = exports.CLAUDE_EFFORT_CHIP_PATTERN = exports.CLAUDE_TRANSCRIPT_USER_TURN_PATTERN = exports.CLAUDE_BANNER_PATTERN = exports.CLAUDE_TURN_COMPLETE_PATTERN = void 0;
49
+ exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = exports.VERIFIED_AGAINST = exports.CLAUDE_EFFORT_CHIP_PATTERN = exports.CLAUDE_TRANSCRIPT_USER_TURN_PATTERN = exports.CLAUDE_BANNER_PATTERN = exports.CLAUDE_TURN_COMPLETE_PATTERN = void 0;
50
+ exports.findClaudeChromeStart = findClaudeChromeStart;
51
+ exports.resolveClaudeTrustDialogKeys = resolveClaudeTrustDialogKeys;
52
+ exports.isClaudeTrustDialogOpen = isClaudeTrustDialogOpen;
53
+ const composer_text_1 = require("../../composer-text");
49
54
  /**
50
55
  * Claude's turn-completion marker: a spinner glyph, a verb, and a duration.
51
56
  *
@@ -96,3 +101,258 @@ exports.CLAUDE_EFFORT_CHIP_PATTERN = /·\s*\/effort\s*$/;
96
101
  */
97
102
  var verified_against_1 = require("../verified-against");
98
103
  Object.defineProperty(exports, "VERIFIED_AGAINST", { enumerable: true, get: function () { return verified_against_1.CLAUDE_VERIFIED_AGAINST; } });
104
+ /**
105
+ * The Claude blocks moved out of `../../cli-patterns.ts` (Issue #3217 I-7).
106
+ * `cli-patterns.ts` re-exports every public name.
107
+ */
108
+ /**
109
+ * Claude CLI spinner characters (expanded set)
110
+ * These are shown when Claude is thinking/processing
111
+ */
112
+ exports.CLAUDE_SPINNER_CHARS = [
113
+ '✻', '✽', '⏺', '·', '∴', '✢', '✳', '✶',
114
+ '⦿', '◉', '●', '○', '◌', '◎', '⊙', '⊚',
115
+ '⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏', // Braille spinner
116
+ ];
117
+ /**
118
+ * Claude thinking pattern
119
+ * Matches spinner character followed by activity text ending with …
120
+ * The text can contain spaces (e.g., "Verifying implementation (dead code detection)…")
121
+ *
122
+ * Alternative 2: "esc to interrupt" status bar text (Issue #188)
123
+ * Claude Code shows "esc to interrupt" in the terminal status bar during active processing.
124
+ * Previous pattern required closing paren `to interrupt\)` matching `(esc to interrupt)`,
125
+ * but Claude Code v2.x status bar format uses `· esc to interrupt ·` without parens.
126
+ * Updated to match `esc to interrupt` which covers both formats.
127
+ */
128
+ exports.CLAUDE_THINKING_PATTERN = new RegExp(`[${exports.CLAUDE_SPINNER_CHARS.join('')}]\\s+.+…|esc to interrupt`, 'm');
129
+ /**
130
+ * Claude status-bar "esc to interrupt" hint (Issue #805)
131
+ *
132
+ * Claude Code shows "esc to interrupt" in the bottom status bar ONLY while it is
133
+ * actively processing. When idle/ready, the status bar shows shortcut hints
134
+ * (e.g., "? for shortcuts") instead -- so this token is a reliable "running" signal.
135
+ *
136
+ * Why this exists separately from CLAUDE_THINKING_PATTERN's "esc to interrupt"
137
+ * alternative: status detection evaluates the spinner+ellipsis branch of
138
+ * CLAUDE_THINKING_PATTERN within a narrow 5-line window (THINKING_TAIL_LINE_COUNT)
139
+ * to avoid mistaking a completed thinking summary in scrollback for active work
140
+ * (Issue #188). During /pm-auto-dev + subagent runs, the bottom task panel
141
+ * ("⏺ main" / "◯ general-purpose ..." rows) pushes both the "✶ Running…" spinner
142
+ * AND the "esc to interrupt" status bar out of that 5-line window, so the session
143
+ * was misdetected as Ready (Issue #805). Unlike the spinner+ellipsis summary, the
144
+ * status-bar text is repainted live and never lingers in scrollback, so it can be
145
+ * matched in a wider footer window without regressing Issue #188.
146
+ */
147
+ exports.CLAUDE_INTERRUPT_HINT_PATTERN = /esc to interrupt/;
148
+ /**
149
+ * Claude prompt pattern (waiting for input)
150
+ * Supports both legacy '>' and new '❯' (U+276F) prompt characters
151
+ * Issue #132: Also matches prompts with recommended commands (e.g., "❯ /work-plan")
152
+ *
153
+ * Matches:
154
+ * - Empty prompt: "❯ " or "> "
155
+ * - Prompt with command: "❯ /work-plan" or "> npm install"
156
+ */
157
+ exports.CLAUDE_PROMPT_PATTERN = /^[>❯](\s*$|\s+\S)/m;
158
+ /**
159
+ * Claude separator pattern
160
+ */
161
+ exports.CLAUDE_SEPARATOR_PATTERN = /^─{10,}$/m;
162
+ /**
163
+ * Locate the start of Claude Code's bottom-pinned footer within a captured pane.
164
+ *
165
+ * Claude Code v2 draws in the alternate screen and reserves the last rows of the
166
+ * pane for a footer that is never transcript content:
167
+ *
168
+ * <hint row> ← "◉ xhigh · /effort", "tmux detected · …", or blank
169
+ * ──────────────────── ← separator
170
+ * ❯ <input box> ← one or more rows
171
+ * ──────────────────── ← separator
172
+ * ⏸ manual mode on · ? for shortcuts · ← for agents focus
173
+ *
174
+ * The hint row rotates every few seconds while the conversation sits idle, so
175
+ * keeping the footer in an extracted response makes its content hash change on
176
+ * every poll tick. That defeated the content-based dedup added in #1268 and
177
+ * re-saved the same reply once per tick (#1289).
178
+ *
179
+ * The boundary is found structurally rather than by matching hint text: the hint
180
+ * strings are Claude Code's to change, and pattern-matching them is what let this
181
+ * regression through (`? for shortcuts` was already listed as a skip pattern, but
182
+ * the real status bar embeds it mid-line so the anchors never matched). The row
183
+ * above the opening separator is reserved by Claude Code's layout and stays blank
184
+ * even when a reply fills the whole pane, so it is always safe to drop.
185
+ *
186
+ * @param lines - Captured pane lines; trailing blank rows are tolerated
187
+ * @returns Index of the first footer row, or -1 when no footer is present
188
+ */
189
+ function findClaudeChromeStart(lines) {
190
+ // Issue #1879: the structural search (closing separator → opening separator →
191
+ // prompt glyph, including the "is this really the input box and not a reply
192
+ // fenced by two horizontal rules?" check) moved to `findClaudeInputBox` so the
193
+ // composer reader locates the same box this trimmer does. Behaviour here is
194
+ // unchanged; only the caller of the search moved.
195
+ const box = (0, composer_text_1.findClaudeInputBox)(lines);
196
+ if (box === null)
197
+ return -1;
198
+ // Include the reserved hint row directly above the opening separator.
199
+ return Math.max(0, box.openingSeparator - 1);
200
+ }
201
+ /**
202
+ * Claude trust dialog pattern (Issue #201)
203
+ *
204
+ * Matches the "Quick safety check" dialog displayed by Claude CLI v2.x
205
+ * when accessing a workspace for the first time.
206
+ *
207
+ * Intentionally uses partial matching (no line-start anchor ^):
208
+ * Other pattern constants (CLAUDE_PROMPT_PATTERN, CLAUDE_SEPARATOR_PATTERN, etc.)
209
+ * use line-start anchors (^), but this pattern needs to match at any position
210
+ * within the tmux output buffer because the dialog text may appear after
211
+ * tmux padding or other output. (SF-001)
212
+ */
213
+ exports.CLAUDE_TRUST_DIALOG_PATTERN = /Yes, I trust this folder/m;
214
+ /** The option row of the trust dialog's cursor: `❯` (or legacy `>`) after the dialog's left padding. */
215
+ const CLAUDE_TRUST_CURSOR_ROW_PATTERN = /^\s*[>❯]\s+\S/;
216
+ /** How far the cursor row may sit from the `Yes, I trust this folder` row (the dialog has two options). */
217
+ const CLAUDE_TRUST_MAX_CURSOR_DISTANCE = 3;
218
+ /**
219
+ * Keys that answer Claude Code's folder-trust dialog with "Yes", or null when
220
+ * no answerable dialog is on screen (Issue #3078).
221
+ *
222
+ * The dialog comes in two layouts, and Enter alone is only right for one:
223
+ *
224
+ * - default Yes (Issue #201 era, `tests/unit/lib/claude-session.test.ts`):
225
+ * ` ❯ 1. Yes, I trust this folder` / ` 2. No, exit` — Enter confirms Yes.
226
+ * - default No (2.1.259 `tests/fixtures/chat-dialog-card-2254/claude-trust-2-1-259.txt`,
227
+ * 2.1.287 with a permission allow-list
228
+ * `tests/fixtures/claude-trust-dialog-3078/allowlist-default-no-2-1-287.txt`):
229
+ * ` ❯ No, exit` / ` Yes, I trust this folder` — Enter EXITS Claude Code.
230
+ *
231
+ * So the answer is read off the screen: the distance from the cursor row to the
232
+ * Yes row becomes that many `Up`/`Down` presses, then `Enter`. Only the last
233
+ * dialog in the capture counts, and a dialog followed by Claude's input-box
234
+ * separator is history in the scrollback, not an open dialog.
235
+ *
236
+ * @param output - ANSI-stripped pane output
237
+ * @returns tmux key names ending in `Enter` (just `['Enter']` when the cursor is
238
+ * already on Yes), or null when no open dialog / no readable cursor row
239
+ */
240
+ function resolveClaudeTrustDialogKeys(output) {
241
+ const lines = output.split('\n');
242
+ const yesIndex = findOpenClaudeTrustYesRow(lines);
243
+ if (yesIndex === -1)
244
+ return null;
245
+ for (let distance = 0; distance <= CLAUDE_TRUST_MAX_CURSOR_DISTANCE; distance++) {
246
+ for (const direction of distance === 0 ? [0] : [-1, 1]) {
247
+ const index = yesIndex + direction * distance;
248
+ if (index < 0 || index >= lines.length)
249
+ continue;
250
+ if (!CLAUDE_TRUST_CURSOR_ROW_PATTERN.test(lines[index]))
251
+ continue;
252
+ // Cursor above Yes → move Down; below → move Up.
253
+ const key = direction < 0 ? 'Down' : 'Up';
254
+ return [...Array(distance).fill(key), 'Enter'];
255
+ }
256
+ }
257
+ return null;
258
+ }
259
+ /**
260
+ * Whether Claude Code's folder-trust dialog is the open screen (Issue #3078).
261
+ *
262
+ * The dialog's cursor row (` ❯ No, exit`) has the prompt glyph, so the start
263
+ * wait asks this before CLAUDE_PROMPT_PATTERN rather than reading the dialog as
264
+ * a ready prompt.
265
+ *
266
+ * @param output - ANSI-stripped pane output
267
+ */
268
+ function isClaudeTrustDialogOpen(output) {
269
+ return findOpenClaudeTrustYesRow(output.split('\n')) !== -1;
270
+ }
271
+ /** Row of the last `Yes, I trust this folder`, or -1 when absent or already answered. */
272
+ function findOpenClaudeTrustYesRow(lines) {
273
+ for (let i = lines.length - 1; i >= 0; i--) {
274
+ if (!exports.CLAUDE_TRUST_DIALOG_PATTERN.test(lines[i]))
275
+ continue;
276
+ // Claude's input box (separator rows) drawn below it: the dialog is scrollback.
277
+ return lines.slice(i + 1).some((line) => exports.CLAUDE_SEPARATOR_PATTERN.test(line)) ? -1 : i;
278
+ }
279
+ return -1;
280
+ }
281
+ /**
282
+ * [Issue #1495] Footer signature of Claude Code's `/model` local-settings overlay.
283
+ * Verified against a real Claude Code v2.1.218 capture, the footer reads:
284
+ * "Enter to set as default · s to use this session only · Esc to cancel"
285
+ *
286
+ * The overlay renders a ❯-marked numbered model list ("1. Default … 5. Haiku")
287
+ * under a "Select model" header that detectMultipleChoicePrompt() otherwise
288
+ * matches as a genuine multiple_choice prompt — which let Auto-Yes Enter-confirm
289
+ * a selection and silently change the user's default model. This "set as default"
290
+ * phrasing is unique to the model picker: genuine confirmation prompts never
291
+ * contain it (the trust dialog uses "Enter to confirm · Esc to cancel", Bash-tool
292
+ * approvals use "Esc to cancel · Tab to amend", AskUserQuestion uses
293
+ * "Enter to select · … to navigate"), so it is a safe exclusion signal.
294
+ *
295
+ * Linear pattern, no nested quantifiers — ReDoS safe (S4-001).
296
+ */
297
+ exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = /Enter\s+to\s+set\s+as\s+default\b/i;
298
+ /**
299
+ * Claude CLI selection list footer pattern
300
+ * Detects Claude CLI's interactive selection prompts that require
301
+ * arrow key navigation and Enter to select/toggle.
302
+ *
303
+ * Matches footer instruction lines (known variants):
304
+ * "Enter to select · Tab/Arrow keys to navigate · Esc to cancel"
305
+ * "Enter to select · ↑/↓ to navigate · n to add notes · Esc to cancel"
306
+ * "Enter to confirm · Esc to exit" (legacy /model command footer)
307
+ * "Enter to set as default · s to use this session only · Esc to cancel"
308
+ * (/model command footer as of Claude Code v2.1.218 — Issue #1495)
309
+ *
310
+ * "←/→ to adjust · Enter to confirm · s for this session only · Esc to cancel"
311
+ * (/effort slider footer as of Claude Code v2.1.257 — Issue #3052; before
312
+ * 2.1.257 it was "Enter to confirm · Esc to cancel")
313
+ *
314
+ * The /effort branch keys on "Enter to confirm · s for this session only" rather
315
+ * than "←/→ to adjust": the `s` hint is unique to the pickers (the trust dialog's
316
+ * "Enter to confirm · Esc to cancel" and approval dialogs never carry it), and
317
+ * keeping the match under the `Enter to` prefix leaves the pattern a single
318
+ * linear alternation. Linear, no nested quantifiers — ReDoS safe.
319
+ *
320
+ * The "set as default" branch lets status-detector classify the `/model` overlay
321
+ * as a Claude selection list (NavigationButtons + ESC hatch, hasActivePrompt=false)
322
+ * once detectPrompt() no longer reports it as a prompt (see
323
+ * CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN).
324
+ */
325
+ exports.CLAUDE_SELECTION_LIST_FOOTER = /Enter\s+to\s+(?:select\s+.*to\s+navigate|confirm\s+·\s+(?:Esc|s\s+for\s+this\s+session\s+only)|set\s+as\s+default)/;
326
+ /**
327
+ * Error patterns that indicate a Claude session failed to start properly
328
+ * Used by isSessionHealthy() to detect broken sessions (MF-001: SRP)
329
+ * Style: readonly + as const for type safety (SF-S2-001: follows response-poller.ts precedent)
330
+ *
331
+ * SEC-SF-004: Pattern maintenance process:
332
+ * - When Claude CLI is updated, verify that error messages still match these patterns.
333
+ * - Test procedure: Intentionally trigger each error condition (e.g., nested session launch)
334
+ * and confirm the error message is captured by the patterns.
335
+ * - If Claude CLI introduces localized error messages, add locale-aware patterns or
336
+ * consider switching to exit code-based detection as a more robust alternative.
337
+ * - Pattern additions should be accompanied by corresponding test cases in
338
+ * claude-session.test.ts.
339
+ *
340
+ * C-S3-001: Codex/Gemini monitoring note:
341
+ * These patterns are currently Claude-specific. If Codex or Gemini exhibit similar
342
+ * "nested session" or startup failure behaviors, analogous error patterns should be
343
+ * added to their respective tool configurations (codex.ts, gemini.ts) rather than
344
+ * extending these arrays, to maintain SRP per CLI tool type.
345
+ */
346
+ exports.CLAUDE_SESSION_ERROR_PATTERNS = [
347
+ 'Claude Code cannot be launched inside another Claude Code session',
348
+ ];
349
+ /**
350
+ * Regex patterns for Claude session errors requiring context matching
351
+ * Used by isSessionHealthy() for multi-condition error detection (MF-001: SRP)
352
+ * Style: readonly + as const for type safety (SF-S2-001: follows response-poller.ts precedent)
353
+ *
354
+ * SEC-SF-004: See CLAUDE_SESSION_ERROR_PATTERNS JSDoc for pattern maintenance process.
355
+ */
356
+ exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = [
357
+ /^Error:.*Claude Code/,
358
+ ];
@@ -63,6 +63,7 @@ exports.detectClaudeDialog = detectClaudeDialog;
63
63
  const cli_patterns_1 = require("../../cli-patterns");
64
64
  const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-choice");
65
65
  const dialog_block_1 = require("../dialog-block");
66
+ const context_above_1 = require("../context-above");
66
67
  const picker_chrome_1 = require("./picker-chrome");
67
68
  /**
68
69
  * Claude's dialog footers, in every spelling measured.
@@ -78,8 +79,6 @@ const picker_chrome_1 = require("./picker-chrome");
78
79
  const CLAUDE_DIALOG_FOOTER_PATTERN = /esc\s+to\s+cancel|enter\s+to\s+(?:select|confirm|set\s+as\s+default)/i;
79
80
  /** The selection cursor Claude puts on the highlighted option. */
80
81
  const CLAUDE_SELECTION_GLYPHS = new Set(['❯', '>']);
81
- /** How many non-blank rows above the options may hold the question. */
82
- const QUESTION_SCAN_ROWS = 4;
83
82
  /** The permission dialog's question, in the spellings 2.1.x draws. */
84
83
  const CLAUDE_PERMISSION_QUESTION_PATTERN = /do you want to\b|allow\b.*\?$/i;
85
84
  /** The AskUserQuestion review screen's closing question. */
@@ -94,14 +93,7 @@ const CLAUDE_PICKER_FOOTER_PATTERN = /set\s+as\s+default/i;
94
93
  */
95
94
  function readContextAbove(lines, firstRow) {
96
95
  const tabRow = (0, picker_chrome_1.findAskUserQuestionTabRow)(lines, firstRow, prompt_detect_multiple_choice_1.APPROVAL_TARGET_MAX_LOOKBACK);
97
- const rows = [];
98
- for (let i = firstRow - 1; i > tabRow && rows.length < QUESTION_SCAN_ROWS; i--) {
99
- const row = lines[i].trim();
100
- if (row === '')
101
- continue;
102
- rows.push(row);
103
- }
104
- return rows.join('\n');
96
+ return (0, context_above_1.readContextAbove)(lines, firstRow, tabRow);
105
97
  }
106
98
  /**
107
99
  * The non-blank rows in [from, end) — the block's footer — without Claude's
@@ -19,15 +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");
27
28
  const live_region_1 = require("./live-region");
29
+ const patterns_1 = require("./patterns");
28
30
  const run_detection_1 = require("../run-detection");
29
31
  const verified_against_1 = require("../verified-against");
30
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
+ }
31
36
  /** codex-cli build these rules were read off (#1628 / #1829 / #1890; value in ../verified-against, #1929). */
32
37
  exports.VERIFIED_AGAINST = verified_against_1.CODEX_VERIFIED_AGAINST;
33
38
  /**
@@ -132,6 +137,23 @@ function isCodexApprovalRequest(promptDetection, selectionWindow) {
132
137
  function isCodexDialogGlyphTail(raw) {
133
138
  return (0, cli_patterns_2.findCodexBottomGlyphRow)(raw)?.kind === 'option';
134
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
+ }
135
157
  exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
136
158
  tool: 'codex',
137
159
  verifiedAgainst: exports.VERIFIED_AGAINST,
@@ -168,14 +190,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
168
190
  // content must not be misread as one. CODEX_PAGER_FOOTER_PATTERN does not match the
169
191
  // genuine "/model" selection footer, so the 0.8 path below is unaffected (no regression).
170
192
  if (cli_patterns_1.CODEX_PAGER_FOOTER_PATTERN.test(frame.lastLines)) {
171
- return {
172
- status: 'waiting',
173
- confidence: 'high',
174
- reason: status_reason_1.STATUS_REASON.CODEX_PAGER,
175
- hasActivePrompt: false,
176
- evidence: 'positive',
177
- promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
178
- };
193
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_PAGER, detectCodexPrompt(frame.clean));
179
194
  }
180
195
  // 0.75. Codex: the hooks review screens (Issue #1829)
181
196
  // codex-cli 0.148.0 answers "1. Review hooks" with a two-screen review UI:
@@ -190,14 +205,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
190
205
  // ordinary text that must not be read as options.
191
206
  const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)((0, frame_1.withLiveRegion)(frame, 'codex'));
192
207
  if (codexLifecycleDialog === 'hooks-list' || codexLifecycleDialog === 'hooks-detail') {
193
- return {
194
- status: 'waiting',
195
- confidence: 'high',
196
- reason: status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW,
197
- hasActivePrompt: false,
198
- evidence: 'positive',
199
- promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
200
- };
208
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW, detectCodexPrompt(frame.clean));
201
209
  }
202
210
  // 0.8. Codex: selection list detection BEFORE prompt detection (Issue #622)
203
211
  // CODEX_SELECTION_LIST_PATTERN matches "press enter to confirm/select" footer.
@@ -213,11 +221,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
213
221
  // Issue #1150: the status bar is located via CODEX_STATUS_BAR_PATTERN (version-
214
222
  // independent; matches both legacy "N% left ·" and v0.141 "model · path" bars),
215
223
  // and since #2818 via CODEX_TRAILED_STATUS_BAR_PATTERN too (0.154+ "· <title>").
216
- const codexFooterBoundary = (0, live_region_1.findCodexFooterBoundary)(contentLines);
217
- let codexContentEnd = codexFooterBoundary >= 0 ? codexFooterBoundary - 1 : contentLines.length - 1;
218
- while (codexContentEnd >= 0 && contentLines[codexContentEnd].trim() === '') {
219
- codexContentEnd--;
220
- }
224
+ const codexContentEnd = (0, live_region_1.findCodexContentEnd)(contentLines) - 1;
221
225
  if (codexContentEnd >= 0) {
222
226
  const codexSelectionWindow = contentLines
223
227
  .slice(Math.max(0, codexContentEnd - frame_1.STATUS_CHECK_LINE_COUNT + 1), codexContentEnd + 1)
@@ -230,7 +234,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
230
234
  if (cli_patterns_1.CODEX_SELECTION_LIST_PATTERN.test(codexSelectionWindow) ||
231
235
  cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(codexLastRow) ||
232
236
  cli_patterns_1.CODEX_EFFORT_PICKER_FOOTER_PATTERN.test(codexLastRow)) {
233
- 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);
234
238
  // Issue #1628: an approval request wears the same footer as a menu but is the
235
239
  // agent blocked on the human, so it must surface as an active prompt (exit 10
236
240
  // for `wait`, PromptPanel in the UI) instead of a navigable list. The #1160
@@ -238,23 +242,9 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
238
242
  // still inside the window, with Codex running below it, is dead scrollback.
239
243
  if (isCodexApprovalRequest(codexPromptDetection, codexSelectionWindow) &&
240
244
  !isCodexStalePrompt(contentLines)) {
241
- return {
242
- status: 'waiting',
243
- confidence: 'high',
244
- reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
245
- hasActivePrompt: true,
246
- evidence: 'positive',
247
- promptDetection: codexPromptDetection,
248
- };
245
+ return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, codexPromptDetection);
249
246
  }
250
- return {
251
- status: 'waiting',
252
- confidence: 'high',
253
- reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
254
- hasActivePrompt: false,
255
- evidence: 'positive',
256
- promptDetection: codexPromptDetection,
257
- };
247
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST, codexPromptDetection);
258
248
  }
259
249
  }
260
250
  // 0.85. Codex: every OTHER dialog — recognised by structure (Issue #2310)
@@ -292,25 +282,11 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
292
282
  if (!codexDialogFrame.footerRecognised) {
293
283
  (0, cli_patterns_2.reportCodexDialogFooterDrift)(codexDialogFrame.footer);
294
284
  }
295
- 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);
296
286
  if (codexPromptDetection.isPrompt) {
297
- return {
298
- status: 'waiting',
299
- confidence: 'high',
300
- reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
301
- hasActivePrompt: true,
302
- evidence: 'positive',
303
- promptDetection: codexPromptDetection,
304
- };
287
+ return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, codexPromptDetection);
305
288
  }
306
- return {
307
- status: 'waiting',
308
- confidence: 'high',
309
- reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
310
- hasActivePrompt: false,
311
- evidence: 'positive',
312
- promptDetection: codexPromptDetection,
313
- };
289
+ return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST, codexPromptDetection);
314
290
  }
315
291
  return null;
316
292
  },
@@ -354,19 +330,18 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
354
330
  while (lastContentIdx >= 0 && contentLines[lastContentIdx].trim() === '') {
355
331
  lastContentIdx--;
356
332
  }
333
+ // Issue #3205: a multi-line composer ends on its own `›` row here.
334
+ lastContentIdx = codexTailRowAboveComposerText(frame, lastContentIdx);
357
335
  if (lastContentIdx >= 0) {
358
336
  // A. Check content area for thinking indicators (wider window than the shared step)
359
337
  const codexThinkingWindow = contentLines
360
338
  .slice(Math.max(0, lastContentIdx - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastContentIdx + 1)
361
339
  .join('\n');
362
- if ((0, cli_patterns_1.detectThinking)('codex', codexThinkingWindow)) {
363
- return {
364
- status: 'running',
365
- confidence: 'high',
366
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
367
- hasActivePrompt: false,
368
- evidence: 'positive',
369
- };
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);
370
345
  }
371
346
  // B. Check if the last content line is the idle › prompt.
372
347
  // The last non-empty line above the status bar is the current active line.
@@ -386,26 +361,14 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
386
361
  // ANSI has been stripped still reports idle exactly as it did before.
387
362
  if (cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[lastContentIdx].trim()) &&
388
363
  !isCodexDialogGlyphTail(frame.raw)) {
389
- return {
390
- status: 'ready',
391
- confidence: 'high',
392
- reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
393
- hasActivePrompt: false,
394
- evidence: 'positive',
395
- };
364
+ return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
396
365
  }
397
366
  // C. Fallback: status bar present but neither thinking nor idle › detected.
398
367
  // This means Codex is actively processing — command output has pushed the
399
368
  // • Ran/• Working indicators beyond the 5-line thinking window.
400
369
  // The status bar ("model · N% left · path") is always visible during Codex
401
370
  // sessions, and the only idle state (›) was checked in B above.
402
- return {
403
- status: 'running',
404
- confidence: 'high',
405
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
406
- hasActivePrompt: false,
407
- evidence: 'positive',
408
- };
371
+ return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
409
372
  }
410
373
  }
411
374
  else {
@@ -426,17 +389,15 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
426
389
  while (codexTailIdx >= 0 && contentLines[codexTailIdx].trim() === '') {
427
390
  codexTailIdx--;
428
391
  }
392
+ // Issue #3205: as in 2.7, a multi-line composer is read from its `›` row.
393
+ codexTailIdx = codexTailRowAboveComposerText(frame, codexTailIdx);
429
394
  const codexTailIsIdlePrompt = codexTailIdx >= 0 &&
430
395
  cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[codexTailIdx].trim()) &&
431
396
  !isCodexDialogGlyphTail(frame.raw);
432
- if (!codexTailIsIdlePrompt && (0, cli_patterns_1.detectThinking)('codex', frame.lastLines)) {
433
- return {
434
- status: 'running',
435
- confidence: 'high',
436
- reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
437
- hasActivePrompt: false,
438
- evidence: 'positive',
439
- };
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);
440
401
  }
441
402
  }
442
403
  return null;
@@ -9,6 +9,11 @@
9
9
  * separate readings in two files; they are now the two halves of one marker.
10
10
  * Measured: `codex-dialogs-0157/quoted-approval-idle.txt` L997 (composer) under
11
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}.
12
17
  * - **dialog top** — not declared. codex removes its composer while a dialog is
13
18
  * open and the dialog takes the bottom of the pane (`codex-dialogs-0157/
14
19
  * approval.txt` L987-L1000), so the whole frame is the right fallback.
@@ -19,8 +24,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
19
24
  exports.CODEX_LIVE_REGION = void 0;
20
25
  exports.findCodexFooterBoundary = findCodexFooterBoundary;
21
26
  exports.findCodexContentEnd = findCodexContentEnd;
27
+ exports.findCodexComposerEndRow = findCodexComposerEndRow;
22
28
  const cli_patterns_1 = require("../../cli-patterns");
23
29
  const cli_patterns_2 = require("./cli-patterns");
30
+ const composer_text_1 = require("../../composer-text");
31
+ const ansi_1 = require("../../ansi");
24
32
  const live_region_1 = require("../live-region");
25
33
  /**
26
34
  * Index of the Codex status bar within the last 10 content rows, or -1.
@@ -53,14 +61,37 @@ function findCodexContentEnd(contentLines) {
53
61
  end--;
54
62
  return end + 1;
55
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
+ }
56
86
  exports.CODEX_LIVE_REGION = {
57
87
  composer: {
58
88
  locate({ raw, contentLines }) {
59
89
  const contentEnd = findCodexContentEnd(contentLines);
60
90
  const atBottom = (0, cli_patterns_2.isCodexComposerAtBottom)(raw, contentLines, contentEnd);
61
91
  const row = (0, cli_patterns_1.findCodexComposerRow)(contentLines);
62
- if (row >= 0)
63
- return { start: row, end: row, atBottom };
92
+ if (row >= 0) {
93
+ return { start: row, end: findCodexComposerEndRow(raw, contentLines, row, contentEnd), atBottom };
94
+ }
64
95
  if (!atBottom)
65
96
  return null;
66
97
  // The raw glyph row said "composer" although its text reads as a numbered