commandmate 0.33.1 → 0.33.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +307 -307
  3. package/.next/app-path-routes-manifest.json +28 -28
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/diagnostics/framework.json +1 -1
  6. package/.next/next-server.js.nft.json +1 -1
  7. package/.next/prerender-manifest.json +15 -15
  8. package/.next/required-server-files.json +1 -2
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route.js +1 -1
  14. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
  15. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  17. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  18. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  20. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  21. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/assistant/messages/route.js +1 -1
  23. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  24. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/assistant/session/route.js +1 -1
  26. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  27. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/assistant/start/route.js +32 -1
  29. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  30. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/assistant/terminal/route.js +33 -2
  32. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  33. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/assistant/tools/route.js +1 -1
  35. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  36. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/capabilities/route.js +1 -1
  41. package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
  42. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/hooks/agent-event/route.js +1 -1
  51. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  52. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  54. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  55. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  57. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  58. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  65. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  66. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/relays/route.js +1 -1
  68. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  69. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  75. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  76. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/repositories/clone/route.js +1 -1
  78. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  79. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/restore/route.js +1 -1
  82. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  83. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/repositories/route.js +1 -1
  85. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  86. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/repositories/scan/route.js +1 -1
  88. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  89. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/repositories/sync/route.js +1 -1
  91. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  92. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  95. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  96. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/skills/[id]/route.js +1 -1
  100. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  101. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/skills/installations/route.js +1 -1
  103. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
  104. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/skills/route.js +1 -1
  108. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  109. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  120. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  123. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  126. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  132. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  162. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  165. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  168. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  179. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  184. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  201. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
  214. package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
  217. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  222. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
  230. package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
  231. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
  233. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
  234. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  238. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/api/worktrees/route.js +1 -1
  240. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  241. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  243. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  244. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  246. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  247. package/.next/server/app/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  250. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  251. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  252. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  253. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  254. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  255. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  256. package/.next/server/app/worktrees/[id]/page.js +10 -10
  257. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  258. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  259. package/.next/server/app-paths-manifest.json +28 -28
  260. package/.next/server/chunks/1068.js +1 -0
  261. package/.next/server/chunks/1210.js +1 -1
  262. package/.next/server/chunks/1331.js +2 -2
  263. package/.next/server/chunks/1366.js +5 -3
  264. package/.next/server/chunks/1501.js +6 -2
  265. package/.next/server/chunks/1886.js +2 -2
  266. package/.next/server/chunks/2119.js +1 -1
  267. package/.next/server/chunks/2445.js +1 -1
  268. package/.next/server/chunks/2839.js +1 -0
  269. package/.next/server/chunks/3123.js +1 -1
  270. package/.next/server/chunks/3241.js +1 -1
  271. package/.next/server/chunks/3323.js +1 -0
  272. package/.next/server/chunks/3707.js +1 -1
  273. package/.next/server/chunks/3708.js +1 -1
  274. package/.next/server/chunks/4443.js +1 -1
  275. package/.next/server/chunks/5220.js +1 -1
  276. package/.next/server/chunks/595.js +2 -2
  277. package/.next/server/chunks/6130.js +1 -0
  278. package/.next/server/chunks/650.js +1 -0
  279. package/.next/server/chunks/6661.js +1 -1
  280. package/.next/server/chunks/6781.js +1 -0
  281. package/.next/server/chunks/6808.js +1 -0
  282. package/.next/server/chunks/7875.js +3 -3
  283. package/.next/server/chunks/7905.js +1 -1
  284. package/.next/server/chunks/8918.js +107 -5
  285. package/.next/server/chunks/9553.js +1 -0
  286. package/.next/server/chunks/9627.js +1 -1
  287. package/.next/server/middleware-build-manifest.js +1 -1
  288. package/.next/server/middleware-manifest.json +5 -5
  289. package/.next/server/pages/500.html +1 -1
  290. package/.next/server/server-reference-manifest.json +1 -1
  291. package/.next/server/src/middleware.js.map +1 -1
  292. package/.next/static/chunks/1255-7e5873f06b25e129.js +1 -0
  293. package/.next/static/chunks/{4718-2bc5cdf06573bf54.js → 4718-814f4ecfd7fcc513.js} +1 -1
  294. package/.next/static/chunks/6022-7a7d1760fc9814c7.js +1 -0
  295. package/.next/static/chunks/app/worktrees/[id]/page-3af707e74a75172b.js +1 -0
  296. package/.next/static/chunks/{main-6092074a0dc78280.js → main-ac91ed6e71380841.js} +1 -1
  297. package/.next/trace +13 -14
  298. package/dist/server/locales/en/worktree.json +9 -2
  299. package/dist/server/locales/ja/worktree.json +9 -2
  300. package/dist/server/src/lib/assistant-response-saver.js +168 -12
  301. package/dist/server/src/lib/cli-tools/vibe-local.js +10 -0
  302. package/dist/server/src/lib/hooks/hook-settings-generator.js +61 -1
  303. package/dist/server/src/lib/hooks/sources/antigravity/history.js +497 -27
  304. package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +103 -0
  305. package/dist/server/src/lib/hooks/sources/claude/history.js +29 -3
  306. package/dist/server/src/lib/hooks/sources/codex/history.js +29 -3
  307. package/dist/server/src/lib/hooks/sources/command-code/history.js +29 -3
  308. package/dist/server/src/lib/hooks/stop-history-capture.js +30 -4
  309. package/dist/server/src/lib/polling/response-checker.js +258 -9
  310. package/dist/server/src/lib/polling/response-poller-core.js +20 -0
  311. package/dist/server/src/lib/polling/structured-history-gate.js +94 -10
  312. package/dist/server/src/lib/response-cleaner.js +84 -0
  313. package/dist/server/src/lib/session/agent-session-lifecycle.js +31 -1
  314. package/dist/server/src/lib/session/session-generation-archive.js +194 -0
  315. package/dist/server/src/lib/tasks/contract-message.js +83 -9
  316. package/dist/server/src/lib/tasks/contract-parser.js +2 -0
  317. package/package.json +2 -2
  318. package/.next/server/chunks/153.js +0 -1
  319. package/.next/server/chunks/21.js +0 -1
  320. package/.next/server/chunks/3086.js +0 -1
  321. package/.next/server/chunks/3270.js +0 -1
  322. package/.next/server/chunks/3925.js +0 -1
  323. package/.next/server/chunks/4299.js +0 -1
  324. package/.next/server/chunks/5043.js +0 -1
  325. package/.next/server/chunks/6306.js +0 -1
  326. package/.next/server/chunks/6363.js +0 -1
  327. package/.next/server/chunks/6491.js +0 -103
  328. package/.next/server/chunks/6838.js +0 -1
  329. package/.next/server/chunks/7366.js +0 -5
  330. package/.next/server/chunks/7890.js +0 -1
  331. package/.next/server/chunks/8063.js +0 -32
  332. package/.next/server/chunks/8687.js +0 -1
  333. package/.next/static/chunks/1255-8cb587d9170b45ed.js +0 -1
  334. package/.next/static/chunks/6022-2fa0b5a82d4ce7b6.js +0 -1
  335. package/.next/static/chunks/app/worktrees/[id]/page-13ca0ba551fe5cfb.js +0 -1
  336. /package/.next/static/{9lgw9hA727UMyFhXryGWG → 9x6U1h52hH_r6pOsGwI_p}/_buildManifest.js +0 -0
  337. /package/.next/static/{9lgw9hA727UMyFhXryGWG → 9x6U1h52hH_r6pOsGwI_p}/_ssgManifest.js +0 -0
@@ -436,12 +436,13 @@
436
436
  "endSessionFor": "End session for {name}",
437
437
  "filesEmptyHint": "Open a file to enable this",
438
438
  "historyAllSplitsHint": "Applies to all splits",
439
- "historyChatOnlyHint": "Every split shows Chat, which has no history column",
440
439
  "maximizeSplit": "Maximize {split}",
441
440
  "maximizeFocusedSplit": "Maximize the focused split",
442
441
  "restoreSplits": "Restore the split layout",
443
442
  "maximizeShortcutHint": "⌘ / Ctrl + Shift + Enter",
444
- "maximizedStatus": "Split {split} maximized"
443
+ "maximizedStatus": "Split {split} maximized",
444
+ "loading": "Loading…",
445
+ "sessionEnded": "The session has ended. Send a message to start a new session."
445
446
  },
446
447
  "surfaceMode": {
447
448
  "groupLabel": "Output surface for {split}",
@@ -504,6 +505,12 @@
504
505
  "unclassified": "Dialog not recognized",
505
506
  "resolved": "Resolved",
506
507
  "unlabeled": "Approval dialog"
508
+ },
509
+ "previousSession": {
510
+ "summary": "Previous session ({count})",
511
+ "expand": "Show the previous session",
512
+ "collapse": "Hide the previous session",
513
+ "hint": "You can view the previous conversation in History."
507
514
  }
508
515
  },
509
516
  "unsentComposer": {
@@ -436,12 +436,13 @@
436
436
  "endSessionFor": "{name}のセッションを終了",
437
437
  "filesEmptyHint": "ファイルを開くと有効になります",
438
438
  "historyAllSplitsHint": "すべての split に適用",
439
- "historyChatOnlyHint": "すべての split がチャット表示のため、履歴列はありません",
440
439
  "maximizeSplit": "{split} を最大化",
441
440
  "maximizeFocusedSplit": "フォーカス中の split を最大化",
442
441
  "restoreSplits": "分割表示に戻す",
443
442
  "maximizeShortcutHint": "⌘ / Ctrl + Shift + Enter",
444
- "maximizedStatus": "{split} を最大化中"
443
+ "maximizedStatus": "{split} を最大化中",
444
+ "loading": "読込中...",
445
+ "sessionEnded": "セッションは終了しています。送信すると新しいセッションが起動します。"
445
446
  },
446
447
  "surfaceMode": {
447
448
  "groupLabel": "{split} の出力面",
@@ -504,6 +505,12 @@
504
505
  "unclassified": "判別できないダイアログ",
505
506
  "resolved": "応答済み",
506
507
  "unlabeled": "承認ダイアログ"
508
+ },
509
+ "previousSession": {
510
+ "summary": "前回のセッション({count} 件)",
511
+ "expand": "前回のセッションを開く",
512
+ "collapse": "前回のセッションを閉じる",
513
+ "hint": "前回の会話は履歴で参照できます。"
507
514
  }
508
515
  },
509
516
  "unsentComposer": {
@@ -18,9 +18,43 @@
18
18
  * buffer, which is false for alternate-screen tools — those are handled by the
19
19
  * response poller instead (Issue #1268 / #1292; see savePendingAssistantResponse).
20
20
  */
21
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ var desc = Object.getOwnPropertyDescriptor(m, k);
24
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
25
+ desc = { enumerable: true, get: function() { return m[k]; } };
26
+ }
27
+ Object.defineProperty(o, k2, desc);
28
+ }) : (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ o[k2] = m[k];
31
+ }));
32
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
33
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
34
+ }) : function(o, v) {
35
+ o["default"] = v;
36
+ });
37
+ var __importStar = (this && this.__importStar) || (function () {
38
+ var ownKeys = function(o) {
39
+ ownKeys = Object.getOwnPropertyNames || function (o) {
40
+ var ar = [];
41
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
42
+ return ar;
43
+ };
44
+ return ownKeys(o);
45
+ };
46
+ return function (mod) {
47
+ if (mod && mod.__esModule) return mod;
48
+ var result = {};
49
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
50
+ __setModuleDefault(result, mod);
51
+ return result;
52
+ };
53
+ })();
21
54
  Object.defineProperty(exports, "__esModule", { value: true });
22
55
  exports.detectBufferReset = detectBufferReset;
23
56
  exports.cleanCliResponse = cleanCliResponse;
57
+ exports.advanceCapturedLineForTranscriptTurn = advanceCapturedLineForTranscriptTurn;
24
58
  exports.savePendingAssistantResponse = savePendingAssistantResponse;
25
59
  const cli_session_1 = require("./session/cli-session");
26
60
  const db_1 = require("./db");
@@ -82,6 +116,31 @@ function detectBufferReset(currentLineCount, lastCapturedLine) {
82
116
  }
83
117
  return { bufferReset: false, reason: null };
84
118
  }
119
+ /**
120
+ * How many rows of a capture count as "read so far".
121
+ *
122
+ * Trailing blank rows are discarded, for consistency with the response poller's
123
+ * `extractResponse`: tmux pads the pane out to its height, and counting that
124
+ * padding inflates the stored cursor so far past the real content that the
125
+ * poller's dedup check (`result.lineCount <= lastCapturedLine`) can never fire
126
+ * again.
127
+ *
128
+ * The one definition of the count, shared by the two writers of
129
+ * `session_states.last_captured_line` in this module (Issue #2437): the
130
+ * pre-send flush and {@link advanceCapturedLineForTranscriptTurn}. Two spellings
131
+ * of "how far have I read" would be two cursors that disagree.
132
+ *
133
+ * @param output - Raw capture
134
+ * @returns Row count with trailing blank rows removed
135
+ */
136
+ function countCapturedLines(output) {
137
+ const lines = output.split('\n');
138
+ let trimmedLength = lines.length;
139
+ while (trimmedLength > 0 && lines[trimmedLength - 1].trim() === '') {
140
+ trimmedLength--;
141
+ }
142
+ return trimmedLength;
143
+ }
85
144
  /**
86
145
  * Time offset (in milliseconds) for assistant message timestamp
87
146
  * Ensures assistant response appears before user message in chronological order
@@ -91,8 +150,23 @@ const ASSISTANT_TIMESTAMP_OFFSET_MS = 1;
91
150
  /**
92
151
  * Clean CLI tool response based on tool type
93
152
  *
153
+ * Every one of `CLI_TOOL_IDS`' eight tools has a branch (Issue #2437). Until
154
+ * then four of them — codex, command-code, antigravity and vibe-local — fell
155
+ * through to `output.trim()`, and codex's branch said so in as many words:
156
+ * *"Codex doesn't need special cleaning"*. It does. What that branch actually
157
+ * saved was codex's **idle composer**, ANSI and all, as an assistant reply:
158
+ *
159
+ * ```text
160
+ * › Ask Codex to do anything
161
+ *
162
+ * gpt-6-astra xhigh · ~/share/work/… · Main [default]
163
+ * ```
164
+ *
165
+ * See {@link cleanScrollbackResponse} for how the four share one cleaner
166
+ * without sharing a boundary rule.
167
+ *
94
168
  * @param output - Raw output from CLI tool
95
- * @param cliToolId - CLI tool identifier (claude, codex, gemini)
169
+ * @param cliToolId - CLI tool identifier
96
170
  * @returns Cleaned response content
97
171
  */
98
172
  function cleanCliResponse(output, cliToolId) {
@@ -106,12 +180,101 @@ function cleanCliResponse(output, cliToolId) {
106
180
  case 'copilot':
107
181
  return (0, response_cleaner_1.cleanCopilotResponse)(output);
108
182
  case 'codex':
109
- // Codex doesn't need special cleaning
110
- return output.trim();
183
+ case 'command-code':
184
+ case 'antigravity':
185
+ case 'vibe-local':
186
+ return (0, response_cleaner_1.cleanScrollbackResponse)(output, cliToolId);
111
187
  default:
112
188
  return output.trim();
113
189
  }
114
190
  }
191
+ /**
192
+ * Move `last_captured_line` past everything a transcript row now covers
193
+ * (Issue #2437).
194
+ *
195
+ * ## The defect this closes
196
+ *
197
+ * The pre-send flush ({@link savePendingAssistantResponse}) reads
198
+ * `lastCapturedLine`, and saves **everything past it** as the pending reply. The
199
+ * only writer of that cursor used to be the flush itself and the response
200
+ * poller — the Stop path that writes the agent's OWN Markdown into History
201
+ * (`hooks/sources/<tool>/history.ts`) never touched it. So on this ordering, which
202
+ * costs nothing to hit at a 2-second poll interval:
203
+ *
204
+ * ```text
205
+ * 1. turn ends → the Stop path writes the turn as a Markdown row (cursor unmoved)
206
+ * 2. `/send` arrives BEFORE the next poll tick
207
+ * 3. the flush saves "everything since the cursor" = the whole finished turn
208
+ * ```
209
+ *
210
+ * The second copy is the pane's scrape of the very same turn, so the chat
211
+ * surface shows one reply twice. A cleaner cannot help: what is duplicated is
212
+ * the real body, not chrome.
213
+ *
214
+ * ## Why a capture rather than an arithmetic bump
215
+ *
216
+ * The cursor is a row index into the pane, and the transcript reader never looks
217
+ * at the pane at all — it reads a JSONL file. The only honest way to say "the
218
+ * pane up to here is already in History" is to ask the pane how tall it is now.
219
+ * The capture is the cached one ({@link captureSessionOutput}, 5s TTL shared
220
+ * with the poller), so a Stop that lands between two ticks usually costs no
221
+ * `tmux capture-pane` at all.
222
+ *
223
+ * ## What it deliberately does not do
224
+ *
225
+ * - **Alternate-screen tools are skipped.** For claude, opencode and copilot the
226
+ * line count is a screen-row constant rather than a cursor (Issue #1268), and
227
+ * {@link savePendingAssistantResponse} refuses to run for them at all — there
228
+ * is no cursor here to advance and writing one would be a lie.
229
+ * - **The cursor only ever moves forward.** A capture shorter than the stored
230
+ * value is a buffer reset, and `detectBufferReset` owns that reading; moving
231
+ * the cursor backwards from here would hand the flush a range it has already
232
+ * saved.
233
+ * - **It never throws, and never changes the caller's answer.** The transcript
234
+ * row is written whether or not this succeeds; a failure here costs one
235
+ * duplicated reply, and a failure that propagated would cost the row.
236
+ *
237
+ * @param target - The instance whose turn was just written to History
238
+ * @returns The cursor's new value, or null when it was left where it was
239
+ */
240
+ async function advanceCapturedLineForTranscriptTurn(target) {
241
+ const { worktreeId, cliToolId } = target;
242
+ const resolvedInstanceId = target.instanceId ?? cliToolId;
243
+ try {
244
+ if ((0, types_1.usesAlternateScreen)(cliToolId)) {
245
+ return null;
246
+ }
247
+ const output = await (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, SESSION_OUTPUT_BUFFER_SIZE, target.instanceId);
248
+ if (!output) {
249
+ return null;
250
+ }
251
+ const currentLineCount = countCapturedLines(output);
252
+ const { getDbInstance } = await Promise.resolve().then(() => __importStar(require('./db/db-instance')));
253
+ const db = getDbInstance();
254
+ const lastCapturedLine = (0, db_1.getSessionState)(db, worktreeId, resolvedInstanceId)?.lastCapturedLine || 0;
255
+ if (currentLineCount <= lastCapturedLine) {
256
+ return null;
257
+ }
258
+ (0, db_1.updateSessionState)(db, worktreeId, cliToolId, currentLineCount, target.instanceId);
259
+ logger.info('transcript:cursor-advanced', {
260
+ worktreeId,
261
+ instanceId: resolvedInstanceId,
262
+ from: lastCapturedLine,
263
+ to: currentLineCount,
264
+ });
265
+ return currentLineCount;
266
+ }
267
+ catch (error) {
268
+ // Never the caller's problem: the transcript row is already written, and the
269
+ // worst this costs is the duplicate it was meant to prevent.
270
+ logger.debug('transcript:cursor-advance-failed', {
271
+ worktreeId,
272
+ instanceId: resolvedInstanceId,
273
+ error: error instanceof Error ? error.message : String(error),
274
+ });
275
+ return null;
276
+ }
277
+ }
115
278
  /**
116
279
  * Save pending assistant response before a new user message
117
280
  *
@@ -170,16 +333,9 @@ async function savePendingAssistantResponse(db, worktreeId, cliToolId, userMessa
170
333
  if (!output) {
171
334
  return null;
172
335
  }
173
- // 3. Calculate current line count
174
- // Trim trailing empty lines for consistency with response-poller's extractResponse.
175
- // Without this, tmux buffer padding inflates the line count, causing the poller's
176
- // dedup check (result.lineCount <= lastCapturedLine) to always trigger.
336
+ // 3. Calculate current line count (see countCapturedLines for the trim).
177
337
  const lines = output.split('\n');
178
- let trimmedLength = lines.length;
179
- while (trimmedLength > 0 && lines[trimmedLength - 1].trim() === '') {
180
- trimmedLength--;
181
- }
182
- const currentLineCount = trimmedLength;
338
+ const currentLineCount = countCapturedLines(output);
183
339
  // 4. Detect buffer reset (Issue #59 fix)
184
340
  const { bufferReset, reason } = detectBufferReset(currentLineCount, lastCapturedLine);
185
341
  if (bufferReset) {
@@ -20,6 +20,7 @@ const db_1 = require("../db");
20
20
  const logger_1 = require("../../lib/logger");
21
21
  const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
22
22
  const install_hints_1 = require("./install-hints");
23
+ const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
23
24
  const logger = (0, logger_1.createLogger)('cli-tools/vibe-local');
24
25
  /**
25
26
  * Extract error message from unknown error type (DRY)
@@ -75,6 +76,15 @@ class VibeLocalTool extends base_1.BaseCLITool {
75
76
  }
76
77
  logger.warn('vibe-local-session-relaunch', { sessionName });
77
78
  }
79
+ // Issue #1759 / #2444: the one line every tool's creation path owes the
80
+ // rest of the system. vibe-local emits no structured events, so the
81
+ // generation fence itself is inert here — but `beginAgentSession` is also
82
+ // where a superseded session's chat rows are retired, and vibe-local was
83
+ // the only tool that never called it. Placed after the healthy-reuse
84
+ // `return` above and before the pane is touched, exactly as codex places
85
+ // its call: a reuse is the same process and must archive nothing, a
86
+ // relaunch into this same pane is a new one and must.
87
+ (0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: this.id, instanceId });
78
88
  try {
79
89
  // Issue #2070: creation only. On the relaunch path the pane already
80
90
  // exists and holds the transcript of the process that died in it; the
@@ -43,7 +43,7 @@
43
43
  * @module lib/hooks/hook-settings-generator
44
44
  */
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
- exports.PERMISSION_DENY_RULES = exports.TOOL_USE_MATCHER = exports.NOTIFICATION_MATCHER = exports.AUTH_TOKEN_ENV_VAR = exports.PERMISSION_REQUEST_TIMEOUT_SECONDS = exports.HOOK_TIMEOUT_SECONDS = exports.PERMISSION_REQUEST_PATH = exports.AGENT_EVENT_PATH = void 0;
46
+ exports.PERMISSION_DENY_RULES = exports.TMUX_UNPINNED_DENY_RULES = exports.TOOL_USE_MATCHER = exports.NOTIFICATION_MATCHER = exports.AUTH_TOKEN_ENV_VAR = exports.PERMISSION_REQUEST_TIMEOUT_SECONDS = exports.HOOK_TIMEOUT_SECONDS = exports.PERMISSION_REQUEST_PATH = exports.AGENT_EVENT_PATH = void 0;
47
47
  exports.isHookInjectionEnabled = isHookInjectionEnabled;
48
48
  exports.isAuthTokenExpected = isAuthTokenExpected;
49
49
  exports.getHookSettingsDirectory = getHookSettingsDirectory;
@@ -127,6 +127,62 @@ exports.NOTIFICATION_MATCHER = 'permission_prompt|idle_prompt';
127
127
  * receiver takes.
128
128
  */
129
129
  exports.TOOL_USE_MATCHER = permission_request_payload_1.ASK_USER_QUESTION_TOOL;
130
+ /**
131
+ * tmux spellings that reach whichever server the ambient environment points at
132
+ * (Issue #2442).
133
+ *
134
+ * On 2026-09-08 22:53 JST all 42 `mcbd-*` sessions on the default tmux server
135
+ * were destroyed by a socket-less `tmux kill-server` run from an ad-hoc Bash
136
+ * block — the second such wipe after 2026-08-02 (#1624). The block had set
137
+ * `TMUX_TMPDIR` first, which reads as isolation and is not: tmux consults it
138
+ * only while `$TMUX` is unset, and every CommandMate agent runs inside a pane.
139
+ *
140
+ * A tmux invocation carries its target as a *global option before the
141
+ * subcommand* — `-L <name>` (socket name) or `-S <path>` (socket path) — and
142
+ * both outrank `$TMUX`. So "which server does this hit" is decidable from the
143
+ * argv shape alone, and that is what these rules read: a command whose first
144
+ * word is `tmux` and whose second is a destroying or server-global subcommand
145
+ * names no socket and therefore hits the shared one.
146
+ *
147
+ * The pinned spelling of every rule below is deliberately *not* covered, which
148
+ * is what keeps the isolated-probe recipes in `docs/design/` working. "Not
149
+ * covered" means "no new deny rule matches it", not "pre-approved": such a
150
+ * command still goes through the session's normal permission handling.
151
+ *
152
+ * Aliases get their own entry because Claude's prefix matching is **token-exact
153
+ * and adjacency-sensitive**, measured on 2.1.266 in
154
+ * `docs/design/agent-hooks-permission-deny-verification.md` §6: a rule naming
155
+ * `tmux list-p` left `tmux list-panes` untouched, and one naming
156
+ * `tmux show-options -g` left both `tmux show-options -gv …` and
157
+ * `tmux show-options -t 0 -g` untouched. A single truncated rule covering a
158
+ * family is therefore not available — it would load without error and match
159
+ * nothing. `bind` / `unbind` / `set` are tmux's own documented aliases for
160
+ * `bind-key` / `unbind-key` / `set-option`; `kill-server` and `kill-session`
161
+ * have none.
162
+ *
163
+ * Shapes that escape these rules (absolute path, `bash -c`, another global
164
+ * option before the subcommand, tmux's unambiguous-prefix abbreviations,
165
+ * combined global flags) are measured and listed in §6.4 of the same document
166
+ * rather than guessed at here. This layer narrows the accident, it does not
167
+ * close the class — `env-clean` (#1740) is the after-the-fact detector.
168
+ */
169
+ exports.TMUX_UNPINNED_DENY_RULES = [
170
+ // Destroys every session on the server it reaches. The 2026-08-02 and
171
+ // 2026-09-08 wipes were both this word.
172
+ 'Bash(tmux kill-server:*)',
173
+ // `-t` included on purpose: an exact-match `kill-session -t '=name:'` is safe
174
+ // only about *what* it names, never about *where* — and the static guard's
175
+ // exemption for that spelling is why agent recipes must pin the socket.
176
+ 'Bash(tmux kill-session:*)',
177
+ // Server-global mutations outlive the caller and are shared with every session
178
+ // on that server.
179
+ 'Bash(tmux set-option -g:*)',
180
+ 'Bash(tmux set -g:*)',
181
+ 'Bash(tmux bind-key:*)',
182
+ 'Bash(tmux bind:*)',
183
+ 'Bash(tmux unbind-key:*)',
184
+ 'Bash(tmux unbind:*)',
185
+ ];
130
186
  /**
131
187
  * Bash spellings this server refuses to let an agent run (Issue #1739).
132
188
  *
@@ -162,11 +218,15 @@ exports.TOOL_USE_MATCHER = permission_request_payload_1.ASK_USER_QUESTION_TOOL;
162
218
  * signals every process the user owns and `kill -9 -<pgid>` a whole group; the
163
219
  * default `kill` (SIGTERM) is untouched, so the graceful spelling of the same
164
220
  * intent is the one that survives.
221
+ *
222
+ * Issue #2442 adds the tmux half of the same story: see
223
+ * {@link TMUX_UNPINNED_DENY_RULES}.
165
224
  */
166
225
  exports.PERMISSION_DENY_RULES = [
167
226
  'Bash(pkill:*)',
168
227
  'Bash(killall:*)',
169
228
  'Bash(kill -9:*)',
229
+ ...exports.TMUX_UNPINNED_DENY_RULES,
170
230
  ];
171
231
  /** Relay script shipped with the package (`files: ["scripts/hooks/"]`). */
172
232
  const RELAY_SCRIPT_RELATIVE_PATH = (0, path_1.join)('scripts', 'hooks', 'cmate-agent-event.sh');