commandmate 0.48.0 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +164 -164
  3. package/.next/app-path-routes-manifest.json +30 -30
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  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_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/push/escalation/route.js +1 -1
  31. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/push/vapid/route.js +1 -1
  34. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  63. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  70. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  153. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  155. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  156. package/.next/server/app/page_client-reference-manifest.js +1 -1
  157. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  159. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  160. package/.next/server/app/sessions/page.js +1 -1
  161. package/.next/server/app/sessions/page.js.nft.json +1 -1
  162. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  163. package/.next/server/app/skills/[skillId]/page.js +1 -1
  164. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  165. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  167. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  168. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  169. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  170. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  171. package/.next/server/app/worktrees/[id]/page.js +3 -3
  172. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  173. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  174. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  175. package/.next/server/app-paths-manifest.json +30 -30
  176. package/.next/server/chunks/1601.js +2 -2
  177. package/.next/server/chunks/1656.js +2 -2
  178. package/.next/server/chunks/1945.js +3 -3
  179. package/.next/server/chunks/2069.js +1 -0
  180. package/.next/server/chunks/2422.js +1 -1
  181. package/.next/server/chunks/2534.js +1 -1
  182. package/.next/server/chunks/3241.js +1 -1
  183. package/.next/server/chunks/4243.js +1 -1
  184. package/.next/server/chunks/4248.js +1 -1
  185. package/.next/server/chunks/4280.js +1 -1
  186. package/.next/server/chunks/6119.js +1 -1
  187. package/.next/server/chunks/6130.js +1 -1
  188. package/.next/server/chunks/6401.js +1 -1
  189. package/.next/server/chunks/6486.js +1 -1
  190. package/.next/server/chunks/720.js +2 -2
  191. package/.next/server/chunks/7604.js +2 -2
  192. package/.next/server/chunks/7905.js +1 -1
  193. package/.next/server/chunks/8581.js +3 -3
  194. package/.next/server/chunks/8728.js +3 -3
  195. package/.next/server/chunks/8791.js +1 -1
  196. package/.next/server/chunks/9390.js +1 -1
  197. package/.next/server/chunks/9627.js +3 -3
  198. package/.next/server/middleware-manifest.json +5 -5
  199. package/.next/server/pages/500.html +1 -1
  200. package/.next/server/server-reference-manifest.json +1 -1
  201. package/.next/static/chunks/1128-914c559913546bbc.js +1 -0
  202. package/.next/static/chunks/{2407-26139a8a2f1adbe8.js → 2407-ab92ae9837c39dce.js} +1 -1
  203. package/.next/static/chunks/{2619-a305ad4810f1393a.js → 2619-04bc32f026a0d946.js} +1 -1
  204. package/.next/static/chunks/{2863-f0121af1cbbedb3b.js → 2863-7173dc305dffc4f6.js} +1 -1
  205. package/.next/static/chunks/6288-6fadbba6e84393b2.js +1 -0
  206. package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +1 -0
  207. package/.next/static/chunks/{8165-c68b3dc844210e6a.js → 8165-263172c17ae8e8c3.js} +1 -1
  208. package/.next/static/chunks/9079-987939d231704218.js +1 -0
  209. package/.next/static/chunks/app/{layout-46b4cbf07520d9b6.js → layout-aa8e66164a4367af.js} +1 -1
  210. package/.next/static/chunks/app/sessions/{page-fb241bed579c67aa.js → page-cfd645305e25fd33.js} +1 -1
  211. package/.next/static/chunks/app/skills/[skillId]/{page-52ba58712faf3378.js → page-cb6e74fd9a6a571d.js} +1 -1
  212. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-704086656fb45699.js +1 -0
  213. package/.next/static/chunks/app/worktrees/[id]/{page-cbc7749a33450cc5.js → page-a8d7886703ffc7b4.js} +1 -1
  214. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-c601f3b3ece6557e.js → page-373ea37b16d930c7.js} +1 -1
  215. package/.next/static/css/{743f79ff19ab91e9.css → db8959555c3d9c96.css} +1 -1
  216. package/.next/trace +13 -13
  217. package/dist/cli/commands/auto-yes.d.ts.map +1 -1
  218. package/dist/cli/commands/auto-yes.js +3 -5
  219. package/dist/cli/commands/capture.d.ts.map +1 -1
  220. package/dist/cli/commands/capture.js +5 -0
  221. package/dist/cli/commands/send.d.ts.map +1 -1
  222. package/dist/cli/commands/send.js +4 -6
  223. package/dist/cli/commands/verify.d.ts.map +1 -1
  224. package/dist/cli/commands/verify.js +8 -1
  225. package/dist/cli/config/duration-constants.d.ts +16 -13
  226. package/dist/cli/config/duration-constants.d.ts.map +1 -1
  227. package/dist/cli/config/duration-constants.js +21 -21
  228. package/dist/cli/docs/agent-operations.d.ts +1 -1
  229. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  230. package/dist/cli/docs/agent-operations.js +2 -1
  231. package/dist/cli/types/api-responses.d.ts +29 -1
  232. package/dist/cli/types/api-responses.d.ts.map +1 -1
  233. package/dist/cli/utils/verify-runner.d.ts +24 -1
  234. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  235. package/dist/cli/utils/verify-runner.js +54 -1
  236. package/dist/config/auto-yes-duration.d.ts +56 -0
  237. package/dist/config/auto-yes-duration.d.ts.map +1 -0
  238. package/dist/config/auto-yes-duration.js +76 -0
  239. package/dist/server/src/config/auto-yes-config.js +14 -19
  240. package/dist/server/src/config/auto-yes-duration.js +76 -0
  241. package/dist/server/src/lib/auto-yes-state.js +9 -2
  242. package/dist/server/src/lib/cli-tools/submit-verified-sender.js +137 -14
  243. package/dist/server/src/lib/detection/composer-text.js +215 -11
  244. package/dist/server/src/lib/detection/prompt-detect-multiple-choice-chrome.js +193 -0
  245. package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +8 -191
  246. package/dist/server/src/lib/detection/upstream-faults.js +19 -2
  247. package/dist/server/src/lib/hooks/structured-decision-response.js +1 -1
  248. package/dist/server/src/lib/polling/auto-yes-manual-answer.js +4 -2
  249. package/dist/server/src/lib/polling/response-checker.js +12 -15
  250. package/dist/server/src/lib/session/composer-clear.js +56 -4
  251. package/dist/server/src/lib/session/current-output-builder.js +2 -1
  252. package/dist/server/src/lib/session/send-attempt-state.js +2 -1
  253. package/dist/server/src/lib/session/waiting-episode-state-ops.js +152 -0
  254. package/dist/server/src/lib/session/waiting-episode-state-store.js +202 -0
  255. package/dist/server/src/lib/session/waiting-episode-state-types.js +6 -0
  256. package/dist/server/src/lib/session/waiting-episode-state.js +26 -339
  257. package/dist/server/src/lib/tmux/tmux.js +25 -0
  258. package/dist/server/src/lib/verification/gate-runner.js +11 -4
  259. package/docs/en/user-guide/webapp-guide.md +15 -10
  260. package/package.json +1 -1
  261. package/release-notes/0.49.0.json +45 -0
  262. package/.next/server/chunks/6722.js +0 -1
  263. package/.next/static/chunks/2099-c3e0ab70a1b95dd3.js +0 -1
  264. package/.next/static/chunks/5371-a549a0d2c2044d41.js +0 -1
  265. package/.next/static/chunks/6288-09feba367cc2c65e.js +0 -1
  266. package/.next/static/chunks/9079-406b84d3cc891a87.js +0 -1
  267. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9cf1ecc59e36a004.js +0 -1
  268. /package/.next/static/{PTlAswXLq8PAe2vUJ8dVP → 3_JtAZaKMJEDFIIfkHv4n}/_buildManifest.js +0 -0
  269. /package/.next/static/{PTlAswXLq8PAe2vUJ8dVP → 3_JtAZaKMJEDFIIfkHv4n}/_ssgManifest.js +0 -0
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ /**
3
+ * The low-level episode writes: open / close / replace / rebind / updateKind
4
+ * (Issue #3798). Each one emits through the store's listeners.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.openEpisode = openEpisode;
8
+ exports.closeEpisode = closeEpisode;
9
+ exports.replaceEpisode = replaceEpisode;
10
+ exports.rebindEpisode = rebindEpisode;
11
+ exports.updateEpisodeKind = updateEpisodeKind;
12
+ const waiting_episode_state_store_1 = require("../../lib/session/waiting-episode-state-store");
13
+ /**
14
+ * Open an episode (Issue #3798). Low-level: the caller has decided there is
15
+ * none open and what it is bound to. Emits the opening edge.
16
+ */
17
+ function openEpisode(parts, next, at) {
18
+ const key = (0, waiting_episode_state_store_1.keyOf)(parts);
19
+ const view = { since: next.since, kind: next.kind };
20
+ const meta = {
21
+ episodeId: (0, waiting_episode_state_store_1.nextEpisodeId)(),
22
+ openedAt: at,
23
+ boundAt: at,
24
+ binding: next.binding,
25
+ openedBy: next.openedBy,
26
+ promptScreenKey: next.promptScreenKey ?? null,
27
+ };
28
+ waiting_episode_state_store_1.episodes.set(key, view);
29
+ waiting_episode_state_store_1.metas.set(view, meta);
30
+ (0, waiting_episode_state_store_1.bumpVersion)(key);
31
+ (0, waiting_episode_state_store_1.emit)({
32
+ worktreeId: parts.worktreeId,
33
+ cliToolId: parts.cliToolId,
34
+ instanceId: parts.instanceId,
35
+ waiting: true,
36
+ since: view.since,
37
+ kind: view.kind,
38
+ at,
39
+ cause: 'opened',
40
+ episodeId: meta.episodeId,
41
+ previousEpisodeId: null,
42
+ closeReason: null,
43
+ });
44
+ return { ...view, ...meta };
45
+ }
46
+ /**
47
+ * Close the open episode when it is still `expectedId` (Issue #3798). A closer
48
+ * that names the episode it decided about cannot close a later one.
49
+ *
50
+ * @returns Whether an episode was closed
51
+ */
52
+ function closeEpisode(parts, expectedId, reason, at) {
53
+ const key = (0, waiting_episode_state_store_1.keyOf)(parts);
54
+ const view = waiting_episode_state_store_1.episodes.get(key);
55
+ if (view === undefined)
56
+ return false;
57
+ const meta = (0, waiting_episode_state_store_1.metaOf)(view);
58
+ if (meta.episodeId !== expectedId)
59
+ return false;
60
+ waiting_episode_state_store_1.episodes.delete(key);
61
+ waiting_episode_state_store_1.lastClosed.set(key, { at, promptScreenKey: meta.promptScreenKey });
62
+ (0, waiting_episode_state_store_1.bumpVersion)(key);
63
+ (0, waiting_episode_state_store_1.emit)({
64
+ worktreeId: parts.worktreeId,
65
+ cliToolId: parts.cliToolId,
66
+ instanceId: parts.instanceId,
67
+ waiting: false,
68
+ since: null,
69
+ kind: null,
70
+ at,
71
+ cause: 'closed',
72
+ episodeId: null,
73
+ previousEpisodeId: meta.episodeId,
74
+ closeReason: reason,
75
+ });
76
+ return true;
77
+ }
78
+ /**
79
+ * Put a new episode in place of `expectedId` as one operation (Issue #3798):
80
+ * listeners hear a single opening edge for the new wait and no closing one
81
+ * in between, so nothing reports "nobody is waiting" mid-swap.
82
+ *
83
+ * @returns The new episode, or null when `expectedId` is no longer open
84
+ */
85
+ function replaceEpisode(parts, expectedId, next, reason, at) {
86
+ const key = (0, waiting_episode_state_store_1.keyOf)(parts);
87
+ const old = waiting_episode_state_store_1.episodes.get(key);
88
+ if (old === undefined)
89
+ return null;
90
+ const oldMeta = (0, waiting_episode_state_store_1.metaOf)(old);
91
+ if (oldMeta.episodeId !== expectedId)
92
+ return null;
93
+ waiting_episode_state_store_1.lastClosed.set(key, { at, promptScreenKey: oldMeta.promptScreenKey });
94
+ const view = { since: next.since, kind: next.kind };
95
+ const meta = {
96
+ episodeId: (0, waiting_episode_state_store_1.nextEpisodeId)(),
97
+ openedAt: at,
98
+ boundAt: at,
99
+ binding: next.binding,
100
+ openedBy: next.openedBy,
101
+ promptScreenKey: next.promptScreenKey ?? null,
102
+ };
103
+ waiting_episode_state_store_1.episodes.set(key, view);
104
+ waiting_episode_state_store_1.metas.set(view, meta);
105
+ (0, waiting_episode_state_store_1.bumpVersion)(key);
106
+ (0, waiting_episode_state_store_1.emit)({
107
+ worktreeId: parts.worktreeId,
108
+ cliToolId: parts.cliToolId,
109
+ instanceId: parts.instanceId,
110
+ waiting: true,
111
+ since: view.since,
112
+ kind: view.kind,
113
+ at,
114
+ cause: 'replaced',
115
+ episodeId: meta.episodeId,
116
+ previousEpisodeId: oldMeta.episodeId,
117
+ closeReason: reason,
118
+ });
119
+ return { ...view, ...meta };
120
+ }
121
+ /**
122
+ * Change what the open episode `expectedId` is bound to (Issue #3798). Not an
123
+ * edge: the wait goes on, so nothing is emitted and `since` stays.
124
+ *
125
+ * @returns Whether the episode was rebound
126
+ */
127
+ function rebindEpisode(parts, expectedId, binding, at) {
128
+ const key = (0, waiting_episode_state_store_1.keyOf)(parts);
129
+ const view = waiting_episode_state_store_1.episodes.get(key);
130
+ if (view === undefined)
131
+ return false;
132
+ const meta = (0, waiting_episode_state_store_1.metaOf)(view);
133
+ if (meta.episodeId !== expectedId)
134
+ return false;
135
+ meta.binding = binding;
136
+ meta.boundAt = at;
137
+ (0, waiting_episode_state_store_1.bumpVersion)(key);
138
+ return true;
139
+ }
140
+ /**
141
+ * Refresh the kind of the open episode `expectedId` (Issue #3798, I10). The
142
+ * wait goes on: no edge, and the version does not move.
143
+ *
144
+ * @returns Whether the episode was still open
145
+ */
146
+ function updateEpisodeKind(parts, expectedId, kind) {
147
+ const view = waiting_episode_state_store_1.episodes.get((0, waiting_episode_state_store_1.keyOf)(parts));
148
+ if (view === undefined || (0, waiting_episode_state_store_1.metaOf)(view).episodeId !== expectedId)
149
+ return false;
150
+ view.kind = kind;
151
+ return true;
152
+ }
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /**
3
+ * The waiting-episode store's state tables, its listeners and the reads
4
+ * (Issue #1786 / #3798). The single place that initialises each `globalThis` slot.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.UNKNOWN_BINDING = exports.lastClosed = exports.metas = exports.episodes = void 0;
8
+ exports.nextEpisodeId = nextEpisodeId;
9
+ exports.keyOf = keyOf;
10
+ exports.bumpVersion = bumpVersion;
11
+ exports.onWaitingTransition = onWaitingTransition;
12
+ exports.onWaitingEpisodeTransition = onWaitingEpisodeTransition;
13
+ exports.emit = emit;
14
+ exports.metaOf = metaOf;
15
+ exports.getWaitingEpisodeRecord = getWaitingEpisodeRecord;
16
+ exports.getEpisodeVersion = getEpisodeVersion;
17
+ exports.snapshotEpisodeVersions = snapshotEpisodeVersions;
18
+ exports.getLastClosedEpisode = getLastClosedEpisode;
19
+ exports.getWaitingEpisode = getWaitingEpisode;
20
+ exports.hasOpenWaitingEpisode = hasOpenWaitingEpisode;
21
+ exports.clearWaitingEpisodes = clearWaitingEpisodes;
22
+ exports.clearWaitingTransitionListeners = clearWaitingTransitionListeners;
23
+ const auto_yes_state_1 = require("../../lib/auto-yes-state");
24
+ const logger_1 = require("../../lib/logger");
25
+ const global_state_1 = require("../global-state");
26
+ const logger = (0, logger_1.createLogger)('waiting-episode-state');
27
+ /** compositeKey -> the wait currently in progress for that instance. */
28
+ exports.episodes = (0, global_state_1.getOrInitGlobal)('__sessionWaitingEpisodes', () => new Map());
29
+ /** Subscribers to the edge. See the module docblock. */
30
+ const listeners = (0, global_state_1.getOrInitGlobal)('__sessionWaitingTransitionListeners', () => new Set());
31
+ exports.metas = (0, global_state_1.getOrInitGlobal)('__sessionWaitingEpisodeMeta', () => new WeakMap());
32
+ const versions = (0, global_state_1.getOrInitGlobal)('__sessionWaitingEpisodeVersions', () => new Map());
33
+ exports.lastClosed = (0, global_state_1.getOrInitGlobal)('__sessionWaitingEpisodeLastClosed', () => new Map());
34
+ const episodeSeq = (0, global_state_1.getOrInitGlobal)('__sessionWaitingEpisodeSeq', () => ({
35
+ value: 0,
36
+ nonce: Math.random().toString(36).slice(2, 10),
37
+ }));
38
+ const episodeListeners = (0, global_state_1.getOrInitGlobal)('__sessionWaitingEpisodeListeners', () => new Set());
39
+ /** The binding used when no resolver is registered: nothing is known. */
40
+ exports.UNKNOWN_BINDING = {
41
+ kind: 'unattributed',
42
+ generation: { kind: 'none' },
43
+ lastClosedTurnId: null,
44
+ };
45
+ function nextEpisodeId() {
46
+ episodeSeq.value += 1;
47
+ return `wep-${episodeSeq.nonce}-${episodeSeq.value}`;
48
+ }
49
+ function keyOf(parts) {
50
+ return (0, auto_yes_state_1.buildCompositeKey)(parts.worktreeId, parts.cliToolId, parts.instanceId);
51
+ }
52
+ function bumpVersion(key) {
53
+ versions.set(key, (versions.get(key) ?? 0) + 1);
54
+ }
55
+ /**
56
+ * Subscribe to waiting edges.
57
+ *
58
+ * @returns An unsubscribe function. Idempotent — calling it twice is harmless.
59
+ */
60
+ function onWaitingTransition(listener) {
61
+ listeners.add(listener);
62
+ return () => {
63
+ listeners.delete(listener);
64
+ };
65
+ }
66
+ /**
67
+ * Subscribe to waiting edges with the episode's identity (Issue #3798).
68
+ *
69
+ * The same crossings `onWaitingTransition` delivers, in the same order, with
70
+ * the cause, the episode ids and the close reason added.
71
+ */
72
+ function onWaitingEpisodeTransition(listener) {
73
+ episodeListeners.add(listener);
74
+ return () => {
75
+ episodeListeners.delete(listener);
76
+ };
77
+ }
78
+ /** Notify subscribers, containing anything they throw. */
79
+ function emit(transition) {
80
+ const { cause: _cause, episodeId: _id, previousEpisodeId: _prev, closeReason: _reason, ...plain } = transition;
81
+ for (const listener of listeners) {
82
+ try {
83
+ listener(plain);
84
+ }
85
+ catch (error) {
86
+ logListenerFailure(transition, error);
87
+ }
88
+ }
89
+ for (const listener of episodeListeners) {
90
+ try {
91
+ listener(transition);
92
+ }
93
+ catch (error) {
94
+ logListenerFailure(transition, error);
95
+ }
96
+ }
97
+ }
98
+ function logListenerFailure(transition, error) {
99
+ logger.error('waiting-transition-listener-failed', {
100
+ worktreeId: transition.worktreeId,
101
+ cliToolId: transition.cliToolId,
102
+ instanceId: transition.instanceId ?? transition.cliToolId,
103
+ waiting: transition.waiting,
104
+ error: error instanceof Error ? error.message : String(error),
105
+ });
106
+ }
107
+ /**
108
+ * The meta of an episode in the map. An episode put there without one (a test
109
+ * that wrote the map directly) is given an unattributed identity on first read.
110
+ */
111
+ function metaOf(view) {
112
+ let meta = exports.metas.get(view);
113
+ if (meta === undefined) {
114
+ meta = {
115
+ episodeId: nextEpisodeId(),
116
+ openedAt: view.since,
117
+ boundAt: view.since,
118
+ binding: exports.UNKNOWN_BINDING,
119
+ openedBy: 'legacy-edge',
120
+ promptScreenKey: null,
121
+ };
122
+ exports.metas.set(view, meta);
123
+ }
124
+ return meta;
125
+ }
126
+ /** The open episode with its identity and binding, or null (Issue #3798). */
127
+ function getWaitingEpisodeRecord(worktreeId, cliToolId, instanceId) {
128
+ const view = exports.episodes.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId));
129
+ if (view === undefined)
130
+ return null;
131
+ const meta = metaOf(view);
132
+ return { since: view.since, kind: view.kind, ...meta, binding: meta.binding };
133
+ }
134
+ /** The instance's episode version: it moves on every open, close, replacement and rebind. */
135
+ function getEpisodeVersion(worktreeId, cliToolId, instanceId) {
136
+ return versions.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? 0;
137
+ }
138
+ /**
139
+ * Every instance version of one worktree, as of now (Issue #3798): the status
140
+ * probe fixes them before it lists the tmux sessions. An instance missing from
141
+ * the map is at version 0.
142
+ */
143
+ function snapshotEpisodeVersions(worktreeId) {
144
+ const prefix = `${worktreeId}${auto_yes_state_1.COMPOSITE_KEY_SEPARATOR}`;
145
+ const snapshot = new Map();
146
+ for (const [key, version] of versions) {
147
+ if (key.startsWith(prefix))
148
+ snapshot.set(key, version);
149
+ }
150
+ return snapshot;
151
+ }
152
+ /** The last episode that ended for this instance, or null. */
153
+ function getLastClosedEpisode(worktreeId, cliToolId, instanceId) {
154
+ return exports.lastClosed.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
155
+ }
156
+ /**
157
+ * @returns The wait in progress for this instance, or null when it is not
158
+ * waiting. Read-only: observing the edge is {@link observeWaitingEdge}'s job.
159
+ */
160
+ function getWaitingEpisode(worktreeId, cliToolId, instanceId) {
161
+ return exports.episodes.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
162
+ }
163
+ /**
164
+ * Whether **any** instance in this worktree is still waiting (Issue #2001).
165
+ *
166
+ * The cross-device dismissal is keyed on the worktree, because that is what the
167
+ * Service Worker `tag` names (`<worktreeId>:prompt`, `push-sender`): two agent
168
+ * instances waiting in one worktree share a single notification card on the
169
+ * phone. So one instance crossing the closing edge is not on its own a reason
170
+ * to clear that card — the card is still telling the truth until the last of
171
+ * them has been answered.
172
+ *
173
+ * The prefix test is exact rather than heuristic: `buildCompositeKey` puts the
174
+ * worktree id first and rejects a worktree id containing
175
+ * {@link COMPOSITE_KEY_SEPARATOR}, so no other worktree's key can start with
176
+ * `<worktreeId>:`.
177
+ */
178
+ function hasOpenWaitingEpisode(worktreeId) {
179
+ const prefix = `${worktreeId}${auto_yes_state_1.COMPOSITE_KEY_SEPARATOR}`;
180
+ for (const key of exports.episodes.keys()) {
181
+ if (key.startsWith(prefix))
182
+ return true;
183
+ }
184
+ return false;
185
+ }
186
+ /**
187
+ * Drop every episode. Test seam.
188
+ *
189
+ * CI runs with `fileParallelism: false`, so one process holds this map for the
190
+ * whole suite: a test that opens an episode and does not clear it hands the next
191
+ * file a session that is already waiting.
192
+ */
193
+ function clearWaitingEpisodes() {
194
+ exports.episodes.clear();
195
+ versions.clear();
196
+ exports.lastClosed.clear();
197
+ }
198
+ /** Drop every subscriber. Test seam, paired with {@link clearWaitingEpisodes}. */
199
+ function clearWaitingTransitionListeners() {
200
+ listeners.clear();
201
+ episodeListeners.clear();
202
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * The types of the waiting-episode store (Issue #1786 / #3798). No runtime
4
+ * state lives here; `waiting-episode-state` re-exports every public name.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });