commandmate 0.1.10 → 0.1.12

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 (154) hide show
  1. package/.env.example +8 -3
  2. package/.next/BUILD_ID +1 -1
  3. package/.next/app-build-manifest.json +10 -10
  4. package/.next/app-path-routes-manifest.json +1 -1
  5. package/.next/build-manifest.json +2 -2
  6. package/.next/cache/.tsbuildinfo +1 -1
  7. package/.next/cache/config.json +3 -3
  8. package/.next/cache/webpack/client-production/0.pack +0 -0
  9. package/.next/cache/webpack/client-production/1.pack +0 -0
  10. package/.next/cache/webpack/client-production/2.pack +0 -0
  11. package/.next/cache/webpack/client-production/index.pack +0 -0
  12. package/.next/cache/webpack/client-production/index.pack.old +0 -0
  13. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  14. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  15. package/.next/cache/webpack/server-production/0.pack +0 -0
  16. package/.next/cache/webpack/server-production/index.pack +0 -0
  17. package/.next/next-server.js.nft.json +1 -1
  18. package/.next/prerender-manifest.json +1 -1
  19. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/_not-found.html +1 -1
  21. package/.next/server/app/_not-found.rsc +1 -1
  22. package/.next/server/app/api/external-apps/[id]/health/route.js +11 -12
  23. package/.next/server/app/api/external-apps/[id]/route.js +14 -15
  24. package/.next/server/app/api/external-apps/route.js +12 -13
  25. package/.next/server/app/api/hooks/claude-done/route.js +6 -6
  26. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  27. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  28. package/.next/server/app/api/repositories/clone/route.js +1 -1
  29. package/.next/server/app/api/repositories/route.js +1 -1
  30. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  31. package/.next/server/app/api/repositories/scan/route.js +1 -1
  32. package/.next/server/app/api/repositories/sync/route.js +1 -1
  33. package/.next/server/app/api/slash-commands.body +1 -1
  34. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  35. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  36. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  37. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  38. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  39. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  40. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  41. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  42. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  43. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  44. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  45. package/.next/server/app/api/worktrees/[id]/logs/route.js +7 -7
  46. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  47. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  48. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  49. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  50. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  51. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  52. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  53. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  54. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  55. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  56. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  57. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  58. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  59. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  60. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  61. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  62. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  63. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  64. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  65. package/.next/server/app/api/worktrees/route.js +1 -1
  66. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  67. package/.next/server/app/index.html +2 -2
  68. package/.next/server/app/index.rsc +2 -2
  69. package/.next/server/app/page_client-reference-manifest.js +1 -1
  70. package/.next/server/app/proxy/[...path]/route.js +12 -13
  71. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  72. package/.next/server/app/worktrees/[id]/page.js +4 -4
  73. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/worktrees/[id]/simple-terminal/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app-paths-manifest.json +8 -8
  77. package/.next/server/chunks/1318.js +4 -4
  78. package/.next/server/chunks/2597.js +1 -0
  79. package/.next/server/chunks/2648.js +1 -0
  80. package/.next/server/chunks/7425.js +97 -48
  81. package/.next/server/chunks/9723.js +1 -1
  82. package/.next/server/functions-config-manifest.json +1 -1
  83. package/.next/server/middleware-manifest.json +5 -5
  84. package/.next/server/pages/404.html +1 -1
  85. package/.next/server/pages/500.html +1 -1
  86. package/.next/server/server-reference-manifest.json +1 -1
  87. package/.next/server/src/middleware.js +2 -2
  88. package/.next/server/src/middleware.js.map +1 -1
  89. package/.next/static/chunks/app/worktrees/[id]/page-58fcf2e63c056743.js +1 -0
  90. package/.next/trace +5 -5
  91. package/dist/cli/commands/init.d.ts.map +1 -1
  92. package/dist/cli/commands/init.js +6 -4
  93. package/dist/cli/commands/start.d.ts +2 -0
  94. package/dist/cli/commands/start.d.ts.map +1 -1
  95. package/dist/cli/commands/start.js +64 -17
  96. package/dist/cli/commands/status.d.ts +4 -1
  97. package/dist/cli/commands/status.d.ts.map +1 -1
  98. package/dist/cli/commands/status.js +95 -6
  99. package/dist/cli/commands/stop.d.ts +2 -0
  100. package/dist/cli/commands/stop.d.ts.map +1 -1
  101. package/dist/cli/commands/stop.js +27 -10
  102. package/dist/cli/index.js +16 -2
  103. package/dist/cli/types/index.d.ts +20 -0
  104. package/dist/cli/types/index.d.ts.map +1 -1
  105. package/dist/cli/utils/daemon-factory.d.ts +105 -0
  106. package/dist/cli/utils/daemon-factory.d.ts.map +1 -0
  107. package/dist/cli/utils/daemon-factory.js +117 -0
  108. package/dist/cli/utils/daemon.d.ts.map +1 -1
  109. package/dist/cli/utils/daemon.js +4 -0
  110. package/dist/cli/utils/env-setup.d.ts +24 -12
  111. package/dist/cli/utils/env-setup.d.ts.map +1 -1
  112. package/dist/cli/utils/env-setup.js +64 -43
  113. package/dist/cli/utils/input-validators.d.ts +103 -0
  114. package/dist/cli/utils/input-validators.d.ts.map +1 -0
  115. package/dist/cli/utils/input-validators.js +163 -0
  116. package/dist/cli/utils/install-context.d.ts +53 -0
  117. package/dist/cli/utils/install-context.d.ts.map +1 -0
  118. package/dist/cli/utils/install-context.js +96 -0
  119. package/dist/cli/utils/pid-manager.d.ts +34 -0
  120. package/dist/cli/utils/pid-manager.d.ts.map +1 -1
  121. package/dist/cli/utils/pid-manager.js +43 -0
  122. package/dist/cli/utils/port-allocator.d.ts +108 -0
  123. package/dist/cli/utils/port-allocator.d.ts.map +1 -0
  124. package/dist/cli/utils/port-allocator.js +166 -0
  125. package/dist/cli/utils/resource-resolvers.d.ts +92 -0
  126. package/dist/cli/utils/resource-resolvers.d.ts.map +1 -0
  127. package/dist/cli/utils/resource-resolvers.js +175 -0
  128. package/dist/cli/utils/worktree-detector.d.ts +82 -0
  129. package/dist/cli/utils/worktree-detector.d.ts.map +1 -0
  130. package/dist/cli/utils/worktree-detector.js +221 -0
  131. package/dist/lib/errors.d.ts +111 -0
  132. package/dist/lib/errors.d.ts.map +1 -0
  133. package/dist/lib/errors.js +153 -0
  134. package/dist/server/server.js +3 -0
  135. package/dist/server/src/cli/utils/install-context.js +96 -0
  136. package/dist/server/src/config/system-directories.js +40 -0
  137. package/dist/server/src/lib/auto-yes-manager.js +324 -0
  138. package/dist/server/src/lib/auto-yes-resolver.js +34 -0
  139. package/dist/server/src/lib/claude-session.js +134 -28
  140. package/dist/server/src/lib/cli-patterns.js +6 -1
  141. package/dist/server/src/lib/db-instance.js +12 -2
  142. package/dist/server/src/lib/db-migrations.js +68 -1
  143. package/dist/server/src/lib/db-path-resolver.js +99 -0
  144. package/dist/server/src/lib/db.js +21 -0
  145. package/dist/server/src/lib/env.js +52 -3
  146. package/dist/server/src/lib/worktrees.js +36 -1
  147. package/dist/server/src/types/external-apps.js +20 -0
  148. package/package.json +1 -1
  149. package/.next/server/chunks/1528.js +0 -1
  150. package/.next/server/chunks/7213.js +0 -1
  151. package/.next/static/chunks/app/worktrees/[id]/page-aea2d5e7e28955be.js +0 -1
  152. /package/.next/static/{8o5rUyZun0GklIHWDgkmv → 564GHwluX5xIv9qpqLJV2}/_buildManifest.js +0 -0
  153. /package/.next/static/{8o5rUyZun0GklIHWDgkmv → 564GHwluX5xIv9qpqLJV2}/_ssgManifest.js +0 -0
  154. /package/.next/static/chunks/app/{page-96a8aa2ec30a44e9.js → page-fe35d61f14b90a51.js} +0 -0
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=9495,e.ids=[9495],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")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},2838:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>D,patchFetch:()=>M,requestAsyncStorage:()=>f,routeModule:()=>C,serverHooks:()=>x,staticGenerationAsyncStorage:()=>T});var n={};t.r(n),t.d(n,{POST:()=>d});var o=t(49303),s=t(88716),i=t(60670),a=t(87070),u=t(97425),p=t(75748),l=t(97213),c=t(43895);let _=(0,c.h)("interrupt");async function d(e,{params:r}){let{id:t}=await r,n=(0,c.Y)(),o=_.withContext({worktreeId:t,requestId:n});o.info("interrupt:request");try{let r=(0,u.n)();if(!(0,p.gU)(r,t))return o.warn("interrupt:worktree_not_found"),a.NextResponse.json({error:`Worktree '${t}' not found`},{status:404});let n={};try{n=await e.json()}catch{}let s=l.g.getInstance(),i=[];for(let e of n.cliToolId?[n.cliToolId]:["claude","codex","gemini"]){let r=s.getTool(e);if(await r.isRunning(t)){let n=r.getSessionName(t);o.debug("interrupt:sending",{cliToolId:e,sessionName:n}),await r.interrupt(t),i.push({cliToolId:e,sessionName:n}),o.info("interrupt:sent",{cliToolId:e,sessionName:n})}}if(0===i.length)return o.warn("interrupt:no_active_sessions"),a.NextResponse.json({error:"No active sessions found"},{status:404});return o.info("interrupt:success",{interruptedCount:i.length}),a.NextResponse.json({success:!0,message:`Interrupt sent to ${i.length} session(s)`,interrupted:i},{status:200})}catch(r){let e=r instanceof Error?r.message:String(r);return o.error("interrupt:error",{error:e}),a.NextResponse.json({error:"Failed to send interrupt"},{status:500})}}let C=new o.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/worktrees/[id]/interrupt/route",pathname:"/api/worktrees/[id]/interrupt",filename:"route",bundlePath:"app/api/worktrees/[id]/interrupt/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/interrupt/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:f,staticGenerationAsyncStorage:T,serverHooks:x}=C,D="/api/worktrees/[id]/interrupt/route";function M(){return(0,i.patchFetch)({serverHooks:x,staticGenerationAsyncStorage:T})}},37848:(e,r,t)=>{t.d(r,{Hb:()=>a,LI:()=>u,dU:()=>p});var n=t(55315),o=t.n(n);let s={CM_ROOT_DIR:"MCBD_ROOT_DIR",CM_PORT:"MCBD_PORT",CM_BIND:"MCBD_BIND",CM_AUTH_TOKEN:"MCBD_AUTH_TOKEN",CM_LOG_LEVEL:"MCBD_LOG_LEVEL",CM_LOG_FORMAT:"MCBD_LOG_FORMAT",CM_LOG_DIR:"MCBD_LOG_DIR",CM_DB_PATH:"MCBD_DB_PATH"},i=new Set;function a(e){return function(e,r){let t=process.env[e];if(void 0!==t)return t;let n=process.env[r];if(void 0!==n)return i.has(r)||(console.warn(`[DEPRECATED] ${r} is deprecated, use ${e} instead`),i.add(r)),n}(e,s[e])}function u(){let e=a("CM_LOG_LEVEL")?.toLowerCase(),r=a("CM_LOG_FORMAT")?.toLowerCase();return{level:void 0!==e&&["debug","info","warn","error"].includes(e)?e:"info",format:"json"===r?"json":"text"}}function p(){let e=a("CM_ROOT_DIR")||process.cwd(),r=parseInt(a("CM_PORT")||"3000",10),t=a("CM_BIND")||"127.0.0.1",n=a("CM_AUTH_TOKEN"),s=a("CM_DB_PATH")||process.env.DATABASE_PATH||o().join(process.cwd(),"data","cm.db");if(!e)throw Error("CM_ROOT_DIR (or MCBD_ROOT_DIR) is required");if(isNaN(r)||r<1||r>65535)throw Error(`Invalid CM_PORT: ${a("CM_PORT")}. Must be between 1 and 65535.`);if("127.0.0.1"!==t&&"0.0.0.0"!==t&&"localhost"!==t)throw Error(`Invalid CM_BIND: ${t}. Must be '127.0.0.1', '0.0.0.0', or 'localhost'.`);if("0.0.0.0"===t&&!n)throw Error("CM_AUTH_TOKEN (or MCBD_AUTH_TOKEN) is required when CM_BIND=0.0.0.0");return{CM_ROOT_DIR:o().resolve(e),CM_PORT:r,CM_BIND:t,CM_AUTH_TOKEN:n,CM_DB_PATH:o().resolve(s)}}},43895:(e,r,t)=>{t.d(r,{Y:()=>u,h:()=>p});var n=t(37848);let o=[{pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [REDACTED]"},{pattern:/(password|passwd|pwd)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/(token|secret|api_key|apikey|auth)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/CM_AUTH_TOKEN=\S+/gi,replacement:"CM_AUTH_TOKEN=[REDACTED]"},{pattern:/MCBD_AUTH_TOKEN=\S+/gi,replacement:"MCBD_AUTH_TOKEN=[REDACTED]"},{pattern:/Authorization:\s*\S+/gi,replacement:"Authorization: [REDACTED]"},{pattern:/-----BEGIN\s+\w+\s+PRIVATE\s+KEY-----[\s\S]*?-----END\s+\w+\s+PRIVATE\s+KEY-----/g,replacement:"[SSH_KEY_REDACTED]"}],s=/password|secret|token|key|auth/i,i={debug:0,info:1,warn:2,error:3};function a(e,r,t,a,u){let p=(0,n.LI)().level;if(i[e]<i[p])return;let l=a?function e(r){if("string"==typeof r){let e=r;for(let{pattern:r,replacement:t}of o)e=e.replace(r,t);return e}if("object"==typeof r&&null!==r){if(Array.isArray(r))return r.map(e);let t={};for(let[n,o]of Object.entries(r))s.test(n)?t[n]="[REDACTED]":t[n]=e(o);return t}return r}(a):void 0,c=function(e){if("json"===(0,n.LI)().format)return JSON.stringify(e);let{timestamp:r,level:t,module:o,action:s,data:i,worktreeId:a,cliToolId:u,requestId:p}=e,l=[a,u].filter(Boolean),c=l.length>0?` [${l.join(":")}]`:"",_=p?` (${p.slice(0,8)})`:"",d=i?` ${JSON.stringify(i)}`:"";return`[${r}] [${t.toUpperCase()}] [${o}]${c}${_} ${s}${d}`}({level:e,module:r,action:t,timestamp:new Date().toISOString(),...u,...l&&{data:l}});switch(e){case"error":console.error(c);break;case"warn":console.warn(c);break;default:console.log(c)}}function u(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let r=16*Math.random()|0;return("x"===e?r:3&r|8).toString(16)})}function p(e){let r=t=>({debug:(r,n)=>a("debug",e,r,n,t),info:(r,n)=>a("info",e,r,n,t),warn:(r,n)=>a("warn",e,r,n,t),error:(r,n)=>a("error",e,r,n,t),withContext:e=>r({...t,...e})});return r()}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),n=r.X(0,[8948,5972,7425,7213],()=>t(2838));module.exports=n})();
1
+ "use strict";(()=>{var e={};e.id=9495,e.ids=[9495],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")},2838:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>y,patchFetch:()=>f,requestAsyncStorage:()=>w,routeModule:()=>p,serverHooks:()=>x,staticGenerationAsyncStorage:()=>h});var r={};s.r(r),s.d(r,{POST:()=>g});var i=s(49303),o=s(88716),n=s(60670),a=s(87070),l=s(97425),c=s(75748),u=s(97213),d=s(43895);let m=(0,d.h)("interrupt");async function g(e,{params:t}){let{id:s}=await t,r=(0,d.Y)(),i=m.withContext({worktreeId:s,requestId:r});i.info("interrupt:request");try{let t=(0,l.n)();if(!(0,c.gU)(t,s))return i.warn("interrupt:worktree_not_found"),a.NextResponse.json({error:`Worktree '${s}' not found`},{status:404});let r={};try{r=await e.json()}catch{}let o=u.g.getInstance(),n=[];for(let e of r.cliToolId?[r.cliToolId]:["claude","codex","gemini"]){let t=o.getTool(e);if(await t.isRunning(s)){let r=t.getSessionName(s);i.debug("interrupt:sending",{cliToolId:e,sessionName:r}),await t.interrupt(s),n.push({cliToolId:e,sessionName:r}),i.info("interrupt:sent",{cliToolId:e,sessionName:r})}}if(0===n.length)return i.warn("interrupt:no_active_sessions"),a.NextResponse.json({error:"No active sessions found"},{status:404});return i.info("interrupt:success",{interruptedCount:n.length}),a.NextResponse.json({success:!0,message:`Interrupt sent to ${n.length} session(s)`,interrupted:n},{status:200})}catch(t){let e=t instanceof Error?t.message:String(t);return i.error("interrupt:error",{error:e}),a.NextResponse.json({error:"Failed to send interrupt"},{status:500})}}let p=new i.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/interrupt/route",pathname:"/api/worktrees/[id]/interrupt",filename:"route",bundlePath:"app/api/worktrees/[id]/interrupt/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/interrupt/route.ts",nextConfigOutput:"",userland:r}),{requestAsyncStorage:w,staticGenerationAsyncStorage:h,serverHooks:x}=p,y="/api/worktrees/[id]/interrupt/route";function f(){return(0,n.patchFetch)({serverHooks:x,staticGenerationAsyncStorage:h})}},97213:(e,t,s)=>{s.d(t,{g:()=>p});var r=s(61282),i=s(21764),o=s(10927);let n=(0,i.promisify)(r.exec);class a{async isInstalled(){try{return await n(`which ${this.command}`,{timeout:5e3}),!0}catch{return!1}}getSessionName(e){return`mcbd-${this.id}-${e}`}async interrupt(e){let t=this.getSessionName(e);await (0,o.ZV)(t,"Escape")}}var l=s(62648);class c extends a{async isInstalled(){return await (0,l.Uv)()}async isRunning(e){return await (0,l.YI)(e)}async startSession(e,t){await (0,l.ym)({worktreeId:e,worktreePath:t})}async sendMessage(e,t){await (0,l.xd)(e,t)}async killSession(e){await (0,l._f)(e)}constructor(...e){super(...e),this.id="claude",this.name="Claude Code",this.command="claude"}}let u=(0,i.promisify)(r.exec);class d extends a{async isRunning(e){let t=this.getSessionName(e);return await (0,o.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Codex CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,o.Hk)(s)){console.log(`Codex session ${s} already exists`);return}try{await (0,o.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),await new Promise(e=>setTimeout(e,100)),await (0,o.Is)(s,"codex",!0),await new Promise(e=>setTimeout(e,3e3)),await (0,o.Is)(s,"2",!0),await new Promise(e=>setTimeout(e,500)),console.log(`✓ Started Codex session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Codex session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,o.Hk)(s))throw Error(`Codex session ${s} does not exist. Start the session first.`);try{await (0,o.Is)(s,t,!1),await new Promise(e=>setTimeout(e,100)),await u(`tmux send-keys -t "${s}" C-m`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Sent message to Codex session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Codex: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,o.Hk)(t)&&(await u(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,o.AJ)(t)&&console.log(`✓ Stopped Codex session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`Error stopping Codex session: ${e}`),t}}constructor(...e){super(...e),this.id="codex",this.name="Codex CLI",this.command="codex"}}let m=(0,i.promisify)(r.exec);class g extends a{async isRunning(e){let t=this.getSessionName(e);return await (0,o.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Gemini CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,o.Hk)(s)){console.log(`Gemini session ${s} already exists`);return}try{await (0,o.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),console.log(`✓ Started Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Gemini session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,o.Hk)(s))throw Error(`Gemini session ${s} does not exist. Start the session first.`);try{let e=t.replace(/'/g,"'\\''");await (0,o.Is)(s,`echo '${e}' | gemini`,!0),console.log(`✓ Sent message to Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Gemini: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,o.Hk)(t)&&(await m(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,o.AJ)(t)&&console.log(`✓ Stopped Gemini session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`Error stopping Gemini session: ${e}`),t}}constructor(...e){super(...e),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}class p{constructor(){this.tools=new Map,this.tools.set("claude",new c),this.tools.set("codex",new d),this.tools.set("gemini",new g)}static getInstance(){return p.instance||(p.instance=new p),p.instance}getTool(e){let t=this.tools.get(e);if(!t)throw Error(`CLI tool '${e}' not found`);return t}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(e){let t=this.getTool(e),s=await t.isInstalled();return{id:t.id,name:t.name,command:t.command,installed:s}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async e=>{let t=await e.isInstalled();return{id:e.id,name:e.name,command:e.command,installed:t}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(e=>e.installed)}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[8948,5972,7425,2648],()=>s(2838));module.exports=r})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../../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/5972.js","../../../../../chunks/7213.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../../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/2648.js","../../../../../chunks/5972.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../webpack-runtime.js"]}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=2238,e.ids=[2238],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")},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")},38877:(e,r,s)=>{s.r(r),s.d(r,{originalPathname:()=>h,patchFetch:()=>w,requestAsyncStorage:()=>q,routeModule:()=>m,serverHooks:()=>f,staticGenerationAsyncStorage:()=>g});var t={};s.r(t),s.d(t,{POST:()=>k});var o=s(49303),i=s(88716),n=s(60670),u=s(87070),a=s(97425),p=s(75748),l=s(97213),d=s(10927),c=s(25079),x=s(59991);async function k(e,{params:r}){try{let e=(0,a.n)();if(!(0,p.gU)(e,r.id))return u.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let s=l.g.getInstance(),t=[],o=!1;for(let i of["claude","codex","gemini"]){let n=s.getTool(i);if(await n.isRunning(r.id)){o=!0;let s=n.getSessionName(r.id);await (0,d.AJ)(s)&&(t.push(s),console.log(`[kill-session] Killed ${i} session: ${s}`)),(0,x.FN)(r.id,i),(0,p.j8)(e,r.id,i)}}if(!o)return u.NextResponse.json({error:"No active sessions found for this worktree"},{status:404});return(0,p.HE)(e,r.id),(0,c.fM)(r.id,{type:"session_status_changed",worktreeId:r.id,isRunning:!1,messagesCleared:!0}),u.NextResponse.json({success:!0,message:`All sessions killed successfully: ${t.join(", ")}`,killedSessions:t},{status:200})}catch(e){return console.error("Error killing sessions:",e),u.NextResponse.json({error:"Failed to kill sessions"},{status:500})}}let m=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/kill-session/route",pathname:"/api/worktrees/[id]/kill-session",filename:"route",bundlePath:"app/api/worktrees/[id]/kill-session/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/kill-session/route.ts",nextConfigOutput:"",userland:t}),{requestAsyncStorage:q,staticGenerationAsyncStorage:g,serverHooks:f}=m,h="/api/worktrees/[id]/kill-session/route";function w(){return(0,n.patchFetch)({serverHooks:f,staticGenerationAsyncStorage:g})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[8948,5972,3853,4893,7425,7213,1528,9723],()=>s(38877));module.exports=t})();
1
+ "use strict";(()=>{var e={};e.id=2238,e.ids=[2238],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")},38877:(e,r,s)=>{s.r(r),s.d(r,{originalPathname:()=>h,patchFetch:()=>w,requestAsyncStorage:()=>m,routeModule:()=>k,serverHooks:()=>f,staticGenerationAsyncStorage:()=>g});var t={};s.r(t),s.d(t,{POST:()=>q});var o=s(49303),i=s(88716),n=s(60670),u=s(87070),a=s(97425),p=s(75748),l=s(97213),d=s(10927),c=s(25079),x=s(59991);async function q(e,{params:r}){try{let e=(0,a.n)();if(!(0,p.gU)(e,r.id))return u.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let s=l.g.getInstance(),t=[],o=!1;for(let i of["claude","codex","gemini"]){let n=s.getTool(i);if(await n.isRunning(r.id)){o=!0;let s=n.getSessionName(r.id);await (0,d.AJ)(s)&&(t.push(s),console.log(`[kill-session] Killed ${i} session: ${s}`)),(0,x.FN)(r.id,i),(0,p.j8)(e,r.id,i)}}if(!o)return u.NextResponse.json({error:"No active sessions found for this worktree"},{status:404});return(0,p.HE)(e,r.id),(0,c.fM)(r.id,{type:"session_status_changed",worktreeId:r.id,isRunning:!1,messagesCleared:!0}),u.NextResponse.json({success:!0,message:`All sessions killed successfully: ${t.join(", ")}`,killedSessions:t},{status:200})}catch(e){return console.error("Error killing sessions:",e),u.NextResponse.json({error:"Failed to kill sessions"},{status:500})}}let k=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/kill-session/route",pathname:"/api/worktrees/[id]/kill-session",filename:"route",bundlePath:"app/api/worktrees/[id]/kill-session/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/kill-session/route.ts",nextConfigOutput:"",userland:t}),{requestAsyncStorage:m,staticGenerationAsyncStorage:g,serverHooks:f}=k,h="/api/worktrees/[id]/kill-session/route";function w(){return(0,n.patchFetch)({serverHooks:f,staticGenerationAsyncStorage:g})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[8948,5972,3853,4893,7425,2648,2597,9723],()=>s(38877));module.exports=t})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../../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/1528.js","../../../../../chunks/3853.js","../../../../../chunks/4893.js","../../../../../chunks/5972.js","../../../../../chunks/7213.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../chunks/9723.js","../../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../../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/2597.js","../../../../../chunks/2648.js","../../../../../chunks/3853.js","../../../../../chunks/4893.js","../../../../../chunks/5972.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../chunks/9723.js","../../../../../webpack-runtime.js"]}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=1732,e.ids=[1732],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")},55315:e=>{e.exports=require("path")},25828:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>D,patchFetch:()=>w,requestAsyncStorage:()=>T,routeModule:()=>O,serverHooks:()=>R,staticGenerationAsyncStorage:()=>m});var o={};t.r(o),t.d(o,{GET:()=>f});var s=t(49303),i=t(88716),n=t(60670),a=t(87070),l=t(97425),d=t(75748),u=t(37848),_=t(20629),p=t.n(_),c=t(55315),M=t.n(c);let C=(0,u.Hb)("CM_LOG_DIR")||M().join(process.cwd(),"data","logs");async function f(e,{params:r}){try{let e=(0,l.n)();if(!(0,d.gU)(e,r.id))return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let t=r.filename;if(!t.endsWith(".md")||!t.startsWith(`${r.id}-`))return a.NextResponse.json({error:"Invalid filename"},{status:400});if(t.includes("..")||t.includes("/")||t.includes("\\"))return a.NextResponse.json({error:"Invalid filename: path traversal not allowed"},{status:400});let o=!1,s="",i=null,n="";for(let e of["claude","codex","gemini"]){let r=M().join(C,e,t);try{let t=await p().stat(r);if(t.isFile()){o=!0,n=e,i={size:t.size,mtime:t.mtime},s=await p().readFile(r,"utf-8");break}}catch(e){if("ENOENT"!==e.code)throw e}}if(!o)return a.NextResponse.json({error:`Log file '${t}' not found in any CLI tool directory`},{status:404});return a.NextResponse.json({filename:t,cliToolId:n,content:s,size:i.size,modifiedAt:i.mtime.toISOString()},{status:200})}catch(e){return console.error("Error reading log file:",e),a.NextResponse.json({error:"Failed to read log file"},{status:500})}}let O=new s.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/logs/[filename]/route",pathname:"/api/worktrees/[id]/logs/[filename]",filename:"route",bundlePath:"app/api/worktrees/[id]/logs/[filename]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/logs/[filename]/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:T,staticGenerationAsyncStorage:m,serverHooks:R}=O,D="/api/worktrees/[id]/logs/[filename]/route";function w(){return(0,n.patchFetch)({serverHooks:R,staticGenerationAsyncStorage:m})}},37848:(e,r,t)=>{t.d(r,{Hb:()=>a,LI:()=>l,dU:()=>d});var o=t(55315),s=t.n(o);let i={CM_ROOT_DIR:"MCBD_ROOT_DIR",CM_PORT:"MCBD_PORT",CM_BIND:"MCBD_BIND",CM_AUTH_TOKEN:"MCBD_AUTH_TOKEN",CM_LOG_LEVEL:"MCBD_LOG_LEVEL",CM_LOG_FORMAT:"MCBD_LOG_FORMAT",CM_LOG_DIR:"MCBD_LOG_DIR",CM_DB_PATH:"MCBD_DB_PATH"},n=new Set;function a(e){return function(e,r){let t=process.env[e];if(void 0!==t)return t;let o=process.env[r];if(void 0!==o)return n.has(r)||(console.warn(`[DEPRECATED] ${r} is deprecated, use ${e} instead`),n.add(r)),o}(e,i[e])}function l(){let e=a("CM_LOG_LEVEL")?.toLowerCase(),r=a("CM_LOG_FORMAT")?.toLowerCase();return{level:void 0!==e&&["debug","info","warn","error"].includes(e)?e:"info",format:"json"===r?"json":"text"}}function d(){let e=a("CM_ROOT_DIR")||process.cwd(),r=parseInt(a("CM_PORT")||"3000",10),t=a("CM_BIND")||"127.0.0.1",o=a("CM_AUTH_TOKEN"),i=a("CM_DB_PATH")||process.env.DATABASE_PATH||s().join(process.cwd(),"data","cm.db");if(!e)throw Error("CM_ROOT_DIR (or MCBD_ROOT_DIR) is required");if(isNaN(r)||r<1||r>65535)throw Error(`Invalid CM_PORT: ${a("CM_PORT")}. Must be between 1 and 65535.`);if("127.0.0.1"!==t&&"0.0.0.0"!==t&&"localhost"!==t)throw Error(`Invalid CM_BIND: ${t}. Must be '127.0.0.1', '0.0.0.0', or 'localhost'.`);if("0.0.0.0"===t&&!o)throw Error("CM_AUTH_TOKEN (or MCBD_AUTH_TOKEN) is required when CM_BIND=0.0.0.0");return{CM_ROOT_DIR:s().resolve(e),CM_PORT:r,CM_BIND:t,CM_AUTH_TOKEN:o,CM_DB_PATH:s().resolve(i)}}}};var r=require("../../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,7425],()=>t(25828));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=1732,e.ids=[1732],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")},25828:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>k,patchFetch:()=>q,requestAsyncStorage:()=>w,routeModule:()=>h,serverHooks:()=>j,staticGenerationAsyncStorage:()=>v});var o={};t.r(o),t.d(o,{GET:()=>g});var s=t(49303),i=t(88716),n=t(60670),a=t(87070),l=t(97425),u=t(75748),d=t(93346),p=t(20629),m=t.n(p),c=t(55315),f=t.n(c);let x=(0,d.Hb)("CM_LOG_DIR")||f().join(process.cwd(),"data","logs");async function g(e,{params:r}){try{let e=(0,l.n)();if(!(0,u.gU)(e,r.id))return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let t=r.filename;if(!t.endsWith(".md")||!t.startsWith(`${r.id}-`))return a.NextResponse.json({error:"Invalid filename"},{status:400});if(t.includes("..")||t.includes("/")||t.includes("\\"))return a.NextResponse.json({error:"Invalid filename: path traversal not allowed"},{status:400});let o=!1,s="",i=null,n="";for(let e of["claude","codex","gemini"]){let r=f().join(x,e,t);try{let t=await m().stat(r);if(t.isFile()){o=!0,n=e,i={size:t.size,mtime:t.mtime},s=await m().readFile(r,"utf-8");break}}catch(e){if("ENOENT"!==e.code)throw e}}if(!o)return a.NextResponse.json({error:`Log file '${t}' not found in any CLI tool directory`},{status:404});return a.NextResponse.json({filename:t,cliToolId:n,content:s,size:i.size,modifiedAt:i.mtime.toISOString()},{status:200})}catch(e){return console.error("Error reading log file:",e),a.NextResponse.json({error:"Failed to read log file"},{status:500})}}let h=new s.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/logs/[filename]/route",pathname:"/api/worktrees/[id]/logs/[filename]",filename:"route",bundlePath:"app/api/worktrees/[id]/logs/[filename]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/logs/[filename]/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:w,staticGenerationAsyncStorage:v,serverHooks:j}=h,k="/api/worktrees/[id]/logs/[filename]/route";function q(){return(0,n.patchFetch)({serverHooks:j,staticGenerationAsyncStorage:v})}}};var r=require("../../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,7425],()=>t(25828));module.exports=o})();
@@ -1,19 +1,19 @@
1
- "use strict";(()=>{var e={};e.id=1746,e.ids=[1746],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")},55315:e=>{e.exports=require("path")},5517:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>w,patchFetch:()=>D,requestAsyncStorage:()=>f,routeModule:()=>O,serverHooks:()=>m,staticGenerationAsyncStorage:()=>T});var o={};t.r(o),t.d(o,{GET:()=>M});var a=t(49303),s=t(88716),n=t(60670),i=t(87070),d=t(97425),l=t(75748),u=t(98636),c=t(20629),_=t.n(c),p=t(55315),C=t.n(p);async function M(e,{params:r}){try{let t=(0,d.n)();if(!(0,l.gU)(t,r.id))return i.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let o=e.nextUrl?.searchParams,a=o?.get("cliTool")||"all",s=await (0,u.e7)(r.id,a),n=(await Promise.all(s.map(async e=>{let r=C().basename(e),t=await _().stat(e),o=e.split(C().sep),a=o[o.length-2];return{filename:r,cliToolId:a,size:t.size,modifiedAt:t.mtime.toISOString()}}))).map(e=>e.filename);return i.NextResponse.json(n,{status:200})}catch(e){return console.error("Error fetching log files:",e),i.NextResponse.json({error:"Failed to fetch log files"},{status:500})}}let O=new a.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/worktrees/[id]/logs/route",pathname:"/api/worktrees/[id]/logs",filename:"route",bundlePath:"app/api/worktrees/[id]/logs/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/logs/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:f,staticGenerationAsyncStorage:T,serverHooks:m}=O,w="/api/worktrees/[id]/logs/route";function D(){return(0,n.patchFetch)({serverHooks:m,staticGenerationAsyncStorage:T})}},37848:(e,r,t)=>{t.d(r,{Hb:()=>i,LI:()=>d,dU:()=>l});var o=t(55315),a=t.n(o);let s={CM_ROOT_DIR:"MCBD_ROOT_DIR",CM_PORT:"MCBD_PORT",CM_BIND:"MCBD_BIND",CM_AUTH_TOKEN:"MCBD_AUTH_TOKEN",CM_LOG_LEVEL:"MCBD_LOG_LEVEL",CM_LOG_FORMAT:"MCBD_LOG_FORMAT",CM_LOG_DIR:"MCBD_LOG_DIR",CM_DB_PATH:"MCBD_DB_PATH"},n=new Set;function i(e){return function(e,r){let t=process.env[e];if(void 0!==t)return t;let o=process.env[r];if(void 0!==o)return n.has(r)||(console.warn(`[DEPRECATED] ${r} is deprecated, use ${e} instead`),n.add(r)),o}(e,s[e])}function d(){let e=i("CM_LOG_LEVEL")?.toLowerCase(),r=i("CM_LOG_FORMAT")?.toLowerCase();return{level:void 0!==e&&["debug","info","warn","error"].includes(e)?e:"info",format:"json"===r?"json":"text"}}function l(){let e=i("CM_ROOT_DIR")||process.cwd(),r=parseInt(i("CM_PORT")||"3000",10),t=i("CM_BIND")||"127.0.0.1",o=i("CM_AUTH_TOKEN"),s=i("CM_DB_PATH")||process.env.DATABASE_PATH||a().join(process.cwd(),"data","cm.db");if(!e)throw Error("CM_ROOT_DIR (or MCBD_ROOT_DIR) is required");if(isNaN(r)||r<1||r>65535)throw Error(`Invalid CM_PORT: ${i("CM_PORT")}. Must be between 1 and 65535.`);if("127.0.0.1"!==t&&"0.0.0.0"!==t&&"localhost"!==t)throw Error(`Invalid CM_BIND: ${t}. Must be '127.0.0.1', '0.0.0.0', or 'localhost'.`);if("0.0.0.0"===t&&!o)throw Error("CM_AUTH_TOKEN (or MCBD_AUTH_TOKEN) is required when CM_BIND=0.0.0.0");return{CM_ROOT_DIR:a().resolve(e),CM_PORT:r,CM_BIND:t,CM_AUTH_TOKEN:o,CM_DB_PATH:a().resolve(s)}}},98636:(e,r,t)=>{t.d(r,{e7:()=>_,xN:()=>c});var o=t(20629),a=t.n(o),s=t(55315),n=t.n(s),i=t(73853);let d=(0,t(37848).Hb)("CM_LOG_DIR")||n().join(process.cwd(),"data","logs");function l(e="claude"){return n().join(d,e)}async function u(e="claude"){let r=l(e);try{await a().access(r)}catch{await a().mkdir(r,{recursive:!0})}}async function c(e,r,t,o="claude"){await u(o);let s=function(e,r="claude"){let t=(0,i.WU)(new Date,"yyyy-MM-dd"),o=`${e}-${t}.md`,a=l(r);return n().join(a,o)}(e,o),d=(0,i.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),c="";try{c=await a().readFile(s,"utf-8")}catch{let r="claude"===o?"Claude Code":"codex"===o?"Codex CLI":"Gemini CLI";c=`# ${r} Conversation Log: ${e}
1
+ "use strict";(()=>{var e={};e.id=1746,e.ids=[1746],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")},5517:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>C,patchFetch:()=>v,requestAsyncStorage:()=>w,routeModule:()=>g,serverHooks:()=>y,staticGenerationAsyncStorage:()=>h});var a={};r.r(a),r.d(a,{GET:()=>x});var o=r(49303),i=r(88716),s=r(60670),n=r(87070),u=r(97425),d=r(75748),l=r(98636),c=r(20629),p=r.n(c),m=r(55315),f=r.n(m);async function x(e,{params:t}){try{let r=(0,u.n)();if(!(0,d.gU)(r,t.id))return n.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let a=e.nextUrl?.searchParams,o=a?.get("cliTool")||"all",i=await (0,l.e7)(t.id,o),s=(await Promise.all(i.map(async e=>{let t=f().basename(e),r=await p().stat(e),a=e.split(f().sep),o=a[a.length-2];return{filename:t,cliToolId:o,size:r.size,modifiedAt:r.mtime.toISOString()}}))).map(e=>e.filename);return n.NextResponse.json(s,{status:200})}catch(e){return console.error("Error fetching log files:",e),n.NextResponse.json({error:"Failed to fetch log files"},{status:500})}}let g=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/logs/route",pathname:"/api/worktrees/[id]/logs",filename:"route",bundlePath:"app/api/worktrees/[id]/logs/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/logs/route.ts",nextConfigOutput:"",userland:a}),{requestAsyncStorage:w,staticGenerationAsyncStorage:h,serverHooks:y}=g,C="/api/worktrees/[id]/logs/route";function v(){return(0,s.patchFetch)({serverHooks:y,staticGenerationAsyncStorage:h})}},98636:(e,t,r)=>{r.d(t,{e7:()=>p,xN:()=>c});var a=r(20629),o=r.n(a),i=r(55315),s=r.n(i),n=r(73853);let u=(0,r(93346).Hb)("CM_LOG_DIR")||s().join(process.cwd(),"data","logs");function d(e="claude"){return s().join(u,e)}async function l(e="claude"){let t=d(e);try{await o().access(t)}catch{await o().mkdir(t,{recursive:!0})}}async function c(e,t,r,a="claude"){await l(a);let i=function(e,t="claude"){let r=(0,n.WU)(new Date,"yyyy-MM-dd"),a=`${e}-${r}.md`,o=d(t);return s().join(o,a)}(e,a),u=(0,n.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),c="";try{c=await o().readFile(i,"utf-8")}catch{let t="claude"===a?"Claude Code":"codex"===a?"Codex CLI":"Gemini CLI";c=`# ${t} Conversation Log: ${e}
2
2
 
3
- Created: ${d}
3
+ Created: ${u}
4
4
 
5
5
  ---
6
6
 
7
- `}return c+=`## Conversation at ${d}
7
+ `}return c+=`## Conversation at ${u}
8
8
 
9
9
  ### User
10
10
 
11
- ${r}
11
+ ${t}
12
12
 
13
- ### ${"claude"===o?"Claude":"codex"===o?"Codex":"Gemini"}
13
+ ### ${"claude"===a?"Claude":"codex"===a?"Codex":"Gemini"}
14
14
 
15
- ${t}
15
+ ${r}
16
16
 
17
17
  ---
18
18
 
19
- `,await a().writeFile(s,c,"utf-8"),s}async function _(e,r="all"){let t=[];for(let o of"all"===r?["claude","codex","gemini"]:[r]){await u(o);let r=l(o);try{let o=(await a().readdir(r)).filter(r=>r.startsWith(`${e}-`)&&r.endsWith(".md")).map(e=>n().join(r,e));t.push(...o)}catch{}}return t.sort().reverse()}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,3853,7425],()=>t(5517));module.exports=o})();
19
+ `,await o().writeFile(i,c,"utf-8"),i}async function p(e,t="all"){let r=[];for(let a of"all"===t?["claude","codex","gemini"]:[t]){await l(a);let t=d(a);try{let a=(await o().readdir(t)).filter(t=>t.startsWith(`${e}-`)&&t.endsWith(".md")).map(e=>s().join(t,e));r.push(...a)}catch{}}return r.sort().reverse()}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),a=t.X(0,[8948,5972,3853,7425],()=>r(5517));module.exports=a})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=3114,e.ids=[3114],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")},55315:e=>{e.exports=require("path")},78818:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>h,patchFetch:()=>I,requestAsyncStorage:()=>l,routeModule:()=>c,serverHooks:()=>f,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{DELETE:()=>p,PUT:()=>d});var s=t(49303),n=t(88716),a=t(60670),m=t(87070),u=t(97425),i=t(75748);async function d(e,{params:r}){try{let t=(0,u.n)();if(!(0,i.gU)(t,r.id))return m.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});if(!(0,i.ZI)(t,r.memoId))return m.NextResponse.json({error:`Memo '${r.memoId}' not found`},{status:404});let{title:o,content:s}=await e.json().catch(()=>({}));if(void 0!==o&&o.length>100)return m.NextResponse.json({error:"title must be 100 characters or less"},{status:400});if(void 0!==s&&s.length>1e4)return m.NextResponse.json({error:"content must be 10000 characters or less"},{status:400});(0,i.Nr)(t,r.memoId,{title:o,content:s});let n=(0,i.ZI)(t,r.memoId);return m.NextResponse.json({memo:n},{status:200})}catch(e){return console.error("Error updating memo:",e),m.NextResponse.json({error:"Failed to update memo"},{status:500})}}async function p(e,{params:r}){try{let e=(0,u.n)();if(!(0,i.gU)(e,r.id))return m.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});if(!(0,i.ZI)(e,r.memoId))return m.NextResponse.json({error:`Memo '${r.memoId}' not found`},{status:404});return(0,i._e)(e,r.memoId),m.NextResponse.json({success:!0},{status:200})}catch(e){return console.error("Error deleting memo:",e),m.NextResponse.json({error:"Failed to delete memo"},{status:500})}}let c=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/memos/[memoId]/route",pathname:"/api/worktrees/[id]/memos/[memoId]",filename:"route",bundlePath:"app/api/worktrees/[id]/memos/[memoId]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/memos/[memoId]/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:l,staticGenerationAsyncStorage:x,serverHooks:f}=c,h="/api/worktrees/[id]/memos/[memoId]/route";function I(){return(0,a.patchFetch)({serverHooks:f,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],()=>t(78818));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=3114,e.ids=[3114],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")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},78818:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>h,patchFetch:()=>I,requestAsyncStorage:()=>l,routeModule:()=>c,serverHooks:()=>f,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{DELETE:()=>p,PUT:()=>d});var s=t(49303),n=t(88716),u=t(60670),a=t(87070),m=t(97425),i=t(75748);async function d(e,{params:r}){try{let t=(0,m.n)();if(!(0,i.gU)(t,r.id))return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});if(!(0,i.ZI)(t,r.memoId))return a.NextResponse.json({error:`Memo '${r.memoId}' not found`},{status:404});let{title:o,content:s}=await e.json().catch(()=>({}));if(void 0!==o&&o.length>100)return a.NextResponse.json({error:"title must be 100 characters or less"},{status:400});if(void 0!==s&&s.length>1e4)return a.NextResponse.json({error:"content must be 10000 characters or less"},{status:400});(0,i.Nr)(t,r.memoId,{title:o,content:s});let n=(0,i.ZI)(t,r.memoId);return a.NextResponse.json({memo:n},{status:200})}catch(e){return console.error("Error updating memo:",e),a.NextResponse.json({error:"Failed to update memo"},{status:500})}}async function p(e,{params:r}){try{let e=(0,m.n)();if(!(0,i.gU)(e,r.id))return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});if(!(0,i.ZI)(e,r.memoId))return a.NextResponse.json({error:`Memo '${r.memoId}' not found`},{status:404});return(0,i._e)(e,r.memoId),a.NextResponse.json({success:!0},{status:200})}catch(e){return console.error("Error deleting memo:",e),a.NextResponse.json({error:"Failed to delete memo"},{status:500})}}let c=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/memos/[memoId]/route",pathname:"/api/worktrees/[id]/memos/[memoId]",filename:"route",bundlePath:"app/api/worktrees/[id]/memos/[memoId]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/memos/[memoId]/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:l,staticGenerationAsyncStorage:x,serverHooks:f}=c,h="/api/worktrees/[id]/memos/[memoId]/route";function I(){return(0,u.patchFetch)({serverHooks:f,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],()=>t(78818));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=9532,e.ids=[9532],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")},55315:e=>{e.exports=require("path")},86868:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>f,patchFetch:()=>g,requestAsyncStorage:()=>l,routeModule:()=>c,serverHooks:()=>h,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{GET:()=>d,POST:()=>m});var s=t(49303),n=t(88716),i=t(60670),a=t(87070),u=t(97425),p=t(75748);async function d(e,{params:r}){try{let e=(0,u.n)();if(!(0,p.gU)(e,r.id))return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let t=(0,p.Db)(e,r.id);return a.NextResponse.json({memos:t},{status:200})}catch(e){return console.error("Error fetching memos:",e),a.NextResponse.json({error:"Failed to fetch memos"},{status:500})}}async function m(e,{params:r}){try{let t;let o=(0,u.n)();if(!(0,p.gU)(o,r.id))return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let{title:s,content:n,position:i}=await e.json().catch(()=>({}));if(void 0!==s&&s.length>100)return a.NextResponse.json({error:"title must be 100 characters or less"},{status:400});if(void 0!==n&&n.length>1e4)return a.NextResponse.json({error:"content must be 10000 characters or less"},{status:400});let d=(0,p.Db)(o,r.id);if(d.length>=5)return a.NextResponse.json({error:"Maximum memo limit (5) reached"},{status:400});if(void 0!==i&&"number"==typeof i)t=i;else{let e=new Set(d.map(e=>e.position));for(t=0;e.has(t)&&t<5;)t++}let m=(0,p.dD)(o,r.id,{title:s,content:n,position:t});return a.NextResponse.json({memo:m},{status:201})}catch(e){return console.error("Error creating memo:",e),a.NextResponse.json({error:"Failed to create memo"},{status:500})}}let c=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/memos/route",pathname:"/api/worktrees/[id]/memos",filename:"route",bundlePath:"app/api/worktrees/[id]/memos/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/memos/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:l,staticGenerationAsyncStorage:x,serverHooks:h}=c,f="/api/worktrees/[id]/memos/route";function g(){return(0,i.patchFetch)({serverHooks:h,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],()=>t(86868));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=9532,e.ids=[9532],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")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},86868:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>f,patchFetch:()=>g,requestAsyncStorage:()=>l,routeModule:()=>c,serverHooks:()=>h,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{GET:()=>d,POST:()=>m});var s=t(49303),n=t(88716),i=t(60670),a=t(87070),u=t(97425),p=t(75748);async function d(e,{params:r}){try{let e=(0,u.n)();if(!(0,p.gU)(e,r.id))return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let t=(0,p.Db)(e,r.id);return a.NextResponse.json({memos:t},{status:200})}catch(e){return console.error("Error fetching memos:",e),a.NextResponse.json({error:"Failed to fetch memos"},{status:500})}}async function m(e,{params:r}){try{let t;let o=(0,u.n)();if(!(0,p.gU)(o,r.id))return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let{title:s,content:n,position:i}=await e.json().catch(()=>({}));if(void 0!==s&&s.length>100)return a.NextResponse.json({error:"title must be 100 characters or less"},{status:400});if(void 0!==n&&n.length>1e4)return a.NextResponse.json({error:"content must be 10000 characters or less"},{status:400});let d=(0,p.Db)(o,r.id);if(d.length>=5)return a.NextResponse.json({error:"Maximum memo limit (5) reached"},{status:400});if(void 0!==i&&"number"==typeof i)t=i;else{let e=new Set(d.map(e=>e.position));for(t=0;e.has(t)&&t<5;)t++}let m=(0,p.dD)(o,r.id,{title:s,content:n,position:t});return a.NextResponse.json({memo:m},{status:201})}catch(e){return console.error("Error creating memo:",e),a.NextResponse.json({error:"Failed to create memo"},{status:500})}}let c=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/worktrees/[id]/memos/route",pathname:"/api/worktrees/[id]/memos",filename:"route",bundlePath:"app/api/worktrees/[id]/memos/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/memos/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:l,staticGenerationAsyncStorage:x,serverHooks:h}=c,f="/api/worktrees/[id]/memos/route";function g(){return(0,i.patchFetch)({serverHooks:h,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],()=>t(86868));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=4552,e.ids=[4552],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")},55315:e=>{e.exports=require("path")},68360:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>f,requestAsyncStorage:()=>l,routeModule:()=>m,serverHooks:()=>g,staticGenerationAsyncStorage:()=>c});var s={};r.r(s),r.d(s,{GET:()=>d});var o=r(49303),i=r(88716),a=r(60670),n=r(87070),u=r(97425),p=r(75748);async function d(e,{params:t}){try{let r=(0,u.n)();if(!(0,p.gU)(r,t.id))return n.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let{searchParams:s}=new URL(e.url),o=s.get("before"),i=s.get("limit"),a=s.get("cliTool"),d=o?new Date(o):void 0,m=i?parseInt(i,10):50;if(a&&!["claude","codex","gemini"].includes(a))return n.NextResponse.json({error:"Invalid cliTool parameter (must be claude, codex, or gemini)"},{status:400});if(isNaN(m)||m<1||m>100)return n.NextResponse.json({error:"Invalid limit parameter (must be 1-100)"},{status:400});let l=[...(0,p._U)(r,t.id,d,m,a).filter(e=>e.content&&""!==e.content.trim())].sort((e,t)=>new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime());return n.NextResponse.json(l,{status:200})}catch(e){return console.error("Error fetching messages:",e),n.NextResponse.json({error:"Failed to fetch messages"},{status:500})}}let m=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/messages/route",pathname:"/api/worktrees/[id]/messages",filename:"route",bundlePath:"app/api/worktrees/[id]/messages/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/messages/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:l,staticGenerationAsyncStorage:c,serverHooks:g}=m,x="/api/worktrees/[id]/messages/route";function f(){return(0,a.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:c})}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[8948,5972,7425],()=>r(68360));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=4552,e.ids=[4552],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")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},68360:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>f,requestAsyncStorage:()=>l,routeModule:()=>m,serverHooks:()=>g,staticGenerationAsyncStorage:()=>c});var s={};r.r(s),r.d(s,{GET:()=>d});var o=r(49303),i=r(88716),a=r(60670),n=r(87070),u=r(97425),p=r(75748);async function d(e,{params:t}){try{let r=(0,u.n)();if(!(0,p.gU)(r,t.id))return n.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let{searchParams:s}=new URL(e.url),o=s.get("before"),i=s.get("limit"),a=s.get("cliTool"),d=o?new Date(o):void 0,m=i?parseInt(i,10):50;if(a&&!["claude","codex","gemini"].includes(a))return n.NextResponse.json({error:"Invalid cliTool parameter (must be claude, codex, or gemini)"},{status:400});if(isNaN(m)||m<1||m>100)return n.NextResponse.json({error:"Invalid limit parameter (must be 1-100)"},{status:400});let l=[...(0,p._U)(r,t.id,d,m,a).filter(e=>e.content&&""!==e.content.trim())].sort((e,t)=>new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime());return n.NextResponse.json(l,{status:200})}catch(e){return console.error("Error fetching messages:",e),n.NextResponse.json({error:"Failed to fetch messages"},{status:500})}}let m=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/messages/route",pathname:"/api/worktrees/[id]/messages",filename:"route",bundlePath:"app/api/worktrees/[id]/messages/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/messages/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:l,staticGenerationAsyncStorage:c,serverHooks:g}=m,x="/api/worktrees/[id]/messages/route";function f(){return(0,a.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:c})}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[8948,5972,7425],()=>r(68360));module.exports=s})();
@@ -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")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},45762:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>h,patchFetch:()=>f,requestAsyncStorage:()=>x,routeModule:()=>m,serverHooks:()=>g,staticGenerationAsyncStorage:()=>w});var s={};t.r(s),t.d(s,{POST:()=>l});var o=t(49303),n=t(88716),i=t(60670),a=t(87070),p=t(97425),u=t(75748),d=t(10927),c=t(97213);async function l(e,{params:r}){try{let{answer:t,cliTool:s}=await e.json();if(!t)return a.NextResponse.json({error:"answer is required"},{status:400});let o=(0,p.n)(),n=(0,u.gU)(o,r.id);if(!n)return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let i=s||n.cliToolId||"claude",l=c.g.getInstance().getTool(i);if(!await l.isRunning(r.id))return a.NextResponse.json({error:`${l.name} session is not running`},{status:400});let m=l.getSessionName(r.id);try{await (0,d.Is)(m,t,!1),await new Promise(e=>setTimeout(e,100)),await (0,d.Is)(m,"",!0)}catch(r){let e=r instanceof Error?r.message:"Unknown error";return a.NextResponse.json({error:`Failed to send answer to tmux: ${e}`},{status:500})}return a.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 a.NextResponse.json({error:e},{status:500})}}let m=new o.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:s}),{requestAsyncStorage:x,staticGenerationAsyncStorage:w,serverHooks:g}=m,h="/api/worktrees/[id]/prompt-response/route";function f(){return(0,i.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:w})}}};var r=require("../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[8948,5972,7425,7213],()=>t(45762));module.exports=s})();
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")},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")},45762:(e,t,s)=>{s.r(t),s.d(t,{originalPathname:()=>x,patchFetch:()=>y,requestAsyncStorage:()=>w,routeModule:()=>p,serverHooks:()=>h,staticGenerationAsyncStorage:()=>g});var o={};s.r(o),s.d(o,{POST:()=>u});var r=s(49303),i=s(88716),n=s(60670),a=s(87070),l=s(97425),c=s(75748),d=s(10927),m=s(97213);async function u(e,{params:t}){try{let{answer:s,cliTool:o}=await e.json();if(!s)return a.NextResponse.json({error:"answer is required"},{status:400});let r=(0,l.n)(),i=(0,c.gU)(r,t.id);if(!i)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let n=o||i.cliToolId||"claude",u=m.g.getInstance().getTool(n);if(!await u.isRunning(t.id))return a.NextResponse.json({error:`${u.name} session is not running`},{status:400});let p=u.getSessionName(t.id);try{await (0,d.Is)(p,s,!1),await new Promise(e=>setTimeout(e,100)),await (0,d.Is)(p,"",!0)}catch(t){let e=t instanceof Error?t.message:"Unknown error";return a.NextResponse.json({error:`Failed to send answer to tmux: ${e}`},{status:500})}return a.NextResponse.json({success:!0,answer:s})}catch(t){console.error("Failed to respond to prompt:",t);let e=t instanceof Error?t.message:"Internal server error";return a.NextResponse.json({error:e},{status:500})}}let p=new r.AppRouteRouteModule({definition:{kind:i.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:g,serverHooks:h}=p,x="/api/worktrees/[id]/prompt-response/route";function y(){return(0,n.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:g})}},97213:(e,t,s)=>{s.d(t,{g:()=>w});var o=s(61282),r=s(21764),i=s(10927);let n=(0,r.promisify)(o.exec);class a{async isInstalled(){try{return await n(`which ${this.command}`,{timeout:5e3}),!0}catch{return!1}}getSessionName(e){return`mcbd-${this.id}-${e}`}async interrupt(e){let t=this.getSessionName(e);await (0,i.ZV)(t,"Escape")}}var l=s(62648);class c extends a{async isInstalled(){return await (0,l.Uv)()}async isRunning(e){return await (0,l.YI)(e)}async startSession(e,t){await (0,l.ym)({worktreeId:e,worktreePath:t})}async sendMessage(e,t){await (0,l.xd)(e,t)}async killSession(e){await (0,l._f)(e)}constructor(...e){super(...e),this.id="claude",this.name="Claude Code",this.command="claude"}}let d=(0,r.promisify)(o.exec);class m extends a{async isRunning(e){let t=this.getSessionName(e);return await (0,i.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Codex CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,i.Hk)(s)){console.log(`Codex session ${s} already exists`);return}try{await (0,i.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),await new Promise(e=>setTimeout(e,100)),await (0,i.Is)(s,"codex",!0),await new Promise(e=>setTimeout(e,3e3)),await (0,i.Is)(s,"2",!0),await new Promise(e=>setTimeout(e,500)),console.log(`✓ Started Codex session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Codex session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,i.Hk)(s))throw Error(`Codex session ${s} does not exist. Start the session first.`);try{await (0,i.Is)(s,t,!1),await new Promise(e=>setTimeout(e,100)),await d(`tmux send-keys -t "${s}" C-m`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Sent message to Codex session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Codex: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,i.Hk)(t)&&(await d(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,i.AJ)(t)&&console.log(`✓ Stopped Codex session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`Error stopping Codex session: ${e}`),t}}constructor(...e){super(...e),this.id="codex",this.name="Codex CLI",this.command="codex"}}let u=(0,r.promisify)(o.exec);class p extends a{async isRunning(e){let t=this.getSessionName(e);return await (0,i.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Gemini CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,i.Hk)(s)){console.log(`Gemini session ${s} already exists`);return}try{await (0,i.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),console.log(`✓ Started Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Gemini session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,i.Hk)(s))throw Error(`Gemini session ${s} does not exist. Start the session first.`);try{let e=t.replace(/'/g,"'\\''");await (0,i.Is)(s,`echo '${e}' | gemini`,!0),console.log(`✓ Sent message to Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Gemini: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,i.Hk)(t)&&(await u(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,i.AJ)(t)&&console.log(`✓ Stopped Gemini session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`Error stopping Gemini session: ${e}`),t}}constructor(...e){super(...e),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}class w{constructor(){this.tools=new Map,this.tools.set("claude",new c),this.tools.set("codex",new m),this.tools.set("gemini",new p)}static getInstance(){return w.instance||(w.instance=new w),w.instance}getTool(e){let t=this.tools.get(e);if(!t)throw Error(`CLI tool '${e}' not found`);return t}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(e){let t=this.getTool(e),s=await t.isInstalled();return{id:t.id,name:t.name,command:t.command,installed:s}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async e=>{let t=await e.isInstalled();return{id:e.id,name:e.name,command:e.command,installed:t}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(e=>e.installed)}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),o=t.X(0,[8948,5972,7425,2648],()=>s(45762));module.exports=o})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../../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/5972.js","../../../../../chunks/7213.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../../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/2648.js","../../../../../chunks/5972.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../webpack-runtime.js"]}
@@ -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")},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(97213),m=t(59991),c=t(63661),x=t(25079);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.n)(),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,7213,1528,9723],()=>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(97213),m=t(59991),c=t(63661),x=t(25079);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.n)(),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,2648,2597,9723],()=>t(1464));module.exports=s})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../../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/1528.js","../../../../../chunks/3853.js","../../../../../chunks/4893.js","../../../../../chunks/5972.js","../../../../../chunks/7213.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../chunks/9723.js","../../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../../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/2597.js","../../../../../chunks/2648.js","../../../../../chunks/3853.js","../../../../../chunks/4893.js","../../../../../chunks/5972.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../chunks/9723.js","../../../../../webpack-runtime.js"]}
@@ -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")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},46769:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>y,patchFetch:()=>R,requestAsyncStorage:()=>x,routeModule:()=>h,serverHooks:()=>v,staticGenerationAsyncStorage:()=>k});var o={};r.r(o),r.d(o,{GET:()=>f,PATCH:()=>w});var i=r(49303),n=r(88716),s=r(60670),a=r(87070),u=r(97425),d=r(75748),l=r(97213),c=r(89194),p=r(19377),g=r(63661),m=r(3979);async function f(e,{params:t}){try{let e;let r=(0,u.n)(),o=(0,d.gU)(r,t.id);if(!o)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let i=l.g.getInstance(),n={},s=!1,f=!1,w=!1;for(let e of["claude","codex","gemini"]){let o=i.getTool(e),a=await o.isRunning(t.id),u=!1,l=!1;if(a)try{let o=await (0,c.NA)(t.id,e,100),i=(0,p.vp)(o),n=(0,g.F)(i);if(n.isPrompt)u=!0;else{let t=i.split("\n").filter(e=>""!==e.trim()).slice(-15).join("\n");(0,p.Wg)(e,t)?l=!0:/^[>❯]\s*$/m.test(t)||(l=!0)}!n.isPrompt&&(0,d._U)(r,t.id,void 0,10,e).some(e=>"prompt"===e.messageType&&e.promptData?.status!=="answered")&&(0,d.GP)(r,t.id,e)}catch{l=!0}n[e]={isRunning:a,isWaitingForResponse:u,isProcessing:l},a&&(s=!0),u&&(f=!0),l&&(w=!0)}try{let i=(0,d.Q7)(r,t.id);e=await (0,m.v)(o.path,i)}catch(e){console.error("[GET /api/worktrees/:id] Failed to get git status:",e)}return a.NextResponse.json({...o,gitStatus:e,isSessionRunning:s,isWaitingForResponse:f,isProcessing:w,sessionStatusByCli:n},{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{let r=(0,u.n)();if(!(0,d.gU)(r,t.id))return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let o=await e.json();"description"in o&&(0,d.xr)(r,t.id,o.description),"link"in o&&(0,d.y)(r,t.id,o.link),"favorite"in o&&"boolean"==typeof o.favorite&&(0,d.R3)(r,t.id,o.favorite),"status"in o&&["todo","doing","done",null].includes(o.status)&&(0,d.Nf)(r,t.id,o.status),"cliToolId"in o&&["claude","codex","gemini"].includes(o.cliToolId)&&(0,d.VW)(r,t.id,o.cliToolId);let i=(0,d.gU)(r,t.id),n=l.g.getInstance(),s=i?.cliToolId||"claude",c=n.getTool(s),p=await c.isRunning(t.id);return a.NextResponse.json({...i,isSessionRunning:p},{status:200})}catch(e){return console.error("Error updating worktree:",e),a.NextResponse.json({error:"Failed to update worktree"},{status:500})}}let h=new i.AppRouteRouteModule({definition:{kind:n.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:x,staticGenerationAsyncStorage:k,serverHooks:v}=h,y="/api/worktrees/[id]/route";function R(){return(0,s.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:k})}},3979:(e,t,r)=>{r.d(t,{v:()=>s});var o=r(61282);let i=(0,r(21764).promisify)(o.execFile);async function n(e,t){try{let{stdout:r}=await i("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 n(["rev-parse","--abbrev-ref","HEAD"],e);r=null===o?"(unknown)":"HEAD"===o?"(detached HEAD)":o;let i=await n(["rev-parse","--short","HEAD"],e),s=await n(["status","--porcelain"],e);return{currentBranch:r,initialBranch:t,isBranchMismatch:null!==t&&"(unknown)"!==r&&"(detached HEAD)"!==r&&r!==t,commitHash:i??"(unknown)",isDirty:null!==s&&s.length>0}}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[8948,5972,7425,7213,1528],()=>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")},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")},46769:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>y,patchFetch:()=>R,requestAsyncStorage:()=>x,routeModule:()=>h,serverHooks:()=>v,staticGenerationAsyncStorage:()=>k});var o={};r.r(o),r.d(o,{GET:()=>f,PATCH:()=>w});var i=r(49303),n=r(88716),s=r(60670),a=r(87070),u=r(97425),d=r(75748),l=r(97213),c=r(89194),p=r(19377),g=r(63661),m=r(3979);async function f(e,{params:t}){try{let e;let r=(0,u.n)(),o=(0,d.gU)(r,t.id);if(!o)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let i=l.g.getInstance(),n={},s=!1,f=!1,w=!1;for(let e of["claude","codex","gemini"]){let o=i.getTool(e),a=await o.isRunning(t.id),u=!1,l=!1;if(a)try{let o=await (0,c.NA)(t.id,e,100),i=(0,p.vp)(o),n=(0,g.F)(i);if(n.isPrompt)u=!0;else{let t=i.split("\n").filter(e=>""!==e.trim()).slice(-15).join("\n");(0,p.Wg)(e,t)?l=!0:/^[>❯](\s*$|\s+\S)/m.test(t)||(l=!0)}!n.isPrompt&&(0,d._U)(r,t.id,void 0,10,e).some(e=>"prompt"===e.messageType&&e.promptData?.status!=="answered")&&(0,d.GP)(r,t.id,e)}catch{l=!0}n[e]={isRunning:a,isWaitingForResponse:u,isProcessing:l},a&&(s=!0),u&&(f=!0),l&&(w=!0)}try{let i=(0,d.Q7)(r,t.id);e=await (0,m.v)(o.path,i)}catch(e){console.error("[GET /api/worktrees/:id] Failed to get git status:",e)}return a.NextResponse.json({...o,gitStatus:e,isSessionRunning:s,isWaitingForResponse:f,isProcessing:w,sessionStatusByCli:n},{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{let r=(0,u.n)();if(!(0,d.gU)(r,t.id))return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let o=await e.json();"description"in o&&(0,d.xr)(r,t.id,o.description),"link"in o&&(0,d.y)(r,t.id,o.link),"favorite"in o&&"boolean"==typeof o.favorite&&(0,d.R3)(r,t.id,o.favorite),"status"in o&&["todo","doing","done",null].includes(o.status)&&(0,d.Nf)(r,t.id,o.status),"cliToolId"in o&&["claude","codex","gemini"].includes(o.cliToolId)&&(0,d.VW)(r,t.id,o.cliToolId);let i=(0,d.gU)(r,t.id),n=l.g.getInstance(),s=i?.cliToolId||"claude",c=n.getTool(s),p=await c.isRunning(t.id);return a.NextResponse.json({...i,isSessionRunning:p},{status:200})}catch(e){return console.error("Error updating worktree:",e),a.NextResponse.json({error:"Failed to update worktree"},{status:500})}}let h=new i.AppRouteRouteModule({definition:{kind:n.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:x,staticGenerationAsyncStorage:k,serverHooks:v}=h,y="/api/worktrees/[id]/route";function R(){return(0,s.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:k})}},3979:(e,t,r)=>{r.d(t,{v:()=>s});var o=r(61282);let i=(0,r(21764).promisify)(o.execFile);async function n(e,t){try{let{stdout:r}=await i("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 n(["rev-parse","--abbrev-ref","HEAD"],e);r=null===o?"(unknown)":"HEAD"===o?"(detached HEAD)":o;let i=await n(["rev-parse","--short","HEAD"],e),s=await n(["status","--porcelain"],e);return{currentBranch:r,initialBranch:t,isBranchMismatch:null!==t&&"(unknown)"!==r&&"(detached HEAD)"!==r&&r!==t,commitHash:i??"(unknown)",isDirty:null!==s&&s.length>0}}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[8948,5972,7425,2648,2597],()=>r(46769));module.exports=o})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../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/1528.js","../../../../chunks/5972.js","../../../../chunks/7213.js","../../../../chunks/7425.js","../../../../chunks/8948.js","../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../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/2597.js","../../../../chunks/2648.js","../../../../chunks/5972.js","../../../../chunks/7425.js","../../../../chunks/8948.js","../../../../webpack-runtime.js"]}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=7601,e.ids=[7601],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")},55315:e=>{e.exports=require("path")},19496:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>A,patchFetch:()=>O,requestAsyncStorage:()=>C,routeModule:()=>D,serverHooks:()=>R,staticGenerationAsyncStorage:()=>v});var n={};r.r(n),r.d(n,{GET:()=>M});var o=r(49303),s=r(88716),i=r(60670),a=r(87070),c=r(97425),u=r(75748),l=r(20629),d=r(55315),f=r(57440),p=r(18163);let m=[...r(81481).P7,".exe",".dll",".so",".dylib",".bin",".zip",".tar",".gz",".tar.gz",".tgz",".rar",".7z",".bz2",".xz",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".woff",".woff2",".ttf",".otf",".eot",".mp3",".mp4",".avi",".mov",".mkv",".wav",".flac",".ogg",".sqlite",".db",".o",".obj",".a",".lib",".class",".jar",".war",".pyc",".pyo",".wasm"];function h(e){return!!e&&0!==e.trim().length&&!(e.length>1e3)}async function g(e,t,r){let{query:n,maxResults:o=100,maxFileSize:s=p.bB.MAX_FILE_SIZE_PREVIEW,maxDepth:i=p.bB.MAX_DEPTH}=t;if(!h(n))return{results:[],totalMatches:0,truncated:!1};let a={results:[],totalMatches:0,truncated:!1,startTime:Date.now()},c={basePath:e,lowerQuery:n.toLowerCase(),maxDepth:i,maxResults:o,maxFileSize:s,signal:r};return await _(e,0,c,a),{results:a.results,totalMatches:a.totalMatches,truncated:a.truncated}}async function _(e,t,r,n){let o;let{basePath:s,maxDepth:i,maxResults:a,signal:c}=r;if(c?.aborted)throw new DOMException("Search aborted","AbortError");if(!(t>i)){if(n.results.length>=a){n.truncated=!0;return}if((0,f.j)(e,s)){try{o=await (0,l.readdir)(e)}catch{return}for(let i of o){if(c?.aborted)throw new DOMException("Search aborted","AbortError");if(n.results.length>=a){n.truncated=!0;return}if((0,p.bS)(i))continue;let o=(0,d.join)(e,i);if((0,f.j)(o,s))try{let e=await (0,l.lstat)(o);if(e.isSymbolicLink())continue;e.isDirectory()?await _(o,t+1,r,n):e.isFile()&&await w(o,i,e.size,r,n)}catch{continue}}}}}async function w(e,t,r,n,o){let s,i;let{basePath:a,lowerQuery:c,maxFileSize:u}=n;if(!(r>u||function(e){if(!e)return!1;let t=e.startsWith(".")?e.toLowerCase():"."+e.toLowerCase();return m.includes(t)}((0,d.extname)(t)))){try{s=await (0,l.readFile)(e)}catch{return}if(!s.includes(0)){try{i=s.toString("utf-8")}catch{return}if(i.toLowerCase().includes(c)){let r=function(e,t){let r=e.split("\n"),n=t.toLowerCase(),o=[];for(let e=0;e<r.length;e++){let t=r[e];t.toLowerCase().includes(n)&&o.push({line:e+1,content:function(e,t=500){return e.length<=t?e:e.slice(0,t)+"..."}(t)})}return o}(i,c);if(r.length>0){let n=(0,d.relative)(a,e);o.results.push({filePath:n,fileName:(0,d.basename)(t),matches:r}),o.totalMatches+=r.length}}}}}class x extends Error{constructor(e="Search timed out"){super(e),this.name="SearchTimeoutError"}}async function y(e,t){let r=t.timeoutMs??5e3,n=new AbortController,o=setTimeout(()=>n.abort(),r),s=Date.now();try{let r=await g(e,t,n.signal),o=Date.now()-s;return{...r,executionTimeMs:o}}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)throw new x(`Search timed out after ${r}ms`);throw e}finally{clearTimeout(o)}}var E=r(43895);let T=(0,E.h)("api-search");async function M(e,{params:t}){let r=Date.now(),n=(0,E.Y)(),o=t.id,s=T.withContext({worktreeId:o,requestId:n});try{let t=e.nextUrl.searchParams,r=t.get("q")||"",n=t.get("mode")||"content";if("content"!==n)return s.warn("search:invalid-mode",{mode:n}),a.NextResponse.json({success:!1,error:{code:"INVALID_MODE",message:"Only mode=content is supported for API search"}},{status:400});if(!h(r))return s.warn("search:invalid-query",{queryLength:r.length}),a.NextResponse.json({success:!1,error:{code:"INVALID_QUERY",message:"Query cannot be empty or exceed 1000 characters"}},{status:400});let i=(0,c.n)(),l=(0,u.gU)(i,o);if(!l){let e=(0,p.dq)(o);return s.warn("search:worktree-not-found"),a.NextResponse.json({success:!1,error:{code:"WORKTREE_NOT_FOUND",message:e.error}},{status:e.status})}let d=await y(l.path,{query:r,maxResults:100,timeoutMs:5e3});return s.info("search:complete",{queryHash:Buffer.from(r).toString("base64").slice(0,8),executionTimeMs:d.executionTimeMs,resultCount:d.results.length,totalMatches:d.totalMatches,truncated:d.truncated}),a.NextResponse.json({success:!0,results:d.results,totalMatches:d.totalMatches,truncated:d.truncated,executionTimeMs:d.executionTimeMs})}catch(t){if(t instanceof x){let e=Date.now()-r;return s.warn("search:timeout",{executionTimeMs:e}),a.NextResponse.json({success:!1,error:{code:"SEARCH_TIMEOUT",message:"Search timed out. Try a more specific query."}},{status:408})}let e=Date.now()-r;return s.error("search:error",{error:t instanceof Error?t.message:"Unknown error",executionTimeMs:e}),a.NextResponse.json({success:!1,error:{code:"INTERNAL_ERROR",message:"An error occurred while searching"}},{status:500})}}let D=new o.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/worktrees/[id]/search/route",pathname:"/api/worktrees/[id]/search",filename:"route",bundlePath:"app/api/worktrees/[id]/search/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/search/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:C,staticGenerationAsyncStorage:v,serverHooks:R}=D,A="/api/worktrees/[id]/search/route";function O(){return(0,i.patchFetch)({serverHooks:R,staticGenerationAsyncStorage:v})}},81481:(e,t,r)=>{r.d(t,{Db:()=>a,Kc:()=>i,P7:()=>n,gp:()=>c});let n=[".png",".jpg",".jpeg",".gif",".webp",".svg"],o=[{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 s(e){return e?e.startsWith(".")?e.toLowerCase():"."+e.toLowerCase():""}function i(e){let t=s(e),r=o.find(e=>e.extension===t);return r?.mimeType||"application/octet-stream"}function a(e){if(!e)return!1;let t=s(e);return n.includes(t)}function c(e,t){if(t.length>5242880)return{valid:!1,error:"File size exceeds 5MB limit"};if(".svg"===s(e)){var r;return(r=t.toString("utf-8")).includes("<svg")||r.startsWith("<?xml")?/<script[\s>]/i.test(r)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(r)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(r)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(r)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(e,t){let r=s(e),n=o.find(e=>e.extension===r);if(!n?.magicBytes)return".svg"===r;let i=n.magicBytesOffset||0;return!(t.length<i+n.magicBytes.length)&&n.magicBytes.every((e,r)=>t[i+r]===e)}(e,t)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}},37848:(e,t,r)=>{r.d(t,{Hb:()=>a,LI:()=>c,dU:()=>u});var n=r(55315),o=r.n(n);let s={CM_ROOT_DIR:"MCBD_ROOT_DIR",CM_PORT:"MCBD_PORT",CM_BIND:"MCBD_BIND",CM_AUTH_TOKEN:"MCBD_AUTH_TOKEN",CM_LOG_LEVEL:"MCBD_LOG_LEVEL",CM_LOG_FORMAT:"MCBD_LOG_FORMAT",CM_LOG_DIR:"MCBD_LOG_DIR",CM_DB_PATH:"MCBD_DB_PATH"},i=new Set;function a(e){return function(e,t){let r=process.env[e];if(void 0!==r)return r;let n=process.env[t];if(void 0!==n)return i.has(t)||(console.warn(`[DEPRECATED] ${t} is deprecated, use ${e} instead`),i.add(t)),n}(e,s[e])}function c(){let e=a("CM_LOG_LEVEL")?.toLowerCase(),t=a("CM_LOG_FORMAT")?.toLowerCase();return{level:void 0!==e&&["debug","info","warn","error"].includes(e)?e:"info",format:"json"===t?"json":"text"}}function u(){let e=a("CM_ROOT_DIR")||process.cwd(),t=parseInt(a("CM_PORT")||"3000",10),r=a("CM_BIND")||"127.0.0.1",n=a("CM_AUTH_TOKEN"),s=a("CM_DB_PATH")||process.env.DATABASE_PATH||o().join(process.cwd(),"data","cm.db");if(!e)throw Error("CM_ROOT_DIR (or MCBD_ROOT_DIR) is required");if(isNaN(t)||t<1||t>65535)throw Error(`Invalid CM_PORT: ${a("CM_PORT")}. Must be between 1 and 65535.`);if("127.0.0.1"!==r&&"0.0.0.0"!==r&&"localhost"!==r)throw Error(`Invalid CM_BIND: ${r}. Must be '127.0.0.1', '0.0.0.0', or 'localhost'.`);if("0.0.0.0"===r&&!n)throw Error("CM_AUTH_TOKEN (or MCBD_AUTH_TOKEN) is required when CM_BIND=0.0.0.0");return{CM_ROOT_DIR:o().resolve(e),CM_PORT:t,CM_BIND:r,CM_AUTH_TOKEN:n,CM_DB_PATH:o().resolve(s)}}},18163:(e,t,r)=>{r.d(t,{GT:()=>l,Lu:()=>u,W:()=>f,bB:()=>i,bS:()=>a,dq:()=>d});var n=r(20629),o=r(55315);let s=[".git",".env",".env.*","node_modules",".DS_Store","Thumbs.db","*.pem","*.key",".env.local",".env.development",".env.production",".env.test"],i={MAX_ITEMS_PER_DIR:500,MAX_DEPTH:10,MAX_FILE_SIZE_PREVIEW:1048576};function a(e){for(let t of s){if(t===e)return!0;if(t.startsWith("*.")){let r=t.slice(1);if(e.endsWith(r))return!0}if(t.endsWith(".*")){let r=t.slice(0,-2);if(e.startsWith(r+"."))return!0}}return!1}async function c(e){try{return(await (0,n.readdir)(e)).filter(e=>!a(e)).length}catch{return 0}}async function u(e,t=""){let r;let s=t?(0,o.join)(e,t):e;try{r=await (0,n.stat)(s)}catch{throw Error(`Directory not found: ${t||"(root)"}`)}if(!r.isDirectory())throw Error(`Path is not a directory: ${t}`);let u=await (0,n.readdir)(s),l=[];for(let e of u){if(a(e))continue;let t=(0,o.join)(s,e);try{let r=await (0,n.lstat)(t);if(r.isSymbolicLink())continue;if(r.isDirectory()){let r=await c(t);l.push({name:e,type:"directory",itemCount:r})}else if(r.isFile()){let t=(0,o.extname)(e),n={name:e,type:"file",size:r.size};t&&t.length>1&&(n.extension=t.slice(1)),l.push(n)}}catch{continue}if(l.length>=i.MAX_ITEMS_PER_DIR)break}let d=[...l].sort((e,t)=>e.type!==t.type?"directory"===e.type?-1:1:e.name.toLowerCase().localeCompare(t.name.toLowerCase())),f=null;if(t){let e=(0,o.dirname)(t);f="."===e?"":e}return{path:t,name:t?(0,o.basename)(t):"",items:d,parentPath:f}}function l(e){let t=e instanceof Error?e.message:"Unknown error";return t.includes("not found")?{error:"Directory not found",status:404}:t.includes("not a directory")?{error:"Path is not a directory",status:400}:{error:"Failed to read directory",status:500}}function d(e){return{error:`Worktree '${e}' not found`,status:404}}function f(e="Invalid path"){return{error:`Access denied: ${e}`,status:403}}},43895:(e,t,r)=>{r.d(t,{Y:()=>c,h:()=>u});var n=r(37848);let o=[{pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [REDACTED]"},{pattern:/(password|passwd|pwd)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/(token|secret|api_key|apikey|auth)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/CM_AUTH_TOKEN=\S+/gi,replacement:"CM_AUTH_TOKEN=[REDACTED]"},{pattern:/MCBD_AUTH_TOKEN=\S+/gi,replacement:"MCBD_AUTH_TOKEN=[REDACTED]"},{pattern:/Authorization:\s*\S+/gi,replacement:"Authorization: [REDACTED]"},{pattern:/-----BEGIN\s+\w+\s+PRIVATE\s+KEY-----[\s\S]*?-----END\s+\w+\s+PRIVATE\s+KEY-----/g,replacement:"[SSH_KEY_REDACTED]"}],s=/password|secret|token|key|auth/i,i={debug:0,info:1,warn:2,error:3};function a(e,t,r,a,c){let u=(0,n.LI)().level;if(i[e]<i[u])return;let l=a?function e(t){if("string"==typeof t){let e=t;for(let{pattern:t,replacement:r}of o)e=e.replace(t,r);return e}if("object"==typeof t&&null!==t){if(Array.isArray(t))return t.map(e);let r={};for(let[n,o]of Object.entries(t))s.test(n)?r[n]="[REDACTED]":r[n]=e(o);return r}return t}(a):void 0,d=function(e){if("json"===(0,n.LI)().format)return JSON.stringify(e);let{timestamp:t,level:r,module:o,action:s,data:i,worktreeId:a,cliToolId:c,requestId:u}=e,l=[a,c].filter(Boolean),d=l.length>0?` [${l.join(":")}]`:"",f=u?` (${u.slice(0,8)})`:"",p=i?` ${JSON.stringify(i)}`:"";return`[${t}] [${r.toUpperCase()}] [${o}]${d}${f} ${s}${p}`}({level:e,module:t,action:r,timestamp:new Date().toISOString(),...c,...l&&{data:l}});switch(e){case"error":console.error(d);break;case"warn":console.warn(d);break;default:console.log(d)}}function c(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function u(e){let t=r=>({debug:(t,n)=>a("debug",e,t,n,r),info:(t,n)=>a("info",e,t,n,r),warn:(t,n)=>a("warn",e,t,n,r),error:(t,n)=>a("error",e,t,n,r),withContext:e=>t({...r,...e})});return t()}},57440:(e,t,r)=>{r.d(t,{j:()=>s});var n=r(55315),o=r.n(n);function s(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 n=o().resolve(t),s=o().resolve(t,r),i=o().relative(n,s);return!(i.startsWith("..")||o().isAbsolute(i))}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[8948,5972,7425],()=>r(19496));module.exports=n})();
1
+ "use strict";(()=>{var e={};e.id=7601,e.ids=[7601],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")},19496:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>R,patchFetch:()=>_,requestAsyncStorage:()=>A,routeModule:()=>D,serverHooks:()=>M,staticGenerationAsyncStorage:()=>S});var n={};r.r(n),r.d(n,{GET:()=>T});var o=r(49303),s=r(88716),i=r(60670),a=r(87070),c=r(97425),u=r(75748),l=r(20629),d=r(55315),f=r(57440),p=r(18163);let m=[...r(81481).P7,".exe",".dll",".so",".dylib",".bin",".zip",".tar",".gz",".tar.gz",".tgz",".rar",".7z",".bz2",".xz",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".woff",".woff2",".ttf",".otf",".eot",".mp3",".mp4",".avi",".mov",".mkv",".wav",".flac",".ogg",".sqlite",".db",".o",".obj",".a",".lib",".class",".jar",".war",".pyc",".pyo",".wasm"];function h(e){return!!e&&0!==e.trim().length&&!(e.length>1e3)}async function g(e,t,r){let{query:n,maxResults:o=100,maxFileSize:s=p.bB.MAX_FILE_SIZE_PREVIEW,maxDepth:i=p.bB.MAX_DEPTH}=t;if(!h(n))return{results:[],totalMatches:0,truncated:!1};let a={results:[],totalMatches:0,truncated:!1,startTime:Date.now()},c={basePath:e,lowerQuery:n.toLowerCase(),maxDepth:i,maxResults:o,maxFileSize:s,signal:r};return await x(e,0,c,a),{results:a.results,totalMatches:a.totalMatches,truncated:a.truncated}}async function x(e,t,r,n){let o;let{basePath:s,maxDepth:i,maxResults:a,signal:c}=r;if(c?.aborted)throw new DOMException("Search aborted","AbortError");if(!(t>i)){if(n.results.length>=a){n.truncated=!0;return}if((0,f.j)(e,s)){try{o=await (0,l.readdir)(e)}catch{return}for(let i of o){if(c?.aborted)throw new DOMException("Search aborted","AbortError");if(n.results.length>=a){n.truncated=!0;return}if((0,p.bS)(i))continue;let o=(0,d.join)(e,i);if((0,f.j)(o,s))try{let e=await (0,l.lstat)(o);if(e.isSymbolicLink())continue;e.isDirectory()?await x(o,t+1,r,n):e.isFile()&&await y(o,i,e.size,r,n)}catch{continue}}}}}async function y(e,t,r,n,o){let s,i;let{basePath:a,lowerQuery:c,maxFileSize:u}=n;if(!(r>u||function(e){if(!e)return!1;let t=e.startsWith(".")?e.toLowerCase():"."+e.toLowerCase();return m.includes(t)}((0,d.extname)(t)))){try{s=await (0,l.readFile)(e)}catch{return}if(!s.includes(0)){try{i=s.toString("utf-8")}catch{return}if(i.toLowerCase().includes(c)){let r=function(e,t){let r=e.split("\n"),n=t.toLowerCase(),o=[];for(let e=0;e<r.length;e++){let t=r[e];t.toLowerCase().includes(n)&&o.push({line:e+1,content:function(e,t=500){return e.length<=t?e:e.slice(0,t)+"..."}(t)})}return o}(i,c);if(r.length>0){let n=(0,d.relative)(a,e);o.results.push({filePath:n,fileName:(0,d.basename)(t),matches:r}),o.totalMatches+=r.length}}}}}class w extends Error{constructor(e="Search timed out"){super(e),this.name="SearchTimeoutError"}}async function E(e,t){let r=t.timeoutMs??5e3,n=new AbortController,o=setTimeout(()=>n.abort(),r),s=Date.now();try{let r=await g(e,t,n.signal),o=Date.now()-s;return{...r,executionTimeMs:o}}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)throw new w(`Search timed out after ${r}ms`);throw e}finally{clearTimeout(o)}}var v=r(43895);let b=(0,v.h)("api-search");async function T(e,{params:t}){let r=Date.now(),n=(0,v.Y)(),o=t.id,s=b.withContext({worktreeId:o,requestId:n});try{let t=e.nextUrl.searchParams,r=t.get("q")||"",n=t.get("mode")||"content";if("content"!==n)return s.warn("search:invalid-mode",{mode:n}),a.NextResponse.json({success:!1,error:{code:"INVALID_MODE",message:"Only mode=content is supported for API search"}},{status:400});if(!h(r))return s.warn("search:invalid-query",{queryLength:r.length}),a.NextResponse.json({success:!1,error:{code:"INVALID_QUERY",message:"Query cannot be empty or exceed 1000 characters"}},{status:400});let i=(0,c.n)(),l=(0,u.gU)(i,o);if(!l){let e=(0,p.dq)(o);return s.warn("search:worktree-not-found"),a.NextResponse.json({success:!1,error:{code:"WORKTREE_NOT_FOUND",message:e.error}},{status:e.status})}let d=await E(l.path,{query:r,maxResults:100,timeoutMs:5e3});return s.info("search:complete",{queryHash:Buffer.from(r).toString("base64").slice(0,8),executionTimeMs:d.executionTimeMs,resultCount:d.results.length,totalMatches:d.totalMatches,truncated:d.truncated}),a.NextResponse.json({success:!0,results:d.results,totalMatches:d.totalMatches,truncated:d.truncated,executionTimeMs:d.executionTimeMs})}catch(t){if(t instanceof w){let e=Date.now()-r;return s.warn("search:timeout",{executionTimeMs:e}),a.NextResponse.json({success:!1,error:{code:"SEARCH_TIMEOUT",message:"Search timed out. Try a more specific query."}},{status:408})}let e=Date.now()-r;return s.error("search:error",{error:t instanceof Error?t.message:"Unknown error",executionTimeMs:e}),a.NextResponse.json({success:!1,error:{code:"INTERNAL_ERROR",message:"An error occurred while searching"}},{status:500})}}let D=new o.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/worktrees/[id]/search/route",pathname:"/api/worktrees/[id]/search",filename:"route",bundlePath:"app/api/worktrees/[id]/search/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/search/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:A,staticGenerationAsyncStorage:S,serverHooks:M}=D,R="/api/worktrees/[id]/search/route";function _(){return(0,i.patchFetch)({serverHooks:M,staticGenerationAsyncStorage:S})}},81481:(e,t,r)=>{r.d(t,{Db:()=>a,Kc:()=>i,P7:()=>n,gp:()=>c});let n=[".png",".jpg",".jpeg",".gif",".webp",".svg"],o=[{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 s(e){return e?e.startsWith(".")?e.toLowerCase():"."+e.toLowerCase():""}function i(e){let t=s(e),r=o.find(e=>e.extension===t);return r?.mimeType||"application/octet-stream"}function a(e){if(!e)return!1;let t=s(e);return n.includes(t)}function c(e,t){if(t.length>5242880)return{valid:!1,error:"File size exceeds 5MB limit"};if(".svg"===s(e)){var r;return(r=t.toString("utf-8")).includes("<svg")||r.startsWith("<?xml")?/<script[\s>]/i.test(r)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(r)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(r)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(r)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(e,t){let r=s(e),n=o.find(e=>e.extension===r);if(!n?.magicBytes)return".svg"===r;let i=n.magicBytesOffset||0;return!(t.length<i+n.magicBytes.length)&&n.magicBytes.every((e,r)=>t[i+r]===e)}(e,t)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}},18163:(e,t,r)=>{r.d(t,{GT:()=>l,Lu:()=>u,W:()=>f,bB:()=>i,bS:()=>a,dq:()=>d});var n=r(20629),o=r(55315);let s=[".git",".env",".env.*","node_modules",".DS_Store","Thumbs.db","*.pem","*.key",".env.local",".env.development",".env.production",".env.test"],i={MAX_ITEMS_PER_DIR:500,MAX_DEPTH:10,MAX_FILE_SIZE_PREVIEW:1048576};function a(e){for(let t of s){if(t===e)return!0;if(t.startsWith("*.")){let r=t.slice(1);if(e.endsWith(r))return!0}if(t.endsWith(".*")){let r=t.slice(0,-2);if(e.startsWith(r+"."))return!0}}return!1}async function c(e){try{return(await (0,n.readdir)(e)).filter(e=>!a(e)).length}catch{return 0}}async function u(e,t=""){let r;let s=t?(0,o.join)(e,t):e;try{r=await (0,n.stat)(s)}catch{throw Error(`Directory not found: ${t||"(root)"}`)}if(!r.isDirectory())throw Error(`Path is not a directory: ${t}`);let u=await (0,n.readdir)(s),l=[];for(let e of u){if(a(e))continue;let t=(0,o.join)(s,e);try{let r=await (0,n.lstat)(t);if(r.isSymbolicLink())continue;if(r.isDirectory()){let r=await c(t);l.push({name:e,type:"directory",itemCount:r})}else if(r.isFile()){let t=(0,o.extname)(e),n={name:e,type:"file",size:r.size};t&&t.length>1&&(n.extension=t.slice(1)),l.push(n)}}catch{continue}if(l.length>=i.MAX_ITEMS_PER_DIR)break}let d=[...l].sort((e,t)=>e.type!==t.type?"directory"===e.type?-1:1:e.name.toLowerCase().localeCompare(t.name.toLowerCase())),f=null;if(t){let e=(0,o.dirname)(t);f="."===e?"":e}return{path:t,name:t?(0,o.basename)(t):"",items:d,parentPath:f}}function l(e){let t=e instanceof Error?e.message:"Unknown error";return t.includes("not found")?{error:"Directory not found",status:404}:t.includes("not a directory")?{error:"Path is not a directory",status:400}:{error:"Failed to read directory",status:500}}function d(e){return{error:`Worktree '${e}' not found`,status:404}}function f(e="Invalid path"){return{error:`Access denied: ${e}`,status:403}}},43895:(e,t,r)=>{r.d(t,{Y:()=>c,h:()=>u});var n=r(93346);let o=[{pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [REDACTED]"},{pattern:/(password|passwd|pwd)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/(token|secret|api_key|apikey|auth)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/CM_AUTH_TOKEN=\S+/gi,replacement:"CM_AUTH_TOKEN=[REDACTED]"},{pattern:/MCBD_AUTH_TOKEN=\S+/gi,replacement:"MCBD_AUTH_TOKEN=[REDACTED]"},{pattern:/Authorization:\s*\S+/gi,replacement:"Authorization: [REDACTED]"},{pattern:/-----BEGIN\s+\w+\s+PRIVATE\s+KEY-----[\s\S]*?-----END\s+\w+\s+PRIVATE\s+KEY-----/g,replacement:"[SSH_KEY_REDACTED]"}],s=/password|secret|token|key|auth/i,i={debug:0,info:1,warn:2,error:3};function a(e,t,r,a,c){let u=(0,n.LI)().level;if(i[e]<i[u])return;let l=a?function e(t){if("string"==typeof t){let e=t;for(let{pattern:t,replacement:r}of o)e=e.replace(t,r);return e}if("object"==typeof t&&null!==t){if(Array.isArray(t))return t.map(e);let r={};for(let[n,o]of Object.entries(t))s.test(n)?r[n]="[REDACTED]":r[n]=e(o);return r}return t}(a):void 0,d=function(e){if("json"===(0,n.LI)().format)return JSON.stringify(e);let{timestamp:t,level:r,module:o,action:s,data:i,worktreeId:a,cliToolId:c,requestId:u}=e,l=[a,c].filter(Boolean),d=l.length>0?` [${l.join(":")}]`:"",f=u?` (${u.slice(0,8)})`:"",p=i?` ${JSON.stringify(i)}`:"";return`[${t}] [${r.toUpperCase()}] [${o}]${d}${f} ${s}${p}`}({level:e,module:t,action:r,timestamp:new Date().toISOString(),...c,...l&&{data:l}});switch(e){case"error":console.error(d);break;case"warn":console.warn(d);break;default:console.log(d)}}function c(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function u(e){let t=r=>({debug:(t,n)=>a("debug",e,t,n,r),info:(t,n)=>a("info",e,t,n,r),warn:(t,n)=>a("warn",e,t,n,r),error:(t,n)=>a("error",e,t,n,r),withContext:e=>t({...r,...e})});return t()}},57440:(e,t,r)=>{r.d(t,{j:()=>s});var n=r(55315),o=r.n(n);function s(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 n=o().resolve(t),s=o().resolve(t,r),i=o().relative(n,s);return!(i.startsWith("..")||o().isAbsolute(i))}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[8948,5972,7425],()=>r(19496));module.exports=n})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=2702,e.ids=[2702],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")},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")},41306:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>A,patchFetch:()=>b,requestAsyncStorage:()=>y,routeModule:()=>q,serverHooks:()=>k,staticGenerationAsyncStorage:()=>R});var s={};r.r(s),r.d(s,{POST:()=>$});var n=r(49303),o=r(88716),i=r(60670),a=r(87070),l=r(97425),u=r(75748),c=r(97213),d=r(59991),p=r(89194),m=r(25079),g=r(19377);let f=[/^[╭╮╰╯│─\s]+$/,/Claude Code v[\d.]+/,/^─{10,}$/,/^❯\s*$/,/^\s*$/,/CLAUDE_HOOKS_/,/\/bin\/claude/,/@.*\s+%/,/localhost/,/:3000/,/curl.*POST/,/export\s+/,/Tips for getting started/,/Welcome back/,/\?\s*for shortcuts/];async function h(e,t,r,s){try{let n;let o=(0,u.zl)(e,t,r),i=o?.lastCapturedLine||0;try{n=await (0,p.NA)(t,r,1e4)}catch{return console.log(`[savePendingAssistantResponse] Failed to capture session output for ${t}`),null}if(!n)return null;let a=n.split("\n"),l=a.length,{bufferReset:c,reason:h}=l>0&&i>25&&l+25<i?{bufferReset:!0,reason:"shrink"}:l>0&&i>50&&l<50?{bufferReset:!0,reason:"restart"}:{bufferReset:!1,reason:null};if(c&&console.log(`[savePendingAssistantResponse] Buffer reset detected (${h}): current=${l}, last=${i}`),!c&&l<=i)return console.log(`[savePendingAssistantResponse] No new output (current: ${l}, last: ${i})`),null;let x=a.slice(c?0:i).join("\n"),w="claude"===r?function(e,t){if(!e||""===e.trim())return"";if("claude"!==t)return e.trim();let r=(0,g.vp)(e).split("\n"),s=r.length;for(let e=r.length-1;e>=0;e--)if(/^❯\s+\S/.test(r[e])){s=e;break}return r.slice(0,s).filter(e=>{let t=e.trim();return!!t&&!f.some(e=>e.test(t))}).join("\n").trim()}(x,r):function(e,t){switch(t){case"claude":return(0,d.ci)(e);case"gemini":return(0,d.RJ)(e);default:return e.trim()}}(x,r);if(!w||""===w.trim())return(0,u.IH)(e,t,r,l),console.log(`[savePendingAssistantResponse] Cleaned response is empty, updating position to ${l}`),null;let v=new Date(s.getTime()-1),$=(0,u.tn)(e,{worktreeId:t,role:"assistant",content:w,messageType:"normal",timestamp:v,cliToolId:r});return(0,u.IH)(e,t,r,l),(0,m.ps)("message",{worktreeId:t,message:$}),console.log(`[savePendingAssistantResponse] Saved assistant response (lines ${i}-${l})`),$}catch(e){return console.error("[savePendingAssistantResponse] Error:",e),null}}var x=r(3979);let w=["claude","codex","gemini"];function v(e){return e instanceof Error?e.message:"Unknown error"}async function $(e,{params:t}){try{let r=(0,l.n)(),s=(0,u.gU)(r,t.id);if(!s)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let n=await e.json();if(!n.content||"string"!=typeof n.content||""===n.content.trim())return a.NextResponse.json({error:"Message content is required and must be a non-empty string"},{status:400});let o=n.cliToolId||s.cliToolId||"claude";if(!w.includes(o))return a.NextResponse.json({error:`Invalid CLI tool ID: ${o}. Must be one of: ${w.join(", ")}`},{status:400});let i=c.g.getInstance().getTool(o);if(!await i.isInstalled())return a.NextResponse.json({error:`${i.name} is not installed. Please install it first.`},{status:503});if(!await i.isRunning(t.id))try{await i.startSession(t.id,s.path);let e=(0,u.Q7)(r,t.id);if(null===e)try{let e=await (0,x.v)(s.path,null);"(unknown)"!==e.currentBranch&&"(detached HEAD)"!==e.currentBranch&&((0,u.Ek)(r,t.id,e.currentBranch),console.log(`[send] Saved initial branch for ${t.id}: ${e.currentBranch}`))}catch(e){console.error("[send] Failed to get/save initial branch:",e)}}catch(e){return console.error(`Failed to start ${i.name} session:`,e),a.NextResponse.json({error:`Failed to start ${i.name} session: ${v(e)}`},{status:500})}let p=new Date;try{await h(r,t.id,o,p)}catch(e){console.error("[send] Failed to save pending assistant response:",e)}try{await i.sendMessage(t.id,n.content)}catch(e){return console.error(`Failed to send message to ${i.name}:`,e),a.NextResponse.json({error:`Failed to send message to ${i.name}: ${v(e)}`},{status:500})}let m=(0,u.tn)(r,{worktreeId:t.id,role:"user",content:n.content,messageType:"normal",timestamp:p,cliToolId:o});return(0,u.OK)(r,t.id,n.content,p),(0,u.Mf)(r,t.id,o),console.log(`✓ Cleared in-progress message for ${t.id} (${o})`),(0,d.cn)(t.id,o),a.NextResponse.json(m,{status:201})}catch(e){return console.error("Error sending message:",e),a.NextResponse.json({error:"Failed to send message"},{status:500})}}let q=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/send/route",pathname:"/api/worktrees/[id]/send",filename:"route",bundlePath:"app/api/worktrees/[id]/send/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/send/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:y,staticGenerationAsyncStorage:R,serverHooks:k}=q,A="/api/worktrees/[id]/send/route";function b(){return(0,i.patchFetch)({serverHooks:k,staticGenerationAsyncStorage:R})}},3979:(e,t,r)=>{r.d(t,{v:()=>i});var s=r(61282);let n=(0,r(21764).promisify)(s.execFile);async function o(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 i(e,t){let r;let s=await o(["rev-parse","--abbrev-ref","HEAD"],e);r=null===s?"(unknown)":"HEAD"===s?"(detached HEAD)":s;let n=await o(["rev-parse","--short","HEAD"],e),i=await o(["status","--porcelain"],e);return{currentBranch:r,initialBranch:t,isBranchMismatch:null!==t&&"(unknown)"!==r&&"(detached HEAD)"!==r&&r!==t,commitHash:n??"(unknown)",isDirty:null!==i&&i.length>0}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[8948,5972,3853,4893,7425,7213,1528,9723],()=>r(41306));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=2702,e.ids=[2702],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")},41306:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>A,patchFetch:()=>b,requestAsyncStorage:()=>y,routeModule:()=>q,serverHooks:()=>k,staticGenerationAsyncStorage:()=>R});var s={};r.r(s),r.d(s,{POST:()=>$});var n=r(49303),o=r(88716),i=r(60670),a=r(87070),l=r(97425),u=r(75748),c=r(97213),d=r(59991),p=r(89194),m=r(25079),g=r(19377);let f=[/^[╭╮╰╯│─\s]+$/,/Claude Code v[\d.]+/,/^─{10,}$/,/^❯\s*$/,/^\s*$/,/CLAUDE_HOOKS_/,/\/bin\/claude/,/@.*\s+%/,/localhost/,/:3000/,/curl.*POST/,/export\s+/,/Tips for getting started/,/Welcome back/,/\?\s*for shortcuts/];async function h(e,t,r,s){try{let n;let o=(0,u.zl)(e,t,r),i=o?.lastCapturedLine||0;try{n=await (0,p.NA)(t,r,1e4)}catch{return console.log(`[savePendingAssistantResponse] Failed to capture session output for ${t}`),null}if(!n)return null;let a=n.split("\n"),l=a.length,{bufferReset:c,reason:h}=l>0&&i>25&&l+25<i?{bufferReset:!0,reason:"shrink"}:l>0&&i>50&&l<50?{bufferReset:!0,reason:"restart"}:{bufferReset:!1,reason:null};if(c&&console.log(`[savePendingAssistantResponse] Buffer reset detected (${h}): current=${l}, last=${i}`),!c&&l<=i)return console.log(`[savePendingAssistantResponse] No new output (current: ${l}, last: ${i})`),null;let x=a.slice(c?0:i).join("\n"),w="claude"===r?function(e,t){if(!e||""===e.trim())return"";if("claude"!==t)return e.trim();let r=(0,g.vp)(e).split("\n"),s=r.length;for(let e=r.length-1;e>=0;e--)if(/^❯\s+\S/.test(r[e])){s=e;break}return r.slice(0,s).filter(e=>{let t=e.trim();return!!t&&!f.some(e=>e.test(t))}).join("\n").trim()}(x,r):function(e,t){switch(t){case"claude":return(0,d.ci)(e);case"gemini":return(0,d.RJ)(e);default:return e.trim()}}(x,r);if(!w||""===w.trim())return(0,u.IH)(e,t,r,l),console.log(`[savePendingAssistantResponse] Cleaned response is empty, updating position to ${l}`),null;let v=new Date(s.getTime()-1),$=(0,u.tn)(e,{worktreeId:t,role:"assistant",content:w,messageType:"normal",timestamp:v,cliToolId:r});return(0,u.IH)(e,t,r,l),(0,m.ps)("message",{worktreeId:t,message:$}),console.log(`[savePendingAssistantResponse] Saved assistant response (lines ${i}-${l})`),$}catch(e){return console.error("[savePendingAssistantResponse] Error:",e),null}}var x=r(3979);let w=["claude","codex","gemini"];function v(e){return e instanceof Error?e.message:"Unknown error"}async function $(e,{params:t}){try{let r=(0,l.n)(),s=(0,u.gU)(r,t.id);if(!s)return a.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let n=await e.json();if(!n.content||"string"!=typeof n.content||""===n.content.trim())return a.NextResponse.json({error:"Message content is required and must be a non-empty string"},{status:400});let o=n.cliToolId||s.cliToolId||"claude";if(!w.includes(o))return a.NextResponse.json({error:`Invalid CLI tool ID: ${o}. Must be one of: ${w.join(", ")}`},{status:400});let i=c.g.getInstance().getTool(o);if(!await i.isInstalled())return a.NextResponse.json({error:`${i.name} is not installed. Please install it first.`},{status:503});if(!await i.isRunning(t.id))try{await i.startSession(t.id,s.path);let e=(0,u.Q7)(r,t.id);if(null===e)try{let e=await (0,x.v)(s.path,null);"(unknown)"!==e.currentBranch&&"(detached HEAD)"!==e.currentBranch&&((0,u.Ek)(r,t.id,e.currentBranch),console.log(`[send] Saved initial branch for ${t.id}: ${e.currentBranch}`))}catch(e){console.error("[send] Failed to get/save initial branch:",e)}}catch(e){return console.error(`Failed to start ${i.name} session:`,e),a.NextResponse.json({error:`Failed to start ${i.name} session: ${v(e)}`},{status:500})}let p=new Date;try{await h(r,t.id,o,p)}catch(e){console.error("[send] Failed to save pending assistant response:",e)}try{await i.sendMessage(t.id,n.content)}catch(e){return console.error(`Failed to send message to ${i.name}:`,e),a.NextResponse.json({error:`Failed to send message to ${i.name}: ${v(e)}`},{status:500})}let m=(0,u.tn)(r,{worktreeId:t.id,role:"user",content:n.content,messageType:"normal",timestamp:p,cliToolId:o});return(0,u.OK)(r,t.id,n.content,p),(0,u.Mf)(r,t.id,o),console.log(`✓ Cleared in-progress message for ${t.id} (${o})`),(0,d.cn)(t.id,o),a.NextResponse.json(m,{status:201})}catch(e){return console.error("Error sending message:",e),a.NextResponse.json({error:"Failed to send message"},{status:500})}}let q=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/send/route",pathname:"/api/worktrees/[id]/send",filename:"route",bundlePath:"app/api/worktrees/[id]/send/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/send/route.ts",nextConfigOutput:"",userland:s}),{requestAsyncStorage:y,staticGenerationAsyncStorage:R,serverHooks:k}=q,A="/api/worktrees/[id]/send/route";function b(){return(0,i.patchFetch)({serverHooks:k,staticGenerationAsyncStorage:R})}},3979:(e,t,r)=>{r.d(t,{v:()=>i});var s=r(61282);let n=(0,r(21764).promisify)(s.execFile);async function o(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 i(e,t){let r;let s=await o(["rev-parse","--abbrev-ref","HEAD"],e);r=null===s?"(unknown)":"HEAD"===s?"(detached HEAD)":s;let n=await o(["rev-parse","--short","HEAD"],e),i=await o(["status","--porcelain"],e);return{currentBranch:r,initialBranch:t,isBranchMismatch:null!==t&&"(unknown)"!==r&&"(detached HEAD)"!==r&&r!==t,commitHash:n??"(unknown)",isDirty:null!==i&&i.length>0}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[8948,5972,3853,4893,7425,2648,2597,9723],()=>r(41306));module.exports=s})();
@@ -1 +1 @@
1
- {"version":1,"files":["../../../../../../../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/1528.js","../../../../../chunks/3853.js","../../../../../chunks/4893.js","../../../../../chunks/5972.js","../../../../../chunks/7213.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../chunks/9723.js","../../../../../webpack-runtime.js"]}
1
+ {"version":1,"files":["../../../../../../../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/2597.js","../../../../../chunks/2648.js","../../../../../chunks/3853.js","../../../../../chunks/4893.js","../../../../../chunks/5972.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../chunks/9723.js","../../../../../webpack-runtime.js"]}