commandmate 0.49.1 → 0.49.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +128 -132
  3. package/.next/app-path-routes-manifest.json +22 -22
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/capabilities/route.js +1 -1
  17. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/hooks/agent-event/route.js +2 -2
  26. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  27. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  29. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  30. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  32. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  33. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  38. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  41. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  42. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/relays/route.js +1 -1
  45. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  46. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  50. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  51. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/repositories/clone/route.js +1 -1
  53. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  54. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/repositories/restore/route.js +1 -1
  57. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  58. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/repositories/route.js +1 -1
  60. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  61. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/scan/route.js +1 -1
  63. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/sync/route.js +1 -1
  66. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  70. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  71. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
  82. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
  86. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/verification/runs/route.js +1 -1
  88. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  91. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  94. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  97. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  106. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  167. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -1
  172. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  178. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +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]/prompt-response/strict/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
  202. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  210. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/send/route.js +2 -2
  219. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  220. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
  222. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  223. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/skills/route.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.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  245. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  246. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  248. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  249. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  251. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  252. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  254. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
  257. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
  265. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  266. package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  269. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/api/worktrees/route.js +1 -1
  272. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  273. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  275. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  277. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  278. package/.next/server/app/page_client-reference-manifest.js +1 -1
  279. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  280. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  281. package/.next/server/app/review/page.js +1 -1
  282. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  284. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  285. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  286. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  287. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  288. package/.next/server/app/worktrees/[id]/page.js +2 -2
  289. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  290. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  291. package/.next/server/app-paths-manifest.json +22 -22
  292. package/.next/server/chunks/1062.js +1 -0
  293. package/.next/server/chunks/110.js +1 -0
  294. package/.next/server/chunks/1501.js +5 -4
  295. package/.next/server/chunks/1656.js +2 -2
  296. package/.next/server/chunks/1957.js +2 -0
  297. package/.next/server/chunks/2119.js +1 -1
  298. package/.next/server/chunks/2445.js +1 -1
  299. package/.next/server/chunks/2897.js +1 -0
  300. package/.next/server/chunks/3417.js +1 -0
  301. package/.next/server/chunks/3505.js +1 -1
  302. package/.next/server/chunks/3756.js +1 -0
  303. package/.next/server/chunks/3801.js +3 -3
  304. package/.next/server/chunks/4911.js +1 -0
  305. package/.next/server/chunks/4936.js +1 -0
  306. package/.next/server/chunks/5209.js +2 -1
  307. package/.next/server/chunks/5354.js +1 -1
  308. package/.next/server/chunks/6130.js +1 -1
  309. package/.next/server/chunks/6401.js +1 -1
  310. package/.next/server/chunks/7023.js +2 -2
  311. package/.next/server/chunks/7905.js +1 -1
  312. package/.next/server/chunks/8581.js +15 -15
  313. package/.next/server/chunks/8728.js +2 -2
  314. package/.next/server/chunks/8782.js +1 -1
  315. package/.next/server/chunks/9390.js +1 -1
  316. package/.next/server/chunks/9584.js +1 -1
  317. package/.next/server/chunks/9731.js +2 -2
  318. package/.next/server/middleware-manifest.json +5 -5
  319. package/.next/server/pages/500.html +1 -1
  320. package/.next/server/server-reference-manifest.json +1 -1
  321. package/.next/static/chunks/{2407-675ba6b21844dc3b.js → 2407-07a237575e1ceb9e.js} +1 -1
  322. package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +1 -0
  323. package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
  324. package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
  325. package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
  326. package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
  327. package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +1 -0
  328. package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
  329. package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
  330. package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
  331. package/.next/static/chunks/app/sessions/{page-890fd50ec9739973.js → page-c6eb7c02db2f4c80.js} +1 -1
  332. package/.next/static/chunks/app/worktrees/[id]/{page-f6d3ab8185d93aae.js → page-33afc6aa96289fb0.js} +1 -1
  333. package/.next/trace +13 -13
  334. package/dist/cli/commands/ask.d.ts.map +1 -1
  335. package/dist/cli/commands/ask.js +56 -5
  336. package/dist/cli/commands/attach.d.ts +4 -1
  337. package/dist/cli/commands/attach.d.ts.map +1 -1
  338. package/dist/cli/commands/attach.js +19 -7
  339. package/dist/cli/commands/command-target.d.ts +7 -0
  340. package/dist/cli/commands/command-target.d.ts.map +1 -1
  341. package/dist/cli/commands/command-target.js +10 -0
  342. package/dist/cli/commands/instances.d.ts.map +1 -1
  343. package/dist/cli/commands/instances.js +38 -2
  344. package/dist/cli/commands/message-dispatch.d.ts +17 -3
  345. package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
  346. package/dist/cli/commands/message-dispatch.js +14 -8
  347. package/dist/cli/commands/relays.d.ts +2 -1
  348. package/dist/cli/commands/relays.d.ts.map +1 -1
  349. package/dist/cli/commands/relays.js +4 -3
  350. package/dist/cli/commands/respond-strict.d.ts.map +1 -1
  351. package/dist/cli/commands/respond-strict.js +22 -5
  352. package/dist/cli/commands/respond.d.ts +2 -2
  353. package/dist/cli/commands/respond.d.ts.map +1 -1
  354. package/dist/cli/commands/respond.js +40 -37
  355. package/dist/cli/commands/send.d.ts.map +1 -1
  356. package/dist/cli/commands/send.js +8 -4
  357. package/dist/cli/commands/wait-instance.d.ts +9 -1
  358. package/dist/cli/commands/wait-instance.d.ts.map +1 -1
  359. package/dist/cli/commands/wait-instance.js +15 -0
  360. package/dist/cli/commands/wait-poll-state.d.ts +18 -0
  361. package/dist/cli/commands/wait-poll-state.d.ts.map +1 -1
  362. package/dist/cli/commands/wait-verify.d.ts +2 -1
  363. package/dist/cli/commands/wait-verify.d.ts.map +1 -1
  364. package/dist/cli/commands/wait-verify.js +5 -1
  365. package/dist/cli/commands/wait.d.ts.map +1 -1
  366. package/dist/cli/commands/wait.js +37 -13
  367. package/dist/cli/commands/whoami.d.ts.map +1 -1
  368. package/dist/cli/commands/whoami.js +3 -1
  369. package/dist/cli/docs/agent-operations.d.ts +1 -1
  370. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  371. package/dist/cli/docs/agent-operations.js +1 -0
  372. package/dist/cli/types/api-responses.d.ts +3 -1
  373. package/dist/cli/types/api-responses.d.ts.map +1 -1
  374. package/dist/cli/utils/api-client.d.ts +55 -1
  375. package/dist/cli/utils/api-client.d.ts.map +1 -1
  376. package/dist/cli/utils/api-client.js +220 -18
  377. package/dist/cli/utils/follow-up-command.d.ts +38 -0
  378. package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
  379. package/dist/cli/utils/follow-up-command.js +57 -0
  380. package/dist/cli/utils/reply-ledger.d.ts +1 -1
  381. package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
  382. package/dist/cli/utils/reply-ledger.js +7 -2
  383. package/dist/cli/utils/server-capabilities.d.ts +18 -0
  384. package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
  385. package/dist/cli/utils/server-capabilities.js +36 -3
  386. package/dist/cli/utils/session-target.d.ts +1 -1
  387. package/dist/cli/utils/session-target.d.ts.map +1 -1
  388. package/dist/cli/utils/session-target.js +3 -0
  389. package/dist/cli/utils/verify-runner.d.ts +7 -0
  390. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  391. package/dist/cli/utils/verify-runner.js +51 -15
  392. package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
  393. package/dist/lib/cli-tools/session-name.js +11 -3
  394. package/dist/lib/session/send-attempt-types.d.ts +25 -0
  395. package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
  396. package/dist/lib/session/send-attempt-types.js +10 -1
  397. package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
  398. package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
  399. package/dist/lib/verification/session-kill-ledger.js +174 -0
  400. package/dist/server/locales/en/worktree.json +2 -0
  401. package/dist/server/locales/ja/worktree.json +2 -0
  402. package/dist/server/src/config/cli-tool-timing-config.js +1 -7
  403. package/dist/server/src/lib/auto-yes-poller.js +5 -1
  404. package/dist/server/src/lib/cli-tools/antigravity.js +5 -2
  405. package/dist/server/src/lib/cli-tools/base.js +39 -0
  406. package/dist/server/src/lib/cli-tools/codex.js +7 -4
  407. package/dist/server/src/lib/cli-tools/command-code.js +7 -3
  408. package/dist/server/src/lib/cli-tools/copilot.js +5 -3
  409. package/dist/server/src/lib/cli-tools/gemini.js +10 -2
  410. package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
  411. package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
  412. package/dist/server/src/lib/cli-tools/opencode.js +5 -2
  413. package/dist/server/src/lib/cli-tools/session-name.js +11 -3
  414. package/dist/server/src/lib/cli-tools/submit-composer-read.js +16 -6
  415. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +164 -7
  416. package/dist/server/src/lib/cli-tools/vibe-local.js +4 -2
  417. package/dist/server/src/lib/db/db-migration-path.js +63 -2
  418. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
  419. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
  420. package/dist/server/src/lib/prompt-answer-errors.js +76 -2
  421. package/dist/server/src/lib/session/agent-event-state.js +4 -0
  422. package/dist/server/src/lib/session/agent-session-lifecycle.js +6 -1
  423. package/dist/server/src/lib/session/claude-session.js +22 -6
  424. package/dist/server/src/lib/session/current-output-builder.js +5 -3
  425. package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
  426. package/dist/server/src/lib/session/prompt-submit-receipt.js +155 -0
  427. package/dist/server/src/lib/session/prompt-waiting-guard.js +10 -3
  428. package/dist/server/src/lib/session/send-attempt-state.js +48 -0
  429. package/dist/server/src/lib/session/send-attempt-types.js +10 -1
  430. package/dist/server/src/lib/session/send-user-message.js +5 -4
  431. package/dist/server/src/lib/session/session-launch-flight.js +243 -0
  432. package/dist/server/src/lib/session/session-starting-state.js +40 -4
  433. package/dist/server/src/lib/session/structured-prompt.js +12 -9
  434. package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
  435. package/dist/server/src/lib/session-cleanup.js +32 -0
  436. package/dist/server/src/lib/session-key-sender.js +0 -27
  437. package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
  438. package/dist/server/src/lib/verification/env-snapshot.js +11 -2
  439. package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
  440. package/package.json +5 -1
  441. package/release-notes/0.49.2.json +49 -0
  442. package/.next/server/chunks/3773.js +0 -1
  443. package/.next/server/chunks/5775.js +0 -1
  444. package/.next/server/chunks/7604.js +0 -2
  445. package/.next/static/chunks/3931-1a1abab16248f14d.js +0 -1
  446. package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
  447. package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
  448. package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
  449. package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
  450. package/.next/static/chunks/8606-ce17ffa77f39608e.js +0 -1
  451. package/.next/static/chunks/app/layout-8bfac4724277b47f.js +0 -1
  452. package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
  453. package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
  454. package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
  455. /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → yGatWDsS532awSs51kXyd}/_buildManifest.js +0 -0
  456. /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → yGatWDsS532awSs51kXyd}/_ssgManifest.js +0 -0
@@ -13,8 +13,8 @@ import { Command } from 'commander';
13
13
  export declare const ANSWER_NOT_DELIVERED = "answer_not_delivered";
14
14
  /**
15
15
  * Issue #3975: the answer was stopped part-way — some of its keys may be on
16
- * the pane. `/prompt-response` answers it as a 500 whose `error` carries this
17
- * code. Restated from `src/lib/prompt-answer-errors.ts` (`ANSWER_INPUT_LOST_REASON`).
16
+ * the pane. Both routes answer it as a 500 with this `reason` (Issue #3982).
17
+ * Restated from `src/lib/prompt-answer-errors.ts` (`ANSWER_INPUT_LOST_REASON`).
18
18
  */
19
19
  export declare const ANSWER_INPUT_LOST = "answer_input_lost";
20
20
  export declare function createRespondCommand(): Command;
@@ -1 +1 @@
1
- {"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/respond.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgKpC;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAoUrD,wBAAgB,oBAAoB,IAAI,OAAO,CA2I9C"}
1
+ {"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/respond.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkKpC;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AA0TrD,wBAAgB,oBAAoB,IAAI,OAAO,CA6I9C"}
@@ -16,6 +16,8 @@ const cli_tool_ids_1 = require("../config/cli-tool-ids");
16
16
  const agent_target_options_1 = require("../config/agent-target-options");
17
17
  const instances_1 = require("./instances");
18
18
  const command_target_1 = require("./command-target");
19
+ const follow_up_command_1 = require("../utils/follow-up-command");
20
+ const server_capabilities_1 = require("../utils/server-capabilities");
19
21
  const respond_strict_1 = require("./respond-strict");
20
22
  const kinds_1 = require("../../lib/prompt-observation/kinds");
21
23
  /**
@@ -134,37 +136,41 @@ const PROMPT_NO_LONGER_ACTIVE = 'prompt_no_longer_active';
134
136
  exports.ANSWER_NOT_DELIVERED = 'answer_not_delivered';
135
137
  /**
136
138
  * Issue #3975: the answer was stopped part-way — some of its keys may be on
137
- * the pane. `/prompt-response` answers it as a 500 whose `error` carries this
138
- * code. Restated from `src/lib/prompt-answer-errors.ts` (`ANSWER_INPUT_LOST_REASON`).
139
+ * the pane. Both routes answer it as a 500 with this `reason` (Issue #3982).
140
+ * Restated from `src/lib/prompt-answer-errors.ts` (`ANSWER_INPUT_LOST_REASON`).
139
141
  */
140
142
  exports.ANSWER_INPUT_LOST = 'answer_input_lost';
141
- /** Whether a failed `/prompt-response` request is the answer stopped part-way (Issue #3975). */
142
- function isAnswerInputLost(error) {
143
+ /**
144
+ * Whether a failed `/prompt-response` request is the answer stopped part-way
145
+ * (Issue #3975).
146
+ *
147
+ * Issue #3982: by `reason` alone on a server that declares
148
+ * `prompt-answer-reason`. The 500's `error` text can quote the answer (a tmux
149
+ * failure does), so a reason code found there is not evidence of anything. Only
150
+ * a server without the token — which put this reason nowhere but that text —
151
+ * is still read the old way. The probe is the memo `resolveCommandTarget`
152
+ * filled for this client; nothing is asked unless the request already failed.
153
+ */
154
+ async function isAnswerInputLost(error, client) {
143
155
  if (!(error instanceof api_client_1.ApiError) || (error.statusCode ?? 0) < 500)
144
156
  return false;
145
157
  const payload = error.payload;
146
158
  if (payload?.reason === exports.ANSWER_INPUT_LOST)
147
159
  return true;
148
- return typeof payload?.error === 'string' && payload.error.includes(exports.ANSWER_INPUT_LOST);
160
+ if (typeof payload?.error !== 'string' || !payload.error.includes(exports.ANSWER_INPUT_LOST))
161
+ return false;
162
+ return !(await (0, server_capabilities_1.serverReportsPromptAnswerReason)(client));
149
163
  }
150
164
  /**
151
- * The `capture` that reads the pane the answer was typed at (Issue #3975
152
- * review P2-2): the target the answer resolved to, never the worktree default,
153
- * and `--pane`, since the stored reply is not what was partly typed.
165
+ * Reports an answer stopped part-way (Issue #3975) and sets the exit code. The
166
+ * `capture` reads the pane the answer was typed at (review P2-2): the target
167
+ * the answer resolved to, never the worktree default, and `--pane`, since the
168
+ * stored reply is not what was partly typed.
154
169
  */
155
- function answeredPaneCaptureCommand(worktreeId, target) {
156
- const selector = target.instanceId
157
- ? ` --instance ${target.instanceId}`
158
- : target.agent
159
- ? ` --agent ${target.agent}`
160
- : '';
161
- return `commandmate capture ${worktreeId}${selector} --pane --tail 40`;
162
- }
163
- /** Reports an answer stopped part-way (Issue #3975) and sets the exit code. */
164
170
  function reportAnswerInputLost(worktreeId, target) {
165
171
  console.error(`Warning: The answer may have been only partly typed (reason: ${exports.ANSWER_INPUT_LOST}): the session was ` +
166
172
  'replaced part-way, so some of its keys may have reached the agent and the rest did not. ' +
167
- `Check the screen with \`${answeredPaneCaptureCommand(worktreeId, target)}\` before answering again.`);
173
+ `Check the screen with \`${(0, follow_up_command_1.dialogCaptureCommand)(worktreeId, target)}\` before answering again.`);
168
174
  // The exit code `decision_not_delivered` uses (Issue #3975: no new code).
169
175
  process.exit(types_1.ExitCode.UNEXPECTED_ERROR);
170
176
  }
@@ -177,10 +183,6 @@ const PLAN_REVIEW_ACTIONS = ['comment', 'submit', 'approve', 'cancel'];
177
183
  function isPlanReviewRefusal(reason) {
178
184
  return reason.startsWith('plan_review_');
179
185
  }
180
- /** ` --instance <id>` as the caller spelled it, or nothing. */
181
- function instanceFlag(instance) {
182
- return instance ? ` --instance ${instance}` : '';
183
- }
184
186
  /**
185
187
  * `textFollowUp` from a `/prompt-response` success (Issue #3093), read
186
188
  * defensively: an older server omits it, and the route's mirror type is not
@@ -264,7 +266,7 @@ function buildPromptResponseBody(useDefault, answer, agent, instanceId, planRevi
264
266
  return body;
265
267
  }
266
268
  /** Reports a `success: false` result and sets the exit code. */
267
- function reportFailedResponse(result, worktreeId, answer, useDefault, options) {
269
+ function reportFailedResponse(result, worktreeId, answer, useDefault, target) {
268
270
  // [DR2-06] Check reason for failure
269
271
  const reason = result.reason || 'unknown';
270
272
  // Issue #1681 / #1726: these mean the server refused BEFORE sending,
@@ -308,9 +310,9 @@ function reportFailedResponse(result, worktreeId, answer, useDefault, options) {
308
310
  // be mapped onto a choice", and only when the answer was not already
309
311
  // a number (where the number itself is what was wrong).
310
312
  if (reason === 'unresolvable_answer' && answer !== undefined && !/^\d+$/.test(answer.trim())) {
311
- const target = options.instance ? ` --instance ${options.instance}` : '';
312
- console.error(`Hint: answer with the option number — \`commandmate respond ${worktreeId} <number>${target}\` ` +
313
- `(\`commandmate capture ${worktreeId}${target}\` prints the dialog and its numbers).`);
313
+ // Issue #3982: the resolved target, and the pane — where the numbers are.
314
+ console.error(`Hint: answer with the option number — \`${(0, follow_up_command_1.followUpCommand)('respond', worktreeId, target, '<number>')}\` ` +
315
+ `(\`${(0, follow_up_command_1.dialogCaptureCommand)(worktreeId, target)}\` prints the dialog and its numbers).`);
314
316
  }
315
317
  }
316
318
  else {
@@ -322,7 +324,7 @@ function reportFailedResponse(result, worktreeId, answer, useDefault, options) {
322
324
  if (reason === PROMPT_NO_LONGER_ACTIVE && !useDefault && answer !== undefined && !/^\d+$/.test(answer.trim())) {
323
325
  console.error('Hint: no dialog is open, so this text was not delivered. If you just chose an option that asks ' +
324
326
  'for text (e.g. "No, tell … what to do differently"), the agent is waiting for it in its input box — ' +
325
- `send it with \`commandmate send ${worktreeId} "<text>"${instanceFlag(options.instance)}\`.`);
327
+ `send it with \`${(0, follow_up_command_1.followUpCommand)('send', worktreeId, target, '"<text>"')}\`.`);
326
328
  }
327
329
  }
328
330
  // Issue #1726: an option number the agent's own payload does not offer
@@ -334,15 +336,14 @@ function reportFailedResponse(result, worktreeId, answer, useDefault, options) {
334
336
  * What was done on Command Code's plan review (Issue #3125), and the next step:
335
337
  * a pinned comment is not delivered to the agent until the review is submitted.
336
338
  */
337
- function printPlanReviewOutcome(result, worktreeId, options) {
339
+ function printPlanReviewOutcome(result, worktreeId, target) {
338
340
  const planReview = result.planReview;
339
341
  if (!planReview)
340
342
  return;
341
- const target = instanceFlag(options.instance);
342
343
  switch (planReview.action) {
343
344
  case 'comment':
344
345
  console.log(`Plan review: pinned comment "${planReview.comment ?? ''}".`);
345
- console.error(`Next: send the review with \`commandmate respond ${worktreeId} --plan-review submit${target}\` ` +
346
+ console.error(`Next: send the review with \`${(0, follow_up_command_1.followUpCommand)('respond', worktreeId, target, '--plan-review submit')}\` ` +
346
347
  `(ctrl+r), or approve with \`--plan-review approve\` (comments go along as notes).`);
347
348
  break;
348
349
  case 'submit':
@@ -358,7 +359,7 @@ function printPlanReviewOutcome(result, worktreeId, options) {
358
359
  console.log('Plan review: approved the plan (ctrl+a).');
359
360
  if (planReview.pendingCommentsBefore > 0) {
360
361
  console.error('Note: with pending comments Command Code may ask how to approve — confirm with ' +
361
- `\`commandmate respond ${worktreeId} --plan-review approve${target}\` again, or go back with \`--plan-review cancel\`.`);
362
+ `\`${(0, follow_up_command_1.followUpCommand)('respond', worktreeId, target, '--plan-review approve')}\` again, or go back with \`--plan-review cancel\`.`);
362
363
  }
363
364
  }
364
365
  break;
@@ -465,8 +466,10 @@ Strict respond (--expect-screen <kind> --observation <token> <label>):
465
466
  // and falls back to the worktree default, so `--instance codex` alone
466
467
  // answered into a session that was never started. Resolve the tool the
467
468
  // instance is registered under first.
468
- const { agent, instanceId } = await (0, command_target_1.resolveCommandTarget)(client, worktreeId, options.instance, options.agent);
469
+ const commandTarget = await (0, command_target_1.resolveCommandTarget)(client, worktreeId, options.instance, options.agent);
470
+ const { agent, instanceId } = commandTarget;
469
471
  // Issue #2376: the resolved id. /prompt-response reads instance ids.
472
+ // Issue #3982: every hint below names `commandTarget`, never `options.instance`.
470
473
  const body = buildPromptResponseBody(useDefault, answer, agent, instanceId, options.planReview);
471
474
  // Issue #2040: for an agent that publishes per-decision ids (opencode
472
475
  // today, and only opencode), a bare `respond <worktree> 3` names the ONE
@@ -503,18 +506,18 @@ Strict respond (--expect-screen <kind> --observation <token> <label>):
503
506
  catch (error) {
504
507
  // Issue #3975: stopped part-way is not "the server failed" — some
505
508
  // keys may be on the pane, and the operator has to look first.
506
- if (!isAnswerInputLost(error))
509
+ if (!(await isAnswerInputLost(error, client)))
507
510
  throw error;
508
- reportAnswerInputLost(worktreeId, { agent, instanceId });
511
+ reportAnswerInputLost(worktreeId, commandTarget);
509
512
  return;
510
513
  }
511
514
  }
512
515
  if (result && !result.success) {
513
- reportFailedResponse(result, worktreeId, answer, useDefault, options);
516
+ reportFailedResponse(result, worktreeId, answer, useDefault, commandTarget);
514
517
  }
515
518
  printResolvedAudit(result, answer);
516
519
  if (result && 'planReview' in result)
517
- printPlanReviewOutcome(result, worktreeId, options);
520
+ printPlanReviewOutcome(result, worktreeId, commandTarget);
518
521
  console.error('Response sent.');
519
522
  // Issue #3093: the option just chosen continues as typed text, which the
520
523
  // dialog no longer takes — name the command that does deliver it.
@@ -522,7 +525,7 @@ Strict respond (--expect-screen <kind> --observation <token> <label>):
522
525
  if (followUp) {
523
526
  console.error(`Next: option ${followUp.optionNumber} ("${followUp.optionLabel}") asks for your text, and the dialog ` +
524
527
  'is closed now, so `respond` cannot deliver it — send it with ' +
525
- `\`commandmate send ${worktreeId} "<text>"${instanceFlag(options.instance)}\`.`);
528
+ `\`${(0, follow_up_command_1.followUpCommand)('send', worktreeId, commandTarget, '"<text>"')}\`.`);
526
529
  }
527
530
  }
528
531
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0XpC,wBAAgB,iBAAiB,IAAI,OAAO,CAiK3C"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4XpC,wBAAgB,iBAAiB,IAAI,OAAO,CAmK3C"}
@@ -16,6 +16,7 @@ const model_validation_1 = require("../config/model-validation");
16
16
  const agent_instances_1 = require("../utils/agent-instances");
17
17
  const instances_1 = require("./instances");
18
18
  const command_target_1 = require("./command-target");
19
+ const follow_up_command_1 = require("../utils/follow-up-command");
19
20
  const auto_yes_1 = require("./auto-yes");
20
21
  const relays_1 = require("./relays");
21
22
  const message_dispatch_1 = require("./message-dispatch");
@@ -34,9 +35,10 @@ const SEND_VERIFIED_MAX_LINES = 240;
34
35
  * older daemon, or a truncated body. The code is the contract; the sentence is
35
36
  * a courtesy, and the CLI must still say what to do without it.
36
37
  */
37
- function promptWaitingFallback(worktreeId) {
38
+ function promptWaitingFallback(worktreeId, target) {
38
39
  return (`${worktreeId} is waiting on a prompt; the message was not sent. ` +
39
- `Answer it first: \`commandmate respond ${worktreeId} <answer>\`.`);
40
+ // Issue #3982: the prompt is the resolved target's, not the worktree default's.
41
+ `Answer it first: \`${(0, follow_up_command_1.followUpCommand)('respond', worktreeId, target, '<answer>')}\`.`);
40
42
  }
41
43
  /**
42
44
  * Resolve --duration to milliseconds, exiting on an invalid value.
@@ -349,7 +351,8 @@ worktree and send a short message that tells the agent to read that file.
349
351
  // the roster is the only place that pairs the two. Resolve it once, up
350
352
  // front, so the task row, the send and auto-yes all name the same tool
351
353
  // as the session that actually starts.
352
- const { agent, instanceId } = await (0, command_target_1.resolveCommandTarget)(client, worktreeId, options.instance, options.agent);
354
+ const commandTarget = await (0, command_target_1.resolveCommandTarget)(client, worktreeId, options.instance, options.agent);
355
+ const { agent, instanceId } = commandTarget;
353
356
  // Issue #2376: the RESOLVED id, never the string the user typed.
354
357
  // `--instance "Codex 2"` has to reach /send as `codex-2`; no route but
355
358
  // /resolve-target knows how to read an alias.
@@ -426,7 +429,8 @@ worktree and send a short message that tells the agent to read that file.
426
429
  await (0, message_dispatch_1.postMessage)(client, worktreeId, sendBody, {
427
430
  relay,
428
431
  onFailure: failTask,
429
- promptWaitingFallback: promptWaitingFallback(worktreeId),
432
+ promptWaitingFallback: promptWaitingFallback(worktreeId, commandTarget),
433
+ target: commandTarget,
430
434
  });
431
435
  console.error('Message sent.');
432
436
  if (taskId) {
@@ -3,7 +3,8 @@
3
3
  * Issue #3964: split out of wait.ts.
4
4
  */
5
5
  import type { WaitOptions } from '../types';
6
- import type { ApiClient } from '../utils/api-client';
6
+ import { type ApiClient } from '../utils/api-client';
7
+ import { type CommandTarget } from './command-target';
7
8
  /**
8
9
  * `options` with `--instance` resolved from a selector to an instance ID
9
10
  * (Issue #2376).
@@ -18,4 +19,11 @@ import type { ApiClient } from '../utils/api-client';
18
19
  * @param options - The options as given
19
20
  */
20
21
  export declare function resolveWaitInstance<T extends WaitOptions>(client: ApiClient, worktreeId: string, options: T): Promise<T>;
22
+ /**
23
+ * The target `wait`'s hints name (Issue #3982): the `--instance` that
24
+ * {@link resolveWaitInstance} resolved, or none. `wait` has no `--agent`.
25
+ *
26
+ * @param options - Options already passed through {@link resolveWaitInstance}
27
+ */
28
+ export declare function waitCommandTarget(options: Pick<WaitOptions, 'instance'>): CommandTarget;
21
29
  //# sourceMappingURL=wait-instance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait-instance.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-instance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAC7D,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,CAAC,CAAC,CAkBZ"}
1
+ {"version":3,"file":"wait-instance.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-instance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEvE;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAC7D,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,CAAC,CAAC,CAqBZ;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,aAAa,CAKvF"}
@@ -5,8 +5,11 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.resolveWaitInstance = resolveWaitInstance;
8
+ exports.waitCommandTarget = waitCommandTarget;
8
9
  const types_1 = require("../types");
10
+ const api_client_1 = require("../utils/api-client");
9
11
  const instances_1 = require("./instances");
12
+ const command_target_1 = require("./command-target");
10
13
  /**
11
14
  * `options` with `--instance` resolved from a selector to an instance ID
12
15
  * (Issue #2376).
@@ -28,6 +31,9 @@ async function resolveWaitInstance(client, worktreeId, options) {
28
31
  return { ...options, instance: target.instanceId ?? options.instance };
29
32
  }
30
33
  catch (error) {
34
+ // Issue #3983: `--timeout` ran out while resolving. Exit 124 rather than
35
+ // degrade: carrying on with the selector would wait past the deadline.
36
+ (0, api_client_1.rethrowIfDeadlineExceeded)(error);
31
37
  // Degrade to the pre-#2376 behaviour rather than failing the wait. An
32
38
  // instance ID needs no resolution to reach `/current-output?instance=` —
33
39
  // resolution exists here so that an ALIAS can — so a resolver that cannot
@@ -39,3 +45,12 @@ async function resolveWaitInstance(client, worktreeId, options) {
39
45
  return options;
40
46
  }
41
47
  }
48
+ /**
49
+ * The target `wait`'s hints name (Issue #3982): the `--instance` that
50
+ * {@link resolveWaitInstance} resolved, or none. `wait` has no `--agent`.
51
+ *
52
+ * @param options - Options already passed through {@link resolveWaitInstance}
53
+ */
54
+ function waitCommandTarget(options) {
55
+ return (0, command_target_1.commandTargetOf)(options.instance ? { cliToolId: undefined, instanceId: options.instance } : null, undefined);
56
+ }
@@ -39,6 +39,14 @@ export interface PollWorktreeOptions extends WaitOptions {
39
39
  * record, read only: nothing `wait` decides depends on it.
40
40
  */
41
41
  onTurnRecord?: (openedAt: number | null, closedAt: number | null) => void;
42
+ /**
43
+ * Epoch ms the command started, from which `--timeout` counts (Issue #3983).
44
+ *
45
+ * `--timeout` is the deadline of the whole command, so the reads before the
46
+ * poll (`--instance` resolution, the task ledger, `ask`'s send) are inside it
47
+ * rather than in front of it. Absent means the poll's own start, as before.
48
+ */
49
+ timeoutStartedAt?: number;
42
50
  }
43
51
  /**
44
52
  * What {@link pollWorktree} carries from one poll to the next: every variable its
@@ -111,7 +119,17 @@ export interface PollContext {
111
119
  client: ApiClient;
112
120
  worktreeId: string;
113
121
  options: PollWorktreeOptions;
122
+ /**
123
+ * Where `--timeout` counts from: {@link PollWorktreeOptions.timeoutStartedAt}
124
+ * when given, else {@link pollStartedAt} (Issue #3983).
125
+ */
114
126
  startTime: number;
127
+ /**
128
+ * When this poll began. The turn window (turn adoption, #1975's pending-prompt
129
+ * hold) is about the poll, not about the command, and stays here so that a
130
+ * slow send before an `ask`'s poll does not shift it (Issue #3983).
131
+ */
132
+ pollStartedAt: number;
115
133
  autoYesGraceSeconds: number;
116
134
  autoYesGraceMs: number;
117
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wait-poll-state.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-poll-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9E;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3E;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,cAAc,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,cAAc,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5D;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"wait-poll-state.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-poll-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9E;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1E;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,cAAc,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,cAAc,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5D;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -28,7 +28,8 @@ export declare function shouldVerify(exitCode: number, options: WaitOptions): bo
28
28
  * run that follows is judged against the contract it was supposed to judge.
29
29
  *
30
30
  * Never throws: an unreadable ledger costs the attribution, and refusing to
31
- * verify over it would cost every gate.
31
+ * verify over it would cost every gate. The one exception is a client deadline
32
+ * (`--timeout`, Issue #3983), which is rethrown as the exit 124 it is.
32
33
  *
33
34
  * @returns the task id, or undefined to leave resolution to the server
34
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"wait-verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAY,MAAM,qBAAqB,CAAC;AAG1D,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAG5E;AAgBD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CASxE"}
1
+ {"version":3,"file":"wait-verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAuC,MAAM,qBAAqB,CAAC;AAGrF,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAG5E;AAgBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmB7B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CASxE"}
@@ -55,7 +55,8 @@ const IN_FLIGHT_TASK_STATUSES = new Set([
55
55
  * run that follows is judged against the contract it was supposed to judge.
56
56
  *
57
57
  * Never throws: an unreadable ledger costs the attribution, and refusing to
58
- * verify over it would cost every gate.
58
+ * verify over it would cost every gate. The one exception is a client deadline
59
+ * (`--timeout`, Issue #3983), which is rethrown as the exit 124 it is.
59
60
  *
60
61
  * @returns the task id, or undefined to leave resolution to the server
61
62
  */
@@ -68,6 +69,9 @@ async function resolveWaitedTaskId(client, worktreeId) {
68
69
  return task.id;
69
70
  }
70
71
  catch (error) {
72
+ // Issue #3983: `--timeout` ran out before the poll began — exit 124, and
73
+ // nothing after it (no poll, no verification) runs.
74
+ (0, api_client_1.rethrowIfDeadlineExceeded)(error);
71
75
  console.error(`Note: could not read the task ledger for ${worktreeId} ` +
72
76
  `(${error instanceof Error ? error.message : String(error)}); ` +
73
77
  'verification will resolve its own task.');
@@ -1 +1 @@
1
- {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAIV,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAA+B,MAAM,qBAAqB,CAAC;AA2C7E,OAAO,KAAK,EAA0B,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAiBrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAk8BjC;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,6EAA6E;IAC7E,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD,CAAC,CAuJD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAgN3C"}
1
+ {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAIV,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAA+B,MAAM,qBAAqB,CAAC;AA2C7E,OAAO,KAAK,EAA0B,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAkBrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAo8BjC;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,6EAA6E;IAC7E,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD,CAAC,CAkKD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CA8N3C"}
@@ -39,6 +39,7 @@ const wait_turn_boundary_1 = require("./wait-turn-boundary");
39
39
  const wait_hook_stop_settle_1 = require("./wait-hook-stop-settle");
40
40
  const wait_verify_1 = require("./wait-verify");
41
41
  const wait_instance_1 = require("./wait-instance");
42
+ const follow_up_command_1 = require("../utils/follow-up-command");
42
43
  const wait_poll_bookkeeping_1 = require("./wait-poll-bookkeeping");
43
44
  // Issue #3964: the split-out modules' exports, re-exported so every import of
44
45
  // `./wait` keeps working.
@@ -220,12 +221,13 @@ function buildSelectionListOutput(worktreeId, data) {
220
221
  * What `wait` says about a frame that stayed unclassified for the whole dwell
221
222
  * (Issue #1708): the stderr line, and the `question` of its exit-10 payload.
222
223
  */
223
- function describeUnclassifiedFrame(worktreeId, data, dwellMs) {
224
+ function describeUnclassifiedFrame(worktreeId, data, dwellMs, options) {
224
225
  const dwellSeconds = Math.round(dwellMs / 1000);
225
226
  return (`Unclassified interactive frame on ${worktreeId} for ${dwellSeconds}s ` +
226
227
  `(status=${data.sessionStatus ?? 'unknown'}/${data.sessionStatusReason ?? 'unknown'}). ` +
227
228
  `The detection layer could not parse it; inspect the raw pane with ` +
228
- `\`commandmate capture ${worktreeId} --pane\`.` +
229
+ // Issue #3982: the instance waited on, and enough of its pane for a dialog.
230
+ `\`${(0, follow_up_command_1.dialogCaptureCommand)(worktreeId, (0, wait_instance_1.waitCommandTarget)(options))}\`.` +
229
231
  // Issue #2095: the sidebar is exactly this frame's reason, and the
230
232
  // one recovery is a keystroke in the pane. Riding the message keeps
231
233
  // the exit-code table (10, `type: unclassified`) unchanged for every
@@ -467,7 +469,7 @@ function unclassifiedStage(poll, state, data) {
467
469
  state.unclassifiedSince = Date.now();
468
470
  const dwellMs = Date.now() - state.unclassifiedSince;
469
471
  if (dwellMs >= UNCLASSIFIED_DWELL_MS) {
470
- const question = describeUnclassifiedFrame(worktreeId, data, dwellMs);
472
+ const question = describeUnclassifiedFrame(worktreeId, data, dwellMs, poll.options);
471
473
  // Issue #3730: why Auto-Yes is not there to answer it, if a restart is why.
472
474
  const restartNotice = (0, wait_notices_1.formatRestartReleaseNotice)(worktreeId, data, poll.options.instance);
473
475
  if (options.onPrompt === 'human') {
@@ -668,7 +670,7 @@ async function unsettledTurnStage(poll, state, data, judgingSettledFrame) {
668
670
  `the end of this turn (turnStartedAt=${state.turnStartedAt}, ` +
669
671
  `lastStopEventAt=${data.lastStopEventAt ?? 'none'}, ${(0, wait_turn_boundary_1.describeTurnClose)(data)}). ` +
670
672
  'Not reporting completion; inspect with ' +
671
- `\`commandmate capture ${worktreeId} --json\`.`);
673
+ `\`${(0, follow_up_command_1.followUpCommand)('capture', worktreeId, (0, wait_instance_1.waitCommandTarget)(poll.options), undefined, '--json')}\`.`);
672
674
  return { kind: 'wait' };
673
675
  }
674
676
  return { kind: 'next' };
@@ -721,7 +723,7 @@ function selfResumeHoldStage(poll, state, data, selfResumeStopAt) {
721
723
  * {@link completionStage} needs for its basis.
722
724
  */
723
725
  async function promptLedgerStage(poll, state, data, judgingSettledFrame) {
724
- const { worktreeId, startTime } = poll;
726
+ const { worktreeId, pollStartedAt } = poll;
725
727
  // Issue #1975: the same frame, one question further back. #1839's gate
726
728
  // above can only fire once a turn has been ADOPTED, and `send` leaves a
727
729
  // window ~1s wide in which nothing has been: the newest structured event
@@ -747,7 +749,7 @@ async function promptLedgerStage(poll, state, data, judgingSettledFrame) {
747
749
  state.promptLedgerReadable = ledger.readable;
748
750
  if (ledger.readable && ledger.submittedAt !== null) {
749
751
  if ((0, wait_turn_boundary_1.outstandingPrompt)(data, ledger.submittedAt)) {
750
- const heldMs = Date.now() - startTime;
752
+ const heldMs = Date.now() - pollStartedAt;
751
753
  if (heldMs < wait_turn_boundary_1.PENDING_PROMPT_HOLD_MS) {
752
754
  console.error(`Waiting: ${worktreeId} is at its composer, but the newest prompt sent to it ` +
753
755
  `has no reported end (sentAt=${new Date(ledger.submittedAt).toISOString()}, ` +
@@ -855,7 +857,10 @@ async function readyStage(poll, state, data, selfResumeStopAt, selfResumeSuffix,
855
857
  * {@link resolveWaitInstance}.
856
858
  */
857
859
  async function pollWorktree(client, worktreeId, options) {
858
- const startTime = Date.now();
860
+ const pollStartedAt = Date.now();
861
+ // Issue #3983: `--timeout` counts from the command's start when the caller
862
+ // passed it, so the reads before this poll are inside the deadline.
863
+ const startTime = options.timeoutStartedAt ?? pollStartedAt;
859
864
  const state = {
860
865
  lastActivityTime: Date.now(),
861
866
  lastContent: '',
@@ -871,7 +876,15 @@ async function pollWorktree(client, worktreeId, options) {
871
876
  };
872
877
  const autoYesGraceSeconds = options.autoYesGrace ?? AUTO_YES_GRACE_DEFAULT_SECONDS;
873
878
  const autoYesGraceMs = autoYesGraceSeconds * 1000;
874
- const poll = { client, worktreeId, options, startTime, autoYesGraceSeconds, autoYesGraceMs };
879
+ const poll = {
880
+ client,
881
+ worktreeId,
882
+ options,
883
+ startTime,
884
+ pollStartedAt,
885
+ autoYesGraceSeconds,
886
+ autoYesGraceMs,
887
+ };
875
888
  /**
876
889
  * What the completion line adds when this wait held for a self-resume, or ''
877
890
  * (Issue #2614). `basis=` keeps its word: the verdict is still the agent's own
@@ -922,7 +935,7 @@ async function pollWorktree(client, worktreeId, options) {
922
935
  await (0, wait_timing_1.sleep)(wait_timing_1.POLL_INTERVAL_MS);
923
936
  continue;
924
937
  }
925
- (0, wait_poll_bookkeeping_1.adoptAndPublishTurn)(state, data, startTime, options);
938
+ (0, wait_poll_bookkeeping_1.adoptAndPublishTurn)(state, data, pollStartedAt, options);
926
939
  // Issue #2614: a self-resume hold is about one `stop`, and ends the first
927
940
  // time that `stop` is no longer the newest word — the agent woke (a
928
941
  // turn-opening event) or stopped again. Checked on every poll, ahead of
@@ -1086,6 +1099,9 @@ The observation on exit 10 (Issue #3755):
1086
1099
  a missing record does not mean Auto-Yes can answer.
1087
1100
  `)
1088
1101
  .action(async (worktreeIds, options) => {
1102
+ // Issue #3983: `--timeout` is the deadline of the whole command, counted
1103
+ // from here — the reads before the poll included.
1104
+ const commandStartedAt = Date.now();
1089
1105
  try {
1090
1106
  // [SEC4-04] Validate all worktree IDs
1091
1107
  for (const id of worktreeIds) {
@@ -1108,20 +1124,28 @@ The observation on exit 10 (Issue #3755):
1108
1124
  return;
1109
1125
  }
1110
1126
  const client = new api_client_1.ApiClient({ token: options.token });
1127
+ // Issue #3983: the reads before the poll go through a client bounded by
1128
+ // `--timeout`; one that runs out ends the command with 124 before any
1129
+ // poll or verification. The poll bounds its own reads by the same
1130
+ // clock (`timeoutStartedAt`), and verification — after the wait, and
1131
+ // not part of it — keeps the unbounded `client`.
1132
+ const timeoutStartedAt = options.timeout ? commandStartedAt : undefined;
1133
+ const preflightClient = client.withDeadline(options.timeout ? commandStartedAt + options.timeout * 1000 : undefined);
1134
+ const pollOptions = (resolved) => timeoutStartedAt === undefined ? resolved : { ...resolved, timeoutStartedAt };
1111
1135
  // Issue #2376: resolve the selector PER worktree. `wait a b --instance
1112
1136
  // "Codex 2"` is one alias against two rosters, and the id behind it can
1113
1137
  // legitimately differ — resolving once and reusing the answer would poll
1114
1138
  // the wrong session on the second worktree.
1115
- const perWorktreeOptions = await Promise.all(worktreeIds.map(id => (0, wait_instance_1.resolveWaitInstance)(client, id, options)));
1139
+ const perWorktreeOptions = await Promise.all(worktreeIds.map(id => (0, wait_instance_1.resolveWaitInstance)(preflightClient, id, options)));
1116
1140
  // Issue #1620: resolved before any polling starts. Once the agent stops
1117
1141
  // there is no reliable way left to tell which contract this wait was
1118
1142
  // about — the agent's own verification may have closed it by then.
1119
1143
  const boundTaskIds = (0, wait_verify_1.verifyRequested)(options)
1120
- ? await Promise.all(worktreeIds.map(id => (0, wait_verify_1.resolveWaitedTaskId)(client, id)))
1144
+ ? await Promise.all(worktreeIds.map(id => (0, wait_verify_1.resolveWaitedTaskId)(preflightClient, id)))
1121
1145
  : worktreeIds.map(() => undefined);
1122
1146
  if (worktreeIds.length === 1) {
1123
1147
  // Single worktree
1124
- const result = await pollWorktree(client, worktreeIds[0], perWorktreeOptions[0]);
1148
+ const result = await pollWorktree(client, worktreeIds[0], pollOptions(perWorktreeOptions[0]));
1125
1149
  if (result.output) {
1126
1150
  // stdout for result (JSON output)
1127
1151
  console.log(JSON.stringify(result.output));
@@ -1135,7 +1159,7 @@ The observation on exit 10 (Issue #3755):
1135
1159
  return;
1136
1160
  }
1137
1161
  // [DR1-07] Multiple worktrees: Promise.allSettled for error isolation
1138
- const results = await Promise.allSettled(worktreeIds.map((id, index) => pollWorktree(client, id, perWorktreeOptions[index])));
1162
+ const results = await Promise.allSettled(worktreeIds.map((id, index) => pollWorktree(client, id, pollOptions(perWorktreeOptions[index]))));
1139
1163
  // Collect results
1140
1164
  const outputs = [];
1141
1165
  let finalExitCode = types_1.WaitExitCode.SUCCESS;
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAsC,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMhD;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAOhC,kFAAkF;AAClF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,cAAc,CAAC;AAEpD,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,uFAAuF;IACvF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,uFAAuF;IACvF,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,EAAE,cAAc,CAAC;CACxB;AAcD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,MAAM,GAAG,IAAI,CASf;AAkDD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqCjC;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,EAChD,SAAS,EAAE,MAAM,GAChB,cAAc,GAAG,IAAI,CAIvB;AASD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAS5E;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAMzE;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAY9F;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAO/B;AAED,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,QAMmC,CAAC;AAEvE,wBAAgB,mBAAmB,IAAI,OAAO,CA6D7C"}
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAsC,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,SAAS,EAA6B,MAAM,qBAAqB,CAAC;AAM3E;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAOhC,kFAAkF;AAClF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,cAAc,CAAC;AAEpD,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,uFAAuF;IACvF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,uFAAuF;IACvF,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,EAAE,cAAc,CAAC;CACxB;AAcD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,MAAM,GAAG,IAAI,CASf;AAoDD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqCjC;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,EAChD,SAAS,EAAE,MAAM,GAChB,cAAc,GAAG,IAAI,CAIvB;AASD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAS5E;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAMzE;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAY9F;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAO/B;AAED,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,QAMmC,CAAC;AAEvE,wBAAgB,mBAAmB,IAAI,OAAO,CA6D7C"}
@@ -111,7 +111,9 @@ async function readWorktreeIds(client) {
111
111
  const response = await client.get('/api/worktrees');
112
112
  return new Set((response.worktrees ?? []).map((wt) => wt.id));
113
113
  }
114
- catch {
114
+ catch (error) {
115
+ // Issue #3983: a command deadline is not "no list" — it stays exit 124.
116
+ (0, api_client_1.rethrowIfDeadlineExceeded)(error);
115
117
  return null;
116
118
  }
117
119
  }