commandmate 0.1.9 → 0.1.11

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 (140) hide show
  1. package/.env.example +8 -3
  2. package/.next/BUILD_ID +1 -1
  3. package/.next/app-build-manifest.json +11 -11
  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 +1 -1
  26. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  27. package/.next/server/app/api/repositories/clone/route.js +1 -1
  28. package/.next/server/app/api/repositories/route.js +1 -1
  29. package/.next/server/app/api/repositories/scan/route.js +1 -1
  30. package/.next/server/app/api/repositories/sync/route.js +1 -1
  31. package/.next/server/app/api/slash-commands.body +1 -1
  32. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  33. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  34. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  35. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  36. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  37. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  38. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  39. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  40. package/.next/server/app/api/worktrees/[id]/logs/route.js +7 -7
  41. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  42. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  43. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  44. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  45. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  46. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  47. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  48. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  49. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  50. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  51. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  52. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  53. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  54. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  55. package/.next/server/app/api/worktrees/route.js +1 -1
  56. package/.next/server/app/index.html +2 -2
  57. package/.next/server/app/index.rsc +2 -2
  58. package/.next/server/app/page.js +1 -1
  59. package/.next/server/app/page_client-reference-manifest.js +1 -1
  60. package/.next/server/app/proxy/[...path]/route.js +12 -13
  61. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/worktrees/[id]/page.js +5 -5
  63. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/worktrees/[id]/simple-terminal/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app-paths-manifest.json +10 -10
  67. package/.next/server/chunks/1318.js +4 -4
  68. package/.next/server/chunks/1528.js +1 -1
  69. package/.next/server/chunks/7425.js +162 -46
  70. package/.next/server/chunks/9723.js +1 -1
  71. package/.next/server/middleware-manifest.json +5 -5
  72. package/.next/server/pages/404.html +1 -1
  73. package/.next/server/pages/500.html +1 -1
  74. package/.next/server/server-reference-manifest.json +1 -1
  75. package/.next/server/src/middleware.js +2 -2
  76. package/.next/server/src/middleware.js.map +1 -1
  77. package/.next/static/chunks/app/{page-9cd00de9cc0abc43.js → page-fe35d61f14b90a51.js} +1 -1
  78. package/.next/static/chunks/app/worktrees/[id]/page-720605c2fb074444.js +1 -0
  79. package/.next/static/css/{e174aa24f94ce607.css → 376b339640084689.css} +1 -1
  80. package/.next/trace +5 -5
  81. package/dist/cli/commands/init.d.ts.map +1 -1
  82. package/dist/cli/commands/init.js +6 -4
  83. package/dist/cli/commands/start.d.ts +2 -0
  84. package/dist/cli/commands/start.d.ts.map +1 -1
  85. package/dist/cli/commands/start.js +64 -17
  86. package/dist/cli/commands/status.d.ts +4 -1
  87. package/dist/cli/commands/status.d.ts.map +1 -1
  88. package/dist/cli/commands/status.js +95 -6
  89. package/dist/cli/commands/stop.d.ts +2 -0
  90. package/dist/cli/commands/stop.d.ts.map +1 -1
  91. package/dist/cli/commands/stop.js +27 -10
  92. package/dist/cli/index.js +16 -2
  93. package/dist/cli/types/index.d.ts +20 -0
  94. package/dist/cli/types/index.d.ts.map +1 -1
  95. package/dist/cli/utils/daemon-factory.d.ts +105 -0
  96. package/dist/cli/utils/daemon-factory.d.ts.map +1 -0
  97. package/dist/cli/utils/daemon-factory.js +117 -0
  98. package/dist/cli/utils/daemon.d.ts.map +1 -1
  99. package/dist/cli/utils/daemon.js +4 -0
  100. package/dist/cli/utils/env-setup.d.ts +24 -12
  101. package/dist/cli/utils/env-setup.d.ts.map +1 -1
  102. package/dist/cli/utils/env-setup.js +64 -43
  103. package/dist/cli/utils/input-validators.d.ts +103 -0
  104. package/dist/cli/utils/input-validators.d.ts.map +1 -0
  105. package/dist/cli/utils/input-validators.js +163 -0
  106. package/dist/cli/utils/install-context.d.ts +53 -0
  107. package/dist/cli/utils/install-context.d.ts.map +1 -0
  108. package/dist/cli/utils/install-context.js +96 -0
  109. package/dist/cli/utils/pid-manager.d.ts +34 -0
  110. package/dist/cli/utils/pid-manager.d.ts.map +1 -1
  111. package/dist/cli/utils/pid-manager.js +43 -0
  112. package/dist/cli/utils/port-allocator.d.ts +108 -0
  113. package/dist/cli/utils/port-allocator.d.ts.map +1 -0
  114. package/dist/cli/utils/port-allocator.js +166 -0
  115. package/dist/cli/utils/resource-resolvers.d.ts +92 -0
  116. package/dist/cli/utils/resource-resolvers.d.ts.map +1 -0
  117. package/dist/cli/utils/resource-resolvers.js +175 -0
  118. package/dist/cli/utils/worktree-detector.d.ts +82 -0
  119. package/dist/cli/utils/worktree-detector.d.ts.map +1 -0
  120. package/dist/cli/utils/worktree-detector.js +221 -0
  121. package/dist/lib/errors.d.ts +111 -0
  122. package/dist/lib/errors.d.ts.map +1 -0
  123. package/dist/lib/errors.js +153 -0
  124. package/dist/server/server.js +3 -0
  125. package/dist/server/src/cli/utils/install-context.js +96 -0
  126. package/dist/server/src/config/system-directories.js +40 -0
  127. package/dist/server/src/lib/auto-yes-manager.js +325 -0
  128. package/dist/server/src/lib/auto-yes-resolver.js +34 -0
  129. package/dist/server/src/lib/cli-patterns.js +6 -1
  130. package/dist/server/src/lib/db-instance.js +12 -2
  131. package/dist/server/src/lib/db-migrations.js +143 -1
  132. package/dist/server/src/lib/db-path-resolver.js +99 -0
  133. package/dist/server/src/lib/db.js +63 -0
  134. package/dist/server/src/lib/env.js +52 -3
  135. package/dist/server/src/lib/worktrees.js +36 -1
  136. package/dist/server/src/types/external-apps.js +20 -0
  137. package/package.json +1 -1
  138. package/.next/static/chunks/app/worktrees/[id]/page-8c6676303b63fdaf.js +0 -1
  139. /package/.next/static/{ntEU_tKhyyZ-FVJS5Em3L → gRNW5YXY43KqCKbCdaJoJ}/_buildManifest.js +0 -0
  140. /package/.next/static/{ntEU_tKhyyZ-FVJS5Em3L → gRNW5YXY43KqCKbCdaJoJ}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var e={};e.id=3494,e.ids=[3494],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")},51495:(e,t,a)=>{a.r(t),a.d(t,{originalPathname:()=>E,patchFetch:()=>P,requestAsyncStorage:()=>x,routeModule:()=>b,serverHooks:()=>w,staticGenerationAsyncStorage:()=>y});var r={};a.r(r),a.d(r,{GET:()=>m,POST:()=>g,dynamic:()=>_});var s=a(49303),n=a(88716),p=a(60670),o=a(87070),i=a(97425),d=a(51172),l=a(73068);let c={MIN:1024,MAX:65535},h=["localhost","127.0.0.1"],u=/^[a-zA-Z0-9-]+$/,f=["sveltekit","streamlit","nextjs","other"],_="force-dynamic";async function m(){try{let e=(0,i.n)(),t=(0,d.ke)(e);return o.NextResponse.json({apps:t},{status:200})}catch(e){return console.error("Error fetching external apps:",e),o.NextResponse.json({error:"Failed to fetch external apps"},{status:500})}}async function g(e){try{let t=(0,i.n)(),a=await e.json(),r=function(e){var t,a,r,s;let n=[];return e&&"object"==typeof e?(((e.name&&"string"==typeof e.name||n.push({field:"name",message:"name is required and must be a string"}),e.displayName&&"string"==typeof e.displayName||n.push({field:"displayName",message:"displayName is required and must be a string"}),e.pathPrefix&&"string"==typeof e.pathPrefix)?"string"==typeof(t=e.pathPrefix)&&t.length>0&&u.test(t)||n.push({field:"pathPrefix",message:"pathPrefix must contain only alphanumeric characters and hyphens"}):n.push({field:"pathPrefix",message:"pathPrefix is required and must be a string"}),void 0===e.targetPort||"number"!=typeof e.targetPort?n.push({field:"targetPort",message:"targetPort is required and must be a number"}):(s=e.targetPort,Number.isInteger(s)&&s>=c.MIN&&s<=c.MAX||n.push({field:"targetPort",message:`targetPort must be between ${c.MIN} and ${c.MAX}`})),e.appType&&"string"==typeof e.appType)?(a=e.appType,f.includes(a)||n.push({field:"appType",message:`appType must be one of: ${f.join(", ")}`})):n.push({field:"appType",message:"appType is required and must be a string"}),void 0===e.targetHost||"string"!=typeof e.targetHost||(r=e.targetHost,h.includes(r)||n.push({field:"targetHost",message:`targetHost must be one of: ${h.join(", ")}`})),n):(n.push({field:"body",message:"Request body is required"}),n)}(a);if(r.length>0)return o.NextResponse.json({error:r.map(e=>`${e.field}: ${e.message}`).join("; "),validationErrors:r},{status:400});let s={name:a.name,displayName:a.displayName,description:a.description,pathPrefix:a.pathPrefix,targetPort:a.targetPort,targetHost:a.targetHost||"localhost",appType:a.appType,websocketEnabled:a.websocketEnabled||!1,websocketPathPattern:a.websocketPathPattern};try{if((0,d.F1)(t,s.pathPrefix))return o.NextResponse.json({error:`An app with pathPrefix "${s.pathPrefix}" already exists`},{status:409});let e=(0,d.j6)(t,s);try{(0,l.V_)(t).invalidate()}catch{}return o.NextResponse.json({app:e},{status:201})}catch(e){if(e instanceof Error&&e.message.includes("UNIQUE constraint"))return o.NextResponse.json({error:`An app with name "${s.name}" or pathPrefix "${s.pathPrefix}" already exists`},{status:409});throw e}}catch(e){return console.error("Error creating external app:",e),o.NextResponse.json({error:"Failed to create external app"},{status:500})}}let b=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/external-apps/route",pathname:"/api/external-apps",filename:"route",bundlePath:"app/api/external-apps/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/external-apps/route.ts",nextConfigOutput:"",userland:r}),{requestAsyncStorage:x,staticGenerationAsyncStorage:y,serverHooks:w}=b,E="/api/external-apps/route";function P(){return(0,p.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:y})}},73068:(e,t,a)=>{a.d(t,{V_:()=>p});var r=a(51172);class s{constructor(e,t=3e4){this.cache=new Map,this.allAppsCache=null,this.lastRefresh=0,this.db=e,this.ttl=t}getTTL(){return this.ttl}isStale(){return Date.now()-this.lastRefresh>this.ttl}async refresh(){let e=(0,r.J6)(this.db);for(let t of(this.cache.clear(),e))this.cache.set(t.pathPrefix,t);this.allAppsCache=e,this.lastRefresh=Date.now()}async getByPathPrefix(e){return this.isStale()&&await this.refresh(),this.cache.get(e)??null}async getAll(){return this.isStale()&&await this.refresh(),this.allAppsCache??[]}invalidate(){this.cache.clear(),this.allAppsCache=null,this.lastRefresh=0}}let n=null;function p(e){if(!n){if(!e)throw Error("Database instance required to initialize cache");n=new s(e)}return n}},51172:(e,t,a)=>{a.d(t,{F1:()=>i,J6:()=>l,JF:()=>o,j6:()=>p,ke:()=>d,uz:()=>c,vV:()=>h});var r=a(84770);class s extends Error{constructor(e,t,a){super(e),this.code=t,this.cause=a,this.name="ExternalAppDbError"}}function n(e){return{id:e.id,name:e.name,displayName:e.display_name,description:e.description??void 0,pathPrefix:e.path_prefix,targetPort:e.target_port,targetHost:e.target_host,appType:e.app_type,websocketEnabled:1===e.websocket_enabled,websocketPathPattern:e.websocket_path_pattern??void 0,enabled:1===e.enabled,createdAt:e.created_at,updatedAt:e.updated_at}}function p(e,t){let a=(0,r.randomUUID)(),n=Date.now(),p={name:t.name,display_name:t.displayName,description:t.description??null,path_prefix:t.pathPrefix,target_port:t.targetPort,target_host:t.targetHost??"localhost",app_type:t.appType,websocket_enabled:t.websocketEnabled?1:0,websocket_path_pattern:t.websocketPathPattern??null};try{return e.prepare(`
1
+ "use strict";(()=>{var e={};e.id=3494,e.ids=[3494],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")},51495:(e,t,a)=>{a.r(t),a.d(t,{originalPathname:()=>E,patchFetch:()=>P,requestAsyncStorage:()=>x,routeModule:()=>b,serverHooks:()=>w,staticGenerationAsyncStorage:()=>y});var r={};a.r(r),a.d(r,{GET:()=>m,POST:()=>g,dynamic:()=>_});var s=a(49303),n=a(88716),p=a(60670),o=a(87070),i=a(97425),l=a(51172),d=a(73068);let c={MIN:1024,MAX:65535},h=["localhost","127.0.0.1"],u=/^[a-zA-Z0-9-]+$/,f=["sveltekit","streamlit","nextjs","other"],_="force-dynamic";async function m(){try{let e=(0,i.n)(),t=(0,l.ke)(e);return o.NextResponse.json({apps:t},{status:200})}catch(e){return console.error("Error fetching external apps:",e),o.NextResponse.json({error:"Failed to fetch external apps"},{status:500})}}async function g(e){try{let t=(0,i.n)(),a=await e.json(),r=function(e){var t,a,r,s;let n=[];return e&&"object"==typeof e?(((e.name&&"string"==typeof e.name||n.push({field:"name",message:"name is required and must be a string"}),e.displayName&&"string"==typeof e.displayName||n.push({field:"displayName",message:"displayName is required and must be a string"}),e.pathPrefix&&"string"==typeof e.pathPrefix)?"string"==typeof(t=e.pathPrefix)&&t.length>0&&u.test(t)||n.push({field:"pathPrefix",message:"pathPrefix must contain only alphanumeric characters and hyphens"}):n.push({field:"pathPrefix",message:"pathPrefix is required and must be a string"}),void 0===e.targetPort||"number"!=typeof e.targetPort?n.push({field:"targetPort",message:"targetPort is required and must be a number"}):(s=e.targetPort,Number.isInteger(s)&&s>=c.MIN&&s<=c.MAX||n.push({field:"targetPort",message:`targetPort must be between ${c.MIN} and ${c.MAX}`})),e.appType&&"string"==typeof e.appType)?(a=e.appType,f.includes(a)||n.push({field:"appType",message:`appType must be one of: ${f.join(", ")}`})):n.push({field:"appType",message:"appType is required and must be a string"}),void 0===e.targetHost||"string"!=typeof e.targetHost||(r=e.targetHost,h.includes(r)||n.push({field:"targetHost",message:`targetHost must be one of: ${h.join(", ")}`})),n):(n.push({field:"body",message:"Request body is required"}),n)}(a);if(r.length>0)return o.NextResponse.json({error:r.map(e=>`${e.field}: ${e.message}`).join("; "),validationErrors:r},{status:400});let s={name:a.name,displayName:a.displayName,description:a.description,pathPrefix:a.pathPrefix,targetPort:a.targetPort,targetHost:a.targetHost||"localhost",appType:a.appType,websocketEnabled:a.websocketEnabled||!1,websocketPathPattern:a.websocketPathPattern};try{if((0,l.F1)(t,s.pathPrefix))return o.NextResponse.json({error:`An app with pathPrefix "${s.pathPrefix}" already exists`},{status:409});let e=(0,l.j6)(t,s);try{(0,d.V_)(t).invalidate()}catch{}return o.NextResponse.json({app:e},{status:201})}catch(e){if(e instanceof Error&&e.message.includes("UNIQUE constraint"))return o.NextResponse.json({error:`An app with name "${s.name}" or pathPrefix "${s.pathPrefix}" already exists`},{status:409});throw e}}catch(e){return console.error("Error creating external app:",e),o.NextResponse.json({error:"Failed to create external app"},{status:500})}}let b=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/external-apps/route",pathname:"/api/external-apps",filename:"route",bundlePath:"app/api/external-apps/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/external-apps/route.ts",nextConfigOutput:"",userland:r}),{requestAsyncStorage:x,staticGenerationAsyncStorage:y,serverHooks:w}=b,E="/api/external-apps/route";function P(){return(0,p.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:y})}},73068:(e,t,a)=>{a.d(t,{V_:()=>p});var r=a(51172);class s{constructor(e,t=3e4){this.cache=new Map,this.allAppsCache=null,this.lastRefresh=0,this.db=e,this.ttl=t}getTTL(){return this.ttl}isStale(){return Date.now()-this.lastRefresh>this.ttl}async refresh(){let e=(0,r.J6)(this.db);for(let t of(this.cache.clear(),e))this.cache.set(t.pathPrefix,t);this.allAppsCache=e,this.lastRefresh=Date.now()}async getByPathPrefix(e){return this.isStale()&&await this.refresh(),this.cache.get(e)??null}async getAll(){return this.isStale()&&await this.refresh(),this.allAppsCache??[]}invalidate(){this.cache.clear(),this.allAppsCache=null,this.lastRefresh=0}invalidateByIssueNo(e){this.invalidate()}}let n=null;function p(e){if(!n){if(!e)throw Error("Database instance required to initialize cache");n=new s(e)}return n}},51172:(e,t,a)=>{a.d(t,{F1:()=>i,J6:()=>h,JF:()=>o,j6:()=>p,ke:()=>l,uz:()=>d,vV:()=>c});var r=a(84770);class s extends Error{constructor(e,t,a){super(e),this.code=t,this.cause=a,this.name="ExternalAppDbError"}}function n(e){return{id:e.id,name:e.name,displayName:e.display_name,description:e.description??void 0,pathPrefix:e.path_prefix,targetPort:e.target_port,targetHost:e.target_host,appType:e.app_type,websocketEnabled:1===e.websocket_enabled,websocketPathPattern:e.websocket_path_pattern??void 0,enabled:1===e.enabled,createdAt:e.created_at,updatedAt:e.updated_at}}function p(e,t){let a=(0,r.randomUUID)(),n=Date.now(),p={name:t.name,display_name:t.displayName,description:t.description??null,path_prefix:t.pathPrefix,target_port:t.targetPort,target_host:t.targetHost??"localhost",app_type:t.appType,websocket_enabled:t.websocketEnabled?1:0,websocket_path_pattern:t.websocketPathPattern??null};try{return e.prepare(`
2
2
  INSERT INTO external_apps (
3
3
  id, name, display_name, description, path_prefix,
4
4
  target_port, target_host, app_type,
@@ -20,26 +20,25 @@
20
20
  enabled, created_at, updated_at
21
21
  FROM external_apps
22
22
  WHERE path_prefix = ?
23
- `).get(t);if(!a)return null;return n(a)}catch(e){throw new s(`Failed to get external app by path prefix: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}function d(e){try{return e.prepare(`
23
+ `).get(t);if(!a)return null;return n(a)}catch(e){throw new s(`Failed to get external app by path prefix: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}function l(e){try{return e.prepare(`
24
24
  SELECT id, name, display_name, description, path_prefix,
25
25
  target_port, target_host, app_type,
26
26
  websocket_enabled, websocket_path_pattern,
27
27
  enabled, created_at, updated_at
28
28
  FROM external_apps
29
29
  ORDER BY name ASC
30
- `).all().map(n)}catch(e){throw new s(`Failed to get all external apps: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}function l(e){try{return e.prepare(`
31
- SELECT id, name, display_name, description, path_prefix,
32
- target_port, target_host, app_type,
33
- websocket_enabled, websocket_path_pattern,
34
- enabled, created_at, updated_at
35
- FROM external_apps
36
- WHERE enabled = 1
37
- ORDER BY name ASC
38
- `).all().map(n)}catch(e){throw new s(`Failed to get enabled external apps: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}function c(e,t,a){if(!o(e,t))throw new s(`External app not found: ${t}`,"NOT_FOUND");try{let r=Date.now(),s=["updated_at = ?"],n=[r];return void 0!==a.displayName&&(s.push("display_name = ?"),n.push(a.displayName)),void 0!==a.description&&(s.push("description = ?"),n.push(a.description)),void 0!==a.targetPort&&(s.push("target_port = ?"),n.push(a.targetPort)),void 0!==a.targetHost&&(s.push("target_host = ?"),n.push(a.targetHost)),void 0!==a.websocketEnabled&&(s.push("websocket_enabled = ?"),n.push(a.websocketEnabled?1:0)),void 0!==a.websocketPathPattern&&(s.push("websocket_path_pattern = ?"),n.push(a.websocketPathPattern)),void 0!==a.enabled&&(s.push("enabled = ?"),n.push(a.enabled?1:0)),n.push(t),e.prepare(`
30
+ `).all().map(n)}catch(e){throw new s(`Failed to get all external apps: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}function d(e,t,a){if(!o(e,t))throw new s(`External app not found: ${t}`,"NOT_FOUND");try{let r=Date.now(),s=["updated_at = ?"],n=[r];return void 0!==a.displayName&&(s.push("display_name = ?"),n.push(a.displayName)),void 0!==a.description&&(s.push("description = ?"),n.push(a.description)),void 0!==a.targetPort&&(s.push("target_port = ?"),n.push(a.targetPort)),void 0!==a.targetHost&&(s.push("target_host = ?"),n.push(a.targetHost)),void 0!==a.websocketEnabled&&(s.push("websocket_enabled = ?"),n.push(a.websocketEnabled?1:0)),void 0!==a.websocketPathPattern&&(s.push("websocket_path_pattern = ?"),n.push(a.websocketPathPattern)),void 0!==a.enabled&&(s.push("enabled = ?"),n.push(a.enabled?1:0)),n.push(t),e.prepare(`
39
31
  UPDATE external_apps
40
32
  SET ${s.join(", ")}
41
33
  WHERE id = ?
42
- `).run(...n),o(e,t)}catch(e){if(e instanceof s)throw e;throw new s(`Failed to update external app: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}function h(e,t){try{e.prepare(`
34
+ `).run(...n),o(e,t)}catch(e){if(e instanceof s)throw e;throw new s(`Failed to update external app: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}function c(e,t){try{e.prepare(`
43
35
  DELETE FROM external_apps
44
36
  WHERE id = ?
45
- `).run(t)}catch(e){throw new s(`Failed to delete external app: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}}};var t=require("../../../webpack-runtime.js");t.C(e);var a=e=>t(t.s=e),r=t.X(0,[8948,5972,7425],()=>a(51495));module.exports=r})();
37
+ `).run(t)}catch(e){throw new s(`Failed to delete external app: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}function h(e,t){try{let a=`
38
+ SELECT id, name, display_name, description, path_prefix,
39
+ target_port, target_host, app_type,
40
+ websocket_enabled, websocket_path_pattern,
41
+ enabled, created_at, updated_at, issue_no
42
+ FROM external_apps
43
+ WHERE enabled = 1
44
+ `,r=[];t?.issueNo===null?a+=" AND issue_no IS NULL":t?.issueNo!==void 0&&(a+=" AND issue_no = ?",r.push(t.issueNo)),a+=" ORDER BY name ASC";let s=e.prepare(a);return(r.length>0?s.all(...r):s.all()).map(n)}catch(e){throw new s(`Failed to get enabled external apps: ${e instanceof Error?e.message:"Unknown error"}`,"DB_ERROR",e instanceof Error?e:void 0)}}}};var t=require("../../../webpack-runtime.js");t.C(e);var a=e=>t(t.s=e),r=t.X(0,[8948,5972,7425],()=>a(51495));module.exports=r})();
@@ -1,4 +1,4 @@
1
- (()=>{var e={};e.id=2568,e.ids=[2568],e.modules={85890:e=>{"use strict";e.exports=require("better-sqlite3")},20399:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{"use strict";e.exports=require("buffer")},61282:e=>{"use strict";e.exports=require("child_process")},84770:e=>{"use strict";e.exports=require("crypto")},17702:e=>{"use strict";e.exports=require("events")},92048:e=>{"use strict";e.exports=require("fs")},20629:e=>{"use strict";e.exports=require("fs/promises")},32615:e=>{"use strict";e.exports=require("http")},35240:e=>{"use strict";e.exports=require("https")},98216:e=>{"use strict";e.exports=require("net")},55315:e=>{"use strict";e.exports=require("path")},76162:e=>{"use strict";e.exports=require("stream")},82452:e=>{"use strict";e.exports=require("tls")},17360:e=>{"use strict";e.exports=require("url")},21764:e=>{"use strict";e.exports=require("util")},71568:e=>{"use strict";e.exports=require("zlib")},58359:()=>{},93739:()=>{},74859:(e,t,r)=>{"use strict";r.r(t),r.d(t,{originalPathname:()=>g,patchFetch:()=>_,requestAsyncStorage:()=>y,routeModule:()=>p,serverHooks:()=>h,staticGenerationAsyncStorage:()=>C});var o={};r.r(o),r.d(o,{POST:()=>f});var s=r(49303),a=r(88716),n=r(60670),i=r(87070),c=r(97425),u=r(75748),l=r(62648),d=r(25079),m=r(89287),w=r(76966);async function f(e){try{let t;let r=(0,c.n)(),o=await e.json();if(!o.worktreeId||"string"!=typeof o.worktreeId)return i.NextResponse.json({error:"worktreeId is required and must be a string"},{status:400});if(!(0,u.gU)(r,o.worktreeId))return i.NextResponse.json({error:`Worktree '${o.worktreeId}' not found`},{status:404});try{t=await (0,l.Lm)(o.worktreeId,1e4)}catch(t){console.error("Failed to capture Claude output:",t);let e=t instanceof Error?t.message:"Unknown error";return i.NextResponse.json({error:`Failed to capture Claude output: ${e}`},{status:500})}let s=(0,m.Z)(t);await (0,w.o)(r,o.worktreeId,s.content,"claude");let a=(0,u.tn)(r,{worktreeId:o.worktreeId,role:"assistant",content:s.content,summary:s.summary,timestamp:new Date,logFileName:s.logFileName,requestId:s.requestId,messageType:"normal",cliToolId:"claude"}),n=t.split("\n").length;return(0,u.IH)(r,o.worktreeId,"claude",n),(0,d.ps)("message",{worktreeId:o.worktreeId,message:a}),console.log(`✓ Processed Claude response for worktree: ${o.worktreeId}`),i.NextResponse.json({success:!0,messageId:a.id,summary:s.summary},{status:200})}catch(e){return console.error("Error processing Claude done hook:",e),i.NextResponse.json({error:"Failed to process Claude done hook"},{status:500})}}let p=new s.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/hooks/claude-done/route",pathname:"/api/hooks/claude-done",filename:"route",bundlePath:"app/api/hooks/claude-done/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/hooks/claude-done/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:y,staticGenerationAsyncStorage:C,serverHooks:h}=p,g="/api/hooks/claude-done/route";function _(){return(0,n.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:C})}},89287:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});let o=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,s=/Request ID: ([^\s\n]+)/,a=/Summary: (.+?)(?:\n─|$)/s;function n(e){let t={content:e},r=o.exec(e);r&&(t.logFileName=r[2]);let n=s.exec(e);n&&(t.requestId=n[1]);let i=a.exec(e);return i&&(t.summary=i[1].trim()),t}},62648:(e,t,r)=>{"use strict";r.d(t,{Lm:()=>w,Uv:()=>u,YI:()=>l,_f:()=>f,xd:()=>m,ym:()=>d});var o=r(10927),s=r(61282);let a=(0,r(21764).promisify)(s.exec),n=null;async function i(){if(n)return n;if(process.env.CLAUDE_PATH)return n=process.env.CLAUDE_PATH;try{let{stdout:e}=await a("which claude",{timeout:5e3});return n=e.trim()}catch{for(let e of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await a(`test -x "${e}"`,{timeout:1e3}),n=e}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}function c(e){return`mcbd-claude-${e}`}async function u(){try{return await a("which claude",{timeout:5e3}),!0}catch{return!1}}async function l(e){let t=c(e);return await (0,o.Hk)(t)}async function d(e){let{worktreeId:t,worktreePath:r}=e;if(!await u())throw Error("Claude CLI is not installed or not in PATH");let s=c(t);if(await (0,o.Hk)(s)){console.log(`Claude session ${s} already exists`);return}try{await (0,o.ed)({sessionName:s,workingDirectory:r,historyLimit:5e4});let e=await i();await (0,o.Is)(s,e,!0);let t=Date.now();for(;Date.now()-t<1e4;){await new Promise(e=>setTimeout(e,500));try{let e=await (0,o.xq)(s,{startLine:-50});if(/^>\s*$/m.test(e)||/^─{10,}$/m.test(e)){console.log(`✓ Claude initialized in ${Date.now()-t}ms`);break}}catch{}}console.log(`✓ Started Claude session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Claude session: ${e}`)}}async function m(e,t){let r=c(e);if(!await (0,o.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);try{await (0,o.Is)(r,t,!1),await new Promise(e=>setTimeout(e,100)),await a(`tmux send-keys -t "${r}" C-m`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Sent message to Claude session: ${r}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Claude: ${e}`)}}async function w(e,t=1e3){let r=c(e);if(!await (0,o.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,o.xq)(r,{startLine:-t})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to capture Claude output: ${e}`)}}async function f(e){let t=c(e);try{await (0,o.Hk)(t)&&(await (0,o.Is)(t,"",!1),await a(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500)));let e=await (0,o.AJ)(t);return e&&console.log(`✓ Stopped Claude session: ${t}`),e}catch(t){let e=t instanceof Error?t.message:String(t);return console.error(`Error stopping Claude session: ${e}`),!1}}},76966:(e,t,r)=>{"use strict";r.d(t,{o:()=>a});var o=r(75748),s=r(98636);async function a(e,t,r,a="claude"){let n=(0,o.vX)(e,t);if(n)try{await (0,s.xN)(t,n.content,r,a)}catch(e){console.error("[recordClaudeConversation] Failed to create log file:",e)}}},37848:(e,t,r)=>{"use strict";r.d(t,{Hb:()=>i,LI:()=>c,dU:()=>u});var o=r(55315),s=r.n(o);let a={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,t){let r=process.env[e];if(void 0!==r)return r;let o=process.env[t];if(void 0!==o)return n.has(t)||(console.warn(`[DEPRECATED] ${t} is deprecated, use ${e} instead`),n.add(t)),o}(e,a[e])}function c(){let e=i("CM_LOG_LEVEL")?.toLowerCase(),t=i("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=i("CM_ROOT_DIR")||process.cwd(),t=parseInt(i("CM_PORT")||"3000",10),r=i("CM_BIND")||"127.0.0.1",o=i("CM_AUTH_TOKEN"),a=i("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(t)||t<1||t>65535)throw Error(`Invalid CM_PORT: ${i("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&&!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:t,CM_BIND:r,CM_AUTH_TOKEN:o,CM_DB_PATH:s().resolve(a)}}},98636:(e,t,r)=>{"use strict";r.d(t,{e7:()=>m,xN:()=>d});var o=r(20629),s=r.n(o),a=r(55315),n=r.n(a),i=r(73853);let c=(0,r(37848).Hb)("CM_LOG_DIR")||n().join(process.cwd(),"data","logs");function u(e="claude"){return n().join(c,e)}async function l(e="claude"){let t=u(e);try{await s().access(t)}catch{await s().mkdir(t,{recursive:!0})}}async function d(e,t,r,o="claude"){await l(o);let a=function(e,t="claude"){let r=(0,i.WU)(new Date,"yyyy-MM-dd"),o=`${e}-${r}.md`,s=u(t);return n().join(s,o)}(e,o),c=(0,i.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await s().readFile(a,"utf-8")}catch{let t="claude"===o?"Claude Code":"codex"===o?"Codex CLI":"Gemini CLI";d=`# ${t} Conversation Log: ${e}
1
+ (()=>{var e={};e.id=2568,e.ids=[2568],e.modules={85890:e=>{"use strict";e.exports=require("better-sqlite3")},20399:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{"use strict";e.exports=require("buffer")},61282:e=>{"use strict";e.exports=require("child_process")},84770:e=>{"use strict";e.exports=require("crypto")},17702:e=>{"use strict";e.exports=require("events")},92048:e=>{"use strict";e.exports=require("fs")},20629:e=>{"use strict";e.exports=require("fs/promises")},32615:e=>{"use strict";e.exports=require("http")},35240:e=>{"use strict";e.exports=require("https")},98216:e=>{"use strict";e.exports=require("net")},19801:e=>{"use strict";e.exports=require("os")},55315:e=>{"use strict";e.exports=require("path")},76162:e=>{"use strict";e.exports=require("stream")},82452:e=>{"use strict";e.exports=require("tls")},17360:e=>{"use strict";e.exports=require("url")},21764:e=>{"use strict";e.exports=require("util")},71568:e=>{"use strict";e.exports=require("zlib")},58359:()=>{},93739:()=>{},74859:(e,t,r)=>{"use strict";r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>$,requestAsyncStorage:()=>y,routeModule:()=>f,serverHooks:()=>g,staticGenerationAsyncStorage:()=>h});var o={};r.r(o),r.d(o,{POST:()=>w});var s=r(49303),a=r(88716),n=r(60670),i=r(87070),c=r(97425),u=r(75748),l=r(62648),d=r(25079),m=r(89287),p=r(76966);async function w(e){try{let t;let r=(0,c.n)(),o=await e.json();if(!o.worktreeId||"string"!=typeof o.worktreeId)return i.NextResponse.json({error:"worktreeId is required and must be a string"},{status:400});if(!(0,u.gU)(r,o.worktreeId))return i.NextResponse.json({error:`Worktree '${o.worktreeId}' not found`},{status:404});try{t=await (0,l.Lm)(o.worktreeId,1e4)}catch(t){console.error("Failed to capture Claude output:",t);let e=t instanceof Error?t.message:"Unknown error";return i.NextResponse.json({error:`Failed to capture Claude output: ${e}`},{status:500})}let s=(0,m.Z)(t);await (0,p.o)(r,o.worktreeId,s.content,"claude");let a=(0,u.tn)(r,{worktreeId:o.worktreeId,role:"assistant",content:s.content,summary:s.summary,timestamp:new Date,logFileName:s.logFileName,requestId:s.requestId,messageType:"normal",cliToolId:"claude"}),n=t.split("\n").length;return(0,u.IH)(r,o.worktreeId,"claude",n),(0,d.ps)("message",{worktreeId:o.worktreeId,message:a}),console.log(`✓ Processed Claude response for worktree: ${o.worktreeId}`),i.NextResponse.json({success:!0,messageId:a.id,summary:s.summary},{status:200})}catch(e){return console.error("Error processing Claude done hook:",e),i.NextResponse.json({error:"Failed to process Claude done hook"},{status:500})}}let f=new s.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/hooks/claude-done/route",pathname:"/api/hooks/claude-done",filename:"route",bundlePath:"app/api/hooks/claude-done/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/hooks/claude-done/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:y,staticGenerationAsyncStorage:h,serverHooks:g}=f,x="/api/hooks/claude-done/route";function $(){return(0,n.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:h})}},89287:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});let o=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,s=/Request ID: ([^\s\n]+)/,a=/Summary: (.+?)(?:\n─|$)/s;function n(e){let t={content:e},r=o.exec(e);r&&(t.logFileName=r[2]);let n=s.exec(e);n&&(t.requestId=n[1]);let i=a.exec(e);return i&&(t.summary=i[1].trim()),t}},62648:(e,t,r)=>{"use strict";r.d(t,{Lm:()=>p,Uv:()=>u,YI:()=>l,_f:()=>w,xd:()=>m,ym:()=>d});var o=r(10927),s=r(61282);let a=(0,r(21764).promisify)(s.exec),n=null;async function i(){if(n)return n;if(process.env.CLAUDE_PATH)return n=process.env.CLAUDE_PATH;try{let{stdout:e}=await a("which claude",{timeout:5e3});return n=e.trim()}catch{for(let e of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await a(`test -x "${e}"`,{timeout:1e3}),n=e}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}function c(e){return`mcbd-claude-${e}`}async function u(){try{return await a("which claude",{timeout:5e3}),!0}catch{return!1}}async function l(e){let t=c(e);return await (0,o.Hk)(t)}async function d(e){let{worktreeId:t,worktreePath:r}=e;if(!await u())throw Error("Claude CLI is not installed or not in PATH");let s=c(t);if(await (0,o.Hk)(s)){console.log(`Claude session ${s} already exists`);return}try{await (0,o.ed)({sessionName:s,workingDirectory:r,historyLimit:5e4});let e=await i();await (0,o.Is)(s,e,!0);let t=Date.now();for(;Date.now()-t<1e4;){await new Promise(e=>setTimeout(e,500));try{let e=await (0,o.xq)(s,{startLine:-50});if(/^>\s*$/m.test(e)||/^─{10,}$/m.test(e)){console.log(`✓ Claude initialized in ${Date.now()-t}ms`);break}}catch{}}console.log(`✓ Started Claude session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Claude session: ${e}`)}}async function m(e,t){let r=c(e);if(!await (0,o.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);try{await (0,o.Is)(r,t,!1),await new Promise(e=>setTimeout(e,100)),await a(`tmux send-keys -t "${r}" C-m`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Sent message to Claude session: ${r}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Claude: ${e}`)}}async function p(e,t=1e3){let r=c(e);if(!await (0,o.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,o.xq)(r,{startLine:-t})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to capture Claude output: ${e}`)}}async function w(e){let t=c(e);try{await (0,o.Hk)(t)&&(await (0,o.Is)(t,"",!1),await a(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500)));let e=await (0,o.AJ)(t);return e&&console.log(`✓ Stopped Claude session: ${t}`),e}catch(t){let e=t instanceof Error?t.message:String(t);return console.error(`Error stopping Claude session: ${e}`),!1}}},76966:(e,t,r)=>{"use strict";r.d(t,{o:()=>a});var o=r(75748),s=r(98636);async function a(e,t,r,a="claude"){let n=(0,o.vX)(e,t);if(n)try{await (0,s.xN)(t,n.content,r,a)}catch(e){console.error("[recordClaudeConversation] Failed to create log file:",e)}}},98636:(e,t,r)=>{"use strict";r.d(t,{e7:()=>m,xN:()=>d});var o=r(20629),s=r.n(o),a=r(55315),n=r.n(a),i=r(73853);let c=(0,r(93346).Hb)("CM_LOG_DIR")||n().join(process.cwd(),"data","logs");function u(e="claude"){return n().join(c,e)}async function l(e="claude"){let t=u(e);try{await s().access(t)}catch{await s().mkdir(t,{recursive:!0})}}async function d(e,t,r,o="claude"){await l(o);let a=function(e,t="claude"){let r=(0,i.WU)(new Date,"yyyy-MM-dd"),o=`${e}-${r}.md`,s=u(t);return n().join(s,o)}(e,o),c=(0,i.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await s().readFile(a,"utf-8")}catch{let t="claude"===o?"Claude Code":"codex"===o?"Codex CLI":"Gemini CLI";d=`# ${t} Conversation Log: ${e}
2
2
 
3
3
  Created: ${c}
4
4
 
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=9578,e.ids=[9578],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")},11303:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>m,patchFetch:()=>b,requestAsyncStorage:()=>l,routeModule:()=>d,serverHooks:()=>j,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{GET:()=>c});var s=t(49303),n=t(88716),i=t(60670),u=t(87070),a=t(97425),p=t(61318);async function c(e,{params:r}){try{let{jobId:e}=await r;if(!e)return u.NextResponse.json({success:!1,error:"Job ID is required"},{status:400});let t=(0,a.n)(),o=new p.v(t).getCloneJobStatus(e);if(!o)return u.NextResponse.json({success:!1,error:"Clone job not found"},{status:404});let s={success:!0,jobId:o.jobId,status:o.status,progress:o.progress,repositoryId:o.repositoryId};return o.error&&(s.error=o.error),u.NextResponse.json(s,{status:200})}catch(e){return console.error("[Clone Status API] Unexpected error:",e),u.NextResponse.json({success:!1,error:"Failed to get clone job status"},{status:500})}}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/clone/[jobId]/route",pathname:"/api/repositories/clone/[jobId]",filename:"route",bundlePath:"app/api/repositories/clone/[jobId]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/clone/[jobId]/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:l,staticGenerationAsyncStorage:x,serverHooks:j}=d,m="/api/repositories/clone/[jobId]/route";function b(){return(0,i.patchFetch)({serverHooks:j,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,1318],()=>t(11303));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=9578,e.ids=[9578],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")},11303:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>m,patchFetch:()=>b,requestAsyncStorage:()=>l,routeModule:()=>d,serverHooks:()=>j,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{GET:()=>c});var s=t(49303),n=t(88716),i=t(60670),u=t(87070),p=t(97425),a=t(61318);async function c(e,{params:r}){try{let{jobId:e}=await r;if(!e)return u.NextResponse.json({success:!1,error:"Job ID is required"},{status:400});let t=(0,p.n)(),o=new a.v(t).getCloneJobStatus(e);if(!o)return u.NextResponse.json({success:!1,error:"Clone job not found"},{status:404});let s={success:!0,jobId:o.jobId,status:o.status,progress:o.progress,repositoryId:o.repositoryId};return o.error&&(s.error=o.error),u.NextResponse.json(s,{status:200})}catch(e){return console.error("[Clone Status API] Unexpected error:",e),u.NextResponse.json({success:!1,error:"Failed to get clone job status"},{status:500})}}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/clone/[jobId]/route",pathname:"/api/repositories/clone/[jobId]",filename:"route",bundlePath:"app/api/repositories/clone/[jobId]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/clone/[jobId]/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:l,staticGenerationAsyncStorage:x,serverHooks:j}=d,m="/api/repositories/clone/[jobId]/route";function b(){return(0,i.patchFetch)({serverHooks:j,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,1318],()=>t(11303));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=541,e.ids=[541],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},28841:(e,r,o)=>{o.r(r),o.d(r,{originalPathname:()=>j,patchFetch:()=>R,requestAsyncStorage:()=>g,routeModule:()=>d,serverHooks:()=>x,staticGenerationAsyncStorage:()=>m});var t={};o.r(t),o.d(t,{POST:()=>l});var s=o(49303),n=o(88716),a=o(60670),i=o(87070),c=o(97425),u=o(61318);let p="[Clone API]";async function l(e){try{let{cloneUrl:r,targetDir:o}=await e.json();if(!r||"string"!=typeof r||""===r.trim())return i.NextResponse.json({success:!1,error:{category:"validation",code:"EMPTY_URL",message:"Clone URL is required",recoverable:!0,suggestedAction:"Please enter a valid git clone URL"}},{status:400});let t=(0,c.n)(),s=new u.v(t);console.info(`${p} Starting clone job for: ${r}`);let n=await s.startCloneJob(r.trim(),o);if(!n.success){let e=400;return(n.error?.code==="DUPLICATE_CLONE_URL"||n.error?.code==="CLONE_IN_PROGRESS")&&(e=409),console.warn(`${p} Clone job failed: ${n.error?.code} - ${n.error?.message}`),i.NextResponse.json({success:!1,error:n.error,jobId:n.jobId},{status:e})}return console.info(`${p} Clone job created: ${n.jobId}`),i.NextResponse.json({success:!0,jobId:n.jobId,status:"pending",message:"Clone job started"},{status:202})}catch(e){return console.error(`${p} Unexpected error:`,e),i.NextResponse.json({success:!1,error:{category:"system",code:"INTERNAL_ERROR",message:"Failed to start clone job",recoverable:!1,suggestedAction:"Please try again later"}},{status:500})}}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/clone/route",pathname:"/api/repositories/clone",filename:"route",bundlePath:"app/api/repositories/clone/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/clone/route.ts",nextConfigOutput:"",userland:t}),{requestAsyncStorage:g,staticGenerationAsyncStorage:m,serverHooks:x}=d,j="/api/repositories/clone/route";function R(){return(0,a.patchFetch)({serverHooks:x,staticGenerationAsyncStorage:m})}}};var r=require("../../../../webpack-runtime.js");r.C(e);var o=e=>r(r.s=e),t=r.X(0,[8948,5972,7425,1318],()=>o(28841));module.exports=t})();
1
+ "use strict";(()=>{var e={};e.id=541,e.ids=[541],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},28841:(e,r,o)=>{o.r(r),o.d(r,{originalPathname:()=>j,patchFetch:()=>R,requestAsyncStorage:()=>g,routeModule:()=>d,serverHooks:()=>x,staticGenerationAsyncStorage:()=>m});var t={};o.r(t),o.d(t,{POST:()=>l});var s=o(49303),n=o(88716),a=o(60670),i=o(87070),c=o(97425),u=o(61318);let p="[Clone API]";async function l(e){try{let{cloneUrl:r,targetDir:o}=await e.json();if(!r||"string"!=typeof r||""===r.trim())return i.NextResponse.json({success:!1,error:{category:"validation",code:"EMPTY_URL",message:"Clone URL is required",recoverable:!0,suggestedAction:"Please enter a valid git clone URL"}},{status:400});let t=(0,c.n)(),s=new u.v(t);console.info(`${p} Starting clone job for: ${r}`);let n=await s.startCloneJob(r.trim(),o);if(!n.success){let e=400;return(n.error?.code==="DUPLICATE_CLONE_URL"||n.error?.code==="CLONE_IN_PROGRESS")&&(e=409),console.warn(`${p} Clone job failed: ${n.error?.code} - ${n.error?.message}`),i.NextResponse.json({success:!1,error:n.error,jobId:n.jobId},{status:e})}return console.info(`${p} Clone job created: ${n.jobId}`),i.NextResponse.json({success:!0,jobId:n.jobId,status:"pending",message:"Clone job started"},{status:202})}catch(e){return console.error(`${p} Unexpected error:`,e),i.NextResponse.json({success:!1,error:{category:"system",code:"INTERNAL_ERROR",message:"Failed to start clone job",recoverable:!1,suggestedAction:"Please try again later"}},{status:500})}}let d=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/clone/route",pathname:"/api/repositories/clone",filename:"route",bundlePath:"app/api/repositories/clone/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/clone/route.ts",nextConfigOutput:"",userland:t}),{requestAsyncStorage:g,staticGenerationAsyncStorage:m,serverHooks:x}=d,j="/api/repositories/clone/route";function R(){return(0,a.patchFetch)({serverHooks:x,staticGenerationAsyncStorage:m})}}};var r=require("../../../../webpack-runtime.js");r.C(e);var o=e=>r(r.s=e),t=r.X(0,[8948,5972,7425,1318],()=>o(28841));module.exports=t})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=5361,e.ids=[5361],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},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")},32511:(e,r,s)=>{s.r(r),s.d(r,{originalPathname:()=>R,patchFetch:()=>C,requestAsyncStorage:()=>S,routeModule:()=>E,serverHooks:()=>j,staticGenerationAsyncStorage:()=>v});var o={};s.r(o),s.d(o,{DELETE:()=>k});var t=s(49303),n=s(88716),l=s(60670),i=s(87070),p=s(97425),a=s(75748),u=s(59991);s(62648);var c=s(25079);s(63661),s(76966);let d=new Map,f=new Map,$=["claude","codex","gemini"],g="[Session Cleanup]";async function h(e,r){let s={worktreeId:e,sessionsKilled:[],sessionErrors:[],pollersStopped:[],pollerErrors:[]};for(let o of $){try{await r(e,o)&&(s.sessionsKilled.push(o),console.info(`${g} Killed session: ${e}/${o}`))}catch(t){let r=`${o}: ${t instanceof Error?t.message:String(t)}`;s.sessionErrors.push(r),console.warn(`${g} Failed to kill session ${e}/${o}:`,t)}try{(0,u.FN)(e,o),s.pollersStopped.push(`response-poller:${o}`)}catch(t){let r=`response-poller:${o}: ${t instanceof Error?t.message:String(t)}`;s.pollerErrors.push(r),console.warn(`${g} Failed to stop response-poller ${e}/${o}:`,t)}}try{(function(e){let r=d.get(e);r&&(clearInterval(r),d.delete(e),f.delete(e),console.log(`Stopped poller for ${e}`))})(e),s.pollersStopped.push("claude-poller")}catch(o){let r=`claude-poller: ${o instanceof Error?o.message:String(o)}`;s.pollerErrors.push(r),console.warn(`${g} Failed to stop claude-poller ${e}:`,o)}return s}async function x(e,r){let s=[],o=[];for(let t of e){let e=await h(t,r);for(let r of(s.push(e),e.sessionErrors))o.push(`Session kill error (${t}): ${r}`);for(let r of e.pollerErrors)o.push(`Poller stop error (${t}): ${r}`)}return{results:s,warnings:o}}var m=s(97213),w=s(10927);let q="[Repository Delete]";async function y(e,r){let s=m.g.getInstance().getTool(r);if(!await s.isRunning(e))return!1;let o=s.getSessionName(e);return(0,w.AJ)(o)}async function k(e){try{let r;let{repositoryPath:s}=await e.json();if(!s||"string"!=typeof s)return i.NextResponse.json({success:!1,error:"repositoryPath is required"},{status:400});let o=(0,p.n)(),t=(0,a.Pv)(o,s);if(0===t.length)return i.NextResponse.json({success:!1,error:"Repository not found"},{status:404});console.info(`${q} Starting deletion: ${s}, worktrees: ${t.length}`);let n=await x(t,y);for(let e of n.results)e.sessionsKilled.length>0&&console.info(`${q} Sessions killed for ${e.worktreeId}: ${e.sessionsKilled.join(", ")}`),e.sessionErrors.length>0&&console.warn(`${q} Session kill errors for ${e.worktreeId}: ${e.sessionErrors.join(", ")}`);(0,c.ZV)(t);try{r=(0,a.DF)(o,s).deletedCount,console.info(`${q} Successfully deleted ${r} worktrees from: ${s}`)}catch(e){return console.error(`${q} Database deletion failed for ${s}:`,e),i.NextResponse.json({success:!1,error:"Database deletion failed"},{status:500})}(0,c.ps)("repository_deleted",{worktreeId:"global",repositoryPath:s,deletedWorktreeIds:t});let l={success:!0,deletedWorktreeCount:r,deletedWorktreeIds:t};return n.warnings.length>0?(l.warnings=n.warnings,console.info(`${q} Completed with ${n.warnings.length} warnings: ${s}`)):console.info(`${q} Completed successfully: ${s}`),i.NextResponse.json(l,{status:200})}catch(e){return console.error(`${q} Unexpected error:`,e),i.NextResponse.json({success:!1,error:"Failed to delete repository"},{status:500})}}let E=new t.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/route",pathname:"/api/repositories",filename:"route",bundlePath:"app/api/repositories/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:S,staticGenerationAsyncStorage:v,serverHooks:j}=E,R="/api/repositories/route";function C(){return(0,l.patchFetch)({serverHooks:j,staticGenerationAsyncStorage:v})}}};var r=require("../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),o=r.X(0,[8948,5972,3853,4893,7425,7213,1528,9723],()=>s(32511));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=5361,e.ids=[5361],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},78893:e=>{e.exports=require("buffer")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},98216:e=>{e.exports=require("net")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},76162:e=>{e.exports=require("stream")},82452:e=>{e.exports=require("tls")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},32511:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>A,patchFetch:()=>P,requestAsyncStorage:()=>k,routeModule:()=>E,serverHooks:()=>b,staticGenerationAsyncStorage:()=>I});var o={};t.r(o),t.d(o,{DELETE:()=>q});var s=t(49303),n=t(88716),l=t(60670),i=t(87070),a=t(97425),u=t(75748),p=t(59991);t(62648);var c=t(25079);t(63661),t(76966);let d=new Map,f=new Map;var g=t(60667);let $=["claude","codex","gemini"],m="[Session Cleanup]";async function h(e,r){let t={worktreeId:e,sessionsKilled:[],sessionErrors:[],pollersStopped:[],pollerErrors:[]};for(let o of $){try{await r(e,o)&&(t.sessionsKilled.push(o),console.info(`${m} Killed session: ${e}/${o}`))}catch(s){let r=`${o}: ${s instanceof Error?s.message:String(s)}`;t.sessionErrors.push(r),console.warn(`${m} Failed to kill session ${e}/${o}:`,s)}try{(0,p.FN)(e,o),t.pollersStopped.push(`response-poller:${o}`)}catch(s){let r=`response-poller:${o}: ${s instanceof Error?s.message:String(s)}`;t.pollerErrors.push(r),console.warn(`${m} Failed to stop response-poller ${e}/${o}:`,s)}}try{(function(e){let r=d.get(e);r&&(clearInterval(r),d.delete(e),f.delete(e),console.log(`Stopped poller for ${e}`))})(e),t.pollersStopped.push("claude-poller")}catch(o){let r=`claude-poller: ${o instanceof Error?o.message:String(o)}`;t.pollerErrors.push(r),console.warn(`${m} Failed to stop claude-poller ${e}:`,o)}try{(0,g.Qz)(e),t.pollersStopped.push("auto-yes-poller")}catch(o){let r=`auto-yes-poller: ${o instanceof Error?o.message:String(o)}`;t.pollerErrors.push(r),console.warn(`${m} Failed to stop auto-yes-poller ${e}:`,o)}return t}async function w(e,r){let t=[],o=[];for(let s of e){let e=await h(s,r);for(let r of(t.push(e),e.sessionErrors))o.push(`Session kill error (${s}): ${r}`);for(let r of e.pollerErrors)o.push(`Poller stop error (${s}): ${r}`)}return{results:t,warnings:o}}var x=t(97213),y=t(10927);let v="[Repository Delete]";async function S(e,r){let t=x.g.getInstance().getTool(r);if(!await t.isRunning(e))return!1;let o=t.getSessionName(e);return(0,y.AJ)(o)}async function q(e){try{let r;let{repositoryPath:t}=await e.json();if(!t||"string"!=typeof t)return i.NextResponse.json({success:!1,error:"repositoryPath is required"},{status:400});let o=(0,a.n)(),s=(0,u.Pv)(o,t);if(0===s.length)return i.NextResponse.json({success:!1,error:"Repository not found"},{status:404});console.info(`${v} Starting deletion: ${t}, worktrees: ${s.length}`);let n=await w(s,S);for(let e of n.results)e.sessionsKilled.length>0&&console.info(`${v} Sessions killed for ${e.worktreeId}: ${e.sessionsKilled.join(", ")}`),e.sessionErrors.length>0&&console.warn(`${v} Session kill errors for ${e.worktreeId}: ${e.sessionErrors.join(", ")}`);(0,c.ZV)(s);try{r=(0,u.DF)(o,t).deletedCount,console.info(`${v} Successfully deleted ${r} worktrees from: ${t}`)}catch(e){return console.error(`${v} Database deletion failed for ${t}:`,e),i.NextResponse.json({success:!1,error:"Database deletion failed"},{status:500})}(0,c.ps)("repository_deleted",{worktreeId:"global",repositoryPath:t,deletedWorktreeIds:s});let l={success:!0,deletedWorktreeCount:r,deletedWorktreeIds:s};return n.warnings.length>0?(l.warnings=n.warnings,console.info(`${v} Completed with ${n.warnings.length} warnings: ${t}`)):console.info(`${v} Completed successfully: ${t}`),i.NextResponse.json(l,{status:200})}catch(e){return console.error(`${v} Unexpected error:`,e),i.NextResponse.json({success:!1,error:"Failed to delete repository"},{status:500})}}let E=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/route",pathname:"/api/repositories",filename:"route",bundlePath:"app/api/repositories/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:k,staticGenerationAsyncStorage:I,serverHooks:b}=E,A="/api/repositories/route";function P(){return(0,l.patchFetch)({serverHooks:b,staticGenerationAsyncStorage:I})}},60667:(e,r,t)=>{t.d(r,{bq:()=>d,gf:()=>g,bY:()=>f,w:()=>h,Qz:()=>w});var o=t(89194),s=t(63661),n=t(10927),l=t(97213),i=t(19377);let a=/^[a-zA-Z0-9_-]+$/,u=new Map,p=new Map;function c(e){return Date.now()>e.expiresAt}function d(e){let r=u.get(e);if(!r)return null;if(c(r)){let t={...r,enabled:!1};return u.set(e,t),t}return r}function f(e,r){if(r){let r=Date.now(),t={enabled:!0,enabledAt:r,expiresAt:r+36e5};return u.set(e,t),t}{let r=u.get(e),t={enabled:!1,enabledAt:r?.enabledAt??0,expiresAt:r?.expiresAt??0};return u.set(e,t),t}}function g(e){let r=p.get(e);return r?.lastServerResponseTimestamp??null}async function $(e,r){if(!p.get(e))return;let t=d(e);if(!t?.enabled||c(t)){w(e);return}try{let t=await (0,o.NA)(e,r,5e3),a=(0,i.vp)(t),u=(0,s.F)(a);if(!u.isPrompt||!u.promptData){m(e,r);return}let c=function(e){if("yes_no"===e.type)return"y";if("multiple_choice"===e.type){let r=e.options.find(e=>e.isDefault)??e.options[0];return!r||r.requiresTextInput?null:r.number.toString()}return null}(u.promptData);if(null===c){m(e,r);return}let d=l.g.getInstance().getTool(r).getSessionName(e);await (0,n.Is)(d,c,!1),await new Promise(e=>setTimeout(e,100)),await (0,n.Is)(d,"",!0),function(e,r){let t=p.get(e);t&&(t.lastServerResponseTimestamp=r)}(e,Date.now()),function(e){let r=p.get(e);r&&(r.consecutiveErrors=0,r.currentInterval=2e3)}(e),console.info(`[Auto-Yes Poller] Sent response for worktree: ${e}`)}catch(t){!function(e){let r=p.get(e);if(r){var t;r.consecutiveErrors++,r.currentInterval=(t=r.consecutiveErrors)<5?2e3:Math.min(2e3*Math.pow(2,t-5+1),6e4)}}(e);let r=t instanceof Error?t.message:"Unknown error";console.warn(`[Auto-Yes Poller] Error for worktree ${e}: ${r}`)}m(e,r)}function m(e,r){let t=p.get(e);t&&(t.timerId=setTimeout(()=>{$(e,r)},t.currentInterval))}function h(e,r){if(!(e&&0!==e.length&&a.test(e)))return{started:!1,reason:"invalid worktree ID"};let t=d(e);if(!t?.enabled)return{started:!1,reason:"auto-yes not enabled"};let o=p.has(e);if(!o&&p.size>=50)return{started:!1,reason:"max concurrent pollers reached"};o&&w(e);let s={timerId:null,cliToolId:r,consecutiveErrors:0,currentInterval:2e3,lastServerResponseTimestamp:null};return p.set(e,s),s.timerId=setTimeout(()=>{$(e,r)},2e3),console.info(`[Auto-Yes Poller] Started for worktree: ${e}, cliTool: ${r}`),{started:!0}}function w(e){let r=p.get(e);r&&(r.timerId&&clearTimeout(r.timerId),p.delete(e),console.info(`[Auto-Yes Poller] Stopped for worktree: ${e}`))}}};var r=require("../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,3853,4893,7425,7213,1528,9723],()=>t(32511));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=6865,e.ids=[6865],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},75144:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>m,patchFetch:()=>R,requestAsyncStorage:()=>C,routeModule:()=>f,serverHooks:()=>O,staticGenerationAsyncStorage:()=>M});var o={};t.r(o),t.d(o,{POST:()=>h});var s=t(49303),n=t(88716),i=t(60670),a=t(87070),u=t(55315),p=t.n(u),c=t(97425),l=t(67722),d=t(57440),_=t(37848);async function h(e){try{let{repositoryPath:r}=await e.json();if(!r||"string"!=typeof r)return a.NextResponse.json({error:"Repository path is required"},{status:400});let{CM_ROOT_DIR:t}=(0,_.dU)();if(!(0,d.j)(r,t))return a.NextResponse.json({error:"Invalid or unsafe repository path"},{status:400});let o=p().resolve(t,r),s=await (0,l.e9)(o);if(0===s.length)return a.NextResponse.json({error:"No worktrees found in the specified path. Make sure it is a valid git repository."},{status:404});let n=(0,c.n)();return(0,l.h2)(n,s),a.NextResponse.json({success:!0,message:`Successfully scanned and added ${s.length} worktree(s)`,worktreeCount:s.length,repositoryPath:s[0].repositoryPath,repositoryName:s[0].repositoryName},{status:200})}catch(r){console.error("Error scanning repository:",r);let e=r instanceof Error?r.message:"Failed to scan repository";return a.NextResponse.json({error:e},{status:500})}}let f=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/scan/route",pathname:"/api/repositories/scan",filename:"route",bundlePath:"app/api/repositories/scan/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/scan/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:C,staticGenerationAsyncStorage:M,serverHooks:O}=f,m="/api/repositories/scan/route";function R(){return(0,i.patchFetch)({serverHooks:O,staticGenerationAsyncStorage:M})}},37848:(e,r,t)=>{t.d(r,{Hb:()=>a,LI:()=>u,dU:()=>p});var o=t(55315),s=t.n(o);let n={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 o=process.env[r];if(void 0!==o)return i.has(r)||(console.warn(`[DEPRECATED] ${r} is deprecated, use ${e} instead`),i.add(r)),o}(e,n[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",o=a("CM_AUTH_TOKEN"),n=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(n)}}},57440:(e,r,t)=>{t.d(r,{j:()=>n});var o=t(55315),s=t.n(o);function n(e,r){if(!e||""===e.trim()||e.includes("\0"))return!1;let t=e;try{t=decodeURIComponent(e)}catch{t=e}if(t.includes("\0"))return!1;let o=s().resolve(r),n=s().resolve(r,t),i=s().relative(o,n);return!(i.startsWith("..")||s().isAbsolute(i))}},67722:(e,r,t)=>{t.d(r,{Lj:()=>l,a$:()=>p,e9:()=>c,h2:()=>d});var o=t(61282),s=t(21764),n=t(55315),i=t.n(n),a=t(75748),u=t(37848);function p(){let e=process.env.WORKTREE_REPOS;if(e&&e.trim())return e.split(",").map(e=>e.trim()).filter(e=>e.length>0);let r=(0,u.Hb)("CM_ROOT_DIR");return r&&r.trim()?[r.trim()]:[]}async function c(e){let r=(0,s.promisify)(o.exec);try{let{stdout:t}=await r("git worktree list",{cwd:e}),o=function(e){if(!e||""===e.trim())return[];let r=e.trim().split("\n"),t=[];for(let e of r){let r=e.trim();if(!r)continue;let o=r.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(o){let[,e,r,s]=o;t.push({path:e.trim(),branch:s||`detached-${r}`,commit:r})}}return t}(t),s=i().resolve(e),n=i().basename(s);return o.map(e=>({id:function(e,r){if(!e)return"";let t=e=>e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),o=t(e);if(r){let e=t(r);return`${e}-${o}`}return o}(e.branch,n),name:e.branch,path:i().resolve(e.path),repositoryPath:s,repositoryName:n})).filter(e=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(r=>e.path.startsWith(r))?(console.warn(`Skipping potentially unsafe worktree path: ${e.path}`),!1):!(e.path.includes("\0")||e.path.includes(".."))||(console.warn(`Skipping path with potentially malicious characters: ${e.path}`),!1))}catch(t){let e=t instanceof Error?t.message:String(t),r=t.code;if(e?.includes("not a git repository")||128===r)return[];throw t}}async function l(e){let r=[];for(let t of e)try{console.log(`Scanning repository: ${t}`);let e=await c(t);r.push(...e),console.log(` Found ${e.length} worktree(s)`)}catch(e){console.error(`Error scanning repository ${t}:`,e)}return r}function d(e,r){for(let t of r)(0,a.ly)(e,t)}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,7425],()=>t(75144));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=6865,e.ids=[6865],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},61282:e=>{e.exports=require("child_process")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},21764:e=>{e.exports=require("util")},75144:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>w,patchFetch:()=>x,requestAsyncStorage:()=>g,routeModule:()=>m,serverHooks:()=>v,staticGenerationAsyncStorage:()=>y});var o={};r.r(o),r.d(o,{POST:()=>f});var s=r(49303),n=r(88716),i=r(60670),a=r(87070),p=r(55315),l=r.n(p),u=r(97425),c=r(67722),d=r(57440),h=r(93346);async function f(e){try{let{repositoryPath:t}=await e.json();if(!t||"string"!=typeof t)return a.NextResponse.json({error:"Repository path is required"},{status:400});let{CM_ROOT_DIR:r}=(0,h.dU)();if(!(0,d.j)(t,r))return a.NextResponse.json({error:"Invalid or unsafe repository path"},{status:400});let o=l().resolve(r,t),s=await (0,c.e9)(o);if(0===s.length)return a.NextResponse.json({error:"No worktrees found in the specified path. Make sure it is a valid git repository."},{status:404});let n=(0,u.n)();return(0,c.h2)(n,s),a.NextResponse.json({success:!0,message:`Successfully scanned and added ${s.length} worktree(s)`,worktreeCount:s.length,repositoryPath:s[0].repositoryPath,repositoryName:s[0].repositoryName},{status:200})}catch(t){console.error("Error scanning repository:",t);let e=t instanceof Error?t.message:"Failed to scan repository";return a.NextResponse.json({error:e},{status:500})}}let m=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/scan/route",pathname:"/api/repositories/scan",filename:"route",bundlePath:"app/api/repositories/scan/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/scan/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:g,staticGenerationAsyncStorage:y,serverHooks:v}=m,w="/api/repositories/scan/route";function x(){return(0,i.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:y})}},57440:(e,t,r)=>{r.d(t,{j:()=>n});var o=r(55315),s=r.n(o);function n(e,t){if(!e||""===e.trim()||e.includes("\0"))return!1;let r=e;try{r=decodeURIComponent(e)}catch{r=e}if(r.includes("\0"))return!1;let o=s().resolve(t),n=s().resolve(t,r),i=s().relative(o,n);return!(i.startsWith("..")||s().isAbsolute(i))}},67722:(e,t,r)=>{r.d(t,{Lj:()=>c,a$:()=>l,e9:()=>u,h2:()=>d});var o=r(61282),s=r(21764),n=r(55315),i=r.n(n),a=r(75748),p=r(93346);function l(){let e=process.env.WORKTREE_REPOS;if(e&&e.trim())return e.split(",").map(e=>e.trim()).filter(e=>e.length>0);let t=(0,p.Hb)("CM_ROOT_DIR");return t&&t.trim()?[t.trim()]:[]}async function u(e){let t=(0,s.promisify)(o.exec);try{let{stdout:r}=await t("git worktree list",{cwd:e}),o=function(e){if(!e||""===e.trim())return[];let t=e.trim().split("\n"),r=[];for(let e of t){let t=e.trim();if(!t)continue;let o=t.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(o){let[,e,t,s]=o;r.push({path:e.trim(),branch:s||`detached-${t}`,commit:t})}}return r}(r),s=i().resolve(e),n=i().basename(s);return o.map(e=>({id:function(e,t){if(!e)return"";let r=e=>e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),o=r(e);if(t){let e=r(t);return`${e}-${o}`}return o}(e.branch,n),name:e.branch,path:i().resolve(e.path),repositoryPath:s,repositoryName:n})).filter(e=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(t=>e.path.startsWith(t))?(console.warn(`Skipping potentially unsafe worktree path: ${e.path}`),!1):!(e.path.includes("\0")||e.path.includes(".."))||(console.warn(`Skipping path with potentially malicious characters: ${e.path}`),!1))}catch(r){let e=r instanceof Error?r.message:String(r),t=r.code;if(e?.includes("not a git repository")||128===t)return[];throw r}}async function c(e){let t=[];for(let r of e)try{console.log(`Scanning repository: ${r}`);let e=await u(r);t.push(...e),console.log(` Found ${e.length} worktree(s)`)}catch(e){console.error(`Error scanning repository ${r}:`,e)}return t}function d(e,t){if(0===t.length)return;let r=new Map;for(let e of t){let t=e.repositoryPath||"";r.has(t)||r.set(t,[]),r.get(t).push(e)}for(let[t,o]of r){if(!t)continue;let r=(0,a.Pv)(e,t),s=new Set(o.map(e=>e.id)),n=r.filter(e=>!s.has(e));if(n.length>0){let r=(0,a.pM)(e,n);console.log(`Removed ${r.deletedCount} deleted worktree(s) from ${t}`)}for(let t of o)(0,a.ly)(e,t)}}}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[8948,5972,7425],()=>r(75144));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=3546,e.ids=[3546],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")},98165:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>f,patchFetch:()=>C,requestAsyncStorage:()=>_,routeModule:()=>l,serverHooks:()=>h,staticGenerationAsyncStorage:()=>d});var o={};t.r(o),t.d(o,{POST:()=>u});var s=t(49303),n=t(88716),i=t(60670),a=t(87070),c=t(97425),p=t(67722);async function u(){try{let e=(0,p.a$)();if(0===e.length)return a.NextResponse.json({error:"No repositories configured. Please set WORKTREE_REPOS or CM_ROOT_DIR environment variable."},{status:400});let r=await (0,p.Lj)(e),t=(0,c.n)();(0,p.h2)(t,r);let o=new Set(r.map(e=>e.repositoryPath));return a.NextResponse.json({success:!0,message:`Successfully synced ${r.length} worktree(s) from ${o.size} repository/repositories`,worktreeCount:r.length,repositoryCount:o.size,repositories:Array.from(o)},{status:200})}catch(r){console.error("Error syncing repositories:",r);let e=r instanceof Error?r.message:"Failed to sync repositories";return a.NextResponse.json({error:e},{status:500})}}let l=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/sync/route",pathname:"/api/repositories/sync",filename:"route",bundlePath:"app/api/repositories/sync/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/sync/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:_,staticGenerationAsyncStorage:d,serverHooks:h}=l,f="/api/repositories/sync/route";function C(){return(0,i.patchFetch)({serverHooks:h,staticGenerationAsyncStorage:d})}},37848:(e,r,t)=>{t.d(r,{Hb:()=>a,LI:()=>c,dU:()=>p});var o=t(55315),s=t.n(o);let n={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 o=process.env[r];if(void 0!==o)return i.has(r)||(console.warn(`[DEPRECATED] ${r} is deprecated, use ${e} instead`),i.add(r)),o}(e,n[e])}function c(){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",o=a("CM_AUTH_TOKEN"),n=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(n)}}},67722:(e,r,t)=>{t.d(r,{Lj:()=>l,a$:()=>p,e9:()=>u,h2:()=>_});var o=t(61282),s=t(21764),n=t(55315),i=t.n(n),a=t(75748),c=t(37848);function p(){let e=process.env.WORKTREE_REPOS;if(e&&e.trim())return e.split(",").map(e=>e.trim()).filter(e=>e.length>0);let r=(0,c.Hb)("CM_ROOT_DIR");return r&&r.trim()?[r.trim()]:[]}async function u(e){let r=(0,s.promisify)(o.exec);try{let{stdout:t}=await r("git worktree list",{cwd:e}),o=function(e){if(!e||""===e.trim())return[];let r=e.trim().split("\n"),t=[];for(let e of r){let r=e.trim();if(!r)continue;let o=r.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(o){let[,e,r,s]=o;t.push({path:e.trim(),branch:s||`detached-${r}`,commit:r})}}return t}(t),s=i().resolve(e),n=i().basename(s);return o.map(e=>({id:function(e,r){if(!e)return"";let t=e=>e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),o=t(e);if(r){let e=t(r);return`${e}-${o}`}return o}(e.branch,n),name:e.branch,path:i().resolve(e.path),repositoryPath:s,repositoryName:n})).filter(e=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(r=>e.path.startsWith(r))?(console.warn(`Skipping potentially unsafe worktree path: ${e.path}`),!1):!(e.path.includes("\0")||e.path.includes(".."))||(console.warn(`Skipping path with potentially malicious characters: ${e.path}`),!1))}catch(t){let e=t instanceof Error?t.message:String(t),r=t.code;if(e?.includes("not a git repository")||128===r)return[];throw t}}async function l(e){let r=[];for(let t of e)try{console.log(`Scanning repository: ${t}`);let e=await u(t);r.push(...e),console.log(` Found ${e.length} worktree(s)`)}catch(e){console.error(`Error scanning repository ${t}:`,e)}return r}function _(e,r){for(let t of r)(0,a.ly)(e,t)}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,7425],()=>t(98165));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=3546,e.ids=[3546],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")},98165:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>m,patchFetch:()=>g,requestAsyncStorage:()=>h,routeModule:()=>c,serverHooks:()=>d,staticGenerationAsyncStorage:()=>f});var o={};t.r(o),t.d(o,{POST:()=>u});var s=t(49303),n=t(88716),i=t(60670),a=t(87070),p=t(97425),l=t(67722);async function u(){try{let e=(0,l.a$)();if(0===e.length)return a.NextResponse.json({error:"No repositories configured. Please set WORKTREE_REPOS or CM_ROOT_DIR environment variable."},{status:400});let r=await (0,l.Lj)(e),t=(0,p.n)();(0,l.h2)(t,r);let o=new Set(r.map(e=>e.repositoryPath));return a.NextResponse.json({success:!0,message:`Successfully synced ${r.length} worktree(s) from ${o.size} repository/repositories`,worktreeCount:r.length,repositoryCount:o.size,repositories:Array.from(o)},{status:200})}catch(r){console.error("Error syncing repositories:",r);let e=r instanceof Error?r.message:"Failed to sync repositories";return a.NextResponse.json({error:e},{status:500})}}let c=new s.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/repositories/sync/route",pathname:"/api/repositories/sync",filename:"route",bundlePath:"app/api/repositories/sync/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/repositories/sync/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:h,staticGenerationAsyncStorage:f,serverHooks:d}=c,m="/api/repositories/sync/route";function g(){return(0,i.patchFetch)({serverHooks:d,staticGenerationAsyncStorage:f})}},67722:(e,r,t)=>{t.d(r,{Lj:()=>c,a$:()=>l,e9:()=>u,h2:()=>h});var o=t(61282),s=t(21764),n=t(55315),i=t.n(n),a=t(75748),p=t(93346);function l(){let e=process.env.WORKTREE_REPOS;if(e&&e.trim())return e.split(",").map(e=>e.trim()).filter(e=>e.length>0);let r=(0,p.Hb)("CM_ROOT_DIR");return r&&r.trim()?[r.trim()]:[]}async function u(e){let r=(0,s.promisify)(o.exec);try{let{stdout:t}=await r("git worktree list",{cwd:e}),o=function(e){if(!e||""===e.trim())return[];let r=e.trim().split("\n"),t=[];for(let e of r){let r=e.trim();if(!r)continue;let o=r.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(o){let[,e,r,s]=o;t.push({path:e.trim(),branch:s||`detached-${r}`,commit:r})}}return t}(t),s=i().resolve(e),n=i().basename(s);return o.map(e=>({id:function(e,r){if(!e)return"";let t=e=>e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),o=t(e);if(r){let e=t(r);return`${e}-${o}`}return o}(e.branch,n),name:e.branch,path:i().resolve(e.path),repositoryPath:s,repositoryName:n})).filter(e=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(r=>e.path.startsWith(r))?(console.warn(`Skipping potentially unsafe worktree path: ${e.path}`),!1):!(e.path.includes("\0")||e.path.includes(".."))||(console.warn(`Skipping path with potentially malicious characters: ${e.path}`),!1))}catch(t){let e=t instanceof Error?t.message:String(t),r=t.code;if(e?.includes("not a git repository")||128===r)return[];throw t}}async function c(e){let r=[];for(let t of e)try{console.log(`Scanning repository: ${t}`);let e=await u(t);r.push(...e),console.log(` Found ${e.length} worktree(s)`)}catch(e){console.error(`Error scanning repository ${t}:`,e)}return r}function h(e,r){if(0===r.length)return;let t=new Map;for(let e of r){let r=e.repositoryPath||"";t.has(r)||t.set(r,[]),t.get(r).push(e)}for(let[r,o]of t){if(!r)continue;let t=(0,a.Pv)(e,r),s=new Set(o.map(e=>e.id)),n=t.filter(e=>!s.has(e));if(n.length>0){let t=(0,a.pM)(e,n);console.log(`Removed ${t.deletedCount} deleted worktree(s) from ${r}`)}for(let r of o)(0,a.ly)(e,r)}}}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[8948,5972,7425],()=>t(98165));module.exports=o})();
@@ -1 +1 @@
1
- {"groups":[{"category":"planning","label":"Planning","commands":[{"name":"design-policy","description":"アーキテクチャ設計、技術選定、設計判断を支援","category":"planning","model":"opus","filePath":".claude/commands/design-policy.md"},{"name":"issue-create","description":"Issue分割計画書からGitHub Issueを一括作成","category":"planning","model":"opus","filePath":".claude/commands/issue-create.md"},{"name":"issue-split","description":"FeatureをIssueに分割、依存関係整理","category":"planning","model":"opus","filePath":".claude/commands/issue-split.md"},{"name":"work-plan","description":"Issue単位の具体的な作業計画立案","category":"planning","model":"opus","filePath":".claude/commands/work-plan.md"}]},{"category":"development","label":"Development","commands":[{"name":"bug-fix","description":"不具合の調査・対策案提示・修正実施を完全自動化","category":"development","model":"opus","filePath":".claude/commands/bug-fix.md"},{"name":"refactoring","description":"コード品質改善、設計パターン適用、技術的負債解消","category":"development","model":"opus","filePath":".claude/commands/refactoring.md"},{"name":"tdd-impl","description":"テスト駆動開発で高品質コードを実装","category":"development","model":"opus","filePath":".claude/commands/tdd-impl.md"}]},{"category":"review","label":"Review","commands":[{"name":"acceptance-test","description":"Issue要件に基づく自動受入テスト実行","category":"review","model":"opus","filePath":".claude/commands/acceptance-test.md"},{"name":"architecture-review","description":"設計レビュー、リスク評価、改善提案","category":"review","model":"opus","filePath":".claude/commands/architecture-review.md"}]},{"category":"documentation","label":"Documentation","commands":[{"name":"progress-report","description":"開発進捗サマリ作成、ブロッカー報告","category":"documentation","model":"opus","filePath":".claude/commands/progress-report.md"}]},{"category":"workflow","label":"Workflow","commands":[{"name":"apply-review","description":"レビュー指摘事項を実装に反映","category":"workflow","model":"opus","filePath":".claude/commands/apply-review.md"},{"name":"create-pr","description":"Pull Request自動作成、タイトル・説明自動生成","category":"workflow","model":"opus","filePath":".claude/commands/create-pr.md"},{"name":"multi-stage-design-review","description":"設計書の4段階レビュー(通常→整合性→影響分析→セキュリティ)と指摘対応を自動実行","category":"workflow","model":"opus","filePath":".claude/commands/multi-stage-design-review.md"},{"name":"multi-stage-issue-review","description":"Issue記載内容の多段階レビュー(通常→影響範囲)×2回と指摘対応を自動実行","category":"workflow","model":"opus","filePath":".claude/commands/multi-stage-issue-review.md"},{"name":"pm-auto-design2dev","description":"設計レビューから実装完了まで完全自動化(設計レビュー→作業計画→TDD実装)","category":"workflow","model":"opus","filePath":".claude/commands/pm-auto-design2dev.md"},{"name":"pm-auto-dev","description":"Issue開発を完全自動化(TDD→テスト→報告)","category":"workflow","model":"opus","filePath":".claude/commands/pm-auto-dev.md"}]}]}
1
+ {"groups":[{"category":"planning","label":"Planning","commands":[{"name":"design-policy","description":"アーキテクチャ設計、技術選定、設計判断を支援","category":"planning","model":"opus","filePath":".claude/commands/design-policy.md"},{"name":"issue-create","description":"Issue分割計画書からGitHub Issueを一括作成","category":"planning","model":"opus","filePath":".claude/commands/issue-create.md"},{"name":"issue-split","description":"FeatureをIssueに分割、依存関係整理","category":"planning","model":"opus","filePath":".claude/commands/issue-split.md"},{"name":"work-plan","description":"Issue単位の具体的な作業計画立案","category":"planning","model":"opus","filePath":".claude/commands/work-plan.md"}]},{"category":"development","label":"Development","commands":[{"name":"bug-fix","description":"不具合の調査・対策案提示・修正実施を完全自動化","category":"development","model":"opus","filePath":".claude/commands/bug-fix.md"},{"name":"refactoring","description":"コード品質改善、設計パターン適用、技術的負債解消","category":"development","model":"opus","filePath":".claude/commands/refactoring.md"},{"name":"tdd-impl","description":"テスト駆動開発で高品質コードを実装","category":"development","model":"opus","filePath":".claude/commands/tdd-impl.md"}]},{"category":"review","label":"Review","commands":[{"name":"acceptance-test","description":"Issue要件に基づく自動受入テスト実行","category":"review","model":"opus","filePath":".claude/commands/acceptance-test.md"},{"name":"architecture-review","description":"設計レビュー、リスク評価、改善提案","category":"review","model":"opus","filePath":".claude/commands/architecture-review.md"}]},{"category":"documentation","label":"Documentation","commands":[{"name":"progress-report","description":"開発進捗サマリ作成、ブロッカー報告","category":"documentation","model":"opus","filePath":".claude/commands/progress-report.md"}]},{"category":"workflow","label":"Workflow","commands":[{"name":"apply-review","description":"レビュー指摘事項を実装に反映","category":"workflow","model":"opus","filePath":".claude/commands/apply-review.md"},{"name":"create-pr","description":"Pull Request自動作成、タイトル・説明自動生成","category":"workflow","model":"opus","filePath":".claude/commands/create-pr.md"},{"name":"multi-stage-design-review","description":"設計書の4段階レビュー(通常→整合性→影響分析→セキュリティ)と指摘対応を自動実行","category":"workflow","model":"opus","filePath":".claude/commands/multi-stage-design-review.md"},{"name":"multi-stage-issue-review","description":"Issue記載内容の多段階レビュー(通常→影響範囲)×2回と指摘対応を自動実行","category":"workflow","model":"opus","filePath":".claude/commands/multi-stage-issue-review.md"},{"name":"pm-auto-design2dev","description":"設計レビューから実装完了まで完全自動化(設計レビュー→作業計画→TDD実装)","category":"workflow","model":"opus","filePath":".claude/commands/pm-auto-design2dev.md"},{"name":"pm-auto-dev","description":"Issue開発を完全自動化(TDD→テスト→報告)","category":"workflow","model":"opus","filePath":".claude/commands/pm-auto-dev.md"},{"name":"worktree-cleanup","description":"","category":"workflow","filePath":".claude/commands/worktree-cleanup.md"},{"name":"worktree-setup","description":"","category":"workflow","filePath":".claude/commands/worktree-setup.md"}]}]}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=5695,e.ids=[5695],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")},80134:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>A,patchFetch:()=>h,requestAsyncStorage:()=>y,routeModule:()=>f,serverHooks:()=>g,staticGenerationAsyncStorage:()=>m});var n={};r.r(n),r.d(n,{GET:()=>x,POST:()=>b});var o=r(49303),s=r(88716),a=r(60670),u=r(87070),i=r(97425),p=r(75748),l=r(26063);function d(e){return{enabled:e?.enabled??!1,expiresAt:e?.enabled?e.expiresAt:null}}function c(e){let t=(0,i.n)();return(0,p.gU)(t,e)?null:u.NextResponse.json({error:`Worktree '${e}' not found`},{status:404})}async function x(e,{params:t}){try{let e=c(t.id);if(e)return e;let r=(0,l.bq)(t.id);return u.NextResponse.json(d(r))}catch(e){return console.error("Error getting auto-yes state:",e),u.NextResponse.json({error:"Failed to get auto-yes state"},{status:500})}}async function b(e,{params:t}){try{let r=c(t.id);if(r)return r;let n=await e.json();if("boolean"!=typeof n.enabled)return u.NextResponse.json({error:"enabled must be a boolean"},{status:400});let o=(0,l.bY)(t.id,n.enabled);return u.NextResponse.json(d(o))}catch(e){return console.error("Error setting auto-yes state:",e),u.NextResponse.json({error:"Failed to set auto-yes state"},{status:500})}}let f=new o.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/worktrees/[id]/auto-yes/route",pathname:"/api/worktrees/[id]/auto-yes",filename:"route",bundlePath:"app/api/worktrees/[id]/auto-yes/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/auto-yes/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:y,staticGenerationAsyncStorage:m,serverHooks:g}=f,A="/api/worktrees/[id]/auto-yes/route";function h(){return(0,a.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:m})}},26063:(e,t,r)=>{r.d(t,{bY:()=>s,bq:()=>o});let n=new Map;function o(e){let t=n.get(e);if(!t)return null;if(Date.now()>t.expiresAt){let r={...t,enabled:!1};return n.set(e,r),r}return t}function s(e,t){if(t){let t=Date.now(),r={enabled:!0,enabledAt:t,expiresAt:t+36e5};return n.set(e,r),r}{let t=n.get(e),r={enabled:!1,enabledAt:t?.enabledAt??0,expiresAt:t?.expiresAt??0};return n.set(e,r),r}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[8948,5972,7425],()=>r(80134));module.exports=n})();
1
+ "use strict";(()=>{var e={};e.id=5695,e.ids=[5695],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")},80134:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>y,patchFetch:()=>A,requestAsyncStorage:()=>w,routeModule:()=>x,serverHooks:()=>v,staticGenerationAsyncStorage:()=>b});var n={};r.r(n),r.d(n,{GET:()=>m,POST:()=>g});var o=r(49303),s=r(88716),a=r(60670),i=r(87070),u=r(97425),l=r(75748),d=r(60667);let p=["claude","codex","gemini"];function c(e,t){let r={enabled:e?.enabled??!1,expiresAt:e?.enabled?e.expiresAt:null};return void 0!==t&&(r.pollingStarted=t),r}function f(e){let t=(0,u.n)();return(0,l.gU)(t,e)?null:i.NextResponse.json({error:`Worktree '${e}' not found`},{status:404})}async function m(e,{params:t}){try{let e=f(t.id);if(e)return e;let r=(0,d.bq)(t.id);return i.NextResponse.json(c(r))}catch(e){return console.error("Error getting auto-yes state:",e),i.NextResponse.json({error:"Failed to get auto-yes state"},{status:500})}}async function g(e,{params:t}){try{var r;let n=f(t.id);if(n)return n;let o=await e.json();if("boolean"!=typeof o.enabled)return i.NextResponse.json({error:"enabled must be a boolean"},{status:400});let s=(r=o.cliToolId)&&p.includes(r)?o.cliToolId:"claude",a=(0,d.bY)(t.id,o.enabled),u=!1;if(o.enabled){let e=(0,d.w)(t.id,s);u=e.started,e.started||console.warn(`[Auto-Yes API] Polling not started: ${e.reason}`)}else(0,d.Qz)(t.id);return i.NextResponse.json(c(a,u))}catch(e){return console.error("Error setting auto-yes state:",e),i.NextResponse.json({error:"Failed to set auto-yes state"},{status:500})}}let x=new o.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/worktrees/[id]/auto-yes/route",pathname:"/api/worktrees/[id]/auto-yes",filename:"route",bundlePath:"app/api/worktrees/[id]/auto-yes/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/auto-yes/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:w,staticGenerationAsyncStorage:b,serverHooks:v}=x,y="/api/worktrees/[id]/auto-yes/route";function A(){return(0,a.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:b})}},60667:(e,t,r)=>{r.d(t,{bq:()=>c,gf:()=>m,bY:()=>f,w:()=>w,Qz:()=>b});var n=r(89194),o=r(63661),s=r(10927),a=r(97213),i=r(19377);let u=/^[a-zA-Z0-9_-]+$/,l=new Map,d=new Map;function p(e){return Date.now()>e.expiresAt}function c(e){let t=l.get(e);if(!t)return null;if(p(t)){let r={...t,enabled:!1};return l.set(e,r),r}return t}function f(e,t){if(t){let t=Date.now(),r={enabled:!0,enabledAt:t,expiresAt:t+36e5};return l.set(e,r),r}{let t=l.get(e),r={enabled:!1,enabledAt:t?.enabledAt??0,expiresAt:t?.expiresAt??0};return l.set(e,r),r}}function m(e){let t=d.get(e);return t?.lastServerResponseTimestamp??null}async function g(e,t){if(!d.get(e))return;let r=c(e);if(!r?.enabled||p(r)){b(e);return}try{let r=await (0,n.NA)(e,t,5e3),u=(0,i.vp)(r),l=(0,o.F)(u);if(!l.isPrompt||!l.promptData){x(e,t);return}let p=function(e){if("yes_no"===e.type)return"y";if("multiple_choice"===e.type){let t=e.options.find(e=>e.isDefault)??e.options[0];return!t||t.requiresTextInput?null:t.number.toString()}return null}(l.promptData);if(null===p){x(e,t);return}let c=a.g.getInstance().getTool(t).getSessionName(e);await (0,s.Is)(c,p,!1),await new Promise(e=>setTimeout(e,100)),await (0,s.Is)(c,"",!0),function(e,t){let r=d.get(e);r&&(r.lastServerResponseTimestamp=t)}(e,Date.now()),function(e){let t=d.get(e);t&&(t.consecutiveErrors=0,t.currentInterval=2e3)}(e),console.info(`[Auto-Yes Poller] Sent response for worktree: ${e}`)}catch(r){!function(e){let t=d.get(e);if(t){var r;t.consecutiveErrors++,t.currentInterval=(r=t.consecutiveErrors)<5?2e3:Math.min(2e3*Math.pow(2,r-5+1),6e4)}}(e);let t=r instanceof Error?r.message:"Unknown error";console.warn(`[Auto-Yes Poller] Error for worktree ${e}: ${t}`)}x(e,t)}function x(e,t){let r=d.get(e);r&&(r.timerId=setTimeout(()=>{g(e,t)},r.currentInterval))}function w(e,t){if(!(e&&0!==e.length&&u.test(e)))return{started:!1,reason:"invalid worktree ID"};let r=c(e);if(!r?.enabled)return{started:!1,reason:"auto-yes not enabled"};let n=d.has(e);if(!n&&d.size>=50)return{started:!1,reason:"max concurrent pollers reached"};n&&b(e);let o={timerId:null,cliToolId:t,consecutiveErrors:0,currentInterval:2e3,lastServerResponseTimestamp:null};return d.set(e,o),o.timerId=setTimeout(()=>{g(e,t)},2e3),console.info(`[Auto-Yes Poller] Started for worktree: ${e}, cliTool: ${t}`),{started:!0}}function b(e){let t=d.get(e);t&&(t.timerId&&clearTimeout(t.timerId),d.delete(e),console.info(`[Auto-Yes Poller] Stopped for worktree: ${e}`))}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[8948,5972,7425,7213,1528],()=>r(80134));module.exports=n})();
@@ -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/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/1528.js","../../../../../chunks/5972.js","../../../../../chunks/7213.js","../../../../../chunks/7425.js","../../../../../chunks/8948.js","../../../../../webpack-runtime.js"]}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=3096,e.ids=[3096],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")},37514:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>I,patchFetch:()=>h,requestAsyncStorage:()=>c,routeModule:()=>p,serverHooks:()=>m,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{PATCH:()=>d});var s=t(49303),i=t(88716),n=t(60670),a=t(87070),u=t(97425),l=t(75748);async function d(e,{params:r}){try{let t=(0,u.n)(),o=(0,l.gU)(t,r.id);if(!o)return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let s=await e.json();if(!s.cliToolId)return a.NextResponse.json({error:"CLI tool ID is required"},{status:400});let i=["claude","codex","gemini"];if(!i.includes(s.cliToolId))return a.NextResponse.json({error:`Invalid CLI tool ID: ${s.cliToolId}. Valid values are: ${i.join(", ")}`},{status:400});let n={...o,cliToolId:s.cliToolId,updatedAt:new Date};return(0,l.ly)(t,n),a.NextResponse.json(n,{status:200})}catch(e){return console.error("Error updating CLI tool:",e),a.NextResponse.json({error:"Failed to update CLI tool"},{status:500})}}let p=new s.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/cli-tool/route",pathname:"/api/worktrees/[id]/cli-tool",filename:"route",bundlePath:"app/api/worktrees/[id]/cli-tool/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/cli-tool/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:x,serverHooks:m}=p,I="/api/worktrees/[id]/cli-tool/route";function h(){return(0,n.patchFetch)({serverHooks:m,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(37514));module.exports=o})();
1
+ "use strict";(()=>{var e={};e.id=3096,e.ids=[3096],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")},37514:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>I,patchFetch:()=>h,requestAsyncStorage:()=>c,routeModule:()=>p,serverHooks:()=>m,staticGenerationAsyncStorage:()=>x});var o={};t.r(o),t.d(o,{PATCH:()=>d});var s=t(49303),i=t(88716),n=t(60670),a=t(87070),u=t(97425),l=t(75748);async function d(e,{params:r}){try{let t=(0,u.n)(),o=(0,l.gU)(t,r.id);if(!o)return a.NextResponse.json({error:`Worktree '${r.id}' not found`},{status:404});let s=await e.json();if(!s.cliToolId)return a.NextResponse.json({error:"CLI tool ID is required"},{status:400});let i=["claude","codex","gemini"];if(!i.includes(s.cliToolId))return a.NextResponse.json({error:`Invalid CLI tool ID: ${s.cliToolId}. Valid values are: ${i.join(", ")}`},{status:400});let n={...o,cliToolId:s.cliToolId,updatedAt:new Date};return(0,l.ly)(t,n),a.NextResponse.json(n,{status:200})}catch(e){return console.error("Error updating CLI tool:",e),a.NextResponse.json({error:"Failed to update CLI tool"},{status:500})}}let p=new s.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/cli-tool/route",pathname:"/api/worktrees/[id]/cli-tool",filename:"route",bundlePath:"app/api/worktrees/[id]/cli-tool/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/cli-tool/route.ts",nextConfigOutput:"",userland:o}),{requestAsyncStorage:c,staticGenerationAsyncStorage:x,serverHooks:m}=p,I="/api/worktrees/[id]/cli-tool/route";function h(){return(0,n.patchFetch)({serverHooks:m,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(37514));module.exports=o})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=1991,e.ids=[1991],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},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")},26683:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>q,patchFetch:()=>k,requestAsyncStorage:()=>b,routeModule:()=>f,serverHooks:()=>A,staticGenerationAsyncStorage:()=>w});var n={};r.r(n),r.d(n,{GET:()=>h});var i=r(49303),o=r(88716),u=r(60670),s=r(87070),a=r(97425),p=r(75748),l=r(63661),d=r(97213),c=r(89194),g=r(19377),x=r(26063);let m=["claude","codex","gemini"];async function h(e,{params:t}){try{let r=(0,a.n)(),n=(0,p.gU)(r,t.id);if(!n)return s.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let i=new URL(e.url).searchParams.get("cliTool"),o=i&&m.includes(i)?i:n.cliToolId||"claude",u=d.g.getInstance().getTool(o);if(!await u.isRunning(t.id))return s.NextResponse.json({isRunning:!1,content:"",lineCount:0,cliToolId:o},{status:200});let h=(0,p.zl)(r,t.id,o),f=h?.lastCapturedLine||0,b=await (0,c.NA)(t.id,o,1e4),w=b.split("\n"),A=w.length,q=w.slice(Math.max(0,f)).join("\n"),k=w.map(e=>(0,g.vp)(e)).filter(e=>""!==e.trim()).slice(-15).join("\n"),v=(0,g.vp)(b),R=(0,l.F)(v),j=R.isPrompt,C=!j&&(0,g.Wg)(o,k),P=w.slice(-100).join("\n"),M=(0,x.bq)(t.id);return s.NextResponse.json({isRunning:!0,cliToolId:o,content:q,fullOutput:b,realtimeSnippet:P,lineCount:A,lastCapturedLine:f,isComplete:j,isGenerating:C,thinking:C,thinkingMessage:C?"Claude is thinking...":null,isPromptWaiting:j,promptData:j?R.promptData:null,autoYes:{enabled:M?.enabled??!1,expiresAt:M?.enabled?M.expiresAt:null}})}catch(e){return console.error("Error getting current output:",e),s.NextResponse.json({error:"Failed to get current output"},{status:500})}}let f=new i.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/current-output/route",pathname:"/api/worktrees/[id]/current-output",filename:"route",bundlePath:"app/api/worktrees/[id]/current-output/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/current-output/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:b,staticGenerationAsyncStorage:w,serverHooks:A}=f,q="/api/worktrees/[id]/current-output/route";function k(){return(0,u.patchFetch)({serverHooks:A,staticGenerationAsyncStorage:w})}},26063:(e,t,r)=>{r.d(t,{bY:()=>o,bq:()=>i});let n=new Map;function i(e){let t=n.get(e);if(!t)return null;if(Date.now()>t.expiresAt){let r={...t,enabled:!1};return n.set(e,r),r}return t}function o(e,t){if(t){let t=Date.now(),r={enabled:!0,enabledAt:t,expiresAt:t+36e5};return n.set(e,r),r}{let t=n.get(e),r={enabled:!1,enabledAt:t?.enabledAt??0,expiresAt:t?.expiresAt??0};return n.set(e,r),r}}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[8948,5972,7425,7213,1528],()=>r(26683));module.exports=n})();
1
+ "use strict";(()=>{var e={};e.id=1991,e.ids=[1991],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},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")},26683:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>b,patchFetch:()=>k,requestAsyncStorage:()=>v,routeModule:()=>x,serverHooks:()=>A,staticGenerationAsyncStorage:()=>h});var n={};r.r(n),r.d(n,{GET:()=>w});var o=r(49303),i=r(88716),s=r(60670),u=r(87070),a=r(97425),l=r(75748),p=r(63661),c=r(97213),d=r(89194),m=r(19377),f=r(60667);let g=["claude","codex","gemini"];async function w(e,{params:t}){try{let r=(0,a.n)(),n=(0,l.gU)(r,t.id);if(!n)return u.NextResponse.json({error:`Worktree '${t.id}' not found`},{status:404});let o=new URL(e.url).searchParams.get("cliTool"),i=o&&g.includes(o)?o:n.cliToolId||"claude",s=c.g.getInstance().getTool(i);if(!await s.isRunning(t.id))return u.NextResponse.json({isRunning:!1,content:"",lineCount:0,cliToolId:i},{status:200});let w=(0,l.zl)(r,t.id,i),x=w?.lastCapturedLine||0,v=await (0,d.NA)(t.id,i,1e4),h=v.split("\n"),A=h.length,b=h.slice(Math.max(0,x)).join("\n"),k=h.map(e=>(0,m.vp)(e)).filter(e=>""!==e.trim()).slice(-15).join("\n"),I=(0,m.vp)(v),q=(0,p.F)(I),T=q.isPrompt,P=!T&&(0,m.Wg)(i,k),R=h.slice(-100).join("\n"),y=(0,f.bq)(t.id),j=(0,f.gf)(t.id);return u.NextResponse.json({isRunning:!0,cliToolId:i,content:b,fullOutput:v,realtimeSnippet:R,lineCount:A,lastCapturedLine:x,isComplete:T,isGenerating:P,thinking:P,thinkingMessage:P?"Claude is thinking...":null,isPromptWaiting:T,promptData:T?q.promptData:null,autoYes:{enabled:y?.enabled??!1,expiresAt:y?.enabled?y.expiresAt:null},lastServerResponseTimestamp:j})}catch(e){return console.error("Error getting current output:",e),u.NextResponse.json({error:"Failed to get current output"},{status:500})}}let x=new o.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/worktrees/[id]/current-output/route",pathname:"/api/worktrees/[id]/current-output",filename:"route",bundlePath:"app/api/worktrees/[id]/current-output/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/current-output/route.ts",nextConfigOutput:"",userland:n}),{requestAsyncStorage:v,staticGenerationAsyncStorage:h,serverHooks:A}=x,b="/api/worktrees/[id]/current-output/route";function k(){return(0,s.patchFetch)({serverHooks:A,staticGenerationAsyncStorage:h})}},60667:(e,t,r)=>{r.d(t,{bq:()=>d,gf:()=>f,bY:()=>m,w:()=>x,Qz:()=>v});var n=r(89194),o=r(63661),i=r(10927),s=r(97213),u=r(19377);let a=/^[a-zA-Z0-9_-]+$/,l=new Map,p=new Map;function c(e){return Date.now()>e.expiresAt}function d(e){let t=l.get(e);if(!t)return null;if(c(t)){let r={...t,enabled:!1};return l.set(e,r),r}return t}function m(e,t){if(t){let t=Date.now(),r={enabled:!0,enabledAt:t,expiresAt:t+36e5};return l.set(e,r),r}{let t=l.get(e),r={enabled:!1,enabledAt:t?.enabledAt??0,expiresAt:t?.expiresAt??0};return l.set(e,r),r}}function f(e){let t=p.get(e);return t?.lastServerResponseTimestamp??null}async function g(e,t){if(!p.get(e))return;let r=d(e);if(!r?.enabled||c(r)){v(e);return}try{let r=await (0,n.NA)(e,t,5e3),a=(0,u.vp)(r),l=(0,o.F)(a);if(!l.isPrompt||!l.promptData){w(e,t);return}let c=function(e){if("yes_no"===e.type)return"y";if("multiple_choice"===e.type){let t=e.options.find(e=>e.isDefault)??e.options[0];return!t||t.requiresTextInput?null:t.number.toString()}return null}(l.promptData);if(null===c){w(e,t);return}let d=s.g.getInstance().getTool(t).getSessionName(e);await (0,i.Is)(d,c,!1),await new Promise(e=>setTimeout(e,100)),await (0,i.Is)(d,"",!0),function(e,t){let r=p.get(e);r&&(r.lastServerResponseTimestamp=t)}(e,Date.now()),function(e){let t=p.get(e);t&&(t.consecutiveErrors=0,t.currentInterval=2e3)}(e),console.info(`[Auto-Yes Poller] Sent response for worktree: ${e}`)}catch(r){!function(e){let t=p.get(e);if(t){var r;t.consecutiveErrors++,t.currentInterval=(r=t.consecutiveErrors)<5?2e3:Math.min(2e3*Math.pow(2,r-5+1),6e4)}}(e);let t=r instanceof Error?r.message:"Unknown error";console.warn(`[Auto-Yes Poller] Error for worktree ${e}: ${t}`)}w(e,t)}function w(e,t){let r=p.get(e);r&&(r.timerId=setTimeout(()=>{g(e,t)},r.currentInterval))}function x(e,t){if(!(e&&0!==e.length&&a.test(e)))return{started:!1,reason:"invalid worktree ID"};let r=d(e);if(!r?.enabled)return{started:!1,reason:"auto-yes not enabled"};let n=p.has(e);if(!n&&p.size>=50)return{started:!1,reason:"max concurrent pollers reached"};n&&v(e);let o={timerId:null,cliToolId:t,consecutiveErrors:0,currentInterval:2e3,lastServerResponseTimestamp:null};return p.set(e,o),o.timerId=setTimeout(()=>{g(e,t)},2e3),console.info(`[Auto-Yes Poller] Started for worktree: ${e}, cliTool: ${t}`),{started:!0}}function v(e){let t=p.get(e);t&&(t.timerId&&clearTimeout(t.timerId),p.delete(e),console.info(`[Auto-Yes Poller] Stopped for worktree: ${e}`))}}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[8948,5972,7425,7213,1528],()=>r(26683));module.exports=n})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=9325,e.ids=[9325],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},55315:e=>{e.exports=require("path")},37999:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>w,patchFetch:()=>x,requestAsyncStorage:()=>O,routeModule:()=>y,serverHooks:()=>v,staticGenerationAsyncStorage:()=>A});var i={};t.r(i),t.d(i,{DELETE:()=>h,GET:()=>g,PATCH:()=>L,POST:()=>_,PUT:()=>T});var n=t(49303),o=t(88716),a=t(60670),s=t(87070),c=t(97425),l=t(75748),u=t(55315),p=t(57440),d=t(68585),E=t(39365),f=t(81481),I=t(20629);let N={FILE_NOT_FOUND:404,WORKTREE_NOT_FOUND:404,PERMISSION_DENIED:403,NOT_EDITABLE:403,PROTECTED_DIRECTORY:403,INVALID_PATH:400,INVALID_REQUEST:400,INVALID_NAME:400,INVALID_CONTENT:400,DIRECTORY_NOT_EMPTY:400,DELETE_LIMIT_EXCEEDED:400,FILE_EXISTS:409,DISK_FULL:507,INTERNAL_ERROR:500,INVALID_EXTENSION:400,INVALID_MIME_TYPE:400,INVALID_MAGIC_BYTES:400,FILE_TOO_LARGE:413,INVALID_FILENAME:400,INVALID_FILE_CONTENT:400};function m(e,r,t=500){let i=N[e]??t;return s.NextResponse.json({success:!1,error:{code:e,message:r}},{status:i})}async function R(e,r){let t=(0,c.n)(),i=(0,l.gU)(t,e);if(!i)return{error:m("WORKTREE_NOT_FOUND","Worktree not found")};let n=r.join("/"),o=(0,u.normalize)(n);return(0,p.j)(o,i.path)?{worktree:i,relativePath:o}:{error:m("INVALID_PATH","Invalid file path")}}async function g(e,{params:r}){try{let e=await R(r.id,r.path);if("error"in e)return e.error;let{worktree:t,relativePath:i}=e,n=i.split(".").pop()||"",o=(0,u.extname)(i).toLowerCase();if((0,f.Db)(o)){let e=(0,u.join)(t.path,i);try{let r=await (0,I.readFile)(e),a=(0,f.gp)(o,r);if(!a.valid){if(a.error?.includes("5MB"))return m("FILE_TOO_LARGE",a.error);if(a.error?.includes("magic bytes"))return m("INVALID_MAGIC_BYTES",a.error);return m("INVALID_FILE_CONTENT",a.error||"Invalid image content")}let c=(0,f.Kc)(o),l=r.toString("base64"),u=`data:${c};base64,${l}`;return s.NextResponse.json({success:!0,path:i,content:u,extension:n,worktreePath:t.path,isImage:!0,mimeType:c})}catch(e){if("ENOENT"===e.code)return m("FILE_NOT_FOUND","File not found");throw e}}let a=await (0,d.O2)(t.path,i);if(!a.success)return m(a.error?.code||"INTERNAL_ERROR",a.error?.message||"Failed to read file");return s.NextResponse.json({success:!0,path:i,content:a.content,extension:n,worktreePath:t.path})}catch(e){return console.error("Error reading file:",e),m("INTERNAL_ERROR","Failed to read file")}}async function T(e,{params:r}){try{let t=await R(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t;if(!(0,d.rN)(n))return m("NOT_EDITABLE","File type is not editable");let{content:o}=await e.json();if(void 0===o)return m("INVALID_REQUEST","Content is required");let a=(0,u.extname)(n).toLowerCase(),c=(0,E.ty)(a,o);if(!c.valid)return m("INVALID_CONTENT",c.error||"Invalid content");let l=await (0,d.xH)(i.path,n,o);if(!l.success)return m(l.error?.code||"INTERNAL_ERROR",l.error?.message||"Failed to update file");return s.NextResponse.json({success:!0,path:n})}catch(e){return console.error("Error updating file:",e),m("INTERNAL_ERROR","Failed to update file")}}async function _(e,{params:r}){try{let t=await R(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{type:o,content:a}=await e.json();if(!o||!["file","directory"].includes(o))return m("INVALID_REQUEST",'Type must be "file" or "directory"');if("file"===o&&void 0!==a){let e=(0,u.extname)(n).toLowerCase();if((0,E.ZI)(e)){let r=(0,E.ty)(e,a);if(!r.valid)return m("INVALID_CONTENT",r.error||"Invalid content")}}let c=await (0,d.D5)(i.path,n,o,a);if(!c.success)return m(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to create file/directory");return s.NextResponse.json({success:!0,path:n},{status:201})}catch(e){return console.error("Error creating file/directory:",e),m("INTERNAL_ERROR","Failed to create file/directory")}}async function h(e,{params:r}){try{let t=await R(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{searchParams:o}=new URL(e.url),a="true"===o.get("recursive"),c=await (0,d.jN)(i.path,n,a);if(!c.success)return m(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to delete file/directory");return s.NextResponse.json({success:!0})}catch(e){return console.error("Error deleting file/directory:",e),m("INTERNAL_ERROR","Failed to delete file/directory")}}async function L(e,{params:r}){try{let t=await R(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{action:o,newName:a}=await e.json();if("rename"!==o)return m("INVALID_REQUEST",'Unknown action. Supported: "rename"');if(!a||"string"!=typeof a)return m("INVALID_REQUEST","newName is required");let c=await (0,d.nz)(i.path,n,a);if(!c.success)return m(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to rename file/directory");return s.NextResponse.json({success:!0,path:c.path})}catch(e){return console.error("Error renaming file/directory:",e),m("INTERNAL_ERROR","Failed to rename file/directory")}}let y=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/files/[...path]/route",pathname:"/api/worktrees/[id]/files/[...path]",filename:"route",bundlePath:"app/api/worktrees/[id]/files/[...path]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/files/[...path]/route.ts",nextConfigOutput:"",userland:i}),{requestAsyncStorage:O,staticGenerationAsyncStorage:A,serverHooks:v}=y,w="/api/worktrees/[id]/files/[...path]/route";function x(){return(0,a.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:A})}},81481:(e,r,t)=>{t.d(r,{Db:()=>s,Kc:()=>a,P7:()=>i,gp:()=>c});let i=[".png",".jpg",".jpeg",".gif",".webp",".svg"],n=[{extension:".png",mimeType:"image/png",magicBytes:[137,80,78,71]},{extension:".jpg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".jpeg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".gif",mimeType:"image/gif",magicBytes:[71,73,70,56]},{extension:".webp",mimeType:"image/webp",magicBytes:[82,73,70,70]},{extension:".svg",mimeType:"image/svg+xml"}];function o(e){return e?e.startsWith(".")?e.toLowerCase():"."+e.toLowerCase():""}function a(e){let r=o(e),t=n.find(e=>e.extension===r);return t?.mimeType||"application/octet-stream"}function s(e){if(!e)return!1;let r=o(e);return i.includes(r)}function c(e,r){if(r.length>5242880)return{valid:!1,error:"File size exceeds 5MB limit"};if(".svg"===o(e)){var t;return(t=r.toString("utf-8")).includes("<svg")||t.startsWith("<?xml")?/<script[\s>]/i.test(t)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(t)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(t)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(t)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(e,r){let t=o(e),i=n.find(e=>e.extension===t);if(!i?.magicBytes)return".svg"===t;let a=i.magicBytesOffset||0;return!(r.length<a+i.magicBytes.length)&&i.magicBytes.every((e,t)=>r[a+t]===e)}(e,r)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}}};var r=require("../../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),i=r.X(0,[8948,5972,7425,8585],()=>t(37999));module.exports=i})();
1
+ "use strict";(()=>{var e={};e.id=9325,e.ids=[9325],e.modules={85890:e=>{e.exports=require("better-sqlite3")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},84770:e=>{e.exports=require("crypto")},92048:e=>{e.exports=require("fs")},20629:e=>{e.exports=require("fs/promises")},19801:e=>{e.exports=require("os")},55315:e=>{e.exports=require("path")},37999:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>x,patchFetch:()=>w,requestAsyncStorage:()=>O,routeModule:()=>y,serverHooks:()=>v,staticGenerationAsyncStorage:()=>A});var i={};t.r(i),t.d(i,{DELETE:()=>h,GET:()=>g,PATCH:()=>L,POST:()=>_,PUT:()=>T});var n=t(49303),o=t(88716),a=t(60670),s=t(87070),c=t(97425),l=t(75748),u=t(55315),p=t(57440),d=t(68585),E=t(39365),f=t(81481),I=t(20629);let N={FILE_NOT_FOUND:404,WORKTREE_NOT_FOUND:404,PERMISSION_DENIED:403,NOT_EDITABLE:403,PROTECTED_DIRECTORY:403,INVALID_PATH:400,INVALID_REQUEST:400,INVALID_NAME:400,INVALID_CONTENT:400,DIRECTORY_NOT_EMPTY:400,DELETE_LIMIT_EXCEEDED:400,FILE_EXISTS:409,DISK_FULL:507,INTERNAL_ERROR:500,INVALID_EXTENSION:400,INVALID_MIME_TYPE:400,INVALID_MAGIC_BYTES:400,FILE_TOO_LARGE:413,INVALID_FILENAME:400,INVALID_FILE_CONTENT:400};function m(e,r,t=500){let i=N[e]??t;return s.NextResponse.json({success:!1,error:{code:e,message:r}},{status:i})}async function R(e,r){let t=(0,c.n)(),i=(0,l.gU)(t,e);if(!i)return{error:m("WORKTREE_NOT_FOUND","Worktree not found")};let n=r.join("/"),o=(0,u.normalize)(n);return(0,p.j)(o,i.path)?{worktree:i,relativePath:o}:{error:m("INVALID_PATH","Invalid file path")}}async function g(e,{params:r}){try{let e=await R(r.id,r.path);if("error"in e)return e.error;let{worktree:t,relativePath:i}=e,n=i.split(".").pop()||"",o=(0,u.extname)(i).toLowerCase();if((0,f.Db)(o)){let e=(0,u.join)(t.path,i);try{let r=await (0,I.readFile)(e),a=(0,f.gp)(o,r);if(!a.valid){if(a.error?.includes("5MB"))return m("FILE_TOO_LARGE",a.error);if(a.error?.includes("magic bytes"))return m("INVALID_MAGIC_BYTES",a.error);return m("INVALID_FILE_CONTENT",a.error||"Invalid image content")}let c=(0,f.Kc)(o),l=r.toString("base64"),u=`data:${c};base64,${l}`;return s.NextResponse.json({success:!0,path:i,content:u,extension:n,worktreePath:t.path,isImage:!0,mimeType:c})}catch(e){if("ENOENT"===e.code)return m("FILE_NOT_FOUND","File not found");throw e}}let a=await (0,d.O2)(t.path,i);if(!a.success)return m(a.error?.code||"INTERNAL_ERROR",a.error?.message||"Failed to read file");return s.NextResponse.json({success:!0,path:i,content:a.content,extension:n,worktreePath:t.path})}catch(e){return console.error("Error reading file:",e),m("INTERNAL_ERROR","Failed to read file")}}async function T(e,{params:r}){try{let t=await R(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t;if(!(0,d.rN)(n))return m("NOT_EDITABLE","File type is not editable");let{content:o}=await e.json();if(void 0===o)return m("INVALID_REQUEST","Content is required");let a=(0,u.extname)(n).toLowerCase(),c=(0,E.ty)(a,o);if(!c.valid)return m("INVALID_CONTENT",c.error||"Invalid content");let l=await (0,d.xH)(i.path,n,o);if(!l.success)return m(l.error?.code||"INTERNAL_ERROR",l.error?.message||"Failed to update file");return s.NextResponse.json({success:!0,path:n})}catch(e){return console.error("Error updating file:",e),m("INTERNAL_ERROR","Failed to update file")}}async function _(e,{params:r}){try{let t=await R(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{type:o,content:a}=await e.json();if(!o||!["file","directory"].includes(o))return m("INVALID_REQUEST",'Type must be "file" or "directory"');if("file"===o&&void 0!==a){let e=(0,u.extname)(n).toLowerCase();if((0,E.ZI)(e)){let r=(0,E.ty)(e,a);if(!r.valid)return m("INVALID_CONTENT",r.error||"Invalid content")}}let c=await (0,d.D5)(i.path,n,o,a);if(!c.success)return m(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to create file/directory");return s.NextResponse.json({success:!0,path:n},{status:201})}catch(e){return console.error("Error creating file/directory:",e),m("INTERNAL_ERROR","Failed to create file/directory")}}async function h(e,{params:r}){try{let t=await R(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{searchParams:o}=new URL(e.url),a="true"===o.get("recursive"),c=await (0,d.jN)(i.path,n,a);if(!c.success)return m(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to delete file/directory");return s.NextResponse.json({success:!0})}catch(e){return console.error("Error deleting file/directory:",e),m("INTERNAL_ERROR","Failed to delete file/directory")}}async function L(e,{params:r}){try{let t=await R(r.id,r.path);if("error"in t)return t.error;let{worktree:i,relativePath:n}=t,{action:o,newName:a}=await e.json();if("rename"!==o)return m("INVALID_REQUEST",'Unknown action. Supported: "rename"');if(!a||"string"!=typeof a)return m("INVALID_REQUEST","newName is required");let c=await (0,d.nz)(i.path,n,a);if(!c.success)return m(c.error?.code||"INTERNAL_ERROR",c.error?.message||"Failed to rename file/directory");return s.NextResponse.json({success:!0,path:c.path})}catch(e){return console.error("Error renaming file/directory:",e),m("INTERNAL_ERROR","Failed to rename file/directory")}}let y=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worktrees/[id]/files/[...path]/route",pathname:"/api/worktrees/[id]/files/[...path]",filename:"route",bundlePath:"app/api/worktrees/[id]/files/[...path]/route"},resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/files/[...path]/route.ts",nextConfigOutput:"",userland:i}),{requestAsyncStorage:O,staticGenerationAsyncStorage:A,serverHooks:v}=y,x="/api/worktrees/[id]/files/[...path]/route";function w(){return(0,a.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:A})}},81481:(e,r,t)=>{t.d(r,{Db:()=>s,Kc:()=>a,P7:()=>i,gp:()=>c});let i=[".png",".jpg",".jpeg",".gif",".webp",".svg"],n=[{extension:".png",mimeType:"image/png",magicBytes:[137,80,78,71]},{extension:".jpg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".jpeg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".gif",mimeType:"image/gif",magicBytes:[71,73,70,56]},{extension:".webp",mimeType:"image/webp",magicBytes:[82,73,70,70]},{extension:".svg",mimeType:"image/svg+xml"}];function o(e){return e?e.startsWith(".")?e.toLowerCase():"."+e.toLowerCase():""}function a(e){let r=o(e),t=n.find(e=>e.extension===r);return t?.mimeType||"application/octet-stream"}function s(e){if(!e)return!1;let r=o(e);return i.includes(r)}function c(e,r){if(r.length>5242880)return{valid:!1,error:"File size exceeds 5MB limit"};if(".svg"===o(e)){var t;return(t=r.toString("utf-8")).includes("<svg")||t.startsWith("<?xml")?/<script[\s>]/i.test(t)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(t)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(t)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(t)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(e,r){let t=o(e),i=n.find(e=>e.extension===t);if(!i?.magicBytes)return".svg"===t;let a=i.magicBytesOffset||0;return!(r.length<a+i.magicBytes.length)&&i.magicBytes.every((e,t)=>r[a+t]===e)}(e,r)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}}};var r=require("../../../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),i=r.X(0,[8948,5972,7425,8585],()=>t(37999));module.exports=i})();
@@ -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,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>E,patchFetch:()=>h,requestAsyncStorage:()=>g,routeModule:()=>f,serverHooks:()=>w,staticGenerationAsyncStorage:()=>m});var n={};t.r(n),t.d(n,{POST:()=>x});var o=t(49303),i=t(88716),s=t(60670),a=t(87070),u=t(97425),p=t(75748),l=t(97213),c=t(43895);let d=(0,c.h)("interrupt");async function x(e,{params:r}){let{id:t}=await r,n=(0,c.Y)(),o=d.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 i=l.g.getInstance(),s=[];for(let e of n.cliToolId?[n.cliToolId]:["claude","codex","gemini"]){let r=i.getTool(e);if(await r.isRunning(t)){let n=r.getSessionName(t);o.debug("interrupt:sending",{cliToolId:e,sessionName:n}),await r.interrupt(t),s.push({cliToolId:e,sessionName:n}),o.info("interrupt:sent",{cliToolId:e,sessionName:n})}}if(0===s.length)return o.warn("interrupt:no_active_sessions"),a.NextResponse.json({error:"No active sessions found"},{status:404});return o.info("interrupt:success",{interruptedCount:s.length}),a.NextResponse.json({success:!0,message:`Interrupt sent to ${s.length} session(s)`,interrupted:s},{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 f=new o.AppRouteRouteModule({definition:{kind:i.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:g,staticGenerationAsyncStorage:m,serverHooks:w}=f,E="/api/worktrees/[id]/interrupt/route";function h(){return(0,s.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:m})}},43895:(e,r,t)=>{t.d(r,{Y:()=>u,h:()=>p});var n=t(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]"}],i=/password|secret|token|key|auth/i,s={debug:0,info:1,warn:2,error:3};function a(e,r,t,a,u){let p=(0,n.LI)().level;if(s[e]<s[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))i.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:i,data:s,worktreeId:a,cliToolId:u,requestId:p}=e,l=[a,u].filter(Boolean),c=l.length>0?` [${l.join(":")}]`:"",d=p?` (${p.slice(0,8)})`:"",x=s?` ${JSON.stringify(s)}`:"";return`[${r}] [${t.toUpperCase()}] [${o}]${c}${d} ${i}${x}`}({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 +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,7213,1528,9723],()=>s(38877));module.exports=t})();
@@ -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})();