commandmate 0.24.0 → 0.26.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 (295) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +266 -266
  3. package/.next/app-path-routes-manifest.json +15 -15
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update-check/route.js +1 -1
  11. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/hooks/permission-request/route.js +1 -1
  32. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  68. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/chat/page.js +2 -2
  137. package/.next/server/app/chat/page.js.nft.json +1 -1
  138. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  139. package/.next/server/app/login/page.js +2 -2
  140. package/.next/server/app/login/page.js.nft.json +1 -1
  141. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  142. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/more/page.js +2 -2
  144. package/.next/server/app/more/page.js.nft.json +1 -1
  145. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  146. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  147. package/.next/server/app/page.js +1 -1
  148. package/.next/server/app/page.js.nft.json +1 -1
  149. package/.next/server/app/page_client-reference-manifest.js +1 -1
  150. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/repositories/page.js +2 -2
  152. package/.next/server/app/repositories/page.js.nft.json +1 -1
  153. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  154. package/.next/server/app/review/page.js +1 -1
  155. package/.next/server/app/review/page.js.nft.json +1 -1
  156. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  157. package/.next/server/app/sessions/page.js +1 -1
  158. package/.next/server/app/sessions/page.js.nft.json +1 -1
  159. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  160. package/.next/server/app/skills/[skillId]/page.js +2 -2
  161. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  162. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  163. package/.next/server/app/skills/installed/page.js +2 -2
  164. package/.next/server/app/skills/installed/page.js.nft.json +1 -1
  165. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app/skills/page.js +2 -2
  167. package/.next/server/app/skills/page.js.nft.json +1 -1
  168. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  169. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  170. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  171. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  172. package/.next/server/app/worktrees/[id]/page.js +6 -6
  173. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  174. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  175. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  176. package/.next/server/app-paths-manifest.json +15 -15
  177. package/.next/server/chunks/2119.js +1 -1
  178. package/.next/server/chunks/2404.js +1 -1
  179. package/.next/server/chunks/2445.js +1 -1
  180. package/.next/server/chunks/3241.js +1 -1
  181. package/.next/server/chunks/3346.js +1 -1
  182. package/.next/server/chunks/4455.js +1 -1
  183. package/.next/server/chunks/5164.js +1 -1
  184. package/.next/server/chunks/5571.js +1 -1
  185. package/.next/server/chunks/5959.js +4 -4
  186. package/.next/server/chunks/6130.js +1 -1
  187. package/.next/server/chunks/6274.js +12 -9
  188. package/.next/server/chunks/6285.js +1 -1
  189. package/.next/server/chunks/7458.js +6 -6
  190. package/.next/server/chunks/848.js +1 -1
  191. package/.next/server/chunks/8730.js +1 -0
  192. package/.next/server/chunks/880.js +1 -1
  193. package/.next/server/chunks/9328.js +1 -1
  194. package/.next/server/chunks/9373.js +4 -3
  195. package/.next/server/middleware-build-manifest.js +1 -1
  196. package/.next/server/middleware-manifest.json +5 -5
  197. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  198. package/.next/server/pages/500.html +1 -1
  199. package/.next/server/server-reference-manifest.json +1 -1
  200. package/.next/static/chunks/2053-dfac2d49227cc942.js +1 -0
  201. package/.next/static/chunks/3898-ef488bfa804507d9.js +1 -0
  202. package/.next/static/chunks/5229-35f9acab97a553c5.js +1 -0
  203. package/.next/static/chunks/{6381-18a6a02a94d00d76.js → 6381-9303430933084b56.js} +1 -1
  204. package/.next/static/chunks/{9599-d29d2f8eeaf7c249.js → 8649-f551b0010dba4986.js} +1 -1
  205. package/.next/static/chunks/9263.f2034ec525abcf72.js +1 -0
  206. package/.next/static/chunks/app/chat/page-439b35c9cb90dbe0.js +1 -0
  207. package/.next/static/chunks/app/login/page-eefd515d8c37e5ee.js +1 -0
  208. package/.next/static/chunks/app/more/page-889b7546a8a553dc.js +1 -0
  209. package/.next/static/chunks/app/page-a8d04ac0e3e4c9fc.js +1 -0
  210. package/.next/static/chunks/app/repositories/page-f3c4d8839b1ca203.js +1 -0
  211. package/.next/static/chunks/app/review/page-6dc88649fe88ac16.js +1 -0
  212. package/.next/static/chunks/app/sessions/page-2c9ed9e969097688.js +1 -0
  213. package/.next/static/chunks/app/skills/[skillId]/page-19beef6121c4c982.js +1 -0
  214. package/.next/static/chunks/app/skills/installed/page-d5b9cef6d21fabda.js +1 -0
  215. package/.next/static/chunks/app/skills/page-06ef637e07dd9377.js +1 -0
  216. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-9ddcb224594f620f.js → page-5fed3984fafcd910.js} +1 -1
  217. package/.next/static/chunks/app/worktrees/[id]/page-fbdf4621a2911ac1.js +1 -0
  218. package/.next/static/chunks/{webpack-3534d858912a6c92.js → webpack-9d892a9ff07c289d.js} +1 -1
  219. package/.next/static/css/e865c4979a41aa03.css +1 -0
  220. package/.next/trace +12 -12
  221. package/README.md +96 -45
  222. package/dist/cli/commands/task.d.ts.map +1 -1
  223. package/dist/cli/commands/task.js +2 -1
  224. package/dist/cli/commands/verify.d.ts +14 -0
  225. package/dist/cli/commands/verify.d.ts.map +1 -1
  226. package/dist/cli/commands/verify.js +109 -3
  227. package/dist/cli/commands/wait.d.ts +2 -0
  228. package/dist/cli/commands/wait.d.ts.map +1 -1
  229. package/dist/cli/commands/wait.js +184 -4
  230. package/dist/cli/types/api-responses.d.ts +172 -0
  231. package/dist/cli/types/api-responses.d.ts.map +1 -1
  232. package/dist/cli/types/index.d.ts +31 -0
  233. package/dist/cli/types/index.d.ts.map +1 -1
  234. package/dist/cli/types/index.js +26 -0
  235. package/dist/cli/utils/verify-runner.d.ts +36 -1
  236. package/dist/cli/utils/verify-runner.d.ts.map +1 -1
  237. package/dist/cli/utils/verify-runner.js +114 -6
  238. package/dist/server/src/config/activity-bar-config.js +5 -1
  239. package/dist/server/src/lib/auto-yes-poller.js +40 -4
  240. package/dist/server/src/lib/auto-yes-state.js +108 -3
  241. package/dist/server/src/lib/cli-tools/antigravity.js +8 -4
  242. package/dist/server/src/lib/cli-tools/codex.js +63 -30
  243. package/dist/server/src/lib/cli-tools/copilot.js +5 -1
  244. package/dist/server/src/lib/cli-tools/gemini.js +15 -15
  245. package/dist/server/src/lib/cli-tools/opencode.js +9 -3
  246. package/dist/server/src/lib/detection/cli-patterns.js +148 -6
  247. package/dist/server/src/lib/detection/status-detector.js +28 -0
  248. package/dist/server/src/lib/detection/upstream-faults.js +120 -0
  249. package/dist/server/src/lib/hooks/permission-decision-service.js +13 -5
  250. package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +18 -11
  251. package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -9
  252. package/dist/server/src/lib/hooks/sources/claude/source.js +5 -2
  253. package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +26 -18
  254. package/dist/server/src/lib/hooks/sources/codex/source.js +6 -9
  255. package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +22 -12
  256. package/dist/server/src/lib/hooks/sources/copilot/source.js +1 -1
  257. package/dist/server/src/lib/hooks/sources/define-source.js +6 -4
  258. package/dist/server/src/lib/hooks/sources/gemini/settings-generator.js +14 -8
  259. package/dist/server/src/lib/hooks/sources/gemini/source.js +29 -29
  260. package/dist/server/src/lib/hooks/sources/index.js +4 -1
  261. package/dist/server/src/lib/hooks/sources/launch-command.js +61 -0
  262. package/dist/server/src/lib/hooks/sources/legacy-relay.js +2 -1
  263. package/dist/server/src/lib/hooks/sources/opencode/source.js +10 -7
  264. package/dist/server/src/lib/polling/prompt-dedup-state.js +95 -0
  265. package/dist/server/src/lib/polling/response-checker.js +12 -0
  266. package/dist/server/src/lib/polling/response-poller-core.js +11 -1
  267. package/dist/server/src/lib/session/agent-session-lifecycle.js +28 -7
  268. package/dist/server/src/lib/session/claude-session.js +5 -1
  269. package/dist/server/src/lib/session/current-output-builder.js +34 -0
  270. package/dist/server/src/lib/verification/env-snapshot.js +21 -3
  271. package/dist/server/src/lib/verification/gate-runner.js +258 -7
  272. package/dist/server/src/lib/verification/machine-lock.js +204 -0
  273. package/dist/server/src/lib/verification/scope-gate.js +126 -13
  274. package/dist/server/src/lib/verification/verify-config.js +85 -3
  275. package/dist/server/src/lib/verification/worktree-index.js +140 -0
  276. package/package.json +1 -1
  277. package/.next/server/chunks/3451.js +0 -1
  278. package/.next/static/chunks/2053-52d3c82014e1cd54.js +0 -1
  279. package/.next/static/chunks/5229-0610b4e3288e777d.js +0 -1
  280. package/.next/static/chunks/744-3ad06d8c8ca482fc.js +0 -1
  281. package/.next/static/chunks/9263.5259f73f89220d64.js +0 -1
  282. package/.next/static/chunks/app/chat/page-15d13fc024d78f5d.js +0 -1
  283. package/.next/static/chunks/app/login/page-0247a3fb569bb22b.js +0 -1
  284. package/.next/static/chunks/app/more/page-b8ba537baeac8d5b.js +0 -1
  285. package/.next/static/chunks/app/page-afc64708362f31e5.js +0 -1
  286. package/.next/static/chunks/app/repositories/page-3469dacb6be7842f.js +0 -1
  287. package/.next/static/chunks/app/review/page-2d9cb7e068f8f35a.js +0 -1
  288. package/.next/static/chunks/app/sessions/page-7470c2bfd89e0df9.js +0 -1
  289. package/.next/static/chunks/app/skills/[skillId]/page-5e24481162f7ea78.js +0 -1
  290. package/.next/static/chunks/app/skills/installed/page-efd2d710a27f9735.js +0 -1
  291. package/.next/static/chunks/app/skills/page-0498adfc6e48684b.js +0 -1
  292. package/.next/static/chunks/app/worktrees/[id]/page-e611d30e47989e5d.js +0 -1
  293. package/.next/static/css/3ac44cfc082d02ad.css +0 -1
  294. /package/.next/static/{smu4mnL7qMf8w38n9dQJE → hNdNiFes2xLls68SWhAU9}/_buildManifest.js +0 -0
  295. /package/.next/static/{smu4mnL7qMf8w38n9dQJE → hNdNiFes2xLls68SWhAU9}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=6130,exports.ids=[6130],exports.modules={26838:(a,b,c)=>{c.d(b,{Mj:()=>k,Sw:()=>j,lX:()=>l});var d=c(29021),e=c(33873),f=c(90164);let g=/^v?\d+\.\d+\.\d+$/,h=/^[a-zA-Z0-9.\-\s_v]+$/,i=globalThis.__versionCheckCache??(globalThis.__versionCheckCache={result:null,fetchedAt:0,rateLimitResetAt:null});function j(){return function(){try{let a=(0,d.readFileSync)((0,e.join)(process.cwd(),"package.json"),"utf-8"),b=JSON.parse(a);if("commandmate"===b.name&&"string"==typeof b.version&&b.version.length>0)return b.version;return null}catch{return null}}()??"0.24.0"}function k(){return j()}async function l(){try{var a,b,c;if(null!==i.result&&Date.now()-i.fetchedAt<36e5||i.rateLimitResetAt&&(!(Date.now()>=i.rateLimitResetAt)||(i.rateLimitResetAt=null,0)))return i.result;let d=await fetch("https://api.github.com/repos/Kewton/CommandMate/releases/latest",{headers:{Accept:"application/vnd.github+json","User-Agent":`CommandMate/${k()}`},cache:"no-store",signal:AbortSignal.timeout(5e3)});if(403===d.status)return function(a){let b=a.headers.get("X-RateLimit-Reset");b?i.rateLimitResetAt=1e3*parseInt(b,10):i.rateLimitResetAt=Date.now()+36e5}(d),i.result;if(!d.ok)return i.result;let e=await d.json(),j=k(),l=e.tag_name.replace(/^v/,""),m={hasUpdate:function(a,b){if(!g.test(a)||!g.test(b))return!1;let c=a=>a.replace(/^v/,"").split(".").map(Number),[d,e,f]=c(a),[h,i,j]=c(b);return h!==d?h>d:i!==e?i>e:j>f}(j,e.tag_name),currentVersion:j,latestVersion:l,releaseUrl:(a=e.html_url).startsWith(f.Dk)?a:null,releaseName:(b=e.name,c=e.tag_name,h.test(b)&&b.length<=128?b:c),publishedAt:e.published_at};return i.result=m,i.fetchedAt=Date.now(),m}catch{return i.result}}},88573:(a,b,c)=>{c.d(b,{Lw:()=>s});let d="https://raw.githubusercontent.com/Kewton/commandmate-skills/main/catalog/v1/catalog.json",e=[d],f=/^[A-Za-z0-9/+=_."-]{1,128}$/;var g=c(72626),h=c(13075);let i=(0,g.h)("lib/skills/catalog-client"),j={FETCH_FAILED:"SKILL_CATALOG_FETCH_FAILED",RATE_LIMITED:"SKILL_CATALOG_RATE_LIMITED",OVERSIZED:"SKILL_CATALOG_OVERSIZED",MALFORMED:"SKILL_CATALOG_MALFORMED",INVALID_SCHEMA:"SKILL_CATALOG_INVALID_SCHEMA"},k=globalThis.__skillCatalogCache??={catalog:null,validatedAt:0,confirmedAt:0,etag:null,revision:null,rateLimitResetAt:null,inflight:null};class l extends Error{}let m={[j.FETCH_FAILED]:"The Skill Catalog could not be retrieved.",[j.RATE_LIMITED]:"The Skill Catalog origin is rate limiting requests.",[j.OVERSIZED]:"The Skill Catalog response exceeded the allowed size.",[j.MALFORMED]:"The Skill Catalog response was not valid JSON.",[j.INVALID_SCHEMA]:"The Skill Catalog response did not match the supported Catalog schema."};function n(a){return new Date(a).toISOString()}function o(a,b,c){return{catalog:a,fetchedAt:n(k.validatedAt),revalidatedAt:n(k.confirmedAt),state:b,stale:"stale"===b,offline:"stale"===b,staleReason:c,source:{repository:"Kewton/commandmate-skills",ref:"main",revision:k.revision}}}function p(a,b=[]){return k.catalog?{ok:!0,snapshot:o(k.catalog,"stale",a)}:{ok:!1,failure:{code:a,message:m[a],errors:b}}}async function q(a,b){let c=a.headers.get("Content-Length");if(null!==c){let a=Number(c);if(!Number.isFinite(a)||a<0||a>b)throw new l("content-length out of bounds")}let d=a.body;if(!d||"function"!=typeof d.getReader){let c=await a.text();if(new TextEncoder().encode(c).length>b)throw new l("body exceeded size cap");return c}let e=d.getReader(),f=[],g=0;for(;;){let{done:a,value:c}=await e.read();if(a)break;if(c){if((g+=c.byteLength)>b)throw await e.cancel(),new l("body exceeded size cap");f.push(c)}}let h=new Uint8Array(g),i=0;for(let a of f)h.set(a,i),i+=a.byteLength;return new TextDecoder("utf-8").decode(h)}async function r(a){let b,c,g;if(!e.includes(d))return p(j.FETCH_FAILED);let m={Accept:"application/json","User-Agent":`CommandMate/${a}`};null!==k.catalog&&null!==k.etag&&(m["If-None-Match"]=k.etag);try{b=await fetch(d,{headers:m,cache:"no-store",signal:AbortSignal.timeout(5e3)})}catch{return i.warn("catalog-fetch-failed",{reason:j.FETCH_FAILED}),p(j.FETCH_FAILED)}if(304===b.status&&null!==k.catalog)return k.confirmedAt=Date.now(),{ok:!0,snapshot:o(k.catalog,"revalidated",null)};if(403===b.status||429===b.status)return!function(a){let b=Date.now(),c=b+864e5,d=a.headers.get("X-RateLimit-Reset");if(null!==d){let a=Number(d);if(Number.isFinite(a)&&a>0){k.rateLimitResetAt=Math.min(1e3*a,c);return}}let e=a.headers.get("Retry-After");if(null!==e){let a=Number(e);if(Number.isFinite(a)&&a>0){k.rateLimitResetAt=Math.min(b+1e3*a,c);return}}k.rateLimitResetAt=b+36e5}(b),i.warn("catalog-rate-limited",{status:b.status}),p(j.RATE_LIMITED);if(!b.ok)return i.warn("catalog-fetch-failed",{status:b.status}),p(j.FETCH_FAILED);try{c=await q(b,1048576)}catch(b){let a=b instanceof l?j.OVERSIZED:j.FETCH_FAILED;return i.warn("catalog-body-rejected",{reason:a}),p(a)}try{g=JSON.parse(c)}catch{return i.warn("catalog-malformed",{reason:j.MALFORMED}),p(j.MALFORMED)}let n=(0,h.JJ)(g);if(!n.ok)return i.warn("catalog-invalid-schema",{errorCount:n.errors.length}),p(j.INVALID_SCHEMA,n.errors);let r=Date.now();return k.catalog=n.value,k.validatedAt=r,k.confirmedAt=r,k.etag=b.headers.get("ETag"),k.revision=function(a){if(null===a)return null;let b=a.trim();return f.test(b)?b:null}(k.etag),{ok:!0,snapshot:o(n.value,"fresh",null)}}async function s(a={}){let{hostVersion:b="0.0.0",forceRevalidate:c=!1}=a;return!c&&null!==k.catalog&&Date.now()-k.confirmedAt<9e5&&null!==k.catalog?{ok:!0,snapshot:o(k.catalog,"cached",null)}:null!==k.rateLimitResetAt&&(!(Date.now()>=k.rateLimitResetAt)||(k.rateLimitResetAt=null,0))?p(j.RATE_LIMITED):(null===k.inflight&&(k.inflight=r(b).finally(()=>{k.inflight=null})),k.inflight)}},90164:(a,b,c)=>{c.d(b,{Dk:()=>e,kD:()=>f});let d="https://github.com/Kewton/CommandMate",e=`${d}/releases/`,f=`${d}/blob/main/docs/security-guide.md`}};
1
+ "use strict";exports.id=6130,exports.ids=[6130],exports.modules={26838:(a,b,c)=>{c.d(b,{Mj:()=>k,Sw:()=>j,lX:()=>l});var d=c(29021),e=c(33873),f=c(90164);let g=/^v?\d+\.\d+\.\d+$/,h=/^[a-zA-Z0-9.\-\s_v]+$/,i=globalThis.__versionCheckCache??(globalThis.__versionCheckCache={result:null,fetchedAt:0,rateLimitResetAt:null});function j(){return function(){try{let a=(0,d.readFileSync)((0,e.join)(process.cwd(),"package.json"),"utf-8"),b=JSON.parse(a);if("commandmate"===b.name&&"string"==typeof b.version&&b.version.length>0)return b.version;return null}catch{return null}}()??"0.26.0"}function k(){return j()}async function l(){try{var a,b,c;if(null!==i.result&&Date.now()-i.fetchedAt<36e5||i.rateLimitResetAt&&(!(Date.now()>=i.rateLimitResetAt)||(i.rateLimitResetAt=null,0)))return i.result;let d=await fetch("https://api.github.com/repos/Kewton/CommandMate/releases/latest",{headers:{Accept:"application/vnd.github+json","User-Agent":`CommandMate/${k()}`},cache:"no-store",signal:AbortSignal.timeout(5e3)});if(403===d.status)return function(a){let b=a.headers.get("X-RateLimit-Reset");b?i.rateLimitResetAt=1e3*parseInt(b,10):i.rateLimitResetAt=Date.now()+36e5}(d),i.result;if(!d.ok)return i.result;let e=await d.json(),j=k(),l=e.tag_name.replace(/^v/,""),m={hasUpdate:function(a,b){if(!g.test(a)||!g.test(b))return!1;let c=a=>a.replace(/^v/,"").split(".").map(Number),[d,e,f]=c(a),[h,i,j]=c(b);return h!==d?h>d:i!==e?i>e:j>f}(j,e.tag_name),currentVersion:j,latestVersion:l,releaseUrl:(a=e.html_url).startsWith(f.Dk)?a:null,releaseName:(b=e.name,c=e.tag_name,h.test(b)&&b.length<=128?b:c),publishedAt:e.published_at};return i.result=m,i.fetchedAt=Date.now(),m}catch{return i.result}}},88573:(a,b,c)=>{c.d(b,{Lw:()=>s});let d="https://raw.githubusercontent.com/Kewton/commandmate-skills/main/catalog/v1/catalog.json",e=[d],f=/^[A-Za-z0-9/+=_."-]{1,128}$/;var g=c(72626),h=c(13075);let i=(0,g.h)("lib/skills/catalog-client"),j={FETCH_FAILED:"SKILL_CATALOG_FETCH_FAILED",RATE_LIMITED:"SKILL_CATALOG_RATE_LIMITED",OVERSIZED:"SKILL_CATALOG_OVERSIZED",MALFORMED:"SKILL_CATALOG_MALFORMED",INVALID_SCHEMA:"SKILL_CATALOG_INVALID_SCHEMA"},k=globalThis.__skillCatalogCache??={catalog:null,validatedAt:0,confirmedAt:0,etag:null,revision:null,rateLimitResetAt:null,inflight:null};class l extends Error{}let m={[j.FETCH_FAILED]:"The Skill Catalog could not be retrieved.",[j.RATE_LIMITED]:"The Skill Catalog origin is rate limiting requests.",[j.OVERSIZED]:"The Skill Catalog response exceeded the allowed size.",[j.MALFORMED]:"The Skill Catalog response was not valid JSON.",[j.INVALID_SCHEMA]:"The Skill Catalog response did not match the supported Catalog schema."};function n(a){return new Date(a).toISOString()}function o(a,b,c){return{catalog:a,fetchedAt:n(k.validatedAt),revalidatedAt:n(k.confirmedAt),state:b,stale:"stale"===b,offline:"stale"===b,staleReason:c,source:{repository:"Kewton/commandmate-skills",ref:"main",revision:k.revision}}}function p(a,b=[]){return k.catalog?{ok:!0,snapshot:o(k.catalog,"stale",a)}:{ok:!1,failure:{code:a,message:m[a],errors:b}}}async function q(a,b){let c=a.headers.get("Content-Length");if(null!==c){let a=Number(c);if(!Number.isFinite(a)||a<0||a>b)throw new l("content-length out of bounds")}let d=a.body;if(!d||"function"!=typeof d.getReader){let c=await a.text();if(new TextEncoder().encode(c).length>b)throw new l("body exceeded size cap");return c}let e=d.getReader(),f=[],g=0;for(;;){let{done:a,value:c}=await e.read();if(a)break;if(c){if((g+=c.byteLength)>b)throw await e.cancel(),new l("body exceeded size cap");f.push(c)}}let h=new Uint8Array(g),i=0;for(let a of f)h.set(a,i),i+=a.byteLength;return new TextDecoder("utf-8").decode(h)}async function r(a){let b,c,g;if(!e.includes(d))return p(j.FETCH_FAILED);let m={Accept:"application/json","User-Agent":`CommandMate/${a}`};null!==k.catalog&&null!==k.etag&&(m["If-None-Match"]=k.etag);try{b=await fetch(d,{headers:m,cache:"no-store",signal:AbortSignal.timeout(5e3)})}catch{return i.warn("catalog-fetch-failed",{reason:j.FETCH_FAILED}),p(j.FETCH_FAILED)}if(304===b.status&&null!==k.catalog)return k.confirmedAt=Date.now(),{ok:!0,snapshot:o(k.catalog,"revalidated",null)};if(403===b.status||429===b.status)return!function(a){let b=Date.now(),c=b+864e5,d=a.headers.get("X-RateLimit-Reset");if(null!==d){let a=Number(d);if(Number.isFinite(a)&&a>0){k.rateLimitResetAt=Math.min(1e3*a,c);return}}let e=a.headers.get("Retry-After");if(null!==e){let a=Number(e);if(Number.isFinite(a)&&a>0){k.rateLimitResetAt=Math.min(b+1e3*a,c);return}}k.rateLimitResetAt=b+36e5}(b),i.warn("catalog-rate-limited",{status:b.status}),p(j.RATE_LIMITED);if(!b.ok)return i.warn("catalog-fetch-failed",{status:b.status}),p(j.FETCH_FAILED);try{c=await q(b,1048576)}catch(b){let a=b instanceof l?j.OVERSIZED:j.FETCH_FAILED;return i.warn("catalog-body-rejected",{reason:a}),p(a)}try{g=JSON.parse(c)}catch{return i.warn("catalog-malformed",{reason:j.MALFORMED}),p(j.MALFORMED)}let n=(0,h.JJ)(g);if(!n.ok)return i.warn("catalog-invalid-schema",{errorCount:n.errors.length}),p(j.INVALID_SCHEMA,n.errors);let r=Date.now();return k.catalog=n.value,k.validatedAt=r,k.confirmedAt=r,k.etag=b.headers.get("ETag"),k.revision=function(a){if(null===a)return null;let b=a.trim();return f.test(b)?b:null}(k.etag),{ok:!0,snapshot:o(n.value,"fresh",null)}}async function s(a={}){let{hostVersion:b="0.0.0",forceRevalidate:c=!1}=a;return!c&&null!==k.catalog&&Date.now()-k.confirmedAt<9e5&&null!==k.catalog?{ok:!0,snapshot:o(k.catalog,"cached",null)}:null!==k.rateLimitResetAt&&(!(Date.now()>=k.rateLimitResetAt)||(k.rateLimitResetAt=null,0))?p(j.RATE_LIMITED):(null===k.inflight&&(k.inflight=r(b).finally(()=>{k.inflight=null})),k.inflight)}},90164:(a,b,c)=>{c.d(b,{Dk:()=>e,kD:()=>f});let d="https://github.com/Kewton/CommandMate",e=`${d}/releases/`,f=`${d}/blob/main/docs/security-guide.md`}};
@@ -1,10 +1,13 @@
1
- "use strict";exports.id=6274,exports.ids=[6274],exports.modules={2412:(a,b,c)=>{c.d(b,{Qb:()=>f,tR:()=>g});var d=c(46065);let e=Symbol("default-branch-unresolved");async function f(a){let b=await (0,d.Bc)(["symbolic-ref","refs/remotes/origin/HEAD","--short"],a);if(null===b)return e;let c=b.trim();return c.startsWith("origin/")?c.slice(7):null}async function g(a){let b=await f(a);return"string"==typeof b?b:null}},76274:(a,b,c)=>{c.d(b,{Wb:()=>B,AT:()=>L});var d=c(79646),e=c(29021),f=c(88807),g=c(56791),h=c(48524),i=c(2412),j=c(72626),k=c(11501),l=c(52767),m=c(74985),n=c(77142);let o=".commandmate/tasks/";function p(a){return a.startsWith(o)}function q(a){let b=a.replace(/\/+$/,""),c=function(a){let b=0;for(let c of a)if("{"===c)b+=1;else if("}"===c&&(b-=1)<0)return!1;return 0===b}(b),d="",e=0,f=0;for(;f<b.length;){let a=b[f];if("*"===a){let a=f;for(;"*"===b[a];)a+=1;let c=a-f>1,e=0===f||"/"===b[f-1];if(c&&e&&"/"===b[a]){d+="(?:[^/]*/)*",f=a+1;continue}if(c&&e&&a===b.length){d+=".*",f=a;continue}d+="[^/]*",f=a;continue}if("?"===a){d+="[^/]",f+=1;continue}if(c&&"{"===a){e+=1,d+="(?:",f+=1;continue}if(c&&"}"===a&&e>0){e-=1,d+=")",f+=1;continue}if(c&&","===a&&e>0){d+="|",f+=1;continue}d+=a.replace(/[.*+?^${}()|[\]\\]/,"\\$&"),f+=1}return RegExp(`^${d}(?:/.*)?$`)}class r{constructor(a,b=null){this.contractPath=b,this.allow=a.allow.map(q),this.deny=a.deny.map(q)}isViolation(a){return!!this.deny.some(b=>b.test(a))||!a.startsWith(".commandmate/")&&a!==this.contractPath&&!this.allow.some(b=>b.test(a))}}function s(a,b){return new Promise(c=>{let e="",f="",g=(0,d.spawn)("git",a,{cwd:b,stdio:["ignore","pipe","pipe"]});g.stdout?.on("data",a=>{e+=a.toString("utf8")}),g.stderr?.on("data",a=>{f+=a.toString("utf8")}),g.on("error",a=>c({code:null,stdout:"",stderr:a.message})),g.on("close",a=>c({code:a,stdout:e,stderr:f}))})}function t(a){let b=a.split("\0"),c=[],d=0;for(;d<b.length;){let a=b[d];if(d+=1,a.length<4)continue;let e=[a.slice(3)],[f,g]=a;if("R"===f||"C"===f||"R"===g||"C"===g){let a=b[d];d+=1,a&&e.push(a)}c.push(e)}return c}async function u(a,b){let c=await s(["merge-base",b,"HEAD"],a);if(0!==c.code||""===c.stdout.trim())return{error:`'git merge-base ${b} HEAD' failed; base ref is unreachable from this worktree.`+(c.stderr.trim()?`
2
- ${c.stderr.trim()}`:"")};let d=c.stdout.trim(),e=await s(["diff","--name-only","-z","--no-renames",d,"HEAD"],a);if(0!==e.code)return{error:`'git diff --name-only ${d} HEAD' failed.`+(e.stderr.trim()?`
3
- ${e.stderr.trim()}`:"")};let f=await s(["status","--porcelain","-z","--untracked-files=all"],a);return 0!==f.code?{error:"'git status --porcelain' failed."+(f.stderr.trim()?`
4
- ${f.stderr.trim()}`:"")}:{paths:[...new Set([...e.stdout.split("\0").filter(a=>""!==a),...t(f.stdout).flat()].filter(a=>!p(a)))].sort(),mergeBase:d}}function v(a){return a.length>0?a.join(", "):"(none)"}async function w(a,b,c,d,e=null){let f=Date.now(),g=(a,b,c)=>({status:a,exitCode:c,startedAt:f,durationMs:Date.now()-f,logTail:b});if(!b)return g("skipped","scope: no contract is attached to this run, so no scope is declared to check.",null);if(!c)return g("skipped","scope: the contract sets success.requireScopeClean: false.",null);if(!d)return g("error","scope: no base ref, so there is nothing to diff against. Set options.baseRef in .commandmate/verify.yaml; origin/HEAD did not resolve a default branch.",null);let h=await u(a,d);if("error"in h)return g("error",`scope: ${h.error}`,null);let i=new r(b,e),j=h.paths.filter(a=>i.isViolation(a)),k=`scope: baseRef=${d} changed=${h.paths.length} violations=${j.length}
5
- allow: ${v(b.allow)}
6
- deny: ${v(b.deny)}`;if(0===j.length)return g("passed",k,0);let l=j.slice(0,100),m=j.length-l.length;return g("failed",[k,"out of scope:",...l.map(a=>` - ${a}`),...m>0?[` ... and ${m} more`]:[],"To allow this diff, add the paths above to the contract's scope.allow (the issue's target-file list) and re-send the task (`send --contract`) — scope is judged from the send-time snapshot, so editing the contract file alone changes nothing. A path matching deny: is a deliberate prohibition; revert it instead."].join("\n"),1)}var x=c(90384);let y=(0,j.h)("lib/verification/gate-runner"),z="git diff --name-only / status --porcelain \xd7 contract scope",A="lsof -iTCP -sTCP:LISTEN / tmux list-sessions / $HOME / ~/.commandmate \xd7 task-start snapshot";class B extends Error{constructor(a,b){super(`Verification run ${b} is already running for worktree '${a}'`),this.name="VerificationConflictError",this.worktreeId=a,this.runningRunId=b}}let C=0,D=[],E=new Map;class F{constructor(a){this.maxBytes=a,this.chunks=[],this.size=0}append(a){if(!(this.maxBytes<=0)&&0!==a.length){for(this.chunks.push(a),this.size+=a.length;this.chunks.length>0&&this.size-this.chunks[0].length>=this.maxBytes;)this.size-=this.chunks.shift().length;if(this.size>this.maxBytes){let a=this.size-this.maxBytes;this.chunks[0]=this.chunks[0].subarray(a),this.size-=a}}}toString(){return 0===this.chunks.length?"":Buffer.concat(this.chunks).toString("utf8")}}function G(a,b){return new Promise(c=>{let e="",f=(0,d.spawn)("git",a,{cwd:b,stdio:["ignore","pipe","ignore"]});f.stdout?.on("data",a=>{e+=a.toString("utf8")}),f.on("error",()=>c({code:null,stdout:""})),f.on("close",a=>c({code:a,stdout:e}))})}async function H(a,b,c){let d=Date.now(),e=(a,b,c)=>({status:a,exitCode:c,startedAt:d,durationMs:Date.now()-d,logTail:b});if(!b)return e("error",`work-evidence: no base ref. Set options.baseRef in ${x.aT}; origin/HEAD did not resolve a default branch.`,null);let f=await G(["merge-base",b,"HEAD"],a);if(0!==f.code||""===f.stdout.trim())return e("error",`work-evidence: 'git merge-base ${b} HEAD' failed; base ref is unreachable from this worktree.`,null);let g=f.stdout.trim(),h=await G(["rev-list","--count",`${g}..HEAD`,"--",":(top)",`:(exclude,top)${o}`],a);if(0!==h.code)return e("error",`work-evidence: 'git rev-list --count ${g}..HEAD' failed.`,null);let i=Number.parseInt(h.stdout.trim(),10),j=await G(["status","--porcelain","-z","--untracked-files=all"],a);if(0!==j.code)return e("error","work-evidence: 'git status --porcelain' failed.",null);let k=t(j.stdout).filter(a=>a.some(a=>!p(a))).length,l=`work-evidence: baseRef=${b} commits=${i} uncommitted=${k}`+(c.required?" requireCommit=true":"")+" (contract files excluded)";return Number.isFinite(i)&&(0!==i||0!==k)?c.required&&0===i?e("failed",`${l}
1
+ "use strict";exports.id=6274,exports.ids=[6274],exports.modules={2412:(a,b,c)=>{c.d(b,{Qb:()=>f,tR:()=>g});var d=c(46065);let e=Symbol("default-branch-unresolved");async function f(a){let b=await (0,d.Bc)(["symbolic-ref","refs/remotes/origin/HEAD","--short"],a);if(null===b)return e;let c=b.trim();return c.startsWith("origin/")?c.slice(7):null}async function g(a){let b=await f(a);return"string"==typeof b?b:null}},76274:(a,b,c)=>{c.d(b,{Wb:()=>L,AT:()=>Z});var d=c(79646),e=c(29021),f=c(88807),g=c(56791),h=c(48524),i=c(2412),j=c(72626),k=c(11501),l=c(52767),m=c(74985),n=c(77142),o=c(49987),p=c(53604);let q=".commandmate/",r=`(exempt: ${q})`,s=".commandmate/tasks/";function t(a){return a.startsWith(s)}function u(a){return{pattern:a,regexp:function(a){let b=a.replace(/\/+$/,""),c=function(a){let b=0;for(let c of a)if("{"===c)b+=1;else if("}"===c&&(b-=1)<0)return!1;return 0===b}(b),d="",e=0,f=0;for(;f<b.length;){let a=b[f];if("*"===a){let a=f;for(;"*"===b[a];)a+=1;let c=a-f>1,e=0===f||"/"===b[f-1];if(c&&e&&"/"===b[a]){d+="(?:[^/]*/)*",f=a+1;continue}if(c&&e&&a===b.length){d+=".*",f=a;continue}d+="[^/]*",f=a;continue}if("?"===a){d+="[^/]",f+=1;continue}if(c&&"{"===a){e+=1,d+="(?:",f+=1;continue}if(c&&"}"===a&&e>0){e-=1,d+=")",f+=1;continue}if(c&&","===a&&e>0){d+="|",f+=1;continue}d+=a.replace(/[.*+?^${}()|[\]\\]/,"\\$&"),f+=1}return RegExp(`^${d}(?:/.*)?$`)}(a)}}class v{constructor(a,b=null){this.contractPath=b,this.allow=a.allow.map(u),this.deny=a.deny.map(u)}classify(a){let b=this.deny.find(b=>b.regexp.test(a));if(b)return{admitted:!1,pattern:b.pattern};if(a.startsWith(q))return{admitted:!0,pattern:r};if(a===this.contractPath)return{admitted:!0,pattern:"(exempt: contract path)"};let c=this.allow.find(b=>b.regexp.test(a));return c?{admitted:!0,pattern:c.pattern}:{admitted:!1,pattern:null}}isViolation(a){return!this.classify(a).admitted}}function w(a,b){return new Promise(c=>{let e="",f="",g=(0,d.spawn)("git",a,{cwd:b,stdio:["ignore","pipe","pipe"]});g.stdout?.on("data",a=>{e+=a.toString("utf8")}),g.stderr?.on("data",a=>{f+=a.toString("utf8")}),g.on("error",a=>c({code:null,stdout:"",stderr:a.message})),g.on("close",a=>c({code:a,stdout:e,stderr:f}))})}function x(a){let b=a.split("\0"),c=[],d=0;for(;d<b.length;){let a=b[d];if(d+=1,a.length<4)continue;let e=[a.slice(3)],[f,g]=a;if("R"===f||"C"===f||"R"===g||"C"===g){let a=b[d];d+=1,a&&e.push(a)}c.push(e)}return c}async function y(a,b){let c=await w(["merge-base",b,"HEAD"],a);if(0!==c.code||""===c.stdout.trim())return{error:`'git merge-base ${b} HEAD' failed; base ref is unreachable from this worktree.`+(c.stderr.trim()?`
2
+ ${c.stderr.trim()}`:"")};let d=c.stdout.trim(),e=await w(["diff","--name-only","-z","--no-renames",d,"HEAD"],a);if(0!==e.code)return{error:`'git diff --name-only ${d} HEAD' failed.`+(e.stderr.trim()?`
3
+ ${e.stderr.trim()}`:"")};let f=await w(["status","--porcelain","-z","--untracked-files=all"],a);return 0!==f.code?{error:"'git status --porcelain' failed."+(f.stderr.trim()?`
4
+ ${f.stderr.trim()}`:"")}:{paths:[...new Set([...e.stdout.split("\0").filter(a=>""!==a),...x(f.stdout).flat()].filter(a=>!t(a)))].sort(),mergeBase:d}}function z(a){return a.length>0?a.join(", "):"(none)"}function A(a,b,c){return null===c?` ${a} ${b}`:` ${a} ${b} \u2190 ${c}`}async function B(a,b,c,d,e=null){let f=Date.now(),g=(a,b,c)=>({status:a,exitCode:c,startedAt:f,durationMs:Date.now()-f,logTail:b});if(!b)return g("skipped","scope: no contract is attached to this run, so no scope is declared to check.",null);if(!c)return g("skipped","scope: the contract sets success.requireScopeClean: false.",null);if(!d)return g("error","scope: no base ref, so there is nothing to diff against. Set options.baseRef in .commandmate/verify.yaml; origin/HEAD did not resolve a default branch.",null);let h=await y(a,d);if("error"in h)return g("error",`scope: ${h.error}`,null);let i=new v(b,e),j=[],k=[],l=new Map;for(let a of h.paths){let b=i.classify(a);if(b.admitted){j.push({path:a,pattern:b.pattern});continue}k.push(a),null!==b.pattern&&l.set(a,b.pattern)}let m=[`scope: baseRef=${d} changed=${h.paths.length} violations=${k.length}`,`allow: ${z(b.allow)}`,`deny: ${z(b.deny)}`,...function(a){if(0===a.length)return[];let b=a.slice(0,100),c=a.length-b.length;return["admitted:",...b.map(a=>A("+",a.path,a.pattern)),...c>0?[` ... (+${c} more)`]:[]]}(j)].join("\n");if(0===k.length)return g("passed",m,0);let n=k.slice(0,100),o=k.length-n.length;return g("failed",[m,"out of scope:",...n.map(a=>A("-",a,l.get(a)??null)),...o>0?[` ... and ${o} more`]:[],"To allow this diff, add the paths above to the contract's scope.allow (the issue's target-file list) and re-send the task (`send --contract`) — scope is judged from the send-time snapshot, so editing the contract file alone changes nothing. A path matching deny: is a deliberate prohibition; revert it instead."].join("\n"),1)}var C=c(90384);let D=(0,j.h)("lib/verification/gate-runner"),E="git diff --name-only / status --porcelain \xd7 contract scope",F="lsof -iTCP -sTCP:LISTEN / tmux list-sessions / $HOME / ~/.commandmate \xd7 task-start snapshot",G="[mutex]",H="[flaky]";function I(a,b){return`--- ${H} run ${a}/2: ${b.status} exit=${K(b.exitCode)} duration=${J(b.durationMs)} ---`}function J(a){return`${(a/1e3).toFixed(1)}s`}function K(a){return null===a?"n/a":String(a)}class L extends Error{constructor(a,b){super(`Verification run ${b} is already running for worktree '${a}'`),this.name="VerificationConflictError",this.worktreeId=a,this.runningRunId=b}}let M=0,N=[],O=new Map;class P{constructor(a){this.maxBytes=a,this.chunks=[],this.size=0}append(a){if(!(this.maxBytes<=0)&&0!==a.length){for(this.chunks.push(a),this.size+=a.length;this.chunks.length>0&&this.size-this.chunks[0].length>=this.maxBytes;)this.size-=this.chunks.shift().length;if(this.size>this.maxBytes){let a=this.size-this.maxBytes;this.chunks[0]=this.chunks[0].subarray(a),this.size-=a}}}toString(){return 0===this.chunks.length?"":Buffer.concat(this.chunks).toString("utf8")}}function Q(a,b,c,e,f){return new Promise(g=>{let h,i=Date.now(),j=new P(e),k=!1,l=!1,m=(0,d.spawn)(a,{shell:!0,cwd:b,env:{...process.env,CI:"true",...f},detached:!0,stdio:["ignore","pipe","pipe"]});m.stdout?.on("data",a=>j.append(a)),m.stderr?.on("data",a=>j.append(a));let n=a=>{if(void 0!==m.pid)try{process.kill(-m.pid,a)}catch{try{m.kill(a)}catch{}}},o=a=>{k||(k=!0,clearTimeout(p),h&&clearTimeout(h),g({...a,startedAt:i,durationMs:Date.now()-i}))},p=setTimeout(()=>{l=!0,n("SIGTERM"),h=setTimeout(()=>n("SIGKILL"),5e3),h.unref?.()},1e3*c);p.unref?.(),m.on("error",a=>{o({status:"error",exitCode:null,logTail:`${j.toString()}
5
+ [gate could not be spawned: ${a.message}]`.trim()})}),m.on("close",(a,b)=>{if(l)return void o({status:"timeout",exitCode:null,logTail:`${j.toString()}
6
+ [gate exceeded ${c}s and was terminated (${b??"exited"})]`.trim()});o({status:0===a?"passed":"failed",exitCode:a,logTail:j.toString()||null})})})}async function R(a,b,c,d){let e=a.mutex;if(!e)return Q(a.command,b,a.timeoutSec,c,d);let f=await (0,o.xL)(e,{timeoutMs:1e3*a.timeoutSec});if(!f.acquired)return{status:"skipped",exitCode:null,startedAt:Date.now(),durationMs:0,logTail:function(a,b,c){var d;if(c.acquired)throw Error("mutexWaitTimeoutLog called for an acquired lock");let e=c.heldBy?` (held by ${c.heldBy})`:"";return`reason=mutex-wait waited=${J(c.waitedMs)}
7
+ ${G} name=${b} lock=${d=b,(0,o.M)(d,(0,o.H)())}${e}
8
+ Gate '${a.id}' declares mutex '${b}' and the machine-wide lock stayed held for its whole ${a.timeoutSec}s budget, so the command was never started. This is a resource conflict, not a verdict on the work: re-run once the other run finishes, or raise the gate's timeoutSec.`}(a,e,f)};try{var g,h,i;let j=await Q(a.command,b,a.timeoutSec,c,d);return{...j,logTail:(g=f.waitedMs,h=f.handle.path,i=j.logTail,T(`${G} name=${e} waited=${J(g)} lock=${h}`,i))}}finally{f.handle.release()}}async function S(a,b,c,d){let e=await R(a,b,c,d);if(1!==a.retryOnFail||"failed"!==e.status)return e;let f=await R(a,b,c,d);return"passed"!==f.status&&"failed"!==f.status?{...e,logTail:T(`${H} retry reached no verdict (${f.status}); the first run's result stands. Retry log:
9
+ `+(f.logTail??"(no output)"),e.logTail)}:function(a,b,c){let d="passed"===c.status?"flaky":"fail",e="flaky"===d&&!0===a.flakyIsPass,f=e?c:"flaky"===d?b:c,g=`${H} runs=2 outcome=${d} exit=${K(b.exitCode)},${K(c.exitCode)} duration=${J(b.durationMs)},${J(c.durationMs)} verdict=${e?"pass":"fail"}`,h=[I(1,b),b.logTail??"",I(2,c),c.logTail??""].join("\n");return{status:e?"passed":"failed",exitCode:f.exitCode,startedAt:b.startedAt,durationMs:b.durationMs+c.durationMs,logTail:`${g}
10
+ ${h}`}}(a,e,f)}function T(a,b){return b?`${a}
11
+ ${b}`:a}function U(a,b){return new Promise(c=>{let e="",f=(0,d.spawn)("git",a,{cwd:b,stdio:["ignore","pipe","ignore"]});f.stdout?.on("data",a=>{e+=a.toString("utf8")}),f.on("error",()=>c({code:null,stdout:""})),f.on("close",a=>c({code:a,stdout:e}))})}async function V(a,b,c){let d=Date.now(),e=(a,b,c)=>({status:a,exitCode:c,startedAt:d,durationMs:Date.now()-d,logTail:b});if(!b)return e("error",`work-evidence: no base ref. Set options.baseRef in ${C.aT}; origin/HEAD did not resolve a default branch.`,null);let f=await U(["merge-base",b,"HEAD"],a);if(0!==f.code||""===f.stdout.trim())return e("error",`work-evidence: 'git merge-base ${b} HEAD' failed; base ref is unreachable from this worktree.`,null);let g=f.stdout.trim(),h=await U(["rev-list","--count",`${g}..HEAD`,"--",":(top)",`:(exclude,top)${s}`],a);if(0!==h.code)return e("error",`work-evidence: 'git rev-list --count ${g}..HEAD' failed.`,null);let i=Number.parseInt(h.stdout.trim(),10),j=await U(["status","--porcelain","-z","--untracked-files=all"],a);if(0!==j.code)return e("error","work-evidence: 'git status --porcelain' failed.",null);let k=x(j.stdout).filter(a=>a.some(a=>!t(a))).length,l=`work-evidence: baseRef=${b} commits=${i} uncommitted=${k}`+(c.required?" requireCommit=true":"")+" (contract files excluded)";return Number.isFinite(i)&&(0!==i||0!==k)?c.required&&0===i?e("failed",`${l}
7
12
  ${c.sources.join(" and ")} requires a commit: uncommitted changes are not work evidence, commit them.`,1):e("passed",l,0):e("failed",`${l}
8
- No commits and no uncommitted changes: nothing to verify.`,1)}async function I(a,b){if(a.options.baseRef)return a.options.baseRef;let c=await (0,i.tR)(b);return c?`origin/${c}`:null}async function J(a,b,c,f,h,i,j,l,n){var o,p;let{maxLogTailBytes:q,skipInPrimaryCheckout:r}=f.options,{runWorkEvidence:s,gates:t}=h,u=(0,k.fc)(j?.contract??null,f),v=(b,c)=>((0,g.finishGateResult)(a,b,{status:c.status,exitCode:c.exitCode,durationMs:c.durationMs,logTail:c.logTail,executionWindow:{startedAt:c.startedAt,finishedAt:c.startedAt+c.durationMs}}),c),y=async(c,d,e,f)=>v((0,g.createGateResult)(a,b,{gateId:c,command:d,source:e}).id,await f()),B=(c,d,e,f)=>{let h={status:"skipped",exitCode:null,startedAt:Date.now(),durationMs:0,logTail:f};return v((0,g.createGateResult)(a,b,{gateId:c,command:d,source:e}).id,h)},C=[];if(s){let a=await y(x.uz,"git merge-base / rev-list / status --porcelain (excluding contract files)","builtin",()=>H(c,i,u));if("passed"!==a.status){let b=`skipped: the ${x.uz} gate did not pass.`;for(let a of("off"!==h.scope&&B(x.le,z,"builtin",b),h.runEnvClean&&B(x.Q5,A,"builtin",b),t))B(a.id,a.command,a.source,b);return"failed"===a.status?"not_started":"error"}C.push(a.status)}if("off"!==h.scope){let a=l?B(x.le,z,"builtin",(o=l.id,p=l.status,`scope: task ${o} declares a scope for this worktree, but it is ${p} and this run was not attached to it, so its scope was NOT judged. Name the task when starting the run (\`wait --verify\` does this automatically).`)):await y(x.le,z,"builtin",()=>w(c,j?.contract.scope??null,j?.contract.success.requireScopeClean??!1,i,j?.contractPath??null)),b="explicit"===h.scope||null!==l;("skipped"!==a.status||b)&&C.push(a.status)}if(h.runEnvClean){let a=await y(x.Q5,A,"builtin",()=>(0,m.uT)({worktreeId:n.worktreeId,worktreePath:c,taskId:n.taskId,baseline:n.baseline,sources:n.decision.sources}));C.push(a.status)}let D=r&&function(a,b){try{return(0,e.realpathSync)(a)===(0,e.realpathSync)(b)}catch{return!1}}(c,process.cwd());for(let a of t){if(D){C.push(B(a.id,a.command,a.source,"skipped: worktreePath is the server process working directory and options.skipInPrimaryCheckout is true.").status);continue}let b=await y(a.id,a.command,a.source,()=>(function(a,b,c,e){return new Promise(f=>{let g,h=Date.now(),i=new F(e),j=!1,k=!1,l=(0,d.spawn)(a,{shell:!0,cwd:b,env:{...process.env,CI:"true"},detached:!0,stdio:["ignore","pipe","pipe"]});l.stdout?.on("data",a=>i.append(a)),l.stderr?.on("data",a=>i.append(a));let m=a=>{if(void 0!==l.pid)try{process.kill(-l.pid,a)}catch{try{l.kill(a)}catch{}}},n=a=>{j||(j=!0,clearTimeout(o),g&&clearTimeout(g),f({...a,startedAt:h,durationMs:Date.now()-h}))},o=setTimeout(()=>{k=!0,m("SIGTERM"),g=setTimeout(()=>m("SIGKILL"),5e3),g.unref?.()},1e3*c);o.unref?.(),l.on("error",a=>{n({status:"error",exitCode:null,logTail:`${i.toString()}
9
- [gate could not be spawned: ${a.message}]`.trim()})}),l.on("close",(a,b)=>{if(k)return void n({status:"timeout",exitCode:null,logTail:`${i.toString()}
10
- [gate exceeded ${c}s and was terminated (${b??"exited"})]`.trim()});n({status:0===a?"passed":"failed",exitCode:a,logTail:i.toString()||null})})})})(a.command,c,a.timeoutSec,q));C.push(b.status)}return C.some(a=>"failed"===a||"timeout"===a||"error"===a)?"failed":C.some(a=>"skipped"===a)?"error":"passed"}function K(a,b,c,d){try{(0,l.g)(a,b,c,void 0===d?void 0:{runId:d})}catch(a){y.warn("task-transition-failed",{taskId:b,event:c,error:a instanceof Error?a.message:String(a)})}}async function L(a){let b=(0,f.getDbInstance)(),c=(0,g.getRunningVerificationRun)(b,a.worktreeId);if(c)throw new B(a.worktreeId,c.id);let d=void 0!==a.taskId?(0,g.getTask)(b,a.taskId):(0,h.Zj)(b,a.worktreeId),e=function(a,b,c){if(null!==c||void 0!==b.taskId)return null;let[d]=(0,g.listTasks)(a,b.worktreeId,1);return d&&"pending"!==d.status&&d.contract.success.requireScopeClean?d:null}(b,a,d),i=a.taskId??d?.id??null,j=a.gateIds??(d?(0,k.Ky)(d.contract)??void 0:void 0),l=null,o=null;try{(l=(0,x.yR)(a.worktreePath))||(o=`${x.aT} not found in ${a.worktreePath}. Declare the repository verification gates there before running verification.`)}catch(a){o=a instanceof x.Yp?a.message:`Failed to read ${x.aT}: ${a.message}`}let p=(0,m.Uq)(d?.contract??null,l),q=null;if(l&&!o){let a=function(a,b){let c=a.gates.map(a=>({...a,source:"verify.yaml"})),d=new Set(c.map(a=>a.id)),e=b.filter(a=>d.has(a.id)).map(a=>a.id);return e.length>0?`Contract gate id(s) ${e.join(", ")} are already declared in ${x.aT}. A contract may add gates, never redefine the repository's own.`:[...c,...b.map(a=>({...a,source:"contract"}))]}(l,d?(0,k.cI)(d.contract):[]);if("string"==typeof a)o=a;else{let b=function(a,b,c){if(!b)return{runWorkEvidence:!0,scope:"implicit",runEnvClean:c,gates:a};let d=new Set([x.uz,x.le,x.Q5,...a.map(a=>a.id)]),e=b.filter(a=>!d.has(a));if(e.length>0)return`Unknown gate id(s): ${e.join(", ")}. Declared gates: ${[...d].join(", ")}.`;let f=new Set(b),g={runWorkEvidence:f.has(x.uz),scope:f.has(x.le)?"explicit":"off",runEnvClean:f.has(x.Q5)||c,gates:a.filter(a=>f.has(a.id))};return g.runWorkEvidence||"off"!==g.scope||g.runEnvClean||0!==g.gates.length?g:"gateIds selected no gates; a run with no gates has nothing to report."}(a,j,p.required);"string"==typeof b?o=b:q=b}}let r=l?await I(l,a.worktreePath):null,s=(0,g.createVerificationRun)(b,{worktreeId:a.worktreeId,trigger:a.trigger,instanceId:a.instanceId??null,taskId:i,baseRef:r});if(!l||!q){let c=Date.now(),e=(0,g.createGateResult)(b,s.id,{gateId:"config",command:x.aT,source:"builtin"});return(0,g.finishGateResult)(b,e.id,{status:"error",exitCode:null,durationMs:0,logTail:o,executionWindow:{startedAt:c,finishedAt:c}}),(0,g.finishVerificationRun)(b,s.id,"error"),y.warn("verification-config-unusable",{runId:s.id,worktreeId:a.worktreeId}),d&&(K(b,d.id,"verify_started",s.id),K(b,d.id,"verify_failed",s.id)),{runId:s.id}}d&&K(b,d.id,"verify_started",s.id);let t=l,u=q,v={worktreeId:a.worktreeId,taskId:i,baseline:u.runEnvClean&&i?(0,n.g9)(i):null,decision:p},w=(async()=>{await (C<2?(C+=1,Promise.resolve()):new Promise(a=>{D.push(a)}));let c="error";try{let f=await J(b,s.id,a.worktreePath,t,u,r,d,e,v);return c=f,(0,g.finishVerificationRun)(b,s.id,f),f}catch(a){y.error("verification-run-crashed",{runId:s.id,error:a instanceof Error?a.message:String(a)});try{(0,g.finishVerificationRun)(b,s.id,"error")}catch{}return"error"}finally{d&&K(b,d.id,function(a){switch(a){case"passed":return"verify_passed";case"not_started":return"verify_not_started";case"cancelled":return"cancel";default:return"verify_failed"}}(c),s.id),function(){let a=D.shift();if(a)return a();C-=1}(),E.delete(s.id)}})();return E.set(s.id,w),{runId:s.id}}}};
13
+ No commits and no uncommitted changes: nothing to verify.`,1)}async function W(a,b){if(a.options.baseRef)return a.options.baseRef;let c=await (0,i.tR)(b);return c?`origin/${c}`:null}async function X(a,b,c,d,f,h,i,j,l,n){var o,q;let{maxLogTailBytes:r,skipInPrimaryCheckout:s}=f.options,{runWorkEvidence:t,gates:u}=h,v=(0,k.fc)(j?.contract??null,f),w=null,x=()=>w??={CM_WORKTREE_ID:c,CM_WORKTREE_INDEX:String((0,p.Cr)(c))},y=(b,c)=>((0,g.finishGateResult)(a,b,{status:c.status,exitCode:c.exitCode,durationMs:c.durationMs,logTail:c.logTail,executionWindow:{startedAt:c.startedAt,finishedAt:c.startedAt+c.durationMs}}),c),z=async(c,d,e,f)=>y((0,g.createGateResult)(a,b,{gateId:c,command:d,source:e}).id,await f()),A=(c,d,e,f)=>{let h={status:"skipped",exitCode:null,startedAt:Date.now(),durationMs:0,logTail:f};return y((0,g.createGateResult)(a,b,{gateId:c,command:d,source:e}).id,h)},D=[];if(t){let a=await z(C.uz,"git merge-base / rev-list / status --porcelain (excluding contract files)","builtin",()=>V(d,i,v));if("passed"!==a.status){let b=`skipped: the ${C.uz} gate did not pass.`;for(let a of("off"!==h.scope&&A(C.le,E,"builtin",b),h.runEnvClean&&A(C.Q5,F,"builtin",b),u))A(a.id,a.command,a.source,b);return"failed"===a.status?"not_started":"error"}D.push(a.status)}if("off"!==h.scope){let a=l?A(C.le,E,"builtin",(o=l.id,q=l.status,`scope: task ${o} declares a scope for this worktree, but it is ${q} and this run was not attached to it, so its scope was NOT judged. Name the task when starting the run (\`wait --verify\` does this automatically).`)):await z(C.le,E,"builtin",()=>B(d,j?.contract.scope??null,j?.contract.success.requireScopeClean??!1,i,j?.contractPath??null)),b="explicit"===h.scope||null!==l;("skipped"!==a.status||b)&&D.push(a.status)}if(h.runEnvClean){let a=await z(C.Q5,F,"builtin",()=>(0,m.uT)({worktreeId:n.worktreeId,worktreePath:d,taskId:n.taskId,baseline:n.baseline,sources:n.decision.sources}));D.push(a.status)}let G=s&&function(a,b){try{return(0,e.realpathSync)(a)===(0,e.realpathSync)(b)}catch{return!1}}(d,process.cwd());for(let a of u){if(G){D.push(A(a.id,a.command,a.source,"skipped: worktreePath is the server process working directory and options.skipInPrimaryCheckout is true.").status);continue}let b=await z(a.id,a.command,a.source,()=>S(a,d,r,x()));D.push(b.status)}return D.some(a=>"failed"===a||"timeout"===a||"error"===a)?"failed":D.some(a=>"skipped"===a)?"error":"passed"}function Y(a,b,c,d){try{(0,l.g)(a,b,c,void 0===d?void 0:{runId:d})}catch(a){D.warn("task-transition-failed",{taskId:b,event:c,error:a instanceof Error?a.message:String(a)})}}async function Z(a){let b=(0,f.getDbInstance)(),c=(0,g.getRunningVerificationRun)(b,a.worktreeId);if(c)throw new L(a.worktreeId,c.id);let d=void 0!==a.taskId?(0,g.getTask)(b,a.taskId):(0,h.Zj)(b,a.worktreeId),e=function(a,b,c){if(null!==c||void 0!==b.taskId)return null;let[d]=(0,g.listTasks)(a,b.worktreeId,1);return d&&"pending"!==d.status&&d.contract.success.requireScopeClean?d:null}(b,a,d),i=a.taskId??d?.id??null,j=a.gateIds??(d?(0,k.Ky)(d.contract)??void 0:void 0),l=null,o=null;try{(l=(0,C.yR)(a.worktreePath))||(o=`${C.aT} not found in ${a.worktreePath}. Declare the repository verification gates there before running verification.`)}catch(a){o=a instanceof C.Yp?a.message:`Failed to read ${C.aT}: ${a.message}`}let p=(0,m.Uq)(d?.contract??null,l),q=null;if(l&&!o){let a=function(a,b){let c=a.gates.map(a=>({...a,source:"verify.yaml"})),d=new Set(c.map(a=>a.id)),e=b.filter(a=>d.has(a.id)).map(a=>a.id);return e.length>0?`Contract gate id(s) ${e.join(", ")} are already declared in ${C.aT}. A contract may add gates, never redefine the repository's own.`:[...c,...b.map(a=>({...a,source:"contract"}))]}(l,d?(0,k.cI)(d.contract):[]);if("string"==typeof a)o=a;else{let b=function(a,b,c){if(!b)return{runWorkEvidence:!0,scope:"implicit",runEnvClean:c,gates:a};let d=new Set([C.uz,C.le,C.Q5,...a.map(a=>a.id)]),e=b.filter(a=>!d.has(a));if(e.length>0)return`Unknown gate id(s): ${e.join(", ")}. Declared gates: ${[...d].join(", ")}.`;let f=new Set(b),g={runWorkEvidence:f.has(C.uz),scope:f.has(C.le)?"explicit":"off",runEnvClean:f.has(C.Q5)||c,gates:a.filter(a=>f.has(a.id))};return g.runWorkEvidence||"off"!==g.scope||g.runEnvClean||0!==g.gates.length?g:"gateIds selected no gates; a run with no gates has nothing to report."}(a,j,p.required);"string"==typeof b?o=b:q=b}}let r=l?await W(l,a.worktreePath):null,s=(0,g.createVerificationRun)(b,{worktreeId:a.worktreeId,trigger:a.trigger,instanceId:a.instanceId??null,taskId:i,baseRef:r});if(!l||!q){let c=Date.now(),e=(0,g.createGateResult)(b,s.id,{gateId:"config",command:C.aT,source:"builtin"});return(0,g.finishGateResult)(b,e.id,{status:"error",exitCode:null,durationMs:0,logTail:o,executionWindow:{startedAt:c,finishedAt:c}}),(0,g.finishVerificationRun)(b,s.id,"error"),D.warn("verification-config-unusable",{runId:s.id,worktreeId:a.worktreeId}),d&&(Y(b,d.id,"verify_started",s.id),Y(b,d.id,"verify_failed",s.id)),{runId:s.id}}d&&Y(b,d.id,"verify_started",s.id);let t=l,u=q,v={worktreeId:a.worktreeId,taskId:i,baseline:u.runEnvClean&&i?(0,n.g9)(i):null,decision:p},w=(async()=>{await (M<2?(M+=1,Promise.resolve()):new Promise(a=>{N.push(a)}));let c="error";try{let f=await X(b,s.id,a.worktreeId,a.worktreePath,t,u,r,d,e,v);return c=f,(0,g.finishVerificationRun)(b,s.id,f),f}catch(a){D.error("verification-run-crashed",{runId:s.id,error:a instanceof Error?a.message:String(a)});try{(0,g.finishVerificationRun)(b,s.id,"error")}catch{}return"error"}finally{d&&Y(b,d.id,function(a){switch(a){case"passed":return"verify_passed";case"not_started":return"verify_not_started";case"cancelled":return"cancel";default:return"verify_failed"}}(c),s.id),function(){let a=N.shift();if(a)return a();M-=1}(),O.delete(s.id)}})();return O.set(s.id,w),{runId:s.id}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=6285,exports.ids=[6285],exports.modules={26285:a=>{a.exports=JSON.parse('{"title":"スケジュール","executionLogs":"実行ログ","tabs":{"schedules":"スケジュール","logs":"ログ"},"emptyState":{"title":"スケジュールはまだありません","description":"cron スケジュールでエージェントを自動実行します。","createButton":"新規スケジュール作成","manualToggle":"または CMATE.md を直接編集"},"noSchedules":"スケジュールが設定されていません。CMATE.mdにSchedulesセクションを追加してください。","noSchedulesTitle":"スケジュールが設定されていません","noSchedulesStep1":"Files タブに切り替えてください","noSchedulesStep2":"ツールバーの CMATE ボタンをクリックして CMATE.md を作成","noSchedulesStep3":"Schedules テーブルを編集(Name, Cron, Message, CLI Tool, Enabled, Permission)","noSchedulesStep4":"再度 CMATE をクリックしてバリデーション","noLogs":"実行ログはまだありません。","status":{"running":"実行中","completed":"完了","failed":"失敗","timeout":"タイムアウト","cancelled":"キャンセル"},"enabled":"有効","disabled":"無効","activeSchedulesTitle":"Active Schedules","activeSchedulesDescription":"DB設定ではなく、現在メモリ上で登録されている cron state です。","noActiveSchedules":"現在メモリ上で登録されている schedule はありません。","nextRun":"次回実行","agentLabel":"Agent","activeState":{"active":"稼働中","inactive":"停止","executing":"実行中"},"lastRun":"最終実行","cron":"Cron式","exitCode":"終了コード","noOutput":"(出力なし)","message":"メッセージ","response":"レスポンス","unknownSchedule":"(削除済みスケジュール)","retry":"再試行","loading":"読み込み中...","notes":"メモ","logs":"Schedules","notesAndLogs":"CMATE","agentTab":"Agent","agentSettings":"エージェント設定","selectAgents":"ターミナルヘッダーのタブに表示するエージェントを2つ選択してください。","agentSaveSuccess":"エージェント設定を保存しました。","agentSaveError":"エージェント設定の保存に失敗しました。","agentInstances":"エージェントインスタンス","agentInstancesDescription":"ターミナルヘッダーのタブに表示するエージェントを管理します。同じツールのインスタンスを複数追加し、それぞれに別名を付けられます。","agentInstanceAliasLabel":"別名","agentInstanceAliasPlaceholder":"表示名","agentInstanceBaseTool":"ベースツール","agentInstanceAdd":"インスタンスを追加","agentInstanceDelete":"インスタンスを削除","agentInstanceMoveUp":"上へ移動","agentInstanceMoveDown":"下へ移動","agentInstanceActions":"インスタンス操作","memoMoveUp":"上へ移動","memoMoveDown":"下へ移動","agentInstanceMax":"インスタンスは最大{max}個まで追加できます。","agentInstanceMin":"インスタンスは最低{min}個必要です。","agentInstanceSaveError":"エージェントインスタンスの保存に失敗しました。","mobileVisibleInstances":"この端末に表示","mobileVisibleInstancesDescription":"この端末でタブとして表示するインスタンスを選択します。この選択は端末ごとに保存され、共有のインスタンス一覧は変更されません。","mobileVisibleInstanceMin":"この端末には最低1つのインスタンスを表示しておく必要があります。","vibeLocalModel":"Ollamaモデル","vibeLocalModelDefault":"デフォルト","vibeLocalContextWindow":"コンテキストウィンドウ","vibeLocalContextWindowDefault":"デフォルト(自動)","ollamaNotAvailable":"Ollamaが起動していません。モデルを選択するにはOllamaを起動してください。","cmateCreated":"CMATE.mdをテンプレートで作成しました。スケジュールを設定してください。","cmateValidation":{"noSchedulesSection":"CMATE.mdにSchedulesセクションがありません。","valid":"{count}件のスケジュールが正常に検証されました。","errors":"{errorCount}件の検証エラー: {details}","failed":"CMATE.mdの処理に失敗しました。"},"edit":{"newSchedule":"新規スケジュール","titleCreate":"新規スケジュール","titleEdit":"スケジュールの編集","sectionBasic":"基本情報","sectionAdvanced":"詳細設定","sectionMessage":"メッセージ","name":"名前","namePlaceholder":"daily-review","cron":"Cron式","cronPlaceholder":"0 9 * * *","cronPreset":"プリセット","cronPresetHourly":"毎時 (0 */1 * * *)","cronPresetDaily9":"毎日9時 (0 9 * * *)","cronPresetWeeklyMon9":"毎週月曜9時 (0 9 * * 1)","cronPresetCustom":"カスタム","askAiCron":"AIに相談","askAiMessage":"AIに下書きを依頼","askAiHint":"AIチャットにプロンプトを下書きします(自動送信はされません)","aiPrompts":{"cron":"スケジュール実行のタイミングを cron 式で表現したいです。自然言語の要望(例: 「毎週月曜 9 時」)を cron 式に変換し、候補をいくつか提案してください(例: 「毎週月曜 9 時」→ `0 9 * * 1`)。","cronRefine":"スケジュール実行のタイミングを cron 式で表現したいです。現在の入力は {current} です。これを踏まえて、自然言語の要望(例: 「毎週月曜 9 時」)を cron 式に変換し、候補をいくつか提案してください(例: 「毎週月曜 9 時」→ `0 9 * * 1`)。","messageDraft":"このスケジュールで CLI ツールに定期実行させる message(指示プロンプト)を作成したいです。まず用途を私に聞き取り、それを踏まえた message の内容を提案してください。","messageDraftNamed":"スケジュール {name} で CLI ツールに定期実行させる message(指示プロンプト)を作成したいです。まず用途を私に聞き取り、それを踏まえた message の内容を提案してください。"},"cliTool":"CLIツール","model":"モデル","modelPlaceholder":"gpt-4.1","permission":"権限","message":"メッセージ","messagePlaceholder":"README.mdを要約してください","charCount":"{count} / {max}","enabledLabel":"有効","save":"保存","cancel":"キャンセル","edit":"編集","delete":"削除","enable":"有効化","disable":"無効化","confirmDelete":"スケジュール「{name}」を削除しますか?","saveError":"スケジュールの保存に失敗しました。","errorNameRequired":"名前は必須です。","errorNameTooLong":"名前は{max}文字以内で入力してください。","errorNameInvalid":"名前に使用できない文字が含まれています。","errorCronInvalid":"Cron式が不正です。","errorMessageRequired":"メッセージは必須です。","errorMessageTooLong":"メッセージは{max}文字以内で入力してください。","errorModelInvalid":"モデル名が不正です。"},"timerTab":"Timer","todoTab":"ToDo","skillsTab":"Skills","timer":{"title":"遅延メッセージ","titleCreate":"タイマー作成","createButton":"タイマー作成","newTimer":"新規タイマー","close":"キャンセル","agent":"エージェント","message":"メッセージ","delay":"送信タイミング","register":"タイマー登録","cancel":"キャンセル","noTimers":"タイマーは登録されていません。","maxReached":"ワークツリーあたり最大{max}件です。","registerSuccess":"タイマーを登録しました。","registerError":"タイマーの登録に失敗しました。","cancelSuccess":"タイマーをキャンセルしました。","cancelError":"タイマーのキャンセルに失敗しました。","status":{"pending":"待機中","sending":"送信中","sent":"送信済み","failed":"失敗","cancelled":"キャンセル済み","no_session":"セッション未起動"},"sessionWarning":"セッションが起動していません。タイマー実行時にセッションが起動していない場合、メッセージは送信されません。","minutesShort":"{minutes}分","hoursMinutesShort":"{hours}時間{minutes}分","loadMore":"もっと見る","clearHistory":"履歴クリア","clearConfirm":"送信済み・失敗・キャンセル済みのタイマー履歴をすべて削除しますか?","cleared":"履歴を削除しました({count}件)","detailTitle":"タイマー詳細","statusLabel":"ステータス","scheduledTime":"予定送信時刻","createdTime":"作成時刻","sentTime":"送信時刻","failureReason":"失敗理由"},"memoAdd":"メモを追加","memoRemaining":"残り {count} 件","memoDefaultTitle":"メモ","memoTitlePlaceholder":"メモのタイトル","memoInsertToMessage":"メッセージに挿入","memoCopyContent":"メモの内容をコピー","memoDelete":"メモを削除","memoContentPlaceholder":"メモの内容を入力...","memoLoading":"メモを読み込み中...","memoSearchToggle":"メモを検索","memoEmpty":"メモはまだありません。","memoEmptyHint":"下のボタンから追加できます。","memoNoMatch":"検索条件に一致するメモがありません。","memoSearchLabel":"メモ検索","memoSearchPlaceholder":"検索...","memoSearchInputLabel":"メモを検索","memoSearchPrev":"前の一致(前へ)","memoSearchNext":"次の一致(次へ)","memoSearchClose":"検索を閉じる(閉じる)"}')}};
1
+ "use strict";exports.id=6285,exports.ids=[6285],exports.modules={26285:a=>{a.exports=JSON.parse('{"title":"スケジュール","executionLogs":"実行ログ","tabs":{"schedules":"スケジュール","logs":"ログ"},"emptyState":{"title":"スケジュールはまだありません","description":"cron スケジュールでエージェントを自動実行します。","createButton":"新規スケジュール作成","manualToggle":"または CMATE.md を直接編集"},"noSchedules":"スケジュールが設定されていません。CMATE.mdにSchedulesセクションを追加してください。","noSchedulesTitle":"スケジュールが設定されていません","noSchedulesStep1":"Files タブに切り替えてください","noSchedulesStep2":"ツールバーの CMATE ボタンをクリックして CMATE.md を作成","noSchedulesStep3":"Schedules テーブルを編集(Name, Cron, Message, CLI Tool, Enabled, Permission)","noSchedulesStep4":"再度 CMATE をクリックしてバリデーション","noLogs":"実行ログはまだありません。","status":{"running":"実行中","completed":"完了","failed":"失敗","timeout":"タイムアウト","cancelled":"キャンセル"},"enabled":"有効","disabled":"無効","activeSchedulesTitle":"Active Schedules","activeSchedulesDescription":"DB設定ではなく、現在メモリ上で登録されている cron state です。","noActiveSchedules":"現在メモリ上で登録されている schedule はありません。","nextRun":"次回実行","agentLabel":"Agent","activeState":{"active":"稼働中","inactive":"停止","executing":"実行中"},"lastRun":"最終実行","cron":"Cron式","exitCode":"終了コード","noOutput":"(出力なし)","message":"メッセージ","response":"レスポンス","unknownSchedule":"(削除済みスケジュール)","retry":"再試行","loading":"読み込み中...","notes":"メモ","logs":"Schedules","notesAndLogs":"CMATE","agentTab":"Agent","agentSettings":"エージェント設定","selectAgents":"ターミナルヘッダーのタブに表示するエージェントを2つ選択してください。","agentSaveSuccess":"エージェント設定を保存しました。","agentSaveError":"エージェント設定の保存に失敗しました。","agentInstances":"エージェントインスタンス","agentInstancesDescription":"ターミナルヘッダーのタブに表示するエージェントを管理します。同じツールのインスタンスを複数追加し、それぞれに別名を付けられます。","agentInstanceAliasLabel":"別名","agentInstanceAliasPlaceholder":"表示名","agentInstanceBaseTool":"ベースツール","agentInstanceAdd":"インスタンスを追加","agentInstanceDelete":"インスタンスを削除","agentInstanceMoveUp":"上へ移動","agentInstanceMoveDown":"下へ移動","agentInstanceActions":"インスタンス操作","memoMoveUp":"上へ移動","memoMoveDown":"下へ移動","agentInstanceMax":"インスタンスは最大{max}個まで追加できます。","agentInstanceMin":"インスタンスは最低{min}個必要です。","agentInstanceSaveError":"エージェントインスタンスの保存に失敗しました。","mobileVisibleInstances":"この端末に表示","mobileVisibleInstancesDescription":"この端末でタブとして表示するインスタンスを選択します。この選択は端末ごとに保存され、共有のインスタンス一覧は変更されません。","mobileVisibleInstanceMin":"この端末には最低1つのインスタンスを表示しておく必要があります。","vibeLocalModel":"Ollamaモデル","vibeLocalModelDefault":"デフォルト","vibeLocalContextWindow":"コンテキストウィンドウ","vibeLocalContextWindowDefault":"デフォルト(自動)","ollamaNotAvailable":"Ollamaが起動していません。モデルを選択するにはOllamaを起動してください。","cmateCreated":"CMATE.mdをテンプレートで作成しました。スケジュールを設定してください。","cmateValidation":{"noSchedulesSection":"CMATE.mdにSchedulesセクションがありません。","valid":"{count}件のスケジュールが正常に検証されました。","errors":"{errorCount}件の検証エラー: {details}","failed":"CMATE.mdの処理に失敗しました。"},"edit":{"newSchedule":"新規スケジュール","titleCreate":"新規スケジュール","titleEdit":"スケジュールの編集","sectionBasic":"基本情報","sectionAdvanced":"詳細設定","sectionMessage":"メッセージ","name":"名前","namePlaceholder":"daily-review","cron":"Cron式","cronPlaceholder":"0 9 * * *","cronPreset":"プリセット","cronPresetHourly":"毎時 (0 */1 * * *)","cronPresetDaily9":"毎日9時 (0 9 * * *)","cronPresetWeeklyMon9":"毎週月曜9時 (0 9 * * 1)","cronPresetCustom":"カスタム","askAiCron":"AIに相談","askAiMessage":"AIに下書きを依頼","askAiHint":"AIチャットにプロンプトを下書きします(自動送信はされません)","aiPrompts":{"cron":"スケジュール実行のタイミングを cron 式で表現したいです。自然言語の要望(例: 「毎週月曜 9 時」)を cron 式に変換し、候補をいくつか提案してください(例: 「毎週月曜 9 時」→ `0 9 * * 1`)。","cronRefine":"スケジュール実行のタイミングを cron 式で表現したいです。現在の入力は {current} です。これを踏まえて、自然言語の要望(例: 「毎週月曜 9 時」)を cron 式に変換し、候補をいくつか提案してください(例: 「毎週月曜 9 時」→ `0 9 * * 1`)。","messageDraft":"このスケジュールで CLI ツールに定期実行させる message(指示プロンプト)を作成したいです。まず用途を私に聞き取り、それを踏まえた message の内容を提案してください。","messageDraftNamed":"スケジュール {name} で CLI ツールに定期実行させる message(指示プロンプト)を作成したいです。まず用途を私に聞き取り、それを踏まえた message の内容を提案してください。"},"cliTool":"CLIツール","model":"モデル","modelPlaceholder":"gpt-4.1","permission":"権限","message":"メッセージ","messagePlaceholder":"README.mdを要約してください","charCount":"{count} / {max}","enabledLabel":"有効","save":"保存","cancel":"キャンセル","edit":"編集","delete":"削除","enable":"有効化","disable":"無効化","confirmDelete":"スケジュール「{name}」を削除しますか?","saveError":"スケジュールの保存に失敗しました。","errorNameRequired":"名前は必須です。","errorNameTooLong":"名前は{max}文字以内で入力してください。","errorNameInvalid":"名前に使用できない文字が含まれています。","errorCronInvalid":"Cron式が不正です。","errorMessageRequired":"メッセージは必須です。","errorMessageTooLong":"メッセージは{max}文字以内で入力してください。","errorModelInvalid":"モデル名が不正です。"},"timerTab":"Timer","todoTab":"ToDo","skillsTab":"Skills","verificationTab":"検証","timer":{"title":"遅延メッセージ","titleCreate":"タイマー作成","createButton":"タイマー作成","newTimer":"新規タイマー","close":"キャンセル","agent":"エージェント","message":"メッセージ","delay":"送信タイミング","register":"タイマー登録","cancel":"キャンセル","noTimers":"タイマーは登録されていません。","maxReached":"ワークツリーあたり最大{max}件です。","registerSuccess":"タイマーを登録しました。","registerError":"タイマーの登録に失敗しました。","cancelSuccess":"タイマーをキャンセルしました。","cancelError":"タイマーのキャンセルに失敗しました。","status":{"pending":"待機中","sending":"送信中","sent":"送信済み","failed":"失敗","cancelled":"キャンセル済み","no_session":"セッション未起動"},"sessionWarning":"セッションが起動していません。タイマー実行時にセッションが起動していない場合、メッセージは送信されません。","minutesShort":"{minutes}分","hoursMinutesShort":"{hours}時間{minutes}分","loadMore":"もっと見る","clearHistory":"履歴クリア","clearConfirm":"送信済み・失敗・キャンセル済みのタイマー履歴をすべて削除しますか?","cleared":"履歴を削除しました({count}件)","detailTitle":"タイマー詳細","statusLabel":"ステータス","scheduledTime":"予定送信時刻","createdTime":"作成時刻","sentTime":"送信時刻","failureReason":"失敗理由"},"memoAdd":"メモを追加","memoRemaining":"残り {count} 件","memoDefaultTitle":"メモ","memoTitlePlaceholder":"メモのタイトル","memoInsertToMessage":"メッセージに挿入","memoCopyContent":"メモの内容をコピー","memoDelete":"メモを削除","memoContentPlaceholder":"メモの内容を入力...","memoLoading":"メモを読み込み中...","memoSearchToggle":"メモを検索","memoEmpty":"メモはまだありません。","memoEmptyHint":"下のボタンから追加できます。","memoNoMatch":"検索条件に一致するメモがありません。","memoSearchLabel":"メモ検索","memoSearchPlaceholder":"検索...","memoSearchInputLabel":"メモを検索","memoSearchPrev":"前の一致(前へ)","memoSearchNext":"次の一致(次へ)","memoSearchClose":"検索を閉じる(閉じる)"}')}};
@@ -1,6 +1,6 @@
1
- "use strict";exports.id=7458,exports.ids=[7458],exports.modules={1367:(a,b,c)=>{c.d(b,{VM:()=>ad});var d=c(2466),e=c(13287),f=c(62887),g=c(43252),h=c(66101),i=c(57510),j=c(38367),k=c(70997);let l={};function m(a){return"allowOnce"!==a.kind?l:{hookSpecificOutput:{hookEventName:e.l9,decision:{behavior:"allow"}}}}let n=(0,h.U)({cliToolId:k.v,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:f.b0,configScope:"per-instance",decisionTimeoutSeconds:g.sI},mappers:(0,i.mJ)(j.WK),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:j.ue,modelFields:["model"],extractDetail:j.Jp,parsePermissionRequest:a=>(0,e.ss)(a),parseQuestion:a=>(0,d.ek)(a),encodeVerdict:m,prepareLaunch:(a,b)=>{let c=(0,g.D2)(b,{worktreeId:a.worktreeId,instanceId:a.instanceId,cliToolId:a.cliToolId}),d=(0,g.q)()&&c!==b?(0,g.iR)({worktreeId:a.worktreeId,instanceId:a.instanceId,cliToolId:a.cliToolId}):null;return{command:c,settingsPath:d}}});var o=c(21758),p=c(54633);let q={},r=(0,h.U)({cliToolId:p.V,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:["stop","session_start","session_end","user_prompt_submit","post_tool_use"],configScope:"global-singleton",decisionTimeoutSeconds:o.TV},mappers:(0,i.mJ)(j.WK),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:j.ue,extractDetail:j.Jp,parsePermissionRequest:function(a){if(!(0,i.Qd)(a)||a.hook_event_name!==o.cN)return null;let b=(0,i.O2)(a,"tool_name");return b&&!(b.length>e.vy)&&(0,i.Qd)(a.tool_input)?{toolName:b,toolInput:a.tool_input,promptId:null,sessionId:(0,i.O2)(a,"session_id"),permissionMode:null,permissionSuggestions:null}:null},parseQuestion:()=>null,encodeVerdict:function(a){return"allowOnce"===a.kind?{hookSpecificOutput:{hookEventName:o.cN,permissionDecision:"allow"}}:"deny"===a.kind?{hookSpecificOutput:{hookEventName:o.cN,permissionDecision:"deny",permissionDecisionReason:a.message??"denied by CommandMate"}}:q},prepareLaunch:(a,b)=>(0,o.Rv)(b,a)});var s=c(69935),t=c(21820),u=c(33873),v=c(15194),w=c(72626),x=c(46171),y=c(76835);let z=(0,w.h)("lib/hooks/sources/antigravity/hooks-config"),A=[["SessionStart","session_start"],["PostToolUse","post_tool_use"],["Stop","stop"]],B="CM_PERMISSION_HOOK_URL",C=g.sI,D=new Set(["PreToolUse","PostToolUse"]),E={decision:"ask"},F=(0,h.U)({cliToolId:y.F,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:["session_start","post_tool_use","stop"],configScope:"global-singleton",decisionTimeoutSeconds:C},mappers:[],nativeEventNameFields:[],conversationIdFields:["conversationId"],toolCallIdFields:[],modelFields:["modelName"],extractDetail:(a,b)=>"pre_tool_use"===a||"post_tool_use"===a?(0,i.Wv)((0,i.NZ)(b,["toolCall","name"])):null,parsePermissionRequest:function(a){if(!(0,i.Qd)(a))return null;let b=a.toolCall;if(!(0,i.Qd)(b))return null;let c=(0,i.O2)(b,"name");return c&&!(c.length>e.vy)&&(0,i.Qd)(b.args)?{toolName:c,toolInput:b.args,promptId:null,sessionId:(0,i.O2)(a,"conversationId"),permissionMode:null,permissionSuggestions:null}:null},parseQuestion:()=>null,encodeVerdict:function(a){return"allowOnce"===a.kind?{decision:"allow"}:"deny"===a.kind?{decision:"deny",reason:a.message??""}:{...E}},prepareLaunch:(a,b)=>{let c=function(a={}){if(!(0,g.q)())return null;let b=(0,g.Os)();if(!b)return z.warn("antigravity-hook-relay-missing"),null;let c=function(a={}){return a.path??(0,u.join)((0,t.homedir)(),".gemini","config","hooks.json")}(a);try{var d;let a=(0,x.U)(c);return(0,x.P)(c,(d=function(a){let b={};for(let[c,d]of A){let e={type:"command",command:[(0,g.ZL)(a),"--tool",y.F,"--event",d,"--stdin-json"].join(" "),timeout:g.W6};b[c]=D.has(c)?[{matcher:"*",hooks:[e]}]:[e]}return b.PreToolUse=[{matcher:"*",hooks:[{type:"command",command:function(){let a=`"$${B}"`,b=`printf '%s' ${(0,g.ZL)('{"decision":"ask"}')}`;return`if [ -z "\${${B}:-}" ]; then cat >/dev/null; ${b}; exit 0; fi; set -- -sS -f -m 4 -X POST -H 'Content-Type: application/json'; if [ -n "\${${g.XE}:-}" ]; then set -- "$@" -H "Authorization: Bearer $${g.XE}"; fi; out=$(curl "$@" --data-binary @- ${a} 2>/dev/null); case "$out" in '{'*'"decision"'*) printf '%s' "$out" ;; *) ${b} ;; esac`}(),timeout:g.sI}]}],b}(b),{...a,commandmate:d})),c}catch(a){return z.warn("antigravity-hooks-config-write-failed",{error:a instanceof Error?a.message:String(a)}),null}}();return{command:function(a,b,c={}){if(!(0,g.q)())return a;if(!(0,v.n6)((0,g.g5)(b)))return z.warn("antigravity-hook-invalid-instance-id",{worktreeId:b.worktreeId}),a;let d={...b,cliToolId:y.F},e=(0,g.xM)(d,c),f=(0,g.O$)(d,c);return`CM_HOOK_URL=${(0,g.ZL)(e)} ${B}=${(0,g.ZL)(f)} ${(0,g.ZL)(a)}`}(b,{worktreeId:a.worktreeId,instanceId:a.instanceId,cliToolId:y.F}),settingsPath:c}}});var G=c(29021),H=c(8004),I=c(87447),J=c(66007),K=c(2734);let L=(0,w.h)("lib/hooks/sources/codex/hooks-config"),M="127.0.0.1",N="commandmate:agent-hooks",O="CODEX_HOME",P="CM_AGENT_WORKTREE_ID",Q="CM_AGENT_INSTANCE_ID",R="CM_HOOK_URL",S="CM_PERMISSION_HOOK_URL",T={SessionStart:"session_start",UserPromptSubmit:"user_prompt_submit",Stop:"stop",SessionEnd:"session_end"},U="PermissionRequest",V=Object.values(T);function W(a={}){let b=(0,u.join)((0,t.homedir)(),".codex");return a.codexHome?(0,H.T)(a.codexHome,b,"CodexHookOptions.codexHome"):(0,H.T)(process.env[O],b,O)}function X(a={}){return(0,u.join)(W(a),"hooks.json")}function Y(a,b){return`http://${M}:\${CM_PORT:-3000}${a}${b}`}let Z={},$=(0,h.U)({cliToolId:K.c,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:V,configScope:"global-singleton",decisionTimeoutSeconds:5},mappers:(0,i.mJ)(j.WK),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:j.ue,modelFields:["model"],extractDetail:j.Jp,parsePermissionRequest:a=>(0,e.ss)(a),parseQuestion:()=>null,encodeVerdict:function(a){return"allowOnce"===a.kind?{hookSpecificOutput:{hookEventName:U,decision:{behavior:"allow"}}}:"deny"===a.kind?{hookSpecificOutput:{hookEventName:U,decision:{behavior:"deny",message:a.message??""}}}:Z},prepareLaunch:(a,b)=>{let c=function(a,b,c={}){if(!(0,g.q)())return a;let d=b.instanceId??K.c;if(!(0,J.h6)(b.worktreeId)||!(0,v.n6)(d))return L.warn("codex-hooks-invalid-correlation-key",{worktreeId:b.worktreeId}),a;try{if(!function(a={}){let b=X(a),c=null,d=null;if((0,G.existsSync)(b))try{d=(0,G.readFileSync)(b,"utf8"),c=JSON.parse(d)}catch(a){return L.warn("codex-hooks-config-unreadable",{settingsPath:b,error:a instanceof Error?a.message:String(a)}),null}let e=`${JSON.stringify(function(a,b){let c=(0,i.Qd)(a)?{...a}:{},d=(0,i.Qd)(c.hooks)?c.hooks:{},e={};for(let[a,b]of Object.entries(d))e[a]=Array.isArray(b)?b.map(a=>{if(!(0,i.Qd)(a)||!Array.isArray(a.hooks))return a;let b=a.hooks.filter(a=>!((0,i.Qd)(a)&&"string"==typeof a.command&&a.command.includes(N)));return b.length===a.hooks.length?a:{...a,hooks:b}}).filter(a=>!((0,i.Qd)(a)&&Array.isArray(a.hooks))||a.hooks.length>0):b;for(let[a,c]of Object.entries(b.hooks)){let b=e[a];(void 0===b||Array.isArray(b))&&(e[a]=[...b??[],...c])}return c.hooks=e,c}(c,function(a={}){let b=(b,c)=>({hooks:[{type:"command",command:function(a,b={}){let c=` # ${N}`,d=void 0===b.relayScriptPath?(0,g.Os)():b.relayScriptPath;if(d)return[(0,g.ZL)(d),"--tool",K.c,"--event",a,"--worktree-id",`"$${P}"`,"--instance-id",`"$${Q}"`,"--stdin-json"].join(" ")+c;let e=b.withAuthHeader??(0,g.yc)()?` -H "Authorization: Bearer $${g.XE}"`:"",f=`"\${${R}:-${Y(g.jx,"")}}?tool=${K.c}\${${P}:+&worktreeId=$${P}}\${${Q}:+&instanceId=$${Q}}"`;return`curl -sS -f -m ${g.W6} -X POST -H 'Content-Type: application/json'${e} --data-binary @- ${f} >/dev/null 2>&1 || true${c}`}(b,a),timeout:c}]}),c={};for(let[a,d]of Object.entries(T)){let e="SessionEnd"===a?3:g.W6;c[a]=[b(d,e)]}return c[U]=[{hooks:[{type:"command",command:function(a={}){let b=a.withAuthHeader??(0,g.yc)()?` -H "Authorization: Bearer $${g.XE}"`:"",c=`"\${${S}:-${Y(g.WZ,`?tool=${K.c}`)}}"`;return`curl -sS -f -m ${g.sI} -X POST -H 'Content-Type: application/json'${b} --data-binary @- ${c} 2>/dev/null || true # ${N}`}(a),timeout:g.sI}]}],{hooks:c}}(a)),null,2)}
2
- `;return d===e||((0,G.mkdirSync)((0,u.dirname)(b),{recursive:!0,mode:448}),(0,G.writeFileSync)(b,e,{mode:384})),b}(c))return a;let e=c.port??(0,I.D0)(),f=new URLSearchParams({tool:K.c,worktreeId:b.worktreeId,instanceId:d}),h=[`${O}=${(0,g.ZL)(W(c))}`,`CM_AGENT_TOOL=${(0,g.ZL)(K.c)}`,`${P}=${(0,g.ZL)(b.worktreeId)}`,`${Q}=${(0,g.ZL)(d)}`,`${R}=${(0,g.ZL)(`http://${M}:${e}${g.jx}`)}`,`${S}=${(0,g.ZL)(`http://${M}:${e}${g.WZ}?${f.toString()}`)}`],j="bypass"===process.env.CM_CODEX_HOOK_TRUST?" --dangerously-bypass-hook-trust":"";return`${h.join(" ")} ${(0,g.ZL)(a)}${j}`}catch(c){return L.warn("codex-hooks-config-write-failed",{worktreeId:b.worktreeId,error:c instanceof Error?c.message:String(c)}),a}}(b,a),d=c===b?null:X();return{command:c,settingsPath:d}}});var _=c(85965);let aa=globalThis.__agentEventSources??=new Map,ab=globalThis.__agentEventLegacySources??=new Map;function ac(a){aa.set(a.cliToolId,a),ab.delete(a.cliToolId)}function ad(a){let b=aa.get(a);if(b)return b;let c=ab.get(a);if(c)return c;let f=(0,h.U)({cliToolId:a,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:[],configScope:"none",decisionTimeoutSeconds:null},mappers:(0,i.mJ)(j.WK),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:j.ue,extractDetail:j.Jp,parsePermissionRequest:a=>(0,e.ss)(a),parseQuestion:a=>(0,d.ek)(a),encodeVerdict:m,prepareLaunch:(a,b)=>({command:b,settingsPath:null})});return ab.set(a,f),f}ac(n),ac(r),ac(s.A),ac(F),ac($),ac(_.cC)},2466:(a,b,c)=>{c.d(b,{ek:()=>h,u_:()=>g});var d=c(13287);function e(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function f(a,b){if("string"!=typeof a)return null;let c=a.trim();return""===c?null:c.slice(0,b)}function g(a){if(!e(a)||!Array.isArray(a.questions)||0===a.questions.length||a.questions.length>20)return null;let b=[];for(let c of a.questions){let a=function(a){if(!e(a))return null;let b=f(a.question,1e3);if(null===b||!Array.isArray(a.options)||0===a.options.length||a.options.length>20)return null;let c=[];for(let b of a.options){let a=function(a){if(!e(a))return null;let b=f(a.label,200);return null===b?null:{label:b,description:f(a.description,500)}}(b);if(null===a)return null;c.push(a)}return{question:b,header:f(a.header,64),multiSelect:!0===a.multiSelect,choices:c}}(c);if(null===a)return null;b.push(a)}return b}function h(a){if(!e(a)||a.tool_name!==d.k$)return null;let b=g(a.tool_input);return null===b?null:{questions:b,promptId:f(a.prompt_id,256)}}},2734:(a,b,c)=>{c.d(b,{c:()=>d});let d="codex"},8004:(a,b,c)=>{c.d(b,{T:()=>h});var d=c(72626),e=c(7956);let f=(0,d.h)("safe-directory"),g=new Set;function h(a,b,c){if(!a)return b;if(!(0,e.Mb)(a))return a;let d=`${c}|${a}`;return g.has(d)||(g.add(d),f.warn("virtual-filesystem-path-rejected",{source:c,candidate:a,fallback:b,reason:"A recursive mkdir under /proc, /sys or /dev never returns on Linux; the built-in default is used instead (Issue #1774)."})),b}},13287:(a,b,c)=>{c.d(b,{I4:()=>k,k$:()=>e,l9:()=>d,ss:()=>i,vy:()=>f});let d="PermissionRequest",e="AskUserQuestion",f=128;function g(a,b){let c=a[b];return"string"==typeof c&&""!==c?c:null}function h(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function i(a){if(!h(a)||a.hook_event_name!==d)return null;let b=g(a,"tool_name");return b&&!(b.length>f)&&h(a.tool_input)?{toolName:b,toolInput:a.tool_input,promptId:g(a,"prompt_id"),sessionId:g(a,"session_id"),permissionMode:g(a,"permission_mode"),permissionSuggestions:Array.isArray(a.permission_suggestions)?a.permission_suggestions:null}:null}let j={Bash:["command","description"],BashOutput:["bash_id"],KillShell:["shell_id"],Read:["file_path"],Write:["file_path"],Edit:["file_path"],NotebookEdit:["notebook_path"],Glob:["pattern","path"],Grep:["pattern","path"],WebFetch:["url","prompt"],WebSearch:["query"],SlashCommand:["command"],Task:["description","subagent_type","prompt"]};function k(a,b){let c=j[a];if(c){let a=c.map(a=>b[a]).filter(a=>"string"==typeof a&&""!==a);if(a.length>0)return a}try{return[JSON.stringify(b)??""]}catch{return[Object.keys(b).join(" ")]}}},21758:(a,b,c)=>{c.d(b,{Rv:()=>E,TV:()=>q,cN:()=>u,nL:()=>o});var d=c(29021),e=c(21820),f=c(33873),g=c(8004),h=c(15194),i=c(87447),j=c(43252),k=c(66007),l=c(72626),m=c(54633);let n=(0,l.h)("lib/hooks/sources/copilot/hook-settings"),o="gh copilot",p="cmate-copilot-agent-hooks",q=10,r="CM_AGENT_WORKTREE_ID",s="CM_AGENT_INSTANCE_ID",t="CM_AUTH_TOKEN",u="PreToolUse",v=[["SessionStart","session_start"],["UserPromptSubmit","user_prompt_submit"],["PostToolUse","post_tool_use"],["Stop","stop"],["SessionEnd","session_end"]];function w(a,b){return`http://127.0.0.1:${b.port??(0,i.D0)()}${a}`}function x(a=""){return`: ${p}; if [ -z "\${${r}:-}" ]; then cat >/dev/null; ${a}exit 0; fi; `}let y=`"\${${s}:-${m.V}}"`,z=`"$${r}"`;function A(){return`set -- -sS -m 4 -X POST -H 'Content-Type: application/json'; if [ -n "\${${t}:-}" ]; then set -- "$@" -H "Authorization: Bearer $${t}"; fi; `}function B(a){return`${(0,j.ZL)(`${a}?tool=${m.V}&worktreeId=`)}${z}'&instanceId='${y}`}function C(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function D(a){return C(a)&&"string"==typeof a.command&&a.command.includes(p)}function E(a,b,c={}){let i={command:a,settingsPath:null};if("0"===process.env.CM_AGENT_HOOKS_INJECT)return i;let l=b.instanceId??m.V;if(!(0,h.n6)(l)||!(0,k.h6)(b.worktreeId))return n.warn("copilot-hook-invalid-correlation-key",{worktreeId:b.worktreeId}),i;try{var o;let h=function(a={}){let b=a.settingsPath??(0,f.join)(function(){let a=(0,f.join)((0,e.homedir)(),".copilot");return(0,g.T)(process.env.COPILOT_HOME,a,"COPILOT_HOME")}(),"settings.json"),c=function(a,b){let c=a.hooks;if(void 0!==c&&!C(c))throw Error('copilot settings.json has a non-object "hooks" key');let d={...c??{}};for(let[a,c]of Object.entries(b.hooks)){let b=d[a];if(void 0!==b&&!Array.isArray(b)){n.warn("copilot-hook-event-not-an-array",{event:a});continue}d[a]=[...function(a){let b=[];for(let c of a)if(!D(c)){if(C(c)&&Array.isArray(c.hooks)){let a=c.hooks.filter(a=>!D(a));if(0===a.length&&c.hooks.length>0)continue;b.push({...c,hooks:a});continue}b.push(c)}return b}(b??[]),...c]}return{...a,hooks:d}}(function(a){let b;try{b=(0,d.readFileSync)(a,"utf8")}catch(a){if("ENOENT"===a.code)return{};throw a}if(""===b.trim())return{};let c=JSON.parse(b);if(!C(c))throw Error("copilot settings.json is not a JSON object");return c}(b),function(a={}){let b={};for(let[c,d]of v)b[c]=[{hooks:[{type:"command",command:function(a,b={}){let c=w(j.jx,b),d=void 0===b.relayScriptPath?(0,j.Os)():b.relayScriptPath;return d?x()+[(0,j.ZL)(d),"--tool",(0,j.ZL)(m.V),"--event",(0,j.ZL)(a),"--worktree-id",z,"--instance-id",y,"--url",(0,j.ZL)(c),"--stdin-json"].join(" "):x()+A()+`curl "$@" --data-binary @- ${B(c)} >/dev/null 2>&1 || true`}(d,a)}]}];return b[u]=[{hooks:[{type:"command",command:function(a={}){let b=w(j.WZ,a);return x("printf '{}'; ")+A()+`out=$(curl "$@" --data-binary @- ${B(b)} 2>/dev/null); `+"[ -n \"$out\" ] || out='{}'; printf '%s' \"$out\""}(a)}]}],{hooks:b}}(a));return(0,d.mkdirSync)((0,f.dirname)(b),{recursive:!0,mode:448}),(0,d.writeFileSync)(b,`${JSON.stringify(c,null,2)}
3
- `,{mode:384}),b}(c);return{command:`${o=b.worktreeId,`${r}=${(0,j.ZL)(o)} ${s}=${(0,j.ZL)(l)}`} ${a}`,settingsPath:h}}catch(a){return n.warn("copilot-hook-settings-write-failed",{worktreeId:b.worktreeId,error:a instanceof Error?a.message:String(a)}),i}}},22354:(a,b,c)=>{c.d(b,{F0:()=>i.F,VM:()=>d.VM,_0:()=>e._0,c1:()=>j.c,o:()=>h.o,vm:()=>g.v,y_:()=>f.y_});var d=c(1367);c(66101),c(57510),c(38367);var e=c(25071),f=c(50474),g=c(70997),h=c(77904),i=c(76835),j=c(2734)},25071:(a,b,c)=>{c.d(b,{_0:()=>j,o4:()=>i,qK:()=>h});var d=c(24455);let e=(0,c(72626).h)("lib/hooks/sources/pending-decisions"),f=globalThis.__agentSourcePendingDecisions??=new Map;function g(a){return(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId)}function h(a){return(f.get(g(a))??[]).map(a=>a.decision)}function i(a,b,c){let d=f.get(g(a));if(!d)return!1;let e=d.find(a=>a.decision.id===b);return!!e&&(e.body=c,!0)}async function j(a,b,c,d){let h=function(a,b){let c=g(a),d={key:c,ref:a,decision:b,body:null},e=f.get(c)??[];for(e.push(d);e.length>16;)e.shift();return f.set(c,e),d}(b,c);try{await a.decide(b,c,d)}catch(a){e.warn("agent-source-decide-failed",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId??b.cliToolId,decisionId:c.id,error:a instanceof Error?a.message:String(a)})}let i=f.get(h.key);if(i){let a=i.indexOf(h);a>=0&&i.splice(a,1),0===i.length&&f.delete(h.key)}return h.body??{}}},26547:(a,b,c)=>{c.d(b,{Yz:()=>w,jw:()=>u});var d=c(51297),e=c(85164);let f=["minimal","low","medium","high","xhigh"];function g(){return{model:null,effort:null}}let h=/^[A-Za-z0-9][A-Za-z0-9._:@/-]*$/,i=/^[A-Za-z0-9][A-Za-z0-9 .()[\]_:@/-]*$/;function j(a){return a.length>0&&a.length<=64&&i.test(a)}function k(a,b={}){let c=a.trim().toLowerCase();if(""===c)return null;if(f.includes(c))return c;if(!b.allowTruncated||c.length<2)return null;let d=f.filter(a=>a.length===c.length+1&&a.startsWith(c));return 1===d.length?d[0]:null}let l=/^\s*([^\s·]+)(?:\s+(minimal|low|medium|high|xhigh)\b)?/i;function m(a){if(!e.aW.test(a))return null;let b=a.indexOf("\xb7");if(b<0)return null;let c=l.exec(a.slice(0,b));if(!c)return null;let d=c[1];if(!(d.length>0&&d.length<=64&&h.test(d)))return null;let f=c[2]?k(c[2]):null;return null!==f||/\d/.test(d)?{model:d,effort:f}:null}let n=/^\s*[\u2500-\u259F][\s\u2500-\u259F]*(\S[^\u2500-\u259F]*?)\s+with\s+(minimal|low|medium|high|xhigh)\s+effort\b/i;function o(a){let b=n.exec(a);if(!b)return null;let c=b[1].trim();return j(c)?{model:c,effort:k(b[2])}:null}let p=/^\s*(?:\?\s+for\s+shortcuts|esc\s+to\s+cancel)\b/i,q=/^\s*[\u2500-\u259F][\s\u2500-\u259F]*(\S[^\u2500-\u259F]*?)\s+\((minimal|low|medium|high|xhigh)\)\s*$/i;function r(a){if(!p.test(a))return null;let b=a.lastIndexOf("\xb7");if(b<0)return null;let c=k(a.slice(b+1),{allowTruncated:!0});if(!c)return null;let d=a.slice(0,b).trimEnd().split(/\s{2,}/),e=(d[d.length-1]??"").trim();return{model:j(e)?e:null,effort:c}}function s(a){let b=q.exec(a);if(!b)return null;let c=b[1].trim();return j(c)?{model:c,effort:k(b[2])}:null}function t(a,b){let c=a.split("\n");for(let a=c.length-1;a>=0;a--){let e=b((0,d.aJ)(c[a]));if(e)return e}return null}function u(a,b){if(!b)return g();switch(a){case"codex":return t(b,m)??g();case"claude":return t(b,o)??g();case"antigravity":return t(b,r)??t(b,s)??g();default:return g()}}let v=/-(low|medium|high)$/i;function w(a,b,c){let d=(b||null)??c?.model??null,e=c?.effort??null,f="antigravity"===a?function(a){if(!a)return null;let b=v.exec(a);return b?b[1].toLowerCase():null}(d)??e:e;return{model:d,effort:f}}},36051:(a,b,c)=>{c.d(b,{Yo:()=>h,fO:()=>i,lY:()=>e});var d=c(81254);let e=500,f={notification:"Notification(permission_prompt)","permission-request":"PermissionRequest (no decision)"};function g(a,b){let c=[`A dialog is open in ${a}: the agent reported it via ${f[b.source]}${b.toolName?` for ${b.toolName}`:""}, but the detection layer published no options for it.`,`Answer it in the terminal, or send the option NUMBER with \`commandmate respond ${a} <number>\` — yes/no is not resolved on a numbered dialog (Issue #1681).`];if(b.message&&c.push(`Agent message: "${b.message}"`),b.askUserQuestion){let{question:a,labels:d,questionCount:e}=b.askUserQuestion;c.push(`The agent asked${e>1?` ${e} questions, the first being`:""}: "${a}" — offering: ${d.join(" / ")}. The picker renumbers and adds its own entries, so read the option NUMBER off the terminal rather than counting this list.`)}return c.join(" ")}function h(a,b){return{type:d.LT,status:"pending",question:g(a,b),options:[],source:b.source,...b.message?{message:b.message}:{},...b.toolName?{toolName:b.toolName}:{},...b.askUserQuestion?{askUserQuestion:b.askUserQuestion}:{}}}function i(a,b){return{type:d.LT,status:"unclassified",question:g(a,b),options:[],source:b.source,...b.message?{message:b.message}:{},...b.toolName?{toolName:b.toolName}:{},...b.askUserQuestion?{askUserQuestion:b.askUserQuestion}:{}}}},38367:(a,b,c)=>{c.d(b,{Jp:()=>h,WK:()=>e,lb:()=>f,ue:()=>g});var d=c(57510);let e={Stop:"stop",SubagentStop:"stop",Notification:"notification",SessionStart:"session_start",SessionEnd:"session_end",UserPromptSubmit:"user_prompt_submit",PreToolUse:"pre_tool_use",PostToolUse:"post_tool_use"},f=["session_id","conversationId"],g=["tool_use_id"];function h(a,b){let c="notification"===a?"notification_type":"session_end"===a?"reason":"session_start"===a?"source":"pre_tool_use"===a||"post_tool_use"===a?"tool_name":null;return null===c?null:(0,d.Wv)((0,d.O2)(b,c))}},42545:(a,b,c)=>{c.d(b,{FN:()=>u,lf:()=>r,wb:()=>q,bP:()=>s});var d=c(72626),e=c(24455),f=c(57510),g=c(49791),h=c(75356),i=c(98211),j=c(84574);function k(a){let b=(0,f.Qd)(a.properties)?a.properties:{};return(0,f.NZ)(b,["sessionID"])}function l(a,b){for(;a.size>b;){let b=a.keys().next();if(b.done)break;a.delete(b.value)}}let m=(0,d.h)("lib/hooks/sources/opencode/subscription"),n=[1e3,2e3,4e3,8e3,15e3,3e4],o=globalThis.__opencodeSubscriptions??=new Map;function p(a){return(0,e.v7)(a.worktreeId,a.cliToolId,a.instanceId)}function q(a){return o.has(p(a))}function r(a){return o.get(p(a))?.liveness??{state:"unknown"}}async function s(a,b,c,d){let e=p(a),g=o.get(e);if(g)return t(g);let h=d??(0,j.hC)(a);if(null===h)return m.info("opencode-subscription-skipped-no-port",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId}),{close:async()=>{},liveness:{state:"unknown"}};let i={key:e,target:a,port:h,onEvent:b,normalize:c,gate:function(a=64,b=512){let c=new Map,d=new Set,e=(b,d)=>{c.delete(b),c.set(b,d),l(c,a)};return{observe(a,g){if("message.updated"===a){let{role:a,id:c}=function(a){let b=(0,f.Qd)(a.properties)?a.properties:{};return{role:(0,f.NZ)(b,["info","role"]),id:(0,f.NZ)(b,["info","id"])}}(g);if("user"!==a||null===c)return{kind:"ignored"};let e=k(g)??"";return d.has(c)?{kind:"suppressed",sessionId:e,reason:"already-announced"}:(d.add(c),l(d,b),{kind:"announced",sessionId:e,messageId:c})}if("session.status"===a){if("busy"!==function(a){let b=(0,f.Qd)(a.properties)?a.properties:{};return(0,f.NZ)(b,["status","type"])}(g))return{kind:"ignored"};let a=k(g);return null===a?{kind:"ignored"}:(e(a,"busy"),{kind:"armed",sessionId:a})}if("session.error"===a){let a=k(g);return null===a?{kind:"ignored"}:{kind:"failed",sessionId:a,errorName:function(a){let b=(0,f.Qd)(a.properties)?a.properties:{};return(0,f.NZ)(b,["error","name"])}(g)}}if("session.idle"!==a)return{kind:"ignored"};let h=k(g);if(null===h)return{kind:"ignored"};let i=c.get(h);return void 0===i?{kind:"suppressed",sessionId:h,reason:"never-armed"}:"idle"===i?{kind:"suppressed",sessionId:h,reason:"already-completed"}:(e(h,"idle"),{kind:"completed",sessionId:h})},isArmed:a=>"busy"===c.get(a),reset(){c.clear()}}}(),seenDecisions:new Set,streamController:new AbortController,liveness:{state:"unknown"},closed:!1,watchdog:null};return o.set(e,i),m.info("opencode-subscription-opened",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:h}),x(i),t(i)}function t(a){return{close:async()=>{await u(a.target)},get liveness(){return a.liveness}}}async function u(a){let b=p(a),c=o.get(b);c&&(c.closed=!0,v(c),c.streamController.abort(),o.delete(b),m.info("opencode-subscription-closed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:c.port}))}function v(a){null!==a.watchdog&&(clearTimeout(a.watchdog),a.watchdog=null)}function w(a){v(a);let b=setTimeout(()=>{a.closed||(m.warn("opencode-subscription-heartbeat-lost",{worktreeId:a.target.worktreeId,instanceId:a.target.instanceId??a.target.cliToolId,port:a.port,afterMs:3e4}),a.streamController.abort())},3e4);b.unref?.(),a.watchdog=b}async function x(a){let b=0;for(;!a.closed;){a.streamController=new AbortController,a.gate.reset();let c="stream-ended";try{for await(let c of(await y(a),w(a),(0,g.Y5)(a.port,a.streamController.signal)))b=0,w(a),function(a,b){let c=(0,f.O2)(b,"type");("server.heartbeat"===c||"server.connected"===c)&&(a.liveness={state:"live",lastHeartbeatAt:Date.now()}),z(a,b,Date.now())}(a,c)}catch(a){c=a instanceof Error?a.message:String(a)}finally{v(a)}if(a.closed)break;a.liveness={state:"lost",since:Date.now(),reason:c},m.warn("opencode-subscription-disconnected",{worktreeId:a.target.worktreeId,instanceId:a.target.instanceId??a.target.cliToolId,port:a.port,reason:c,attempt:b}),await function(a,b){return new Promise(c=>{let d=setTimeout(c,a);d.unref?.(),b.addEventListener("abort",()=>{clearTimeout(d),c()},{once:!0})})}(function(a){let b=Math.min(a,n.length-1);return n[b]}(b),a.streamController.signal),b+=1}}async function y(a){let b=Date.now(),[c,d]=await Promise.all([(0,g.Li)(a.port),(0,g.er)(a.port)]),e=(c,d)=>{for(let e of c){let c=(0,f.O2)(e,"id");!c||a.seenDecisions.has(c)||z(a,{id:`resync_${c}`,type:d,properties:e},b)}};e(c,"permission.asked"),e(d,"question.asked")}function z(a,b,c){var d,e;let g=(0,f.O2)(b,"type");if("message.part.updated"===g){let a=(0,h.Zu)(b),c=(0,h.Dp)(b);a&&c&&(0,i.XL)(a,c)}let j=a.gate.observe(g,b);"failed"===j.kind&&m.warn("opencode-session-error",{worktreeId:a.target.worktreeId,instanceId:a.target.instanceId??a.target.cliToolId,sessionId:j.sessionId,errorName:j.errorName});let k=null;try{k=a.normalize({payload:b,receivedAt:c})}catch(a){m.error("opencode-normalize-threw",{type:g,error:a instanceof Error?a.message:String(a)});return}if(!k)return;let l=(d=k.event,e=j,"stop"===d&&"completed"!==e.kind?"suppressed"===e.kind?e.reason:"not-a-turn-end":"user_prompt_submit"===d&&"announced"!==e.kind?"suppressed"===e.kind?e.reason:"not-a-new-prompt":null);if(null!==l)return void m.info("opencode-repeat-suppressed",{worktreeId:a.target.worktreeId,instanceId:a.target.instanceId??a.target.cliToolId,sessionId:k.conversationId,event:k.event,reason:l});!function(a,b){let c=(0,f.O2)(b,"type");if("permission.asked"!==c&&"question.asked"!==c)return;let d=(0,f.Qd)(b.properties)?b.properties:{},e=(0,f.O2)(d,"id");if(e)for(a.seenDecisions.add(e);a.seenDecisions.size>256;){let b=a.seenDecisions.values().next();if(b.done)break;a.seenDecisions.delete(b.value)}}(a,b);try{a.onEvent(k)}catch(a){m.error("opencode-event-handler-failed",{type:g,error:a instanceof Error?a.message:String(a)})}}},43252:(a,b,c)=>{c.d(b,{D2:()=>G,O$:()=>B,Os:()=>D,W6:()=>p,WZ:()=>o,XE:()=>r,ZL:()=>E,g5:()=>y,iR:()=>z,jx:()=>n,q:()=>v,sI:()=>q,xM:()=>A,yc:()=>w});var d=c(55511),e=c(29021),f=c(21820),g=c(33873),h=c(8004),i=c(87447),j=c(15194),k=c(70997),l=c(13287);let m=(0,c(72626).h)("lib/hooks/hook-settings-generator"),n="/api/hooks/agent-event",o="/api/hooks/permission-request",p=5,q=5,r="CM_AUTH_TOKEN",s=l.k$,t=["Bash(pkill:*)","Bash(killall:*)","Bash(kill -9:*)"],u=(0,g.join)("scripts","hooks","cmate-agent-event.sh");function v(){return"0"!==process.env.CM_AGENT_HOOKS_INJECT}function w(){return!!(process.env[r]||process.env.CM_AUTH_TOKEN_HASH)}function x(a={}){let b=(0,g.join)((0,f.homedir)(),".commandmate","hooks");return a.directory?(0,h.T)(a.directory,b,"HookSettingsOptions.directory"):(0,h.T)(process.env.CM_AGENT_HOOKS_DIR,b,"CM_AGENT_HOOKS_DIR")}function y(a){let b=a.cliToolId??k.v;return a.instanceId??b}function z(a,b={}){let c=a.cliToolId??k.v,e=y(a),f=`${c}-${a.worktreeId}-${e}`.replace(/[^a-zA-Z0-9_-]/g,"_"),h=(0,d.createHash)("sha256").update(JSON.stringify([c,a.worktreeId,e])).digest("hex").slice(0,12);return(0,g.join)(x(b),`${f.slice(0,80)}-${h}.json`)}function A(a,b={}){return C(n,a,b)}function B(a,b={}){return C(o,a,b)}function C(a,b,c){let d=b.cliToolId??k.v,e=c.port??(0,i.D0)(),f=new URLSearchParams({tool:d,worktreeId:b.worktreeId,instanceId:y(b)});return`http://127.0.0.1:${e}${a}?${f.toString()}`}function D(){let a=(0,g.resolve)(process.cwd(),u);return(0,e.existsSync)(a)?a:null}function E(a){return`'${a.replace(/'/g,"'\\''")}'`}function F(a,b,c=p){let d={"Content-Type":"application/json"},e={type:"http",url:a,headers:d,timeout:c};return b&&(d.Authorization=`Bearer $${r}`,e.allowedEnvVars=[r]),e}function G(a,b,c={}){if(!v())return a;if(!(0,j.n6)(y(b)))return m.warn("hook-settings-invalid-instance-id",{worktreeId:b.worktreeId}),a;try{let d=function(a,b={}){let c=z(a,b);return(0,e.mkdirSync)(x(b),{recursive:!0,mode:448}),(0,e.writeFileSync)(c,`${JSON.stringify(function(a,b={}){let c=A(a,b),d=b.withAuthHeader??w(),e=()=>F(c,d);return{hooks:{SessionStart:[{hooks:[{type:"command",command:function(a,b={}){let c=A(a,b),d=b.withAuthHeader??w(),e=void 0===b.relayScriptPath?D():b.relayScriptPath;if(e)return[E(e),"--tool",E(a.cliToolId??k.v),"--event session_start --worktree-id",E(a.worktreeId),"--instance-id",E(y(a)),"--url",E(c),"--stdin-json"].join(" ");let f=d?` -H "Authorization: Bearer $${r}"`:"";return`curl -sS -m ${p} -X POST -H 'Content-Type: application/json'${f} --data-binary @- ${E(c)} >/dev/null 2>&1 || true`}(a,b),timeout:p}]}],UserPromptSubmit:[{hooks:[e()]}],Stop:[{hooks:[e()]}],Notification:[{matcher:"permission_prompt|idle_prompt",hooks:[e()]}],SessionEnd:[{hooks:[e()]}],PreToolUse:[{matcher:s,hooks:[e()]}],PostToolUse:[{matcher:s,hooks:[e()]}],PermissionRequest:[{hooks:[F(B(a,b),d,q)]}]},permissions:{deny:[...t]}}}(a,b),null,2)}
4
- `,{mode:384}),c}(b,c);return`${E(a)} --settings ${E(d)}`}catch(c){return m.warn("hook-settings-write-failed",{worktreeId:b.worktreeId,error:c instanceof Error?c.message:String(c)}),a}}},46171:(a,b,c)=>{c.d(b,{P:()=>i,U:()=>h});var d=c(29021),e=c(33873),f=c(7956),g=c(57510);function h(a){if(!(0,d.existsSync)(a))return null;try{let b=JSON.parse((0,d.readFileSync)(a,"utf8"));return(0,g.Qd)(b)?b:null}catch{return null}}function i(a,b){if((0,f.Mb)(a))throw Error(`Refusing to write inside a virtual filesystem: ${a} (a recursive mkdir under /proc, /sys or /dev never returns on Linux; Issue #1774)`);(0,d.mkdirSync)((0,e.dirname)(a),{recursive:!0,mode:448}),(0,d.writeFileSync)(a,`${JSON.stringify(b,null,2)}
5
- `,{mode:384})}},48083:(a,b,c)=>{c.d(b,{BJ:()=>J,CE:()=>t,Fw:()=>K,HR:()=>G,P5:()=>E,R4:()=>B,_N:()=>I,ak:()=>w,dj:()=>z,ik:()=>D,je:()=>A,jl:()=>y,m5:()=>H,n4:()=>u,pI:()=>v,vm:()=>x,zA:()=>F,zM:()=>s});var d=c(24455),e=c(62887),f=c(13287),g=c(26547),h=c(67882),i=c(36051);let j=globalThis.__agentEventLastStopAt??(globalThis.__agentEventLastStopAt=new Map),k=globalThis.__agentEventLast??(globalThis.__agentEventLast=new Map),l=globalThis.__agentEventGenerationStartedAt??(globalThis.__agentEventGenerationStartedAt=new Map),m=globalThis.__agentEventPromptWaiting??(globalThis.__agentEventPromptWaiting=new Map),n=globalThis.__agentEventAskUserQuestion??(globalThis.__agentEventAskUserQuestion=new Map),o=globalThis.__agentEventRecentKeys??(globalThis.__agentEventRecentKeys=new Map),p=globalThis.__agentEventAwaitingInstruction??(globalThis.__agentEventAwaitingInstruction=new Map),q=globalThis.__agentEventLastModel??(globalThis.__agentEventLastModel=new Map),r=globalThis.__agentCapturedModelInfo??(globalThis.__agentCapturedModelInfo=new Map);function s(a,b,c,e=Date.now()){j.set((0,d.v7)(a,b,c),e)}function t(a,b,c){return j.get((0,d.v7)(a,b,c))??null}function u(a,b,c,g){let h=(0,d.v7)(a,b,c);k.set(h,g),"string"==typeof g.model&&""!==g.model&&q.set(h,g.model.slice(0,e.h9)),function(a,b){switch(b.event){case"pre_tool_use":b.detail!==f.k$&&n.delete(a);return;case"notification":"idle_prompt"===b.detail&&n.delete(a);return;case"post_tool_use":case"stop":case"user_prompt_submit":case"session_start":case"session_end":n.delete(a);return;default:b.event;return}}(h,g),"session_start"===g.event&&l.set(h,g.at),function(a,b){switch(b.event){case"notification":"permission_prompt"===b.detail?C(a,{source:"notification",message:b.message??null,at:b.at}):"idle_prompt"===b.detail&&m.delete(a);return;case"stop":case"user_prompt_submit":case"session_start":case"session_end":case"post_tool_use":m.delete(a);return;case"pre_tool_use":return;default:b.event;return}}(h,g),function(a,b){switch(b.event){case"notification":"idle_prompt"===b.detail&&p.set(a,{at:b.at,message:b.message??null});return;case"user_prompt_submit":case"session_start":case"session_end":p.delete(a);return;case"stop":case"pre_tool_use":case"post_tool_use":return;default:b.event;return}}(h,g)}function v(a,b,c){return null!==function(a,b,c){let e=(0,d.v7)(a,b,c),f=p.get(e);if(!f)return null;let g=l.get(e);return void 0!==g&&f.at<g?null:f}(a,b,c)}function w(a,b,c){return k.get((0,d.v7)(a,b,c))??null}function x(a,b,c,f){if(!f.model&&!f.effort)return;let g=(0,d.v7)(a,b,c),h=r.get(g);r.set(g,{model:f.model?f.model.slice(0,e.h9):h?.model??null,effort:f.effort??h?.effort??null})}function y(a,b,c){return(0,g.Yz)(b,q.get((0,d.v7)(a,b,c))??null,function(a,b,c){let e=r.get((0,d.v7)(a,b,c));return{model:e?.model??null,effort:e?.effort??null}}(a,b,c))}function z(a,b,c,e=Date.now()){let f=(0,d.v7)(a,b,c);l.set(f,e),m.delete(f),n.delete(f),p.delete(f),q.delete(f),r.delete(f)}function A(a,b,c){let e=(0,d.v7)(a,b,c);k.delete(e),l.delete(e),m.delete(e),n.delete(e),p.delete(e),q.delete(e),r.delete(e)}function B(a,b,c,e=Date.now()){let f=(0,d.v7)(a,b,c),g=k.get(f);if(!g)return null;let i=l.get(f);if(void 0!==i&&g.at<i||e-g.at>=18e5)return null;let j=(0,h.DA)(g.event,g.detail);return null===j?null:{...j,event:g.event,at:g.at,detail:g.detail}}function C(a,b){let c=m.get(a),d="notification"===b.source;if(c){c.message=b.message??c.message,c.toolName=b.toolName??c.toolName,d&&(c.source="notification",c.confirmedAt??=b.at);return}m.set(a,{at:b.at,source:b.source,message:b.message?b.message.slice(0,i.lY):null,toolName:b.toolName??null,confirmedAt:d?b.at:null,scraperCorroborated:!1,recorded:!1})}function D(a,b,c,e,f=Date.now()){C((0,d.v7)(a,b,c),{source:"permission-request",message:null,toolName:e,at:f})}function E(a,b,c,e=Date.now()){let f=(0,d.v7)(a,b,c),g=m.get(f);if(!g)return null;let h=l.get(f);return void 0!==h&&g.at<h||e-g.at>=18e5||null===g.confirmedAt&&e-g.at>=2e4?null:g}function F(a,b,c,e=Date.now()){let f=m.get((0,d.v7)(a,b,c));f&&(f.scraperCorroborated=!0,f.confirmedAt??=e)}function G(a,b,c){let e=m.get((0,d.v7)(a,b,c));e&&(e.recorded=!0)}function H(a,b,c){m.delete((0,d.v7)(a,b,c))}function I(a,b,c,e,f=Date.now()){n.set((0,d.v7)(a,b,c),{at:f,spec:e})}function J(a,b,c,e=Date.now()){let f=(0,d.v7)(a,b,c),g=n.get(f);if(!g)return null;let h=l.get(f);return void 0!==h&&g.at<h||e-g.at>=18e5?null:g}function K(a,b,c,e,f,g=Date.now(),h=null){if(!f)return!1;let i=[(0,d.v7)(a,b,c),e,h??"",f].join(" "),j=o.get(i);return void 0!==j&&g-j<3e3||(o.set(i,g),function(a){for(let[b,c]of o)a-c>=3e3&&o.delete(b);for(;o.size>512;){let a=o.keys().next();if(a.done)break;o.delete(a.value)}}(g),!1)}},49791:(a,b,c)=>{c.d(b,{Ei:()=>o,LV:()=>n,Li:()=>k,Ok:()=>i,Vc:()=>e,Y5:()=>p,er:()=>l,xR:()=>m});let d=(0,c(72626).h)("lib/hooks/sources/opencode/client"),e="127.0.0.1";function f(a){return`http://${e}:${a}`}function g(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}async function h(a,b){try{let c=await fetch(a,{...b,signal:AbortSignal.timeout(5e3)});if(!c.ok)return null;return await c.json()}catch(b){return d.debug("opencode-request-failed",{url:a,error:b instanceof Error?b.message:String(b)}),null}}async function i(a){let b=await h(`${f(a)}/global/health`);return g(b)&&!0===b.healthy?{healthy:!0,version:"string"==typeof b.version?b.version:null}:null}function j(a){return Array.isArray(a)?a.filter(g):[]}async function k(a){return j(await h(`${f(a)}/permission`))}async function l(a){return j(await h(`${f(a)}/question`))}async function m(a){let b=await h(`${f(a)}/session/status`);if(!g(b))return null;for(let a of Object.values(b))if(g(a)&&"busy"===a.type)return"busy";return"idle"}async function n(a,b,c,d){let e={reply:c};return d&&(e.message=d),null!==await h(`${f(a)}/permission/${encodeURIComponent(b)}/reply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async function o(a,b,c){return null!==await h(`${f(a)}/question/${encodeURIComponent(b)}/reply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({answers:c})})}async function*p(a,b){let c=await fetch(`${f(a)}/event`,{signal:b,headers:{Accept:"text/event-stream"}});if(!c.ok||!c.body)throw Error(`opencode /event responded ${c.status}`);let d=c.body.getReader(),e=new TextDecoder,g=function(){let a="",b=[],c=[],d=()=>{0!==b.length&&(c.push(b.join("\n")),b=[])},e=a=>{let c=a.endsWith("\r")?a.slice(0,-1):a;if(""===c)return void d();!c.startsWith(":")&&c.startsWith("data:")&&b.push(c.slice(5).replace(/^ /,""))};return{push(b){let d=(a+=b).indexOf("\n");for(;d>=0;)e(a.slice(0,d)),d=(a=a.slice(d+1)).indexOf("\n");return c.splice(0,c.length)},flush:()=>(""!==a&&(e(a),a=""),d(),c.splice(0,c.length))}}();try{for(;;){let{done:a,value:b}=await d.read();if(a)break;let c=e.decode(b,{stream:!0});for(let a of g.push(c)){let b=q(a);b&&(yield b)}}for(let a of g.flush()){let b=q(a);b&&(yield b)}}finally{await d.cancel().catch(()=>{})}}function q(a){try{let b=JSON.parse(a);return g(b)?b:null}catch{return null}}},50474:(a,b,c)=>{c.d(b,{y_:()=>d});function d(a){var b=a.noDecision;switch(b.kind){case"proceeds":return{safe:!0,blocksForMs:0,summary:"the agent continues with its own approval flow"};case"blocks":return{safe:!1,blocksForMs:null,summary:"the agent waits indefinitely; nothing else will unblock it"};case"blocksUntil":return{safe:!1,blocksForMs:b.timeoutMs,summary:`the agent waits up to ${b.timeoutMs}ms before continuing`}}}},52767:(a,b,c)=>{c.d(b,{r:()=>i,g:()=>h});var d=c(48524),e=c(87009),f=c(72626);let g=(0,f.h)("lib/tasks/task-transition-service");function h(a,b,c,f){let h=a.transaction(()=>{let g=(0,d.gg)(a,b);if(!g)return null;let h=g.status,i=function(a,b){switch(a){case"pending":switch(b){case"message_sent":return"running";case"send_failed":case"cancel":return"cancelled";default:return null}case"running":switch(b){case"prompt_detected":return"waiting_input";case"agent_idle":return"running";case"verify_started":return"verifying";case"send_failed":return"failed";case"cancel":return"cancelled";default:return null}case"waiting_input":switch(b){case"prompt_answered_auto":case"prompt_answered_human":case"agent_idle":return"running";case"verify_started":return"verifying";case"cancel":return"cancelled";default:return null}case"verifying":switch(b){case"verify_passed":return"succeeded";case"verify_failed":return"failed";case"verify_not_started":return"not_started";case"cancel":return"cancelled";default:return null}case"failed":case"not_started":switch(b){case"message_sent":return"running";case"verify_started":return"verifying";case"cancel":return"cancelled";default:return null}default:return null}}(h,c),j=Date.now(),k=(0,e.P)(a,{taskId:b,event:c,fromStatus:h,toStatus:i,payload:f,createdAt:j});return null===i?{task:g,fromStatus:h,toStatus:null,eventId:k}:{task:(0,d.xZ)(a,b,i,f?.runId===void 0?{}:{lastVerificationRunId:f.runId}),fromStatus:h,toStatus:i,eventId:k}})();return null===h?g.warn("task-event-unknown-task",{taskId:b,event:c}):null===h.toStatus&&g.warn("task-event-rejected",{taskId:b,event:c,fromStatus:h.fromStatus}),h}function i(a,b,c,e,f,i){try{let g=(0,d.MH)(a,b,c,e);if(!g)return null;return h(a,g.id,f,i)}catch(a){return g.warn("task-event-failed",{worktreeId:b,cliToolId:c,instanceId:e,event:f,error:a instanceof Error?a.message:String(a)}),null}}},54633:(a,b,c)=>{c.d(b,{V:()=>d});let d="copilot"},56791:(a,b,c)=>{c.r(b),c.d(b,{ACTIVE_FILTER:()=>d.ks,ACTIVE_TASK_STATUSES:()=>d.EL,AgentInstanceLimitError:()=>d.AC,CURRENT_SCHEMA_VERSION:()=>f.FT,DEFAULT_RUN_HISTORY_LIMIT:()=>d.Tu,InvalidAgentInstanceError:()=>d.ug,MAX_DISABLED_REPOSITORIES:()=>h.nc,MAX_RUN_HISTORY_DAYS:()=>d.eP,MAX_RUN_HISTORY_LIMIT:()=>d.mg,MemoDbError:()=>d.lm,RepositoryDbError:()=>h.j8,TASK_STATUSES:()=>d.Hi,TERMINAL_TASK_STATUSES:()=>d.sA,VERIFICATION_GATE_SOURCES:()=>d.Dx,VERIFICATION_TRIGGERS:()=>d.af,WORKTREE_TODO_STATUSES:()=>d.KG,addAgentInstance:()=>d.Uq,archiveAllAssistantMessages:()=>d.cD,archiveAssistantMessagesFrom:()=>d.Jj,cancelTimer:()=>d.Ud,cancelTimersByWorktree:()=>d.$$,cleanupOldTimers:()=>d.ul,clearInProgressMessageId:()=>d.YX,clearLastUserMessage:()=>d.cf,clearTimerHistory:()=>d.jf,closeDbInstance:()=>e.closeDbInstance,countAgentInstances:()=>d.fs,countDisabledRepositories:()=>h.QJ,countWorktreesByRepositoryPath:()=>h.kp,createAssistantConversation:()=>d.G4,createAssistantExecution:()=>d.hL,createAssistantMessage:()=>d.qp,createCloneJob:()=>h.tw,createGateResult:()=>d.hl,createMemo:()=>d.To,createMessage:()=>d.oH,createRepository:()=>h.vB,createTask:()=>d.UT,createTimer:()=>d.CR,createTodo:()=>d.py,createVerificationRun:()=>d.rY,createWorktreeTodo:()=>d.yy,deleteAllMessages:()=>d.pE,deleteAssistantSessionState:()=>d.z2,deleteMemo:()=>d.cP,deleteMessageById:()=>d.DF,deleteMessagesByCliTool:()=>d.lA,deleteMessagesByInstance:()=>d.Qp,deletePushSubscriptionByEndpoint:()=>d.th,deleteRepository:()=>h.oG,deleteRepositoryWorktrees:()=>d.oZ,deleteSessionState:()=>d.ZP,deleteTodo:()=>d.Ys,deleteWorktreeTodo:()=>d.vg,deleteWorktreesByIds:()=>d.Rm,disableExistingRepository:()=>h.eP,disableRepository:()=>h.l$,ensureEnvRepositoriesRegistered:()=>h.ES,filterExcludedPaths:()=>h.Ho,finishGateResult:()=>d.C8,finishVerificationRun:()=>d.u$,getActiveCloneJobByUrl:()=>h.fD,getActiveTask:()=>d.__,getActiveTaskForInstance:()=>d.MH,getAgentInstance:()=>d.BN,getAgentInstances:()=>d.m0,getAliasedWorktreeIds:()=>d.r3,getAllPushSubscriptions:()=>d.Se,getAllRepositories:()=>h.Yg,getAllRepositoriesWithWorktreeCount:()=>h._D,getAllTodos:()=>d.Tk,getAllWorktreeAliases:()=>d.fX,getAllWorktreeIds:()=>d.nO,getAllWorktreePathIds:()=>d.Sj,getAssistantConversationById:()=>d.iT,getAssistantConversationByRepositoryAndCliTool:()=>d.gp,getAssistantExecutionById:()=>d.$r,getAssistantMessageById:()=>d.yE,getAssistantMessages:()=>d.BE,getAssistantSessionState:()=>d.qK,getCloneJob:()=>h.bM,getCloneJobsByStatus:()=>h.n_,getCurrentVersion:()=>f.Mj,getDailyReport:()=>d.ap,getDbInstance:()=>e.getDbInstance,getDefaultDbPath:()=>g.$b,getExcludedRepositories:()=>h.lS,getExcludedRepositoryPaths:()=>h.pr,getInitialBranch:()=>d.p4,getIssueDbPath:()=>g.zm,getLastAssistantMessageAt:()=>d.nP,getLastMessage:()=>d.sy,getLastUserMessage:()=>d.r8,getLatestAssistantExecutionByConversation:()=>d.of,getLegacyDbPaths:()=>q,getMemoById:()=>d.DN,getMemosByWorktreeId:()=>d.pZ,getMessageById:()=>d.kA,getMessages:()=>d.VL,getMessagesByDateRange:()=>d.lr,getMigrationHistory:()=>f.PS,getPendingTimerCountByWorktree:()=>d.GF,getPendingTimers:()=>d._O,getPushSubscriptionByEndpoint:()=>d.CF,getPushSubscriptionsForKind:()=>d.gn,getRepositories:()=>d.NV,getRepositoryById:()=>h.r,getRepositoryByNormalizedUrl:()=>h.Uj,getRepositoryByPath:()=>h.Dp,getRunningAssistantExecutionByConversation:()=>d.ce,getRunningVerificationRun:()=>d.WZ,getSessionState:()=>d.y1,getTask:()=>d.gg,getTimerById:()=>d.kx,getTimersByWorktree:()=>d.DP,getTodoById:()=>d.Nr,getTodosByRepositoryId:()=>d.ob,getTodosByWorktreeId:()=>d.fr,getVerificationRun:()=>d.J6,getWorktreeAliases:()=>d.Q2,getWorktreeById:()=>d.Ui,getWorktreeIdsByRepository:()=>d.P9,getWorktreeTodoById:()=>d.eN,getWorktrees:()=>d.vi,getWorktreesByRepository:()=>d.uJ,initDatabase:()=>d.s4,isTerminalTaskStatus:()=>d.uB,isWorktreeTodoStatus:()=>d.yT,listRunningAssistantExecutions:()=>d.b2,listRunningVerificationRuns:()=>d.Fi,listTaskEvents:()=>d.HB,listTasks:()=>d.Vk,listVerificationRuns:()=>d.Mt,listVerificationRunsForPeriod:()=>d.UE,markPendingPromptsAsAnswered:()=>d.PL,migrateDbIfNeeded:()=>r,migrateWorktreeIdPreservingChildren:()=>d._h,recomputeLastUserMessage:()=>d.jp,recordAnsweredPrompt:()=>d.pG,recordWorktreeAlias:()=>d.xJ,recoverStuckSendingTimers:()=>d.Xm,registerAndFilterRepositories:()=>h.$G,removeAgentInstance:()=>d.NU,reorderMemos:()=>d.nQ,reorderWorktreeTodos:()=>d.yb,resolveAndValidatePath:()=>p,resolveRepositoryPath:()=>h.mE,resolveWorktreeIdWithAlias:()=>d.l0,restoreRepository:()=>h.RS,rollbackMigrations:()=>f.Wy,runMigrations:()=>f.vI,saveDailyReport:()=>d.tt,saveInitialBranch:()=>d.GA,setAgentInstances:()=>d.Cs,setInProgressMessageId:()=>d.OF,setRepositoryEnabled:()=>h.iQ,updateAssistantConversation:()=>d.xR,updateAssistantExecution:()=>d.az,updateAssistantMessageStatus:()=>d.nZ,updateAssistantSessionState:()=>d.PP,updateCliToolId:()=>d.WU,updateCloneJob:()=>h.k5,updateDailyReportContent:()=>d.IF,updateFavorite:()=>d.O,updateLastUserMessage:()=>d.EU,updateLastViewedAt:()=>d.HZ,updateMemo:()=>d.UY,updateMessageContent:()=>d.e8,updatePromptData:()=>d.cw,updatePushSubscriptionPreferences:()=>d.jJ,updateRepository:()=>h.Ir,updateSelectedAgents:()=>d.DC,updateSessionState:()=>d.gb,updateStatus:()=>d.yB,updateTimerStatus:()=>d.j2,updateTodo:()=>d.uy,updateVibeLocalContextWindow:()=>d.s,updateVibeLocalModel:()=>d.iu,updateWorktreeDescription:()=>d.hq,updateWorktreeLink:()=>d.z1,updateWorktreeTodo:()=>d.bl,upsertPushSubscription:()=>d.jA,upsertWorktree:()=>d.ZL,validateDbPath:()=>g.Sv,validateRepositoryPath:()=>h.Ux,validateSchema:()=>f.i6});var d=c(90444),e=c(88807),f=c(18698),g=c(20416),h=c(10406),i=c(29021),j=c.n(i),k=c(33873),l=c.n(k),m=c(21820),n=c(7956);let o=(0,c(72626).h)("db-migration-path");function p(a,b){try{if(!j().existsSync(a))return null;let c=j().realpathSync(a);if((0,n.fW)(c))return o.warn(`[Security] ${b} points to system directory, skipping: ${c}`),null;return c}catch{return o.warn(`[Security] Failed to resolve ${b}: ${a}`),null}}function q(){let a=[];a.push(l().join(process.cwd(),"data","db.sqlite")),a.push(l().join(process.cwd(),"data","cm.db")),a.push(l().join((0,m.homedir)(),".commandmate","data","db.sqlite"));let b=process.env.DATABASE_PATH;if(b)try{let c=l().resolve(b);(0,n.fW)(c)?o.warn(`[Security] Skipping DATABASE_PATH in system directory: ${c}`):a.push(b)}catch{o.warn(`[Security] Invalid DATABASE_PATH: ${b}`)}return a}function r(a){let b=l().resolve(a);if((0,n.fW)(b))throw Error(`Security error: Target path cannot be in system directory: ${b}`);if(j().existsSync(a)){let b=p(a,"target path");if(b)return{migrated:!1,targetPath:b}}for(let a of q()){let c=p(a,"legacy path");if(!c)continue;let d=`${c}.bak`;j().copyFileSync(c,d),j().chmodSync(d,384);let e=l().dirname(b);return j().existsSync(e)||j().mkdirSync(e,{recursive:!0,mode:448}),j().copyFileSync(c,b),o.info(`[Migration] Database migrated from ${c} to ${b}`),o.info(`[Migration] Backup created at ${d}`),{migrated:!0,sourcePath:c,targetPath:b,backupPath:d}}return{migrated:!1,targetPath:b}}},57510:(a,b,c)=>{c.d(b,{KR:()=>e,NZ:()=>n,O2:()=>j,Qd:()=>m,Uq:()=>o,Wv:()=>l,ex:()=>i,mJ:()=>f,oJ:()=>k,qU:()=>g});var d=c(62887);function e(a,b,c){return d=>d===a?{event:b,detail:c??null}:null}function f(a){return Object.entries(a).map(([a,b])=>e(a,b))}function g(a,b,c){for(let d of a){let a=d(b,c);if(a)return a}return null}let h=globalThis.__agentSourceUnknownEvents??=new Map;function i(a,b){let c=h.get(a)??{count:0,names:[]};c.count+=1;let d=b??"(unnamed)";!c.names.includes(d)&&c.names.length<32&&c.names.push(d),h.set(a,c)}function j(a,b){let c=a[b];return"string"==typeof c&&""!==c?c:null}function k(a,b){for(let c of b){let b=j(a,c);if(null!==b)return b}return null}function l(a){return null===a||""===a?null:a.slice(0,d.h9)}function m(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function n(a,b){let c=a;for(let a of b){if(!m(c))return null;c=c[a]}return"string"==typeof c&&""!==c?c:null}function o(a,b,c,e={}){var f;let g=void 0!==a.detail&&null!==a.detail?l(a.detail):l(e.detail?.(a.event,b)??null);return{event:a.event,detail:g,conversationId:a.conversationId??(e.conversationId?k(b,e.conversationId):null),toolCallId:a.toolCallId??(e.toolCallId?k(b,e.toolCallId):null),model:null===(f=e.extractModel?.(b)??(e.modelFields?k(b,e.modelFields):null))||""===f?null:f.slice(0,d.h9),raw:b,receivedAt:c}}},62887:(a,b,c)=>{c.d(b,{b0:()=>d,h9:()=>f,o0:()=>e});let d=["stop","notification","session_start","user_prompt_submit","session_end","pre_tool_use","post_tool_use"];function e(a){return"string"==typeof a&&d.includes(a)}let f=128},66101:(a,b,c)=>{c.d(b,{U:()=>h,k:()=>i});var d=c(62887),e=c(57510),f=c(25071);let g={close:async()=>{},liveness:{state:"unknown"}};function h(a){let b=a.nativeEventNameFields??["hook_event_name"];return{cliToolId:a.cliToolId,transport:"push",noDecision:a.noDecision,capabilities:a.capabilities,normalizeEvent(c){let f=c.receivedAt??Date.now(),g=b.length>0?(0,e.oJ)(c.payload,b):null;if(null!=c.event&&(0,d.o0)(c.event))return(0,e.Uq)({event:c.event},c.payload,f,{detail:a.extractDetail,conversationId:a.conversationIdFields,toolCallId:a.toolCallIdFields,modelFields:a.modelFields,extractModel:a.extractModel});let h=(0,e.qU)(a.mappers,g,c.payload);return h?(0,e.Uq)(h,c.payload,f,{detail:a.extractDetail,conversationId:a.conversationIdFields,toolCallId:a.toolCallIdFields,modelFields:a.modelFields,extractModel:a.extractModel}):((0,e.ex)(a.cliToolId,g),null)},parsePermissionRequest:a.parsePermissionRequest,parseQuestion:a.parseQuestion,encodeVerdict:b=>({kind:"responseBody",body:a.encodeVerdict(b)}),prepareLaunch:a.prepareLaunch,subscribe:async()=>g,async decide(b,c,d){(0,f.o4)(b,c.id,a.encodeVerdict(d))},listPending:async a=>(0,f.qK)(a),probeActivity:async()=>null,liveness:()=>({state:"unknown"})}}function i(a){let b=a.nativeEventNameFields??["type"];return{cliToolId:a.cliToolId,transport:"pull",noDecision:a.noDecision,capabilities:a.capabilities,normalizeEvent(c){let f=c.receivedAt??Date.now(),g=b.length>0?(0,e.oJ)(c.payload,b):null;if(null!=c.event&&(0,d.o0)(c.event))return(0,e.Uq)({event:c.event},c.payload,f,{detail:a.extractDetail,conversationId:a.conversationIdFields,toolCallId:a.toolCallIdFields,modelFields:a.modelFields,extractModel:a.extractModel});let h=(0,e.qU)(a.mappers,g,c.payload);return h?(0,e.Uq)(h,c.payload,f,{detail:a.extractDetail,conversationId:a.conversationIdFields,toolCallId:a.toolCallIdFields,modelFields:a.modelFields,extractModel:a.extractModel}):((0,e.ex)(a.cliToolId,g),null)},parsePermissionRequest:a.parsePermissionRequest,parseQuestion:a.parseQuestion,encodeVerdict:()=>({kind:"outOfBand"}),prepareLaunch:a.prepareLaunch??((a,b)=>({command:b,settingsPath:null})),subscribe:a.subscribe,decide:a.decide,listPending:a.listPending,probeActivity:a.probeActivity,liveness:a.liveness}}},67882:(a,b,c)=>{c.d(b,{DA:()=>e,O_:()=>f,Oh:()=>d,_K:()=>g});let d={PROMPT_SUBMIT:"hook_prompt_submit",STOP:"hook_stop",PERMISSION_PROMPT:"hook_permission_prompt",PERMISSION_REQUEST:"hook_permission_request",IDLE_PROMPT:"hook_idle_prompt",PRE_TOOL_USE:"hook_pre_tool_use",POST_TOOL_USE:"hook_post_tool_use"};function e(a,b){switch(a){case"user_prompt_submit":return{status:"running",reason:d.PROMPT_SUBMIT};case"pre_tool_use":return{status:"running",reason:d.PRE_TOOL_USE};case"post_tool_use":return{status:"running",reason:d.POST_TOOL_USE};case"stop":return{status:"ready",reason:d.STOP};case"notification":if("permission_prompt"===b)return{status:"waiting",reason:d.PERMISSION_PROMPT};if("idle_prompt"===b)return{status:"ready",reason:d.IDLE_PROMPT};return null;default:return null}}function f(a){switch(a){case"waiting":return{isWaitingForResponse:!0,isProcessing:!1};case"running":return{isWaitingForResponse:!1,isProcessing:!0};default:return{isWaitingForResponse:!1,isProcessing:!1}}}function g(a){return a.isSessionRunning?a.isWaitingForResponse?"waiting":a.isProcessing?"running":"ready":null}},69935:(a,b,c)=>{c.d(b,{A:()=>s,B:()=>r});var d=c(15194),e=c(66101),f=c(57510),g=c(38367);let h={ToolPermission:"permission_prompt"};var i=c(33873),j=c(43252),k=c(72626),l=c(46171),m=c(77904);let n=(0,k.h)("lib/hooks/sources/gemini/settings-generator"),o=1e3*j.W6,p=[["SessionStart","session_start"],["BeforeAgent","user_prompt_submit"],["AfterAgent","stop"],["Notification","notification"],["SessionEnd","session_end"]];function q(a,b){return a.includes("cmate-agent-event.sh")&&a.includes(`--tool ${m.o}`)&&a.includes(`--worktree-id ${(0,j.ZL)(b)}`)}function r(a,b){let c={worktreeId:b.worktreeId,instanceId:b.instanceId,cliToolId:m.o};return(0,d.n6)(b.instanceId??m.o)?function(a,b){if(!(0,j.q)())return null;let c=(0,j.Os)();if(!c)return n.warn("gemini-hook-relay-missing",{worktreeId:b.worktreeId}),null;let d=(0,i.join)(a,".gemini","settings.json");try{let a=(0,l.U)(d),e=function(a,b){let c={};for(let[e,f]of p){var d;c[e]=[{hooks:[{type:"command",command:(d=b.worktreeId,[(0,j.ZL)(a),"--tool",m.o,"--event",f,"--worktree-id",(0,j.ZL)(d),"--stdin-json"].join(" ")),timeout:o}]}]}return c}(c,b);return(0,l.P)(d,function(a,b,c){let d=(0,f.Qd)(a?.hooks)?a.hooks:{},e={};for(let[a,b]of Object.entries(d)){if(!Array.isArray(b)){e[a]=b;continue}let d=b.filter(a=>!function(a,b){if(!(0,f.Qd)(a))return!1;let c=a.hooks;return Array.isArray(c)?c.length>0&&c.every(a=>(0,f.Qd)(a)&&"string"==typeof a.command&&q(a.command,b)):"string"==typeof a.command&&q(a.command,b)}(a,c));e[a]=d.length===b.length?b:d}for(let[a,c]of Object.entries(b)){let b=e[a];e[a]=Array.isArray(b)?[...b,...c]:[...c]}return{...a,hooks:e}}(a,e,b.worktreeId)),d}catch(a){return n.warn("gemini-hook-settings-write-failed",{worktreeId:b.worktreeId,error:a instanceof Error?a.message:String(a)}),null}}(a,c):null}let s=(0,e.U)({cliToolId:m.o,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:["session_start","user_prompt_submit","stop","notification","session_end"],configScope:"per-worktree",decisionTimeoutSeconds:0},mappers:(0,f.mJ)({SessionStart:"session_start",SessionEnd:"session_end",BeforeAgent:"user_prompt_submit",AfterAgent:"stop",BeforeTool:"pre_tool_use",AfterTool:"post_tool_use",Notification:"notification"}),nativeEventNameFields:["hook_event_name"],conversationIdFields:g.lb,toolCallIdFields:[],extractDetail:function(a,b){if("notification"!==a)return(0,g.Jp)(a,b);let c=(0,f.O2)(b,"notification_type");return null===c?null:(0,f.Wv)(h[c]??c)},parsePermissionRequest:()=>null,parseQuestion:()=>null,encodeVerdict:()=>({}),prepareLaunch:(a,b)=>({command:function(a,b,c={}){if(!(0,j.q)())return a;if(!(0,d.n6)((0,j.g5)(b)))return n.warn("gemini-hook-invalid-instance-id",{worktreeId:b.worktreeId}),a;let e=(0,j.xM)({...b,cliToolId:m.o},c);return`CM_HOOK_URL=${(0,j.ZL)(e)} ${(0,j.ZL)(a)}`}(b,{worktreeId:a.worktreeId,instanceId:a.instanceId,cliToolId:m.o}),settingsPath:null})})},70997:(a,b,c)=>{c.d(b,{v:()=>d});let d="claude"},75356:(a,b,c)=>{c.d(b,{Dp:()=>l,Tm:()=>f,Zu:()=>m,aF:()=>e,lu:()=>o,pV:()=>i,vE:()=>g});var d=c(57510);let e="permission_prompt",f="question_prompt",g="error";function h(a){return(0,d.Qd)(a.properties)?a.properties:{}}function i(a){let b=h(a).info;return(0,d.Qd)(b)?(0,d.NZ)(b,["model","modelID"])??(0,d.NZ)(b,["model","id"]):null}function j(a){return(0,d.NZ)(h(a),["part","state","status"])}function k(a){return"tool"===(0,d.NZ)(h(a),["part","type"])}function l(a){return(0,d.NZ)(h(a),["part","tool"])}function m(a){return(0,d.NZ)(h(a),["part","callID"])}let n=["completed","error"],o=[(0,d.KR)("session.idle","stop"),(0,d.KR)("session.created","session_start"),(0,d.KR)("session.deleted","session_end"),(a,b)=>"message.updated"===a&&"user"===(0,d.NZ)(h(b),["info","role"])?{event:"user_prompt_submit"}:null,(a,b)=>"message.part.updated"===a&&k(b)&&"running"===j(b)?{event:"pre_tool_use",detail:(0,d.Wv)(l(b)),toolCallId:m(b)}:null,(a,b)=>"message.part.updated"===a&&k(b)&&n.includes(j(b)??"")?{event:"post_tool_use",detail:(0,d.Wv)(l(b)),toolCallId:m(b)}:null,(0,d.KR)("permission.asked","notification",e),(0,d.KR)("question.asked","notification",f),(0,d.KR)("session.error","notification",g)].map(function(a){return(b,c)=>{let e=a(b,c);return e?{...e,conversationId:e.conversationId??(0,d.NZ)(h(c),["sessionID"])}:null}})},76835:(a,b,c)=>{c.d(b,{F:()=>d});let d="antigravity"},77904:(a,b,c)=>{c.d(b,{o:()=>d});let d="gemini"},81254:(a,b,c)=>{function d(a){return"answer_only"===a||"answer_then_enter"===a}c.d(b,{LT:()=>e,MI:()=>d,XF:()=>f});let e="unclassified";function f(a){return null!=a&&a.type!==e}},84574:(a,b,c)=>{c.d(b,{CU:()=>w,hC:()=>u,jp:()=>x,kE:()=>v});var d=c(91645),e=c(29021),f=c(21820),g=c(33873),h=c(8004),i=c(24455),j=c(43252),k=c(72626),l=c(49791);let m=(0,k.h)("lib/hooks/sources/opencode/ports"),n={min:4200,max:4299},o=n.max-n.min+1,p=globalThis.__opencodePortAssignments??=new Map;function q(a){return(0,i.v7)(a.worktreeId,a.cliToolId,a.instanceId)}function r(){let a=(0,g.join)((0,f.homedir)(),".commandmate","opencode-ports.json");return(0,h.T)(process.env.CM_OPENCODE_PORT_FILE,a,"CM_OPENCODE_PORT_FILE")}function s(){try{let a=JSON.parse((0,e.readFileSync)(r(),"utf8"));if("object"!=typeof a||null===a||Array.isArray(a))return{};let b={};for(let[c,d]of Object.entries(a))!("object"!=typeof d||null===d||Array.isArray(d))&&"number"==typeof d.port&&Number.isInteger(d.port)&&d.port>0&&d.port<65536&&"string"==typeof d.worktreePath&&(b[c]={port:d.port,worktreePath:d.worktreePath,updatedAt:"number"==typeof d.updatedAt?d.updatedAt:0});return b}catch{return{}}}function t(a){let b=r();try{(0,e.mkdirSync)((0,g.dirname)(b),{recursive:!0}),(0,e.writeFileSync)(b,`${JSON.stringify(a,null,2)}
6
- `,{mode:384})}catch(a){m.warn("opencode-port-file-write-failed",{path:b,error:a instanceof Error?a.message:String(a)})}}function u(a){return p.get(q(a))?.port??null}function v(a){let b=q(a);p.delete(b);let c=s();b in c&&(delete c[b],t(c))}async function w(a,b){if(!(0,j.q)())return null;let c=u(a);if(null!==c)return c;let e=q(a),f=s()[e],g=f?.port,h=function(a){let b=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return n.min+b%o}(q(a)),c=[];for(let a=0;a<o;a+=1)c.push(n.min+(b-n.min+a)%o);return c}(a);for(let c of void 0!==g?[g,...h.filter(a=>a!==g)]:h)if(await function(a){return new Promise(b=>{let c=(0,d.createServer)();c.once("error",()=>b(!1)),c.listen(a,l.Vc,()=>{c.close(()=>b(!0))})})}(c))return!function(a,b,c,d=Date.now()){let e=q(a),f={port:b,worktreePath:c,updatedAt:d};p.set(e,f);let g=s();g[e]=f,t(g)}(a,c,b),m.info("opencode-port-allocated",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:c}),c;return m.warn("opencode-port-exhausted",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,range:`${n.min}-${n.max}`}),null}async function x(a,b){if(!(0,j.q)())return null;let c=u(a);if(null!==c)return c;let d=s()[q(a)];if(!d)return null;if(d.worktreePath!==b)return m.info("opencode-port-recovery-path-mismatch",{worktreeId:a.worktreeId,recorded:d.worktreePath}),null;let e=await (0,l.Ok)(d.port);return e?(p.set(q(a),d),m.info("opencode-port-recovered",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:d.port,version:e.version}),d.port):(m.info("opencode-port-recovery-unhealthy",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:d.port}),null)}},85322:(a,b,c)=>{c.d(b,{k:()=>d});let d="opencode"},85965:(a,b,c)=>{c.d(b,{cC:()=>s});var d=c(62887),e=c(43252),f=c(72626),g=c(66101),h=c(49791),i=c(75356),j=c(98211),k=c(84574),l=c(42545),m=c(85322);let n=(0,f.h)("lib/hooks/sources/opencode/source"),o=d.b0;async function p(a,b,c){let d=a.instanceId??a.cliToolId;if("abstain"===c.kind)return void n.warn("opencode-verdict-abstained",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id,consequence:"the agent waits indefinitely; nothing else will unblock it"});let e=(0,k.hC)(a);if(null===e)return void n.warn("opencode-verdict-undeliverable-no-port",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id});if("question"===b.kind){if("answer"!==c.kind)return void n.info("opencode-question-not-answerable",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id,verdict:c.kind});let f=await (0,h.Ei)(e,b.id,c.answers);return void n.info("opencode-question-replied",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id,delivered:f})}let f=function(a){switch(a.kind){case"allowOnce":return"once";case"allowAlways":return"always";case"deny":return"reject";case"answer":case"abstain":return null}}(c);if(null===f)return;let g=await (0,h.LV)(e,b.id,f,"deny"===c.kind?c.message:void 0);n.info("opencode-permission-replied",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id,reply:f,delivered:g})}async function q(a){let b=(0,k.hC)(a);if(null===b)return[];let c=Date.now(),[d,e]=await Promise.all([(0,h.Li)(b),(0,h.er)(b)]),f=[];for(let a of d){let b=(0,j.Lu)(a,c);b&&f.push(b)}for(let a of e){let b=(0,j.AB)(a,c);b&&f.push(b)}return f}async function r(a){let b=(0,k.hC)(a);return null===b?null:(0,h.xR)(b)}let s=(0,g.k)({cliToolId:m.k,noDecision:{kind:"blocks"},capabilities:{supportedEvents:o,configScope:"none",decisionTimeoutSeconds:null},mappers:i.lu,nativeEventNameFields:["type"],conversationIdFields:[],extractModel:i.pV,parsePermissionRequest:j.FZ,parseQuestion:j.v1,subscribe:(a,b)=>(0,l.bP)(a,b,a=>s.normalizeEvent(a)),decide:p,listPending:q,probeActivity:r,liveness:a=>(0,l.lf)(a),prepareLaunch:function(a,b){if(!(0,e.q)())return{command:b,settingsPath:null};let c=(0,k.hC)(a);return null===c?{command:b,settingsPath:null}:{command:`${(0,e.ZL)(b)} --port ${c} --hostname ${h.Vc}`,settingsPath:null}}})},98211:(a,b,c)=>{c.d(b,{AB:()=>l,FZ:()=>i,Lu:()=>k,XL:()=>g,v1:()=>j});var d=c(2466),e=c(57510);let f=globalThis.__opencodeToolCallNames??=new Map;function g(a,b){for(f.delete(a),f.set(a,b);f.size>256;){let a=f.keys().next();if(a.done)break;f.delete(a.value)}}function h(a){return"string"==typeof a.type&&(0,e.Qd)(a.properties)?a.properties:a}function i(a){var b;let c=h(a),d=(0,e.O2)(c,"id"),g=(0,e.O2)(c,"sessionID");if(!d||!g||Array.isArray(c.questions))return null;let i=(0,e.O2)(c,"permission"),j=(0,e.Qd)(c.metadata)?c.metadata:{};return{toolName:((b=(0,e.NZ)(c,["tool","callID"]))?f.get(b)??null:null)??i??"permission",toolInput:{permission:i,patterns:Array.isArray(c.patterns)?c.patterns:[],...j},promptId:d,sessionId:g,permissionMode:null,permissionSuggestions:Array.isArray(c.always)?c.always:null}}function j(a){let b=h(a),c=(0,e.O2)(b,"id");if(!c)return null;let f=(0,d.u_)({questions:b.questions});return null===f?null:{questions:f,promptId:c}}function k(a,b){let c=i(a);return c&&c.promptId?{kind:"permission",id:c.promptId,conversationId:c.sessionId,subject:{kind:"permission",toolName:c.toolName,toolInput:c.toolInput},raw:a,askedAt:b}:null}function l(a,b){let c=h(a),d=(0,e.O2)(c,"id"),f=j(a);return d&&f?{kind:"question",id:d,conversationId:(0,e.O2)(c,"sessionID"),subject:{kind:"question",spec:f},raw:a,askedAt:b}:null}}};
1
+ "use strict";exports.id=7458,exports.ids=[7458],exports.modules={2466:(a,b,c)=>{c.d(b,{ek:()=>h,u_:()=>g});var d=c(13287);function e(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function f(a,b){if("string"!=typeof a)return null;let c=a.trim();return""===c?null:c.slice(0,b)}function g(a){if(!e(a)||!Array.isArray(a.questions)||0===a.questions.length||a.questions.length>20)return null;let b=[];for(let c of a.questions){let a=function(a){if(!e(a))return null;let b=f(a.question,1e3);if(null===b||!Array.isArray(a.options)||0===a.options.length||a.options.length>20)return null;let c=[];for(let b of a.options){let a=function(a){if(!e(a))return null;let b=f(a.label,200);return null===b?null:{label:b,description:f(a.description,500)}}(b);if(null===a)return null;c.push(a)}return{question:b,header:f(a.header,64),multiSelect:!0===a.multiSelect,choices:c}}(c);if(null===a)return null;b.push(a)}return b}function h(a){if(!e(a)||a.tool_name!==d.k$)return null;let b=g(a.tool_input);return null===b?null:{questions:b,promptId:f(a.prompt_id,256)}}},2734:(a,b,c)=>{c.d(b,{c:()=>d});let d="codex"},8004:(a,b,c)=>{c.d(b,{T:()=>h});var d=c(72626),e=c(7956);let f=(0,d.h)("safe-directory"),g=new Set;function h(a,b,c){if(!a)return b;if(!(0,e.Mb)(a))return a;let d=`${c}|${a}`;return g.has(d)||(g.add(d),f.warn("virtual-filesystem-path-rejected",{source:c,candidate:a,fallback:b,reason:"A recursive mkdir under /proc, /sys or /dev never returns on Linux; the built-in default is used instead (Issue #1774)."})),b}},13287:(a,b,c)=>{c.d(b,{I4:()=>k,k$:()=>e,l9:()=>d,ss:()=>i,vy:()=>f});let d="PermissionRequest",e="AskUserQuestion",f=128;function g(a,b){let c=a[b];return"string"==typeof c&&""!==c?c:null}function h(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function i(a){if(!h(a)||a.hook_event_name!==d)return null;let b=g(a,"tool_name");return b&&!(b.length>f)&&h(a.tool_input)?{toolName:b,toolInput:a.tool_input,promptId:g(a,"prompt_id"),sessionId:g(a,"session_id"),permissionMode:g(a,"permission_mode"),permissionSuggestions:Array.isArray(a.permission_suggestions)?a.permission_suggestions:null}:null}let j={Bash:["command","description"],BashOutput:["bash_id"],KillShell:["shell_id"],Read:["file_path"],Write:["file_path"],Edit:["file_path"],NotebookEdit:["notebook_path"],Glob:["pattern","path"],Grep:["pattern","path"],WebFetch:["url","prompt"],WebSearch:["query"],SlashCommand:["command"],Task:["description","subagent_type","prompt"]};function k(a,b){let c=j[a];if(c){let a=c.map(a=>b[a]).filter(a=>"string"==typeof a&&""!==a);if(a.length>0)return a}try{return[JSON.stringify(b)??""]}catch{return[Object.keys(b).join(" ")]}}},21758:(a,b,c)=>{c.d(b,{Rv:()=>E,TV:()=>q,cN:()=>u,nL:()=>o});var d=c(29021),e=c(21820),f=c(33873),g=c(8004),h=c(15194),i=c(87447),j=c(43252),k=c(66007),l=c(72626),m=c(54633);let n=(0,l.h)("lib/hooks/sources/copilot/hook-settings"),o="gh copilot",p="cmate-copilot-agent-hooks",q=10,r="CM_AGENT_WORKTREE_ID",s="CM_AGENT_INSTANCE_ID",t="CM_AUTH_TOKEN",u="PreToolUse",v=[["SessionStart","session_start"],["UserPromptSubmit","user_prompt_submit"],["PostToolUse","post_tool_use"],["Stop","stop"],["SessionEnd","session_end"]];function w(a,b){return`http://127.0.0.1:${b.port??(0,i.D0)()}${a}`}function x(a=""){return`: ${p}; if [ -z "\${${r}:-}" ]; then cat >/dev/null; ${a}exit 0; fi; `}let y=`"\${${s}:-${m.V}}"`,z=`"$${r}"`;function A(){return`set -- -sS -m 4 -X POST -H 'Content-Type: application/json'; if [ -n "\${${t}:-}" ]; then set -- "$@" -H "Authorization: Bearer $${t}"; fi; `}function B(a){return`${(0,j.ZL)(`${a}?tool=${m.V}&worktreeId=`)}${z}'&instanceId='${y}`}function C(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function D(a){return C(a)&&"string"==typeof a.command&&a.command.includes(p)}function E(a,b,c={}){let i={command:a,settingsPath:null,env:{}};if("0"===process.env.CM_AGENT_HOOKS_INJECT)return i;let l=b.instanceId??m.V;if(!(0,h.n6)(l)||!(0,k.h6)(b.worktreeId))return n.warn("copilot-hook-invalid-correlation-key",{worktreeId:b.worktreeId}),i;try{var o;let h=function(a={}){let b=a.settingsPath??(0,f.join)(function(){let a=(0,f.join)((0,e.homedir)(),".copilot");return(0,g.T)(process.env.COPILOT_HOME,a,"COPILOT_HOME")}(),"settings.json"),c=function(a,b){let c=a.hooks;if(void 0!==c&&!C(c))throw Error('copilot settings.json has a non-object "hooks" key');let d={...c??{}};for(let[a,c]of Object.entries(b.hooks)){let b=d[a];if(void 0!==b&&!Array.isArray(b)){n.warn("copilot-hook-event-not-an-array",{event:a});continue}d[a]=[...function(a){let b=[];for(let c of a)if(!D(c)){if(C(c)&&Array.isArray(c.hooks)){let a=c.hooks.filter(a=>!D(a));if(0===a.length&&c.hooks.length>0)continue;b.push({...c,hooks:a});continue}b.push(c)}return b}(b??[]),...c]}return{...a,hooks:d}}(function(a){let b;try{b=(0,d.readFileSync)(a,"utf8")}catch(a){if("ENOENT"===a.code)return{};throw a}if(""===b.trim())return{};let c=JSON.parse(b);if(!C(c))throw Error("copilot settings.json is not a JSON object");return c}(b),function(a={}){let b={};for(let[c,d]of v)b[c]=[{hooks:[{type:"command",command:function(a,b={}){let c=w(j.jx,b),d=void 0===b.relayScriptPath?(0,j.Os)():b.relayScriptPath;return d?x()+[(0,j.ZL)(d),"--tool",(0,j.ZL)(m.V),"--event",(0,j.ZL)(a),"--worktree-id",z,"--instance-id",y,"--url",(0,j.ZL)(c),"--stdin-json"].join(" "):x()+A()+`curl "$@" --data-binary @- ${B(c)} >/dev/null 2>&1 || true`}(d,a)}]}];return b[u]=[{hooks:[{type:"command",command:function(a={}){let b=w(j.WZ,a);return x("printf '{}'; ")+A()+`out=$(curl "$@" --data-binary @- ${B(b)} 2>/dev/null); `+"[ -n \"$out\" ] || out='{}'; printf '%s' \"$out\""}(a)}]}],{hooks:b}}(a));return(0,d.mkdirSync)((0,f.dirname)(b),{recursive:!0,mode:448}),(0,d.writeFileSync)(b,`${JSON.stringify(c,null,2)}
2
+ `,{mode:384}),b}(c);return{command:a,settingsPath:h,env:(o=b.worktreeId,{[r]:o,[s]:l})}}catch(a){return n.warn("copilot-hook-settings-write-failed",{worktreeId:b.worktreeId,error:a instanceof Error?a.message:String(a)}),i}}},22354:(a,b,c)=>{c.d(b,{F0:()=>j.F,K9:()=>e.K,VM:()=>d.VM,_0:()=>f._0,c1:()=>k.c,o:()=>i.o,vm:()=>h.v,y_:()=>g.y_});var d=c(97709);c(66101);var e=c(45567);c(57510),c(38367);var f=c(25071),g=c(50474),h=c(70997),i=c(77904),j=c(76835),k=c(2734)},25071:(a,b,c)=>{c.d(b,{_0:()=>j,o4:()=>i,qK:()=>h});var d=c(24455);let e=(0,c(72626).h)("lib/hooks/sources/pending-decisions"),f=globalThis.__agentSourcePendingDecisions??=new Map;function g(a){return(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId)}function h(a){return(f.get(g(a))??[]).map(a=>a.decision)}function i(a,b,c){let d=f.get(g(a));if(!d)return!1;let e=d.find(a=>a.decision.id===b);return!!e&&(e.body=c,!0)}async function j(a,b,c,d){let h=function(a,b){let c=g(a),d={key:c,ref:a,decision:b,body:null},e=f.get(c)??[];for(e.push(d);e.length>16;)e.shift();return f.set(c,e),d}(b,c);try{await a.decide(b,c,d)}catch(a){e.warn("agent-source-decide-failed",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId??b.cliToolId,decisionId:c.id,error:a instanceof Error?a.message:String(a)})}let i=f.get(h.key);if(i){let a=i.indexOf(h);a>=0&&i.splice(a,1),0===i.length&&f.delete(h.key)}return h.body??{}}},26547:(a,b,c)=>{c.d(b,{Yz:()=>w,jw:()=>u});var d=c(51297),e=c(85164);let f=["minimal","low","medium","high","xhigh"];function g(){return{model:null,effort:null}}let h=/^[A-Za-z0-9][A-Za-z0-9._:@/-]*$/,i=/^[A-Za-z0-9][A-Za-z0-9 .()[\]_:@/-]*$/;function j(a){return a.length>0&&a.length<=64&&i.test(a)}function k(a,b={}){let c=a.trim().toLowerCase();if(""===c)return null;if(f.includes(c))return c;if(!b.allowTruncated||c.length<2)return null;let d=f.filter(a=>a.length===c.length+1&&a.startsWith(c));return 1===d.length?d[0]:null}let l=/^\s*([^\s·]+)(?:\s+(minimal|low|medium|high|xhigh)\b)?/i;function m(a){if(!e.aW.test(a))return null;let b=a.indexOf("\xb7");if(b<0)return null;let c=l.exec(a.slice(0,b));if(!c)return null;let d=c[1];if(!(d.length>0&&d.length<=64&&h.test(d)))return null;let f=c[2]?k(c[2]):null;return null!==f||/\d/.test(d)?{model:d,effort:f}:null}let n=/^\s*[\u2500-\u259F][\s\u2500-\u259F]*(\S[^\u2500-\u259F]*?)\s+with\s+(minimal|low|medium|high|xhigh)\s+effort\b/i;function o(a){let b=n.exec(a);if(!b)return null;let c=b[1].trim();return j(c)?{model:c,effort:k(b[2])}:null}let p=/^\s*(?:\?\s+for\s+shortcuts|esc\s+to\s+cancel)\b/i,q=/^\s*[\u2500-\u259F][\s\u2500-\u259F]*(\S[^\u2500-\u259F]*?)\s+\((minimal|low|medium|high|xhigh)\)\s*$/i;function r(a){if(!p.test(a))return null;let b=a.lastIndexOf("\xb7");if(b<0)return null;let c=k(a.slice(b+1),{allowTruncated:!0});if(!c)return null;let d=a.slice(0,b).trimEnd().split(/\s{2,}/),e=(d[d.length-1]??"").trim();return{model:j(e)?e:null,effort:c}}function s(a){let b=q.exec(a);if(!b)return null;let c=b[1].trim();return j(c)?{model:c,effort:k(b[2])}:null}function t(a,b){let c=a.split("\n");for(let a=c.length-1;a>=0;a--){let e=b((0,d.aJ)(c[a]));if(e)return e}return null}function u(a,b){if(!b)return g();switch(a){case"codex":return t(b,m)??g();case"claude":return t(b,o)??g();case"antigravity":return t(b,r)??t(b,s)??g();default:return g()}}let v=/-(low|medium|high)$/i;function w(a,b,c){let d=(b||null)??c?.model??null,e=c?.effort??null,f="antigravity"===a?function(a){if(!a)return null;let b=v.exec(a);return b?b[1].toLowerCase():null}(d)??e:e;return{model:d,effort:f}}},36051:(a,b,c)=>{c.d(b,{Yo:()=>h,fO:()=>i,lY:()=>e});var d=c(81254);let e=500,f={notification:"Notification(permission_prompt)","permission-request":"PermissionRequest (no decision)"};function g(a,b){let c=[`A dialog is open in ${a}: the agent reported it via ${f[b.source]}${b.toolName?` for ${b.toolName}`:""}, but the detection layer published no options for it.`,`Answer it in the terminal, or send the option NUMBER with \`commandmate respond ${a} <number>\` — yes/no is not resolved on a numbered dialog (Issue #1681).`];if(b.message&&c.push(`Agent message: "${b.message}"`),b.askUserQuestion){let{question:a,labels:d,questionCount:e}=b.askUserQuestion;c.push(`The agent asked${e>1?` ${e} questions, the first being`:""}: "${a}" — offering: ${d.join(" / ")}. The picker renumbers and adds its own entries, so read the option NUMBER off the terminal rather than counting this list.`)}return c.join(" ")}function h(a,b){return{type:d.LT,status:"pending",question:g(a,b),options:[],source:b.source,...b.message?{message:b.message}:{},...b.toolName?{toolName:b.toolName}:{},...b.askUserQuestion?{askUserQuestion:b.askUserQuestion}:{}}}function i(a,b){return{type:d.LT,status:"unclassified",question:g(a,b),options:[],source:b.source,...b.message?{message:b.message}:{},...b.toolName?{toolName:b.toolName}:{},...b.askUserQuestion?{askUserQuestion:b.askUserQuestion}:{}}}},38367:(a,b,c)=>{c.d(b,{Jp:()=>h,WK:()=>e,lb:()=>f,ue:()=>g});var d=c(57510);let e={Stop:"stop",SubagentStop:"stop",Notification:"notification",SessionStart:"session_start",SessionEnd:"session_end",UserPromptSubmit:"user_prompt_submit",PreToolUse:"pre_tool_use",PostToolUse:"post_tool_use"},f=["session_id","conversationId"],g=["tool_use_id"];function h(a,b){let c="notification"===a?"notification_type":"session_end"===a?"reason":"session_start"===a?"source":"pre_tool_use"===a||"post_tool_use"===a?"tool_name":null;return null===c?null:(0,d.Wv)((0,d.O2)(b,c))}},42545:(a,b,c)=>{c.d(b,{FN:()=>u,lf:()=>r,wb:()=>q,bP:()=>s});var d=c(72626),e=c(24455),f=c(57510),g=c(49791),h=c(75356),i=c(98211),j=c(84574);function k(a){let b=(0,f.Qd)(a.properties)?a.properties:{};return(0,f.NZ)(b,["sessionID"])}function l(a,b){for(;a.size>b;){let b=a.keys().next();if(b.done)break;a.delete(b.value)}}let m=(0,d.h)("lib/hooks/sources/opencode/subscription"),n=[1e3,2e3,4e3,8e3,15e3,3e4],o=globalThis.__opencodeSubscriptions??=new Map;function p(a){return(0,e.v7)(a.worktreeId,a.cliToolId,a.instanceId)}function q(a){return o.has(p(a))}function r(a){return o.get(p(a))?.liveness??{state:"unknown"}}async function s(a,b,c,d){let e=p(a),g=o.get(e);if(g)return t(g);let h=d??(0,j.hC)(a);if(null===h)return m.info("opencode-subscription-skipped-no-port",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId}),{close:async()=>{},liveness:{state:"unknown"}};let i={key:e,target:a,port:h,onEvent:b,normalize:c,gate:function(a=64,b=512){let c=new Map,d=new Set,e=(b,d)=>{c.delete(b),c.set(b,d),l(c,a)};return{observe(a,g){if("message.updated"===a){let{role:a,id:c}=function(a){let b=(0,f.Qd)(a.properties)?a.properties:{};return{role:(0,f.NZ)(b,["info","role"]),id:(0,f.NZ)(b,["info","id"])}}(g);if("user"!==a||null===c)return{kind:"ignored"};let e=k(g)??"";return d.has(c)?{kind:"suppressed",sessionId:e,reason:"already-announced"}:(d.add(c),l(d,b),{kind:"announced",sessionId:e,messageId:c})}if("session.status"===a){if("busy"!==function(a){let b=(0,f.Qd)(a.properties)?a.properties:{};return(0,f.NZ)(b,["status","type"])}(g))return{kind:"ignored"};let a=k(g);return null===a?{kind:"ignored"}:(e(a,"busy"),{kind:"armed",sessionId:a})}if("session.error"===a){let a=k(g);return null===a?{kind:"ignored"}:{kind:"failed",sessionId:a,errorName:function(a){let b=(0,f.Qd)(a.properties)?a.properties:{};return(0,f.NZ)(b,["error","name"])}(g)}}if("session.idle"!==a)return{kind:"ignored"};let h=k(g);if(null===h)return{kind:"ignored"};let i=c.get(h);return void 0===i?{kind:"suppressed",sessionId:h,reason:"never-armed"}:"idle"===i?{kind:"suppressed",sessionId:h,reason:"already-completed"}:(e(h,"idle"),{kind:"completed",sessionId:h})},isArmed:a=>"busy"===c.get(a),reset(){c.clear()}}}(),seenDecisions:new Set,streamController:new AbortController,liveness:{state:"unknown"},closed:!1,watchdog:null};return o.set(e,i),m.info("opencode-subscription-opened",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:h}),x(i),t(i)}function t(a){return{close:async()=>{await u(a.target)},get liveness(){return a.liveness}}}async function u(a){let b=p(a),c=o.get(b);c&&(c.closed=!0,v(c),c.streamController.abort(),o.delete(b),m.info("opencode-subscription-closed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:c.port}))}function v(a){null!==a.watchdog&&(clearTimeout(a.watchdog),a.watchdog=null)}function w(a){v(a);let b=setTimeout(()=>{a.closed||(m.warn("opencode-subscription-heartbeat-lost",{worktreeId:a.target.worktreeId,instanceId:a.target.instanceId??a.target.cliToolId,port:a.port,afterMs:3e4}),a.streamController.abort())},3e4);b.unref?.(),a.watchdog=b}async function x(a){let b=0;for(;!a.closed;){a.streamController=new AbortController,a.gate.reset();let c="stream-ended";try{for await(let c of(await y(a),w(a),(0,g.Y5)(a.port,a.streamController.signal)))b=0,w(a),function(a,b){let c=(0,f.O2)(b,"type");("server.heartbeat"===c||"server.connected"===c)&&(a.liveness={state:"live",lastHeartbeatAt:Date.now()}),z(a,b,Date.now())}(a,c)}catch(a){c=a instanceof Error?a.message:String(a)}finally{v(a)}if(a.closed)break;a.liveness={state:"lost",since:Date.now(),reason:c},m.warn("opencode-subscription-disconnected",{worktreeId:a.target.worktreeId,instanceId:a.target.instanceId??a.target.cliToolId,port:a.port,reason:c,attempt:b}),await function(a,b){return new Promise(c=>{let d=setTimeout(c,a);d.unref?.(),b.addEventListener("abort",()=>{clearTimeout(d),c()},{once:!0})})}(function(a){let b=Math.min(a,n.length-1);return n[b]}(b),a.streamController.signal),b+=1}}async function y(a){let b=Date.now(),[c,d]=await Promise.all([(0,g.Li)(a.port),(0,g.er)(a.port)]),e=(c,d)=>{for(let e of c){let c=(0,f.O2)(e,"id");!c||a.seenDecisions.has(c)||z(a,{id:`resync_${c}`,type:d,properties:e},b)}};e(c,"permission.asked"),e(d,"question.asked")}function z(a,b,c){var d,e;let g=(0,f.O2)(b,"type");if("message.part.updated"===g){let a=(0,h.Zu)(b),c=(0,h.Dp)(b);a&&c&&(0,i.XL)(a,c)}let j=a.gate.observe(g,b);"failed"===j.kind&&m.warn("opencode-session-error",{worktreeId:a.target.worktreeId,instanceId:a.target.instanceId??a.target.cliToolId,sessionId:j.sessionId,errorName:j.errorName});let k=null;try{k=a.normalize({payload:b,receivedAt:c})}catch(a){m.error("opencode-normalize-threw",{type:g,error:a instanceof Error?a.message:String(a)});return}if(!k)return;let l=(d=k.event,e=j,"stop"===d&&"completed"!==e.kind?"suppressed"===e.kind?e.reason:"not-a-turn-end":"user_prompt_submit"===d&&"announced"!==e.kind?"suppressed"===e.kind?e.reason:"not-a-new-prompt":null);if(null!==l)return void m.info("opencode-repeat-suppressed",{worktreeId:a.target.worktreeId,instanceId:a.target.instanceId??a.target.cliToolId,sessionId:k.conversationId,event:k.event,reason:l});!function(a,b){let c=(0,f.O2)(b,"type");if("permission.asked"!==c&&"question.asked"!==c)return;let d=(0,f.Qd)(b.properties)?b.properties:{},e=(0,f.O2)(d,"id");if(e)for(a.seenDecisions.add(e);a.seenDecisions.size>256;){let b=a.seenDecisions.values().next();if(b.done)break;a.seenDecisions.delete(b.value)}}(a,b);try{a.onEvent(k)}catch(a){m.error("opencode-event-handler-failed",{type:g,error:a instanceof Error?a.message:String(a)})}}},43252:(a,b,c)=>{c.d(b,{D2:()=>G,O$:()=>B,Os:()=>D,W6:()=>p,WZ:()=>o,XE:()=>r,ZL:()=>E,g5:()=>y,iR:()=>z,jx:()=>n,q:()=>v,sI:()=>q,xM:()=>A,yc:()=>w});var d=c(55511),e=c(29021),f=c(21820),g=c(33873),h=c(8004),i=c(87447),j=c(15194),k=c(70997),l=c(13287);let m=(0,c(72626).h)("lib/hooks/hook-settings-generator"),n="/api/hooks/agent-event",o="/api/hooks/permission-request",p=5,q=5,r="CM_AUTH_TOKEN",s=l.k$,t=["Bash(pkill:*)","Bash(killall:*)","Bash(kill -9:*)"],u=(0,g.join)("scripts","hooks","cmate-agent-event.sh");function v(){return"0"!==process.env.CM_AGENT_HOOKS_INJECT}function w(){return!!(process.env[r]||process.env.CM_AUTH_TOKEN_HASH)}function x(a={}){let b=(0,g.join)((0,f.homedir)(),".commandmate","hooks");return a.directory?(0,h.T)(a.directory,b,"HookSettingsOptions.directory"):(0,h.T)(process.env.CM_AGENT_HOOKS_DIR,b,"CM_AGENT_HOOKS_DIR")}function y(a){let b=a.cliToolId??k.v;return a.instanceId??b}function z(a,b={}){let c=a.cliToolId??k.v,e=y(a),f=`${c}-${a.worktreeId}-${e}`.replace(/[^a-zA-Z0-9_-]/g,"_"),h=(0,d.createHash)("sha256").update(JSON.stringify([c,a.worktreeId,e])).digest("hex").slice(0,12);return(0,g.join)(x(b),`${f.slice(0,80)}-${h}.json`)}function A(a,b={}){return C(n,a,b)}function B(a,b={}){return C(o,a,b)}function C(a,b,c){let d=b.cliToolId??k.v,e=c.port??(0,i.D0)(),f=new URLSearchParams({tool:d,worktreeId:b.worktreeId,instanceId:y(b)});return`http://127.0.0.1:${e}${a}?${f.toString()}`}function D(){let a=(0,g.resolve)(process.cwd(),u);return(0,e.existsSync)(a)?a:null}function E(a){return`'${a.replace(/'/g,"'\\''")}'`}function F(a,b,c=p){let d={"Content-Type":"application/json"},e={type:"http",url:a,headers:d,timeout:c};return b&&(d.Authorization=`Bearer $${r}`,e.allowedEnvVars=[r]),e}function G(a,b,c={}){if(!v())return a;if(!(0,j.n6)(y(b)))return m.warn("hook-settings-invalid-instance-id",{worktreeId:b.worktreeId}),a;try{let d=function(a,b={}){let c=z(a,b);return(0,e.mkdirSync)(x(b),{recursive:!0,mode:448}),(0,e.writeFileSync)(c,`${JSON.stringify(function(a,b={}){let c=A(a,b),d=b.withAuthHeader??w(),e=()=>F(c,d);return{hooks:{SessionStart:[{hooks:[{type:"command",command:function(a,b={}){let c=A(a,b),d=b.withAuthHeader??w(),e=void 0===b.relayScriptPath?D():b.relayScriptPath;if(e)return[E(e),"--tool",E(a.cliToolId??k.v),"--event session_start --worktree-id",E(a.worktreeId),"--instance-id",E(y(a)),"--url",E(c),"--stdin-json"].join(" ");let f=d?` -H "Authorization: Bearer $${r}"`:"";return`curl -sS -m ${p} -X POST -H 'Content-Type: application/json'${f} --data-binary @- ${E(c)} >/dev/null 2>&1 || true`}(a,b),timeout:p}]}],UserPromptSubmit:[{hooks:[e()]}],Stop:[{hooks:[e()]}],Notification:[{matcher:"permission_prompt|idle_prompt",hooks:[e()]}],SessionEnd:[{hooks:[e()]}],PreToolUse:[{matcher:s,hooks:[e()]}],PostToolUse:[{matcher:s,hooks:[e()]}],PermissionRequest:[{hooks:[F(B(a,b),d,q)]}]},permissions:{deny:[...t]}}}(a,b),null,2)}
3
+ `,{mode:384}),c}(b,c);return`${E(a)} --settings ${E(d)}`}catch(c){return m.warn("hook-settings-write-failed",{worktreeId:b.worktreeId,error:c instanceof Error?c.message:String(c)}),a}}},45567:(a,b,c)=>{c.d(b,{K:()=>f,Z:()=>e});var d=c(43252);let e="CM_HOOK_URL";function f(a){let b=Object.entries(a.env).map(([a,b])=>`${a}=${(0,d.ZL)(b)}`);return 0===b.length?a.command:`${b.join(" ")} ${a.command}`}},48083:(a,b,c)=>{c.d(b,{BJ:()=>J,CE:()=>t,Fw:()=>K,HR:()=>G,P5:()=>E,R4:()=>B,_N:()=>I,ak:()=>w,dj:()=>z,ik:()=>D,je:()=>A,jl:()=>y,m5:()=>H,n4:()=>u,pI:()=>v,vm:()=>x,zA:()=>F,zM:()=>s});var d=c(24455),e=c(62887),f=c(13287),g=c(26547),h=c(67882),i=c(36051);let j=globalThis.__agentEventLastStopAt??(globalThis.__agentEventLastStopAt=new Map),k=globalThis.__agentEventLast??(globalThis.__agentEventLast=new Map),l=globalThis.__agentEventGenerationStartedAt??(globalThis.__agentEventGenerationStartedAt=new Map),m=globalThis.__agentEventPromptWaiting??(globalThis.__agentEventPromptWaiting=new Map),n=globalThis.__agentEventAskUserQuestion??(globalThis.__agentEventAskUserQuestion=new Map),o=globalThis.__agentEventRecentKeys??(globalThis.__agentEventRecentKeys=new Map),p=globalThis.__agentEventAwaitingInstruction??(globalThis.__agentEventAwaitingInstruction=new Map),q=globalThis.__agentEventLastModel??(globalThis.__agentEventLastModel=new Map),r=globalThis.__agentCapturedModelInfo??(globalThis.__agentCapturedModelInfo=new Map);function s(a,b,c,e=Date.now()){j.set((0,d.v7)(a,b,c),e)}function t(a,b,c){return j.get((0,d.v7)(a,b,c))??null}function u(a,b,c,g){let h=(0,d.v7)(a,b,c);k.set(h,g),"string"==typeof g.model&&""!==g.model&&q.set(h,g.model.slice(0,e.h9)),function(a,b){switch(b.event){case"pre_tool_use":b.detail!==f.k$&&n.delete(a);return;case"notification":"idle_prompt"===b.detail&&n.delete(a);return;case"post_tool_use":case"stop":case"user_prompt_submit":case"session_start":case"session_end":n.delete(a);return;default:b.event;return}}(h,g),"session_start"===g.event&&l.set(h,g.at),function(a,b){switch(b.event){case"notification":"permission_prompt"===b.detail?C(a,{source:"notification",message:b.message??null,at:b.at}):"idle_prompt"===b.detail&&m.delete(a);return;case"stop":case"user_prompt_submit":case"session_start":case"session_end":case"post_tool_use":m.delete(a);return;case"pre_tool_use":return;default:b.event;return}}(h,g),function(a,b){switch(b.event){case"notification":"idle_prompt"===b.detail&&p.set(a,{at:b.at,message:b.message??null});return;case"user_prompt_submit":case"session_start":case"session_end":p.delete(a);return;case"stop":case"pre_tool_use":case"post_tool_use":return;default:b.event;return}}(h,g)}function v(a,b,c){return null!==function(a,b,c){let e=(0,d.v7)(a,b,c),f=p.get(e);if(!f)return null;let g=l.get(e);return void 0!==g&&f.at<g?null:f}(a,b,c)}function w(a,b,c){return k.get((0,d.v7)(a,b,c))??null}function x(a,b,c,f){if(!f.model&&!f.effort)return;let g=(0,d.v7)(a,b,c),h=r.get(g);r.set(g,{model:f.model?f.model.slice(0,e.h9):h?.model??null,effort:f.effort??h?.effort??null})}function y(a,b,c){return(0,g.Yz)(b,q.get((0,d.v7)(a,b,c))??null,function(a,b,c){let e=r.get((0,d.v7)(a,b,c));return{model:e?.model??null,effort:e?.effort??null}}(a,b,c))}function z(a,b,c,e=Date.now()){let f=(0,d.v7)(a,b,c);l.set(f,e),m.delete(f),n.delete(f),p.delete(f),q.delete(f),r.delete(f)}function A(a,b,c){let e=(0,d.v7)(a,b,c);k.delete(e),l.delete(e),m.delete(e),n.delete(e),p.delete(e),q.delete(e),r.delete(e)}function B(a,b,c,e=Date.now()){let f=(0,d.v7)(a,b,c),g=k.get(f);if(!g)return null;let i=l.get(f);if(void 0!==i&&g.at<i||e-g.at>=18e5)return null;let j=(0,h.DA)(g.event,g.detail);return null===j?null:{...j,event:g.event,at:g.at,detail:g.detail}}function C(a,b){let c=m.get(a),d="notification"===b.source;if(c){c.message=b.message??c.message,c.toolName=b.toolName??c.toolName,d&&(c.source="notification",c.confirmedAt??=b.at);return}m.set(a,{at:b.at,source:b.source,message:b.message?b.message.slice(0,i.lY):null,toolName:b.toolName??null,confirmedAt:d?b.at:null,scraperCorroborated:!1,recorded:!1})}function D(a,b,c,e,f=Date.now()){C((0,d.v7)(a,b,c),{source:"permission-request",message:null,toolName:e,at:f})}function E(a,b,c,e=Date.now()){let f=(0,d.v7)(a,b,c),g=m.get(f);if(!g)return null;let h=l.get(f);return void 0!==h&&g.at<h||e-g.at>=18e5||null===g.confirmedAt&&e-g.at>=2e4?null:g}function F(a,b,c,e=Date.now()){let f=m.get((0,d.v7)(a,b,c));f&&(f.scraperCorroborated=!0,f.confirmedAt??=e)}function G(a,b,c){let e=m.get((0,d.v7)(a,b,c));e&&(e.recorded=!0)}function H(a,b,c){m.delete((0,d.v7)(a,b,c))}function I(a,b,c,e,f=Date.now()){n.set((0,d.v7)(a,b,c),{at:f,spec:e})}function J(a,b,c,e=Date.now()){let f=(0,d.v7)(a,b,c),g=n.get(f);if(!g)return null;let h=l.get(f);return void 0!==h&&g.at<h||e-g.at>=18e5?null:g}function K(a,b,c,e,f,g=Date.now(),h=null){if(!f)return!1;let i=[(0,d.v7)(a,b,c),e,h??"",f].join(" "),j=o.get(i);return void 0!==j&&g-j<3e3||(o.set(i,g),function(a){for(let[b,c]of o)a-c>=3e3&&o.delete(b);for(;o.size>512;){let a=o.keys().next();if(a.done)break;o.delete(a.value)}}(g),!1)}},49791:(a,b,c)=>{c.d(b,{Ei:()=>o,LV:()=>n,Li:()=>k,Ok:()=>i,Vc:()=>e,Y5:()=>p,er:()=>l,xR:()=>m});let d=(0,c(72626).h)("lib/hooks/sources/opencode/client"),e="127.0.0.1";function f(a){return`http://${e}:${a}`}function g(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}async function h(a,b){try{let c=await fetch(a,{...b,signal:AbortSignal.timeout(5e3)});if(!c.ok)return null;return await c.json()}catch(b){return d.debug("opencode-request-failed",{url:a,error:b instanceof Error?b.message:String(b)}),null}}async function i(a){let b=await h(`${f(a)}/global/health`);return g(b)&&!0===b.healthy?{healthy:!0,version:"string"==typeof b.version?b.version:null}:null}function j(a){return Array.isArray(a)?a.filter(g):[]}async function k(a){return j(await h(`${f(a)}/permission`))}async function l(a){return j(await h(`${f(a)}/question`))}async function m(a){let b=await h(`${f(a)}/session/status`);if(!g(b))return null;for(let a of Object.values(b))if(g(a)&&"busy"===a.type)return"busy";return"idle"}async function n(a,b,c,d){let e={reply:c};return d&&(e.message=d),null!==await h(`${f(a)}/permission/${encodeURIComponent(b)}/reply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async function o(a,b,c){return null!==await h(`${f(a)}/question/${encodeURIComponent(b)}/reply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({answers:c})})}async function*p(a,b){let c=await fetch(`${f(a)}/event`,{signal:b,headers:{Accept:"text/event-stream"}});if(!c.ok||!c.body)throw Error(`opencode /event responded ${c.status}`);let d=c.body.getReader(),e=new TextDecoder,g=function(){let a="",b=[],c=[],d=()=>{0!==b.length&&(c.push(b.join("\n")),b=[])},e=a=>{let c=a.endsWith("\r")?a.slice(0,-1):a;if(""===c)return void d();!c.startsWith(":")&&c.startsWith("data:")&&b.push(c.slice(5).replace(/^ /,""))};return{push(b){let d=(a+=b).indexOf("\n");for(;d>=0;)e(a.slice(0,d)),d=(a=a.slice(d+1)).indexOf("\n");return c.splice(0,c.length)},flush:()=>(""!==a&&(e(a),a=""),d(),c.splice(0,c.length))}}();try{for(;;){let{done:a,value:b}=await d.read();if(a)break;let c=e.decode(b,{stream:!0});for(let a of g.push(c)){let b=q(a);b&&(yield b)}}for(let a of g.flush()){let b=q(a);b&&(yield b)}}finally{await d.cancel().catch(()=>{})}}function q(a){try{let b=JSON.parse(a);return g(b)?b:null}catch{return null}}},50474:(a,b,c)=>{c.d(b,{y_:()=>d});function d(a){var b=a.noDecision;switch(b.kind){case"proceeds":return{safe:!0,blocksForMs:0,summary:"the agent continues with its own approval flow"};case"blocks":return{safe:!1,blocksForMs:null,summary:"the agent waits indefinitely; nothing else will unblock it"};case"blocksUntil":return{safe:!1,blocksForMs:b.timeoutMs,summary:`the agent waits up to ${b.timeoutMs}ms before continuing`}}}},52767:(a,b,c)=>{c.d(b,{r:()=>i,g:()=>h});var d=c(48524),e=c(87009),f=c(72626);let g=(0,f.h)("lib/tasks/task-transition-service");function h(a,b,c,f){let h=a.transaction(()=>{let g=(0,d.gg)(a,b);if(!g)return null;let h=g.status,i=function(a,b){switch(a){case"pending":switch(b){case"message_sent":return"running";case"send_failed":case"cancel":return"cancelled";default:return null}case"running":switch(b){case"prompt_detected":return"waiting_input";case"agent_idle":return"running";case"verify_started":return"verifying";case"send_failed":return"failed";case"cancel":return"cancelled";default:return null}case"waiting_input":switch(b){case"prompt_answered_auto":case"prompt_answered_human":case"agent_idle":return"running";case"verify_started":return"verifying";case"cancel":return"cancelled";default:return null}case"verifying":switch(b){case"verify_passed":return"succeeded";case"verify_failed":return"failed";case"verify_not_started":return"not_started";case"cancel":return"cancelled";default:return null}case"failed":case"not_started":switch(b){case"message_sent":return"running";case"verify_started":return"verifying";case"cancel":return"cancelled";default:return null}default:return null}}(h,c),j=Date.now(),k=(0,e.P)(a,{taskId:b,event:c,fromStatus:h,toStatus:i,payload:f,createdAt:j});return null===i?{task:g,fromStatus:h,toStatus:null,eventId:k}:{task:(0,d.xZ)(a,b,i,f?.runId===void 0?{}:{lastVerificationRunId:f.runId}),fromStatus:h,toStatus:i,eventId:k}})();return null===h?g.warn("task-event-unknown-task",{taskId:b,event:c}):null===h.toStatus&&g.warn("task-event-rejected",{taskId:b,event:c,fromStatus:h.fromStatus}),h}function i(a,b,c,e,f,i){try{let g=(0,d.MH)(a,b,c,e);if(!g)return null;return h(a,g.id,f,i)}catch(a){return g.warn("task-event-failed",{worktreeId:b,cliToolId:c,instanceId:e,event:f,error:a instanceof Error?a.message:String(a)}),null}}},54633:(a,b,c)=>{c.d(b,{V:()=>d});let d="copilot"},56791:(a,b,c)=>{c.r(b),c.d(b,{ACTIVE_FILTER:()=>d.ks,ACTIVE_TASK_STATUSES:()=>d.EL,AgentInstanceLimitError:()=>d.AC,CURRENT_SCHEMA_VERSION:()=>f.FT,DEFAULT_RUN_HISTORY_LIMIT:()=>d.Tu,InvalidAgentInstanceError:()=>d.ug,MAX_DISABLED_REPOSITORIES:()=>h.nc,MAX_RUN_HISTORY_DAYS:()=>d.eP,MAX_RUN_HISTORY_LIMIT:()=>d.mg,MemoDbError:()=>d.lm,RepositoryDbError:()=>h.j8,TASK_STATUSES:()=>d.Hi,TERMINAL_TASK_STATUSES:()=>d.sA,VERIFICATION_GATE_SOURCES:()=>d.Dx,VERIFICATION_TRIGGERS:()=>d.af,WORKTREE_TODO_STATUSES:()=>d.KG,addAgentInstance:()=>d.Uq,archiveAllAssistantMessages:()=>d.cD,archiveAssistantMessagesFrom:()=>d.Jj,cancelTimer:()=>d.Ud,cancelTimersByWorktree:()=>d.$$,cleanupOldTimers:()=>d.ul,clearInProgressMessageId:()=>d.YX,clearLastUserMessage:()=>d.cf,clearTimerHistory:()=>d.jf,closeDbInstance:()=>e.closeDbInstance,countAgentInstances:()=>d.fs,countDisabledRepositories:()=>h.QJ,countWorktreesByRepositoryPath:()=>h.kp,createAssistantConversation:()=>d.G4,createAssistantExecution:()=>d.hL,createAssistantMessage:()=>d.qp,createCloneJob:()=>h.tw,createGateResult:()=>d.hl,createMemo:()=>d.To,createMessage:()=>d.oH,createRepository:()=>h.vB,createTask:()=>d.UT,createTimer:()=>d.CR,createTodo:()=>d.py,createVerificationRun:()=>d.rY,createWorktreeTodo:()=>d.yy,deleteAllMessages:()=>d.pE,deleteAssistantSessionState:()=>d.z2,deleteMemo:()=>d.cP,deleteMessageById:()=>d.DF,deleteMessagesByCliTool:()=>d.lA,deleteMessagesByInstance:()=>d.Qp,deletePushSubscriptionByEndpoint:()=>d.th,deleteRepository:()=>h.oG,deleteRepositoryWorktrees:()=>d.oZ,deleteSessionState:()=>d.ZP,deleteTodo:()=>d.Ys,deleteWorktreeTodo:()=>d.vg,deleteWorktreesByIds:()=>d.Rm,disableExistingRepository:()=>h.eP,disableRepository:()=>h.l$,ensureEnvRepositoriesRegistered:()=>h.ES,filterExcludedPaths:()=>h.Ho,finishGateResult:()=>d.C8,finishVerificationRun:()=>d.u$,getActiveCloneJobByUrl:()=>h.fD,getActiveTask:()=>d.__,getActiveTaskForInstance:()=>d.MH,getAgentInstance:()=>d.BN,getAgentInstances:()=>d.m0,getAliasedWorktreeIds:()=>d.r3,getAllPushSubscriptions:()=>d.Se,getAllRepositories:()=>h.Yg,getAllRepositoriesWithWorktreeCount:()=>h._D,getAllTodos:()=>d.Tk,getAllWorktreeAliases:()=>d.fX,getAllWorktreeIds:()=>d.nO,getAllWorktreePathIds:()=>d.Sj,getAssistantConversationById:()=>d.iT,getAssistantConversationByRepositoryAndCliTool:()=>d.gp,getAssistantExecutionById:()=>d.$r,getAssistantMessageById:()=>d.yE,getAssistantMessages:()=>d.BE,getAssistantSessionState:()=>d.qK,getCloneJob:()=>h.bM,getCloneJobsByStatus:()=>h.n_,getCurrentVersion:()=>f.Mj,getDailyReport:()=>d.ap,getDbInstance:()=>e.getDbInstance,getDefaultDbPath:()=>g.$b,getExcludedRepositories:()=>h.lS,getExcludedRepositoryPaths:()=>h.pr,getInitialBranch:()=>d.p4,getIssueDbPath:()=>g.zm,getLastAssistantMessageAt:()=>d.nP,getLastMessage:()=>d.sy,getLastUserMessage:()=>d.r8,getLatestAssistantExecutionByConversation:()=>d.of,getLegacyDbPaths:()=>q,getMemoById:()=>d.DN,getMemosByWorktreeId:()=>d.pZ,getMessageById:()=>d.kA,getMessages:()=>d.VL,getMessagesByDateRange:()=>d.lr,getMigrationHistory:()=>f.PS,getPendingTimerCountByWorktree:()=>d.GF,getPendingTimers:()=>d._O,getPushSubscriptionByEndpoint:()=>d.CF,getPushSubscriptionsForKind:()=>d.gn,getRepositories:()=>d.NV,getRepositoryById:()=>h.r,getRepositoryByNormalizedUrl:()=>h.Uj,getRepositoryByPath:()=>h.Dp,getRunningAssistantExecutionByConversation:()=>d.ce,getRunningVerificationRun:()=>d.WZ,getSessionState:()=>d.y1,getTask:()=>d.gg,getTimerById:()=>d.kx,getTimersByWorktree:()=>d.DP,getTodoById:()=>d.Nr,getTodosByRepositoryId:()=>d.ob,getTodosByWorktreeId:()=>d.fr,getVerificationRun:()=>d.J6,getWorktreeAliases:()=>d.Q2,getWorktreeById:()=>d.Ui,getWorktreeIdsByRepository:()=>d.P9,getWorktreeTodoById:()=>d.eN,getWorktrees:()=>d.vi,getWorktreesByRepository:()=>d.uJ,initDatabase:()=>d.s4,isTerminalTaskStatus:()=>d.uB,isWorktreeTodoStatus:()=>d.yT,listRunningAssistantExecutions:()=>d.b2,listRunningVerificationRuns:()=>d.Fi,listTaskEvents:()=>d.HB,listTasks:()=>d.Vk,listVerificationRuns:()=>d.Mt,listVerificationRunsForPeriod:()=>d.UE,markPendingPromptsAsAnswered:()=>d.PL,migrateDbIfNeeded:()=>r,migrateWorktreeIdPreservingChildren:()=>d._h,recomputeLastUserMessage:()=>d.jp,recordAnsweredPrompt:()=>d.pG,recordWorktreeAlias:()=>d.xJ,recoverStuckSendingTimers:()=>d.Xm,registerAndFilterRepositories:()=>h.$G,removeAgentInstance:()=>d.NU,reorderMemos:()=>d.nQ,reorderWorktreeTodos:()=>d.yb,resolveAndValidatePath:()=>p,resolveRepositoryPath:()=>h.mE,resolveWorktreeIdWithAlias:()=>d.l0,restoreRepository:()=>h.RS,rollbackMigrations:()=>f.Wy,runMigrations:()=>f.vI,saveDailyReport:()=>d.tt,saveInitialBranch:()=>d.GA,setAgentInstances:()=>d.Cs,setInProgressMessageId:()=>d.OF,setRepositoryEnabled:()=>h.iQ,updateAssistantConversation:()=>d.xR,updateAssistantExecution:()=>d.az,updateAssistantMessageStatus:()=>d.nZ,updateAssistantSessionState:()=>d.PP,updateCliToolId:()=>d.WU,updateCloneJob:()=>h.k5,updateDailyReportContent:()=>d.IF,updateFavorite:()=>d.O,updateLastUserMessage:()=>d.EU,updateLastViewedAt:()=>d.HZ,updateMemo:()=>d.UY,updateMessageContent:()=>d.e8,updatePromptData:()=>d.cw,updatePushSubscriptionPreferences:()=>d.jJ,updateRepository:()=>h.Ir,updateSelectedAgents:()=>d.DC,updateSessionState:()=>d.gb,updateStatus:()=>d.yB,updateTimerStatus:()=>d.j2,updateTodo:()=>d.uy,updateVibeLocalContextWindow:()=>d.s,updateVibeLocalModel:()=>d.iu,updateWorktreeDescription:()=>d.hq,updateWorktreeLink:()=>d.z1,updateWorktreeTodo:()=>d.bl,upsertPushSubscription:()=>d.jA,upsertWorktree:()=>d.ZL,validateDbPath:()=>g.Sv,validateRepositoryPath:()=>h.Ux,validateSchema:()=>f.i6});var d=c(90444),e=c(88807),f=c(18698),g=c(20416),h=c(10406),i=c(29021),j=c.n(i),k=c(33873),l=c.n(k),m=c(21820),n=c(7956);let o=(0,c(72626).h)("db-migration-path");function p(a,b){try{if(!j().existsSync(a))return null;let c=j().realpathSync(a);if((0,n.fW)(c))return o.warn(`[Security] ${b} points to system directory, skipping: ${c}`),null;return c}catch{return o.warn(`[Security] Failed to resolve ${b}: ${a}`),null}}function q(){let a=[];a.push(l().join(process.cwd(),"data","db.sqlite")),a.push(l().join(process.cwd(),"data","cm.db")),a.push(l().join((0,m.homedir)(),".commandmate","data","db.sqlite"));let b=process.env.DATABASE_PATH;if(b)try{let c=l().resolve(b);(0,n.fW)(c)?o.warn(`[Security] Skipping DATABASE_PATH in system directory: ${c}`):a.push(b)}catch{o.warn(`[Security] Invalid DATABASE_PATH: ${b}`)}return a}function r(a){let b=l().resolve(a);if((0,n.fW)(b))throw Error(`Security error: Target path cannot be in system directory: ${b}`);if(j().existsSync(a)){let b=p(a,"target path");if(b)return{migrated:!1,targetPath:b}}for(let a of q()){let c=p(a,"legacy path");if(!c)continue;let d=`${c}.bak`;j().copyFileSync(c,d),j().chmodSync(d,384);let e=l().dirname(b);return j().existsSync(e)||j().mkdirSync(e,{recursive:!0,mode:448}),j().copyFileSync(c,b),o.info(`[Migration] Database migrated from ${c} to ${b}`),o.info(`[Migration] Backup created at ${d}`),{migrated:!0,sourcePath:c,targetPath:b,backupPath:d}}return{migrated:!1,targetPath:b}}},57510:(a,b,c)=>{c.d(b,{KR:()=>e,NZ:()=>n,O2:()=>j,Qd:()=>m,Uq:()=>o,Wv:()=>l,ex:()=>i,mJ:()=>f,oJ:()=>k,qU:()=>g});var d=c(62887);function e(a,b,c){return d=>d===a?{event:b,detail:c??null}:null}function f(a){return Object.entries(a).map(([a,b])=>e(a,b))}function g(a,b,c){for(let d of a){let a=d(b,c);if(a)return a}return null}let h=globalThis.__agentSourceUnknownEvents??=new Map;function i(a,b){let c=h.get(a)??{count:0,names:[]};c.count+=1;let d=b??"(unnamed)";!c.names.includes(d)&&c.names.length<32&&c.names.push(d),h.set(a,c)}function j(a,b){let c=a[b];return"string"==typeof c&&""!==c?c:null}function k(a,b){for(let c of b){let b=j(a,c);if(null!==b)return b}return null}function l(a){return null===a||""===a?null:a.slice(0,d.h9)}function m(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function n(a,b){let c=a;for(let a of b){if(!m(c))return null;c=c[a]}return"string"==typeof c&&""!==c?c:null}function o(a,b,c,e={}){var f;let g=void 0!==a.detail&&null!==a.detail?l(a.detail):l(e.detail?.(a.event,b)??null);return{event:a.event,detail:g,conversationId:a.conversationId??(e.conversationId?k(b,e.conversationId):null),toolCallId:a.toolCallId??(e.toolCallId?k(b,e.toolCallId):null),model:null===(f=e.extractModel?.(b)??(e.modelFields?k(b,e.modelFields):null))||""===f?null:f.slice(0,d.h9),raw:b,receivedAt:c}}},62887:(a,b,c)=>{c.d(b,{b0:()=>d,h9:()=>f,o0:()=>e});let d=["stop","notification","session_start","user_prompt_submit","session_end","pre_tool_use","post_tool_use"];function e(a){return"string"==typeof a&&d.includes(a)}let f=128},66101:(a,b,c)=>{c.d(b,{U:()=>h,k:()=>i});var d=c(62887),e=c(57510),f=c(25071);let g={close:async()=>{},liveness:{state:"unknown"}};function h(a){let b=a.nativeEventNameFields??["hook_event_name"];return{cliToolId:a.cliToolId,transport:"push",noDecision:a.noDecision,capabilities:a.capabilities,normalizeEvent(c){let f=c.receivedAt??Date.now(),g=b.length>0?(0,e.oJ)(c.payload,b):null;if(null!=c.event&&(0,d.o0)(c.event))return(0,e.Uq)({event:c.event},c.payload,f,{detail:a.extractDetail,conversationId:a.conversationIdFields,toolCallId:a.toolCallIdFields,modelFields:a.modelFields,extractModel:a.extractModel});let h=(0,e.qU)(a.mappers,g,c.payload);return h?(0,e.Uq)(h,c.payload,f,{detail:a.extractDetail,conversationId:a.conversationIdFields,toolCallId:a.toolCallIdFields,modelFields:a.modelFields,extractModel:a.extractModel}):((0,e.ex)(a.cliToolId,g),null)},parsePermissionRequest:a.parsePermissionRequest,parseQuestion:a.parseQuestion,encodeVerdict:b=>({kind:"responseBody",body:a.encodeVerdict(b)}),prepareLaunch:a.prepareLaunch,subscribe:async()=>g,async decide(b,c,d){(0,f.o4)(b,c.id,a.encodeVerdict(d))},listPending:async a=>(0,f.qK)(a),probeActivity:async()=>null,liveness:()=>({state:"unknown"})}}function i(a){let b=a.nativeEventNameFields??["type"];return{cliToolId:a.cliToolId,transport:"pull",noDecision:a.noDecision,capabilities:a.capabilities,normalizeEvent(c){let f=c.receivedAt??Date.now(),g=b.length>0?(0,e.oJ)(c.payload,b):null;if(null!=c.event&&(0,d.o0)(c.event))return(0,e.Uq)({event:c.event},c.payload,f,{detail:a.extractDetail,conversationId:a.conversationIdFields,toolCallId:a.toolCallIdFields,modelFields:a.modelFields,extractModel:a.extractModel});let h=(0,e.qU)(a.mappers,g,c.payload);return h?(0,e.Uq)(h,c.payload,f,{detail:a.extractDetail,conversationId:a.conversationIdFields,toolCallId:a.toolCallIdFields,modelFields:a.modelFields,extractModel:a.extractModel}):((0,e.ex)(a.cliToolId,g),null)},parsePermissionRequest:a.parsePermissionRequest,parseQuestion:a.parseQuestion,encodeVerdict:()=>({kind:"outOfBand"}),prepareLaunch:a.prepareLaunch??(a=>({command:a.executablePath,settingsPath:null,env:{}})),subscribe:a.subscribe,decide:a.decide,listPending:a.listPending,probeActivity:a.probeActivity,liveness:a.liveness}}},67882:(a,b,c)=>{c.d(b,{DA:()=>e,O_:()=>f,Oh:()=>d,_K:()=>g});let d={PROMPT_SUBMIT:"hook_prompt_submit",STOP:"hook_stop",PERMISSION_PROMPT:"hook_permission_prompt",PERMISSION_REQUEST:"hook_permission_request",IDLE_PROMPT:"hook_idle_prompt",PRE_TOOL_USE:"hook_pre_tool_use",POST_TOOL_USE:"hook_post_tool_use"};function e(a,b){switch(a){case"user_prompt_submit":return{status:"running",reason:d.PROMPT_SUBMIT};case"pre_tool_use":return{status:"running",reason:d.PRE_TOOL_USE};case"post_tool_use":return{status:"running",reason:d.POST_TOOL_USE};case"stop":return{status:"ready",reason:d.STOP};case"notification":if("permission_prompt"===b)return{status:"waiting",reason:d.PERMISSION_PROMPT};if("idle_prompt"===b)return{status:"ready",reason:d.IDLE_PROMPT};return null;default:return null}}function f(a){switch(a){case"waiting":return{isWaitingForResponse:!0,isProcessing:!1};case"running":return{isWaitingForResponse:!1,isProcessing:!0};default:return{isWaitingForResponse:!1,isProcessing:!1}}}function g(a){return a.isSessionRunning?a.isWaitingForResponse?"waiting":a.isProcessing?"running":"ready":null}},70997:(a,b,c)=>{c.d(b,{v:()=>d});let d="claude"},75356:(a,b,c)=>{c.d(b,{Dp:()=>l,Tm:()=>f,Zu:()=>m,aF:()=>e,lu:()=>o,pV:()=>i,vE:()=>g});var d=c(57510);let e="permission_prompt",f="question_prompt",g="error";function h(a){return(0,d.Qd)(a.properties)?a.properties:{}}function i(a){let b=h(a).info;return(0,d.Qd)(b)?(0,d.NZ)(b,["model","modelID"])??(0,d.NZ)(b,["model","id"]):null}function j(a){return(0,d.NZ)(h(a),["part","state","status"])}function k(a){return"tool"===(0,d.NZ)(h(a),["part","type"])}function l(a){return(0,d.NZ)(h(a),["part","tool"])}function m(a){return(0,d.NZ)(h(a),["part","callID"])}let n=["completed","error"],o=[(0,d.KR)("session.idle","stop"),(0,d.KR)("session.created","session_start"),(0,d.KR)("session.deleted","session_end"),(a,b)=>"message.updated"===a&&"user"===(0,d.NZ)(h(b),["info","role"])?{event:"user_prompt_submit"}:null,(a,b)=>"message.part.updated"===a&&k(b)&&"running"===j(b)?{event:"pre_tool_use",detail:(0,d.Wv)(l(b)),toolCallId:m(b)}:null,(a,b)=>"message.part.updated"===a&&k(b)&&n.includes(j(b)??"")?{event:"post_tool_use",detail:(0,d.Wv)(l(b)),toolCallId:m(b)}:null,(0,d.KR)("permission.asked","notification",e),(0,d.KR)("question.asked","notification",f),(0,d.KR)("session.error","notification",g)].map(function(a){return(b,c)=>{let e=a(b,c);return e?{...e,conversationId:e.conversationId??(0,d.NZ)(h(c),["sessionID"])}:null}})},76835:(a,b,c)=>{c.d(b,{F:()=>d});let d="antigravity"},77904:(a,b,c)=>{c.d(b,{o:()=>d});let d="gemini"},81254:(a,b,c)=>{function d(a){return"answer_only"===a||"answer_then_enter"===a}c.d(b,{LT:()=>e,MI:()=>d,XF:()=>f});let e="unclassified";function f(a){return null!=a&&a.type!==e}},84574:(a,b,c)=>{c.d(b,{CU:()=>w,hC:()=>u,jp:()=>x,kE:()=>v});var d=c(91645),e=c(29021),f=c(21820),g=c(33873),h=c(8004),i=c(24455),j=c(43252),k=c(72626),l=c(49791);let m=(0,k.h)("lib/hooks/sources/opencode/ports"),n={min:4200,max:4299},o=n.max-n.min+1,p=globalThis.__opencodePortAssignments??=new Map;function q(a){return(0,i.v7)(a.worktreeId,a.cliToolId,a.instanceId)}function r(){let a=(0,g.join)((0,f.homedir)(),".commandmate","opencode-ports.json");return(0,h.T)(process.env.CM_OPENCODE_PORT_FILE,a,"CM_OPENCODE_PORT_FILE")}function s(){try{let a=JSON.parse((0,e.readFileSync)(r(),"utf8"));if("object"!=typeof a||null===a||Array.isArray(a))return{};let b={};for(let[c,d]of Object.entries(a))!("object"!=typeof d||null===d||Array.isArray(d))&&"number"==typeof d.port&&Number.isInteger(d.port)&&d.port>0&&d.port<65536&&"string"==typeof d.worktreePath&&(b[c]={port:d.port,worktreePath:d.worktreePath,updatedAt:"number"==typeof d.updatedAt?d.updatedAt:0});return b}catch{return{}}}function t(a){let b=r();try{(0,e.mkdirSync)((0,g.dirname)(b),{recursive:!0}),(0,e.writeFileSync)(b,`${JSON.stringify(a,null,2)}
4
+ `,{mode:384})}catch(a){m.warn("opencode-port-file-write-failed",{path:b,error:a instanceof Error?a.message:String(a)})}}function u(a){return p.get(q(a))?.port??null}function v(a){let b=q(a);p.delete(b);let c=s();b in c&&(delete c[b],t(c))}async function w(a,b){if(!(0,j.q)())return null;let c=u(a);if(null!==c)return c;let e=q(a),f=s()[e],g=f?.port,h=function(a){let b=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return n.min+b%o}(q(a)),c=[];for(let a=0;a<o;a+=1)c.push(n.min+(b-n.min+a)%o);return c}(a);for(let c of void 0!==g?[g,...h.filter(a=>a!==g)]:h)if(await function(a){return new Promise(b=>{let c=(0,d.createServer)();c.once("error",()=>b(!1)),c.listen(a,l.Vc,()=>{c.close(()=>b(!0))})})}(c))return!function(a,b,c,d=Date.now()){let e=q(a),f={port:b,worktreePath:c,updatedAt:d};p.set(e,f);let g=s();g[e]=f,t(g)}(a,c,b),m.info("opencode-port-allocated",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:c}),c;return m.warn("opencode-port-exhausted",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,range:`${n.min}-${n.max}`}),null}async function x(a,b){if(!(0,j.q)())return null;let c=u(a);if(null!==c)return c;let d=s()[q(a)];if(!d)return null;if(d.worktreePath!==b)return m.info("opencode-port-recovery-path-mismatch",{worktreeId:a.worktreeId,recorded:d.worktreePath}),null;let e=await (0,l.Ok)(d.port);return e?(p.set(q(a),d),m.info("opencode-port-recovered",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:d.port,version:e.version}),d.port):(m.info("opencode-port-recovery-unhealthy",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:d.port}),null)}},85322:(a,b,c)=>{c.d(b,{k:()=>d});let d="opencode"},85965:(a,b,c)=>{c.d(b,{cC:()=>s});var d=c(62887),e=c(43252),f=c(72626),g=c(66101),h=c(49791),i=c(75356),j=c(98211),k=c(84574),l=c(42545),m=c(85322);let n=(0,f.h)("lib/hooks/sources/opencode/source"),o=d.b0;async function p(a,b,c){let d=a.instanceId??a.cliToolId;if("abstain"===c.kind)return void n.warn("opencode-verdict-abstained",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id,consequence:"the agent waits indefinitely; nothing else will unblock it"});let e=(0,k.hC)(a);if(null===e)return void n.warn("opencode-verdict-undeliverable-no-port",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id});if("question"===b.kind){if("answer"!==c.kind)return void n.info("opencode-question-not-answerable",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id,verdict:c.kind});let f=await (0,h.Ei)(e,b.id,c.answers);return void n.info("opencode-question-replied",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id,delivered:f})}let f=function(a){switch(a.kind){case"allowOnce":return"once";case"allowAlways":return"always";case"deny":return"reject";case"answer":case"abstain":return null}}(c);if(null===f)return;let g=await (0,h.LV)(e,b.id,f,"deny"===c.kind?c.message:void 0);n.info("opencode-permission-replied",{worktreeId:a.worktreeId,instanceId:d,decisionId:b.id,reply:f,delivered:g})}async function q(a){let b=(0,k.hC)(a);if(null===b)return[];let c=Date.now(),[d,e]=await Promise.all([(0,h.Li)(b),(0,h.er)(b)]),f=[];for(let a of d){let b=(0,j.Lu)(a,c);b&&f.push(b)}for(let a of e){let b=(0,j.AB)(a,c);b&&f.push(b)}return f}async function r(a){let b=(0,k.hC)(a);return null===b?null:(0,h.xR)(b)}let s=(0,g.k)({cliToolId:m.k,noDecision:{kind:"blocks"},capabilities:{supportedEvents:o,configScope:"none",decisionTimeoutSeconds:null},mappers:i.lu,nativeEventNameFields:["type"],conversationIdFields:[],extractModel:i.pV,parsePermissionRequest:j.FZ,parseQuestion:j.v1,subscribe:(a,b)=>(0,l.bP)(a,b,a=>s.normalizeEvent(a)),decide:p,listPending:q,probeActivity:r,liveness:a=>(0,l.lf)(a),prepareLaunch:function({target:a,executablePath:b}){let c={command:b,settingsPath:null,env:{}};if(!(0,e.q)())return c;let d=(0,k.hC)(a);return null===d?c:{command:`${(0,e.ZL)(b)} --port ${d} --hostname ${h.Vc}`,settingsPath:null,env:{}}}})},97709:(a,b,c)=>{c.d(b,{VM:()=>al});var d=c(2466),e=c(13287),f=c(62887),g=c(43252),h=c(66101),i=c(57510),j=c(38367),k=c(70997);let l={};function m(a){return"allowOnce"!==a.kind?l:{hookSpecificOutput:{hookEventName:e.l9,decision:{behavior:"allow"}}}}let n=(0,h.U)({cliToolId:k.v,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:f.b0,configScope:"per-instance",decisionTimeoutSeconds:g.sI},mappers:(0,i.mJ)(j.WK),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:j.ue,modelFields:["model"],extractDetail:j.Jp,parsePermissionRequest:a=>(0,e.ss)(a),parseQuestion:a=>(0,d.ek)(a),encodeVerdict:m,prepareLaunch:({target:a,executablePath:b})=>{let c=(0,g.D2)(b,{worktreeId:a.worktreeId,instanceId:a.instanceId,cliToolId:a.cliToolId}),d=(0,g.q)()&&c!==b?(0,g.iR)({worktreeId:a.worktreeId,instanceId:a.instanceId,cliToolId:a.cliToolId}):null;return{command:c,settingsPath:d,env:{}}}});var o=c(21758),p=c(54633);let q={},r=(0,h.U)({cliToolId:p.V,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:["stop","session_start","session_end","user_prompt_submit","post_tool_use"],configScope:"global-singleton",decisionTimeoutSeconds:o.TV},mappers:(0,i.mJ)(j.WK),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:j.ue,extractDetail:j.Jp,parsePermissionRequest:function(a){if(!(0,i.Qd)(a)||a.hook_event_name!==o.cN)return null;let b=(0,i.O2)(a,"tool_name");return b&&!(b.length>e.vy)&&(0,i.Qd)(a.tool_input)?{toolName:b,toolInput:a.tool_input,promptId:null,sessionId:(0,i.O2)(a,"session_id"),permissionMode:null,permissionSuggestions:null}:null},parseQuestion:()=>null,encodeVerdict:function(a){return"allowOnce"===a.kind?{hookSpecificOutput:{hookEventName:o.cN,permissionDecision:"allow"}}:"deny"===a.kind?{hookSpecificOutput:{hookEventName:o.cN,permissionDecision:"deny",permissionDecisionReason:a.message??"denied by CommandMate"}}:q},prepareLaunch:({target:a,executablePath:b})=>(0,o.Rv)(b,a)});var s=c(15194);let t={ToolPermission:"permission_prompt"};var u=c(33873),v=c(72626),w=c(45567),x=c(29021),y=c(7956);function z(a){if(!(0,x.existsSync)(a))return null;try{let b=JSON.parse((0,x.readFileSync)(a,"utf8"));return(0,i.Qd)(b)?b:null}catch{return null}}function A(a,b){if((0,y.Mb)(a))throw Error(`Refusing to write inside a virtual filesystem: ${a} (a recursive mkdir under /proc, /sys or /dev never returns on Linux; Issue #1774)`);(0,x.mkdirSync)((0,u.dirname)(a),{recursive:!0,mode:448}),(0,x.writeFileSync)(a,`${JSON.stringify(b,null,2)}
5
+ `,{mode:384})}var B=c(77904);let C=(0,v.h)("lib/hooks/sources/gemini/settings-generator"),D=1e3*g.W6,E=[["SessionStart","session_start"],["BeforeAgent","user_prompt_submit"],["AfterAgent","stop"],["Notification","notification"],["SessionEnd","session_end"]];function F(a,b){return a.includes("cmate-agent-event.sh")&&a.includes(`--tool ${B.o}`)&&a.includes(`--worktree-id ${(0,g.ZL)(b)}`)}let G=(0,h.U)({cliToolId:B.o,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:["session_start","user_prompt_submit","stop","notification","session_end"],configScope:"per-worktree",decisionTimeoutSeconds:0},mappers:(0,i.mJ)({SessionStart:"session_start",SessionEnd:"session_end",BeforeAgent:"user_prompt_submit",AfterAgent:"stop",BeforeTool:"pre_tool_use",AfterTool:"post_tool_use",Notification:"notification"}),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:[],extractDetail:function(a,b){if("notification"!==a)return(0,j.Jp)(a,b);let c=(0,i.O2)(b,"notification_type");return null===c?null:(0,i.Wv)(t[c]??c)},parsePermissionRequest:()=>null,parseQuestion:()=>null,encodeVerdict:()=>({}),prepareLaunch:function({target:a,executablePath:b,worktreePath:c}){let d={worktreeId:a.worktreeId,instanceId:a.instanceId,cliToolId:B.o},e=(0,s.n6)(a.instanceId??B.o)?function(a,b){if(!(0,g.q)())return null;let c=(0,g.Os)();if(!c)return C.warn("gemini-hook-relay-missing",{worktreeId:b.worktreeId}),null;let d=(0,u.join)(a,".gemini","settings.json");try{let a=z(d),e=function(a,b){let c={};for(let[e,f]of E){var d;c[e]=[{hooks:[{type:"command",command:(d=b.worktreeId,[(0,g.ZL)(a),"--tool",B.o,"--event",f,"--worktree-id",(0,g.ZL)(d),"--stdin-json"].join(" ")),timeout:D}]}]}return c}(c,b);return A(d,function(a,b,c){let d=(0,i.Qd)(a?.hooks)?a.hooks:{},e={};for(let[a,b]of Object.entries(d)){if(!Array.isArray(b)){e[a]=b;continue}let d=b.filter(a=>!function(a,b){if(!(0,i.Qd)(a))return!1;let c=a.hooks;return Array.isArray(c)?c.length>0&&c.every(a=>(0,i.Qd)(a)&&"string"==typeof a.command&&F(a.command,b)):"string"==typeof a.command&&F(a.command,b)}(a,c));e[a]=d.length===b.length?b:d}for(let[a,c]of Object.entries(b)){let b=e[a];e[a]=Array.isArray(b)?[...b,...c]:[...c]}return{...a,hooks:e}}(a,e,b.worktreeId)),d}catch(a){return C.warn("gemini-hook-settings-write-failed",{worktreeId:b.worktreeId,error:a instanceof Error?a.message:String(a)}),null}}(c,d):null,{command:f,env:h}=function(a,b,c={}){if(!(0,g.q)())return{command:a,env:{}};if(!(0,s.n6)((0,g.g5)(b)))return C.warn("gemini-hook-invalid-instance-id",{worktreeId:b.worktreeId}),{command:a,env:{}};let d=(0,g.xM)({...b,cliToolId:B.o},c);return{command:(0,g.ZL)(a),env:{[w.Z]:d}}}(b,d);return{command:f,settingsPath:e,env:h}}});var H=c(21820),I=c(76835);let J=(0,v.h)("lib/hooks/sources/antigravity/hooks-config"),K=[["SessionStart","session_start"],["PostToolUse","post_tool_use"],["Stop","stop"]],L="CM_PERMISSION_HOOK_URL",M=g.sI,N=new Set(["PreToolUse","PostToolUse"]),O={decision:"ask"},P=(0,h.U)({cliToolId:I.F,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:["session_start","post_tool_use","stop"],configScope:"global-singleton",decisionTimeoutSeconds:M},mappers:[],nativeEventNameFields:[],conversationIdFields:["conversationId"],toolCallIdFields:[],modelFields:["modelName"],extractDetail:(a,b)=>"pre_tool_use"===a||"post_tool_use"===a?(0,i.Wv)((0,i.NZ)(b,["toolCall","name"])):null,parsePermissionRequest:function(a){if(!(0,i.Qd)(a))return null;let b=a.toolCall;if(!(0,i.Qd)(b))return null;let c=(0,i.O2)(b,"name");return c&&!(c.length>e.vy)&&(0,i.Qd)(b.args)?{toolName:c,toolInput:b.args,promptId:null,sessionId:(0,i.O2)(a,"conversationId"),permissionMode:null,permissionSuggestions:null}:null},parseQuestion:()=>null,encodeVerdict:function(a){return"allowOnce"===a.kind?{decision:"allow"}:"deny"===a.kind?{decision:"deny",reason:a.message??""}:{...O}},prepareLaunch:({target:a,executablePath:b})=>{let c=function(a={}){if(!(0,g.q)())return null;let b=(0,g.Os)();if(!b)return J.warn("antigravity-hook-relay-missing"),null;let c=function(a={}){return a.path??(0,u.join)((0,H.homedir)(),".gemini","config","hooks.json")}(a);try{var d;let a=z(c);return A(c,(d=function(a){let b={};for(let[c,d]of K){let e={type:"command",command:[(0,g.ZL)(a),"--tool",I.F,"--event",d,"--stdin-json"].join(" "),timeout:g.W6};b[c]=N.has(c)?[{matcher:"*",hooks:[e]}]:[e]}return b.PreToolUse=[{matcher:"*",hooks:[{type:"command",command:function(){let a=`"$${L}"`,b=`printf '%s' ${(0,g.ZL)('{"decision":"ask"}')}`;return`if [ -z "\${${L}:-}" ]; then cat >/dev/null; ${b}; exit 0; fi; set -- -sS -f -m 4 -X POST -H 'Content-Type: application/json'; if [ -n "\${${g.XE}:-}" ]; then set -- "$@" -H "Authorization: Bearer $${g.XE}"; fi; out=$(curl "$@" --data-binary @- ${a} 2>/dev/null); case "$out" in '{'*'"decision"'*) printf '%s' "$out" ;; *) ${b} ;; esac`}(),timeout:g.sI}]}],b}(b),{...a,commandmate:d})),c}catch(a){return J.warn("antigravity-hooks-config-write-failed",{error:a instanceof Error?a.message:String(a)}),null}}(),{command:d,env:e}=function(a,b,c={}){if(!(0,g.q)())return{command:a,env:{}};if(!(0,s.n6)((0,g.g5)(b)))return J.warn("antigravity-hook-invalid-instance-id",{worktreeId:b.worktreeId}),{command:a,env:{}};let d={...b,cliToolId:I.F};return{command:(0,g.ZL)(a),env:{[w.Z]:(0,g.xM)(d,c),[L]:(0,g.O$)(d,c)}}}(b,{worktreeId:a.worktreeId,instanceId:a.instanceId,cliToolId:I.F});return{command:d,settingsPath:c,env:e}}});var Q=c(8004),R=c(87447),S=c(66007),T=c(2734);let U=(0,v.h)("lib/hooks/sources/codex/hooks-config"),V="127.0.0.1",W="commandmate:agent-hooks",X="CODEX_HOME",Y="CM_AGENT_WORKTREE_ID",Z="CM_AGENT_INSTANCE_ID",$="CM_HOOK_URL",_="CM_PERMISSION_HOOK_URL",aa={SessionStart:"session_start",UserPromptSubmit:"user_prompt_submit",Stop:"stop",SessionEnd:"session_end"},ab="PermissionRequest",ac=Object.values(aa);function ad(a={}){let b=(0,u.join)((0,H.homedir)(),".codex");return a.codexHome?(0,Q.T)(a.codexHome,b,"CodexHookOptions.codexHome"):(0,Q.T)(process.env[X],b,X)}function ae(a,b){return`http://${V}:\${CM_PORT:-3000}${a}${b}`}let af={},ag=(0,h.U)({cliToolId:T.c,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:ac,configScope:"global-singleton",decisionTimeoutSeconds:5},mappers:(0,i.mJ)(j.WK),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:j.ue,modelFields:["model"],extractDetail:j.Jp,parsePermissionRequest:a=>(0,e.ss)(a),parseQuestion:()=>null,encodeVerdict:function(a){return"allowOnce"===a.kind?{hookSpecificOutput:{hookEventName:ab,decision:{behavior:"allow"}}}:"deny"===a.kind?{hookSpecificOutput:{hookEventName:ab,decision:{behavior:"deny",message:a.message??""}}}:af},prepareLaunch:({target:a,executablePath:b})=>(function(a,b,c={}){let d={command:a,settingsPath:null,env:{}};if(!(0,g.q)())return d;let e=b.instanceId??T.c;if(!(0,S.h6)(b.worktreeId)||!(0,s.n6)(e))return U.warn("codex-hooks-invalid-correlation-key",{worktreeId:b.worktreeId}),d;try{let f=function(a={}){let b=function(a={}){return(0,u.join)(ad(a),"hooks.json")}(a),c=null,d=null;if((0,x.existsSync)(b))try{d=(0,x.readFileSync)(b,"utf8"),c=JSON.parse(d)}catch(a){return U.warn("codex-hooks-config-unreadable",{settingsPath:b,error:a instanceof Error?a.message:String(a)}),null}let e=`${JSON.stringify(function(a,b){let c=(0,i.Qd)(a)?{...a}:{},d=(0,i.Qd)(c.hooks)?c.hooks:{},e={};for(let[a,b]of Object.entries(d))e[a]=Array.isArray(b)?b.map(a=>{if(!(0,i.Qd)(a)||!Array.isArray(a.hooks))return a;let b=a.hooks.filter(a=>!((0,i.Qd)(a)&&"string"==typeof a.command&&a.command.includes(W)));return b.length===a.hooks.length?a:{...a,hooks:b}}).filter(a=>!((0,i.Qd)(a)&&Array.isArray(a.hooks))||a.hooks.length>0):b;for(let[a,c]of Object.entries(b.hooks)){let b=e[a];(void 0===b||Array.isArray(b))&&(e[a]=[...b??[],...c])}return c.hooks=e,c}(c,function(a={}){let b=(b,c)=>({hooks:[{type:"command",command:function(a,b={}){let c=` # ${W}`,d=void 0===b.relayScriptPath?(0,g.Os)():b.relayScriptPath;if(d)return[(0,g.ZL)(d),"--tool",T.c,"--event",a,"--worktree-id",`"$${Y}"`,"--instance-id",`"$${Z}"`,"--stdin-json"].join(" ")+c;let e=b.withAuthHeader??(0,g.yc)()?` -H "Authorization: Bearer $${g.XE}"`:"",f=`"\${${$}:-${ae(g.jx,"")}}?tool=${T.c}\${${Y}:+&worktreeId=$${Y}}\${${Z}:+&instanceId=$${Z}}"`;return`curl -sS -f -m ${g.W6} -X POST -H 'Content-Type: application/json'${e} --data-binary @- ${f} >/dev/null 2>&1 || true${c}`}(b,a),timeout:c}]}),c={};for(let[a,d]of Object.entries(aa)){let e="SessionEnd"===a?3:g.W6;c[a]=[b(d,e)]}return c[ab]=[{hooks:[{type:"command",command:function(a={}){let b=a.withAuthHeader??(0,g.yc)()?` -H "Authorization: Bearer $${g.XE}"`:"",c=`"\${${_}:-${ae(g.WZ,`?tool=${T.c}`)}}"`;return`curl -sS -f -m ${g.sI} -X POST -H 'Content-Type: application/json'${b} --data-binary @- ${c} 2>/dev/null || true # ${W}`}(a),timeout:g.sI}]}],{hooks:c}}(a)),null,2)}
6
+ `;return d===e||((0,x.mkdirSync)((0,u.dirname)(b),{recursive:!0,mode:448}),(0,x.writeFileSync)(b,e,{mode:384})),b}(c);if(!f)return d;let h=c.port??(0,R.D0)(),j=new URLSearchParams({tool:T.c,worktreeId:b.worktreeId,instanceId:e}),k={[X]:ad(c),CM_AGENT_TOOL:T.c,[Y]:b.worktreeId,[Z]:e,[$]:`http://${V}:${h}${g.jx}`,[_]:`http://${V}:${h}${g.WZ}?${j.toString()}`},l="bypass"===process.env.CM_CODEX_HOOK_TRUST?" --dangerously-bypass-hook-trust":"";return{command:`${(0,g.ZL)(a)}${l}`,settingsPath:f,env:k}}catch(a){return U.warn("codex-hooks-config-write-failed",{worktreeId:b.worktreeId,error:a instanceof Error?a.message:String(a)}),d}})(b,a)});var ah=c(85965);let ai=globalThis.__agentEventSources??=new Map,aj=globalThis.__agentEventLegacySources??=new Map;function ak(a){ai.set(a.cliToolId,a),aj.delete(a.cliToolId)}function al(a){let b=ai.get(a);if(b)return b;let c=aj.get(a);if(c)return c;let f=(0,h.U)({cliToolId:a,noDecision:{kind:"proceeds"},capabilities:{supportedEvents:[],configScope:"none",decisionTimeoutSeconds:null},mappers:(0,i.mJ)(j.WK),nativeEventNameFields:["hook_event_name"],conversationIdFields:j.lb,toolCallIdFields:j.ue,extractDetail:j.Jp,parsePermissionRequest:a=>(0,e.ss)(a),parseQuestion:a=>(0,d.ek)(a),encodeVerdict:m,prepareLaunch:({executablePath:a})=>({command:a,settingsPath:null,env:{}})});return aj.set(a,f),f}ak(n),ak(r),ak(G),ak(P),ak(ag),ak(ah.cC)},98211:(a,b,c)=>{c.d(b,{AB:()=>l,FZ:()=>i,Lu:()=>k,XL:()=>g,v1:()=>j});var d=c(2466),e=c(57510);let f=globalThis.__opencodeToolCallNames??=new Map;function g(a,b){for(f.delete(a),f.set(a,b);f.size>256;){let a=f.keys().next();if(a.done)break;f.delete(a.value)}}function h(a){return"string"==typeof a.type&&(0,e.Qd)(a.properties)?a.properties:a}function i(a){var b;let c=h(a),d=(0,e.O2)(c,"id"),g=(0,e.O2)(c,"sessionID");if(!d||!g||Array.isArray(c.questions))return null;let i=(0,e.O2)(c,"permission"),j=(0,e.Qd)(c.metadata)?c.metadata:{};return{toolName:((b=(0,e.NZ)(c,["tool","callID"]))?f.get(b)??null:null)??i??"permission",toolInput:{permission:i,patterns:Array.isArray(c.patterns)?c.patterns:[],...j},promptId:d,sessionId:g,permissionMode:null,permissionSuggestions:Array.isArray(c.always)?c.always:null}}function j(a){let b=h(a),c=(0,e.O2)(b,"id");if(!c)return null;let f=(0,d.u_)({questions:b.questions});return null===f?null:{questions:f,promptId:c}}function k(a,b){let c=i(a);return c&&c.promptId?{kind:"permission",id:c.promptId,conversationId:c.sessionId,subject:{kind:"permission",toolName:c.toolName,toolInput:c.toolInput},raw:a,askedAt:b}:null}function l(a,b){let c=h(a),d=(0,e.O2)(c,"id"),f=j(a);return d&&f?{kind:"question",id:d,conversationId:(0,e.O2)(c,"sessionID"),subject:{kind:"question",spec:f},raw:a,askedAt:b}:null}}};