commandmate 0.2.0 → 0.2.1

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 (62) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +9 -9
  3. package/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/cache/config.json +3 -3
  7. package/.next/cache/webpack/client-production/0.pack +0 -0
  8. package/.next/cache/webpack/client-production/1.pack +0 -0
  9. package/.next/cache/webpack/client-production/2.pack +0 -0
  10. package/.next/cache/webpack/client-production/index.pack +0 -0
  11. package/.next/cache/webpack/client-production/index.pack.old +0 -0
  12. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  13. package/.next/cache/webpack/server-production/0.pack +0 -0
  14. package/.next/cache/webpack/server-production/index.pack +0 -0
  15. package/.next/next-server.js.nft.json +1 -1
  16. package/.next/prerender-manifest.json +1 -1
  17. package/.next/required-server-files.json +1 -1
  18. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/_not-found.html +1 -1
  20. package/.next/server/app/_not-found.rsc +1 -1
  21. package/.next/server/app/api/repositories/excluded/route.js +8 -8
  22. package/.next/server/app/api/repositories/restore/route.js +7 -7
  23. package/.next/server/app/api/repositories/route.js +5 -5
  24. package/.next/server/app/api/repositories/sync/route.js +5 -5
  25. package/.next/server/app/api/slash-commands.body +1 -1
  26. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  27. package/.next/server/app/api/worktrees/[id]/capture/route.js +2 -2
  28. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  29. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  30. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  31. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  32. package/.next/server/app/api/worktrees/route.js +1 -1
  33. package/.next/server/app/index.html +1 -1
  34. package/.next/server/app/index.rsc +1 -1
  35. package/.next/server/app/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/worktrees/[id]/page.js +1 -1
  38. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/worktrees/[id]/simple-terminal/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  41. package/.next/server/app-paths-manifest.json +7 -7
  42. package/.next/server/chunks/5488.js +5 -5
  43. package/.next/server/chunks/7536.js +1 -1
  44. package/.next/server/chunks/9367.js +2 -2
  45. package/.next/server/functions-config-manifest.json +1 -1
  46. package/.next/server/pages/404.html +1 -1
  47. package/.next/server/pages/500.html +1 -1
  48. package/.next/server/server-reference-manifest.json +1 -1
  49. package/.next/static/chunks/app/worktrees/[id]/{page-d64624eb67af57c0.js → page-8bd88bdc29607413.js} +1 -1
  50. package/.next/trace +5 -5
  51. package/dist/server/server.js +25 -2
  52. package/dist/server/src/lib/auto-yes-manager.js +88 -7
  53. package/dist/server/src/lib/claude-poller.js +4 -0
  54. package/dist/server/src/lib/claude-session.js +48 -19
  55. package/dist/server/src/lib/cli-patterns.js +60 -4
  56. package/dist/server/src/lib/db-repository.js +482 -0
  57. package/dist/server/src/lib/prompt-detector.js +199 -109
  58. package/dist/server/src/lib/response-poller.js +73 -27
  59. package/dist/server/src/lib/tmux.js +48 -0
  60. package/package.json +1 -1
  61. /package/.next/static/{bdUePCj-b9Gv5okYGp49O → oUD-A998xeBoez6zsrTH3}/_buildManifest.js +0 -0
  62. /package/.next/static/{bdUePCj-b9Gv5okYGp49O → oUD-A998xeBoez6zsrTH3}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=5488,exports.ids=[5488],exports.modules={65488:(e,t,r)=>{r.d(t,{v:()=>g});var o=r(61282),s=r(92048),a=r(55315),n=r.n(a);class i{constructor(){}static getInstance(){return i.instance||(i.instance=new i),i.instance}normalize(e){let t=e.match(/^ssh:\/\/git@([^:\/]+)(:\d+)?\/(.+?)(\.git)?$/);if(t)return`https://${t[1]}/${t[3]}`.toLowerCase().replace(/\/$/,"");let r=e.match(/^git@([^:]+):(.+?)(\.git)?$/);return r?`https://${r[1]}/${r[2]}`.toLowerCase().replace(/\/$/,""):e.replace(/\.git\/?$/,"").replace(/\/$/,"").toLowerCase()}isSameRepository(e,t){return this.normalize(e)===this.normalize(t)}extractRepoName(e){let t=e.match(/^ssh:\/\/git@[^\/]+\/(.+?)(\.git)?$/);if(t){let e=t[1].split("/");return e[e.length-1]}let r=e.match(/:(.+?)(\.git)?$/);if(r&&e.startsWith("git@")){let e=r[1].split("/");return e[e.length-1]}let o=e.match(/\/([^\/]+?)(\.git)?$/);return o?o[1]:""}getUrlType(e){return e.startsWith("https://")?"https":e.startsWith("git@")||e.startsWith("ssh://")?"ssh":null}validate(e){if(!e||"string"!=typeof e||""===e.trim())return{valid:!1,error:"EMPTY_URL"};let t=e.trim();return t.startsWith("https://")?/^https:\/\/[^\/]+\/[^\/]+\/[^\/]+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:t.startsWith("git@")?/^git@[^:]+:.+\/.+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:t.startsWith("ssh://")&&/^ssh:\/\/git@[^\/]+(:\d+)?\/[^\/]+\/.+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}}}var l=r(57440),c=r(4709),d=r(67722);class u extends Error{constructor(e){super(e.message),this.name="CloneManagerError",this.category=e.category,this.code=e.code,this.recoverable=e.recoverable,this.suggestedAction=e.suggestedAction}}let p={EMPTY_URL:{category:"validation",code:"EMPTY_URL",message:"Clone URL is required",recoverable:!0,suggestedAction:"Please enter a valid git clone URL"},INVALID_URL_FORMAT:{category:"validation",code:"INVALID_URL_FORMAT",message:"Invalid URL format. Please use HTTPS or SSH URL.",recoverable:!0,suggestedAction:"Enter a valid URL like https://github.com/owner/repo or git@github.com:owner/repo"},DUPLICATE_CLONE_URL:{category:"validation",code:"DUPLICATE_CLONE_URL",message:"This repository is already registered",recoverable:!1,suggestedAction:"Use the existing repository instead"},CLONE_IN_PROGRESS:{category:"validation",code:"CLONE_IN_PROGRESS",message:"A clone operation is already in progress for this URL",recoverable:!1,suggestedAction:"Wait for the current clone to complete"},DIRECTORY_EXISTS:{category:"filesystem",code:"DIRECTORY_EXISTS",message:"Target directory already exists",recoverable:!0,suggestedAction:"Choose a different directory or remove the existing one"},INVALID_TARGET_PATH:{category:"validation",code:"INVALID_TARGET_PATH",message:"Target path is invalid or outside allowed directory",recoverable:!0,suggestedAction:"Use a path within the configured base directory"},AUTH_FAILED:{category:"auth",code:"AUTH_FAILED",message:"Authentication failed",recoverable:!0,suggestedAction:"Check your credentials or SSH keys"},NETWORK_ERROR:{category:"network",code:"NETWORK_ERROR",message:"Network error occurred",recoverable:!0,suggestedAction:"Check your internet connection and try again"},GIT_ERROR:{category:"git",code:"GIT_ERROR",message:"Git command failed",recoverable:!1,suggestedAction:"Check the error message for details"},CLONE_TIMEOUT:{category:"network",code:"CLONE_TIMEOUT",message:"Clone operation timed out",recoverable:!0,suggestedAction:"Try again or clone a smaller repository"}};class g{constructor(e,t={}){this.db=e,this.urlNormalizer=i.getInstance(),this.config={basePath:t.basePath||process.env.WORKTREE_BASE_PATH||"/tmp/repos",timeout:t.timeout||6e5},this.activeProcesses=new Map}validateCloneRequest(e){let t=this.urlNormalizer.validate(e);return t.valid?{valid:!0,normalizedUrl:this.urlNormalizer.normalize(e),repoName:this.urlNormalizer.extractRepoName(e)}:{valid:!1,error:p[t.error||"INVALID_URL_FORMAT"]}}checkDuplicateRepository(e){return(0,c.nb)(this.db,e)}checkActiveCloneJob(e){return(0,c.fC)(this.db,e)}createCloneJob(e){return(0,c.Bm)(this.db,e)}getTargetPath(e){return n().join(this.config.basePath,e)}async startCloneJob(e,t){let r=this.validateCloneRequest(e);if(!r.valid)return{success:!1,error:r.error};let o=r.normalizedUrl,a=r.repoName,n=this.checkDuplicateRepository(o);if(n)return{success:!1,error:{...p.DUPLICATE_CLONE_URL,message:`This repository is already registered as "${n.name}"`}};let i=this.checkActiveCloneJob(o);if(i)return{success:!1,jobId:i.id,error:p.CLONE_IN_PROGRESS};let c=t||this.getTargetPath(a);if(t&&!(0,l.j)(t,this.config.basePath))return{success:!1,error:{...p.INVALID_TARGET_PATH,message:`Target path must be within ${this.config.basePath}`}};if((0,s.existsSync)(c))return{success:!1,error:{...p.DIRECTORY_EXISTS,message:`Target directory already exists: ${c}`}};let d=this.createCloneJob({cloneUrl:e,normalizedCloneUrl:o,targetPath:c});return this.executeClone(d.id,e,c).catch(e=>{console.error(`[CloneManager] Clone failed for job ${d.id}:`,e)}),{success:!0,jobId:d.id}}async executeClone(e,t,r){(0,c.sN)(this.db,e,{status:"running",startedAt:new Date});let a=n().dirname(r);return(0,s.existsSync)(a)||(0,s.mkdirSync)(a,{recursive:!0}),new Promise((s,a)=>{let n=(0,o.spawn)("git",["clone","--progress",t,r],{stdio:["ignore","pipe","pipe"]});this.activeProcesses.set(e,n),n.pid&&(0,c.sN)(this.db,e,{pid:n.pid});let i="";n.stderr?.on("data",t=>{i+=t.toString();let r=this.parseGitProgress(t.toString());null!==r&&c.sN(this.db,e,{progress:r})});let l=setTimeout(()=>{n.kill("SIGTERM"),(0,c.sN)(this.db,e,{status:"failed",errorCategory:"network",errorCode:"CLONE_TIMEOUT",errorMessage:"Clone operation timed out",completedAt:new Date}),this.activeProcesses.delete(e),a(new u(p.CLONE_TIMEOUT))},this.config.timeout);n.on("close",async o=>{if(clearTimeout(l),this.activeProcesses.delete(e),0===o)await this.onCloneSuccess(e,t,r),s();else{let t=this.parseGitError(i,o);(0,c.sN)(this.db,e,{status:"failed",errorCategory:t.category,errorCode:t.code,errorMessage:t.message,completedAt:new Date}),a(new u(t))}}),n.on("error",t=>{clearTimeout(l),this.activeProcesses.delete(e);let r={category:"system",code:"SPAWN_ERROR",message:`Failed to spawn git process: ${t.message}`,recoverable:!1,suggestedAction:"Ensure git is installed and available in PATH"};(0,c.sN)(this.db,e,{status:"failed",errorCategory:r.category,errorCode:r.code,errorMessage:r.message,completedAt:new Date}),a(new u(r))})})}async onCloneSuccess(e,t,r){let o=(0,c.L_)(this.db,e);if(!o)return;let s=this.urlNormalizer.getUrlType(t),a=(0,c.h4)(this.db,{name:n().basename(r),path:r,cloneUrl:t,normalizedCloneUrl:o.normalizedCloneUrl,cloneSource:s||"https"});try{let e=await (0,d.e9)(r);e.length>0&&((0,d.h2)(this.db,e),console.log(`[CloneManager] Registered ${e.length} worktree(s) for ${r}`))}catch(e){console.error(`[CloneManager] Failed to scan worktrees for ${r}:`,e)}(0,c.sN)(this.db,e,{status:"completed",progress:100,repositoryId:a.id,completedAt:new Date})}parseGitProgress(e){let t=e.match(/(?:Receiving objects|Resolving deltas|Cloning into[^:]*?):\s*(\d+)%/);if(t){let e=parseInt(t[1],10);return isNaN(e)?null:e}return null}parseGitError(e,t){let r=e.toLowerCase(),o=e.substring(0,200);return["authentication failed","permission denied","could not read from remote repository"].some(e=>r.includes(e))?{...p.AUTH_FAILED,message:`Authentication failed: ${o}`}:["could not resolve host","connection refused","network is unreachable"].some(e=>r.includes(e))?{...p.NETWORK_ERROR,message:`Network error: ${o}`}:{...p.GIT_ERROR,message:`Git clone failed (exit code ${t}): ${o}`}}getCloneJobStatus(e){let t=(0,c.L_)(this.db,e);if(!t)return null;let r={jobId:t.id,status:t.status,progress:t.progress,repositoryId:t.repositoryId};return"failed"===t.status&&t.errorCode&&(r.error={category:t.errorCategory||"system",code:t.errorCode,message:t.errorMessage||"Unknown error"}),r}cancelCloneJob(e){let t=this.activeProcesses.get(e);if(t)return t.kill("SIGTERM"),this.activeProcesses.delete(e),(0,c.sN)(this.db,e,{status:"cancelled",completedAt:new Date}),!0;let r=(0,c.L_)(this.db,e);return!!r&&"pending"===r.status&&((0,c.sN)(this.db,e,{status:"cancelled",completedAt:new Date}),!0)}}},4709:(e,t,r)=>{r.d(t,{Bj:()=>f,Bm:()=>v,Hf:()=>E,L_:()=>b,RT:()=>R,VZ:()=>h,Xo:()=>m,fC:()=>y,h4:()=>c,mm:()=>_,nb:()=>d,sN:()=>C});var o=r(84770),s=r(55315),a=r.n(s),n=r(43753);function i(e){return{id:e.id,name:e.name,path:e.path,enabled:1===e.enabled,cloneUrl:e.clone_url||void 0,normalizedCloneUrl:e.normalized_clone_url||void 0,cloneSource:e.clone_source,isEnvManaged:1===e.is_env_managed,createdAt:new Date(e.created_at),updatedAt:new Date(e.updated_at)}}function l(e){return{id:e.id,cloneUrl:e.clone_url,normalizedCloneUrl:e.normalized_clone_url,targetPath:e.target_path,repositoryId:e.repository_id||void 0,status:e.status,pid:e.pid||void 0,progress:e.progress,errorCategory:e.error_category||void 0,errorCode:e.error_code||void 0,errorMessage:e.error_message||void 0,startedAt:e.started_at?new Date(e.started_at):void 0,completedAt:e.completed_at?new Date(e.completed_at):void 0,createdAt:new Date(e.created_at)}}function c(e,t){let r=(0,o.randomUUID)(),s=Date.now();return e.prepare(`
1
+ "use strict";exports.id=5488,exports.ids=[5488],exports.modules={65488:(e,t,r)=>{r.d(t,{v:()=>g});var o=r(61282),s=r(92048),a=r(55315),n=r.n(a);class i{constructor(){}static getInstance(){return i.instance||(i.instance=new i),i.instance}normalize(e){let t=e.match(/^ssh:\/\/git@([^:\/]+)(:\d+)?\/(.+?)(\.git)?$/);if(t)return`https://${t[1]}/${t[3]}`.toLowerCase().replace(/\/$/,"");let r=e.match(/^git@([^:]+):(.+?)(\.git)?$/);return r?`https://${r[1]}/${r[2]}`.toLowerCase().replace(/\/$/,""):e.replace(/\.git\/?$/,"").replace(/\/$/,"").toLowerCase()}isSameRepository(e,t){return this.normalize(e)===this.normalize(t)}extractRepoName(e){let t=e.match(/^ssh:\/\/git@[^\/]+\/(.+?)(\.git)?$/);if(t){let e=t[1].split("/");return e[e.length-1]}let r=e.match(/:(.+?)(\.git)?$/);if(r&&e.startsWith("git@")){let e=r[1].split("/");return e[e.length-1]}let o=e.match(/\/([^\/]+?)(\.git)?$/);return o?o[1]:""}getUrlType(e){return e.startsWith("https://")?"https":e.startsWith("git@")||e.startsWith("ssh://")?"ssh":null}validate(e){if(!e||"string"!=typeof e||""===e.trim())return{valid:!1,error:"EMPTY_URL"};let t=e.trim();return t.startsWith("https://")?/^https:\/\/[^\/]+\/[^\/]+\/[^\/]+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:t.startsWith("git@")?/^git@[^:]+:.+\/.+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:t.startsWith("ssh://")&&/^ssh:\/\/git@[^\/]+(:\d+)?\/[^\/]+\/.+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}}}var l=r(57440),c=r(4709),d=r(67722);class u extends Error{constructor(e){super(e.message),this.name="CloneManagerError",this.category=e.category,this.code=e.code,this.recoverable=e.recoverable,this.suggestedAction=e.suggestedAction}}let p={EMPTY_URL:{category:"validation",code:"EMPTY_URL",message:"Clone URL is required",recoverable:!0,suggestedAction:"Please enter a valid git clone URL"},INVALID_URL_FORMAT:{category:"validation",code:"INVALID_URL_FORMAT",message:"Invalid URL format. Please use HTTPS or SSH URL.",recoverable:!0,suggestedAction:"Enter a valid URL like https://github.com/owner/repo or git@github.com:owner/repo"},DUPLICATE_CLONE_URL:{category:"validation",code:"DUPLICATE_CLONE_URL",message:"This repository is already registered",recoverable:!1,suggestedAction:"Use the existing repository instead"},CLONE_IN_PROGRESS:{category:"validation",code:"CLONE_IN_PROGRESS",message:"A clone operation is already in progress for this URL",recoverable:!1,suggestedAction:"Wait for the current clone to complete"},DIRECTORY_EXISTS:{category:"filesystem",code:"DIRECTORY_EXISTS",message:"Target directory already exists",recoverable:!0,suggestedAction:"Choose a different directory or remove the existing one"},INVALID_TARGET_PATH:{category:"validation",code:"INVALID_TARGET_PATH",message:"Target path is invalid or outside allowed directory",recoverable:!0,suggestedAction:"Use a path within the configured base directory"},AUTH_FAILED:{category:"auth",code:"AUTH_FAILED",message:"Authentication failed",recoverable:!0,suggestedAction:"Check your credentials or SSH keys"},NETWORK_ERROR:{category:"network",code:"NETWORK_ERROR",message:"Network error occurred",recoverable:!0,suggestedAction:"Check your internet connection and try again"},GIT_ERROR:{category:"git",code:"GIT_ERROR",message:"Git command failed",recoverable:!1,suggestedAction:"Check the error message for details"},CLONE_TIMEOUT:{category:"network",code:"CLONE_TIMEOUT",message:"Clone operation timed out",recoverable:!0,suggestedAction:"Try again or clone a smaller repository"}};class g{constructor(e,t={}){this.db=e,this.urlNormalizer=i.getInstance(),this.config={basePath:t.basePath||process.env.WORKTREE_BASE_PATH||"/tmp/repos",timeout:t.timeout||6e5},this.activeProcesses=new Map}validateCloneRequest(e){let t=this.urlNormalizer.validate(e);return t.valid?{valid:!0,normalizedUrl:this.urlNormalizer.normalize(e),repoName:this.urlNormalizer.extractRepoName(e)}:{valid:!1,error:p[t.error||"INVALID_URL_FORMAT"]}}checkDuplicateRepository(e){return(0,c.nb)(this.db,e)}checkActiveCloneJob(e){return(0,c.fC)(this.db,e)}createCloneJob(e){return(0,c.Bm)(this.db,e)}getTargetPath(e){return n().join(this.config.basePath,e)}async startCloneJob(e,t){let r=this.validateCloneRequest(e);if(!r.valid)return{success:!1,error:r.error};let o=r.normalizedUrl,a=r.repoName,n=this.checkDuplicateRepository(o);if(n)return{success:!1,error:{...p.DUPLICATE_CLONE_URL,message:`This repository is already registered as "${n.name}"`}};let i=this.checkActiveCloneJob(o);if(i)return{success:!1,jobId:i.id,error:p.CLONE_IN_PROGRESS};let c=t||this.getTargetPath(a);if(t&&!(0,l.j)(t,this.config.basePath))return{success:!1,error:{...p.INVALID_TARGET_PATH,message:`Target path must be within ${this.config.basePath}`}};if((0,s.existsSync)(c))return{success:!1,error:{...p.DIRECTORY_EXISTS,message:`Target directory already exists: ${c}`}};let d=this.createCloneJob({cloneUrl:e,normalizedCloneUrl:o,targetPath:c});return this.executeClone(d.id,e,c).catch(e=>{console.error(`[CloneManager] Clone failed for job ${d.id}:`,e)}),{success:!0,jobId:d.id}}async executeClone(e,t,r){(0,c.sN)(this.db,e,{status:"running",startedAt:new Date});let a=n().dirname(r);return(0,s.existsSync)(a)||(0,s.mkdirSync)(a,{recursive:!0}),new Promise((s,a)=>{let n=(0,o.spawn)("git",["clone","--progress",t,r],{stdio:["ignore","pipe","pipe"]});this.activeProcesses.set(e,n),n.pid&&(0,c.sN)(this.db,e,{pid:n.pid});let i="";n.stderr?.on("data",t=>{i+=t.toString();let r=this.parseGitProgress(t.toString());null!==r&&c.sN(this.db,e,{progress:r})});let l=setTimeout(()=>{n.kill("SIGTERM"),(0,c.sN)(this.db,e,{status:"failed",errorCategory:"network",errorCode:"CLONE_TIMEOUT",errorMessage:"Clone operation timed out",completedAt:new Date}),this.activeProcesses.delete(e),a(new u(p.CLONE_TIMEOUT))},this.config.timeout);n.on("close",async o=>{if(clearTimeout(l),this.activeProcesses.delete(e),0===o)await this.onCloneSuccess(e,t,r),s();else{let t=this.parseGitError(i,o);(0,c.sN)(this.db,e,{status:"failed",errorCategory:t.category,errorCode:t.code,errorMessage:t.message,completedAt:new Date}),a(new u(t))}}),n.on("error",t=>{clearTimeout(l),this.activeProcesses.delete(e);let r={category:"system",code:"SPAWN_ERROR",message:`Failed to spawn git process: ${t.message}`,recoverable:!1,suggestedAction:"Ensure git is installed and available in PATH"};(0,c.sN)(this.db,e,{status:"failed",errorCategory:r.category,errorCode:r.code,errorMessage:r.message,completedAt:new Date}),a(new u(r))})})}async onCloneSuccess(e,t,r){let o=(0,c.L_)(this.db,e);if(!o)return;let s=this.urlNormalizer.getUrlType(t),a=(0,c.h4)(this.db,{name:n().basename(r),path:r,cloneUrl:t,normalizedCloneUrl:o.normalizedCloneUrl,cloneSource:s||"https"});try{let e=await (0,d.e9)(r);e.length>0&&((0,d.h2)(this.db,e),console.log(`[CloneManager] Registered ${e.length} worktree(s) for ${r}`))}catch(e){console.error(`[CloneManager] Failed to scan worktrees for ${r}:`,e)}(0,c.sN)(this.db,e,{status:"completed",progress:100,repositoryId:a.id,completedAt:new Date})}parseGitProgress(e){let t=e.match(/(?:Receiving objects|Resolving deltas|Cloning into[^:]*?):\s*(\d+)%/);if(t){let e=parseInt(t[1],10);return isNaN(e)?null:e}return null}parseGitError(e,t){let r=e.toLowerCase(),o=e.substring(0,200);return["authentication failed","permission denied","could not read from remote repository"].some(e=>r.includes(e))?{...p.AUTH_FAILED,message:`Authentication failed: ${o}`}:["could not resolve host","connection refused","network is unreachable"].some(e=>r.includes(e))?{...p.NETWORK_ERROR,message:`Network error: ${o}`}:{...p.GIT_ERROR,message:`Git clone failed (exit code ${t}): ${o}`}}getCloneJobStatus(e){let t=(0,c.L_)(this.db,e);if(!t)return null;let r={jobId:t.id,status:t.status,progress:t.progress,repositoryId:t.repositoryId};return"failed"===t.status&&t.errorCode&&(r.error={category:t.errorCategory||"system",code:t.errorCode,message:t.errorMessage||"Unknown error"}),r}cancelCloneJob(e){let t=this.activeProcesses.get(e);if(t)return t.kill("SIGTERM"),this.activeProcesses.delete(e),(0,c.sN)(this.db,e,{status:"cancelled",completedAt:new Date}),!0;let r=(0,c.L_)(this.db,e);return!!r&&"pending"===r.status&&((0,c.sN)(this.db,e,{status:"cancelled",completedAt:new Date}),!0)}}},4709:(e,t,r)=>{r.d(t,{Bj:()=>_,Bm:()=>R,L_:()=>v,RT:()=>f,VZ:()=>h,fC:()=>C,h4:()=>c,mm:()=>E,nJ:()=>m,nb:()=>d,sN:()=>b});var o=r(84770),s=r(55315),a=r.n(s),n=r(43753);function i(e){return{id:e.id,name:e.name,path:e.path,enabled:1===e.enabled,cloneUrl:e.clone_url||void 0,normalizedCloneUrl:e.normalized_clone_url||void 0,cloneSource:e.clone_source,isEnvManaged:1===e.is_env_managed,createdAt:new Date(e.created_at),updatedAt:new Date(e.updated_at)}}function l(e){return{id:e.id,cloneUrl:e.clone_url,normalizedCloneUrl:e.normalized_clone_url,targetPath:e.target_path,repositoryId:e.repository_id||void 0,status:e.status,pid:e.pid||void 0,progress:e.progress,errorCategory:e.error_category||void 0,errorCode:e.error_code||void 0,errorMessage:e.error_message||void 0,startedAt:e.started_at?new Date(e.started_at):void 0,completedAt:e.completed_at?new Date(e.completed_at):void 0,createdAt:new Date(e.created_at)}}function c(e,t){let r=(0,o.randomUUID)(),s=Date.now();return e.prepare(`
2
2
  INSERT INTO repositories (
3
3
  id, name, path, enabled, clone_url, normalized_clone_url,
4
4
  clone_source, is_env_managed, created_at, updated_at
@@ -14,20 +14,20 @@
14
14
  UPDATE repositories
15
15
  SET ${s.join(", ")}
16
16
  WHERE id = ?
17
- `).run(...a)}function g(e){return a().resolve(e)}function h(e){if(!e||"string"!=typeof e)return{valid:!1,error:"repositoryPath is required"};if(e.includes("\0"))return{valid:!1,error:"Invalid repository path"};let t=g(e);return(0,n.F)(t)?{valid:!1,error:"Invalid repository path"}:{valid:!0,resolvedPath:t}}function m(e,t){for(let r of t){let t=g(r);u(e,t)||c(e,{name:a().basename(t),path:t,cloneSource:"local",isEnvManaged:!0,enabled:!0})}}function E(e,t){let r=e.prepare("SELECT path FROM repositories WHERE enabled = 0").all().map(e=>e.path);return t.filter(e=>!r.includes(g(e)))}function _(e,t){let r=g(t),o=u(e,r);if(o)p(e,o.id,{enabled:!1});else{if(e.prepare("SELECT COUNT(*) as count FROM repositories WHERE enabled = 0").get().count>=1e3)throw Error("Disabled repository limit exceeded");c(e,{name:a().basename(r),path:r,cloneSource:"local",isEnvManaged:!1,enabled:!1})}}function f(e){return e.prepare("SELECT * FROM repositories WHERE enabled = 0 ORDER BY name ASC").all().map(i)}function R(e,t){let r=u(e,g(t));return r?(p(e,r.id,{enabled:!0}),{...r,enabled:!0}):null}function v(e,t){let r=(0,o.randomUUID)(),s=Date.now();return e.prepare(`
17
+ `).run(...a)}function g(e){return a().resolve(e)}function h(e){if(!e||"string"!=typeof e)return{valid:!1,error:"repositoryPath is required"};if(e.includes("\0"))return{valid:!1,error:"Invalid repository path"};let t=g(e);return(0,n.F)(t)?{valid:!1,error:"Invalid repository path"}:{valid:!0,resolvedPath:t}}function m(e,t){!function(e,t){for(let r of t){let t=g(r);u(e,t)||c(e,{name:a().basename(t),path:t,cloneSource:"local",isEnvManaged:!0,enabled:!0})}}(e,t);let r=function(e,t){let r=e.prepare("SELECT path FROM repositories WHERE enabled = 0").all().map(e=>e.path);return t.filter(e=>!r.includes(g(e)))}(e,t),o=t.filter(e=>!r.includes(e));return{filteredPaths:r,excludedPaths:o,excludedCount:o.length}}function E(e,t){let r=g(t),o=u(e,r);if(o)p(e,o.id,{enabled:!1});else{if(e.prepare("SELECT COUNT(*) as count FROM repositories WHERE enabled = 0").get().count>=1e3)throw Error("Disabled repository limit exceeded");c(e,{name:a().basename(r),path:r,cloneSource:"local",isEnvManaged:!1,enabled:!1})}}function _(e){return e.prepare("SELECT * FROM repositories WHERE enabled = 0 ORDER BY name ASC").all().map(i)}function f(e,t){let r=u(e,g(t));return r?(p(e,r.id,{enabled:!0}),{...r,enabled:!0}):null}function R(e,t){let r=(0,o.randomUUID)(),s=Date.now();return e.prepare(`
18
18
  INSERT INTO clone_jobs (
19
19
  id, clone_url, normalized_clone_url, target_path,
20
20
  status, progress, created_at
21
21
  )
22
22
  VALUES (?, ?, ?, ?, 'pending', 0, ?)
23
- `).run(r,t.cloneUrl,t.normalizedCloneUrl,t.targetPath,s),{id:r,cloneUrl:t.cloneUrl,normalizedCloneUrl:t.normalizedCloneUrl,targetPath:t.targetPath,status:"pending",progress:0,createdAt:new Date(s)}}function b(e,t){let r=e.prepare(`
23
+ `).run(r,t.cloneUrl,t.normalizedCloneUrl,t.targetPath,s),{id:r,cloneUrl:t.cloneUrl,normalizedCloneUrl:t.normalizedCloneUrl,targetPath:t.targetPath,status:"pending",progress:0,createdAt:new Date(s)}}function v(e,t){let r=e.prepare(`
24
24
  SELECT * FROM clone_jobs
25
25
  WHERE id = ?
26
- `).get(t);return r?l(r):null}function C(e,t,r){let o=[],s=[];void 0!==r.status&&(o.push("status = ?"),s.push(r.status)),void 0!==r.pid&&(o.push("pid = ?"),s.push(r.pid)),void 0!==r.progress&&(o.push("progress = ?"),s.push(r.progress)),void 0!==r.repositoryId&&(o.push("repository_id = ?"),s.push(r.repositoryId)),void 0!==r.errorCategory&&(o.push("error_category = ?"),s.push(r.errorCategory)),void 0!==r.errorCode&&(o.push("error_code = ?"),s.push(r.errorCode)),void 0!==r.errorMessage&&(o.push("error_message = ?"),s.push(r.errorMessage)),void 0!==r.startedAt&&(o.push("started_at = ?"),s.push(r.startedAt.getTime())),void 0!==r.completedAt&&(o.push("completed_at = ?"),s.push(r.completedAt.getTime())),0!==o.length&&(s.push(t),e.prepare(`
26
+ `).get(t);return r?l(r):null}function b(e,t,r){let o=[],s=[];void 0!==r.status&&(o.push("status = ?"),s.push(r.status)),void 0!==r.pid&&(o.push("pid = ?"),s.push(r.pid)),void 0!==r.progress&&(o.push("progress = ?"),s.push(r.progress)),void 0!==r.repositoryId&&(o.push("repository_id = ?"),s.push(r.repositoryId)),void 0!==r.errorCategory&&(o.push("error_category = ?"),s.push(r.errorCategory)),void 0!==r.errorCode&&(o.push("error_code = ?"),s.push(r.errorCode)),void 0!==r.errorMessage&&(o.push("error_message = ?"),s.push(r.errorMessage)),void 0!==r.startedAt&&(o.push("started_at = ?"),s.push(r.startedAt.getTime())),void 0!==r.completedAt&&(o.push("completed_at = ?"),s.push(r.completedAt.getTime())),0!==o.length&&(s.push(t),e.prepare(`
27
27
  UPDATE clone_jobs
28
28
  SET ${o.join(", ")}
29
29
  WHERE id = ?
30
- `).run(...s))}function y(e,t){let r=e.prepare(`
30
+ `).run(...s))}function C(e,t){let r=e.prepare(`
31
31
  SELECT * FROM clone_jobs
32
32
  WHERE normalized_clone_url = ?
33
33
  AND status IN ('pending', 'running')
@@ -1 +1 @@
1
- "use strict";exports.id=7536,exports.ids=[7536],exports.modules={43632:(e,t,s)=>{s.d(t,{FN:()=>o}),s(62648),s(97425),s(75748),s(25079),s(63661),s(76966);let n=new Map,i=new Map;function o(e){let t=n.get(e);t&&(clearInterval(t),n.delete(e),i.delete(e),console.log(`Stopped poller for ${e}`))}},89194:(e,t,s)=>{s.d(t,{Lg:()=>r,NA:()=>a});var n=s(10927),i=s(43839);let o=(0,s(43895).h)("cli-session");async function r(e,t){let s=i.g.getInstance().getTool(t).getSessionName(e);return await (0,n.Hk)(s)}async function a(e,t,s=1e3){let r=o.withContext({worktreeId:e,cliToolId:t});r.debug("captureSessionOutput:start",{requestedLines:s});let a=i.g.getInstance().getTool(t),l=a.getSessionName(e);if(!await (0,n.Hk)(l))throw r.debug("captureSessionOutput:sessionNotFound",{sessionName:l}),Error(`${a.name} session ${l} does not exist`);try{let e=await (0,n.xq)(l,{startLine:-s}),t=e.split("\n").length;return r.debug("captureSessionOutput:success",{actualLines:t,lastFewLines:e.split("\n").slice(-3).join(" | ")}),e}catch(t){let e=t instanceof Error?t.message:String(t);throw r.error("captureSessionOutput:failed",{error:e}),Error(`Failed to capture ${a.name} output: ${e}`)}}},43839:(e,t,s)=>{s.d(t,{g:()=>w});var n=s(61282),i=s(21764);let o=/^[a-zA-Z0-9_-]+$/;var r=s(10927);let a=(0,i.promisify)(n.exec);class l{async isInstalled(){try{return await a(`which ${this.command}`,{timeout:5e3}),!0}catch{return!1}}getSessionName(e){let t=`mcbd-${this.id}-${e}`;return function(e){if(!o.test(e))throw Error(`Invalid session name format: ${e}`)}(t),t}async interrupt(e){let t=this.getSessionName(e);await (0,r.ZV)(t,"Escape")}}var m=s(62648);class u extends l{async isInstalled(){return await (0,m.Uv)()}async isRunning(e){return await (0,m.YI)(e)}async startSession(e,t){await (0,m.ym)({worktreeId:e,worktreePath:t})}async sendMessage(e,t){await (0,m.xd)(e,t)}async killSession(e){await (0,m._f)(e)}constructor(...e){super(...e),this.id="claude",this.name="Claude Code",this.command="claude"}}let c=(0,i.promisify)(n.exec);class p extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,r.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Codex CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,r.Hk)(s)){console.log(`Codex session ${s} already exists`);return}try{await (0,r.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),await new Promise(e=>setTimeout(e,100)),await (0,r.Is)(s,"codex",!0),await new Promise(e=>setTimeout(e,3e3)),await (0,r.Is)(s,"2",!0),await new Promise(e=>setTimeout(e,200)),await c(`tmux send-keys -t "${s}" Down`),await new Promise(e=>setTimeout(e,200)),await c(`tmux send-keys -t "${s}" Enter`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Started Codex session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Codex session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,r.Hk)(s))throw Error(`Codex session ${s} does not exist. Start the session first.`);try{await (0,r.Is)(s,t,!1),await new Promise(e=>setTimeout(e,100)),await c(`tmux send-keys -t "${s}" C-m`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Sent message to Codex session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Codex: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,r.Hk)(t)&&(await c(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,r.AJ)(t)&&console.log(`✓ Stopped Codex session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`Error stopping Codex session: ${e}`),t}}constructor(...e){super(...e),this.id="codex",this.name="Codex CLI",this.command="codex"}}let d=(0,i.promisify)(n.exec);class g extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,r.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Gemini CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,r.Hk)(s)){console.log(`Gemini session ${s} already exists`);return}try{await (0,r.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),console.log(`✓ Started Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Gemini session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,r.Hk)(s))throw Error(`Gemini session ${s} does not exist. Start the session first.`);try{let e=t.replace(/'/g,"'\\''");await (0,r.Is)(s,`echo '${e}' | gemini`,!0),console.log(`✓ Sent message to Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Gemini: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,r.Hk)(t)&&(await d(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,r.AJ)(t)&&console.log(`✓ Stopped Gemini session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`Error stopping Gemini session: ${e}`),t}}constructor(...e){super(...e),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}var f=s(59991),h=s(43632);class w{constructor(){this.tools=new Map,this.tools.set("claude",new u),this.tools.set("codex",new p),this.tools.set("gemini",new g)}static getInstance(){return w.instance||(w.instance=new w),w.instance}getTool(e){let t=this.tools.get(e);if(!t)throw Error(`CLI tool '${e}' not found`);return t}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(e){let t=this.getTool(e),s=await t.isInstalled();return{id:t.id,name:t.name,command:t.command,installed:s}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async e=>{let t=await e.isInstalled();return{id:e.id,name:e.name,command:e.command,installed:t}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(e=>e.installed)}stopPollers(e,t){(0,f.FN)(e,t),"claude"===t&&(0,h.FN)(e)}}},63661:(e,t,s)=>{s.d(t,{F:()=>i,J:()=>l});let n=(0,s(43895).h)("prompt-detector");function i(e){n.debug("detectPrompt:start",{outputLength:e.length});let t=e.split("\n").slice(-10).join("\n"),s=function(e){let t=e.split("\n"),s=Math.max(0,t.length-50),n=!1;for(let e=s;e<t.length;e++){let s=t[e].trim();if(r.test(s)){n=!0;break}}if(!n)return{isPrompt:!1,cleanContent:e.trim()};let i=[],l=-1;for(let e=t.length-1;e>=s;e--){let s=t[e].trim(),n=s.match(r);if(n){let e=parseInt(n[1],10),t=n[2].trim();i.unshift({number:e,label:t,isDefault:!0});continue}let o=s.match(a);if(o){let e=parseInt(o[1],10),t=o[2].trim();i.unshift({number:e,label:t,isDefault:!1});continue}if(i.length>0&&s&&!s.match(/^[-─]+$/)){if(function(e,t){let s=e.match(/^\s{2,}[^\d]/)&&!e.match(/^\s*\d+\./),n=t.length<5&&!t.endsWith("?"),i=/^[\/~]/.test(t)||t.length>=2&&/^[a-zA-Z0-9_-]+$/.test(t);return!!s||n||i}(t[e],s))continue;l=e;break}}if(!function(e){if(0===e.length||1!==e[0])return!1;for(let t=1;t<e.length;t++)if(e[t]!==e[t-1]+1)return!1;return!0}(i.map(e=>e.number)))return{isPrompt:!1,cleanContent:e.trim()};let m=i.some(e=>e.isDefault);if(i.length<2||!m)return{isPrompt:!1,cleanContent:e.trim()};let u="";if(l>=0){let e=[];for(let s=Math.max(0,l-5);s<=l;s++){let n=t[s].trim();n&&!n.match(/^[-─]+$/)&&e.push(n)}u=e.join(" ")}else u="Please select an option:";return{isPrompt:!0,promptData:{type:"multiple_choice",question:u.trim(),options:i.map(e=>{let t=o.some(t=>t.test(e.label));return{number:e.number,label:e.label,isDefault:e.isDefault,requiresTextInput:t}}),status:"pending"},cleanContent:u.trim()}}(e);if(s.isPrompt)return n.info("detectPrompt:multipleChoice",{isPrompt:!0,question:s.promptData?.question,optionsCount:s.promptData?.options?.length}),s;let i=t.match(/^(.+)\s+\(y\/n\)\s*$/m);if(i)return{isPrompt:!0,promptData:{type:"yes_no",question:i[1].trim(),options:["yes","no"],status:"pending"},cleanContent:i[1].trim()};let l=t.match(/^(.+)\s+\[y\/N\]\s*$/m);if(l)return{isPrompt:!0,promptData:{type:"yes_no",question:l[1].trim(),options:["yes","no"],status:"pending",defaultOption:"no"},cleanContent:l[1].trim()};let m=t.match(/^(.+)\s+\[Y\/n\]\s*$/m);if(m)return{isPrompt:!0,promptData:{type:"yes_no",question:m[1].trim(),options:["yes","no"],status:"pending",defaultOption:"yes"},cleanContent:m[1].trim()};let u=t.match(/^(.+)\s+\(yes\/no\)\s*$/m);if(u)return{isPrompt:!0,promptData:{type:"yes_no",question:u[1].trim(),options:["yes","no"],status:"pending"},cleanContent:u[1].trim()};let c=t.match(/^(.*?)Approve\?\s*$/m);if(c){let e=c[1].trim();return{isPrompt:!0,promptData:{type:"yes_no",question:e?`${e} Approve?`:"Approve?",options:["yes","no"],status:"pending"},cleanContent:e||"Approve?"}}return n.debug("detectPrompt:complete",{isPrompt:!1}),{isPrompt:!1,cleanContent:e.trim()}}let o=[/type\s+here/i,/tell\s+(me|claude)/i,/enter\s+/i,/custom/i,/differently/i],r=/^\s*\u276F\s*(\d+)\.\s*(.+)$/,a=/^\s*(\d+)\.\s*(.+)$/;function l(e,t="yes_no"){let s=e.toLowerCase().trim();if("multiple_choice"===t){if(/^\d+$/.test(s))return s;throw Error(`Invalid answer for multiple choice: ${e}. Expected a number.`)}if("yes"===s||"y"===s)return"y";if("no"===s||"n"===s)return"n";throw Error(`Invalid answer: ${e}. Expected 'yes', 'no', 'y', or 'n'.`)}},59991:(e,t,s)=>{s.d(t,{FN:()=>w,RJ:()=>g,ci:()=>d,cn:()=>h});var n=s(89194),i=s(97425),o=s(75748),r=s(25079),a=s(63661),l=s(76966),m=s(89287),u=s(19377);let c=new Map,p=new Map;function d(e){let t=(0,u.vp)(e).split("\n"),s=-1;for(let e=t.length-1;e>=0;e--)if(/^❯\s+\S/.test(t[e])){s=e;break}let n=s>=0?s+1:0,i=t.slice(n),o=[/CLAUDE_HOOKS_/,/\/bin\/claude/,/^claude\s*$/,/@.*\s+%\s*$/,/^[^⏺]*curl.*POST/,/^[^⏺]*Content-Type/,/^[^⏺]*export\s+CLAUDE_/,/^\s*$/,/^[╭╮╰╯│─\s]+$/,/^[│╭╮╰╯].*[│╭╮╰╯]$/,/Claude Code v[\d.]+/,/^Tips for getting started/,/^Welcome back/,/Run \/init to create/,/^Recent activity/,/^No recent activity/,/▐▛███▜▌|▝▜█████▛▘|▘▘ ▝▝/,/^\s*Opus \d+\.\d+\s*·\s*Claude Max/,/\.com's Organization/,/\?\s*for shortcuts\s*$/,/^─{10,}$/,/^❯\s*$/],r=[];for(let e of i)!o.some(t=>t.test(e))&&e.trim()&&r.push(e);return r.join("\n").trim()}function g(e){let t=e.split("\n"),s=[],n=[/^maenokota@.*%/,/^zsh:/,/^feature-issue-\d+/,/^\s*$/],i=!1,o=[];for(let e of t){if(e.includes("✦")){i=!0;let t=e.indexOf("✦"),s=e.substring(t+1).trim();s&&o.push(s);continue}if(i){if(n.some(t=>t.test(e)))continue;o.push(e)}}if(o.length>0)return o.join("\n").trim();for(let e of t)n.some(t=>t.test(e))||s.push(e);return s.join("\n").trim()}async function f(e,t){let s=(0,i.n)();try{if(!(0,o.gU)(s,e))return console.error(`Worktree ${e} not found, stopping poller`),w(e,t),!1;if(!await (0,n.Lg)(e,t))return w(e,t),!1;let i=(0,o.zl)(s,e,t),c=i?.lastCapturedLine||0,p=await (0,n.NA)(e,t,1e4),f=function(e,t,s){let n=e.split("\n"),i=n.length;for(;i>0&&""===n[i-1].trim();)i--;let o=n.slice(0,i),r=o.length,l=r>0&&t>25&&r+25<t||r>0&&t>50&&r<50;if(!l&&r<t-5)return null;let m=o.slice(Math.max(0,r-20)).join("\n"),{promptPattern:c,separatorPattern:p,thinkingPattern:d,skipPatterns:g}=(0,u.bs)(s),f=(e=60)=>{let t="codex"===s?/^›\s+(?!Implement|Find and fix|Type|Summarize)/:/^[>❯]\s+\S/;for(let s=r-1;s>=Math.max(0,r-e);s--){let e=(0,u.vp)(o[s]);if(t.test(e))return s}return -1};if("claude"===s){let e=o.join("\n"),t=(0,u.vp)(e);if((0,a.F)(t).isPrompt)return{response:t,isComplete:!0,lineCount:r}}let h=(0,u.vp)(m),w=c.test(h),y=p.test(h),$=d.test(h),C=("codex"===s||"gemini"===s)&&w&&!$,x="claude"===s&&w&&y&&!$;if(C||x){let e;let n=[];if(t>=r||l){let t=f(40);e=t>=0?t+1:0}else if("codex"===s)e=Math.max(0,t);else if(t>=r-5){let t=f(50);e=t>=0?t+1:Math.max(0,r-40)}else e=Math.max(0,t);let i=r;for(let t=e;t<r;t++){let e=o[t],r=(0,u.vp)(e);if("codex"===s&&/^›\s+/.test(r)||"gemini"===s&&/^(%|\$|.*@.*[%$#])\s*$/.test(r)){i=t;break}g.some(e=>e.test(r))||n.push(e)}let a=n.join("\n").trim();if(d.test(a))return{response:"",isComplete:!1,lineCount:r};if("claude"===s){let e=(0,u.vp)(a),t=/[╭╮╰╯│]/.test(e)||/░{3,}/.test(e)||/▓{3,}/.test(e),s=/Claude Code|claude\/|v\d+\.\d+/.test(e),n=/Tip:|for shortcuts|\?\s*for help/.test(e),i=/^\s*\/Users\/.*$/m.test(e)&&e.split("\n").length<30,o=e.match(/^[>❯]\s+(\S.*)$/m);if(o){let t=e.indexOf(o[0]);if(0===e.substring(t+o[0].length).trim().split("\n").filter(e=>{let t=e.trim();return t&&!g.some(e=>e.test(t))&&!/^─+$/.test(t)}).length)return{response:"",isComplete:!1,lineCount:r}}else if((t||s||n||i)&&a.length<2e3)return{response:"",isComplete:!1,lineCount:r}}return"gemini"===s&&((a.match(/[░███]/g)||[]).length>.3*a.length||a.includes("Waiting for auth")||a.includes("⠋")||a.includes("⠙")||a.includes("⠹")||a.includes("⠸")||a.includes("⠼")||a.includes("⠴")||a.includes("⠦")||a.includes("⠧")||a.includes("⠇")||a.includes("⠏")||!a.includes("✦")&&a.length<10)?{response:"",isComplete:!1,lineCount:r}:{response:a,isComplete:!0,lineCount:i}}let S=o.join("\n");if((0,a.F)(S).isPrompt)return{response:S,isComplete:!0,lineCount:r};let I=[],P=l||t>=r-5,k=P?f(80):-1,v=P?k>=0?k+1:Math.max(0,r-80):Math.max(0,t);for(let e=v;e<r;e++){let t=o[e],s=(0,u.vp)(t);g.some(e=>e.test(s))||I.push(t)}let E=I.join("\n").trim();return E?{response:E,isComplete:!1,lineCount:r}:{response:"",isComplete:!1,lineCount:r}}(p,c,t);if(!f||!f.isComplete){let{thinkingPattern:n}=(0,u.bs)(t),i=(0,u.vp)(p);if(n.test(i)){let n=(0,o.GP)(s,e,t);n>0&&console.log(`Marked ${n} pending prompt(s) as answered (thinking detected) for ${e}`)}return!1}if(f.lineCount===c&&!i?.inProgressMessageId)return!1;if(f.lineCount<=c)return console.log(`[checkForResponse] Already saved up to line ${c}, skipping (result: ${f.lineCount})`),!1;let h=(0,a.F)(f.response);if(h.isPrompt){(0,o.Mf)(s,e,t);let n=(0,o.tn)(s,{worktreeId:e,role:"assistant",content:h.cleanContent,messageType:"prompt",promptData:h.promptData,timestamp:new Date,cliToolId:t});return(0,o.IH)(s,e,t,f.lineCount),(0,r.ps)("message",{worktreeId:e,message:n}),w(e,t),!0}if(!f.response||""===f.response.trim())return(0,o.IH)(s,e,t,f.lineCount),!1;let y="claude"===t?(0,m.Z)(f.response):void 0,$=f.response;if("gemini"===t?$=g(f.response):"claude"===t&&($=d(f.response)),!$||""===$.trim()||"[No content]"===$)return(0,o.IH)(s,e,t,f.lineCount),(0,o.Mf)(s,e,t),!1;$&&await (0,l.o)(s,e,$,t);let C=(0,o.GP)(s,e,t);C>0&&console.log(`Marked ${C} pending prompt(s) as answered for ${e}`);let x=(0,o.zl)(s,e,t);if(x&&f.lineCount<=x.lastCapturedLine)return console.log(`[checkForResponse] Race condition detected, skipping save (result: ${f.lineCount}, current: ${x.lastCapturedLine})`),!1;let S=(0,o.tn)(s,{worktreeId:e,role:"assistant",content:$,messageType:"normal",timestamp:new Date,cliToolId:t,summary:y?.summary,logFileName:y?.logFileName,requestId:y?.requestId});return(0,r.ps)("message",{worktreeId:e,message:S}),(0,o.IH)(s,e,t,f.lineCount),!0}catch(t){return console.error(`Error checking for response (${e}):`,t instanceof Error?t.message:String(t)),!1}}function h(e,t){let s=`${e}:${t}`;w(e,t),p.set(s,Date.now());let n=setInterval(async()=>{let n=p.get(s);if(n&&Date.now()-n>3e5){w(e,t);return}try{await f(e,t)}catch(e){console.error("[Poller] Error:",e)}},2e3);c.set(s,n)}function w(e,t){let s=`${e}:${t}`,n=c.get(s);n&&(clearInterval(n),c.delete(s),p.delete(s))}}};
1
+ "use strict";exports.id=7536,exports.ids=[7536],exports.modules={43632:(e,t,s)=>{s.d(t,{FN:()=>o}),s(62648),s(97425),s(75748),s(25079),s(63661),s(76966);let n=new Map,i=new Map;function o(e){let t=n.get(e);t&&(clearInterval(t),n.delete(e),i.delete(e),console.log(`Stopped poller for ${e}`))}},89194:(e,t,s)=>{s.d(t,{Lg:()=>r,NA:()=>a});var n=s(10927),i=s(43839);let o=(0,s(43895).h)("cli-session");async function r(e,t){let s=i.g.getInstance().getTool(t).getSessionName(e);return await (0,n.Hk)(s)}async function a(e,t,s=1e3){let r=o.withContext({worktreeId:e,cliToolId:t});r.debug("captureSessionOutput:start",{requestedLines:s});let a=i.g.getInstance().getTool(t),l=a.getSessionName(e);if(!await (0,n.Hk)(l))throw r.debug("captureSessionOutput:sessionNotFound",{sessionName:l}),Error(`${a.name} session ${l} does not exist`);try{let e=await (0,n.xq)(l,{startLine:-s}),t=e.split("\n").length;return r.debug("captureSessionOutput:success",{actualLines:t,lastFewLines:e.split("\n").slice(-3).join(" | ")}),e}catch(t){let e=t instanceof Error?t.message:String(t);throw r.error("captureSessionOutput:failed",{error:e}),Error(`Failed to capture ${a.name} output: ${e}`)}}},43839:(e,t,s)=>{s.d(t,{g:()=>w});var n=s(61282),i=s(21764);let o=/^[a-zA-Z0-9_-]+$/;var r=s(10927);let a=(0,i.promisify)(n.exec);class l{async isInstalled(){try{return await a(`which ${this.command}`,{timeout:5e3}),!0}catch{return!1}}getSessionName(e){let t=`mcbd-${this.id}-${e}`;return function(e){if(!o.test(e))throw Error(`Invalid session name format: ${e}`)}(t),t}async interrupt(e){let t=this.getSessionName(e);await (0,r.ZV)(t,"Escape")}}var u=s(62648);class c extends l{async isInstalled(){return await (0,u.Uv)()}async isRunning(e){return await (0,u.YI)(e)}async startSession(e,t){await (0,u.ym)({worktreeId:e,worktreePath:t})}async sendMessage(e,t){await (0,u.xd)(e,t)}async killSession(e){await (0,u._f)(e)}constructor(...e){super(...e),this.id="claude",this.name="Claude Code",this.command="claude"}}let m=(0,i.promisify)(n.exec);class p extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,r.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Codex CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,r.Hk)(s)){console.log(`Codex session ${s} already exists`);return}try{await (0,r.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),await new Promise(e=>setTimeout(e,100)),await (0,r.Is)(s,"codex",!0),await new Promise(e=>setTimeout(e,3e3)),await (0,r.Is)(s,"2",!0),await new Promise(e=>setTimeout(e,200)),await m(`tmux send-keys -t "${s}" Down`),await new Promise(e=>setTimeout(e,200)),await m(`tmux send-keys -t "${s}" Enter`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Started Codex session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Codex session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,r.Hk)(s))throw Error(`Codex session ${s} does not exist. Start the session first.`);try{await (0,r.Is)(s,t,!1),await new Promise(e=>setTimeout(e,100)),await m(`tmux send-keys -t "${s}" C-m`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Sent message to Codex session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Codex: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,r.Hk)(t)&&(await m(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,r.AJ)(t)&&console.log(`✓ Stopped Codex session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`Error stopping Codex session: ${e}`),t}}constructor(...e){super(...e),this.id="codex",this.name="Codex CLI",this.command="codex"}}let d=(0,i.promisify)(n.exec);class f extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,r.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Gemini CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,r.Hk)(s)){console.log(`Gemini session ${s} already exists`);return}try{await (0,r.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),console.log(`✓ Started Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Gemini session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,r.Hk)(s))throw Error(`Gemini session ${s} does not exist. Start the session first.`);try{let e=t.replace(/'/g,"'\\''");await (0,r.Is)(s,`echo '${e}' | gemini`,!0),console.log(`✓ Sent message to Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Gemini: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,r.Hk)(t)&&(await d(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,r.AJ)(t)&&console.log(`✓ Stopped Gemini session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`Error stopping Gemini session: ${e}`),t}}constructor(...e){super(...e),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}var g=s(59991),h=s(43632);class w{constructor(){this.tools=new Map,this.tools.set("claude",new c),this.tools.set("codex",new p),this.tools.set("gemini",new f)}static getInstance(){return w.instance||(w.instance=new w),w.instance}getTool(e){let t=this.tools.get(e);if(!t)throw Error(`CLI tool '${e}' not found`);return t}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(e){let t=this.getTool(e),s=await t.isInstalled();return{id:t.id,name:t.name,command:t.command,installed:s}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async e=>{let t=await e.isInstalled();return{id:e.id,name:e.name,command:e.command,installed:t}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(e=>e.installed)}stopPollers(e,t){(0,g.FN)(e,t),"claude"===t&&(0,h.FN)(e)}}},63661:(e,t,s)=>{s.d(t,{F:()=>o,J:()=>p});let n=(0,s(43895).h)("prompt-detector"),i=[{regex:/^(.+)\s+\(y\/n\)\s*$/m},{regex:/^(.+)\s+\[y\/N\]\s*$/m,defaultOption:"no"},{regex:/^(.+)\s+\[Y\/n\]\s*$/m,defaultOption:"yes"},{regex:/^(.+)\s+\(yes\/no\)\s*$/m}];function o(e,t){n.debug("detectPrompt:start",{outputLength:e.length});let s=e.split("\n").slice(-10).join("\n"),o=function(e,t){let s=t?.requireDefaultIndicator??!0,n=e.split("\n"),i=n.length;for(;i>0&&""===n[i-1].trim();)i--;let o=Math.max(0,i-50);if(s){let t=!1;for(let e=o;e<i;e++){let s=n[e].trim();if(a.test(s)){t=!0;break}}if(!t)return c(e)}let p=[],d=-1;for(let e=i-1;e>=o;e--){let t=n[e].trim(),s=t.match(a);if(s){let e=parseInt(s[1],10),t=s[2].trim();p.unshift({number:e,label:t,isDefault:!0});continue}let i=t.match(l);if(i){let e=parseInt(i[1],10),t=i[2].trim();p.unshift({number:e,label:t,isDefault:!1});continue}if(p.length>0&&t&&!u.test(t)){if(function(e,t){let s=t.endsWith("?")||t.endsWith("?"),n=e.match(/^\s{2,}[^\d]/)&&!e.match(/^\s*\d+\./)&&!s,i=t.length<5&&!s,o=/^[\/~]/.test(t)||t.length>=2&&/^[a-zA-Z0-9_-]+$/.test(t);return!!n||i||o}(n[e],t))continue;d=e;break}}if(!function(e){if(0===e.length||1!==e[0])return!1;for(let t=1;t<e.length;t++)if(e[t]!==e[t-1]+1)return!1;return!0}(p.map(e=>e.number)))return c(e);let f=p.some(e=>e.isDefault);if(p.length<2||s&&!f)return c(e);if(!s){var g;if(-1===d||!(0!==(g=n[d]?.trim()??"").length&&(g.endsWith("?")||g.endsWith("?")||g.endsWith(":")&&m.test(g))))return c(e)}let h="";if(d>=0){let e=[];for(let t=Math.max(0,d-5);t<=d;t++){let s=n[t].trim();s&&!u.test(s)&&e.push(s)}h=e.join(" ")}else h="Please select an option:";return{isPrompt:!0,promptData:{type:"multiple_choice",question:h.trim(),options:p.map(e=>{let t=r.some(t=>t.test(e.label));return{number:e.number,label:e.label,isDefault:e.isDefault,requiresTextInput:t}}),status:"pending"},cleanContent:h.trim()}}(e,t);if(o.isPrompt)return n.info("detectPrompt:multipleChoice",{isPrompt:!0,question:o.promptData?.question,optionsCount:o.promptData?.options?.length}),o;for(let e of i){let t=s.match(e.regex);if(t){let s=t[1].trim();return{isPrompt:!0,promptData:{type:"yes_no",question:s,options:["yes","no"],status:"pending",...void 0!==e.defaultOption&&{defaultOption:e.defaultOption}},cleanContent:s}}}let p=s.match(/^(.*?)Approve\?\s*$/m);if(p){let e=p[1].trim();return{isPrompt:!0,promptData:{type:"yes_no",question:e?`${e} Approve?`:"Approve?",options:["yes","no"],status:"pending"},cleanContent:e||"Approve?"}}return n.debug("detectPrompt:complete",{isPrompt:!1}),{isPrompt:!1,cleanContent:e.trim()}}let r=[/type\s+here/i,/tell\s+(me|claude)/i,/enter\s+/i,/custom/i,/differently/i],a=/^\s*\u276F\s*(\d+)\.\s*(.+)$/,l=/^\s*(\d+)\.\s*(.+)$/,u=/^[-─]+$/;function c(e){return{isPrompt:!1,cleanContent:e.trim()}}let m=/(?:select|choose|pick|which|what|how|where|enter|type|specify|confirm|approve|accept|reject|decide|preference|option)/i;function p(e,t="yes_no"){let s=e.toLowerCase().trim();if("multiple_choice"===t){if(/^\d+$/.test(s))return s;throw Error("Invalid answer for multiple choice prompt. Expected a number.")}if("yes"===s||"y"===s)return"y";if("no"===s||"n"===s)return"n";throw Error("Invalid answer for yes/no prompt. Expected 'yes', 'no', 'y', or 'n'.")}},59991:(e,t,s)=>{s.d(t,{FN:()=>y,RJ:()=>g,ci:()=>f,cn:()=>w});var n=s(89194),i=s(97425),o=s(75748),r=s(25079),a=s(63661),l=s(76966),u=s(89287),c=s(19377);let m=new Map,p=new Map;function d(e,t){let s=(0,c.Sg)(t);return(0,a.F)((0,c.vp)(e),s)}function f(e){let t=(0,c.vp)(e).split("\n"),s=-1;for(let e=t.length-1;e>=0;e--)if(/^❯\s+\S/.test(t[e])){s=e;break}let n=s>=0?s+1:0,i=t.slice(n),o=[/CLAUDE_HOOKS_/,/\/bin\/claude/,/^claude\s*$/,/@.*\s+%\s*$/,/^[^⏺]*curl.*POST/,/^[^⏺]*Content-Type/,/^[^⏺]*export\s+CLAUDE_/,/^\s*$/,/^[╭╮╰╯│─\s]+$/,/^[│╭╮╰╯].*[│╭╮╰╯]$/,/Claude Code v[\d.]+/,/^Tips for getting started/,/^Welcome back/,/Run \/init to create/,/^Recent activity/,/^No recent activity/,/▐▛███▜▌|▝▜█████▛▘|▘▘ ▝▝/,/^\s*Opus \d+\.\d+\s*·\s*Claude Max/,/\.com's Organization/,/\?\s*for shortcuts\s*$/,/^─{10,}$/,/^❯\s*$/],r=[];for(let e of i)!o.some(t=>t.test(e))&&e.trim()&&r.push(e);return r.join("\n").trim()}function g(e){let t=e.split("\n"),s=[],n=[/^maenokota@.*%/,/^zsh:/,/^feature-issue-\d+/,/^\s*$/],i=!1,o=[];for(let e of t){if(e.includes("✦")){i=!0;let t=e.indexOf("✦"),s=e.substring(t+1).trim();s&&o.push(s);continue}if(i){if(n.some(t=>t.test(e)))continue;o.push(e)}}if(o.length>0)return o.join("\n").trim();for(let e of t)n.some(t=>t.test(e))||s.push(e);return s.join("\n").trim()}async function h(e,t){let s=(0,i.n)();try{if(!(0,o.gU)(s,e))return console.error(`Worktree ${e} not found, stopping poller`),y(e,t),!1;if(!await (0,n.Lg)(e,t))return y(e,t),!1;let i=(0,o.zl)(s,e,t),a=i?.lastCapturedLine||0,m=await (0,n.NA)(e,t,1e4),p=function(e,t,s){let n=e.split("\n"),i=n.length;for(;i>0&&""===n[i-1].trim();)i--;let o=n.slice(0,i),r=o.length,a=r>0&&t>25&&r+25<t||r>0&&t>50&&r<50;if(!a&&r<t-5)return null;let l=o.slice(Math.max(0,r-20)).join("\n"),{promptPattern:u,separatorPattern:m,thinkingPattern:p,skipPatterns:f}=(0,c.bs)(s),g=(e=60)=>{let t="codex"===s?/^›\s+(?!Implement|Find and fix|Type|Summarize)/:/^[>❯]\s+\S/;for(let s=r-1;s>=Math.max(0,r-e);s--){let e=(0,c.vp)(o[s]);if(t.test(e))return s}return -1};if("claude"===s){let e=o.join("\n");if(d(e,s).isPrompt)return{response:(0,c.vp)(e),isComplete:!0,lineCount:r}}let h=(0,c.vp)(l),w=u.test(h),y=m.test(h),$=p.test(h),C=("codex"===s||"gemini"===s)&&w&&!$,x="claude"===s&&w&&y&&!$;if(C||x){let e;let n=[];if(t>=r||a){let t=g(40);e=t>=0?t+1:0}else if("codex"===s)e=Math.max(0,t);else if(t>=r-5){let t=g(50);e=t>=0?t+1:Math.max(0,r-40)}else e=Math.max(0,t);let i=r;for(let t=e;t<r;t++){let e=o[t],r=(0,c.vp)(e);if("codex"===s&&/^›\s+/.test(r)||"gemini"===s&&/^(%|\$|.*@.*[%$#])\s*$/.test(r)){i=t;break}f.some(e=>e.test(r))||n.push(e)}let l=n.join("\n").trim(),u=l.split("\n").slice(-5).join("\n");if(p.test(u))return{response:"",isComplete:!1,lineCount:r};if("claude"===s){let e=(0,c.vp)(l),t=/[╭╮╰╯│]/.test(e)||/░{3,}/.test(e)||/▓{3,}/.test(e),s=/Claude Code|claude\/|v\d+\.\d+/.test(e),n=/Tip:|for shortcuts|\?\s*for help/.test(e),i=/^\s*\/Users\/.*$/m.test(e)&&e.split("\n").length<30,o=e.match(/^[>❯]\s+(\S.*)$/m);if(o){let t=e.indexOf(o[0]);if(0===e.substring(t+o[0].length).trim().split("\n").filter(e=>{let t=e.trim();return t&&!f.some(e=>e.test(t))&&!/^─+$/.test(t)}).length)return{response:"",isComplete:!1,lineCount:r}}else if((t||s||n||i)&&l.length<2e3)return{response:"",isComplete:!1,lineCount:r}}return"gemini"===s&&((l.match(/[░███]/g)||[]).length>.3*l.length||["Waiting for auth","⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"].some(e=>l.includes(e))||!l.includes("✦")&&l.length<10)?{response:"",isComplete:!1,lineCount:r}:{response:l,isComplete:!0,lineCount:i}}let S=o.join("\n");if(d(S,s).isPrompt)return{response:S,isComplete:!0,lineCount:r};let I=[],v=a||t>=r-5,k=v?g(80):-1,P=v?k>=0?k+1:Math.max(0,r-80):Math.max(0,t);for(let e=P;e<r;e++){let t=o[e],s=(0,c.vp)(t);f.some(e=>e.test(s))||I.push(t)}let E=I.join("\n").trim();return E?{response:E,isComplete:!1,lineCount:r}:{response:"",isComplete:!1,lineCount:r}}(m,a,t);if(!p||!p.isComplete){let{thinkingPattern:n}=(0,c.bs)(t),i=(0,c.vp)(m).split("\n").slice(-5).join("\n");if(n.test(i)){let n=(0,o.GP)(s,e,t);n>0&&console.log(`Marked ${n} pending prompt(s) as answered (thinking detected) for ${e}`)}return!1}if(p.lineCount===a&&!i?.inProgressMessageId)return!1;if(p.lineCount<=a)return console.log(`[checkForResponse] Already saved up to line ${a}, skipping (result: ${p.lineCount})`),!1;let h=d(p.response,t);if(h.isPrompt){(0,o.Mf)(s,e,t);let n=(0,o.tn)(s,{worktreeId:e,role:"assistant",content:h.cleanContent,messageType:"prompt",promptData:h.promptData,timestamp:new Date,cliToolId:t});return(0,o.IH)(s,e,t,p.lineCount),(0,r.ps)("message",{worktreeId:e,message:n}),y(e,t),!0}if(!p.response||""===p.response.trim())return(0,o.IH)(s,e,t,p.lineCount),!1;let w="claude"===t?(0,u.Z)(p.response):void 0,$=p.response;if("gemini"===t?$=g(p.response):"claude"===t&&($=f(p.response)),!$||""===$.trim()||"[No content]"===$)return(0,o.IH)(s,e,t,p.lineCount),(0,o.Mf)(s,e,t),!1;$&&await (0,l.o)(s,e,$,t);let C=(0,o.GP)(s,e,t);C>0&&console.log(`Marked ${C} pending prompt(s) as answered for ${e}`);let x=(0,o.zl)(s,e,t);if(x&&p.lineCount<=x.lastCapturedLine)return console.log(`[checkForResponse] Race condition detected, skipping save (result: ${p.lineCount}, current: ${x.lastCapturedLine})`),!1;let S=(0,o.tn)(s,{worktreeId:e,role:"assistant",content:$,messageType:"normal",timestamp:new Date,cliToolId:t,summary:w?.summary,logFileName:w?.logFileName,requestId:w?.requestId});return(0,r.ps)("message",{worktreeId:e,message:S}),(0,o.IH)(s,e,t,p.lineCount),!0}catch(t){return console.error(`Error checking for response (${e}):`,t instanceof Error?t.message:String(t)),!1}}function w(e,t){let s=`${e}:${t}`;y(e,t),p.set(s,Date.now());let n=setInterval(async()=>{let n=p.get(s);if(n&&Date.now()-n>3e5){y(e,t);return}try{await h(e,t)}catch(e){console.error("[Poller] Error:",e)}},2e3);m.set(s,n)}function y(e,t){let s=`${e}:${t}`,n=m.get(s);n&&(clearInterval(n),m.delete(s),p.delete(s))}}};
@@ -1,4 +1,4 @@
1
- exports.id=9367,exports.ids=[9367],exports.modules={58359:()=>{},93739:()=>{},89287:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});let n=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,o=/Request ID: ([^\s\n]+)/,a=/Summary: (.+?)(?:\n─|$)/s;function i(e){let t={content:e},r=n.exec(e);r&&(t.logFileName=r[2]);let i=o.exec(e);i&&(t.requestId=i[1]);let s=a.exec(e);return s&&(t.summary=s[1].trim()),t}},62648:(e,t,r)=>{"use strict";r.d(t,{Lm:()=>g,Uv:()=>d,YI:()=>f,_f:()=>p,xd:()=>y,ym:()=>w});var n=r(10927),o=r(19377),a=r(61282);let i=(0,r(21764).promisify)(a.exec);function s(e){return e instanceof Error?e.message:String(e)}let c=null;async function l(){if(c)return c;if(process.env.CLAUDE_PATH)return c=process.env.CLAUDE_PATH;try{let{stdout:e}=await i("which claude",{timeout:5e3});return c=e.trim()}catch{for(let e of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await i(`test -x "${e}"`,{timeout:1e3}),c=e}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}function u(e){return`mcbd-claude-${e}`}async function d(){try{return await i("which claude",{timeout:5e3}),!0}catch{return!1}}async function f(e){let t=u(e);return await (0,n.Hk)(t)}async function m(e,t=5e3){let r=Date.now();for(;Date.now()-r<t;){let t=await (0,n.xq)(e,{startLine:-50});if(o.V7.test((0,o.vp)(t)))return;await new Promise(e=>setTimeout(e,200))}throw Error(`Prompt detection timeout (${t}ms)`)}async function w(e){let{worktreeId:t,worktreePath:r}=e;if(!await d())throw Error("Claude CLI is not installed or not in PATH");let a=u(t);if(await (0,n.Hk)(a)){console.log(`Claude session ${a} already exists`);return}try{await (0,n.ed)({sessionName:a,workingDirectory:r,historyLimit:5e4});let e=await l();await (0,n.Is)(a,e,!0);let t=Date.now(),i=!1;for(;Date.now()-t<15e3;){await new Promise(e=>setTimeout(e,300));try{let e=await (0,n.xq)(a,{startLine:-50}),r=(0,o.vp)(e);if(o.V7.test(r)||o.FE.test(r)){await new Promise(e=>setTimeout(e,500)),console.log(`Claude initialized in ${Date.now()-t}ms`),i=!0;break}}catch{}}if(!i)throw Error("Claude initialization timeout (15000ms)");console.log(`Started Claude session: ${a}`)}catch(e){throw Error(`Failed to start Claude session: ${s(e)}`)}}async function y(e,t){let r=u(e);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);let a=await (0,n.xq)(r,{startLine:-50});if(!o.V7.test((0,o.vp)(a)))try{await m(r,1e4)}catch{console.warn("[sendMessageToClaude] Prompt not detected, sending anyway")}await (0,n.Is)(r,t,!1),await (0,n.Is)(r,"",!0),console.log(`Sent message to Claude session: ${r}`)}async function g(e,t=1e3){let r=u(e);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,n.xq)(r,{startLine:-t})}catch(e){throw Error(`Failed to capture Claude output: ${s(e)}`)}}async function p(e){let t=u(e);try{await (0,n.Hk)(t)&&(await (0,n.Is)(t,"",!1),await i(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500)));let e=await (0,n.AJ)(t);return e&&console.log(`✓ Stopped Claude session: ${t}`),e}catch(e){return console.error(`Error stopping Claude session: ${s(e)}`),!1}}},19377:(e,t,r)=>{"use strict";r.d(t,{FE:()=>s,V7:()=>i,Wg:()=>d,bs:()=>function e(t){switch(t){case"claude":return{promptPattern:i,separatorPattern:s,thinkingPattern:o,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,o,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/]};case"codex":return{promptPattern:c,separatorPattern:l,thinkingPattern:a,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,a,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/]};case"gemini":return{promptPattern:u,separatorPattern:/^gemini\s+--\s+/m,thinkingPattern:/(?!)/m,skipPatterns:[/^gemini\s+--\s+/,u,/^\s*$/]};default:return e("claude")}},vp:()=>m});let n=(0,r(43895).h)("cli-patterns"),o=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|to interrupt\\)`,"m"),a=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,i=/^[>❯](\s*$|\s+\S)/m,s=/^─{10,}$/m,c=/^›\s*/m,l=/^─.*Worked for.*─+$/m,u=/^(%|\$|.*@.*[%$#])\s*$/m;function d(e,t){let r;let i=n.withContext({cliToolId:e});switch(i.debug("detectThinking:check",{contentLength:t.length}),e){case"claude":default:r=o.test(t);break;case"codex":r=a.test(t);break;case"gemini":r=!1}return i.debug("detectThinking:result",{isThinking:r}),r}let f=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function m(e){return e.replace(f,"")}},76966:(e,t,r)=>{"use strict";r.d(t,{o:()=>a});var n=r(75748),o=r(98636);async function a(e,t,r,a="claude"){let i=(0,n.vX)(e,t);if(i)try{await (0,o.xN)(t,i.content,r,a)}catch(e){console.error("[recordClaudeConversation] Failed to create log file:",e)}}},98636:(e,t,r)=>{"use strict";r.d(t,{e7:()=>f,xN:()=>d});var n=r(20629),o=r.n(n),a=r(55315),i=r.n(a),s=r(73853);let c=(0,r(57569).Hb)("CM_LOG_DIR")||i().join(process.cwd(),"data","logs");function l(e="claude"){return i().join(c,e)}async function u(e="claude"){let t=l(e);try{await o().access(t)}catch{await o().mkdir(t,{recursive:!0})}}async function d(e,t,r,n="claude"){await u(n);let a=function(e,t="claude"){let r=(0,s.WU)(new Date,"yyyy-MM-dd"),n=`${e}-${r}.md`,o=l(t);return i().join(o,n)}(e,n),c=(0,s.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await o().readFile(a,"utf-8")}catch{let t="claude"===n?"Claude Code":"codex"===n?"Codex CLI":"Gemini CLI";d=`# ${t} Conversation Log: ${e}
1
+ exports.id=9367,exports.ids=[9367],exports.modules={58359:()=>{},93739:()=>{},89287:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});let n=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,o=/Request ID: ([^\s\n]+)/,a=/Summary: (.+?)(?:\n─|$)/s;function i(e){let t={content:e},r=n.exec(e);r&&(t.logFileName=r[2]);let i=o.exec(e);i&&(t.requestId=i[1]);let s=a.exec(e);return s&&(t.summary=s[1].trim()),t}},62648:(e,t,r)=>{"use strict";r.d(t,{Lm:()=>p,Uv:()=>d,YI:()=>f,_f:()=>y,xd:()=>g,ym:()=>w});var n=r(10927),o=r(19377),a=r(61282);let i=(0,r(21764).promisify)(a.exec);function s(e){return e instanceof Error?e.message:String(e)}let c=null;async function l(){if(c)return c;if(process.env.CLAUDE_PATH)return c=process.env.CLAUDE_PATH;try{let{stdout:e}=await i("which claude",{timeout:5e3});return c=e.trim()}catch{for(let e of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await i(`test -x "${e}"`,{timeout:1e3}),c=e}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}function u(e){return`mcbd-claude-${e}`}async function d(){try{return await i("which claude",{timeout:5e3}),!0}catch{return!1}}async function f(e){let t=u(e);return await (0,n.Hk)(t)}async function m(e,t=5e3){let r=Date.now();for(;Date.now()-r<t;){let t=await (0,n.xq)(e,{startLine:-50});if(o.V7.test((0,o.vp)(t)))return;await new Promise(e=>setTimeout(e,200))}throw Error(`Prompt detection timeout (${t}ms)`)}async function w(e){let{worktreeId:t,worktreePath:r}=e;if(!await d())throw Error("Claude CLI is not installed or not in PATH");let a=u(t);if(await (0,n.Hk)(a)){console.log(`Claude session ${a} already exists`);return}try{await (0,n.ed)({sessionName:a,workingDirectory:r,historyLimit:5e4});let e=await l();await (0,n.Is)(a,e,!0);let t=Date.now(),i=!1,s=!1;for(;Date.now()-t<15e3;){await new Promise(e=>setTimeout(e,300));try{let e=await (0,n.xq)(a,{startLine:-50}),r=(0,o.vp)(e);if(o.V7.test(r)){await new Promise(e=>setTimeout(e,500)),console.log(`Claude initialized in ${Date.now()-t}ms`),i=!0;break}!s&&o.H3.test(r)&&(await (0,n.Is)(a,"",!0),s=!0,console.log("Trust dialog detected, sending Enter to confirm"))}catch{}}if(!i)throw Error("Claude initialization timeout (15000ms)");console.log(`Started Claude session: ${a}`)}catch(e){throw Error(`Failed to start Claude session: ${s(e)}`)}}async function g(e,t){let r=u(e);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);let a=await (0,n.xq)(r,{startLine:-50});o.V7.test((0,o.vp)(a))||await m(r,1e4),await new Promise(e=>setTimeout(e,500)),await (0,n.Is)(r,t,!1),await (0,n.Is)(r,"",!0),console.log(`Sent message to Claude session: ${r}`)}async function p(e,t=1e3){let r=u(e);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,n.xq)(r,{startLine:-t})}catch(e){throw Error(`Failed to capture Claude output: ${s(e)}`)}}async function y(e){let t=u(e);try{await (0,n.Hk)(t)&&(await (0,n.Is)(t,"",!1),await i(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500)));let e=await (0,n.AJ)(t);return e&&console.log(`✓ Stopped Claude session: ${t}`),e}catch(e){return console.error(`Error stopping Claude session: ${s(e)}`),!1}}},19377:(e,t,r)=>{"use strict";r.d(t,{H3:()=>c,Sg:()=>g,V7:()=>i,Wg:()=>f,bs:()=>function e(t){switch(t){case"claude":return{promptPattern:i,separatorPattern:s,thinkingPattern:o,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,o,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/]};case"codex":return{promptPattern:l,separatorPattern:u,thinkingPattern:a,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,a,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/]};case"gemini":return{promptPattern:d,separatorPattern:/^gemini\s+--\s+/m,thinkingPattern:/(?!)/m,skipPatterns:[/^gemini\s+--\s+/,d,/^\s*$/]};default:return e("claude")}},vp:()=>w});let n=(0,r(43895).h)("cli-patterns"),o=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),a=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,i=/^[>❯](\s*$|\s+\S)/m,s=/^─{10,}$/m,c=/Yes, I trust this folder/m,l=/^›\s*/m,u=/^─.*Worked for.*─+$/m,d=/^(%|\$|.*@.*[%$#])\s*$/m;function f(e,t){let r;let i=n.withContext({cliToolId:e});switch(i.debug("detectThinking:check",{contentLength:t.length}),e){case"claude":default:r=o.test(t);break;case"codex":r=a.test(t);break;case"gemini":r=!1}return i.debug("detectThinking:result",{isThinking:r}),r}let m=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function w(e){return e.replace(m,"")}function g(e){if("claude"===e)return{requireDefaultIndicator:!1}}},76966:(e,t,r)=>{"use strict";r.d(t,{o:()=>a});var n=r(75748),o=r(98636);async function a(e,t,r,a="claude"){let i=(0,n.vX)(e,t);if(i)try{await (0,o.xN)(t,i.content,r,a)}catch(e){console.error("[recordClaudeConversation] Failed to create log file:",e)}}},98636:(e,t,r)=>{"use strict";r.d(t,{e7:()=>f,xN:()=>d});var n=r(20629),o=r.n(n),a=r(55315),i=r.n(a),s=r(73853);let c=(0,r(57569).Hb)("CM_LOG_DIR")||i().join(process.cwd(),"data","logs");function l(e="claude"){return i().join(c,e)}async function u(e="claude"){let t=l(e);try{await o().access(t)}catch{await o().mkdir(t,{recursive:!0})}}async function d(e,t,r,n="claude"){await u(n);let a=function(e,t="claude"){let r=(0,s.WU)(new Date,"yyyy-MM-dd"),n=`${e}-${r}.md`,o=l(t);return i().join(o,n)}(e,n),c=(0,s.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await o().readFile(a,"utf-8")}catch{let t="claude"===n?"Claude Code":"codex"===n?"Codex CLI":"Gemini CLI";d=`# ${t} Conversation Log: ${e}
2
2
 
3
3
  Created: ${c}
4
4
 
@@ -16,4 +16,4 @@ ${r}
16
16
 
17
17
  ---
18
18
 
19
- `,await o().writeFile(a,d,"utf-8"),a}async function f(e,t="all"){let r=[];for(let n of"all"===t?["claude","codex","gemini"]:[t]){await u(n);let t=l(n);try{let n=(await o().readdir(t)).filter(t=>t.startsWith(`${e}-`)&&t.endsWith(".md")).map(e=>i().join(t,e));r.push(...n)}catch{}}return r.sort().reverse()}},43895:(e,t,r)=>{"use strict";r.d(t,{Y:()=>c,h:()=>l});var n=r(57569);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:/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]"}],a=/password|secret|token|key|auth/i,i={debug:0,info:1,warn:2,error:3};function s(e,t,r,s,c){let l=(0,n.LI)().level;if(i[e]<i[l])return;let u=s?function e(t){if("string"==typeof t){let e=t;for(let{pattern:t,replacement:r}of o)e=e.replace(t,r);return e}if("object"==typeof t&&null!==t){if(Array.isArray(t))return t.map(e);let r={};for(let[n,o]of Object.entries(t))a.test(n)?r[n]="[REDACTED]":r[n]=e(o);return r}return t}(s):void 0,d=function(e){if("json"===(0,n.LI)().format)return JSON.stringify(e);let{timestamp:t,level:r,module:o,action:a,data:i,worktreeId:s,cliToolId:c,requestId:l}=e,u=[s,c].filter(Boolean),d=u.length>0?` [${u.join(":")}]`:"",f=l?` (${l.slice(0,8)})`:"",m=i?` ${JSON.stringify(i)}`:"";return`[${t}] [${r.toUpperCase()}] [${o}]${d}${f} ${a}${m}`}({level:e,module:t,action:r,timestamp:new Date().toISOString(),...c,...u&&{data:u}});switch(e){case"error":console.error(d);break;case"warn":console.warn(d);break;default:console.log(d)}}function c(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function l(e){let t=r=>({debug:(t,n)=>s("debug",e,t,n,r),info:(t,n)=>s("info",e,t,n,r),warn:(t,n)=>s("warn",e,t,n,r),error:(t,n)=>s("error",e,t,n,r),withContext:e=>t({...r,...e})});return t()}},10927:(e,t,r)=>{"use strict";r.d(t,{AJ:()=>l,Hk:()=>a,Is:()=>s,ZV:()=>u,ed:()=>i,xq:()=>c});var n=r(61282);let o=(0,r(21764).promisify)(n.exec);async function a(e){try{return await o(`tmux has-session -t "${e}"`,{timeout:5e3}),!0}catch{return!1}}async function i(e,t){let r,n,a;"string"==typeof e?(r=e,n=t,a=5e4):(r=e.sessionName,n=e.workingDirectory,a=e.historyLimit||5e4);try{await o(`tmux new-session -d -s "${r}" -c "${n}"`,{timeout:5e3}),await o(`tmux set-option -t "${r}" history-limit ${a}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to create tmux session: ${e}`)}}async function s(e,t,r=!0){let n=t.replace(/'/g,"'\\''"),a=r?`tmux send-keys -t "${e}" '${n}' C-m`:`tmux send-keys -t "${e}" '${n}'`;try{await o(a,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send keys to tmux session: ${e}`)}}async function c(e,t){let r,n;"number"==typeof t?(r=-t,n="-"):t?(r=t.startLine??-1e4,n=t.endLine??"-"):(r=-1e3,n="-");try{let{stdout:t}=await o(`tmux capture-pane -t "${e}" -p -e -S ${r} -E ${n}`,{timeout:5e3,maxBuffer:10485760});return t}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to capture pane: ${e}`)}}async function l(e){try{return await o(`tmux kill-session -t "${e}"`,{timeout:5e3}),!0}catch(t){let e=t instanceof Error?t.message:String(t);if(e?.includes("no server running")||e?.includes("can't find session"))return!1;throw Error(`Failed to kill tmux session: ${e}`)}}async function u(e,t){try{await o(`tmux send-keys -t "${e}" ${t}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special key: ${e}`)}}},25079:(e,t,r)=>{"use strict";r.d(t,{ZV:()=>l,fM:()=>s,ps:()=>c});var n=r(34893);let o=new Map,a=new Map;function i(e,t){let r=a.get(e);if(console.log(`[WS] handleBroadcast called for ${e}, room size: ${r?.size||0}`),!r){console.log(`[WS] No room found for ${e}`);return}if(0===r.size){console.log(`[WS] Room for ${e} is empty`);return}try{let o=JSON.stringify({type:"broadcast",worktreeId:e,data:t}),a=0,i=0;r.forEach(e=>{if(e.readyState===n.XY.OPEN)try{e.send(o),a++}catch(e){i++,console.error("Error sending WebSocket message to client:",e)}}),console.log(`Broadcast to worktree ${e}: ${a}/${r.size} clients (${i} errors)`)}catch(t){console.error(`Error broadcasting to worktree ${e}:`,t);try{let t=JSON.stringify({type:"broadcast",worktreeId:e,data:{error:"Message encoding error"}});r.forEach(e=>{if(e.readyState===n.XY.OPEN)try{e.send(t)}catch{}})}catch(e){console.error("Failed to send fallback message:",e)}}}function s(e,t){i(e,t)}function c(e,t){t.worktreeId?i(t.worktreeId,{type:e,...t}):console.warn("broadcastMessage called without worktreeId")}function l(e){for(let t of e){let e=a.get(t);e&&(e.forEach(e=>{let r=o.get(e);r&&r.worktreeIds.delete(t)}),a.delete(t),console.log(`[WS] Cleaned up room for worktree: ${t}`))}}}};
19
+ `,await o().writeFile(a,d,"utf-8"),a}async function f(e,t="all"){let r=[];for(let n of"all"===t?["claude","codex","gemini"]:[t]){await u(n);let t=l(n);try{let n=(await o().readdir(t)).filter(t=>t.startsWith(`${e}-`)&&t.endsWith(".md")).map(e=>i().join(t,e));r.push(...n)}catch{}}return r.sort().reverse()}},43895:(e,t,r)=>{"use strict";r.d(t,{Y:()=>c,h:()=>l});var n=r(57569);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:/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]"}],a=/password|secret|token|key|auth/i,i={debug:0,info:1,warn:2,error:3};function s(e,t,r,s,c){let l=(0,n.LI)().level;if(i[e]<i[l])return;let u=s?function e(t){if("string"==typeof t){let e=t;for(let{pattern:t,replacement:r}of o)e=e.replace(t,r);return e}if("object"==typeof t&&null!==t){if(Array.isArray(t))return t.map(e);let r={};for(let[n,o]of Object.entries(t))a.test(n)?r[n]="[REDACTED]":r[n]=e(o);return r}return t}(s):void 0,d=function(e){if("json"===(0,n.LI)().format)return JSON.stringify(e);let{timestamp:t,level:r,module:o,action:a,data:i,worktreeId:s,cliToolId:c,requestId:l}=e,u=[s,c].filter(Boolean),d=u.length>0?` [${u.join(":")}]`:"",f=l?` (${l.slice(0,8)})`:"",m=i?` ${JSON.stringify(i)}`:"";return`[${t}] [${r.toUpperCase()}] [${o}]${d}${f} ${a}${m}`}({level:e,module:t,action:r,timestamp:new Date().toISOString(),...c,...u&&{data:u}});switch(e){case"error":console.error(d);break;case"warn":console.warn(d);break;default:console.log(d)}}function c(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function l(e){let t=r=>({debug:(t,n)=>s("debug",e,t,n,r),info:(t,n)=>s("info",e,t,n,r),warn:(t,n)=>s("warn",e,t,n,r),error:(t,n)=>s("error",e,t,n,r),withContext:e=>t({...r,...e})});return t()}},10927:(e,t,r)=>{"use strict";r.d(t,{AJ:()=>d,Hk:()=>a,Is:()=>s,ZV:()=>f,ed:()=>i,hL:()=>l,xq:()=>u});var n=r(61282);let o=(0,r(21764).promisify)(n.exec);async function a(e){try{return await o(`tmux has-session -t "${e}"`,{timeout:5e3}),!0}catch{return!1}}async function i(e,t){let r,n,a;"string"==typeof e?(r=e,n=t,a=5e4):(r=e.sessionName,n=e.workingDirectory,a=e.historyLimit||5e4);try{await o(`tmux new-session -d -s "${r}" -c "${n}"`,{timeout:5e3}),await o(`tmux set-option -t "${r}" history-limit ${a}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to create tmux session: ${e}`)}}async function s(e,t,r=!0){let n=t.replace(/'/g,"'\\''"),a=r?`tmux send-keys -t "${e}" '${n}' C-m`:`tmux send-keys -t "${e}" '${n}'`;try{await o(a,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send keys to tmux session: ${e}`)}}let c=new Set(["Up","Down","Left","Right","Enter","Space","Tab","Escape","BSpace","DC"]);async function l(e,t){if(0!==t.length){for(let e of t)if(!c.has(e))throw Error(`Invalid special key: ${e}`);try{for(let r=0;r<t.length;r++){let n=`tmux send-keys -t "${e}" ${t[r]}`;await o(n,{timeout:5e3}),r<t.length-1&&await new Promise(e=>setTimeout(e,100))}}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special keys to tmux session: ${e}`)}}}async function u(e,t){let r,n;"number"==typeof t?(r=-t,n="-"):t?(r=t.startLine??-1e4,n=t.endLine??"-"):(r=-1e3,n="-");try{let{stdout:t}=await o(`tmux capture-pane -t "${e}" -p -e -S ${r} -E ${n}`,{timeout:5e3,maxBuffer:10485760});return t}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to capture pane: ${e}`)}}async function d(e){try{return await o(`tmux kill-session -t "${e}"`,{timeout:5e3}),!0}catch(t){let e=t instanceof Error?t.message:String(t);if(e?.includes("no server running")||e?.includes("can't find session"))return!1;throw Error(`Failed to kill tmux session: ${e}`)}}async function f(e,t){try{await o(`tmux send-keys -t "${e}" ${t}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special key: ${e}`)}}},25079:(e,t,r)=>{"use strict";r.d(t,{ZV:()=>l,fM:()=>s,ps:()=>c});var n=r(34893);let o=new Map,a=new Map;function i(e,t){let r=a.get(e);if(console.log(`[WS] handleBroadcast called for ${e}, room size: ${r?.size||0}`),!r){console.log(`[WS] No room found for ${e}`);return}if(0===r.size){console.log(`[WS] Room for ${e} is empty`);return}try{let o=JSON.stringify({type:"broadcast",worktreeId:e,data:t}),a=0,i=0;r.forEach(e=>{if(e.readyState===n.XY.OPEN)try{e.send(o),a++}catch(e){i++,console.error("Error sending WebSocket message to client:",e)}}),console.log(`Broadcast to worktree ${e}: ${a}/${r.size} clients (${i} errors)`)}catch(t){console.error(`Error broadcasting to worktree ${e}:`,t);try{let t=JSON.stringify({type:"broadcast",worktreeId:e,data:{error:"Message encoding error"}});r.forEach(e=>{if(e.readyState===n.XY.OPEN)try{e.send(t)}catch{}})}catch(e){console.error("Failed to send fallback message:",e)}}}function s(e,t){i(e,t)}function c(e,t){t.worktreeId?i(t.worktreeId,{type:e,...t}):console.warn("broadcastMessage called without worktreeId")}function l(e){for(let t of e){let e=a.get(t);e&&(e.forEach(e=>{let r=o.get(e);r&&r.worktreeIds.delete(t)}),a.delete(t),console.log(`[WS] Cleaned up room for worktree: ${t}`))}}}};
@@ -1 +1 @@
1
- {"version":1,"functions":{"/api/external-apps/[id]/health":{},"/api/external-apps":{},"/api/external-apps/[id]":{},"/api/worktrees":{},"/proxy/[...path]":{}}}
1
+ {"version":1,"functions":{"/api/external-apps/[id]/health":{},"/api/external-apps/[id]":{},"/api/external-apps":{},"/api/worktrees":{},"/proxy/[...path]":{}}}
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/28be35e4727ae7ef.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-4f85dcef6279c6ee.js"/><script src="/_next/static/chunks/fd9d1056-bbe86e4ae099d5cd.js" async=""></script><script src="/_next/static/chunks/2117-d845c2cd62e344a6.js" async=""></script><script src="/_next/static/chunks/main-app-420d93e43682fee5.js" async=""></script><script src="/_next/static/chunks/816-c254f4e2406e696a.js" async=""></script><script src="/_next/static/chunks/app/layout-4804cfba519283cf.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>CommandMate</title><meta name="description" content="Git worktree management with Claude CLI and tmux sessions"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-screen bg-gray-50"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-4f85dcef6279c6ee.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/28be35e4727ae7ef.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[12846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[36423,[],\"\"]\n6:I[91795,[\"816\",\"static/chunks/816-c254f4e2406e696a.js\",\"3185\",\"static/chunks/app/layout-4804cfba519283cf.js\"],\"AppProviders\"]\nc:I[61060,[],\"\"]\n7:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n8:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n9:{\"display\":\"inline-block\"}\na:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nd:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"bdUePCj-b9Gv5okYGp49O\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/28be35e4727ae7ef.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ja\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-gray-50\",\"children\":[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$8\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$9\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$a\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lb\"],\"globalErrorComponent\":\"$c\",\"missingSlots\":\"$Wd\"}]\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"CommandMate\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Git worktree management with Claude CLI and tmux sessions\"}]]\n3:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/28be35e4727ae7ef.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-4f85dcef6279c6ee.js"/><script src="/_next/static/chunks/fd9d1056-bbe86e4ae099d5cd.js" async=""></script><script src="/_next/static/chunks/2117-d845c2cd62e344a6.js" async=""></script><script src="/_next/static/chunks/main-app-420d93e43682fee5.js" async=""></script><script src="/_next/static/chunks/816-c254f4e2406e696a.js" async=""></script><script src="/_next/static/chunks/app/layout-4804cfba519283cf.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>CommandMate</title><meta name="description" content="Git worktree management with Claude CLI and tmux sessions"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-screen bg-gray-50"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-4f85dcef6279c6ee.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/28be35e4727ae7ef.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[12846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[36423,[],\"\"]\n6:I[91795,[\"816\",\"static/chunks/816-c254f4e2406e696a.js\",\"3185\",\"static/chunks/app/layout-4804cfba519283cf.js\"],\"AppProviders\"]\nc:I[61060,[],\"\"]\n7:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n8:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n9:{\"display\":\"inline-block\"}\na:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nd:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"oUD-A998xeBoez6zsrTH3\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/28be35e4727ae7ef.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ja\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-gray-50\",\"children\":[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$8\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$9\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$a\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lb\"],\"globalErrorComponent\":\"$c\",\"missingSlots\":\"$Wd\"}]\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"CommandMate\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Git worktree management with Claude CLI and tmux sessions\"}]]\n3:null\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-4f85dcef6279c6ee.js" defer=""></script><script src="/_next/static/chunks/framework-8e0e0f4a6b83a956.js" defer=""></script><script src="/_next/static/chunks/main-b6d727aa9248d4f2.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3c9ca398d360b709.js" defer=""></script><script src="/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js" defer=""></script><script src="/_next/static/bdUePCj-b9Gv5okYGp49O/_buildManifest.js" defer=""></script><script src="/_next/static/bdUePCj-b9Gv5okYGp49O/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"bdUePCj-b9Gv5okYGp49O","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-4f85dcef6279c6ee.js" defer=""></script><script src="/_next/static/chunks/framework-8e0e0f4a6b83a956.js" defer=""></script><script src="/_next/static/chunks/main-b6d727aa9248d4f2.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3c9ca398d360b709.js" defer=""></script><script src="/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js" defer=""></script><script src="/_next/static/oUD-A998xeBoez6zsrTH3/_buildManifest.js" defer=""></script><script src="/_next/static/oUD-A998xeBoez6zsrTH3/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"oUD-A998xeBoez6zsrTH3","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"IOkB23wzKal2Ccf7izSy0LazKzdpzrigNtrcoBvdIbA="}
1
+ {"node":{},"edge":{},"encryptionKey":"DboqXRC/uZET3DwadAh4H2+QfaJK6EBdsx9ARMq93Bo="}