prjct-cli 3.33.0 → 3.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/bin/prjct-core.mjs +444 -444
- package/dist/bin/prjct-hooks.mjs +220 -220
- package/dist/daemon/entry.mjs +338 -338
- package/dist/mcp/server.mjs +1 -1
- package/package.json +1 -1
package/dist/mcp/server.mjs
CHANGED
|
@@ -1193,7 +1193,7 @@ CREATE TABLE velocity_sprints (
|
|
|
1193
1193
|
`);let n=new Set(e.prepare("SELECT version FROM _migrations").all().map(i=>i.version)),s=Qs.filter(i=>!n.has(i.version));if(s.length!==0){if(t&&n.size>0)try{let i=`${t}.pre-migrate.bak`;Vn.existsSync(i)&&Vn.rmSync(i,{force:!0}),e.prepare("VACUUM INTO ?").run(i)}catch(i){console.warn(`prjct: pre-migration backup failed (continuing): ${i?.message??i}`)}for(let i of s)da(e,()=>{i.up(e),e.prepare("INSERT INTO _migrations (version, name, applied_at) VALUES (?, ?, ?)").run(i.version,i.name,new Date().toISOString())})}}getMigrations(e){return this.getDb(e).prepare("SELECT * FROM _migrations ORDER BY version").all()}getSchemaVersion(e){return this.getDb(e).prepare("SELECT MAX(version) as version FROM _migrations").get()?.version??0}},y=new Zs,h=y});import pa from"node:fs/promises";import hr from"node:path";function Xd(r){let e=[],t,n=new RegExp(nd.source,"g");for(;(t=n.exec(r))!==null;){let s=t[1];(s.startsWith(".")||s.startsWith("@/"))&&e.push(s)}return e}async function qd(r,e,t){let n;if(r.startsWith("@/"))n=hr.join(t,"src",r.slice(2));else{let s=hr.dirname(hr.join(t,e));n=hr.resolve(s,r)}for(let s of rd){let i=n+s;try{if((await pa.stat(i)).isFile())return hr.relative(t,i)}catch{}}return null}async function nw(r){let e=await Gt(r),t={},n={},s=0,i=await Bt(e,50,async o=>{try{let c=await pa.readFile(hr.join(r,o),"utf-8"),l=Xd(c),u=[];for(let d of l){let p=await qd(d,o,r);p&&p!==o&&u.push(p)}return u.length>0?{filePath:o,imports:u}:null}catch{return null}});for(let{filePath:o,imports:c}of i){t[o]=c,s+=c.length;for(let l of c)n[l]||(n[l]=[]),n[l].push(o)}return{forward:t,reverse:n,fileCount:e.length,edgeCount:s,builtAt:new Date().toISOString()}}function ri(r,e,t=2){let n=new Set(r),s=new Map,i=[];for(let o of r){let c=e.forward[o]||[],l=e.reverse[o]||[];for(let u of[...c,...l])n.has(u)||i.push({file:u,depth:1})}for(let o=0;o<i.length;o++){let{file:c,depth:l}=i[o];if(l>t)continue;let u=1/(l+1),d=s.get(c);if(d){u>d.score&&s.set(c,{score:u,depth:l});continue}if(s.set(c,{score:u,depth:l}),l<t){let p=e.forward[c]||[],m=e.reverse[c]||[];for(let g of[...p,...m])!n.has(g)&&!s.has(g)&&i.push({file:g,depth:l+1})}}return Array.from(s.entries()).map(([o,{score:c,depth:l}])=>({path:o,score:c,depth:l})).sort((o,c)=>c.score-o.score)}function sw(r){return Object.values(r).reduce((e,t)=>e+t.length,0)}function iw(r,e){let t=r.forward[e]||[];delete r.forward[e];for(let n of t){let s=(r.reverse[n]||[]).filter(i=>i!==e);s.length===0?delete r.reverse[n]:r.reverse[n]=s}}function ow(r,e){let t=r.reverse[e]||[];delete r.reverse[e];let n=[];for(let s of t){let i=(r.forward[s]||[]).filter(o=>o!==e);i.length===0?delete r.forward[s]:r.forward[s]=i,n.push(s)}return n}function aw(r,e,t){if(t.length===0)return;let n=Array.from(new Set(t));r.forward[e]=n;for(let s of n)r.reverse[s]||(r.reverse[s]=[]),r.reverse[s].includes(e)||r.reverse[s].push(e)}async function cw(r,e){try{let t=await pa.readFile(hr.join(r,e),"utf-8"),n=Xd(t),s=[];for(let i of n){let o=await qd(i,e,r);o&&o!==e&&s.push(o)}return{filePath:e,imports:s}}catch{return null}}function Vd(r){return{schemaVersion:2,fileCount:r.fileCount,edgeCount:r.edgeCount,builtAt:r.builtAt}}function lw(r,e){try{h.transaction(r,t=>{t.prepare("DELETE FROM import_graph_edges").run();let n=t.prepare("INSERT INTO import_graph_edges (from_path, to_path, sort_order) VALUES (?, ?, ?)");for(let[s,i]of Object.entries(e.forward))for(let[o,c]of i.entries())n.run(s,c,o)})}catch{}}function uw(r,e,t,n){try{h.transaction(r,s=>{let i=s.prepare("DELETE FROM import_graph_edges WHERE from_path = ?"),o=s.prepare("INSERT INTO import_graph_edges (from_path, to_path, sort_order) VALUES (?, ?, ?)");for(let c of new Set([...t,...n]))i.run(c);for(let c of t){let l=e.forward[c]||[];for(let[u,d]of l.entries())o.run(c,d,u)}})}catch{}}function dw(r,e,t){try{let n=h.query(r,"SELECT from_path, to_path FROM import_graph_edges ORDER BY from_path, sort_order, to_path");if(n.length===0){if(t?.edgeCount===0){let l={forward:{},reverse:{},fileCount:t.fileCount,edgeCount:0,builtAt:t.builtAt};return yr.set(r,{graph:l,updatedAt:e}),l}return null}let s={},i={};for(let l of n)s[l.from_path]||(s[l.from_path]=[]),s[l.from_path].push(l.to_path),i[l.to_path]||(i[l.to_path]=[]),i[l.to_path].push(l.from_path);let o=new Set;for(let[l,u]of Object.entries(s)){o.add(l);for(let d of u)o.add(d)}let c={forward:s,reverse:i,fileCount:t?.fileCount??o.size,edgeCount:n.length,builtAt:t?.builtAt??e};return yr.set(r,{graph:c,updatedAt:e}),c}catch{return null}}function pw(r,e){h.setDoc(r,ti,Vd(e)),lw(r,e),yr.delete(r)}function mw(r,e,t,n){h.setDoc(r,ti,Vd(e)),uw(r,e,t,n),yr.delete(r)}function tt(r){let e=h.get(r,"SELECT updated_at FROM kv_store WHERE key = ?",ti);if(!e)return yr.delete(r),null;let t=yr.get(r);if(t&&t.updatedAt===e.updated_at)return t.graph;let n=h.getDoc(r,ti),s=dw(r,e.updated_at,n);if(s)return s;if(!n?.forward||!n?.reverse)return null;let i={forward:n.forward,reverse:n.reverse,fileCount:n.fileCount,edgeCount:n.edgeCount,builtAt:n.builtAt};return yr.set(r,{graph:i,updatedAt:e.updated_at}),i}async function Kn(r,e){let t=await nw(r);return pw(e,t),t}async function Kd(r,e,t,n=[]){let s=tt(e);if(!s)return Kn(r,e);let i=new Set([...t,...n]);for(let l of i)iw(s,l);let o=new Set;for(let l of n)for(let u of ow(s,l))o.add(u);let c=await Bt(t,50,l=>cw(r,l));for(let l of c)aw(s,l.filePath,l.imports);return s.edgeCount=sw(s.forward),s.builtAt=new Date().toISOString(),mw(e,s,[...t,...o],n),s}var ti,yr,Qr=f(()=>{"use strict";Ko();I();Z();a(Xd,"extractImportSources");a(qd,"resolveImport");a(nw,"buildGraph");a(ri,"scoreFromSeeds");ti="import-graph",yr=new Map;a(sw,"countEdges");a(iw,"removeOutgoingEdges");a(ow,"removeIncomingEdges");a(aw,"addEdges");a(cw,"importsForFile");a(Vd,"graphMetadata");a(lw,"replacePerFileEdges");a(uw,"updatePerFileEdges");a(dw,"loadGraphFromPerFileEdges");a(pw,"saveGraph");a(mw,"saveGraphUpdate");a(tt,"loadGraph");a(Kn,"indexImports");a(Kd,"updateImportGraph")});function ni(r,e){let t=[...r.added,...r.modified],n=new Set(t),s=new Set,i=tt(e);if(i)for(let l of t){let u=i.reverse[l];if(u)for(let d of u)n.has(d)||s.add(d)}let o=Array.from(s),c=[...t,...o];return{directlyChanged:t,affectedByImports:o,deleted:r.deleted,allAffected:c}}function si(r){let e=new Set;for(let t of r){let n=t.toLowerCase();(n.endsWith(".tsx")||n.endsWith(".jsx")||n.endsWith(".css")||n.endsWith(".scss")||n.endsWith(".vue")||n.endsWith(".svelte")||n.includes("/components/")||n.includes("/pages/")||n.includes("/app/"))&&(e.add("frontend"),e.add("uxui")),(n.includes(".test.")||n.includes(".spec.")||n.includes("__tests__")||n.includes("/test/"))&&e.add("testing"),(n.includes("dockerfile")||n.includes("docker-compose")||n.includes(".dockerignore")||n.includes(".github/")||n.includes("ci/")||n.includes("cd/"))&&e.add("devops"),(n.endsWith(".sql")||n.includes("prisma")||n.includes("drizzle")||n.includes("migration")||n.includes("/db/"))&&e.add("database"),(n.endsWith(".ts")||n.endsWith(".js"))&&!n.includes(".test.")&&!n.includes(".spec.")&&!n.endsWith(".d.ts")&&e.add("backend")}return e}var ma=f(()=>{"use strict";Qr();a(ni,"propagateChanges");a(si,"affectedDomains")});var ga=f(()=>{"use strict"});async function fw(r,e=100){try{let{stdout:t}=await N(`git log --name-only --pretty=format:'---COMMIT---' -${e}`,{cwd:r,maxBuffer:10485760}),n=[],s=null;for(let i of t.split(`
|
|
1194
1194
|
`)){let o=i.trim();o==="---COMMIT---"?(s&&s.size>0&&s.size<=30&&n.push(s),s=new Set):o&&s&&hw(o)&&s.add(o)}return s&&s.size>0&&s.size<=30&&n.push(s),n}catch{return[]}}function hw(r){return/\.(ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|cs|rb|php|vue|svelte)$/i.test(r)&&!r.includes("node_modules/")}async function yw(r,e=100){let t=await fw(r,e),n=new Map,s=new Map;for(let o of t){let c=Array.from(o);for(let l of c)n.set(l,(n.get(l)||0)+1);for(let l=0;l<c.length;l++)for(let u=l+1;u<c.length;u++){let d=Ew(c[l],c[u]);s.set(d,(s.get(d)||0)+1)}}let i={};for(let[o,c]of s){let[l,u]=o.split("\0"),d=n.get(l)||0,p=n.get(u)||0;if(d<2||p<2)continue;let m=d+p-c,g=m>0?c/m:0;g<.1||(i[l]||(i[l]={}),i[u]||(i[u]={}),i[l][u]=g,i[u][l]=g)}return{matrix:i,commitsAnalyzed:t.length,filesAnalyzed:n.size,builtAt:new Date().toISOString()}}function Ew(r,e){return r<e?`${r}\0${e}`:`${e}\0${r}`}function Yn(r,e){let t=new Set(r),n=new Map;for(let s of r){let i=e.matrix[s];if(i)for(let[o,c]of Object.entries(i)){if(t.has(o))continue;let l=n.get(o)||0;c>l&&n.set(o,c)}}return Array.from(n.entries()).map(([s,i])=>({path:s,score:i})).sort((s,i)=>i.score-s.score)}function Tw(r,e){h.setDoc(r,fa,e),ii.delete(r)}function Ct(r){let e=h.get(r,"SELECT updated_at FROM kv_store WHERE key = ?",fa);if(!e)return ii.delete(r),null;let t=ii.get(r);if(t&&t.updatedAt===e.updated_at)return t.matrix;let n=h.getDoc(r,fa);return n&&ii.set(r,{matrix:n,updatedAt:e.updated_at}),n}async function kw(r,e){try{let{stdout:t}=await N(`git rev-list --max-count=${e} HEAD`,{cwd:r,maxBuffer:1048576}),n=t.split(`
|
|
1195
1195
|
`).map(s=>s.trim()).filter(Boolean);return n.length>0?n.join(`
|
|
1196
|
-
`):null}catch{return null}}async function oi(r,e,t=100){let n=await kw(r,t),s=n?Ct(e):null;if(s?.historyFingerprint===n)return s;let i=await yw(r,t);return n&&(i.historyFingerprint=n),Tw(e,i),i}var fa,ii,zn=f(()=>{"use strict";ga();I();ue();a(fw,"parseGitLog");a(hw,"isSourceFile");a(yw,"buildMatrix");a(Ew,"pairKey");a(Yn,"scoreFromSeeds");fa="cochange-index",ii=new Map;a(Tw,"saveMatrix");a(Ct,"loadMatrix");a(kw,"recentHistoryFingerprint");a(oi,"indexCoChanges")});function ww(r){return r instanceof Jn}function Ee(r){return ww(r)||r instanceof Error?r.message:typeof r=="string"?r:"Unknown error"}var Jn,ai,Qn,xt=f(()=>{"use strict";Jn=class extends Error{static{a(this,"PrjctError")}code;isOperational;constructor(e,t="PRJCT_ERROR"){super(e),this.name="PrjctError",this.code=t,this.isOperational=!0,Error.captureStackTrace?.(this,this.constructor)}},ai=class r extends Jn{static{a(this,"ProjectError")}constructor(e,t="PROJECT_ERROR"){super(e,t),this.name="ProjectError"}static notInitialized(){return new r("Project not initialized. Run p. init first.","PROJECT_NOT_INIT")}static notFound(e){return new r(`Project not found: ${e}`,"PROJECT_NOT_FOUND")}static invalidId(e){return new r(`Invalid project ID: ${e}`,"PROJECT_INVALID_ID")}},Qn=class r extends Jn{static{a(this,"AgentError")}constructor(e,t="AGENT_ERROR"){super(e,t),this.name="AgentError"}static notSupported(e){return new r(`Unsupported agent type: ${e}`,"AGENT_NOT_SUPPORTED")}static initFailed(e){return new r(`Agent initialization failed: ${e}`,"AGENT_INIT_FAILED")}};a(ww,"isPrjctError");a(Ee,"getErrorMessage")});function Jd(r){let e=r.toLowerCase();return e.includes("github")?"github":e.includes("gitlab")?"gitlab":e.includes("bitbucket")?"bitbucket":"other"}function ha(r){let e=r.trim();if(!e)return{};let t=e.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(t)return{provider:Jd(t[1]),repoSlug:t[2]};try{let n=new URL(e),s=n.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!n.host||!s?{}:{provider:Jd(n.host),repoSlug:s}}catch{return{}}}async function Sw(r){try{let{stdout:e}=await X("git",["remote","get-url","origin"],{cwd:r});return e.trim()||void 0}catch{return}}async function bw(r){try{let{stdout:e}=await X("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:r});return e.trim().replace(/^origin\//,"")||void 0}catch{return}}function Er(r){return typeof r=="string"&&r.length>0?r:void 0}function Qd(r){return typeof r=="number"&&Number.isFinite(r)?r:void 0}function vw(r){return Object.fromEntries(Object.entries(r).filter(([,e])=>e!==void 0))}async function Zd(r){let e=y.getDoc(r,"project")||{},t=Er(e.repoPath),{provider:n,repoSlug:s}=t?ha(await Sw(t)||""):{},i=t?await bw(t):void 0,o=Array.isArray(e.techStack)?e.techStack.filter(c=>typeof c=="string"):void 0;return vw({provider:n,repoSlug:s,currentBranch:Er(e.currentBranch),defaultBranch:i,stack:Er(e.stack),techStack:o&&o.length>0?o:void 0,version:Er(e.version),commitCount:Qd(e.commitCount),fileCount:Qd(e.fileCount),lastCommit:Er(e.lastSyncCommit),hasUncommitted:typeof e.hasUncommittedChanges=="boolean"?e.hasUncommittedChanges:void 0,cliVersion:Er(e.cliVersion),syncedAt:Er(e.lastSync)})}var ya=f(()=>{"use strict";I();ue();a(Jd,"providerForHost");a(ha,"parseRemote");a(Sw,"gitRemoteUrl");a(bw,"gitDefaultBranch");a(Er,"str");a(Qd,"num");a(vw,"compact");a(Zd,"buildProjectMeta")});import{execFile as _w}from"node:child_process";import Rw from"node:crypto";import{promisify as Aw}from"node:util";function Nw(r,e=xw){let t=Buffer.from(e.replace(/-/g,""),"hex"),s=Rw.createHash("sha1").update(t).update(r,"utf8").digest().subarray(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let i=s.toString("hex");return`${i.slice(0,8)}-${i.slice(8,12)}-${i.slice(12,16)}-${i.slice(16,20)}-${i.slice(20,32)}`}async function Iw(r){let e;try{let{stdout:s}=await Cw("git",["remote","get-url","origin"],{cwd:r});e=s.trim()||void 0}catch{return null}if(!e)return null;let{provider:t,repoSlug:n}=ha(e);return!t||!n?null:`${t}:${n}`.toLowerCase()}async function ep(r){let e=await Iw(r);return e?Nw(e):null}var Cw,xw,tp=f(()=>{"use strict";ya();Cw=Aw(_w),xw="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";a(Nw,"uuidv5");a(Iw,"repoKey");a(ep,"deriveProjectId")});var ka={};z(ka,{PACKAGE_ROOT:()=>Qt,VERSION:()=>Jt,getPackageRoot:()=>Ta,getVersion:()=>li,resetPackageRoot:()=>Pw});import Ea from"node:fs";import ci from"node:path";function Ta(){if(Zr)return Zr;let r=__dirname;for(let e=0;e<5;e++){let t=ci.join(r,"package.json");if(Ea.existsSync(t))try{if(JSON.parse(Ea.readFileSync(t,"utf-8")).name==="prjct-cli")return Zr=r,r}catch{}r=ci.dirname(r)}return Zr=ci.join(__dirname,"..","..",".."),Zr}function li(){if(Tr)return Tr;let r="3.
|
|
1196
|
+
`):null}catch{return null}}async function oi(r,e,t=100){let n=await kw(r,t),s=n?Ct(e):null;if(s?.historyFingerprint===n)return s;let i=await yw(r,t);return n&&(i.historyFingerprint=n),Tw(e,i),i}var fa,ii,zn=f(()=>{"use strict";ga();I();ue();a(fw,"parseGitLog");a(hw,"isSourceFile");a(yw,"buildMatrix");a(Ew,"pairKey");a(Yn,"scoreFromSeeds");fa="cochange-index",ii=new Map;a(Tw,"saveMatrix");a(Ct,"loadMatrix");a(kw,"recentHistoryFingerprint");a(oi,"indexCoChanges")});function ww(r){return r instanceof Jn}function Ee(r){return ww(r)||r instanceof Error?r.message:typeof r=="string"?r:"Unknown error"}var Jn,ai,Qn,xt=f(()=>{"use strict";Jn=class extends Error{static{a(this,"PrjctError")}code;isOperational;constructor(e,t="PRJCT_ERROR"){super(e),this.name="PrjctError",this.code=t,this.isOperational=!0,Error.captureStackTrace?.(this,this.constructor)}},ai=class r extends Jn{static{a(this,"ProjectError")}constructor(e,t="PROJECT_ERROR"){super(e,t),this.name="ProjectError"}static notInitialized(){return new r("Project not initialized. Run p. init first.","PROJECT_NOT_INIT")}static notFound(e){return new r(`Project not found: ${e}`,"PROJECT_NOT_FOUND")}static invalidId(e){return new r(`Invalid project ID: ${e}`,"PROJECT_INVALID_ID")}},Qn=class r extends Jn{static{a(this,"AgentError")}constructor(e,t="AGENT_ERROR"){super(e,t),this.name="AgentError"}static notSupported(e){return new r(`Unsupported agent type: ${e}`,"AGENT_NOT_SUPPORTED")}static initFailed(e){return new r(`Agent initialization failed: ${e}`,"AGENT_INIT_FAILED")}};a(ww,"isPrjctError");a(Ee,"getErrorMessage")});function Jd(r){let e=r.toLowerCase();return e.includes("github")?"github":e.includes("gitlab")?"gitlab":e.includes("bitbucket")?"bitbucket":"other"}function ha(r){let e=r.trim();if(!e)return{};let t=e.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(t)return{provider:Jd(t[1]),repoSlug:t[2]};try{let n=new URL(e),s=n.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!n.host||!s?{}:{provider:Jd(n.host),repoSlug:s}}catch{return{}}}async function Sw(r){try{let{stdout:e}=await X("git",["remote","get-url","origin"],{cwd:r});return e.trim()||void 0}catch{return}}async function bw(r){try{let{stdout:e}=await X("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:r});return e.trim().replace(/^origin\//,"")||void 0}catch{return}}function Er(r){return typeof r=="string"&&r.length>0?r:void 0}function Qd(r){return typeof r=="number"&&Number.isFinite(r)?r:void 0}function vw(r){return Object.fromEntries(Object.entries(r).filter(([,e])=>e!==void 0))}async function Zd(r){let e=y.getDoc(r,"project")||{},t=Er(e.repoPath),{provider:n,repoSlug:s}=t?ha(await Sw(t)||""):{},i=t?await bw(t):void 0,o=Array.isArray(e.techStack)?e.techStack.filter(c=>typeof c=="string"):void 0;return vw({provider:n,repoSlug:s,currentBranch:Er(e.currentBranch),defaultBranch:i,stack:Er(e.stack),techStack:o&&o.length>0?o:void 0,version:Er(e.version),commitCount:Qd(e.commitCount),fileCount:Qd(e.fileCount),lastCommit:Er(e.lastSyncCommit),hasUncommitted:typeof e.hasUncommittedChanges=="boolean"?e.hasUncommittedChanges:void 0,cliVersion:Er(e.cliVersion),syncedAt:Er(e.lastSync)})}var ya=f(()=>{"use strict";I();ue();a(Jd,"providerForHost");a(ha,"parseRemote");a(Sw,"gitRemoteUrl");a(bw,"gitDefaultBranch");a(Er,"str");a(Qd,"num");a(vw,"compact");a(Zd,"buildProjectMeta")});import{execFile as _w}from"node:child_process";import Rw from"node:crypto";import{promisify as Aw}from"node:util";function Nw(r,e=xw){let t=Buffer.from(e.replace(/-/g,""),"hex"),s=Rw.createHash("sha1").update(t).update(r,"utf8").digest().subarray(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let i=s.toString("hex");return`${i.slice(0,8)}-${i.slice(8,12)}-${i.slice(12,16)}-${i.slice(16,20)}-${i.slice(20,32)}`}async function Iw(r){let e;try{let{stdout:s}=await Cw("git",["remote","get-url","origin"],{cwd:r});e=s.trim()||void 0}catch{return null}if(!e)return null;let{provider:t,repoSlug:n}=ha(e);return!t||!n?null:`${t}:${n}`.toLowerCase()}async function ep(r){let e=await Iw(r);return e?Nw(e):null}var Cw,xw,tp=f(()=>{"use strict";ya();Cw=Aw(_w),xw="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";a(Nw,"uuidv5");a(Iw,"repoKey");a(ep,"deriveProjectId")});var ka={};z(ka,{PACKAGE_ROOT:()=>Qt,VERSION:()=>Jt,getPackageRoot:()=>Ta,getVersion:()=>li,resetPackageRoot:()=>Pw});import Ea from"node:fs";import ci from"node:path";function Ta(){if(Zr)return Zr;let r=__dirname;for(let e=0;e<5;e++){let t=ci.join(r,"package.json");if(Ea.existsSync(t))try{if(JSON.parse(Ea.readFileSync(t,"utf-8")).name==="prjct-cli")return Zr=r,r}catch{}r=ci.dirname(r)}return Zr=ci.join(__dirname,"..","..",".."),Zr}function li(){if(Tr)return Tr;let r="3.34.0";if(r&&/^\d+\.\d+\.\d+/.test(r))return Tr=r,Tr;try{let e=ci.join(Ta(),"package.json");return Tr=JSON.parse(Ea.readFileSync(e,"utf-8")).version,Tr}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",w(e)),"0.0.0"}}function Pw(r){Zr=r,Tr=null}var Tr,Zr,Jt,Qt,Nt=f(()=>{"use strict";Q();Tr=null,Zr=null;a(Ta,"getPackageRoot");a(li,"getVersion");a(Pw,"resetPackageRoot");Jt=li(),Qt=Ta()});async function ui(r){try{let{stdout:e}=await N(r,{timeout:5e3});return{success:!0,output:e.trim()}}catch{return{success:!1,output:""}}}async function Dw(){let r=await ui("gh api user --jq .login");return r.success&&r.output||(r=await ui("git config --global github.user"),r.success&&r.output)?r.output:null}async function Ow(){let r=await ui("git config user.name");return r.success&&r.output?r.output:null}async function Lw(){let r=await ui("git config user.email");return r.success&&r.output?r.output:null}async function en(){let[r,e,t]=await Promise.all([Dw(),Ow(),Lw()]);return{github:r,email:t,name:e||r||"Unknown"}}var di=f(()=>{"use strict";ue();a(ui,"execCommand");a(Dw,"detectGitHubUsername");a(Ow,"detectGitName");a(Lw,"detectGitEmail");a(en,"detect")});var va={};z(va,{worktreeService:()=>jw});import Sa from"node:fs/promises";import gt from"node:path";var rp,ba,jw,_a=f(()=>{"use strict";ue();Z();rp=".worktrees",ba=class{static{a(this,"WorktreeService")}async create(e,t,n={}){let s=await this.getMainWorktree(e),i=gt.join(s,rp,t),o=n.branch||`feat/${t}`;await Sa.mkdir(gt.join(s,rp),{recursive:!0});let c=n.baseBranch?` ${n.baseBranch}`:"";await N(`git worktree add "${i}" -b "${o}"${c}`,{cwd:s});let{stdout:l}=await N("git rev-parse HEAD",{cwd:i});return{path:i,branch:o,commit:l.trim(),isMain:!1,slug:t}}async remove(e,t=!1){let n=await this.getMainWorktree(e),s;if(t)try{let{stdout:i}=await N("git rev-parse --abbrev-ref HEAD",{cwd:e});s=i.trim()}catch{}if(await N(`git worktree remove "${e}" --force`,{cwd:n}),t&&s&&s!=="main"&&s!=="master")try{await N(`git branch -D "${s}"`,{cwd:n})}catch{}}async list(e){let t=await this.getMainWorktree(e),{stdout:n}=await N("git worktree list --porcelain",{cwd:t});return this.parsePorcelainOutput(n,t)}async detect(e){try{let{stdout:t}=await N("git rev-parse --git-common-dir",{cwd:e}),{stdout:n}=await N("git rev-parse --git-dir",{cwd:e}),s=gt.resolve(e,t.trim()),i=gt.resolve(e,n.trim());if(s!==i){let{stdout:o}=await N("git rev-parse --abbrev-ref HEAD",{cwd:e}),{stdout:c}=await N("git rev-parse HEAD",{cwd:e}),{stdout:l}=await N("git rev-parse --show-toplevel",{cwd:e}),u=l.trim(),d=gt.basename(u);return{path:u,branch:o.trim(),commit:c.trim(),isMain:!1,slug:d}}return null}catch{return null}}async getMainWorktree(e){try{let{stdout:n}=await N("git worktree list --porcelain",{cwd:e}),s=n.split(`
|
|
1197
1197
|
`)[0];if(s?.startsWith("worktree "))return s.replace("worktree ","").trim()}catch{}let{stdout:t}=await N("git rev-parse --show-toplevel",{cwd:e});return t.trim()}async setup(e,t){let n=gt.join(t,".env");await _(n)&&await Sa.copyFile(n,gt.join(e,".env"));let s=gt.join(t,".prjct"),i=gt.join(e,".prjct");await _(s)&&!await _(i)&&await Sa.symlink(s,i,"dir")}async teardown(e){}async clean(e){let t=await this.list(e),n=[],s=await this.getMainWorktree(e);await N("git worktree prune",{cwd:s});for(let i of t)i.isMain||await _(i.path)||n.push(i.slug);return n}parsePorcelainOutput(e,t){let n=[],s=e.trim().split(`
|
|
1198
1198
|
|
|
1199
1199
|
`);for(let i of s){if(!i.trim())continue;let o=i.trim().split(`
|