commandmate 0.3.5 → 0.4.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 (161) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +19 -23
  3. package/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/cache/config.json +3 -3
  7. package/.next/cache/webpack/client-production/0.pack +0 -0
  8. package/.next/cache/webpack/client-production/1.pack +0 -0
  9. package/.next/cache/webpack/client-production/2.pack +0 -0
  10. package/.next/cache/webpack/client-production/index.pack +0 -0
  11. package/.next/cache/webpack/client-production/index.pack.old +0 -0
  12. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  13. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  14. package/.next/cache/webpack/server-production/0.pack +0 -0
  15. package/.next/cache/webpack/server-production/index.pack +0 -0
  16. package/.next/next-server.js.nft.json +1 -1
  17. package/.next/prerender-manifest.json +1 -1
  18. package/.next/react-loadable-manifest.json +69 -55
  19. package/.next/required-server-files.json +1 -1
  20. package/.next/server/app/_not-found/page.js +1 -1
  21. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/app/update-check/route.js +1 -1
  24. package/.next/server/app/api/repositories/clone/route.js +1 -1
  25. package/.next/server/app/api/repositories/route.js +8 -8
  26. package/.next/server/app/api/repositories/scan/route.js +1 -1
  27. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -2
  28. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  29. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  30. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  31. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  32. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  33. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  34. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  35. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  36. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  37. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  38. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  39. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  40. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  41. package/.next/server/app/api/worktrees/route.js +1 -1
  42. package/.next/server/app/login/page.js +1 -1
  43. package/.next/server/app/login/page.js.nft.json +1 -1
  44. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  45. package/.next/server/app/page.js +3 -3
  46. package/.next/server/app/page.js.nft.json +1 -1
  47. package/.next/server/app/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/proxy/[...path]/route.js +4 -4
  49. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
  50. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  51. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  52. package/.next/server/app/worktrees/[id]/page.js +6 -6
  53. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  54. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app/worktrees/[id]/terminal/page.js +2 -4
  56. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  57. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app-paths-manifest.json +8 -8
  59. package/.next/server/chunks/{3294.js → 1628.js} +3 -3
  60. package/.next/server/chunks/185.js +36 -0
  61. package/.next/server/chunks/3860.js +1 -1
  62. package/.next/server/chunks/4893.js +2 -2
  63. package/.next/server/chunks/4952.js +1 -1
  64. package/.next/server/chunks/5488.js +6 -6
  65. package/.next/server/chunks/7425.js +34 -31
  66. package/.next/server/chunks/7566.js +2 -2
  67. package/.next/server/chunks/8199.js +1 -0
  68. package/.next/server/chunks/8585.js +1 -1
  69. package/.next/server/chunks/8693.js +1 -1
  70. package/.next/server/middleware-build-manifest.js +1 -1
  71. package/.next/server/middleware-manifest.json +5 -5
  72. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  73. package/.next/server/pages/500.html +1 -1
  74. package/.next/server/server-reference-manifest.json +1 -1
  75. package/.next/static/chunks/12-00c528d46a0a0a1d.js +1 -0
  76. package/.next/static/chunks/{13.feeafc7cc620f8c4.js → 13.b9521543496f4468.js} +1 -1
  77. package/.next/static/chunks/1334.bfedf44ee9fe2761.js +1 -0
  78. package/.next/static/chunks/143.eb6b4671490cd223.js +1 -0
  79. package/.next/static/chunks/{3574.7a94c27e6a496a56.js → 1442.74b5f4de9a4b4e1b.js} +1 -1
  80. package/.next/static/chunks/2083-b5bed0c77cc53281.js +1 -0
  81. package/.next/static/chunks/2725.eb2d236c8030711c.js +1 -0
  82. package/.next/static/chunks/3398-3d40a17387bd554b.js +1 -0
  83. package/.next/static/chunks/3516.3c576047408cae6b.js +1 -0
  84. package/.next/static/chunks/3559.422c6ca760b85750.js +1 -0
  85. package/.next/static/chunks/3956.52c5b9a0071a641d.js +1 -0
  86. package/.next/static/chunks/4012.32b576a4fa621774.js +1 -0
  87. package/.next/static/chunks/4212.e7ba1009bc1da62d.js +131 -0
  88. package/.next/static/chunks/4303.caf91e86105d5e70.js +1 -0
  89. package/.next/static/chunks/4327.4dcda9b6fab6a385.js +82 -0
  90. package/.next/static/chunks/4671.d86d21d0dfdace41.js +1 -0
  91. package/.next/static/chunks/5518.ec88dcb5a27b17fe.js +1 -0
  92. package/.next/static/chunks/6434.08d262283371d333.js +1 -0
  93. package/.next/static/chunks/{656.5e2de0173f5a06bd.js → 656.dc26b973d07d9627.js} +5 -5
  94. package/.next/static/chunks/7119.01777af21b55740c.js +1 -0
  95. package/.next/static/chunks/7293.fb88bb102af4aa04.js +1 -0
  96. package/.next/static/chunks/8913-40625650292eb3d0.js +1 -0
  97. package/.next/static/chunks/8977.fc18b8260cd8bc1f.js +1 -0
  98. package/.next/static/chunks/9552.d959149efd41e84b.js +1 -0
  99. package/.next/static/chunks/app/layout-7198a7a49aa21a97.js +1 -0
  100. package/.next/static/chunks/app/page-7498cf75e69d9227.js +1 -0
  101. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-0599f64a8e80d255.js +1 -0
  102. package/.next/static/chunks/app/worktrees/[id]/page-94ad7a1ce1f0c440.js +1 -0
  103. package/.next/static/chunks/app/worktrees/[id]/terminal/page-175b618c047bc992.js +1 -0
  104. package/.next/static/chunks/d3ac728e.daf595a898e9b720.js +1 -0
  105. package/.next/static/chunks/webpack-f7111aab807d73b9.js +1 -0
  106. package/.next/static/css/f7dc01350168df01.css +3 -0
  107. package/.next/trace +5 -5
  108. package/README.md +66 -56
  109. package/dist/server/server.js +5 -0
  110. package/dist/server/src/lib/auto-yes-manager.js +58 -18
  111. package/dist/server/src/lib/claude-session.js +9 -3
  112. package/dist/server/src/lib/cli-session.js +60 -10
  113. package/dist/server/src/lib/cli-tools/codex.js +7 -7
  114. package/dist/server/src/lib/cli-tools/gemini.js +3 -0
  115. package/dist/server/src/lib/cli-tools/opencode-config.js +179 -33
  116. package/dist/server/src/lib/cli-tools/opencode.js +5 -0
  117. package/dist/server/src/lib/cli-tools/vibe-local.js +3 -0
  118. package/dist/server/src/lib/cmate-parser.js +7 -7
  119. package/dist/server/src/lib/db-migrations.js +18 -1
  120. package/dist/server/src/lib/errors.js +153 -0
  121. package/dist/server/src/lib/prompt-answer-sender.js +3 -0
  122. package/dist/server/src/lib/prompt-detector.js +49 -7
  123. package/dist/server/src/lib/resource-cleanup.js +257 -0
  124. package/dist/server/src/lib/schedule-manager.js +269 -83
  125. package/dist/server/src/lib/tmux-capture-cache.js +221 -0
  126. package/dist/server/src/lib/tmux.js +41 -20
  127. package/dist/server/src/types/markdown-editor.js +9 -1
  128. package/package.json +11 -8
  129. package/.next/server/chunks/539.js +0 -35
  130. package/.next/server/chunks/7458.js +0 -1
  131. package/.next/server/chunks/7808.js +0 -1
  132. package/.next/static/chunks/1038-3509435b68c0967e.js +0 -1
  133. package/.next/static/chunks/1098.49268c9fe1b028fa.js +0 -1
  134. package/.next/static/chunks/2335-98a211e00b94c7ac.js +0 -1
  135. package/.next/static/chunks/3559.f073f72c4466ce0e.js +0 -1
  136. package/.next/static/chunks/3843.3fdda732987f7bb8.js +0 -1
  137. package/.next/static/chunks/4212.52c1bb34fc97d0d0.js +0 -131
  138. package/.next/static/chunks/4327.157a4c226d919531.js +0 -60
  139. package/.next/static/chunks/4362.7bd6f0282e49d79b.js +0 -1
  140. package/.next/static/chunks/4721.40615a5f4f32b5fb.js +0 -1
  141. package/.next/static/chunks/5112.17318d1c6b28044b.js +0 -1
  142. package/.next/static/chunks/6406.9653f0d41ab85059.js +0 -1
  143. package/.next/static/chunks/6792.3c01ac4dda4b5c6d.js +0 -1
  144. package/.next/static/chunks/8091-d65d2ab6daed23c6.js +0 -1
  145. package/.next/static/chunks/8125.245a9df052d274fb.js +0 -1
  146. package/.next/static/chunks/8522.1607e96011c66877.js +0 -1
  147. package/.next/static/chunks/8841.dadeb1ece8e46004.js +0 -1
  148. package/.next/static/chunks/8885.f8d9912b40d74811.js +0 -1
  149. package/.next/static/chunks/9178-88850a7c48deea07.js +0 -1
  150. package/.next/static/chunks/9552.b7dfb7903ead934b.js +0 -1
  151. package/.next/static/chunks/app/layout-9110f9a5e41c6bf4.js +0 -1
  152. package/.next/static/chunks/app/page-9e523a8f415bc707.js +0 -1
  153. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-4a3c0861367e0391.js +0 -1
  154. package/.next/static/chunks/app/worktrees/[id]/page-8fb4dc30b58a5681.js +0 -1
  155. package/.next/static/chunks/app/worktrees/[id]/terminal/page-5d85a7e508ce36d3.js +0 -1
  156. package/.next/static/chunks/d3ac728e.6c9c508274d4d2d5.js +0 -1
  157. package/.next/static/chunks/webpack-81c97591dd5567ac.js +0 -1
  158. package/.next/static/css/45b3a41370668314.css +0 -3
  159. /package/.next/static/chunks/{30d07d85-393352a92199f695.js → 30d07d85.1dc99a921fc18e34.js} +0 -0
  160. /package/.next/static/{p3hosTZoJ22r35fWwUoLr → dwGMLEU53HOvFOWqiZOT0}/_buildManifest.js +0 -0
  161. /package/.next/static/{p3hosTZoJ22r35fWwUoLr → dwGMLEU53HOvFOWqiZOT0}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"80":{"*":{"id":"41868","name":"*","chunks":[],"async":false}},"4707":{"*":{"id":"79671","name":"*","chunks":[],"async":false}},"12846":{"*":{"id":"12994","name":"*","chunks":[],"async":false}},"18828":{"*":{"id":"2108","name":"*","chunks":[],"async":false}},"19107":{"*":{"id":"96114","name":"*","chunks":[],"async":false}},"36423":{"*":{"id":"84759","name":"*","chunks":[],"async":false}},"40991":{"*":{"id":"72964","name":"*","chunks":[],"async":false}},"41845":{"*":{"id":"37398","name":"*","chunks":[],"async":false}},"50653":{"*":{"id":"84442","name":"*","chunks":[],"async":false}},"61060":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"66677":{"*":{"id":"42106","name":"*","chunks":[],"async":false}},"88880":{"*":{"id":"25546","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/globals.css":{"id":2778,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","8528","static/chunks/8528-4d554d3b94d4cf9b.js","3185","static/chunks/app/layout-9110f9a5e41c6bf4.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/components/providers/AppProviders.tsx":{"id":18828,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","8528","static/chunks/8528-4d554d3b94d4cf9b.js","3185","static/chunks/app/layout-9110f9a5e41c6bf4.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/login/page.tsx":{"id":88880,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/page.tsx":{"id":66677,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","2335","static/chunks/2335-98a211e00b94c7ac.js","8528","static/chunks/8528-4d554d3b94d4cf9b.js","8091","static/chunks/8091-d65d2ab6daed23c6.js","1931","static/chunks/app/page-9e523a8f415bc707.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/files/[...path]/page.tsx":{"id":50653,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page.tsx":{"id":40991,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/terminal/page.tsx":{"id":41845,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/CommandMate/CommandMate/src/":[],"/home/runner/work/CommandMate/CommandMate/src/app/layout":["static/css/45b3a41370668314.css"],"/home/runner/work/CommandMate/CommandMate/src/app/page":[],"/home/runner/work/CommandMate/CommandMate/src/app/_not-found/page":[]}}
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"80":{"*":{"id":"41868","name":"*","chunks":[],"async":false}},"4707":{"*":{"id":"79671","name":"*","chunks":[],"async":false}},"12846":{"*":{"id":"12994","name":"*","chunks":[],"async":false}},"18828":{"*":{"id":"2108","name":"*","chunks":[],"async":false}},"19107":{"*":{"id":"96114","name":"*","chunks":[],"async":false}},"26514":{"*":{"id":"30349","name":"*","chunks":[],"async":false}},"27323":{"*":{"id":"45763","name":"*","chunks":[],"async":false}},"36423":{"*":{"id":"84759","name":"*","chunks":[],"async":false}},"50653":{"*":{"id":"89829","name":"*","chunks":[],"async":false}},"61060":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"66677":{"*":{"id":"42106","name":"*","chunks":[],"async":false}},"88880":{"*":{"id":"25546","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/globals.css":{"id":2778,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","8528","static/chunks/8528-4d554d3b94d4cf9b.js","3185","static/chunks/app/layout-7198a7a49aa21a97.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/components/providers/AppProviders.tsx":{"id":18828,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","8528","static/chunks/8528-4d554d3b94d4cf9b.js","3185","static/chunks/app/layout-7198a7a49aa21a97.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/login/page.tsx":{"id":88880,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/page.tsx":{"id":66677,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","12","static/chunks/12-00c528d46a0a0a1d.js","8528","static/chunks/8528-4d554d3b94d4cf9b.js","2083","static/chunks/2083-b5bed0c77cc53281.js","1931","static/chunks/app/page-7498cf75e69d9227.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/files/[...path]/page.tsx":{"id":50653,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page.tsx":{"id":26514,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/terminal/page.tsx":{"id":27323,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/CommandMate/CommandMate/src/":[],"/home/runner/work/CommandMate/CommandMate/src/app/layout":["static/css/f7dc01350168df01.css"],"/home/runner/work/CommandMate/CommandMate/src/app/page":[],"/home/runner/work/CommandMate/CommandMate/src/app/_not-found/page":[]}}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=2827,e.ids=[2827],e.modules={20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},58536:(e,t,a)=>{a.r(t),a.d(t,{originalPathname:()=>x,patchFetch:()=>R,requestAsyncStorage:()=>C,routeModule:()=>_,serverHooks:()=>w,staticGenerationAsyncStorage:()=>k});var r={};a.r(r),a.d(r,{GET:()=>b,dynamic:()=>h});var n=a(49303),s=a(88716),u=a(60670),l=a(87070);let o=/^v?\d+\.\d+\.\d+$/,i=/^[a-zA-Z0-9.\-\s_v]+$/,c=globalThis.__versionCheckCache??(globalThis.__versionCheckCache={result:null,fetchedAt:0,rateLimitResetAt:null});function p(){return"0.3.5"}async function d(){try{var e,t,a;if(null!==c.result&&Date.now()-c.fetchedAt<36e5||c.rateLimitResetAt&&(!(Date.now()>=c.rateLimitResetAt)||(c.rateLimitResetAt=null,0)))return c.result;let r=await fetch("https://api.github.com/repos/Kewton/CommandMate/releases/latest",{headers:{Accept:"application/vnd.github+json","User-Agent":`CommandMate/${p()}`},cache:"no-store",signal:AbortSignal.timeout(5e3)});if(403===r.status)return function(e){let t=e.headers.get("X-RateLimit-Reset");t?c.rateLimitResetAt=1e3*parseInt(t,10):c.rateLimitResetAt=Date.now()+36e5}(r),c.result;if(!r.ok)return c.result;let n=await r.json(),s=p(),u=n.tag_name.replace(/^v/,""),l={hasUpdate:function(e,t){if(!o.test(e)||!o.test(t))return!1;let a=e=>e.replace(/^v/,"").split(".").map(Number),[r,n,s]=a(e),[u,l,i]=a(t);return u!==r?u>r:l!==n?l>n:i>s}(s,n.tag_name),currentVersion:s,latestVersion:u,releaseUrl:(e=n.html_url).startsWith("https://github.com/Kewton/CommandMate/releases/")?e:null,releaseName:(t=n.name,a=n.tag_name,i.test(t)&&t.length<=128?t:a),publishedAt:n.published_at};return c.result=l,c.fetchedAt=Date.now(),l}catch{return c.result}}var m=a(16672);let h="force-dynamic";function g(){try{return(0,m.ZP)()?"global":"local"}catch{return"unknown"}}let f={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};function A(e){return l.NextResponse.json(e,{headers:f})}function v(e,t){return e?{status:"success",hasUpdate:e.hasUpdate,currentVersion:e.currentVersion,latestVersion:e.latestVersion,releaseUrl:e.releaseUrl,releaseName:e.releaseName,publishedAt:e.publishedAt,installType:t,updateCommand:e.hasUpdate&&"global"===t?"npm install -g commandmate@latest":null}:{status:"degraded",hasUpdate:!1,currentVersion:p(),latestVersion:null,releaseUrl:null,releaseName:null,publishedAt:null,installType:t,updateCommand:null}}async function b(){try{let e=await d(),t=g();return A(v(e,t))}catch{return A(v(null,g()))}}let _=new n.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/app/update-check/route",pathname:"/api/app/update-check",filename:"route",bundlePath:"app/api/app/update-check/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/app/update-check/route.ts",nextConfigOutput:"",userland:r}),{requestAsyncStorage:C,staticGenerationAsyncStorage:k,serverHooks:w}=_,x="/api/app/update-check/route";function R(){return(0,u.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:k})}},16672:(e,t,a)=>{a.d(t,{ZP:()=>n}),a(92048);var r=a(55315);function n(){let e=(0,r.dirname)(__dirname);return e.includes("/lib/node_modules/")||e.includes("\\node_modules\\")||e.includes("/node_modules/commandmate")}a(19801)}};var t=require("../../../../webpack-runtime.js");t.C(e);var a=e=>t(t.s=e),r=t.X(0,[8948,5972],()=>a(58536));module.exports=r})();
1
+ "use strict";(()=>{var e={};e.id=2827,e.ids=[2827],e.modules={20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},58536:(e,t,a)=>{a.r(t),a.d(t,{originalPathname:()=>x,patchFetch:()=>R,requestAsyncStorage:()=>C,routeModule:()=>_,serverHooks:()=>w,staticGenerationAsyncStorage:()=>k});var r={};a.r(r),a.d(r,{GET:()=>b,dynamic:()=>h});var n=a(49303),s=a(88716),u=a(60670),l=a(87070);let o=/^v?\d+\.\d+\.\d+$/,i=/^[a-zA-Z0-9.\-\s_v]+$/,c=globalThis.__versionCheckCache??(globalThis.__versionCheckCache={result:null,fetchedAt:0,rateLimitResetAt:null});function p(){return"0.4.0"}async function d(){try{var e,t,a;if(null!==c.result&&Date.now()-c.fetchedAt<36e5||c.rateLimitResetAt&&(!(Date.now()>=c.rateLimitResetAt)||(c.rateLimitResetAt=null,0)))return c.result;let r=await fetch("https://api.github.com/repos/Kewton/CommandMate/releases/latest",{headers:{Accept:"application/vnd.github+json","User-Agent":`CommandMate/${p()}`},cache:"no-store",signal:AbortSignal.timeout(5e3)});if(403===r.status)return function(e){let t=e.headers.get("X-RateLimit-Reset");t?c.rateLimitResetAt=1e3*parseInt(t,10):c.rateLimitResetAt=Date.now()+36e5}(r),c.result;if(!r.ok)return c.result;let n=await r.json(),s=p(),u=n.tag_name.replace(/^v/,""),l={hasUpdate:function(e,t){if(!o.test(e)||!o.test(t))return!1;let a=e=>e.replace(/^v/,"").split(".").map(Number),[r,n,s]=a(e),[u,l,i]=a(t);return u!==r?u>r:l!==n?l>n:i>s}(s,n.tag_name),currentVersion:s,latestVersion:u,releaseUrl:(e=n.html_url).startsWith("https://github.com/Kewton/CommandMate/releases/")?e:null,releaseName:(t=n.name,a=n.tag_name,i.test(t)&&t.length<=128?t:a),publishedAt:n.published_at};return c.result=l,c.fetchedAt=Date.now(),l}catch{return c.result}}var m=a(16672);let h="force-dynamic";function g(){try{return(0,m.ZP)()?"global":"local"}catch{return"unknown"}}let f={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};function A(e){return l.NextResponse.json(e,{headers:f})}function v(e,t){return e?{status:"success",hasUpdate:e.hasUpdate,currentVersion:e.currentVersion,latestVersion:e.latestVersion,releaseUrl:e.releaseUrl,releaseName:e.releaseName,publishedAt:e.publishedAt,installType:t,updateCommand:e.hasUpdate&&"global"===t?"npm install -g commandmate@latest":null}:{status:"degraded",hasUpdate:!1,currentVersion:p(),latestVersion:null,releaseUrl:null,releaseName:null,publishedAt:null,installType:t,updateCommand:null}}async function b(){try{let e=await d(),t=g();return A(v(e,t))}catch{return A(v(null,g()))}}let _=new n.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/app/update-check/route",pathname:"/api/app/update-check",filename:"route",bundlePath:"app/api/app/update-check/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/app/update-check/route.ts",nextConfigOutput:"",userland:r}),{requestAsyncStorage:C,staticGenerationAsyncStorage:k,serverHooks:w}=_,x="/api/app/update-check/route";function R(){return(0,u.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:k})}},16672:(e,t,a)=>{a.d(t,{ZP:()=>n}),a(92048);var r=a(55315);function n(){let e=(0,r.dirname)(__dirname);return e.includes("/lib/node_modules/")||e.includes("\\node_modules\\")||e.includes("/node_modules/commandmate")}a(19801)}};var t=require("../../../../webpack-runtime.js");t.C(e);var a=e=>t(t.s=e),r=t.X(0,[8948,5972],()=>a(58536));module.exports=r})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=541,e.ids=[541],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},28841:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>j,patchFetch:()=>v,requestAsyncStorage:()=>m,routeModule:()=>g,serverHooks:()=>b,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{POST:()=>l});var s=t(49303),a=t(88716),n=t(60670),i=t(87070),c=t(97425),u=t(98838),p=t(65488);let d="[Clone API]";async function l(e){try{let{cloneUrl:r,targetDir:t}=await e.json();if(!r||"string"!=typeof r||""===r.trim())return i.NextResponse.json({success:!1,error:{category:"validation",code:"EMPTY_URL",message:"Clone URL is required",recoverable:!0,suggestedAction:"Please enter a valid git clone URL"}},{status:400});if(void 0!==t&&"string"!=typeof t)return i.NextResponse.json({success:!1,error:{category:"validation",code:"INVALID_TARGET_PATH",message:"targetDir must be a string",recoverable:!0,suggestedAction:"Provide a valid string path for targetDir"}},{status:400});let o=(0,c.getDbInstance)(),{CM_ROOT_DIR:s}=(0,u.dU)(),a=new p.v9(o,{basePath:s});console.info(`${d} Starting clone job for: ${r}`);let n=await a.startCloneJob(r.trim(),t);if(!n.success){let e=400;return(n.error?.code==="DUPLICATE_CLONE_URL"||n.error?.code==="CLONE_IN_PROGRESS")&&(e=409),console.warn(`${d} Clone job failed: ${n.error?.code} - ${n.error?.message}`),i.NextResponse.json({success:!1,error:n.error,jobId:n.jobId},{status:e})}return console.info(`${d} Clone job created: ${n.jobId}`),i.NextResponse.json({success:!0,jobId:n.jobId,status:"pending",message:"Clone job started"},{status:202})}catch(e){return console.error(`${d} Unexpected error:`,e),i.NextResponse.json({success:!1,error:{category:"system",code:"INTERNAL_ERROR",message:"Failed to start clone job",recoverable:!1,suggestedAction:"Please try again later"}},{status:500})}}let g=new s.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/repositories/clone/route",pathname:"/api/repositories/clone",filename:"route",bundlePath:"app/api/repositories/clone/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/clone/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:m,staticGenerationAsyncStorage:x,serverHooks:b}=g,j="/api/repositories/clone/route";function v(){return(0,n.patchFetch)({serverHooks:b,staticGenerationAsyncStorage:x})}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,7425,5488],()=>t(28841));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=541,e.ids=[541],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},28841:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>v,patchFetch:()=>R,requestAsyncStorage:()=>m,routeModule:()=>g,serverHooks:()=>b,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{POST:()=>l});var s=t(49303),a=t(88716),n=t(60670),i=t(87070),c=t(97425),u=t(98838),d=t(65488);let p="[Clone API]";async function l(e){try{let{cloneUrl:r,targetDir:t}=await e.json();if(!r||"string"!=typeof r||""===r.trim())return i.NextResponse.json({success:!1,error:{category:"validation",code:"EMPTY_URL",message:"Clone URL is required",recoverable:!0,suggestedAction:"Please enter a valid git clone URL"}},{status:400});if(void 0!==t&&"string"!=typeof t)return i.NextResponse.json({success:!1,error:{category:"validation",code:"INVALID_TARGET_PATH",message:"targetDir must be a string",recoverable:!0,suggestedAction:"Provide a valid string path for targetDir"}},{status:400});let o=(0,c.getDbInstance)(),{CM_ROOT_DIR:s}=(0,u.dU)(),a=new d.v9(o,{basePath:s});console.info(`${p} Starting clone job for: ${r}`);let n=t?.trim()||void 0;if(n&&n.length>1024)return i.NextResponse.json({success:!1,error:{category:"validation",code:"INVALID_TARGET_PATH",message:"Target directory path is too long",recoverable:!0,suggestedAction:"Use a path within the configured base directory"}},{status:400});let l=await a.startCloneJob(r.trim(),n);if(!l.success){let e=400;return(l.error?.code==="DUPLICATE_CLONE_URL"||l.error?.code==="CLONE_IN_PROGRESS")&&(e=409),console.warn(`${p} Clone job failed: ${l.error?.code} - ${l.error?.message}`),i.NextResponse.json({success:!1,error:l.error,jobId:l.jobId},{status:e})}return console.info(`${p} Clone job created: ${l.jobId}`),i.NextResponse.json({success:!0,jobId:l.jobId,status:"pending",message:"Clone job started"},{status:202})}catch(e){return console.error(`${p} Unexpected error:`,e),i.NextResponse.json({success:!1,error:{category:"system",code:"INTERNAL_ERROR",message:"Failed to start clone job",recoverable:!1,suggestedAction:"Please try again later"}},{status:500})}}let g=new s.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/repositories/clone/route",pathname:"/api/repositories/clone",filename:"route",bundlePath:"app/api/repositories/clone/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/clone/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:m,staticGenerationAsyncStorage:x,serverHooks:b}=g,v="/api/repositories/clone/route";function R(){return(0,n.patchFetch)({serverHooks:b,staticGenerationAsyncStorage:x})}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,7425,5488],()=>t(28841));module.exports=o})();
@@ -1,35 +1,35 @@
1
- "use strict";(()=>{var e={};e.id=5361,e.ids=[5361],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},92745:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>A,patchFetch:()=>D,requestAsyncStorage:()=>R,routeModule:()=>y,serverHooks:()=>T,staticGenerationAsyncStorage:()=>U});var o={};t.r(o),t.d(o,{DELETE:()=>C});var s=t(49303),n=t(88716),l=t(60670),a=t(87070),i=t(97425),u=t(75748),d=t(4709),p=t(59991),c=t(38693);t(84770),t(92048),t(55315);var h=t(83513);t(95614),RegExp(t(8186).C4.source,"g");var g=t(41124);function m(){let{getDbInstance:e}=t(97425);return e()}function f(e,r,t,o){let s=m(),n=Date.now();s.prepare(`
1
+ "use strict";(()=>{var e={};e.id=5361,e.ids=[5361],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},92745:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>D,patchFetch:()=>M,requestAsyncStorage:()=>U,routeModule:()=>R,serverHooks:()=>T,staticGenerationAsyncStorage:()=>F});var o={};t.r(o),t.d(o,{DELETE:()=>b});var s=t(49303),n=t(88716),l=t(60670),a=t(87070),i=t(97425),u=t(75748),p=t(4709),d=t(59991),c=t(38693);t(84770),t(92048),t(55315),t(20629);var h=t(83513);function g(){let{getDbInstance:e}=t(97425);return e()}function f(e,r,t,o){let s=g(),n=Date.now();s.prepare(`
2
2
  UPDATE execution_logs SET status = ?, result = ?, exit_code = ?, completed_at = ? WHERE id = ?
3
- `).run(r,t,o,n,e)}let E="[Session Cleanup]";async function _(e,r){let t={worktreeId:e,sessionsKilled:[],sessionErrors:[],pollersStopped:[],pollerErrors:[]};for(let o of h.tK){try{await r(e,o)&&(t.sessionsKilled.push(o),console.info(`${E} Killed session: ${e}/${o}`))}catch(s){let r=`${o}: ${s instanceof Error?s.message:String(s)}`;t.sessionErrors.push(r),console.warn(`${E} Failed to kill session ${e}/${o}:`,s)}try{(0,p.FN)(e,o),t.pollersStopped.push(`response-poller:${o}`)}catch(s){let r=`response-poller:${o}: ${s instanceof Error?s.message:String(s)}`;t.pollerErrors.push(r),console.warn(`${E} Failed to stop response-poller ${e}/${o}:`,s)}}try{(0,c.Qz)(e),t.pollersStopped.push("auto-yes-poller")}catch(o){let r=`auto-yes-poller: ${o instanceof Error?o.message:String(o)}`;t.pollerErrors.push(r),console.warn(`${E} Failed to stop auto-yes-poller ${e}:`,o)}try{(function(){let e=(globalThis.__scheduleManagerStates||(globalThis.__scheduleManagerStates={timerId:null,schedules:new Map,initialized:!1}),globalThis.__scheduleManagerStates);for(let[,r]of(null!==e.timerId&&(clearInterval(e.timerId),e.timerId=null),e.schedules))try{r.cronJob.stop()}catch{}e.schedules.clear();let r=(0,g.U_)();for(let[e]of r)try{process.kill(e,"SIGKILL")}catch{}r.clear(),e.initialized=!1,console.log("[schedule-manager] All schedules stopped")})(),t.pollersStopped.push("schedule-manager")}catch(r){let e=`schedule-manager: ${r instanceof Error?r.message:String(r)}`;t.pollerErrors.push(e),console.warn(`${E} Failed to stop schedule-manager:`,r)}return t}async function v(e,r){let t=[],o=[];for(let s of e){let e=await _(s,r);for(let r of(t.push(e),e.sessionErrors))o.push(`Session kill error (${s}): ${r}`);for(let r of e.pollerErrors)o.push(`Poller stop error (${s}): ${r}`)}return{results:t,warnings:o}}var x=t(68507),$=t(55837),S=t(10927);let b="[Repository Delete]";async function w(e,r){let t=$.g.getInstance().getTool(r);if(!await t.isRunning(e))return!1;let o=t.getSessionName(e);return(0,S.AJ)(o)}async function C(e){try{let r;let{repositoryPath:t}=await e.json(),o=(0,d.VZ)(t);if(!o.valid)return a.NextResponse.json({success:!1,error:o.error},{status:400});let s=(0,i.getDbInstance)();(0,d.mm)(s,t);let n=(0,u.Pv)(s,t);if(0===n.length)return a.NextResponse.json({success:!1,error:"Repository not found"},{status:404});console.info(`${b} Starting deletion: ${t}, worktrees: ${n.length}`);let l=await v(n,w);for(let e of l.results)e.sessionsKilled.length>0&&console.info(`${b} Sessions killed for ${e.worktreeId}: ${e.sessionsKilled.join(", ")}`),e.sessionErrors.length>0&&console.warn(`${b} Session kill errors for ${e.worktreeId}: ${e.sessionErrors.join(", ")}`);(0,x.ZV)(n);try{r=(0,u.DF)(s,t).deletedCount,console.info(`${b} Successfully deleted ${r} worktrees from: ${t}`)}catch(e){return console.error(`${b} Database deletion failed for ${t}:`,e),a.NextResponse.json({success:!1,error:"Database deletion failed"},{status:500})}(0,x.ps)("repository_deleted",{worktreeId:"global",repositoryPath:t,deletedWorktreeIds:n});let p={success:!0,deletedWorktreeCount:r,deletedWorktreeIds:n};return l.warnings.length>0?(p.warnings=l.warnings,console.info(`${b} Completed with ${l.warnings.length} warnings: ${t}`)):console.info(`${b} Completed successfully: ${t}`),a.NextResponse.json(p,{status:200})}catch(e){return console.error(`${b} Unexpected error:`,e),a.NextResponse.json({success:!1,error:"Failed to delete repository"},{status:500})}}let y=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/route",pathname:"/api/repositories",filename:"route",bundlePath:"app/api/repositories/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:R,staticGenerationAsyncStorage:U,serverHooks:T}=y,A="/api/repositories/route";function D(){return(0,l.patchFetch)({serverHooks:T,staticGenerationAsyncStorage:U})}},8186:(e,r,t)=>{t.d(r,{C4:()=>o,oU:()=>s});let o=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F\u200B-\u200F\u2028-\u202F\uFEFF]/;function s(e){if(e.length>100)return!1;let r=e.trim().split(/\s+/);return r.length>=5&&r.length<=6}},95614:(e,r,t)=>{t.d(r,{ME:()=>o,wx:()=>l,xT:()=>s});let o=100,s=1e4,n=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function l(e){return n.test(e)}},41124:(e,r,t)=>{t.d(r,{U_:()=>s,pu:()=>o}),t(61282),t(19377);let o=new Set(["claude","codex","gemini","vibe-local","opencode"]);function s(){return globalThis.__scheduleActiveProcesses||(globalThis.__scheduleActiveProcesses=new Map),globalThis.__scheduleActiveProcesses}},4709:(e,r,t)=>{t.d(r,{Bj:()=>E,Bm:()=>v,L_:()=>x,RT:()=>_,VZ:()=>g,fC:()=>S,h4:()=>u,mm:()=>f,nJ:()=>m,nb:()=>d,sN:()=>$});var o=t(84770),s=t(55315),n=t.n(s),l=t(43753);function a(e){return{id:e.id,name:e.name,path:e.path,enabled:1===e.enabled,cloneUrl:e.clone_url||void 0,normalizedCloneUrl:e.normalized_clone_url||void 0,cloneSource:e.clone_source,isEnvManaged:1===e.is_env_managed,createdAt:new Date(e.created_at),updatedAt:new Date(e.updated_at)}}function i(e){return{id:e.id,cloneUrl:e.clone_url,normalizedCloneUrl:e.normalized_clone_url,targetPath:e.target_path,repositoryId:e.repository_id||void 0,status:e.status,pid:e.pid||void 0,progress:e.progress,errorCategory:e.error_category||void 0,errorCode:e.error_code||void 0,errorMessage:e.error_message||void 0,startedAt:e.started_at?new Date(e.started_at):void 0,completedAt:e.completed_at?new Date(e.completed_at):void 0,createdAt:new Date(e.created_at)}}function u(e,r){let t=(0,o.randomUUID)(),s=Date.now();return e.prepare(`
3
+ `).run(r,t,o,n,e)}t(95614),RegExp(t(8186).C4.source,"g"),t(41124);var m=t(4633),E=t(47833);let _="[Session Cleanup]";async function $(e,r){let t={worktreeId:e,sessionsKilled:[],sessionErrors:[],pollersStopped:[],pollerErrors:[]};for(let o of((0,m.eK)(),h.tK)){try{await r(e,o)&&(t.sessionsKilled.push(o),console.info(`${_} Killed session: ${e}/${o}`))}catch(s){let r=`${o}: ${(0,E.e$)(s)}`;t.sessionErrors.push(r),console.warn(`${_} Failed to kill session ${e}/${o}:`,s)}try{(0,d.FN)(e,o),t.pollersStopped.push(`response-poller:${o}`)}catch(s){let r=`response-poller:${o}: ${(0,E.e$)(s)}`;t.pollerErrors.push(r),console.warn(`${_} Failed to stop response-poller ${e}/${o}:`,s)}}try{(0,c.Qz)(e),t.pollersStopped.push("auto-yes-poller")}catch(o){let r=`auto-yes-poller: ${(0,E.e$)(o)}`;t.pollerErrors.push(r),console.warn(`${_} Failed to stop auto-yes-poller ${e}:`,o)}try{(0,c.ID)(e),t.pollersStopped.push("auto-yes-state")}catch(o){let r=`auto-yes-state: ${(0,E.e$)(o)}`;t.pollerErrors.push(r),console.warn(`${_} Failed to delete auto-yes-state ${e}:`,o)}try{(function(e){let r=(globalThis.__scheduleManagerStates||(globalThis.__scheduleManagerStates={timerId:null,schedules:new Map,initialized:!1,isSyncing:!1,cmateFileCache:new Map}),globalThis.__scheduleManagerStates);for(let[t,o]of r.schedules)if(o.worktreeId===e){try{o.cronJob.stop()}catch{}r.schedules.delete(t)}try{let t=g().prepare("SELECT path FROM worktrees WHERE id = ?").get(e);t?.path&&r.cmateFileCache.delete(t.path)}catch(r){console.warn(`[schedule-manager] Failed to resolve worktree path for cache cleanup (worktreeId: ${e}):`,r)}console.log(`[schedule-manager] Stopped schedules for worktree: ${e}`)})(e),t.pollersStopped.push("schedule-manager")}catch(o){let r=`schedule-manager: ${(0,E.e$)(o)}`;t.pollerErrors.push(r),console.warn(`${_} Failed to stop schedule-manager for ${e}:`,o)}return t}async function v(e,r){let t=[],o=[];for(let s of e){let e=await $(s,r);for(let r of(t.push(e),e.sessionErrors))o.push(`Session kill error (${s}): ${r}`);for(let r of e.pollerErrors)o.push(`Poller stop error (${s}): ${r}`)}return{results:t,warnings:o}}var x=t(68507),w=t(55837),y=t(10927);let C="[Repository Delete]";async function S(e,r){let t=w.g.getInstance().getTool(r);if(!await t.isRunning(e))return!1;let o=t.getSessionName(e);return(0,y.AJ)(o)}async function b(e){try{let r;let{repositoryPath:t}=await e.json(),o=(0,p.VZ)(t);if(!o.valid)return a.NextResponse.json({success:!1,error:o.error},{status:400});let s=(0,i.getDbInstance)();(0,p.mm)(s,t);let n=(0,u.Pv)(s,t);if(0===n.length)return a.NextResponse.json({success:!1,error:"Repository not found"},{status:404});console.info(`${C} Starting deletion: ${t}, worktrees: ${n.length}`);let l=await v(n,S);for(let e of l.results)e.sessionsKilled.length>0&&console.info(`${C} Sessions killed for ${e.worktreeId}: ${e.sessionsKilled.join(", ")}`),e.sessionErrors.length>0&&console.warn(`${C} Session kill errors for ${e.worktreeId}: ${e.sessionErrors.join(", ")}`);(0,x.ZV)(n);try{r=(0,u.DF)(s,t).deletedCount,console.info(`${C} Successfully deleted ${r} worktrees from: ${t}`)}catch(e){return console.error(`${C} Database deletion failed for ${t}:`,e),a.NextResponse.json({success:!1,error:"Database deletion failed"},{status:500})}(0,x.ps)("repository_deleted",{worktreeId:"global",repositoryPath:t,deletedWorktreeIds:n});let d={success:!0,deletedWorktreeCount:r,deletedWorktreeIds:n};return l.warnings.length>0?(d.warnings=l.warnings,console.info(`${C} Completed with ${l.warnings.length} warnings: ${t}`)):console.info(`${C} Completed successfully: ${t}`),a.NextResponse.json(d,{status:200})}catch(e){return console.error(`${C} Unexpected error:`,e),a.NextResponse.json({success:!1,error:"Failed to delete repository"},{status:500})}}let R=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/route",pathname:"/api/repositories",filename:"route",bundlePath:"app/api/repositories/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:U,staticGenerationAsyncStorage:F,serverHooks:T}=R,D="/api/repositories/route";function M(){return(0,l.patchFetch)({serverHooks:T,staticGenerationAsyncStorage:F})}},8186:(e,r,t)=>{t.d(r,{C4:()=>o,oU:()=>s});let o=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F\u200B-\u200F\u2028-\u202F\uFEFF]/;function s(e){if(e.length>100)return!1;let r=e.trim().split(/\s+/);return r.length>=5&&r.length<=6}},95614:(e,r,t)=>{t.d(r,{ME:()=>o,wx:()=>l,xT:()=>s});let o=100,s=1e4,n=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function l(e){return n.test(e)}},41124:(e,r,t)=>{t.d(r,{pu:()=>o}),t(61282),t(19377);let o=new Set(["claude","codex","gemini","vibe-local","opencode"])},4709:(e,r,t)=>{t.d(r,{Bj:()=>E,Bm:()=>$,L_:()=>v,RT:()=>_,VZ:()=>g,fC:()=>w,h4:()=>u,mm:()=>m,nJ:()=>f,nb:()=>p,sN:()=>x});var o=t(84770),s=t(55315),n=t.n(s),l=t(43753);function a(e){return{id:e.id,name:e.name,path:e.path,enabled:1===e.enabled,cloneUrl:e.clone_url||void 0,normalizedCloneUrl:e.normalized_clone_url||void 0,cloneSource:e.clone_source,isEnvManaged:1===e.is_env_managed,createdAt:new Date(e.created_at),updatedAt:new Date(e.updated_at)}}function i(e){return{id:e.id,cloneUrl:e.clone_url,normalizedCloneUrl:e.normalized_clone_url,targetPath:e.target_path,repositoryId:e.repository_id||void 0,status:e.status,pid:e.pid||void 0,progress:e.progress,errorCategory:e.error_category||void 0,errorCode:e.error_code||void 0,errorMessage:e.error_message||void 0,startedAt:e.started_at?new Date(e.started_at):void 0,completedAt:e.completed_at?new Date(e.completed_at):void 0,createdAt:new Date(e.created_at)}}function u(e,r){let t=(0,o.randomUUID)(),s=Date.now();return e.prepare(`
4
4
  INSERT INTO repositories (
5
5
  id, name, path, enabled, clone_url, normalized_clone_url,
6
6
  clone_source, is_env_managed, created_at, updated_at
7
7
  )
8
8
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
9
- `).run(t,r.name,r.path,!1!==r.enabled?1:0,r.cloneUrl||null,r.normalizedCloneUrl||null,r.cloneSource,r.isEnvManaged?1:0,s,s),{id:t,name:r.name,path:r.path,enabled:!1!==r.enabled,cloneUrl:r.cloneUrl,normalizedCloneUrl:r.normalizedCloneUrl,cloneSource:r.cloneSource,isEnvManaged:r.isEnvManaged||!1,createdAt:new Date(s),updatedAt:new Date(s)}}function d(e,r){let t=e.prepare(`
9
+ `).run(t,r.name,r.path,!1!==r.enabled?1:0,r.cloneUrl||null,r.normalizedCloneUrl||null,r.cloneSource,r.isEnvManaged?1:0,s,s),{id:t,name:r.name,path:r.path,enabled:!1!==r.enabled,cloneUrl:r.cloneUrl,normalizedCloneUrl:r.normalizedCloneUrl,cloneSource:r.cloneSource,isEnvManaged:r.isEnvManaged||!1,createdAt:new Date(s),updatedAt:new Date(s)}}function p(e,r){let t=e.prepare(`
10
10
  SELECT * FROM repositories
11
11
  WHERE normalized_clone_url = ?
12
- `).get(r);return t?a(t):null}function p(e,r){let t=e.prepare(`
12
+ `).get(r);return t?a(t):null}function d(e,r){let t=e.prepare(`
13
13
  SELECT * FROM repositories
14
14
  WHERE path = ?
15
15
  `).get(r);return t?a(t):null}function c(e,r,t){let o=Date.now(),s=["updated_at = ?"],n=[o];void 0!==t.name&&(s.push("name = ?"),n.push(t.name)),void 0!==t.enabled&&(s.push("enabled = ?"),n.push(t.enabled?1:0)),void 0!==t.cloneUrl&&(s.push("clone_url = ?"),n.push(t.cloneUrl||null)),void 0!==t.normalizedCloneUrl&&(s.push("normalized_clone_url = ?"),n.push(t.normalizedCloneUrl||null)),n.push(r),e.prepare(`
16
16
  UPDATE repositories
17
17
  SET ${s.join(", ")}
18
18
  WHERE id = ?
19
- `).run(...n)}function h(e){return n().resolve(e)}function g(e){if(!e||"string"!=typeof e)return{valid:!1,error:"repositoryPath is required"};if(e.includes("\0"))return{valid:!1,error:"Invalid repository path"};let r=h(e);return(0,l.F)(r)?{valid:!1,error:"Invalid repository path"}:{valid:!0,resolvedPath:r}}function m(e,r){!function(e,r){for(let t of r){let r=h(t);p(e,r)||u(e,{name:n().basename(r),path:r,cloneSource:"local",isEnvManaged:!0,enabled:!0})}}(e,r);let t=function(e,r){let t=e.prepare("SELECT path FROM repositories WHERE enabled = 0").all().map(e=>e.path);return r.filter(e=>!t.includes(h(e)))}(e,r),o=r.filter(e=>!t.includes(e));return{filteredPaths:t,excludedPaths:o,excludedCount:o.length}}function f(e,r){let t=h(r),o=p(e,t);if(o)c(e,o.id,{enabled:!1});else{if(e.prepare("SELECT COUNT(*) as count FROM repositories WHERE enabled = 0").get().count>=1e3)throw Error("Disabled repository limit exceeded");u(e,{name:n().basename(t),path:t,cloneSource:"local",isEnvManaged:!1,enabled:!1})}}function E(e){return e.prepare("SELECT * FROM repositories WHERE enabled = 0 ORDER BY name ASC").all().map(a)}function _(e,r){let t=p(e,h(r));return t?(c(e,t.id,{enabled:!0}),{...t,enabled:!0}):null}function v(e,r){let t=(0,o.randomUUID)(),s=Date.now();return e.prepare(`
19
+ `).run(...n)}function h(e){return n().resolve(e)}function g(e){if(!e||"string"!=typeof e)return{valid:!1,error:"repositoryPath is required"};if(e.includes("\0"))return{valid:!1,error:"Invalid repository path"};let r=h(e);return(0,l.F)(r)?{valid:!1,error:"Invalid repository path"}:{valid:!0,resolvedPath:r}}function f(e,r){!function(e,r){for(let t of r){let r=h(t);d(e,r)||u(e,{name:n().basename(r),path:r,cloneSource:"local",isEnvManaged:!0,enabled:!0})}}(e,r);let t=function(e,r){let t=e.prepare("SELECT path FROM repositories WHERE enabled = 0").all().map(e=>e.path);return r.filter(e=>!t.includes(h(e)))}(e,r),o=r.filter(e=>!t.includes(e));return{filteredPaths:t,excludedPaths:o,excludedCount:o.length}}function m(e,r){let t=h(r),o=d(e,t);if(o)c(e,o.id,{enabled:!1});else{if(e.prepare("SELECT COUNT(*) as count FROM repositories WHERE enabled = 0").get().count>=1e3)throw Error("Disabled repository limit exceeded");u(e,{name:n().basename(t),path:t,cloneSource:"local",isEnvManaged:!1,enabled:!1})}}function E(e){return e.prepare("SELECT * FROM repositories WHERE enabled = 0 ORDER BY name ASC").all().map(a)}function _(e,r){let t=d(e,h(r));return t?(c(e,t.id,{enabled:!0}),{...t,enabled:!0}):null}function $(e,r){let t=(0,o.randomUUID)(),s=Date.now();return e.prepare(`
20
20
  INSERT INTO clone_jobs (
21
21
  id, clone_url, normalized_clone_url, target_path,
22
22
  status, progress, created_at
23
23
  )
24
24
  VALUES (?, ?, ?, ?, 'pending', 0, ?)
25
- `).run(t,r.cloneUrl,r.normalizedCloneUrl,r.targetPath,s),{id:t,cloneUrl:r.cloneUrl,normalizedCloneUrl:r.normalizedCloneUrl,targetPath:r.targetPath,status:"pending",progress:0,createdAt:new Date(s)}}function x(e,r){let t=e.prepare(`
25
+ `).run(t,r.cloneUrl,r.normalizedCloneUrl,r.targetPath,s),{id:t,cloneUrl:r.cloneUrl,normalizedCloneUrl:r.normalizedCloneUrl,targetPath:r.targetPath,status:"pending",progress:0,createdAt:new Date(s)}}function v(e,r){let t=e.prepare(`
26
26
  SELECT * FROM clone_jobs
27
27
  WHERE id = ?
28
- `).get(r);return t?i(t):null}function $(e,r,t){let o=[],s=[];void 0!==t.status&&(o.push("status = ?"),s.push(t.status)),void 0!==t.pid&&(o.push("pid = ?"),s.push(t.pid)),void 0!==t.progress&&(o.push("progress = ?"),s.push(t.progress)),void 0!==t.repositoryId&&(o.push("repository_id = ?"),s.push(t.repositoryId)),void 0!==t.errorCategory&&(o.push("error_category = ?"),s.push(t.errorCategory)),void 0!==t.errorCode&&(o.push("error_code = ?"),s.push(t.errorCode)),void 0!==t.errorMessage&&(o.push("error_message = ?"),s.push(t.errorMessage)),void 0!==t.startedAt&&(o.push("started_at = ?"),s.push(t.startedAt.getTime())),void 0!==t.completedAt&&(o.push("completed_at = ?"),s.push(t.completedAt.getTime())),0!==o.length&&(s.push(r),e.prepare(`
28
+ `).get(r);return t?i(t):null}function x(e,r,t){let o=[],s=[];void 0!==t.status&&(o.push("status = ?"),s.push(t.status)),void 0!==t.pid&&(o.push("pid = ?"),s.push(t.pid)),void 0!==t.progress&&(o.push("progress = ?"),s.push(t.progress)),void 0!==t.repositoryId&&(o.push("repository_id = ?"),s.push(t.repositoryId)),void 0!==t.errorCategory&&(o.push("error_category = ?"),s.push(t.errorCategory)),void 0!==t.errorCode&&(o.push("error_code = ?"),s.push(t.errorCode)),void 0!==t.errorMessage&&(o.push("error_message = ?"),s.push(t.errorMessage)),void 0!==t.startedAt&&(o.push("started_at = ?"),s.push(t.startedAt.getTime())),void 0!==t.completedAt&&(o.push("completed_at = ?"),s.push(t.completedAt.getTime())),0!==o.length&&(s.push(r),e.prepare(`
29
29
  UPDATE clone_jobs
30
30
  SET ${o.join(", ")}
31
31
  WHERE id = ?
32
- `).run(...s))}function S(e,r){let t=e.prepare(`
32
+ `).run(...s))}function w(e,r){let t=e.prepare(`
33
33
  SELECT * FROM clone_jobs
34
34
  WHERE normalized_clone_url = ?
35
35
  AND status IN ('pending', 'running')
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=6865,e.ids=[6865],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},75144:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>w,patchFetch:()=>x,requestAsyncStorage:()=>g,routeModule:()=>m,serverHooks:()=>v,staticGenerationAsyncStorage:()=>y});var o={};r.r(o),r.d(o,{POST:()=>f});var s=r(49303),n=r(88716),i=r(60670),a=r(87070),p=r(55315),l=r.n(p),u=r(97425),c=r(67722),d=r(57440),h=r(98838);async function f(e){try{let{repositoryPath:t}=await e.json();if(!t||"string"!=typeof t)return a.NextResponse.json({error:"Repository path is required"},{status:400});let{CM_ROOT_DIR:r}=(0,h.dU)();if(!(0,d.j)(t,r))return a.NextResponse.json({error:"Invalid or unsafe repository path"},{status:400});let o=l().resolve(r,t),s=await (0,c.e9)(o);if(0===s.length)return a.NextResponse.json({error:"No worktrees found in the specified path. Make sure it is a valid git repository."},{status:404});let n=(0,u.getDbInstance)();return(0,c.h2)(n,s),a.NextResponse.json({success:!0,message:`Successfully scanned and added ${s.length} worktree(s)`,worktreeCount:s.length,repositoryPath:s[0].repositoryPath,repositoryName:s[0].repositoryName},{status:200})}catch(t){console.error("Error scanning repository:",t);let e=t instanceof Error?t.message:"Failed to scan repository";return a.NextResponse.json({error:e},{status:500})}}let m=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/scan/route",pathname:"/api/repositories/scan",filename:"route",bundlePath:"app/api/repositories/scan/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/scan/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:g,staticGenerationAsyncStorage:y,serverHooks:v}=m,w="/api/repositories/scan/route";function x(){return(0,i.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:y})}},57440:(e,t,r)=>{r.d(t,{j:()=>n});var o=r(55315),s=r.n(o);function n(e,t){if(!e||""===e.trim()||e.includes("\0"))return!1;let r=e;try{r=decodeURIComponent(e)}catch{r=e}if(r.includes("\0"))return!1;let o=s().resolve(t),n=s().resolve(t,r),i=s().relative(o,n);return!(i.startsWith("..")||s().isAbsolute(i))}},67722:(e,t,r)=>{r.d(t,{Lj:()=>c,a$:()=>l,e9:()=>u,h2:()=>d});var o=r(61282),s=r(21764),n=r(55315),i=r.n(n),a=r(75748),p=r(98838);function l(){let e=process.env.WORKTREE_REPOS;if(e&&e.trim())return e.split(",").map(e=>e.trim()).filter(e=>e.length>0);let t=(0,p.Hb)("CM_ROOT_DIR");return t&&t.trim()?[t.trim()]:[]}async function u(e){let t=(0,s.promisify)(o.exec);try{let{stdout:r}=await t("git worktree list",{cwd:e}),o=function(e){if(!e||""===e.trim())return[];let t=e.trim().split("\n"),r=[];for(let e of t){let t=e.trim();if(!t)continue;let o=t.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(o){let[,e,t,s]=o;r.push({path:e.trim(),branch:s||`detached-${t}`,commit:t})}}return r}(r),s=i().resolve(e),n=i().basename(s);return o.map(e=>({id:function(e,t){if(!e)return"";let r=e=>e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),o=r(e);if(t){let e=r(t);return`${e}-${o}`}return o}(e.branch,n),name:e.branch,path:i().resolve(e.path),repositoryPath:s,repositoryName:n})).filter(e=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(t=>e.path.startsWith(t))?(console.warn(`Skipping potentially unsafe worktree path: ${e.path}`),!1):!(e.path.includes("\0")||e.path.includes(".."))||(console.warn(`Skipping path with potentially malicious characters: ${e.path}`),!1))}catch(r){let e=r instanceof Error?r.message:String(r),t=r.code;if(e?.includes("not a git repository")||128===t)return[];throw r}}async function c(e){let t=[];for(let r of e)try{console.log(`Scanning repository: ${r}`);let e=await u(r);t.push(...e),console.log(` Found ${e.length} worktree(s)`)}catch(e){console.error(`Error scanning repository ${r}:`,e)}return t}function d(e,t){if(0===t.length)return;let r=new Map;for(let e of t){let t=e.repositoryPath||"";r.has(t)||r.set(t,[]),r.get(t).push(e)}for(let[t,o]of r){if(!t)continue;let r=(0,a.Pv)(e,t),s=new Set(o.map(e=>e.id)),n=r.filter(e=>!s.has(e));if(n.length>0){let r=(0,a.pM)(e,n);console.log(`Removed ${r.deletedCount} deleted worktree(s) from ${t}`)}for(let t of o)(0,a.ly)(e,t)}}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[8948,5972,7425],()=>r(75144));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=6865,e.ids=[6865],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},75144:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>w,patchFetch:()=>x,requestAsyncStorage:()=>y,routeModule:()=>m,serverHooks:()=>v,staticGenerationAsyncStorage:()=>g});var o={};r.r(o),r.d(o,{POST:()=>f});var n=r(49303),s=r(88716),i=r(60670),a=r(87070),l=r(55315),c=r.n(l),p=r(97425),u=r(67722),d=r(57440),h=r(98838);async function f(e){try{let{repositoryPath:t}=await e.json();if(!t||"string"!=typeof t)return a.NextResponse.json({error:"Repository path is required"},{status:400});let{CM_ROOT_DIR:r}=(0,h.dU)();if(!(0,d.jj)(t,r))return a.NextResponse.json({error:"Invalid or unsafe repository path"},{status:400});let o=c().resolve(r,t),n=await (0,u.e9)(o);if(0===n.length)return a.NextResponse.json({error:"No worktrees found in the specified path. Make sure it is a valid git repository."},{status:404});let s=(0,p.getDbInstance)();return(0,u.h2)(s,n),a.NextResponse.json({success:!0,message:`Successfully scanned and added ${n.length} worktree(s)`,worktreeCount:n.length,repositoryPath:n[0].repositoryPath,repositoryName:n[0].repositoryName},{status:200})}catch(t){console.error("Error scanning repository:",t);let e=t instanceof Error?t.message:"Failed to scan repository";return a.NextResponse.json({error:e},{status:500})}}let m=new n.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/repositories/scan/route",pathname:"/api/repositories/scan",filename:"route",bundlePath:"app/api/repositories/scan/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/scan/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:y,staticGenerationAsyncStorage:g,serverHooks:v}=m,w="/api/repositories/scan/route";function x(){return(0,i.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:g})}},57440:(e,t,r)=>{r.d(t,{iH:()=>c,jj:()=>a,kz:()=>l});var o=r(55315),n=r.n(o),s=r(92048);function i(e,t){return e===t||e.startsWith(t+n().sep)}function a(e,t){if(!e||""===e.trim()||e.includes("\0"))return!1;let r=e;try{r=decodeURIComponent(e)}catch{r=e}if(r.includes("\0"))return!1;let o=n().resolve(t),s=n().resolve(t,r),i=n().relative(o,s);return!(i.startsWith("..")||n().isAbsolute(i))}function l(e,t){if(!e||""===e.trim())throw Error("Invalid path: Path cannot be empty");if(e.includes("\0"))throw Error("Invalid path: Null bytes not allowed");if(!a(e,t))throw Error(`Path is outside allowed directory: ${e} (allowed root: ${t})`);let r=e;try{r=decodeURIComponent(e)}catch{r=e}return n().resolve(t,r)}function c(e,t){let r;try{r=(0,s.realpathSync)(t)}catch{return!1}let o=n().resolve(t,e);if((0,s.existsSync)(o))try{let t=(0,s.realpathSync)(o),n=i(t,r);return n||console.warn(`[SEC-394] symlink traversal rejected: ${e} -> ${t}`),n}catch{return!1}try{if((0,s.lstatSync)(o).isSymbolicLink())try{let t=(0,s.readlinkSync)(o),a=n().resolve(n().dirname(o),t),l=i(a,r);return l||console.warn(`[SEC-394] dangling symlink traversal rejected: ${e} -> ${a}`),l}catch{return!1}}catch{}let a=n().dirname(o);for(;a!==n().dirname(a);){if((0,s.existsSync)(a))try{let e=(0,s.realpathSync)(a),t=i(e,r);return t||console.warn(`[SEC-394] symlink traversal rejected (ancestor): ${a} -> ${e}`),t}catch{break}a=n().dirname(a)}return!1}},67722:(e,t,r)=>{r.d(t,{Lj:()=>u,a$:()=>c,e9:()=>p,h2:()=>d});var o=r(61282),n=r(21764),s=r(55315),i=r.n(s),a=r(75748),l=r(98838);function c(){let e=process.env.WORKTREE_REPOS;if(e&&e.trim())return e.split(",").map(e=>e.trim()).filter(e=>e.length>0);let t=(0,l.Hb)("CM_ROOT_DIR");return t&&t.trim()?[t.trim()]:[]}async function p(e){let t=(0,n.promisify)(o.exec);try{let{stdout:r}=await t("git worktree list",{cwd:e}),o=function(e){if(!e||""===e.trim())return[];let t=e.trim().split("\n"),r=[];for(let e of t){let t=e.trim();if(!t)continue;let o=t.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(o){let[,e,t,n]=o;r.push({path:e.trim(),branch:n||`detached-${t}`,commit:t})}}return r}(r),n=i().resolve(e),s=i().basename(n);return o.map(e=>({id:function(e,t){if(!e)return"";let r=e=>e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),o=r(e);if(t){let e=r(t);return`${e}-${o}`}return o}(e.branch,s),name:e.branch,path:i().resolve(e.path),repositoryPath:n,repositoryName:s})).filter(e=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(t=>e.path.startsWith(t))?(console.warn(`Skipping potentially unsafe worktree path: ${e.path}`),!1):!(e.path.includes("\0")||e.path.includes(".."))||(console.warn(`Skipping path with potentially malicious characters: ${e.path}`),!1))}catch(r){let e=r instanceof Error?r.message:String(r),t=r.code;if(e?.includes("not a git repository")||128===t)return[];throw r}}async function u(e){let t=[];for(let r of e)try{console.log(`Scanning repository: ${r}`);let e=await p(r);t.push(...e),console.log(` Found ${e.length} worktree(s)`)}catch(e){console.error(`Error scanning repository ${r}:`,e)}return t}function d(e,t){if(0===t.length)return;let r=new Map;for(let e of t){let t=e.repositoryPath||"";r.has(t)||r.set(t,[]),r.get(t).push(e)}for(let[t,o]of r){if(!t)continue;let r=(0,a.Pv)(e,t),n=new Set(o.map(e=>e.id)),s=r.filter(e=>!n.has(e));if(s.length>0){let r=(0,a.pM)(e,s);console.log(`Removed ${r.deletedCount} deleted worktree(s) from ${t}`)}for(let t of o)(0,a.ly)(e,t)}}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[8948,5972,7425],()=>r(75144));module.exports=o})();
@@ -1,2 +1 @@
1
- "use strict";(()=>{var e={};e.id=6521,e.ids=[6521],e.modules={20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},21764:e=>{e.exports=require("util")},30781:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>h,patchFetch:()=>f,requestAsyncStorage:()=>l,routeModule:()=>p,serverHooks:()=>d,staticGenerationAsyncStorage:()=>m});var s={};r.r(s),r.d(s,{POST:()=>c});var n=r(49303),o=r(88716),i=r(60670),a=r(87070),u=r(10927);async function c(e,{params:t}){try{var r;let{cliToolId:s,lines:n=1e3}=await e.json();if(!s)return a.NextResponse.json({error:"Missing cliToolId"},{status:400});let o=(r=t.id,`mcbd-${s}-${r}`);if(!await u.Hk(o))return a.NextResponse.json({output:`Session not running. Starting ${s} session...
2
- `});let i=await u.xq(o,n);return a.NextResponse.json({output:i})}catch(e){return console.error("Capture API error:",e),a.NextResponse.json({error:e.message},{status:500})}}let p=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/capture/route",pathname:"/api/worktrees/[id]/capture",filename:"route",bundlePath:"app/api/worktrees/[id]/capture/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/capture/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:l,staticGenerationAsyncStorage:m,serverHooks:d}=p,h="/api/worktrees/[id]/capture/route";function f(){return(0,i.patchFetch)({serverHooks:d,staticGenerationAsyncStorage:m})}},10927:(e,t,r)=>{r.d(t,{AJ:()=>l,Hk:()=>o,Is:()=>a,ZV:()=>m,ed:()=>i,hL:()=>c,xq:()=>p});var s=r(61282);let n=(0,r(21764).promisify)(s.exec);async function o(e){try{return await n(`tmux has-session -t "${e}"`,{timeout:5e3}),!0}catch{return!1}}async function i(e,t){let r,s,o;"string"==typeof e?(r=e,s=t,o=5e4):(r=e.sessionName,s=e.workingDirectory,o=e.historyLimit||5e4);try{await n(`tmux new-session -d -s "${r}" -c "${s}"`,{timeout:5e3}),await n(`tmux set-option -t "${r}" history-limit ${o}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to create tmux session: ${e}`)}}async function a(e,t,r=!0){let s=t.replace(/'/g,"'\\''"),o=r?`tmux send-keys -t "${e}" '${s}' C-m`:`tmux send-keys -t "${e}" '${s}'`;try{await n(o,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send keys to tmux session: ${e}`)}}let u=new Set(["Up","Down","Left","Right","Enter","Space","Tab","Escape","BSpace","DC"]);async function c(e,t){if(0!==t.length){for(let e of t)if(!u.has(e))throw Error(`Invalid special key: ${e}`);try{for(let r=0;r<t.length;r++){let s=`tmux send-keys -t "${e}" ${t[r]}`;await n(s,{timeout:5e3}),r<t.length-1&&await new Promise(e=>setTimeout(e,100))}}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special keys to tmux session: ${e}`)}}}async function p(e,t){let r,s;"number"==typeof t?(r=-t,s="-"):t?(r=t.startLine??-1e4,s=t.endLine??"-"):(r=-1e3,s="-");try{let{stdout:t}=await n(`tmux capture-pane -t "${e}" -p -e -S ${r} -E ${s}`,{timeout:5e3,maxBuffer:10485760});return t}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to capture pane: ${e}`)}}async function l(e){try{return await n(`tmux kill-session -t "${e}"`,{timeout:5e3}),!0}catch(t){let e=t instanceof Error?t.message:String(t);if(e?.includes("no server running")||e?.includes("can't find session"))return!1;throw Error(`Failed to kill tmux session: ${e}`)}}async function m(e,t){try{await n(`tmux send-keys -t "${e}" ${t}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special key: ${e}`)}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[8948,5972],()=>r(30781));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=6521,e.ids=[6521],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},30781:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>h,patchFetch:()=>v,requestAsyncStorage:()=>q,routeModule:()=>m,serverHooks:()=>g,staticGenerationAsyncStorage:()=>f});var s={};t.r(s),t.d(s,{POST:()=>c});var o=t(49303),i=t(88716),n=t(60670),a=t(87070),u=t(83513),p=t(55837),d=t(75748),x=t(97425),l=t(10927);async function c(e,{params:r}){try{let{cliToolId:t,lines:s=1e3}=await e.json();if(!t||"string"!=typeof t||!(0,u._7)(t))return a.NextResponse.json({error:"Invalid cliToolId parameter"},{status:400});if("number"!=typeof s||!Number.isInteger(s)||s<1||s>1e5)return a.NextResponse.json({error:"Invalid lines parameter: must be an integer between 1 and 100000"},{status:400});let o=(0,x.getDbInstance)();if(!(0,d.gU)(o,r.id))return a.NextResponse.json({error:"Worktree not found"},{status:404});let i=p.g.getInstance().getTool(t).getSessionName(r.id);if(!await (0,l.Hk)(i))return a.NextResponse.json({error:"Session not found. Use startSession API to create a session first."},{status:404});let n=await (0,l.xq)(i,Math.floor(s));return a.NextResponse.json({output:n})}catch(e){return console.error("Capture API error:",e),a.NextResponse.json({error:"Failed to capture terminal output"},{status:500})}}let m=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/capture/route",pathname:"/api/worktrees/[id]/capture",filename:"route",bundlePath:"app/api/worktrees/[id]/capture/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/capture/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:q,staticGenerationAsyncStorage:f,serverHooks:g}=m,h="/api/worktrees/[id]/capture/route";function v(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:f})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[8948,5972,3853,4893,7425,7566,4952],()=>t(30781));module.exports=s})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../../node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../../node_modules/next/package.json","../../../../../../../package.json","../../../../../../package.json","../../../../../chunks/5972.js","../../../../../chunks/8948.js","../../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../../data/cm.db","../../../../../../../node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../../../../../../node_modules/better-sqlite3/lib/database.js","../../../../../../../node_modules/better-sqlite3/lib/index.js","../../../../../../../node_modules/better-sqlite3/lib/methods/aggregate.js","../../../../../../../node_modules/better-sqlite3/lib/methods/backup.js","../../../../../../../node_modules/better-sqlite3/lib/methods/function.js","../../../../../../../node_modules/better-sqlite3/lib/methods/inspect.js","../../../../../../../node_modules/better-sqlite3/lib/methods/pragma.js","../../../../../../../node_modules/better-sqlite3/lib/methods/serialize.js","../../../../../../../node_modules/better-sqlite3/lib/methods/table.js","../../../../../../../node_modules/better-sqlite3/lib/methods/transaction.js","../../../../../../../node_modules/better-sqlite3/lib/methods/wrappers.js","../../../../../../../node_modules/better-sqlite3/lib/sqlite-error.js","../../../../../../../node_modules/better-sqlite3/lib/util.js","../../../../../../../node_modules/better-sqlite3/package.json","../../../../../../../node_modules/bindings/bindings.js","../../../../../../../node_modules/bindings/package.json","../../../../../../../node_modules/file-uri-to-path/index.js","../../../../../../../node_modules/file-uri-to-path/package.json","../../../../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../../node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../../node_modules/next/package.json","../../../../../../../package.json","../../../../../../package.json","../../../../../chunks/3853.js","../../../../../chunks/4893.js","../../../../../chunks/4952.js","../../../../../chunks/5972.js","../../../../../chunks/7425.js","../../../../../chunks/7566.js","../../../../../chunks/8948.js","../../../../../webpack-runtime.js"]}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=1991,e.ids=[1991],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},26683:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>w,patchFetch:()=>A,requestAsyncStorage:()=>v,routeModule:()=>q,serverHooks:()=>k,staticGenerationAsyncStorage:()=>P});var n={};r.r(n),r.d(n,{GET:()=>f});var i=r(49303),o=r(88716),s=r(60670),a=r(87070),u=r(97425),p=r(75748),c=r(63661),l=r(55837),d=r(83513),h=r(89194),g=r(19377),m=r(13561),x=r(38693);async function f(e,{params:t}){try{if(!(0,x.m$)(t.id))return a.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let r=(0,u.getDbInstance)(),n=(0,p.gU)(r,t.id);if(!n)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let i=new URL(e.url).searchParams.get("cliTool"),o=i&&d.tK.includes(i)?i:n.cliToolId||"claude",s=l.g.getInstance().getTool(o);if(!await s.isRunning(t.id))return a.NextResponse.json({isRunning:!1,content:"",lineCount:0,cliToolId:o},{status:200});let f=(0,p.zl)(r,t.id,o),q=f?.lastCapturedLine||0,v=await (0,h.NA)(t.id,o,1e4),P=v.split("\n"),k=P.length,w=P.slice(Math.max(0,q)).join("\n"),A=(0,g.vp)(v),_=(0,m._)(v,o),j="running"===_.status&&"thinking_indicator"===_.reason,R={isPrompt:!1,cleanContent:A};if(!j){let e=(0,g.Sg)(o);R=(0,c.F)((0,g.BN)(A),e)}let b=_.hasActivePrompt,M=P.slice(-100).join("\n"),C=(0,x.bq)(t.id),N=(0,x.gf)(t.id);return a.NextResponse.json({isRunning:!0,cliToolId:o,content:w,fullOutput:v,realtimeSnippet:M,lineCount:k,lastCapturedLine:q,isComplete:b,isGenerating:j,thinking:j,thinkingMessage:j?"Claude is thinking...":null,isPromptWaiting:b,promptData:b?R.promptData:null,autoYes:{enabled:C?.enabled??!1,expiresAt:C?.enabled?C.expiresAt:null,stopReason:C?.stopReason},lastServerResponseTimestamp:N})}catch(e){return console.error("Error getting current output:",e),a.NextResponse.json({error:"Failed to get current output"},{status:500})}}let q=new i.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/current-output/route",pathname:"/api/worktrees/[id]/current-output",filename:"route",bundlePath:"app/api/worktrees/[id]/current-output/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/current-output/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:v,staticGenerationAsyncStorage:P,serverHooks:k}=q,w="/api/worktrees/[id]/current-output/route";function A(){return(0,s.patchFetch)({serverHooks:k,staticGenerationAsyncStorage:P})}},13561:(e,t,r)=>{r.d(t,{_:()=>o});var n=r(19377),i=r(63661);function o(e,t,r){let o=(0,n.vp)(e),s=o.split("\n"),a=s.length-1;for(;a>=0&&""===s[a].trim();)a--;let u=s.slice(0,a+1),p=u.slice(-15).join("\n"),c=u.slice(-5).join("\n"),l=(0,n.Sg)(t);if((0,i.F)((0,n.BN)(o),l).isPrompt)return{status:"waiting",confidence:"high",reason:"prompt_detected",hasActivePrompt:!0};if((0,n.Wg)(t,c))return{status:"running",confidence:"high",reason:"thinking_indicator",hasActivePrompt:!1};if("opencode"===t){if(n.nT.test(p))return{status:"running",confidence:"high",reason:"opencode_processing_indicator",hasActivePrompt:!1};let e=(0,n.BN)(o).split("\n"),t=Math.max(0,e.length-7);for(let r=e.length-1;r>=Math.max(0,e.length-10);r--)if(/ctrl\+[tp]/.test(e[r])){t=Math.max(0,r-2);break}let r=e.slice(0,t),i=r.length-1;for(;i>=0&&""===r[i].trim();)i--;if(i>=0){let e=r.slice(Math.max(0,i-5+1),i+1).join("\n");if((0,n.Wg)("opencode",e))return{status:"running",confidence:"high",reason:"thinking_indicator",hasActivePrompt:!1};let t=r.slice(Math.max(0,i-15+1),i+1).join("\n");if(n.n9.test(t))return{status:"ready",confidence:"high",reason:"opencode_response_complete",hasActivePrompt:!1}}}let{promptPattern:d}=(0,n.bs)(t);return d.test(p)?{status:"ready",confidence:"high",reason:"input_prompt",hasActivePrompt:!1}:r&&Date.now()-r.getTime()>5e3?{status:"ready",confidence:"low",reason:"no_recent_output",hasActivePrompt:!1}:{status:"running",confidence:"low",reason:"default",hasActivePrompt:!1}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>r(26683));module.exports=n})();
1
+ "use strict";(()=>{var e={};e.id=1991,e.ids=[1991],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},26683:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>k,patchFetch:()=>P,requestAsyncStorage:()=>f,routeModule:()=>x,serverHooks:()=>v,staticGenerationAsyncStorage:()=>q});var n={};r.r(n),r.d(n,{GET:()=>m});var i=r(49303),o=r(88716),s=r(60670),a=r(87070),u=r(97425),p=r(75748),c=r(55837),l=r(83513),d=r(89194),h=r(13561),g=r(38693);async function m(e,{params:t}){try{if(!(0,g.m$)(t.id))return a.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let r=(0,u.getDbInstance)(),n=(0,p.gU)(r,t.id);if(!n)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let i=new URL(e.url).searchParams.get("cliTool"),o=i&&l.tK.includes(i)?i:n.cliToolId||"claude",s=c.g.getInstance().getTool(o);if(!await s.isRunning(t.id))return a.NextResponse.json({isRunning:!1,content:"",lineCount:0,cliToolId:o},{status:200});let m=(0,p.zl)(r,t.id,o),x=m?.lastCapturedLine||0,f=await (0,d.NA)(t.id,o,1e4),q=f.split("\n"),v=q.length,k=q.slice(Math.max(0,x)).join("\n"),P=(0,h._)(f,o),w="running"===P.status&&"thinking_indicator"===P.reason,A=P.hasActivePrompt,_=q.slice(-100).join("\n"),j=(0,g.bq)(t.id),R=(0,g.gf)(t.id);return a.NextResponse.json({isRunning:!0,cliToolId:o,content:k,fullOutput:f,realtimeSnippet:_,lineCount:v,lastCapturedLine:x,isComplete:A,isGenerating:w,thinking:w,thinkingMessage:w?"Claude is thinking...":null,isPromptWaiting:A,promptData:A?P.promptDetection.promptData??null:null,autoYes:{enabled:j?.enabled??!1,expiresAt:j?.enabled?j.expiresAt:null,stopReason:j?.stopReason},lastServerResponseTimestamp:R})}catch(e){return console.error("Error getting current output:",e),a.NextResponse.json({error:"Failed to get current output"},{status:500})}}let x=new i.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/current-output/route",pathname:"/api/worktrees/[id]/current-output",filename:"route",bundlePath:"app/api/worktrees/[id]/current-output/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/current-output/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:f,staticGenerationAsyncStorage:q,serverHooks:v}=x,k="/api/worktrees/[id]/current-output/route";function P(){return(0,s.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:q})}},13561:(e,t,r)=>{r.d(t,{_:()=>o});var n=r(19377),i=r(63661);function o(e,t,r){let o=(0,n.vp)(e),s=o.split("\n"),a=s.length-1;for(;a>=0&&""===s[a].trim();)a--;let u=s.slice(0,a+1),p=u.slice(-15).join("\n"),c=u.slice(-5).join("\n"),l=(0,n.Sg)(t),d=(0,i.FS)((0,n.BN)(p),l);if(d.isPrompt)return{status:"waiting",confidence:"high",reason:"prompt_detected",hasActivePrompt:!0,promptDetection:d};if((0,n.Wg)(t,c))return{status:"running",confidence:"high",reason:"thinking_indicator",hasActivePrompt:!1,promptDetection:d};if("opencode"===t){if(n.nT.test(p))return{status:"running",confidence:"high",reason:"opencode_processing_indicator",hasActivePrompt:!1,promptDetection:d};let e=(0,n.BN)(o).split("\n"),t=Math.max(0,e.length-7);for(let r=e.length-1;r>=Math.max(0,e.length-10);r--)if(/ctrl\+[tp]/.test(e[r])){t=Math.max(0,r-2);break}let r=e.slice(0,t),i=r.length-1;for(;i>=0&&""===r[i].trim();)i--;if(i>=0){let e=r.slice(Math.max(0,i-5+1),i+1).join("\n");if((0,n.Wg)("opencode",e))return{status:"running",confidence:"high",reason:"thinking_indicator",hasActivePrompt:!1,promptDetection:d};let t=r.slice(Math.max(0,i-15+1),i+1).join("\n");if(n.n9.test(t))return{status:"ready",confidence:"high",reason:"opencode_response_complete",hasActivePrompt:!1,promptDetection:d}}}let{promptPattern:h}=(0,n.bs)(t);return h.test(p)?{status:"ready",confidence:"high",reason:"input_prompt",hasActivePrompt:!1,promptDetection:d}:r&&Date.now()-r.getTime()>5e3?{status:"ready",confidence:"low",reason:"no_recent_output",hasActivePrompt:!1,promptDetection:d}:{status:"running",confidence:"low",reason:"default",hasActivePrompt:!1,promptDetection:d}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>r(26683));module.exports=n})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=9325,e.ids=[9325],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},25780:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>D,patchFetch:()=>F,requestAsyncStorage:()=>A,routeModule:()=>v,serverHooks:()=>w,staticGenerationAsyncStorage:()=>x});var i={};t.r(i),t.d(i,{DELETE:()=>L,GET:()=>_,PATCH:()=>O,POST:()=>y,PUT:()=>h});var n=t(49303),o=t(88716),s=t(60670),a=t(87070),c=t(97425),l=t(75748),u=t(55315),d=t(57440),p=t(68585),f=t(39365),E=t(81481);let m=[".mp4"],I=[{extension:".mp4",mimeType:"video/mp4",magicBytes:[102,116,121,112],magicBytesOffset:4}];var N=t(20629);let g={FILE_NOT_FOUND:404,WORKTREE_NOT_FOUND:404,PERMISSION_DENIED:403,NOT_EDITABLE:403,PROTECTED_DIRECTORY:403,INVALID_PATH:400,INVALID_REQUEST:400,INVALID_NAME:400,INVALID_CONTENT:400,DIRECTORY_NOT_EMPTY:400,DELETE_LIMIT_EXCEEDED:400,FILE_EXISTS:409,DISK_FULL:507,INTERNAL_ERROR:500,INVALID_EXTENSION:400,INVALID_MIME_TYPE:400,INVALID_MAGIC_BYTES:400,FILE_TOO_LARGE:413,INVALID_FILENAME:400,INVALID_FILE_CONTENT:400,MOVE_SAME_PATH:400,MOVE_INTO_SELF:400};function R(e,r,t=500){let i=g[e]??t;return a.NextResponse.json({success:!1,error:{code:e,message:r}},{status:i})}async function T(e,r){let t=(0,c.getDbInstance)(),i=(0,l.gU)(t,e);if(!i)return{error:R("WORKTREE_NOT_FOUND","Worktree not found")};let n=r.join("/"),o=(0,u.normalize)(n);return(0,d.j)(o,i.path)?{worktree:i,relativePath:o}:{error:R("INVALID_PATH","Invalid file path")}}async function _(e,{params:r}){try{let e=await T(r.id,r.path);if("error"in e)return e.error;let{worktree:t,relativePath:i}=e,n=i.split(".").pop()||"",o=(0,u.extname)(i).toLowerCase();if((0,E.Db)(o)){let e=(0,u.join)(t.path,i);try{let r=await (0,N.readFile)(e),s=(0,E.gp)(o,r);if(!s.valid){if(s.error?.includes("5MB"))return R("FILE_TOO_LARGE",s.error);if(s.error?.includes("magic bytes"))return R("INVALID_MAGIC_BYTES",s.error);return R("INVALID_FILE_CONTENT",s.error||"Invalid image content")}let c=(0,E.Kc)(o),l=r.toString("base64"),u=`data:${c};base64,${l}`;return a.NextResponse.json({success:!0,path:i,content:u,extension:n,worktreePath:t.path,isImage:!0,mimeType:c})}catch(e){if("ENOENT"===e.code)return R("FILE_NOT_FOUND","File not found");throw e}}if(function(e){if(!e)return!1;let r=(0,E.Ab)(e);return m.includes(r)}(o)){let e=(0,u.join)(t.path,i);try{if((await (0,N.stat)(e)).size>15728640)return R("FILE_TOO_LARGE","File size exceeds 15MB limit");let r=await (0,N.readFile)(e),s=r.length>15728640?{valid:!1,error:"File size exceeds 15MB limit"}:!function(e,r){let t=(0,E.Ab)(e),i=I.find(e=>e.extension===t);if(!i?.magicBytes)return!1;let n=i.magicBytesOffset||0;return!(r.length<n+i.magicBytes.length)&&i.magicBytes.every((e,t)=>r[n+t]===e)}(o,r)?{valid:!1,error:"Invalid video magic bytes"}:{valid:!0};if(!s.valid){if(s.error?.includes("MB"))return R("FILE_TOO_LARGE",s.error);if(s.error?.includes("magic bytes"))return R("INVALID_MAGIC_BYTES",s.error);return R("INVALID_FILE_CONTENT",s.error||"Invalid video content")}let c=function(e){if(!e)return;let r=(0,E.Ab)(e),t=I.find(e=>e.extension===r);return t?.mimeType}(o)||"video/mp4",l=r.toString("base64"),u=`data:${c};base64,${l}`;return a.NextResponse.json({success:!0,path:i,content:u,extension:n,worktreePath:t.path,isVideo:!0,mimeType:c})}catch(e){if("ENOENT"===e.code)return R("FILE_NOT_FOUND","File not found");throw e}}let s=await (0,p.O2)(t.path,i);if(!s.success)return R(s.error?.code||"INTERNAL_ERROR",s.error?.message||"Failed to read file");return a.NextResponse.json({success:!0,path:i,content:s.content,extension:n,worktreePath:t.path})}catch(e){return console.error("Error reading file:",e),R("INTERNAL_ERROR","Failed to read file")}}async function h(e,{params:r}){try{let t=await T(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t;if(!(0,p.rN)(n))return R("NOT_EDITABLE","File type is not editable");let{content:o}=await e.json();if(void 0===o)return R("INVALID_REQUEST","Content is required");let s=(0,u.extname)(n).toLowerCase(),c=(0,f.ty)(s,o);if(!c.valid)return R("INVALID_CONTENT",c.error||"Invalid content");let l=await (0,p.xH)(i.path,n,o);if(!l.success)return R(l.error?.code||"INTERNAL_ERROR",l.error?.message||"Failed to update file");return a.NextResponse.json({success:!0,path:n})}catch(e){return console.error("Error updating file:",e),R("INTERNAL_ERROR","Failed to update file")}}async function y(e,{params:r}){try{let t=await T(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{type:o,content:s}=await e.json();if(!o||!["file","directory"].includes(o))return R("INVALID_REQUEST",'Type must be "file" or "directory"');if("file"===o&&void 0!==s){let e=(0,u.extname)(n).toLowerCase();if((0,f.ZI)(e)){let r=(0,f.ty)(e,s);if(!r.valid)return R("INVALID_CONTENT",r.error||"Invalid content")}}let c=await (0,p.D5)(i.path,n,o,s);if(!c.success)return R(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to create file/directory");return a.NextResponse.json({success:!0,path:n},{status:201})}catch(e){return console.error("Error creating file/directory:",e),R("INTERNAL_ERROR","Failed to create file/directory")}}async function L(e,{params:r}){try{let t=await T(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{searchParams:o}=new URL(e.url),s="true"===o.get("recursive"),c=await (0,p.jN)(i.path,n,s);if(!c.success)return R(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to delete file/directory");return a.NextResponse.json({success:!0})}catch(e){return console.error("Error deleting file/directory:",e),R("INTERNAL_ERROR","Failed to delete file/directory")}}async function O(e,{params:r}){try{let t=await T(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{action:o,newName:s,destination:c}=await e.json();switch(o){case"rename":{if(!s||"string"!=typeof s)return R("INVALID_REQUEST","newName is required");let e=await (0,p.nz)(i.path,n,s);if(!e.success)return R(e.error?.code||"INTERNAL_ERROR",e.error?.message||"Failed to rename file/directory");return a.NextResponse.json({success:!0,path:e.path})}case"move":{if(!c||"string"!=typeof c)return R("INVALID_REQUEST","destination is required and must be a string");let e=await (0,p.wB)(i.path,n,c);if(!e.success)return R(e.error?.code||"INTERNAL_ERROR",e.error?.message||"Failed to move file/directory");return a.NextResponse.json({success:!0,path:e.path})}default:return R("INVALID_REQUEST",'Unknown action. Supported: "rename", "move"')}}catch(e){return console.error("Error renaming file/directory:",e),R("INTERNAL_ERROR","Failed to rename file/directory")}}let v=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/files/[...path]/route",pathname:"/api/worktrees/[id]/files/[...path]",filename:"route",bundlePath:"app/api/worktrees/[id]/files/[...path]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/files/[...path]/route.ts",nextConfigOutput:"",userland:i}),{requestAsyncStorage:A,staticGenerationAsyncStorage:x,serverHooks:w}=v,D="/api/worktrees/[id]/files/[...path]/route";function F(){return(0,s.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:x})}},81481:(e,r,t)=>{t.d(r,{Ab:()=>o,Db:()=>a,Kc:()=>s,P7:()=>i,gp:()=>c});let i=[".png",".jpg",".jpeg",".gif",".webp",".svg"],n=[{extension:".png",mimeType:"image/png",magicBytes:[137,80,78,71]},{extension:".jpg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".jpeg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".gif",mimeType:"image/gif",magicBytes:[71,73,70,56]},{extension:".webp",mimeType:"image/webp",magicBytes:[82,73,70,70]},{extension:".svg",mimeType:"image/svg+xml"}];function o(e){return e?e.startsWith(".")?e.toLowerCase():"."+e.toLowerCase():""}function s(e){let r=o(e),t=n.find(e=>e.extension===r);return t?.mimeType||"application/octet-stream"}function a(e){if(!e)return!1;let r=o(e);return i.includes(r)}function c(e,r){if(r.length>5242880)return{valid:!1,error:"File size exceeds 5MB limit"};if(".svg"===o(e)){var t;return(t=r.toString("utf-8")).includes("<svg")||t.startsWith("<?xml")?/<script[\s>]/i.test(t)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(t)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(t)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(t)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(e,r){let t=o(e),i=n.find(e=>e.extension===t);if(!i?.magicBytes)return".svg"===t;let s=i.magicBytesOffset||0;return!(r.length<s+i.magicBytes.length)&&i.magicBytes.every((e,t)=>r[s+t]===e)}(e,r)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}}};var r=require("../../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),i=r.X(0,[8948,5972,7425,8585],()=>t(25780));module.exports=i})();
1
+ "use strict";(()=>{var e={};e.id=9325,e.ids=[9325],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},25780:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>D,patchFetch:()=>F,requestAsyncStorage:()=>v,routeModule:()=>A,serverHooks:()=>w,staticGenerationAsyncStorage:()=>x});var i={};t.r(i),t.d(i,{DELETE:()=>L,GET:()=>_,PATCH:()=>O,POST:()=>y,PUT:()=>h});var n=t(49303),o=t(88716),a=t(60670),s=t(87070),c=t(97425),l=t(75748),u=t(55315),d=t(57440),p=t(68585),f=t(39365),E=t(81481);let I=[".mp4"],m=[{extension:".mp4",mimeType:"video/mp4",magicBytes:[102,116,121,112],magicBytesOffset:4}];var N=t(20629);let g={FILE_NOT_FOUND:404,WORKTREE_NOT_FOUND:404,PERMISSION_DENIED:403,NOT_EDITABLE:403,PROTECTED_DIRECTORY:403,INVALID_PATH:400,INVALID_REQUEST:400,INVALID_NAME:400,INVALID_CONTENT:400,DIRECTORY_NOT_EMPTY:400,DELETE_LIMIT_EXCEEDED:400,FILE_EXISTS:409,DISK_FULL:507,INTERNAL_ERROR:500,INVALID_EXTENSION:400,INVALID_MIME_TYPE:400,INVALID_MAGIC_BYTES:400,FILE_TOO_LARGE:413,INVALID_FILENAME:400,INVALID_FILE_CONTENT:400,MOVE_SAME_PATH:400,MOVE_INTO_SELF:400};function R(e,r,t=500){let i=g[e]??t;return s.NextResponse.json({success:!1,error:{code:e,message:r}},{status:i})}async function T(e,r){let t=(0,c.getDbInstance)(),i=(0,l.gU)(t,e);if(!i)return{error:R("WORKTREE_NOT_FOUND","Worktree not found")};let n=r.join("/"),o=(0,u.normalize)(n);return(0,d.jj)(o,i.path)?(0,d.iH)(o,i.path)?{worktree:i,relativePath:o}:{error:R("INVALID_PATH","Invalid path")}:{error:R("INVALID_PATH","Invalid file path")}}async function _(e,{params:r}){try{let e=await T(r.id,r.path);if("error"in e)return e.error;let{worktree:t,relativePath:i}=e,n=i.split(".").pop()||"",o=(0,u.extname)(i).toLowerCase();if((0,E.Db)(o)){let e=(0,u.join)(t.path,i);try{let r=await (0,N.readFile)(e),a=(0,E.gp)(o,r);if(!a.valid){if(a.error?.includes("5MB"))return R("FILE_TOO_LARGE",a.error);if(a.error?.includes("magic bytes"))return R("INVALID_MAGIC_BYTES",a.error);return R("INVALID_FILE_CONTENT",a.error||"Invalid image content")}let c=(0,E.Kc)(o),l=r.toString("base64"),u=`data:${c};base64,${l}`;return s.NextResponse.json({success:!0,path:i,content:u,extension:n,worktreePath:t.path,isImage:!0,mimeType:c})}catch(e){if("ENOENT"===e.code)return R("FILE_NOT_FOUND","File not found");throw e}}if(function(e){if(!e)return!1;let r=(0,E.Ab)(e);return I.includes(r)}(o)){let e=(0,u.join)(t.path,i);try{if((await (0,N.stat)(e)).size>15728640)return R("FILE_TOO_LARGE","File size exceeds 15MB limit");let r=await (0,N.readFile)(e),a=r.length>15728640?{valid:!1,error:"File size exceeds 15MB limit"}:!function(e,r){let t=(0,E.Ab)(e),i=m.find(e=>e.extension===t);if(!i?.magicBytes)return!1;let n=i.magicBytesOffset||0;return!(r.length<n+i.magicBytes.length)&&i.magicBytes.every((e,t)=>r[n+t]===e)}(o,r)?{valid:!1,error:"Invalid video magic bytes"}:{valid:!0};if(!a.valid){if(a.error?.includes("MB"))return R("FILE_TOO_LARGE",a.error);if(a.error?.includes("magic bytes"))return R("INVALID_MAGIC_BYTES",a.error);return R("INVALID_FILE_CONTENT",a.error||"Invalid video content")}let c=function(e){if(!e)return;let r=(0,E.Ab)(e),t=m.find(e=>e.extension===r);return t?.mimeType}(o)||"video/mp4",l=r.toString("base64"),u=`data:${c};base64,${l}`;return s.NextResponse.json({success:!0,path:i,content:u,extension:n,worktreePath:t.path,isVideo:!0,mimeType:c})}catch(e){if("ENOENT"===e.code)return R("FILE_NOT_FOUND","File not found");throw e}}let a=await (0,p.O2)(t.path,i);if(!a.success)return R(a.error?.code||"INTERNAL_ERROR",a.error?.message||"Failed to read file");return s.NextResponse.json({success:!0,path:i,content:a.content,extension:n,worktreePath:t.path})}catch(e){return console.error("Error reading file:",e),R("INTERNAL_ERROR","Failed to read file")}}async function h(e,{params:r}){try{let t=await T(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t;if(!(0,p.rN)(n))return R("NOT_EDITABLE","File type is not editable");let{content:o}=await e.json();if(void 0===o)return R("INVALID_REQUEST","Content is required");let a=(0,u.extname)(n).toLowerCase(),c=(0,f.ty)(a,o);if(!c.valid)return R("INVALID_CONTENT",c.error||"Invalid content");let l=await (0,p.xH)(i.path,n,o);if(!l.success)return R(l.error?.code||"INTERNAL_ERROR",l.error?.message||"Failed to update file");return s.NextResponse.json({success:!0,path:n})}catch(e){return console.error("Error updating file:",e),R("INTERNAL_ERROR","Failed to update file")}}async function y(e,{params:r}){try{let t=await T(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{type:o,content:a}=await e.json();if(!o||!["file","directory"].includes(o))return R("INVALID_REQUEST",'Type must be "file" or "directory"');if("file"===o&&void 0!==a){let e=(0,u.extname)(n).toLowerCase();if((0,f.ZI)(e)){let r=(0,f.ty)(e,a);if(!r.valid)return R("INVALID_CONTENT",r.error||"Invalid content")}}let c=await (0,p.D5)(i.path,n,o,a);if(!c.success)return R(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to create file/directory");return s.NextResponse.json({success:!0,path:n},{status:201})}catch(e){return console.error("Error creating file/directory:",e),R("INTERNAL_ERROR","Failed to create file/directory")}}async function L(e,{params:r}){try{let t=await T(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{searchParams:o}=new URL(e.url),a="true"===o.get("recursive"),c=await (0,p.jN)(i.path,n,a);if(!c.success)return R(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to delete file/directory");return s.NextResponse.json({success:!0})}catch(e){return console.error("Error deleting file/directory:",e),R("INTERNAL_ERROR","Failed to delete file/directory")}}async function O(e,{params:r}){try{let t=await T(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{action:o,newName:a,destination:c}=await e.json();switch(o){case"rename":{if(!a||"string"!=typeof a)return R("INVALID_REQUEST","newName is required");let e=await (0,p.nz)(i.path,n,a);if(!e.success)return R(e.error?.code||"INTERNAL_ERROR",e.error?.message||"Failed to rename file/directory");return s.NextResponse.json({success:!0,path:e.path})}case"move":{if(!c||"string"!=typeof c)return R("INVALID_REQUEST","destination is required and must be a string");let e=await (0,p.wB)(i.path,n,c);if(!e.success)return R(e.error?.code||"INTERNAL_ERROR",e.error?.message||"Failed to move file/directory");return s.NextResponse.json({success:!0,path:e.path})}default:return R("INVALID_REQUEST",'Unknown action. Supported: "rename", "move"')}}catch(e){return console.error("Error renaming file/directory:",e),R("INTERNAL_ERROR","Failed to rename file/directory")}}let A=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/files/[...path]/route",pathname:"/api/worktrees/[id]/files/[...path]",filename:"route",bundlePath:"app/api/worktrees/[id]/files/[...path]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/files/[...path]/route.ts",nextConfigOutput:"",userland:i}),{requestAsyncStorage:v,staticGenerationAsyncStorage:x,serverHooks:w}=A,D="/api/worktrees/[id]/files/[...path]/route";function F(){return(0,a.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:x})}},81481:(e,r,t)=>{t.d(r,{Ab:()=>o,Db:()=>s,Kc:()=>a,P7:()=>i,gp:()=>c});let i=[".png",".jpg",".jpeg",".gif",".webp",".svg"],n=[{extension:".png",mimeType:"image/png",magicBytes:[137,80,78,71]},{extension:".jpg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".jpeg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".gif",mimeType:"image/gif",magicBytes:[71,73,70,56]},{extension:".webp",mimeType:"image/webp",magicBytes:[82,73,70,70]},{extension:".svg",mimeType:"image/svg+xml"}];function o(e){return e?e.startsWith(".")?e.toLowerCase():"."+e.toLowerCase():""}function a(e){let r=o(e),t=n.find(e=>e.extension===r);return t?.mimeType||"application/octet-stream"}function s(e){if(!e)return!1;let r=o(e);return i.includes(r)}function c(e,r){if(r.length>5242880)return{valid:!1,error:"File size exceeds 5MB limit"};if(".svg"===o(e)){var t;return(t=r.toString("utf-8")).includes("<svg")||t.startsWith("<?xml")?/<script[\s>]/i.test(t)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(t)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(t)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(t)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(e,r){let t=o(e),i=n.find(e=>e.extension===t);if(!i?.magicBytes)return".svg"===t;let a=i.magicBytesOffset||0;return!(r.length<a+i.magicBytes.length)&&i.magicBytes.every((e,t)=>r[a+t]===e)}(e,r)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}}};var r=require("../../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),i=r.X(0,[8948,5972,7425,8585],()=>t(25780));module.exports=i})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=6366,e.ids=[6366],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},45762:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>N,patchFetch:()=>j,requestAsyncStorage:()=>h,routeModule:()=>w,serverHooks:()=>k,staticGenerationAsyncStorage:()=>v});var o={};t.r(o),t.d(o,{POST:()=>g});var s=t(49303),n=t(88716),p=t(60670),i=t(87070),a=t(97425),u=t(75748),l=t(55837),d=t(83513),c=t(89194),m=t(63661),x=t(19377),f=t(49528),q=t(38693);async function g(e,{params:r}){try{if(!(0,q.m$)(r.id))return i.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let{answer:t,cliTool:o,promptType:s,defaultOptionNumber:n}=await e.json();if(!t)return i.NextResponse.json({error:"answer is required"},{status:400});if(o&&!(0,d._7)(o))return i.NextResponse.json({error:`Invalid cliTool: '${o}'`},{status:400});let p=(0,a.getDbInstance)(),g=(0,u.gU)(p,r.id);if(!g)return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let w=o&&(0,d._7)(o)?o:g.cliToolId||"claude",h=l.g.getInstance().getTool(w);if(!await h.isRunning(r.id))return i.NextResponse.json({error:`${h.name} session is not running`},{status:400});let v=h.getSessionName(r.id),k=null;try{let e=await (0,c.NA)(r.id,w,5e3),o=(0,x.vp)(e),s=(0,x.Sg)(w);if(!(k=(0,m.F)((0,x.BN)(o),s)).isPrompt)return i.NextResponse.json({success:!1,reason:"prompt_no_longer_active",answer:t})}catch{console.warn("[prompt-response] Failed to verify prompt state, proceeding with send")}try{await (0,f.z)({sessionName:v,answer:t,cliToolId:w,promptData:k?.promptData,fallbackPromptType:s,fallbackDefaultOptionNumber:n})}catch(r){let e=r instanceof Error?r.message:"Unknown error";return i.NextResponse.json({error:`Failed to send answer to tmux: ${e}`},{status:500})}return i.NextResponse.json({success:!0,answer:t})}catch(r){console.error("Failed to respond to prompt:",r);let e=r instanceof Error?r.message:"Internal server error";return i.NextResponse.json({error:e},{status:500})}}let w=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/prompt-response/route",pathname:"/api/worktrees/[id]/prompt-response",filename:"route",bundlePath:"app/api/worktrees/[id]/prompt-response/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/prompt-response/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:h,staticGenerationAsyncStorage:v,serverHooks:k}=w,N="/api/worktrees/[id]/prompt-response/route";function j(){return(0,p.patchFetch)({serverHooks:k,staticGenerationAsyncStorage:v})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>t(45762));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=6366,e.ids=[6366],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},45762:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>j,patchFetch:()=>N,requestAsyncStorage:()=>w,routeModule:()=>h,serverHooks:()=>k,staticGenerationAsyncStorage:()=>v});var o={};t.r(o),t.d(o,{POST:()=>g});var s=t(49303),n=t(88716),p=t(60670),i=t(87070),a=t(97425),u=t(75748),l=t(55837),d=t(83513),c=t(89194),m=t(63661),x=t(19377),f=t(49528),q=t(38693);async function g(e,{params:r}){try{if(!(0,q.m$)(r.id))return i.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let{answer:t,cliTool:o,promptType:s,defaultOptionNumber:n}=await e.json();if(!t)return i.NextResponse.json({error:"answer is required"},{status:400});if(o&&!(0,d._7)(o))return i.NextResponse.json({error:`Invalid cliTool: '${o}'`},{status:400});let p=(0,a.getDbInstance)(),g=(0,u.gU)(p,r.id);if(!g)return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let h=o&&(0,d._7)(o)?o:g.cliToolId||"claude",w=l.g.getInstance().getTool(h);if(!await w.isRunning(r.id))return i.NextResponse.json({error:`${w.name} session is not running`},{status:400});let v=w.getSessionName(r.id),k=null;try{let e=await (0,c.lh)(r.id,h),o=(0,x.vp)(e),s=(0,x.Sg)(h);if(!(k=(0,m.FS)((0,x.BN)(o),s)).isPrompt)return i.NextResponse.json({success:!1,reason:"prompt_no_longer_active",answer:t})}catch{console.warn("[prompt-response] Failed to verify prompt state, proceeding with send")}try{await (0,f.z)({sessionName:v,answer:t,cliToolId:h,promptData:k?.promptData,fallbackPromptType:s,fallbackDefaultOptionNumber:n})}catch(r){let e=r instanceof Error?r.message:"Unknown error";return i.NextResponse.json({error:`Failed to send answer to tmux: ${e}`},{status:500})}return i.NextResponse.json({success:!0,answer:t})}catch(r){console.error("Failed to respond to prompt:",r);let e=r instanceof Error?r.message:"Internal server error";return i.NextResponse.json({error:e},{status:500})}}let h=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/prompt-response/route",pathname:"/api/worktrees/[id]/prompt-response",filename:"route",bundlePath:"app/api/worktrees/[id]/prompt-response/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/prompt-response/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:w,staticGenerationAsyncStorage:v,serverHooks:k}=h,j="/api/worktrees/[id]/prompt-response/route";function N(){return(0,p.patchFetch)({serverHooks:k,staticGenerationAsyncStorage:v})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>t(45762));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=4230,e.ids=[4230],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},1464:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>j,patchFetch:()=>R,requestAsyncStorage:()=>w,routeModule:()=>f,serverHooks:()=>h,staticGenerationAsyncStorage:()=>q});var s={};t.r(s),t.d(s,{POST:()=>g});var o=t(49303),n=t(88716),a=t(60670),i=t(87070),p=t(97425),u=t(75748),d=t(10927),l=t(55837),m=t(59991),c=t(63661),x=t(68507);async function g(e,{params:r}){try{let t;let{messageId:s,answer:o}=await e.json();if(!s||!o)return i.NextResponse.json({error:"messageId and answer are required"},{status:400});let n=(0,p.getDbInstance)(),a=(0,u.S$)(n,s);if(!a)return i.NextResponse.json({error:"Message not found"},{status:404});if("prompt"!==a.messageType)return i.NextResponse.json({error:"Message is not a prompt"},{status:400});if(!a.promptData)return i.NextResponse.json({error:"Prompt data not found"},{status:400});if("answered"===a.promptData.status)return i.NextResponse.json({error:"Prompt already answered"},{status:400});if("multiple_choice"===a.promptData.type){let e=parseInt(o,10);if(isNaN(e))t=o;else{let r=a.promptData.options.map(e=>e.number);if(!r.includes(e))return i.NextResponse.json({error:`Invalid choice: ${o}. Valid options are: ${r.join(", ")}`},{status:400});t=e.toString()}}else try{t=(0,c.J)(o,a.promptData.type)}catch(r){let e=r instanceof Error?r.message:"Unknown error";return i.NextResponse.json({error:`Invalid answer: ${e}`},{status:400})}let g={...a.promptData,status:"answered",answer:o,answeredAt:new Date().toISOString()};(0,u.GA)(n,s,g);let f=(0,u.gU)(n,r.id);if(!f)return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let w=a.cliToolId||f.cliToolId||"claude",q=l.g.getInstance().getTool(w),h=q.getSessionName(r.id);try{await (0,d.Is)(h,t,!1),console.log(`✓ Sent answer '${t}' to ${h} (${q.name})`),await new Promise(e=>setTimeout(e,100)),await (0,d.Is)(h,"",!0),console.log(`✓ Sent Enter to ${h}`)}catch(r){let e=r instanceof Error?r.message:"Unknown error";return i.NextResponse.json({error:`Failed to send answer to tmux: ${e}`},{status:500})}let j={...a,promptData:g};return(0,x.ps)("message_updated",{worktreeId:r.id,message:j}),(0,m.cn)(r.id,w),console.log(`✓ Resumed polling for ${r.id} (${w})`),i.NextResponse.json({success:!0,message:j})}catch(r){console.error("Failed to respond to prompt:",r);let e=r instanceof Error?r.message:"Internal server error";return i.NextResponse.json({error:e},{status:500})}}let f=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/respond/route",pathname:"/api/worktrees/[id]/respond",filename:"route",bundlePath:"app/api/worktrees/[id]/respond/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/respond/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:w,staticGenerationAsyncStorage:q,serverHooks:h}=f,j="/api/worktrees/[id]/respond/route";function R(){return(0,a.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:q})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[8948,5972,3853,4893,7425,7566,4952],()=>t(1464));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=4230,e.ids=[4230],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},1464:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>j,patchFetch:()=>R,requestAsyncStorage:()=>w,routeModule:()=>f,serverHooks:()=>h,staticGenerationAsyncStorage:()=>q});var s={};t.r(s),t.d(s,{POST:()=>g});var o=t(49303),n=t(88716),a=t(60670),i=t(87070),p=t(97425),u=t(75748),d=t(10927),l=t(55837),m=t(59991),c=t(63661),x=t(68507);async function g(e,{params:r}){try{let t;let{messageId:s,answer:o}=await e.json();if(!s||!o)return i.NextResponse.json({error:"messageId and answer are required"},{status:400});let n=(0,p.getDbInstance)(),a=(0,u.S$)(n,s);if(!a)return i.NextResponse.json({error:"Message not found"},{status:404});if("prompt"!==a.messageType)return i.NextResponse.json({error:"Message is not a prompt"},{status:400});if(!a.promptData)return i.NextResponse.json({error:"Prompt data not found"},{status:400});if("answered"===a.promptData.status)return i.NextResponse.json({error:"Prompt already answered"},{status:400});if("multiple_choice"===a.promptData.type){let e=parseInt(o,10);if(isNaN(e))t=o;else{let r=a.promptData.options.map(e=>e.number);if(!r.includes(e))return i.NextResponse.json({error:`Invalid choice: ${o}. Valid options are: ${r.join(", ")}`},{status:400});t=e.toString()}}else try{t=(0,c.Ju)(o,a.promptData.type)}catch(r){let e=r instanceof Error?r.message:"Unknown error";return i.NextResponse.json({error:`Invalid answer: ${e}`},{status:400})}let g={...a.promptData,status:"answered",answer:o,answeredAt:new Date().toISOString()};(0,u.GA)(n,s,g);let f=(0,u.gU)(n,r.id);if(!f)return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let w=a.cliToolId||f.cliToolId||"claude",q=l.g.getInstance().getTool(w),h=q.getSessionName(r.id);try{await (0,d.Is)(h,t,!1),console.log(`✓ Sent answer '${t}' to ${h} (${q.name})`),await new Promise(e=>setTimeout(e,100)),await (0,d.Is)(h,"",!0),console.log(`✓ Sent Enter to ${h}`)}catch(r){let e=r instanceof Error?r.message:"Unknown error";return i.NextResponse.json({error:`Failed to send answer to tmux: ${e}`},{status:500})}let j={...a,promptData:g};return(0,x.ps)("message_updated",{worktreeId:r.id,message:j}),(0,m.cn)(r.id,w),console.log(`✓ Resumed polling for ${r.id} (${w})`),i.NextResponse.json({success:!0,message:j})}catch(r){console.error("Failed to respond to prompt:",r);let e=r instanceof Error?r.message:"Internal server error";return i.NextResponse.json({error:e},{status:500})}}let f=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/respond/route",pathname:"/api/worktrees/[id]/respond",filename:"route",bundlePath:"app/api/worktrees/[id]/respond/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/respond/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:w,staticGenerationAsyncStorage:q,serverHooks:h}=f,j="/api/worktrees/[id]/respond/route";function R(){return(0,a.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:q})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[8948,5972,3853,4893,7425,7566,4952],()=>t(1464));module.exports=s})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=4931,e.ids=[4931],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},46769:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>y,patchFetch:()=>R,requestAsyncStorage:()=>k,routeModule:()=>A,serverHooks:()=>j,staticGenerationAsyncStorage:()=>b});var o={};r.r(o),r.d(o,{GET:()=>v,PATCH:()=>w});var n=r(49303),i=r(88716),s=r(60670),a=r(87070),u=r(97425),l=r(75748),c=r(55837),d=r(83513),p=r(89194),f=r(13561),g=r(2693),h=r(3979),m=r(38693),x=r(55483);async function v(e,{params:t}){try{let e;if(!(0,m.m$)(t.id))return a.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let r=(0,u.getDbInstance)(),o=(0,l.gU)(r,t.id);if(!o)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let n=c.g.getInstance(),i=d.tK,s={},x=!1,v=!1,w=!1;for(let e of i){let o=n.getTool(e),i=await o.isRunning(t.id),a=!1,u=!1;if(i)try{let o="opencode"===e?g.uC:100,n=await (0,p.NA)(t.id,e,o),i=(0,f._)(n,e);a="waiting"===i.status,u="running"===i.status,!i.hasActivePrompt&&(0,l._U)(r,t.id,void 0,10,e).some(e=>"prompt"===e.messageType&&e.promptData?.status!=="answered")&&(0,l.GP)(r,t.id,e)}catch{u=!0}s[e]={isRunning:i,isWaitingForResponse:a,isProcessing:u},i&&(x=!0),a&&(v=!0),u&&(w=!0)}try{let n=(0,l.Q7)(r,t.id);e=await (0,h.v)(o.path,n)}catch(e){console.error("[GET /api/worktrees/:id] Failed to get git status:",e)}return a.NextResponse.json({...o,gitStatus:e,isSessionRunning:x,isWaitingForResponse:v,isProcessing:w,sessionStatusByCli:s},{status:200})}catch(e){return console.error("Error fetching worktree:",e),a.NextResponse.json({error:"Failed to fetch worktree"},{status:500})}}async function w(e,{params:t}){try{if(!(0,m.m$)(t.id))return a.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let r=(0,u.getDbInstance)(),o=(0,l.gU)(r,t.id);if(!o)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let n=await e.json();if(!n||"object"!=typeof n||Array.isArray(n))return a.NextResponse.json({error:"Request body must be a JSON object"},{status:400});let i=!1,s=o.cliToolId||"claude";if("description"in n&&(0,l.xr)(r,t.id,n.description),"link"in n&&(0,l.y)(r,t.id,n.link),"favorite"in n&&"boolean"==typeof n.favorite&&(0,l.R3)(r,t.id,n.favorite),"status"in n&&["todo","doing","done",null].includes(n.status)&&(0,l.Nf)(r,t.id,n.status),"cliToolId"in n){let e=d.tK;if(!e.includes(n.cliToolId))return a.NextResponse.json({error:`Invalid cliToolId. Valid values are: ${e.join(", ")}`},{status:400});(0,l.VW)(r,t.id,n.cliToolId),s=n.cliToolId}if("selectedAgents"in n){let e=(0,x.KE)(n.selectedAgents);if(!e.valid)return a.NextResponse.json({error:e.error,code:"INVALID_SELECTED_AGENTS"},{status:400});let o=e.value;if((0,l.ey)(r,t.id,o),!o.includes(s)){let e=o[0];console.info(`[PATCH /api/worktrees/:id] Auto-updating cli_tool_id from '${s}' to '${e}' because '${s}' is not in new selectedAgents [${o.join(", ")}]`),(0,l.VW)(r,t.id,e),s=e,i=!0}}if("vibeLocalModel"in n){let e=n.vibeLocalModel;if(null!==e){if("string"!=typeof e||0===e.length||e.length>100)return a.NextResponse.json({error:"vibeLocalModel must be null or a string (1-100 characters)"},{status:400});if(!d.Y1.test(e))return a.NextResponse.json({error:"vibeLocalModel contains invalid characters"},{status:400})}(0,l.dl)(r,t.id,e)}if("vibeLocalContextWindow"in n){let e=n.vibeLocalContextWindow;if(null!==e&&!(0,d.ZP)(e))return a.NextResponse.json({error:`vibeLocalContextWindow must be null or an integer (${d.Ho}-${d.Ns})`},{status:400});(0,l.Yg)(r,t.id,e)}let p=(0,l.gU)(r,t.id),f=c.g.getInstance(),g=p?.cliToolId||"claude",h=f.getTool(g),v=await h.isRunning(t.id);return a.NextResponse.json({...p,isSessionRunning:v,...i?{cliToolIdAutoUpdated:!0}:{}},{status:200})}catch(e){return console.error("Error updating worktree:",e),a.NextResponse.json({error:"Failed to update worktree"},{status:500})}}let A=new n.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/route",pathname:"/api/worktrees/[id]",filename:"route",bundlePath:"app/api/worktrees/[id]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:k,staticGenerationAsyncStorage:b,serverHooks:j}=A,y="/api/worktrees/[id]/route";function R(){return(0,s.patchFetch)({serverHooks:j,staticGenerationAsyncStorage:b})}},3979:(e,t,r)=>{r.d(t,{v:()=>s});var o=r(61282);let n=(0,r(21764).promisify)(o.execFile);async function i(e,t){try{let{stdout:r}=await n("git",e,{cwd:t,timeout:1e3});return r.trim()}catch(t){return console.error("[git-utils] Git command failed:",{args:e,error:t instanceof Error?t.message:"Unknown error"}),null}}async function s(e,t){let r;let o=await i(["rev-parse","--abbrev-ref","HEAD"],e);r=null===o?"(unknown)":"HEAD"===o?"(detached HEAD)":o;let n=await i(["rev-parse","--short","HEAD"],e),s=await i(["status","--porcelain"],e);return{currentBranch:r,initialBranch:t,isBranchMismatch:null!==t&&"(unknown)"!==r&&"(detached HEAD)"!==r&&r!==t,commitHash:n??"(unknown)",isDirty:null!==s&&s.length>0}}},13561:(e,t,r)=>{r.d(t,{_:()=>i});var o=r(19377),n=r(63661);function i(e,t,r){let i=(0,o.vp)(e),s=i.split("\n"),a=s.length-1;for(;a>=0&&""===s[a].trim();)a--;let u=s.slice(0,a+1),l=u.slice(-15).join("\n"),c=u.slice(-5).join("\n"),d=(0,o.Sg)(t);if((0,n.F)((0,o.BN)(i),d).isPrompt)return{status:"waiting",confidence:"high",reason:"prompt_detected",hasActivePrompt:!0};if((0,o.Wg)(t,c))return{status:"running",confidence:"high",reason:"thinking_indicator",hasActivePrompt:!1};if("opencode"===t){if(o.nT.test(l))return{status:"running",confidence:"high",reason:"opencode_processing_indicator",hasActivePrompt:!1};let e=(0,o.BN)(i).split("\n"),t=Math.max(0,e.length-7);for(let r=e.length-1;r>=Math.max(0,e.length-10);r--)if(/ctrl\+[tp]/.test(e[r])){t=Math.max(0,r-2);break}let r=e.slice(0,t),n=r.length-1;for(;n>=0&&""===r[n].trim();)n--;if(n>=0){let e=r.slice(Math.max(0,n-5+1),n+1).join("\n");if((0,o.Wg)("opencode",e))return{status:"running",confidence:"high",reason:"thinking_indicator",hasActivePrompt:!1};let t=r.slice(Math.max(0,n-15+1),n+1).join("\n");if(o.n9.test(t))return{status:"ready",confidence:"high",reason:"opencode_response_complete",hasActivePrompt:!1}}}let{promptPattern:p}=(0,o.bs)(t);return p.test(l)?{status:"ready",confidence:"high",reason:"input_prompt",hasActivePrompt:!1}:r&&Date.now()-r.getTime()>5e3?{status:"ready",confidence:"low",reason:"no_recent_output",hasActivePrompt:!1}:{status:"running",confidence:"low",reason:"default",hasActivePrompt:!1}}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>r(46769));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=4931,e.ids=[4931],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},46769:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>b,patchFetch:()=>j,requestAsyncStorage:()=>A,routeModule:()=>w,serverHooks:()=>y,staticGenerationAsyncStorage:()=>k});var o={};r.r(o),r.d(o,{GET:()=>x,PATCH:()=>v});var n=r(49303),i=r(88716),s=r(60670),a=r(87070),u=r(97425),l=r(75748),c=r(55837),d=r(83513),p=r(3979),f=r(38693),g=r(55483),h=r(10927),m=r(37670);async function x(e,{params:t}){try{let e;if(!(0,f.m$)(t.id))return a.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let r=(0,u.getDbInstance)(),o=(0,l.gU)(r,t.id);if(!o)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let n=await (0,h.LF)(),i=new Set(n.map(e=>e.name)),s=await (0,m.r)(t.id,i,r,l._U,l.GP);try{let n=(0,l.Q7)(r,t.id);e=await (0,p.v)(o.path,n)}catch(e){console.error("[GET /api/worktrees/:id] Failed to get git status:",e)}return a.NextResponse.json({...o,gitStatus:e,...s},{status:200})}catch(e){return console.error("Error fetching worktree:",e),a.NextResponse.json({error:"Failed to fetch worktree"},{status:500})}}async function v(e,{params:t}){try{if(!(0,f.m$)(t.id))return a.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let r=(0,u.getDbInstance)(),o=(0,l.gU)(r,t.id);if(!o)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let n=await e.json();if(!n||"object"!=typeof n||Array.isArray(n))return a.NextResponse.json({error:"Request body must be a JSON object"},{status:400});let i=!1,s=o.cliToolId||"claude";if("description"in n&&(0,l.xr)(r,t.id,n.description),"link"in n&&(0,l.y)(r,t.id,n.link),"favorite"in n&&"boolean"==typeof n.favorite&&(0,l.R3)(r,t.id,n.favorite),"status"in n&&["todo","doing","done",null].includes(n.status)&&(0,l.Nf)(r,t.id,n.status),"cliToolId"in n){let e=d.tK;if(!e.includes(n.cliToolId))return a.NextResponse.json({error:`Invalid cliToolId. Valid values are: ${e.join(", ")}`},{status:400});(0,l.VW)(r,t.id,n.cliToolId),s=n.cliToolId}if("selectedAgents"in n){let e=(0,g.KE)(n.selectedAgents);if(!e.valid)return a.NextResponse.json({error:e.error,code:"INVALID_SELECTED_AGENTS"},{status:400});let o=e.value;if((0,l.ey)(r,t.id,o),!o.includes(s)){let e=o[0];console.info(`[PATCH /api/worktrees/:id] Auto-updating cli_tool_id from '${s}' to '${e}' because '${s}' is not in new selectedAgents [${o.join(", ")}]`),(0,l.VW)(r,t.id,e),s=e,i=!0}}if("vibeLocalModel"in n){let e=n.vibeLocalModel;if(null!==e){if("string"!=typeof e||0===e.length||e.length>100)return a.NextResponse.json({error:"vibeLocalModel must be null or a string (1-100 characters)"},{status:400});if(!d.Y1.test(e))return a.NextResponse.json({error:"vibeLocalModel contains invalid characters"},{status:400})}(0,l.dl)(r,t.id,e)}if("vibeLocalContextWindow"in n){let e=n.vibeLocalContextWindow;if(null!==e&&!(0,d.ZP)(e))return a.NextResponse.json({error:`vibeLocalContextWindow must be null or an integer (${d.Ho}-${d.Ns})`},{status:400});(0,l.Yg)(r,t.id,e)}let p=(0,l.gU)(r,t.id),h=c.g.getInstance(),m=p?.cliToolId||"claude",x=h.getTool(m),v=await x.isRunning(t.id);return a.NextResponse.json({...p,isSessionRunning:v,...i?{cliToolIdAutoUpdated:!0}:{}},{status:200})}catch(e){return console.error("Error updating worktree:",e),a.NextResponse.json({error:"Failed to update worktree"},{status:500})}}let w=new n.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/route",pathname:"/api/worktrees/[id]",filename:"route",bundlePath:"app/api/worktrees/[id]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:A,staticGenerationAsyncStorage:k,serverHooks:y}=w,b="/api/worktrees/[id]/route";function j(){return(0,s.patchFetch)({serverHooks:y,staticGenerationAsyncStorage:k})}},3979:(e,t,r)=>{r.d(t,{v:()=>s});var o=r(61282);let n=(0,r(21764).promisify)(o.execFile);async function i(e,t){try{let{stdout:r}=await n("git",e,{cwd:t,timeout:1e3});return r.trim()}catch(t){return console.error("[git-utils] Git command failed:",{args:e,error:t instanceof Error?t.message:"Unknown error"}),null}}async function s(e,t){let r;let o=await i(["rev-parse","--abbrev-ref","HEAD"],e);r=null===o?"(unknown)":"HEAD"===o?"(detached HEAD)":o;let n=await i(["rev-parse","--short","HEAD"],e),s=await i(["status","--porcelain"],e);return{currentBranch:r,initialBranch:t,isBranchMismatch:null!==t&&"(unknown)"!==r&&"(detached HEAD)"!==r&&r!==t,commitHash:n??"(unknown)",isDirty:null!==s&&s.length>0}}},13561:(e,t,r)=>{r.d(t,{_:()=>i});var o=r(19377),n=r(63661);function i(e,t,r){let i=(0,o.vp)(e),s=i.split("\n"),a=s.length-1;for(;a>=0&&""===s[a].trim();)a--;let u=s.slice(0,a+1),l=u.slice(-15).join("\n"),c=u.slice(-5).join("\n"),d=(0,o.Sg)(t),p=(0,n.FS)((0,o.BN)(l),d);if(p.isPrompt)return{status:"waiting",confidence:"high",reason:"prompt_detected",hasActivePrompt:!0,promptDetection:p};if((0,o.Wg)(t,c))return{status:"running",confidence:"high",reason:"thinking_indicator",hasActivePrompt:!1,promptDetection:p};if("opencode"===t){if(o.nT.test(l))return{status:"running",confidence:"high",reason:"opencode_processing_indicator",hasActivePrompt:!1,promptDetection:p};let e=(0,o.BN)(i).split("\n"),t=Math.max(0,e.length-7);for(let r=e.length-1;r>=Math.max(0,e.length-10);r--)if(/ctrl\+[tp]/.test(e[r])){t=Math.max(0,r-2);break}let r=e.slice(0,t),n=r.length-1;for(;n>=0&&""===r[n].trim();)n--;if(n>=0){let e=r.slice(Math.max(0,n-5+1),n+1).join("\n");if((0,o.Wg)("opencode",e))return{status:"running",confidence:"high",reason:"thinking_indicator",hasActivePrompt:!1,promptDetection:p};let t=r.slice(Math.max(0,n-15+1),n+1).join("\n");if(o.n9.test(t))return{status:"ready",confidence:"high",reason:"opencode_response_complete",hasActivePrompt:!1,promptDetection:p}}}let{promptPattern:f}=(0,o.bs)(t);return f.test(l)?{status:"ready",confidence:"high",reason:"input_prompt",hasActivePrompt:!1,promptDetection:p}:r&&Date.now()-r.getTime()>5e3?{status:"ready",confidence:"low",reason:"no_recent_output",hasActivePrompt:!1,promptDetection:p}:{status:"running",confidence:"low",reason:"default",hasActivePrompt:!1,promptDetection:p}}},37670:(e,t,r)=>{r.d(t,{r:()=>l});var o=r(55837),n=r(83513),i=r(89194),s=r(13561),a=r(2693),u=r(62648);async function l(e,t,r,l,c){let d=o.g.getInstance(),p=n.tK,f={},g=!1,h=!1,m=!1;for(let o of p){let n=d.getTool(o).getSessionName(e),p=t.has(n);p&&"claude"===o&&!(await (0,u.i_)(n)).healthy&&(p=!1);let x=!1,v=!1;if(p)try{let t="opencode"===o?a.uC:100,n=await (0,i.NA)(e,o,t),u=(0,s._)(n,o);x="waiting"===u.status,v="running"===u.status,!u.hasActivePrompt&&l(r,e,void 0,10,o).some(e=>"prompt"===e.messageType&&e.promptData?.status!=="answered")&&c(r,e,o)}catch{v=!0}f[o]={isRunning:p,isWaitingForResponse:x,isProcessing:v},p&&(g=!0),x&&(h=!0),v&&(m=!0)}return{sessionStatusByCli:f,isSessionRunning:g,isWaitingForResponse:h,isProcessing:m}}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>r(46769));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=5685,e.ids=[5685],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},38943:(e,r,s)=>{s.r(r),s.d(r,{originalPathname:()=>I,patchFetch:()=>N,requestAsyncStorage:()=>v,routeModule:()=>g,serverHooks:()=>E,staticGenerationAsyncStorage:()=>R});var t={};s.r(t),s.d(t,{DELETE:()=>m,GET:()=>x,PUT:()=>f});var o=s(49303),n=s(88716),u=s(60670),i=s(87070),d=s(97425),a=s(75748),p=s(38693),l=s(95614),c=s(41124),h=s(8186);async function x(e,{params:r}){try{if(!(0,p.m$)(r.id))return i.NextResponse.json({error:"Invalid worktree ID format"},{status:400});if(!(0,l.wx)(r.scheduleId))return i.NextResponse.json({error:"Invalid schedule ID format"},{status:400});let e=(0,d.getDbInstance)();if(!(0,a.gU)(e,r.id))return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let s=e.prepare("SELECT * FROM scheduled_executions WHERE id = ? AND worktree_id = ?").get(r.scheduleId,r.id);if(!s)return i.NextResponse.json({error:"Schedule not found"},{status:404});return i.NextResponse.json({schedule:s},{status:200})}catch(e){return console.error("Error fetching schedule:",e),i.NextResponse.json({error:"Failed to fetch schedule"},{status:500})}}async function f(e,{params:r}){try{if(!(0,p.m$)(r.id))return i.NextResponse.json({error:"Invalid worktree ID format"},{status:400});if(!(0,l.wx)(r.scheduleId))return i.NextResponse.json({error:"Invalid schedule ID format"},{status:400});let s=(0,d.getDbInstance)();if(!(0,a.gU)(s,r.id))return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});if(!s.prepare("SELECT * FROM scheduled_executions WHERE id = ? AND worktree_id = ?").get(r.scheduleId,r.id))return i.NextResponse.json({error:"Schedule not found"},{status:404});let t=await e.json().catch(()=>({})),{cronExpression:o,cliToolId:n,enabled:u}=t,x=void 0!==t.name?"string"==typeof t.name?t.name.trim():"":void 0,f=void 0!==t.message?"string"==typeof t.message?t.message.trim():"":void 0;if(void 0!==x&&(!x||x.length>l.ME))return i.NextResponse.json({error:`name must be a non-empty string of ${l.ME} characters or less`},{status:400});if(void 0!==f&&(!f||f.length>l.xT))return i.NextResponse.json({error:`message must be a non-empty string of ${l.xT} characters or less`},{status:400});if(void 0!==o&&("string"!=typeof o||!(0,h.oU)(o)))return i.NextResponse.json({error:"Invalid cron expression format"},{status:400});if(void 0!==n&&!c.pu.has(n))return i.NextResponse.json({error:"Invalid CLI tool"},{status:400});let m=Date.now(),g=[],v=[];if(void 0!==x&&(g.push("name = ?"),v.push(x)),void 0!==f&&(g.push("message = ?"),v.push(f)),void 0!==o&&(g.push("cron_expression = ?"),v.push(o)),void 0!==n&&(g.push("cli_tool_id = ?"),v.push(n)),void 0!==u&&(g.push("enabled = ?"),v.push(u?1:0)),0===g.length)return i.NextResponse.json({error:"No fields to update"},{status:400});g.push("updated_at = ?"),v.push(m),v.push(r.scheduleId),v.push(r.id),s.prepare(`UPDATE scheduled_executions SET ${g.join(", ")} WHERE id = ? AND worktree_id = ?`).run(...v);let R=s.prepare("SELECT * FROM scheduled_executions WHERE id = ? AND worktree_id = ?").get(r.scheduleId,r.id);return i.NextResponse.json({schedule:R},{status:200})}catch(e){return console.error("Error updating schedule:",e),i.NextResponse.json({error:"Failed to update schedule"},{status:500})}}async function m(e,{params:r}){try{if(!(0,p.m$)(r.id))return i.NextResponse.json({error:"Invalid worktree ID format"},{status:400});if(!(0,l.wx)(r.scheduleId))return i.NextResponse.json({error:"Invalid schedule ID format"},{status:400});let e=(0,d.getDbInstance)();if(!(0,a.gU)(e,r.id))return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let s=e.prepare("DELETE FROM scheduled_executions WHERE id = ? AND worktree_id = ?").run(r.scheduleId,r.id);if(0===s.changes)return i.NextResponse.json({error:"Schedule not found"},{status:404});return i.NextResponse.json({success:!0},{status:200})}catch(e){return console.error("Error deleting schedule:",e),i.NextResponse.json({error:"Failed to delete schedule"},{status:500})}}let g=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/schedules/[scheduleId]/route",pathname:"/api/worktrees/[id]/schedules/[scheduleId]",filename:"route",bundlePath:"app/api/worktrees/[id]/schedules/[scheduleId]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/schedules/[scheduleId]/route.ts",nextConfigOutput:"",userland:t}),{requestAsyncStorage:v,staticGenerationAsyncStorage:R,serverHooks:E}=g,I="/api/worktrees/[id]/schedules/[scheduleId]/route";function N(){return(0,u.patchFetch)({serverHooks:E,staticGenerationAsyncStorage:R})}},8186:(e,r,s)=>{s.d(r,{C4:()=>t,oU:()=>o});let t=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F\u200B-\u200F\u2028-\u202F\uFEFF]/;function o(e){if(e.length>100)return!1;let r=e.trim().split(/\s+/);return r.length>=5&&r.length<=6}},95614:(e,r,s)=>{s.d(r,{ME:()=>t,wx:()=>u,xT:()=>o});let t=100,o=1e4,n=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function u(e){return n.test(e)}},41124:(e,r,s)=>{s.d(r,{U_:()=>o,pu:()=>t}),s(61282),s(19377);let t=new Set(["claude","codex","gemini","vibe-local","opencode"]);function o(){return globalThis.__scheduleActiveProcesses||(globalThis.__scheduleActiveProcesses=new Map),globalThis.__scheduleActiveProcesses}}};var r=require("../../../../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>s(38943));module.exports=t})();
1
+ "use strict";(()=>{var e={};e.id=5685,e.ids=[5685],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},38943:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>I,patchFetch:()=>N,requestAsyncStorage:()=>R,routeModule:()=>g,serverHooks:()=>v,staticGenerationAsyncStorage:()=>E});var s={};t.r(s),t.d(s,{DELETE:()=>m,GET:()=>x,PUT:()=>f});var o=t(49303),n=t(88716),u=t(60670),i=t(87070),d=t(97425),a=t(75748),p=t(38693),l=t(95614),c=t(41124),h=t(8186);async function x(e,{params:r}){try{if(!(0,p.m$)(r.id))return i.NextResponse.json({error:"Invalid worktree ID format"},{status:400});if(!(0,l.wx)(r.scheduleId))return i.NextResponse.json({error:"Invalid schedule ID format"},{status:400});let e=(0,d.getDbInstance)();if(!(0,a.gU)(e,r.id))return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let t=e.prepare("SELECT * FROM scheduled_executions WHERE id = ? AND worktree_id = ?").get(r.scheduleId,r.id);if(!t)return i.NextResponse.json({error:"Schedule not found"},{status:404});return i.NextResponse.json({schedule:t},{status:200})}catch(e){return console.error("Error fetching schedule:",e),i.NextResponse.json({error:"Failed to fetch schedule"},{status:500})}}async function f(e,{params:r}){try{if(!(0,p.m$)(r.id))return i.NextResponse.json({error:"Invalid worktree ID format"},{status:400});if(!(0,l.wx)(r.scheduleId))return i.NextResponse.json({error:"Invalid schedule ID format"},{status:400});let t=(0,d.getDbInstance)();if(!(0,a.gU)(t,r.id))return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});if(!t.prepare("SELECT * FROM scheduled_executions WHERE id = ? AND worktree_id = ?").get(r.scheduleId,r.id))return i.NextResponse.json({error:"Schedule not found"},{status:404});let s=await e.json().catch(()=>({})),{cronExpression:o,cliToolId:n,enabled:u}=s,x=void 0!==s.name?"string"==typeof s.name?s.name.trim():"":void 0,f=void 0!==s.message?"string"==typeof s.message?s.message.trim():"":void 0;if(void 0!==x&&(!x||x.length>l.ME))return i.NextResponse.json({error:`name must be a non-empty string of ${l.ME} characters or less`},{status:400});if(void 0!==f&&(!f||f.length>l.xT))return i.NextResponse.json({error:`message must be a non-empty string of ${l.xT} characters or less`},{status:400});if(void 0!==o&&("string"!=typeof o||!(0,h.oU)(o)))return i.NextResponse.json({error:"Invalid cron expression format"},{status:400});if(void 0!==n&&!c.pu.has(n))return i.NextResponse.json({error:"Invalid CLI tool"},{status:400});let m=Date.now(),g=[],R=[];if(void 0!==x&&(g.push("name = ?"),R.push(x)),void 0!==f&&(g.push("message = ?"),R.push(f)),void 0!==o&&(g.push("cron_expression = ?"),R.push(o)),void 0!==n&&(g.push("cli_tool_id = ?"),R.push(n)),void 0!==u&&(g.push("enabled = ?"),R.push(u?1:0)),0===g.length)return i.NextResponse.json({error:"No fields to update"},{status:400});g.push("updated_at = ?"),R.push(m),R.push(r.scheduleId),R.push(r.id),t.prepare(`UPDATE scheduled_executions SET ${g.join(", ")} WHERE id = ? AND worktree_id = ?`).run(...R);let E=t.prepare("SELECT * FROM scheduled_executions WHERE id = ? AND worktree_id = ?").get(r.scheduleId,r.id);return i.NextResponse.json({schedule:E},{status:200})}catch(e){return console.error("Error updating schedule:",e),i.NextResponse.json({error:"Failed to update schedule"},{status:500})}}async function m(e,{params:r}){try{if(!(0,p.m$)(r.id))return i.NextResponse.json({error:"Invalid worktree ID format"},{status:400});if(!(0,l.wx)(r.scheduleId))return i.NextResponse.json({error:"Invalid schedule ID format"},{status:400});let e=(0,d.getDbInstance)();if(!(0,a.gU)(e,r.id))return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let t=e.prepare("DELETE FROM scheduled_executions WHERE id = ? AND worktree_id = ?").run(r.scheduleId,r.id);if(0===t.changes)return i.NextResponse.json({error:"Schedule not found"},{status:404});return i.NextResponse.json({success:!0},{status:200})}catch(e){return console.error("Error deleting schedule:",e),i.NextResponse.json({error:"Failed to delete schedule"},{status:500})}}let g=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/schedules/[scheduleId]/route",pathname:"/api/worktrees/[id]/schedules/[scheduleId]",filename:"route",bundlePath:"app/api/worktrees/[id]/schedules/[scheduleId]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/schedules/[scheduleId]/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:R,staticGenerationAsyncStorage:E,serverHooks:v}=g,I="/api/worktrees/[id]/schedules/[scheduleId]/route";function N(){return(0,u.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:E})}},8186:(e,r,t)=>{t.d(r,{C4:()=>s,oU:()=>o});let s=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F\u200B-\u200F\u2028-\u202F\uFEFF]/;function o(e){if(e.length>100)return!1;let r=e.trim().split(/\s+/);return r.length>=5&&r.length<=6}},95614:(e,r,t)=>{t.d(r,{ME:()=>s,wx:()=>u,xT:()=>o});let s=100,o=1e4,n=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function u(e){return n.test(e)}},41124:(e,r,t)=>{t.d(r,{pu:()=>s}),t(61282),t(19377);let s=new Set(["claude","codex","gemini","vibe-local","opencode"])}};var r=require("../../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>t(38943));module.exports=s})();
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var e={};e.id=322,e.ids=[322],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},24452:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>_,patchFetch:()=>j,requestAsyncStorage:()=>q,routeModule:()=>g,serverHooks:()=>E,staticGenerationAsyncStorage:()=>R});var s={};t.r(s),t.d(s,{GET:()=>f,POST:()=>m});var o=t(49303),n=t(88716),i=t(60670),u=t(87070),a=t(84770),p=t(97425),d=t(75748),l=t(38693),c=t(95614),x=t(41124),h=t(8186);async function f(e,{params:r}){try{if(!(0,l.m$)(r.id))return u.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let e=(0,p.getDbInstance)();if(!(0,d.gU)(e,r.id))return u.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let t=e.prepare("SELECT * FROM scheduled_executions WHERE worktree_id = ? AND enabled = 1 ORDER BY created_at DESC").all(r.id);return u.NextResponse.json({schedules:t},{status:200})}catch(e){return console.error("Error fetching schedules:",e),u.NextResponse.json({error:"Failed to fetch schedules"},{status:500})}}async function m(e,{params:r}){try{if(!(0,l.m$)(r.id))return u.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let t=(0,p.getDbInstance)();if(!(0,d.gU)(t,r.id))return u.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let s=await e.json().catch(()=>({})),{cronExpression:o,cliToolId:n,enabled:i}=s,f="string"==typeof s.name?s.name.trim():"",m="string"==typeof s.message?s.message.trim():"";if(!f)return u.NextResponse.json({error:"name is required"},{status:400});if(f.length>c.ME)return u.NextResponse.json({error:`name must be ${c.ME} characters or less`},{status:400});if(!m)return u.NextResponse.json({error:"message is required"},{status:400});if(m.length>c.xT)return u.NextResponse.json({error:`message must be ${c.xT} characters or less`},{status:400});if(!o||"string"!=typeof o)return u.NextResponse.json({error:"cronExpression is required"},{status:400});if(!(0,h.oU)(o))return u.NextResponse.json({error:"Invalid cron expression format"},{status:400});let g=n||"claude";if(!x.pu.has(g))return u.NextResponse.json({error:"Invalid CLI tool"},{status:400});let q=Date.now(),R=(0,a.randomUUID)();t.prepare(`
1
+ "use strict";(()=>{var e={};e.id=322,e.ids=[322],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},24452:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>j,patchFetch:()=>N,requestAsyncStorage:()=>q,routeModule:()=>g,serverHooks:()=>E,staticGenerationAsyncStorage:()=>R});var s={};t.r(s),t.d(s,{GET:()=>m,POST:()=>h});var o=t(49303),n=t(88716),i=t(60670),u=t(87070),a=t(84770),p=t(97425),d=t(75748),l=t(38693),c=t(95614),x=t(41124),f=t(8186);async function m(e,{params:r}){try{if(!(0,l.m$)(r.id))return u.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let e=(0,p.getDbInstance)();if(!(0,d.gU)(e,r.id))return u.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let t=e.prepare("SELECT * FROM scheduled_executions WHERE worktree_id = ? AND enabled = 1 ORDER BY created_at DESC").all(r.id);return u.NextResponse.json({schedules:t},{status:200})}catch(e){return console.error("Error fetching schedules:",e),u.NextResponse.json({error:"Failed to fetch schedules"},{status:500})}}async function h(e,{params:r}){try{if(!(0,l.m$)(r.id))return u.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let t=(0,p.getDbInstance)();if(!(0,d.gU)(t,r.id))return u.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let s=await e.json().catch(()=>({})),{cronExpression:o,cliToolId:n,enabled:i}=s,m="string"==typeof s.name?s.name.trim():"",h="string"==typeof s.message?s.message.trim():"";if(!m)return u.NextResponse.json({error:"name is required"},{status:400});if(m.length>c.ME)return u.NextResponse.json({error:`name must be ${c.ME} characters or less`},{status:400});if(!h)return u.NextResponse.json({error:"message is required"},{status:400});if(h.length>c.xT)return u.NextResponse.json({error:`message must be ${c.xT} characters or less`},{status:400});if(!o||"string"!=typeof o)return u.NextResponse.json({error:"cronExpression is required"},{status:400});if(!(0,f.oU)(o))return u.NextResponse.json({error:"Invalid cron expression format"},{status:400});let g=n||"claude";if(!x.pu.has(g))return u.NextResponse.json({error:"Invalid CLI tool"},{status:400});let q=Date.now(),R=(0,a.randomUUID)();t.prepare(`
2
2
  INSERT INTO scheduled_executions (id, worktree_id, name, message, cron_expression, cli_tool_id, enabled, created_at, updated_at)
3
3
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
4
- `).run(R,r.id,f,m,o,g,!1!==i?1:0,q,q);let E=t.prepare("SELECT * FROM scheduled_executions WHERE id = ?").get(R);return u.NextResponse.json({schedule:E},{status:201})}catch(e){return console.error("Error creating schedule:",e),u.NextResponse.json({error:"Failed to create schedule"},{status:500})}}let g=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/schedules/route",pathname:"/api/worktrees/[id]/schedules",filename:"route",bundlePath:"app/api/worktrees/[id]/schedules/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/schedules/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:q,staticGenerationAsyncStorage:R,serverHooks:E}=g,_="/api/worktrees/[id]/schedules/route";function j(){return(0,i.patchFetch)({serverHooks:E,staticGenerationAsyncStorage:R})}},8186:(e,r,t)=>{t.d(r,{C4:()=>s,oU:()=>o});let s=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F\u200B-\u200F\u2028-\u202F\uFEFF]/;function o(e){if(e.length>100)return!1;let r=e.trim().split(/\s+/);return r.length>=5&&r.length<=6}},95614:(e,r,t)=>{t.d(r,{ME:()=>s,wx:()=>i,xT:()=>o});let s=100,o=1e4,n=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function i(e){return n.test(e)}},41124:(e,r,t)=>{t.d(r,{U_:()=>o,pu:()=>s}),t(61282),t(19377);let s=new Set(["claude","codex","gemini","vibe-local","opencode"]);function o(){return globalThis.__scheduleActiveProcesses||(globalThis.__scheduleActiveProcesses=new Map),globalThis.__scheduleActiveProcesses}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>t(24452));module.exports=s})();
4
+ `).run(R,r.id,m,h,o,g,!1!==i?1:0,q,q);let E=t.prepare("SELECT * FROM scheduled_executions WHERE id = ?").get(R);return u.NextResponse.json({schedule:E},{status:201})}catch(e){return console.error("Error creating schedule:",e),u.NextResponse.json({error:"Failed to create schedule"},{status:500})}}let g=new o.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/schedules/route",pathname:"/api/worktrees/[id]/schedules",filename:"route",bundlePath:"app/api/worktrees/[id]/schedules/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/schedules/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:q,staticGenerationAsyncStorage:R,serverHooks:E}=g,j="/api/worktrees/[id]/schedules/route";function N(){return(0,i.patchFetch)({serverHooks:E,staticGenerationAsyncStorage:R})}},8186:(e,r,t)=>{t.d(r,{C4:()=>s,oU:()=>o});let s=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F\u200B-\u200F\u2028-\u202F\uFEFF]/;function o(e){if(e.length>100)return!1;let r=e.trim().split(/\s+/);return r.length>=5&&r.length<=6}},95614:(e,r,t)=>{t.d(r,{ME:()=>s,wx:()=>i,xT:()=>o});let s=100,o=1e4,n=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function i(e){return n.test(e)}},41124:(e,r,t)=>{t.d(r,{pu:()=>s}),t(61282),t(19377);let s=new Set(["claude","codex","gemini","vibe-local","opencode"])}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[8948,5972,3853,4893,2509,7425,7566,4952,8693],()=>t(24452));module.exports=s})();