commandmate 0.42.2 → 0.43.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 (421) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +148 -148
  3. package/.next/app-path-routes-manifest.json +25 -25
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  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.js +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/capabilities/route.js +1 -1
  18. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/daily-summary/route.js +1 -1
  20. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  21. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  24. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/hooks/agent-event/route.js +103 -1
  31. package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
  32. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/hooks/claude-done/route.js +2 -2
  34. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  35. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  37. package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
  38. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
  45. package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
  46. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/relays/route.js +1 -1
  48. package/.next/server/app/api/relays/route.js.nft.json +1 -1
  49. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  53. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  54. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/repositories/clone/route.js +1 -1
  56. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  57. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/repositories/restore/route.js +1 -1
  60. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  61. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/repositories/route.js +1 -1
  63. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  64. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/repositories/scan/route.js +1 -1
  66. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  67. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/repositories/sync/route.js +1 -1
  69. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  70. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/settings/default-agents/route.js +1 -1
  73. package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
  74. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/skills/[id]/route.js +1 -1
  78. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/skills/route.js +1 -1
  83. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/slash-commands/route.js +1 -1
  85. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  94. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  97. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
  100. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -1
  104. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  105. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  108. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
  111. package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +3 -1
  116. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  117. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
  145. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  148. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  151. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
  161. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  167. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  171. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/route.js +1 -103
  173. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  174. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +3 -1
  176. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  177. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +3 -1
  179. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  180. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -1
  182. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  183. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -103
  186. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  187. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +104 -2
  189. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
  190. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  207. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  211. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/api/worktrees/route.js +1 -1
  225. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  226. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  228. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  229. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  230. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  231. package/.next/server/app/page_client-reference-manifest.js +1 -1
  232. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  234. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  235. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  236. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  237. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  239. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  240. package/.next/server/app/worktrees/[id]/page.js +9 -9
  241. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  243. package/.next/server/app-paths-manifest.json +25 -25
  244. package/.next/server/chunks/1068.js +1 -1
  245. package/.next/server/chunks/1210.js +1 -1
  246. package/.next/server/chunks/1501.js +3 -3
  247. package/.next/server/chunks/1990.js +1 -1
  248. package/.next/server/chunks/2119.js +1 -1
  249. package/.next/server/chunks/22.js +1 -1
  250. package/.next/server/chunks/2328.js +1 -1
  251. package/.next/server/chunks/2404.js +4 -3
  252. package/.next/server/chunks/2445.js +1 -1
  253. package/.next/server/chunks/252.js +1 -1
  254. package/.next/server/chunks/2816.js +1 -1
  255. package/.next/server/chunks/3543.js +1 -1
  256. package/.next/server/chunks/3730.js +1 -1
  257. package/.next/server/chunks/3945.js +1 -1
  258. package/.next/server/chunks/4207.js +3 -3
  259. package/.next/server/chunks/5064.js +1 -1
  260. package/.next/server/chunks/5571.js +1 -1
  261. package/.next/server/chunks/5742.js +1 -1
  262. package/.next/server/chunks/5775.js +1 -1
  263. package/.next/server/chunks/611.js +1 -1
  264. package/.next/server/chunks/6130.js +1 -1
  265. package/.next/server/chunks/6285.js +1 -1
  266. package/.next/server/chunks/6491.js +103 -0
  267. package/.next/server/chunks/6661.js +1 -1
  268. package/.next/server/chunks/6781.js +1 -1
  269. package/.next/server/chunks/6793.js +1 -1
  270. package/.next/server/chunks/7491.js +3 -0
  271. package/.next/server/chunks/7685.js +1 -1
  272. package/.next/server/chunks/7905.js +1 -1
  273. package/.next/server/chunks/8581.js +2 -2
  274. package/.next/server/chunks/8673.js +6 -6
  275. package/.next/server/chunks/8728.js +2 -2
  276. package/.next/server/chunks/8791.js +1 -1
  277. package/.next/server/chunks/8800.js +4 -3
  278. package/.next/server/chunks/8918.js +5 -5
  279. package/.next/server/chunks/9130.js +3 -3
  280. package/.next/server/chunks/{8052.js → 9353.js} +4 -2
  281. package/.next/server/chunks/9390.js +3 -0
  282. package/.next/server/chunks/9627.js +3 -3
  283. package/.next/server/chunks/967.js +1 -0
  284. package/.next/server/chunks/9731.js +3 -3
  285. package/.next/server/chunks/9882.js +3 -3
  286. package/.next/server/middleware-manifest.json +5 -5
  287. package/.next/server/pages/500.html +1 -1
  288. package/.next/server/server-reference-manifest.json +1 -1
  289. package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
  290. package/.next/static/chunks/{2407-6b9e12c099fa598c.js → 2407-940df9b11fadafc6.js} +1 -1
  291. package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
  292. package/.next/static/chunks/5449-6cb80bab2bd06b79.js +1 -0
  293. package/.next/static/chunks/7705-1f58d4c03d991fcf.js +1 -0
  294. package/.next/static/chunks/8165-3525fb42f1b4976e.js +1 -0
  295. package/.next/static/chunks/app/{layout-5b95e1236dcd9ef6.js → layout-057c850cd0df978e.js} +1 -1
  296. package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +1 -0
  297. package/.next/static/chunks/app/skills/[skillId]/page-74aac15286504ef4.js +1 -0
  298. package/.next/static/chunks/app/skills/page-182e16168b2fc098.js +1 -0
  299. package/.next/static/chunks/app/worktrees/[id]/page-eab0bf7564d3f9e2.js +1 -0
  300. package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
  301. package/.next/trace +13 -13
  302. package/README.md +3 -3
  303. package/dist/cli/commands/ask.d.ts.map +1 -1
  304. package/dist/cli/commands/ask.js +23 -149
  305. package/dist/cli/commands/reply.d.ts +40 -0
  306. package/dist/cli/commands/reply.d.ts.map +1 -0
  307. package/dist/cli/commands/reply.js +133 -0
  308. package/dist/cli/commands/wait.d.ts +5 -0
  309. package/dist/cli/commands/wait.d.ts.map +1 -1
  310. package/dist/cli/commands/wait.js +10 -1
  311. package/dist/cli/docs/agent-operations.d.ts +2 -2
  312. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  313. package/dist/cli/docs/agent-operations.js +13 -0
  314. package/dist/cli/program.d.ts.map +1 -1
  315. package/dist/cli/program.js +4 -0
  316. package/dist/cli/utils/reply-ledger.d.ts +95 -0
  317. package/dist/cli/utils/reply-ledger.d.ts.map +1 -0
  318. package/dist/cli/utils/reply-ledger.js +187 -0
  319. package/dist/lib/cli-tools/copilot-executable.d.ts +9 -0
  320. package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -1
  321. package/dist/lib/cli-tools/copilot-executable.js +21 -5
  322. package/dist/lib/cli-tools/opencode-executable.d.ts +103 -0
  323. package/dist/lib/cli-tools/opencode-executable.d.ts.map +1 -0
  324. package/dist/lib/cli-tools/opencode-executable.js +179 -0
  325. package/dist/lib/cli-tools/types.d.ts +1 -1
  326. package/dist/lib/cli-tools/types.d.ts.map +1 -1
  327. package/dist/lib/cli-tools/types.js +5 -1
  328. package/dist/lib/detection/tools/verified-against.d.ts +15 -0
  329. package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
  330. package/dist/lib/detection/tools/verified-against.js +17 -1
  331. package/dist/lib/detection/version-probes.d.ts.map +1 -1
  332. package/dist/lib/detection/version-probes.js +14 -1
  333. package/dist/lib/session/tmux-session-surface.d.ts.map +1 -1
  334. package/dist/lib/session/tmux-session-surface.js +1 -1
  335. package/dist/server/locales/en/worktree.json +44 -14
  336. package/dist/server/locales/ja/worktree.json +44 -14
  337. package/dist/server/server.js +23 -0
  338. package/dist/server/src/config/cli-tool-timing-config.js +19 -1
  339. package/dist/server/src/config/detection-evidence-config.js +3 -0
  340. package/dist/server/src/config/schedule-config.js +55 -1
  341. package/dist/server/src/lib/auto-yes-poller.js +47 -4
  342. package/dist/server/src/lib/cli-tools/agent-mode-spec.js +54 -2
  343. package/dist/server/src/lib/cli-tools/base.js +6 -2
  344. package/dist/server/src/lib/cli-tools/command-code.js +55 -1
  345. package/dist/server/src/lib/cli-tools/composer-spec.js +10 -0
  346. package/dist/server/src/lib/cli-tools/copilot-executable.js +21 -5
  347. package/dist/server/src/lib/cli-tools/graceful-exit.js +15 -1
  348. package/dist/server/src/lib/cli-tools/index.js +3 -1
  349. package/dist/server/src/lib/cli-tools/install-hints.js +9 -3
  350. package/dist/server/src/lib/cli-tools/liveness-spec.js +19 -0
  351. package/dist/server/src/lib/cli-tools/manager.js +2 -0
  352. package/dist/server/src/lib/cli-tools/opencode-executable.js +179 -0
  353. package/dist/server/src/lib/cli-tools/opencode-v2.js +369 -0
  354. package/dist/server/src/lib/cli-tools/opencode.js +29 -5
  355. package/dist/server/src/lib/cli-tools/types.js +5 -1
  356. package/dist/server/src/lib/cmate-cli-tool-parser.js +65 -7
  357. package/dist/server/src/lib/cmate-parser.js +12 -0
  358. package/dist/server/src/lib/cmate-validator.js +13 -1
  359. package/dist/server/src/lib/detection/cli-patterns.js +78 -2
  360. package/dist/server/src/lib/detection/model-info-extractor.js +79 -7
  361. package/dist/server/src/lib/detection/status-detector.js +10 -1
  362. package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +2 -1
  363. package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +253 -0
  364. package/dist/server/src/lib/detection/tools/opencode-v2/dialog-title.js +48 -0
  365. package/dist/server/src/lib/detection/tools/registry.js +2 -0
  366. package/dist/server/src/lib/detection/tools/run-detection.js +9 -0
  367. package/dist/server/src/lib/detection/tools/verified-against.js +17 -1
  368. package/dist/server/src/lib/detection/upstream-faults.js +8 -0
  369. package/dist/server/src/lib/detection/version-probes.js +14 -1
  370. package/dist/server/src/lib/hooks/agent-session-telemetry.js +36 -1
  371. package/dist/server/src/lib/hooks/sources/opencode/log-diagnosis.js +105 -0
  372. package/dist/server/src/lib/hooks/sources/opencode/source.js +7 -1
  373. package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +422 -0
  374. package/dist/server/src/lib/hooks/sources/opencode-v2/decision-labels.js +24 -0
  375. package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +421 -0
  376. package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +271 -0
  377. package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +165 -0
  378. package/dist/server/src/lib/hooks/sources/opencode-v2/payloads.js +351 -0
  379. package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +230 -0
  380. package/dist/server/src/lib/hooks/sources/opencode-v2/reattach.js +149 -0
  381. package/dist/server/src/lib/hooks/sources/opencode-v2/runtime.js +180 -0
  382. package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +182 -0
  383. package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +295 -0
  384. package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +455 -0
  385. package/dist/server/src/lib/hooks/sources/opencode-v2/tool-id.js +18 -0
  386. package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +214 -0
  387. package/dist/server/src/lib/hooks/sources/registry.js +2 -0
  388. package/dist/server/src/lib/hooks/structured-decision-response.js +14 -5
  389. package/dist/server/src/lib/job-executor.js +2 -1
  390. package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +15 -1
  391. package/dist/server/src/lib/polling/structured-history-gate.js +19 -5
  392. package/dist/server/src/lib/relay/relay-delivery.js +4 -1
  393. package/dist/server/src/lib/session/agent-event-state.js +24 -0
  394. package/dist/server/src/lib/session/claude-executor.js +184 -10
  395. package/dist/server/src/lib/session/current-output-builder.js +27 -3
  396. package/dist/server/src/lib/session/send-user-message.js +4 -0
  397. package/dist/server/src/lib/session/structured-prompt.js +54 -0
  398. package/dist/server/src/lib/session/tmux-session-surface.js +1 -1
  399. package/dist/server/src/lib/skills/compatibility-matrix.js +65 -0
  400. package/dist/server/src/lib/tmux/tmux.js +48 -2
  401. package/dist/server/src/lib/verification/env-clean-gate.js +87 -5
  402. package/dist/server/src/types/cli-tool-contracts.js +10 -2
  403. package/dist/types/cli-tool-contracts.d.ts +16 -5
  404. package/dist/types/cli-tool-contracts.d.ts.map +1 -1
  405. package/dist/types/cli-tool-contracts.js +10 -2
  406. package/package.json +2 -1
  407. package/release-notes/0.43.0.json +130 -0
  408. package/scripts/hooks/cmate-agent-event.sh +14 -0
  409. package/scripts/opencode-v2/launch.sh +226 -0
  410. package/.next/server/chunks/4443.js +0 -3
  411. package/.next/server/chunks/5164.js +0 -1
  412. package/.next/server/chunks/650.js +0 -1
  413. package/.next/static/chunks/5449-550bd273dccc3ae4.js +0 -1
  414. package/.next/static/chunks/7705-2a2936551b0cf9a3.js +0 -1
  415. package/.next/static/chunks/8165-934ee7ff3b4ddfd4.js +0 -1
  416. package/.next/static/chunks/app/review/page-30616daa1dc595c2.js +0 -1
  417. package/.next/static/chunks/app/skills/[skillId]/page-ab7e432b69fccb3b.js +0 -1
  418. package/.next/static/chunks/app/skills/page-56b4fa11223e0cbd.js +0 -1
  419. package/.next/static/chunks/app/worktrees/[id]/page-59f5337e031518c6.js +0 -1
  420. /package/.next/static/{MXZXkcFAnpELZnxxHB4iJ → BVkBYdceLRvMROqQIqeBx}/_buildManifest.js +0 -0
  421. /package/.next/static/{MXZXkcFAnpELZnxxHB4iJ → BVkBYdceLRvMROqQIqeBx}/_ssgManifest.js +0 -0
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP client for an OpenCode V2 server CommandMate started (Issue #2934).
4
+ *
5
+ * Three calls, all to the loopback server `scripts/opencode-v2/launch.sh` runs
6
+ * in the instance's pane:
7
+ *
8
+ * - {@link probeOpencodeV2Server}: `GET /openapi.json` — the same request the
9
+ * wrapper waits on before it starts the TUI;
10
+ * - {@link openOpencodeV2EventStream}: `GET /api/event`, the SSE stream the
11
+ * subscription reads its state from;
12
+ * - {@link fetchOpencodeV2SessionMessagesPage}: `GET /api/session/{id}/message`,
13
+ * the stored turns History is written from (Issue #2940);
14
+ * - the approval and question calls (Issue #2945): list what is pending
15
+ * (`GET /api/permission/request`, `GET /api/form`,
16
+ * `GET /api/session/{id}/form`) and answer it
17
+ * (`POST …/permission/{requestID}/reply`, `POST …/form/{formID}/reply`).
18
+ *
19
+ * All authenticate with Basic `opencode:<password>`, the password read from
20
+ * the instance's file (`./secrets`) at call time. The value is put into a
21
+ * header and nowhere else — never into a URL, an error message or a log field.
22
+ *
23
+ * Wire format measured on 2.0.18 (#2370 Phase 0): every frame is one
24
+ * `data: {id, created?, type, location?, data, durable?}` line, and between
25
+ * frames the server sends `: heartbeat` comment lines. An unauthenticated
26
+ * request to any route answers 401.
27
+ *
28
+ * @module lib/hooks/sources/opencode-v2/client
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.OPENCODE_V2_CONTEXT_MESSAGE_WINDOW = exports.MAX_OPENCODE_V2_DECISION_BODY_CHARS = exports.OPENCODE_V2_DECISION_TIMEOUT_MS = exports.OPENCODE_V2_MESSAGES_PAGE_SIZE = exports.MAX_OPENCODE_V2_MESSAGES_BODY_CHARS = exports.OPENCODE_V2_MESSAGES_TIMEOUT_MS = exports.MAX_OPENCODE_V2_SSE_FRAME_CHARS = exports.OPENCODE_V2_PROBE_TIMEOUT_MS = exports.OPENCODE_V2_SERVER_USER = exports.OPENCODE_V2_SERVER_HOST = void 0;
32
+ exports.opencodeV2BaseUrl = opencodeV2BaseUrl;
33
+ exports.opencodeV2AuthorizationHeader = opencodeV2AuthorizationHeader;
34
+ exports.probeOpencodeV2Server = probeOpencodeV2Server;
35
+ exports.createOpencodeV2SseParser = createOpencodeV2SseParser;
36
+ exports.parseOpencodeV2Frame = parseOpencodeV2Frame;
37
+ exports.openOpencodeV2EventStream = openOpencodeV2EventStream;
38
+ exports.iterateOpencodeV2Stream = iterateOpencodeV2Stream;
39
+ exports.fetchOpencodeV2SessionMessagesPage = fetchOpencodeV2SessionMessagesPage;
40
+ exports.fetchOpencodeV2PendingPermissions = fetchOpencodeV2PendingPermissions;
41
+ exports.fetchOpencodeV2PendingForms = fetchOpencodeV2PendingForms;
42
+ exports.fetchOpencodeV2SessionForms = fetchOpencodeV2SessionForms;
43
+ exports.replyOpencodeV2Permission = replyOpencodeV2Permission;
44
+ exports.replyOpencodeV2Form = replyOpencodeV2Form;
45
+ exports.fetchOpencodeV2Session = fetchOpencodeV2Session;
46
+ exports.fetchOpencodeV2RecentMessages = fetchOpencodeV2RecentMessages;
47
+ exports.fetchOpencodeV2Models = fetchOpencodeV2Models;
48
+ const event_mapper_1 = require("../event-mapper");
49
+ /** The only host OpenCode V2 servers are started on and dialled at. */
50
+ exports.OPENCODE_V2_SERVER_HOST = '127.0.0.1';
51
+ /** The Basic-auth user name `opencode2 serve` expects. */
52
+ exports.OPENCODE_V2_SERVER_USER = 'opencode';
53
+ /** How long one probe may take before it counts as unreachable. */
54
+ exports.OPENCODE_V2_PROBE_TIMEOUT_MS = 2_000;
55
+ /**
56
+ * Largest frame accepted off the stream, in characters.
57
+ *
58
+ * `permission.asked` carries a unified diff in `metadata.files[].patch`, so a
59
+ * frame is not small; but a frame that never ends must not grow without bound
60
+ * inside a long-lived server process either.
61
+ */
62
+ exports.MAX_OPENCODE_V2_SSE_FRAME_CHARS = 4 * 1024 * 1024;
63
+ /** Base URL of an instance's server. */
64
+ function opencodeV2BaseUrl(port) {
65
+ return `http://${exports.OPENCODE_V2_SERVER_HOST}:${port}`;
66
+ }
67
+ /** The `Authorization` header value for a password. */
68
+ function opencodeV2AuthorizationHeader(password) {
69
+ return `Basic ${Buffer.from(`${exports.OPENCODE_V2_SERVER_USER}:${password}`).toString('base64')}`;
70
+ }
71
+ /**
72
+ * Whether the server on `port` is up and accepts `password`.
73
+ *
74
+ * `rejected` is the answer that matters for reattachment: something is
75
+ * listening, but not a server holding this instance's password — a different
76
+ * process took the port, and subscribing to it would read someone else's
77
+ * events.
78
+ */
79
+ async function probeOpencodeV2Server(port, password) {
80
+ try {
81
+ const response = await fetch(`${opencodeV2BaseUrl(port)}/openapi.json`, {
82
+ headers: { Authorization: opencodeV2AuthorizationHeader(password) },
83
+ redirect: 'error',
84
+ signal: AbortSignal.timeout(exports.OPENCODE_V2_PROBE_TIMEOUT_MS),
85
+ });
86
+ await response.body?.cancel().catch(() => { });
87
+ return response.status === 200
88
+ ? { kind: 'healthy' }
89
+ : { kind: 'rejected', status: response.status };
90
+ }
91
+ catch {
92
+ return { kind: 'unreachable' };
93
+ }
94
+ }
95
+ /** A fresh {@link OpencodeV2SseParser}. */
96
+ function createOpencodeV2SseParser() {
97
+ let buffer = '';
98
+ let data = [];
99
+ let dataChars = 0;
100
+ let oversized = false;
101
+ let oversizedCount = 0;
102
+ const dispatch = (items) => {
103
+ if (oversized)
104
+ oversizedCount += 1;
105
+ else if (data.length > 0)
106
+ items.push({ kind: 'frame', data: data.join('\n') });
107
+ data = [];
108
+ dataChars = 0;
109
+ oversized = false;
110
+ };
111
+ const takeLine = (line, items) => {
112
+ if (line === '') {
113
+ dispatch(items);
114
+ return;
115
+ }
116
+ if (line.startsWith(':')) {
117
+ items.push({ kind: 'heartbeat' });
118
+ return;
119
+ }
120
+ if (!line.startsWith('data:'))
121
+ return;
122
+ if (oversized)
123
+ return;
124
+ const value = line.slice(5).replace(/^ /, '');
125
+ dataChars += value.length;
126
+ if (dataChars > exports.MAX_OPENCODE_V2_SSE_FRAME_CHARS) {
127
+ oversized = true;
128
+ data = [];
129
+ return;
130
+ }
131
+ data.push(value);
132
+ };
133
+ return {
134
+ push(chunk) {
135
+ const items = [];
136
+ buffer += chunk;
137
+ let newline = buffer.search(/\r?\n|\r/);
138
+ while (newline !== -1) {
139
+ const line = buffer.slice(0, newline);
140
+ const width = buffer.startsWith('\r\n', newline) ? 2 : 1;
141
+ buffer = buffer.slice(newline + width);
142
+ takeLine(line, items);
143
+ newline = buffer.search(/\r?\n|\r/);
144
+ }
145
+ if (buffer.length > exports.MAX_OPENCODE_V2_SSE_FRAME_CHARS) {
146
+ // One unterminated line longer than any frame: drop it rather than
147
+ // hold it. The event it belongs to is counted as oversized.
148
+ buffer = '';
149
+ oversized = true;
150
+ }
151
+ return items;
152
+ },
153
+ flush() {
154
+ const items = [];
155
+ if (buffer !== '')
156
+ takeLine(buffer, items);
157
+ buffer = '';
158
+ dispatch(items);
159
+ return items;
160
+ },
161
+ oversizedFrames() {
162
+ return oversizedCount;
163
+ },
164
+ };
165
+ }
166
+ /** JSON object, or null for anything else. */
167
+ function parseOpencodeV2Frame(raw) {
168
+ try {
169
+ const parsed = JSON.parse(raw);
170
+ return (0, event_mapper_1.isPlainObject)(parsed) ? parsed : null;
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ }
176
+ /**
177
+ * Open `GET /api/event`.
178
+ *
179
+ * Resolves once the response headers are in — the instant the server has
180
+ * accepted the subscription — and rejects on anything but a `200
181
+ * text/event-stream`, so the caller's reconnect loop is the only error path.
182
+ *
183
+ * @param port - The instance's server
184
+ * @param password - The instance's password
185
+ * @param signal - Aborted to close the stream
186
+ */
187
+ async function openOpencodeV2EventStream(port, password, signal) {
188
+ const response = await fetch(`${opencodeV2BaseUrl(port)}/api/event`, {
189
+ signal,
190
+ redirect: 'error',
191
+ headers: {
192
+ Accept: 'text/event-stream',
193
+ Authorization: opencodeV2AuthorizationHeader(password),
194
+ },
195
+ });
196
+ if (!response.ok || !response.body) {
197
+ await response.body?.cancel().catch(() => { });
198
+ throw new Error(`opencode2 /api/event responded ${response.status}`);
199
+ }
200
+ const contentType = response.headers.get('content-type')?.split(';')[0]?.trim().toLowerCase();
201
+ if (contentType !== 'text/event-stream') {
202
+ await response.body.cancel().catch(() => { });
203
+ throw new Error(`opencode2 /api/event answered ${contentType ?? 'no content-type'}`);
204
+ }
205
+ return iterateOpencodeV2Stream(response.body.getReader());
206
+ }
207
+ /** Parse an open body into items until it ends. */
208
+ async function* iterateOpencodeV2Stream(reader) {
209
+ const decoder = new TextDecoder();
210
+ const parser = createOpencodeV2SseParser();
211
+ const convert = function* (items) {
212
+ for (const item of items) {
213
+ if (item.kind === 'heartbeat') {
214
+ yield item;
215
+ continue;
216
+ }
217
+ const frame = parseOpencodeV2Frame(item.data);
218
+ if (frame)
219
+ yield { kind: 'frame', frame };
220
+ }
221
+ };
222
+ try {
223
+ for (;;) {
224
+ const { done, value } = await reader.read();
225
+ if (done)
226
+ break;
227
+ yield* convert(parser.push(decoder.decode(value, { stream: true })));
228
+ }
229
+ yield* convert(parser.flush());
230
+ }
231
+ finally {
232
+ await reader.cancel().catch(() => { });
233
+ }
234
+ }
235
+ /** How long one `GET /api/session/{id}/message` may take (Issue #2940). */
236
+ exports.OPENCODE_V2_MESSAGES_TIMEOUT_MS = 5_000;
237
+ /** Largest `/message` response body accepted, in characters (Issue #2940). */
238
+ exports.MAX_OPENCODE_V2_MESSAGES_BODY_CHARS = 8 * 1024 * 1024;
239
+ /** Messages asked for per page (Issue #2940). */
240
+ exports.OPENCODE_V2_MESSAGES_PAGE_SIZE = 100;
241
+ /**
242
+ * One page of `GET /api/session/{id}/message` (Issue #2940).
243
+ *
244
+ * Measured on 2.0.18: `{data: [...], cursor: {previous, next}}`, newest first
245
+ * with `order=desc`. `cursor.next` walks towards older messages and must be
246
+ * sent without `order`.
247
+ *
248
+ * @param cursor - `cursor.next` of the previous page, or null for the newest page
249
+ * @returns The page, or null when the server did not answer it (any status but
250
+ * 200, a timeout, a body that is not the expected object). Never throws.
251
+ */
252
+ async function fetchOpencodeV2SessionMessagesPage(port, password, sessionId, cursor) {
253
+ const query = new URLSearchParams({ limit: String(exports.OPENCODE_V2_MESSAGES_PAGE_SIZE) });
254
+ if (cursor === null)
255
+ query.set('order', 'desc');
256
+ else
257
+ query.set('cursor', cursor);
258
+ try {
259
+ const response = await fetch(`${opencodeV2BaseUrl(port)}/api/session/${encodeURIComponent(sessionId)}/message?${query}`, {
260
+ headers: {
261
+ Accept: 'application/json',
262
+ Authorization: opencodeV2AuthorizationHeader(password),
263
+ },
264
+ redirect: 'error',
265
+ signal: AbortSignal.timeout(exports.OPENCODE_V2_MESSAGES_TIMEOUT_MS),
266
+ });
267
+ if (response.status !== 200) {
268
+ await response.body?.cancel().catch(() => { });
269
+ return null;
270
+ }
271
+ const text = await response.text();
272
+ if (text.length > exports.MAX_OPENCODE_V2_MESSAGES_BODY_CHARS)
273
+ return null;
274
+ const parsed = JSON.parse(text);
275
+ if (!(0, event_mapper_1.isPlainObject)(parsed) || !Array.isArray(parsed.data))
276
+ return null;
277
+ const next = (0, event_mapper_1.isPlainObject)(parsed.cursor) && typeof parsed.cursor.next === 'string'
278
+ ? parsed.cursor.next
279
+ : null;
280
+ return { data: parsed.data, next };
281
+ }
282
+ catch {
283
+ return null;
284
+ }
285
+ }
286
+ // =============================================================================
287
+ // Approvals and questions (Issue #2945)
288
+ // =============================================================================
289
+ /** How long one approval / question request may take (Issue #2945). */
290
+ exports.OPENCODE_V2_DECISION_TIMEOUT_MS = 5_000;
291
+ /** Largest approval / question response body accepted, in characters (Issue #2945). */
292
+ exports.MAX_OPENCODE_V2_DECISION_BODY_CHARS = 4 * 1024 * 1024;
293
+ /**
294
+ * One authenticated JSON request to an instance's server.
295
+ *
296
+ * @returns The status and parsed body, or null when nothing answered (refused
297
+ * connection, timeout, a body over the bound or not JSON). Never throws.
298
+ */
299
+ async function requestOpencodeV2(port, password, method, path, body) {
300
+ try {
301
+ const response = await fetch(`${opencodeV2BaseUrl(port)}${path}`, {
302
+ method,
303
+ headers: {
304
+ Accept: 'application/json',
305
+ Authorization: opencodeV2AuthorizationHeader(password),
306
+ ...(body === undefined ? {} : { 'Content-Type': 'application/json' }),
307
+ },
308
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }),
309
+ redirect: 'error',
310
+ signal: AbortSignal.timeout(exports.OPENCODE_V2_DECISION_TIMEOUT_MS),
311
+ });
312
+ const text = await response.text();
313
+ if (text.length > exports.MAX_OPENCODE_V2_DECISION_BODY_CHARS)
314
+ return null;
315
+ return { status: response.status, body: text === '' ? null : JSON.parse(text) };
316
+ }
317
+ catch {
318
+ return null;
319
+ }
320
+ }
321
+ /** The `data` array of a 200 list response, or null. */
322
+ function listData(response) {
323
+ if (response === null || response.status !== 200)
324
+ return null;
325
+ return (0, event_mapper_1.isPlainObject)(response.body) && Array.isArray(response.body.data)
326
+ ? response.body.data
327
+ : null;
328
+ }
329
+ /**
330
+ * `GET /api/permission/request` — every approval the server is waiting on
331
+ * (`Permission.Request[]`). The server is the instance's own, so "every" is
332
+ * this instance's.
333
+ *
334
+ * @returns The entries, or null when the server did not answer the list
335
+ */
336
+ async function fetchOpencodeV2PendingPermissions(port, password) {
337
+ return listData(await requestOpencodeV2(port, password, 'GET', '/api/permission/request'));
338
+ }
339
+ /**
340
+ * `GET /api/form` — every question (`Form.Info[]`) the server is waiting on.
341
+ *
342
+ * @returns The entries, or null when the server did not answer the list
343
+ */
344
+ async function fetchOpencodeV2PendingForms(port, password) {
345
+ return listData(await requestOpencodeV2(port, password, 'GET', '/api/form'));
346
+ }
347
+ /**
348
+ * `GET /api/session/{id}/form` — the questions one session is waiting on.
349
+ *
350
+ * Where a question's fields are read from when a `form.created` frame arrives
351
+ * without them (2.0.18 sends the form in the frame as `data.form`).
352
+ *
353
+ * @returns The entries, or null when the server did not answer the list
354
+ */
355
+ async function fetchOpencodeV2SessionForms(port, password, sessionId) {
356
+ return listData(await requestOpencodeV2(port, password, 'GET', `/api/session/${encodeURIComponent(sessionId)}/form`));
357
+ }
358
+ /**
359
+ * `POST /api/session/{sessionID}/permission/{requestID}/reply`.
360
+ *
361
+ * Measured on 2.0.18: 204, then `permission.replied` on the stream and the
362
+ * TUI's dialog closes.
363
+ *
364
+ * @returns Whether the server accepted the reply (2xx)
365
+ */
366
+ async function replyOpencodeV2Permission(port, password, sessionId, requestId, decision, message) {
367
+ const response = await requestOpencodeV2(port, password, 'POST', `/api/session/${encodeURIComponent(sessionId)}/permission/${encodeURIComponent(requestId)}/reply`, message === undefined ? { decision } : { decision, message });
368
+ return response !== null && response.status >= 200 && response.status < 300;
369
+ }
370
+ /**
371
+ * `POST /api/session/{sessionID}/form/{formID}/reply` with `{answer}`.
372
+ *
373
+ * Measured on 2.0.18: 204, then `form.replied`. A value the form does not
374
+ * accept answers 400 (`FormInvalidAnswerError`).
375
+ *
376
+ * @returns Whether the server accepted the answer (2xx)
377
+ */
378
+ async function replyOpencodeV2Form(port, password, sessionId, formId, answer) {
379
+ const response = await requestOpencodeV2(port, password, 'POST', `/api/session/${encodeURIComponent(sessionId)}/form/${encodeURIComponent(formId)}/reply`, { answer });
380
+ return response !== null && response.status >= 200 && response.status < 300;
381
+ }
382
+ // =============================================================================
383
+ // Session usage (Issue #2981)
384
+ // =============================================================================
385
+ /** Messages asked for when only the newest assistant message is wanted (Issue #2981). */
386
+ exports.OPENCODE_V2_CONTEXT_MESSAGE_WINDOW = 20;
387
+ /**
388
+ * `GET /api/session/{id}` — the session's `Session.Info`, cumulative `cost` and
389
+ * `tokens` included. Measured on 2.0.18: `{data: {...}}`.
390
+ *
391
+ * @returns The `data` object, or null when the server did not answer it
392
+ */
393
+ async function fetchOpencodeV2Session(port, password, sessionId) {
394
+ const response = await requestOpencodeV2(port, password, 'GET', `/api/session/${encodeURIComponent(sessionId)}`);
395
+ if (response === null || response.status !== 200)
396
+ return null;
397
+ return (0, event_mapper_1.isPlainObject)(response.body) && (0, event_mapper_1.isPlainObject)(response.body.data)
398
+ ? response.body.data
399
+ : null;
400
+ }
401
+ /**
402
+ * The newest {@link OPENCODE_V2_CONTEXT_MESSAGE_WINDOW} entries of
403
+ * `GET /api/session/{id}/message`, newest first.
404
+ *
405
+ * @returns The entries, or null when the server did not answer the list
406
+ */
407
+ async function fetchOpencodeV2RecentMessages(port, password, sessionId) {
408
+ const query = new URLSearchParams({
409
+ limit: String(exports.OPENCODE_V2_CONTEXT_MESSAGE_WINDOW),
410
+ order: 'desc',
411
+ });
412
+ return listData(await requestOpencodeV2(port, password, 'GET', `/api/session/${encodeURIComponent(sessionId)}/message?${query}`));
413
+ }
414
+ /**
415
+ * `GET /api/model` — the models the server offers, each with
416
+ * `limit: { context, output, input? }` (2.0.18).
417
+ *
418
+ * @returns The entries, or null when the server did not answer the list
419
+ */
420
+ async function fetchOpencodeV2Models(port, password) {
421
+ return listData(await requestOpencodeV2(port, password, 'GET', '/api/model'));
422
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * OpenCode V2's own words for the three approval verdicts (Issue #2945 D1).
4
+ *
5
+ * The shared list (`STRUCTURED_DECISION_OPTIONS` in `lib/session/structured-prompt`)
6
+ * is v1's: `Allow once` / `Allow always` / `Reject`. OpenCode V2's TUI draws
7
+ * `Allow once Always allow Reject` (measured on 2.0.18, #2370 Phase 0) — the
8
+ * middle words the other way round — and a card that says one thing while the
9
+ * pane beside it says another makes the operator stop and check which is right.
10
+ * So the surfaces show v2's words for a v2 approval, keyed by the wire reply
11
+ * (`once` / `always` / `reject`), which is what the number still sends.
12
+ *
13
+ * A pure module with no imports, so the browser bundle can read it.
14
+ *
15
+ * @module lib/hooks/sources/opencode-v2/decision-labels
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.OPENCODE_V2_DECISION_LABELS = void 0;
19
+ /** Label per wire reply, in the order v2's TUI draws them. Untranslated, as v1's are. */
20
+ exports.OPENCODE_V2_DECISION_LABELS = {
21
+ once: 'Allow once',
22
+ always: 'Always allow',
23
+ reject: 'Reject',
24
+ };