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,271 @@
1
+ "use strict";
2
+ /**
3
+ * Where OpenCode V2's mapped events enter CommandMate's agent-event state
4
+ * (Issue #2934, decision D5).
5
+ *
6
+ * - a turn boundary (`user_prompt_submit` / `stop`) is recorded as-is, and a
7
+ * `stop` also runs the same stop side effects every tool's `Stop` does
8
+ * (`applyAgentStopEvent`: task events, verification) so `commandmate wait`
9
+ * completes on it. A failed turn (`stop` / `error`) is logged as an error;
10
+ * - an approval request (Issue #2945 D1/D3) is adjudicated FIRST — Auto-Yes
11
+ * answers it over `…/permission/{id}/reply` through the same
12
+ * `adjudicatePendingPermission` v1 uses — and then recorded as a pending
13
+ * decision carrying its action, the rule `Always allow` would save and the
14
+ * diff, so the PC panel and the phone sheet can show what they are
15
+ * approving. `promptSettled` is whether the verdict was delivered; the
16
+ * `permission.replied` that follows any answer (ours, another client's, or
17
+ * the human's in the TUI) retires it by id;
18
+ * - a question (`form.created`, Issue #2945 D2) is recorded, its fields are
19
+ * read (off the frame's `data.form`, or `GET /api/session/{id}/form`) and
20
+ * published as the question's choices, the phone is notified the way v1's
21
+ * `question.asked` notifies it, and `form.replied` / `form.cancelled` retire
22
+ * it.
23
+ *
24
+ * Never throws: an ingest failure is logged and the scraper keeps deciding.
25
+ *
26
+ * @module lib/hooks/sources/opencode-v2/ingest
27
+ */
28
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ var desc = Object.getOwnPropertyDescriptor(m, k);
31
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
32
+ desc = { enumerable: true, get: function() { return m[k]; } };
33
+ }
34
+ Object.defineProperty(o, k2, desc);
35
+ }) : (function(o, m, k, k2) {
36
+ if (k2 === undefined) k2 = k;
37
+ o[k2] = m[k];
38
+ }));
39
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
41
+ }) : function(o, v) {
42
+ o["default"] = v;
43
+ });
44
+ var __importStar = (this && this.__importStar) || (function () {
45
+ var ownKeys = function(o) {
46
+ ownKeys = Object.getOwnPropertyNames || function (o) {
47
+ var ar = [];
48
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
49
+ return ar;
50
+ };
51
+ return ownKeys(o);
52
+ };
53
+ return function (mod) {
54
+ if (mod && mod.__esModule) return mod;
55
+ var result = {};
56
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
57
+ __setModuleDefault(result, mod);
58
+ return result;
59
+ };
60
+ })();
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.ingestOpencodeV2Event = ingestOpencodeV2Event;
63
+ const logger_1 = require("../../../../lib/logger");
64
+ const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
65
+ const permission_adjudication_1 = require("../../../../lib/hooks/permission-adjudication");
66
+ const pending_decision_kind_1 = require("../../../../lib/hooks/pending-decision-kind");
67
+ const agent_event_state_1 = require("../../../../lib/session/agent-event-state");
68
+ const structured_prompt_1 = require("../../../../lib/session/structured-prompt");
69
+ const event_mapper_1 = require("../event-mapper");
70
+ const push_1 = require("../opencode/push");
71
+ const client_1 = require("./client");
72
+ const mappers_1 = require("./mappers");
73
+ const payloads_1 = require("./payloads");
74
+ const ports_1 = require("./ports");
75
+ const secrets_1 = require("./secrets");
76
+ const source_1 = require("./source");
77
+ const tool_id_1 = require("./tool-id");
78
+ const logger = (0, logger_1.createLogger)('lib/hooks/sources/opencode-v2/ingest');
79
+ async function applyStop(target, instanceId) {
80
+ const [{ getDbInstance }, { getWorktreeById }, { applyAgentStopEvent }] = await Promise.all([
81
+ Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
82
+ Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
83
+ Promise.resolve().then(() => __importStar(require('../../../../lib/hooks/agent-event-service'))),
84
+ ]);
85
+ const db = getDbInstance();
86
+ const worktree = getWorktreeById(db, target.worktreeId) ?? null;
87
+ if (!worktree) {
88
+ logger.info('opencode-v2-stop-unresolved-target', { worktreeId: target.worktreeId });
89
+ return;
90
+ }
91
+ await applyAgentStopEvent(db, worktree, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId);
92
+ }
93
+ /** `GET /api/session/{id}/form`, the form with this id. */
94
+ async function loadFormFromServer(target, sessionId, formId) {
95
+ const port = (0, ports_1.getAssignedOpencodeV2Port)(target);
96
+ const password = (0, secrets_1.readOpencodeV2Password)(target);
97
+ if (port === null || password === null)
98
+ return null;
99
+ const forms = await (0, client_1.fetchOpencodeV2SessionForms)(port, password, sessionId);
100
+ const form = forms?.find((entry) => (0, event_mapper_1.isPlainObject)(entry) && entry.id === formId);
101
+ return (0, event_mapper_1.isPlainObject)(form) ? form : null;
102
+ }
103
+ /**
104
+ * Judge one approval and deliver the verdict, before it is recorded
105
+ * (Issue #2945 D3; the order is v1's #1898 fix).
106
+ *
107
+ * `adjudicatePendingPermission` is the one shared adjudicator: with Auto-Yes
108
+ * off it abstains and nothing is sent; with it on it answers `once` unless a
109
+ * deny pattern or the execution contract withholds it.
110
+ *
111
+ * @returns Whether the dialog may be treated as closed
112
+ */
113
+ async function adjudicatePermission(target, event, instanceId) {
114
+ const pending = (0, payloads_1.toOpencodeV2PendingPermission)(event.raw, event.receivedAt);
115
+ if (!pending) {
116
+ logger.info('opencode-v2-permission-unparsed', { worktreeId: target.worktreeId, instanceId });
117
+ return false;
118
+ }
119
+ const outcome = await (0, permission_adjudication_1.adjudicatePendingPermission)(source_1.opencodeV2AgentEventSource, target, pending, source_1.opencodeV2AgentEventSource.parsePermissionRequest(event.raw));
120
+ logger.info('opencode-v2-permission-decided', {
121
+ worktreeId: target.worktreeId,
122
+ instanceId,
123
+ decisionId: pending.id,
124
+ behavior: outcome.behavior,
125
+ reason: outcome.reason,
126
+ delivered: outcome.delivered,
127
+ settled: outcome.settled,
128
+ });
129
+ return outcome.settled;
130
+ }
131
+ /**
132
+ * The question a `form.created` frame opened, with its choices (Issue #2945 D2).
133
+ *
134
+ * The form is read off the frame — 2.0.18 sends the whole form as
135
+ * `data.form` (measured for this Issue) — and, when a frame arrives without
136
+ * it, from `GET /api/session/{id}/form`, the call Phase 0 answered it with.
137
+ */
138
+ async function readQuestion(target, event, loadForm) {
139
+ const fromFrame = (0, payloads_1.parseOpencodeV2Form)(event.raw);
140
+ if (fromFrame)
141
+ return fromFrame;
142
+ const formId = (0, mappers_1.frameDecisionId)(event.raw);
143
+ const sessionId = (0, mappers_1.frameSessionId)(event.raw);
144
+ if (formId === null || sessionId === null)
145
+ return null;
146
+ const form = await loadForm(target, sessionId, formId);
147
+ return form ? (0, payloads_1.parseOpencodeV2Form)(form) : null;
148
+ }
149
+ /**
150
+ * Record one mapped event for the instance it arrived on.
151
+ *
152
+ * @param target - The instance whose server produced the event
153
+ * @param event - The normalized event
154
+ * @param stopEffect - What a `stop` runs after being recorded (tests replace it)
155
+ * @param loadForm - How a question's form is read (tests replace it)
156
+ */
157
+ async function ingestOpencodeV2Event(target, event, stopEffect = applyStop, loadForm = loadFormFromServer) {
158
+ const instanceId = target.instanceId ?? tool_id_1.OPENCODE_V2_CLI_TOOL_ID;
159
+ try {
160
+ const delivery = (0, agent_event_state_1.classifyAgentEventDelivery)({
161
+ worktreeId: target.worktreeId,
162
+ cliToolId: tool_id_1.OPENCODE_V2_CLI_TOOL_ID,
163
+ instanceId,
164
+ event: event.event,
165
+ detail: event.detail,
166
+ sessionId: event.conversationId,
167
+ at: event.receivedAt,
168
+ // Issue #2945: the decision id, so two approvals a second apart are two
169
+ // approvals — not one and a repeat inside the time window.
170
+ identity: source_1.opencodeV2AgentEventSource.eventIdentityOf(event.raw),
171
+ identityKind: source_1.opencodeV2AgentEventSource.capabilities.eventIdentity,
172
+ });
173
+ if (delivery.duplicate) {
174
+ logger.info('opencode-v2-event-duplicate-dropped', {
175
+ worktreeId: target.worktreeId,
176
+ instanceId,
177
+ event: event.event,
178
+ detail: event.detail,
179
+ by: delivery.by,
180
+ });
181
+ return;
182
+ }
183
+ const record = {
184
+ event: event.event,
185
+ at: event.receivedAt,
186
+ detail: event.detail?.slice(0, agent_event_types_1.MAX_EVENT_DETAIL_LENGTH) ?? null,
187
+ sessionId: event.conversationId,
188
+ message: null,
189
+ model: event.model,
190
+ };
191
+ const options = { sessionStartMayArriveLate: false };
192
+ if (event.event === 'notification' && event.detail === mappers_1.OPENCODE_V2_PERMISSION_DETAIL) {
193
+ record.decisionId = (0, mappers_1.frameDecisionId)(event.raw);
194
+ const subject = (0, payloads_1.readOpencodeV2PermissionSubject)(event.raw);
195
+ record.toolName = subject?.toolName ?? (0, mappers_1.framePermissionAction)(event.raw);
196
+ record.decisionPatterns = subject?.patterns ?? null;
197
+ // D1: the diff is what the card shows, carried as the record's message.
198
+ record.message =
199
+ (0, payloads_1.describeOpencodeV2Permission)(event.raw)?.slice(0, structured_prompt_1.MAX_STRUCTURED_PROMPT_MESSAGE_LENGTH) ??
200
+ null;
201
+ // D3: the verdict leaves BEFORE the record is written (v1's #1898 order).
202
+ record.promptSettled = await adjudicatePermission(target, event, instanceId);
203
+ (0, agent_event_state_1.recordAgentEvent)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId, record, options);
204
+ }
205
+ else if (event.event === 'notification' &&
206
+ event.detail === mappers_1.OPENCODE_V2_DECISION_SETTLED_DETAIL) {
207
+ record.decisionId = (0, mappers_1.frameDecisionId)(event.raw);
208
+ record.promptSettled = true;
209
+ (0, agent_event_state_1.recordAgentEvent)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId, record, options);
210
+ }
211
+ else if (event.event === 'notification' && event.detail === mappers_1.OPENCODE_V2_QUESTION_DETAIL) {
212
+ const spec = await readQuestion(target, event, loadForm);
213
+ record.message =
214
+ spec?.questions[0]?.question.slice(0, structured_prompt_1.MAX_STRUCTURED_PROMPT_MESSAGE_LENGTH) ?? null;
215
+ (0, agent_event_state_1.recordAgentEvent)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId, record, options);
216
+ // D2: the choices, for the panel's picker and `capture --prompts`. A form
217
+ // no surface can offer choices for still opens the wait below, and the
218
+ // human answers it in the TUI.
219
+ if (spec) {
220
+ (0, agent_event_state_1.recordAskUserQuestion)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId, spec, event.receivedAt);
221
+ }
222
+ (0, agent_event_state_1.reportQuestionPending)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId, {
223
+ toolName: pending_decision_kind_1.OPENCODE_QUESTION_TOOL_NAME,
224
+ decisionId: (0, mappers_1.frameDecisionId)(event.raw),
225
+ detail: mappers_1.OPENCODE_V2_QUESTION_DETAIL,
226
+ }, event.receivedAt);
227
+ logger.info('opencode-v2-question-recorded', {
228
+ worktreeId: target.worktreeId,
229
+ instanceId,
230
+ decisionId: (0, mappers_1.frameDecisionId)(event.raw),
231
+ parsed: spec !== null,
232
+ questionCount: spec?.questions.length ?? 0,
233
+ });
234
+ // After the record, for v1's reason (#2045): the notification must not
235
+ // describe a wait the rest of the process has not been told about yet.
236
+ await (0, push_1.notifyOpencodeQuestionPush)(target, instanceId, record.message, event.receivedAt);
237
+ }
238
+ else if (event.event === 'stop') {
239
+ if (event.detail === mappers_1.OPENCODE_V2_FAILED_DETAIL) {
240
+ record.message =
241
+ (0, mappers_1.frameFailureMessage)(event.raw)?.slice(0, structured_prompt_1.MAX_STRUCTURED_PROMPT_MESSAGE_LENGTH) ?? null;
242
+ logger.error('opencode-v2-turn-failed', {
243
+ worktreeId: target.worktreeId,
244
+ instanceId,
245
+ sessionId: event.conversationId,
246
+ message: record.message,
247
+ });
248
+ }
249
+ (0, agent_event_state_1.recordAgentEvent)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId, record, options);
250
+ await stopEffect(target, instanceId);
251
+ }
252
+ else {
253
+ (0, agent_event_state_1.recordAgentEvent)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, instanceId, record, options);
254
+ }
255
+ logger.info('opencode-v2-event-received', {
256
+ worktreeId: target.worktreeId,
257
+ instanceId,
258
+ type: (0, mappers_1.frameType)(event.raw),
259
+ event: event.event,
260
+ detail: event.detail,
261
+ });
262
+ }
263
+ catch (error) {
264
+ logger.error('opencode-v2-event-ingest-failed', {
265
+ worktreeId: target.worktreeId,
266
+ instanceId,
267
+ event: event.event,
268
+ error: error instanceof Error ? error.message : String(error),
269
+ });
270
+ }
271
+ }
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ /**
3
+ * OpenCode V2's SSE vocabulary, mapped onto CommandMate's agent events
4
+ * (Issue #2934, decision D5).
5
+ *
6
+ * The envelope, measured on 2.0.18 (#2370 Phase 0):
7
+ * `{id, created?, type, location?, data, durable?}`. `location.directory` is
8
+ * present on some events and absent on others (`session.execution.succeeded`
9
+ * carries `durable` instead), so nothing here reads it: one instance owns one
10
+ * server, and every frame on that server's stream is that instance's.
11
+ *
12
+ * Phase 1 mapped the turn boundaries and the two kinds of "the agent is waiting
13
+ * for a human":
14
+ *
15
+ * | OpenCode V2 event | agent event |
16
+ * |-------------------------------------------------|--------------------------------------|
17
+ * | `session.execution.started` | `user_prompt_submit` → running |
18
+ * | `session.execution.succeeded` / `interrupted` | `stop` → ready |
19
+ * | `session.execution.failed` | `stop` (detail `error`) → ready |
20
+ * | `permission.asked` | `notification(permission_prompt)` |
21
+ * | `permission.replied` | `notification(permission_replied)` |
22
+ * | `form.created` | `notification(question_prompt)` |
23
+ * | `form.replied` / `form.cancelled` | `notification(permission_replied)` |
24
+ *
25
+ * Every other type is dropped before it reaches the normalizer
26
+ * ({@link isHandledOpencodeV2EventType}), so the unknown-event tally does not
27
+ * fill up with `session.reasoning.delta` and friends.
28
+ *
29
+ * `form.replied` / `form.cancelled` reuse `permission_replied` on purpose: that
30
+ * detail is the agent-event state's one "this decision is settled, retire it by
31
+ * id" signal, and a question is a decision exactly as an approval is.
32
+ *
33
+ * @module lib/hooks/sources/opencode-v2/mappers
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.OPENCODE_V2_MAPPERS = exports.OPENCODE_V2_HANDLED_EVENT_TYPES = exports.OPENCODE_V2_FAILED_DETAIL = exports.OPENCODE_V2_DECISION_SETTLED_DETAIL = exports.OPENCODE_V2_QUESTION_DETAIL = exports.OPENCODE_V2_PERMISSION_DETAIL = void 0;
37
+ exports.isHandledOpencodeV2EventType = isHandledOpencodeV2EventType;
38
+ exports.frameType = frameType;
39
+ exports.frameData = frameData;
40
+ exports.frameSessionId = frameSessionId;
41
+ exports.frameDecisionId = frameDecisionId;
42
+ exports.opencodeV2EventIdentity = opencodeV2EventIdentity;
43
+ exports.framePermissionAction = framePermissionAction;
44
+ exports.frameFailureMessage = frameFailureMessage;
45
+ const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
46
+ const event_mapper_1 = require("../event-mapper");
47
+ /** `notification` detail of an approval request. */
48
+ exports.OPENCODE_V2_PERMISSION_DETAIL = 'permission_prompt';
49
+ /** `notification` detail of a question (a `form`). */
50
+ exports.OPENCODE_V2_QUESTION_DETAIL = 'question_prompt';
51
+ /** `notification` detail that retires a decision — approval or question. */
52
+ exports.OPENCODE_V2_DECISION_SETTLED_DETAIL = agent_event_types_1.PERMISSION_REPLIED_DETAIL;
53
+ /** `stop` detail of a turn that ended in `session.execution.failed`. */
54
+ exports.OPENCODE_V2_FAILED_DETAIL = 'error';
55
+ /** The event types Phase 1 reads. Anything else is ignored. */
56
+ exports.OPENCODE_V2_HANDLED_EVENT_TYPES = [
57
+ 'session.execution.started',
58
+ 'session.execution.succeeded',
59
+ 'session.execution.failed',
60
+ 'session.execution.interrupted',
61
+ 'permission.asked',
62
+ 'permission.replied',
63
+ 'form.created',
64
+ 'form.replied',
65
+ 'form.cancelled',
66
+ ];
67
+ /** Whether a frame's `type` is one {@link OPENCODE_V2_MAPPERS} maps. */
68
+ function isHandledOpencodeV2EventType(type) {
69
+ return type !== null && exports.OPENCODE_V2_HANDLED_EVENT_TYPES.includes(type);
70
+ }
71
+ /** The frame's `type`, or null. */
72
+ function frameType(payload) {
73
+ return (0, event_mapper_1.readNestedString)(payload, ['type']);
74
+ }
75
+ /** The frame's `data` object (empty when absent). */
76
+ function frameData(payload) {
77
+ return (0, event_mapper_1.isPlainObject)(payload.data) ? payload.data : {};
78
+ }
79
+ /**
80
+ * The OpenCode session a frame belongs to.
81
+ *
82
+ * `data.sessionID` where the event carries it; otherwise the durable
83
+ * aggregate id (`durable.aggregateID`), which for the `session.*` events is the
84
+ * session. Used as the turn's conversation id, never for routing.
85
+ */
86
+ function frameSessionId(payload) {
87
+ return ((0, event_mapper_1.readNestedString)(frameData(payload), ['sessionID']) ??
88
+ // Issue #2945: `form.created` nests the form — `data.form.sessionID`
89
+ // (measured on 2.0.18).
90
+ (0, event_mapper_1.readNestedString)(frameData(payload), ['form', 'sessionID']) ??
91
+ (0, event_mapper_1.readNestedString)(payload, ['durable', 'aggregateID']));
92
+ }
93
+ /**
94
+ * The id of the decision a frame opens or settles.
95
+ *
96
+ * `permission.asked` carries it as `data.id` (`per_…`), `form.created` as
97
+ * `data.form.id` (`frm_…`, the form is nested — measured, Issue #2945);
98
+ * `permission.replied` names it `data.requestID`; the form replies carry
99
+ * `data.id` and are read under the other spellings too.
100
+ */
101
+ function frameDecisionId(payload) {
102
+ const data = frameData(payload);
103
+ switch (frameType(payload)) {
104
+ case 'permission.asked':
105
+ return (0, event_mapper_1.readNestedString)(data, ['id']);
106
+ case 'form.created':
107
+ // Measured on 2.0.18 (Issue #2945): the form is nested,
108
+ // `data.form.id`. `data.id` is read as well, for a frame that is not.
109
+ return (0, event_mapper_1.readNestedString)(data, ['form', 'id']) ?? (0, event_mapper_1.readNestedString)(data, ['id']);
110
+ case 'permission.replied':
111
+ return (0, event_mapper_1.readNestedString)(data, ['requestID']) ?? (0, event_mapper_1.readNestedString)(data, ['id']);
112
+ case 'form.replied':
113
+ case 'form.cancelled':
114
+ return ((0, event_mapper_1.readNestedString)(data, ['formID']) ??
115
+ (0, event_mapper_1.readNestedString)(data, ['id']) ??
116
+ (0, event_mapper_1.readNestedString)(data, ['requestID']));
117
+ default:
118
+ return null;
119
+ }
120
+ }
121
+ /**
122
+ * The frame's own identity, for de-duplication (Issue #2945,
123
+ * `eventIdentity: 'permission-id'`).
124
+ *
125
+ * The decision id ({@link frameDecisionId}) — the `per_…` / `frm_…` the reply
126
+ * URL takes. An approval and the reply that settles it carry the SAME id, which
127
+ * is why `classifyAgentEventDelivery` keys on `(event, detail, identity)`
128
+ * rather than on the id alone. Every other frame (the `session.execution.*`
129
+ * boundaries) answers null and keeps the time window, as v1's `session.idle`
130
+ * does. The envelope's `evt_…` is not used, for v1's reason: nothing measured
131
+ * says it is unique per frame.
132
+ */
133
+ function opencodeV2EventIdentity(payload) {
134
+ return (0, event_mapper_1.readEventIdentity)(frameDecisionId(payload));
135
+ }
136
+ /** The action an approval is for (`edit`, `shell`, …), or null. */
137
+ function framePermissionAction(payload) {
138
+ return (0, event_mapper_1.readNestedString)(frameData(payload), ['action']);
139
+ }
140
+ /** A human-readable reason a failed turn gives, or null. */
141
+ function frameFailureMessage(payload) {
142
+ const data = frameData(payload);
143
+ return ((0, event_mapper_1.readNestedString)(data, ['error', 'message']) ??
144
+ (0, event_mapper_1.readNestedString)(data, ['error', 'data', 'message']) ??
145
+ (0, event_mapper_1.readNestedString)(data, ['error', 'name']) ??
146
+ (0, event_mapper_1.readNestedString)(data, ['message']));
147
+ }
148
+ const OPENCODE_V2_BASE_MAPPERS = [
149
+ (0, event_mapper_1.whenNamed)('session.execution.started', 'user_prompt_submit'),
150
+ (0, event_mapper_1.whenNamed)('session.execution.succeeded', 'stop'),
151
+ (0, event_mapper_1.whenNamed)('session.execution.interrupted', 'stop'),
152
+ (0, event_mapper_1.whenNamed)('session.execution.failed', 'stop', exports.OPENCODE_V2_FAILED_DETAIL),
153
+ (0, event_mapper_1.whenNamed)('permission.asked', 'notification', exports.OPENCODE_V2_PERMISSION_DETAIL),
154
+ (0, event_mapper_1.whenNamed)('permission.replied', 'notification', exports.OPENCODE_V2_DECISION_SETTLED_DETAIL),
155
+ (0, event_mapper_1.whenNamed)('form.created', 'notification', exports.OPENCODE_V2_QUESTION_DETAIL),
156
+ (0, event_mapper_1.whenNamed)('form.replied', 'notification', exports.OPENCODE_V2_DECISION_SETTLED_DETAIL),
157
+ (0, event_mapper_1.whenNamed)('form.cancelled', 'notification', exports.OPENCODE_V2_DECISION_SETTLED_DETAIL),
158
+ ];
159
+ /** The mappers, each stamping the frame's session as the conversation id. */
160
+ exports.OPENCODE_V2_MAPPERS = OPENCODE_V2_BASE_MAPPERS.map((mapper) => (type, payload) => {
161
+ const mapped = mapper(type, payload);
162
+ if (!mapped)
163
+ return null;
164
+ return { ...mapped, conversationId: mapped.conversationId ?? frameSessionId(payload) };
165
+ });