prjct-cli 3.69.0 → 3.69.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.
@@ -1242,7 +1242,7 @@ CREATE TABLE velocity_sprints (
1242
1242
  name TEXT NOT NULL,
1243
1243
  applied_at TEXT NOT NULL
1244
1244
  )
1245
- `);let r=new Set(e.prepare("SELECT version FROM _migrations").all().map(o=>o.version)),s=ia.filter(o=>!r.has(o.version));if(s.length!==0){if(n&&r.size>0)try{let o=`${n}.pre-migrate.bak`;wo.existsSync(o)&&wo.rmSync(o,{force:!0}),e.prepare("VACUUM INTO ?").run(o)}catch(o){console.warn(`prjct: pre-migration backup failed (continuing): ${o?.message??o}`)}for(let o of s)Mu(e,()=>{o.up(e),e.prepare("INSERT INTO _migrations (version, name, applied_at) VALUES (?, ?, ?)").run(o.version,o.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}},S=new aa,k=S});function Cy(t){let e=t.toLowerCase();return e.includes("github")?"github":e.includes("gitlab")?"gitlab":e.includes("bitbucket")?"bitbucket":"other"}function $u(t){let e=t.trim();if(!e)return{};let n=e.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(n)return{provider:Cy(n[1]),repoSlug:n[2]};try{let r=new URL(e),s=r.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!r.host||!s?{}:{provider:Cy(r.host),repoSlug:s}}catch{return{}}}async function r0(t){try{let{stdout:e}=await W("git",["remote","get-url","origin"],{cwd:t});return e.trim()||void 0}catch{return}}async function s0(t){try{let{stdout:e}=await W("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:t});return e.trim().replace(/^origin\//,"")||void 0}catch{return}}function lr(t){return typeof t=="string"&&t.length>0?t:void 0}function Ay(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function o0(t){return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Iy(t){let e=S.getDoc(t,"project")||{},n=lr(e.repoPath),{provider:r,repoSlug:s}=n?$u(await r0(n)||""):{},o=n?await s0(n):void 0,i=Array.isArray(e.techStack)?e.techStack.filter(c=>typeof c=="string"):void 0;return o0({provider:r,repoSlug:s,currentBranch:lr(e.currentBranch),defaultBranch:o,stack:lr(e.stack),techStack:i&&i.length>0?i:void 0,version:lr(e.version),commitCount:Ay(e.commitCount),fileCount:Ay(e.fileCount),lastCommit:lr(e.lastSyncCommit),hasUncommitted:typeof e.hasUncommittedChanges=="boolean"?e.hasUncommittedChanges:void 0,cliVersion:lr(e.cliVersion),syncedAt:lr(e.lastSync)})}var Fu=h(()=>{"use strict";L();se();a(Cy,"providerForHost");a($u,"parseRemote");a(r0,"gitRemoteUrl");a(s0,"gitDefaultBranch");a(lr,"str");a(Ay,"num");a(o0,"compact");a(Iy,"buildProjectMeta")});import{execFile as i0}from"node:child_process";import a0 from"node:crypto";import{promisify as c0}from"node:util";function d0(t,e=u0){let n=Buffer.from(e.replace(/-/g,""),"hex"),s=a0.createHash("sha1").update(n).update(t,"utf8").digest().subarray(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let o=s.toString("hex");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function p0(t){let e;try{let{stdout:s}=await l0("git",["remote","get-url","origin"],{cwd:t});e=s.trim()||void 0}catch{return null}if(!e)return null;let{provider:n,repoSlug:r}=$u(e);return!n||!r?null:`${n}:${r}`.toLowerCase()}async function Ny(t){let e=await p0(t);return e?d0(e):null}var l0,u0,Py=h(()=>{"use strict";Fu();l0=c0(i0),u0="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";a(d0,"uuidv5");a(p0,"repoKey");a(Ny,"deriveProjectId")});var Wu={};I(Wu,{PACKAGE_ROOT:()=>pn,VERSION:()=>Ge,getPackageRoot:()=>Uu,getVersion:()=>la,resetPackageRoot:()=>m0});import Hu from"node:fs";import ca from"node:path";function Uu(){if(is)return is;let t=__dirname;for(let e=0;e<5;e++){let n=ca.join(t,"package.json");if(Hu.existsSync(n))try{if(JSON.parse(Hu.readFileSync(n,"utf-8")).name==="prjct-cli")return is=t,t}catch{}t=ca.dirname(t)}return is=ca.join(__dirname,"..","..",".."),is}function la(){if(ur)return ur;let t="3.69.0";if(t&&/^\d+\.\d+\.\d+/.test(t))return ur=t,ur;try{let e=ca.join(Uu(),"package.json");return ur=JSON.parse(Hu.readFileSync(e,"utf-8")).version,ur}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",N(e)),"0.0.0"}}function m0(t){is=t,ur=null}var ur,is,Ge,pn,Dt=h(()=>{"use strict";ne();ur=null,is=null;a(Uu,"getPackageRoot");a(la,"getVersion");a(m0,"resetPackageRoot");Ge=la(),pn=Uu()});async function ua(t){try{let{stdout:e}=await U(t,{timeout:5e3});return{success:!0,output:e.trim()}}catch{return{success:!1,output:""}}}async function g0(){let t=await ua("gh api user --jq .login");return t.success&&t.output||(t=await ua("git config --global github.user"),t.success&&t.output)?t.output:null}async function f0(){let t=await ua("git config user.name");return t.success&&t.output?t.output:null}async function h0(){let t=await ua("git config user.email");return t.success&&t.output?t.output:null}async function as(){let[t,e,n]=await Promise.all([g0(),f0(),h0()]);return{github:t,email:n,name:e||t||"Unknown"}}var da=h(()=>{"use strict";se();a(ua,"execCommand");a(g0,"detectGitHubUsername");a(f0,"detectGitName");a(h0,"detectGitEmail");a(as,"detect")});var pa={};I(pa,{worktreeService:()=>y0});import Gu from"node:fs/promises";import Vt from"node:path";var Dy,Xu,y0,ma=h(()=>{"use strict";se();Q();Dy=".worktrees",Xu=class{static{a(this,"WorktreeService")}async create(e,n,r={}){let s=await this.getMainWorktree(e),o=Vt.join(s,Dy,n),i=r.branch||`feat/${n}`;await Gu.mkdir(Vt.join(s,Dy),{recursive:!0});let c=r.baseBranch?` ${r.baseBranch}`:"";await U(`git worktree add "${o}" -b "${i}"${c}`,{cwd:s});let{stdout:l}=await U("git rev-parse HEAD",{cwd:o});return{path:o,branch:i,commit:l.trim(),isMain:!1,slug:n}}async remove(e,n=!1){let r=await this.getMainWorktree(e),s;if(n)try{let{stdout:o}=await U("git rev-parse --abbrev-ref HEAD",{cwd:e});s=o.trim()}catch{}if(await U(`git worktree remove "${e}" --force`,{cwd:r}),n&&s&&s!=="main"&&s!=="master")try{await U(`git branch -D "${s}"`,{cwd:r})}catch{}}async list(e){let n=await this.getMainWorktree(e),{stdout:r}=await U("git worktree list --porcelain",{cwd:n});return this.parsePorcelainOutput(r,n)}async detect(e){try{let{stdout:n}=await U("git rev-parse --git-common-dir",{cwd:e}),{stdout:r}=await U("git rev-parse --git-dir",{cwd:e}),s=Vt.resolve(e,n.trim()),o=Vt.resolve(e,r.trim());if(s!==o){let{stdout:i}=await U("git rev-parse --abbrev-ref HEAD",{cwd:e}),{stdout:c}=await U("git rev-parse HEAD",{cwd:e}),{stdout:l}=await U("git rev-parse --show-toplevel",{cwd:e}),u=l.trim(),d=Vt.basename(u);return{path:u,branch:i.trim(),commit:c.trim(),isMain:!1,slug:d}}return null}catch{return null}}async getMainWorktree(e){try{let{stdout:r}=await U("git worktree list --porcelain",{cwd:e}),s=r.split(`
1245
+ `);let r=new Set(e.prepare("SELECT version FROM _migrations").all().map(o=>o.version)),s=ia.filter(o=>!r.has(o.version));if(s.length!==0){if(n&&r.size>0)try{let o=`${n}.pre-migrate.bak`;wo.existsSync(o)&&wo.rmSync(o,{force:!0}),e.prepare("VACUUM INTO ?").run(o)}catch(o){console.warn(`prjct: pre-migration backup failed (continuing): ${o?.message??o}`)}for(let o of s)Mu(e,()=>{o.up(e),e.prepare("INSERT INTO _migrations (version, name, applied_at) VALUES (?, ?, ?)").run(o.version,o.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}},S=new aa,k=S});function Cy(t){let e=t.toLowerCase();return e.includes("github")?"github":e.includes("gitlab")?"gitlab":e.includes("bitbucket")?"bitbucket":"other"}function $u(t){let e=t.trim();if(!e)return{};let n=e.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(n)return{provider:Cy(n[1]),repoSlug:n[2]};try{let r=new URL(e),s=r.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!r.host||!s?{}:{provider:Cy(r.host),repoSlug:s}}catch{return{}}}async function r0(t){try{let{stdout:e}=await W("git",["remote","get-url","origin"],{cwd:t});return e.trim()||void 0}catch{return}}async function s0(t){try{let{stdout:e}=await W("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:t});return e.trim().replace(/^origin\//,"")||void 0}catch{return}}function lr(t){return typeof t=="string"&&t.length>0?t:void 0}function Ay(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function o0(t){return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Iy(t){let e=S.getDoc(t,"project")||{},n=lr(e.repoPath),{provider:r,repoSlug:s}=n?$u(await r0(n)||""):{},o=n?await s0(n):void 0,i=Array.isArray(e.techStack)?e.techStack.filter(c=>typeof c=="string"):void 0;return o0({provider:r,repoSlug:s,currentBranch:lr(e.currentBranch),defaultBranch:o,stack:lr(e.stack),techStack:i&&i.length>0?i:void 0,version:lr(e.version),commitCount:Ay(e.commitCount),fileCount:Ay(e.fileCount),lastCommit:lr(e.lastSyncCommit),hasUncommitted:typeof e.hasUncommittedChanges=="boolean"?e.hasUncommittedChanges:void 0,cliVersion:lr(e.cliVersion),syncedAt:lr(e.lastSync)})}var Fu=h(()=>{"use strict";L();se();a(Cy,"providerForHost");a($u,"parseRemote");a(r0,"gitRemoteUrl");a(s0,"gitDefaultBranch");a(lr,"str");a(Ay,"num");a(o0,"compact");a(Iy,"buildProjectMeta")});import{execFile as i0}from"node:child_process";import a0 from"node:crypto";import{promisify as c0}from"node:util";function d0(t,e=u0){let n=Buffer.from(e.replace(/-/g,""),"hex"),s=a0.createHash("sha1").update(n).update(t,"utf8").digest().subarray(0,16);s[6]=s[6]&15|80,s[8]=s[8]&63|128;let o=s.toString("hex");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20,32)}`}async function p0(t){let e;try{let{stdout:s}=await l0("git",["remote","get-url","origin"],{cwd:t});e=s.trim()||void 0}catch{return null}if(!e)return null;let{provider:n,repoSlug:r}=$u(e);return!n||!r?null:`${n}:${r}`.toLowerCase()}async function Ny(t){let e=await p0(t);return e?d0(e):null}var l0,u0,Py=h(()=>{"use strict";Fu();l0=c0(i0),u0="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";a(d0,"uuidv5");a(p0,"repoKey");a(Ny,"deriveProjectId")});var Wu={};I(Wu,{PACKAGE_ROOT:()=>pn,VERSION:()=>Ge,getPackageRoot:()=>Uu,getVersion:()=>la,resetPackageRoot:()=>m0});import Hu from"node:fs";import ca from"node:path";function Uu(){if(is)return is;let t=__dirname;for(let e=0;e<5;e++){let n=ca.join(t,"package.json");if(Hu.existsSync(n))try{if(JSON.parse(Hu.readFileSync(n,"utf-8")).name==="prjct-cli")return is=t,t}catch{}t=ca.dirname(t)}return is=ca.join(__dirname,"..","..",".."),is}function la(){if(ur)return ur;let t="3.69.1";if(t&&/^\d+\.\d+\.\d+/.test(t))return ur=t,ur;try{let e=ca.join(Uu(),"package.json");return ur=JSON.parse(Hu.readFileSync(e,"utf-8")).version,ur}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",N(e)),"0.0.0"}}function m0(t){is=t,ur=null}var ur,is,Ge,pn,Dt=h(()=>{"use strict";ne();ur=null,is=null;a(Uu,"getPackageRoot");a(la,"getVersion");a(m0,"resetPackageRoot");Ge=la(),pn=Uu()});async function ua(t){try{let{stdout:e}=await U(t,{timeout:5e3});return{success:!0,output:e.trim()}}catch{return{success:!1,output:""}}}async function g0(){let t=await ua("gh api user --jq .login");return t.success&&t.output||(t=await ua("git config --global github.user"),t.success&&t.output)?t.output:null}async function f0(){let t=await ua("git config user.name");return t.success&&t.output?t.output:null}async function h0(){let t=await ua("git config user.email");return t.success&&t.output?t.output:null}async function as(){let[t,e,n]=await Promise.all([g0(),f0(),h0()]);return{github:t,email:n,name:e||t||"Unknown"}}var da=h(()=>{"use strict";se();a(ua,"execCommand");a(g0,"detectGitHubUsername");a(f0,"detectGitName");a(h0,"detectGitEmail");a(as,"detect")});var pa={};I(pa,{worktreeService:()=>y0});import Gu from"node:fs/promises";import Vt from"node:path";var Dy,Xu,y0,ma=h(()=>{"use strict";se();Q();Dy=".worktrees",Xu=class{static{a(this,"WorktreeService")}async create(e,n,r={}){let s=await this.getMainWorktree(e),o=Vt.join(s,Dy,n),i=r.branch||`feat/${n}`;await Gu.mkdir(Vt.join(s,Dy),{recursive:!0});let c=r.baseBranch?` ${r.baseBranch}`:"";await U(`git worktree add "${o}" -b "${i}"${c}`,{cwd:s});let{stdout:l}=await U("git rev-parse HEAD",{cwd:o});return{path:o,branch:i,commit:l.trim(),isMain:!1,slug:n}}async remove(e,n=!1){let r=await this.getMainWorktree(e),s;if(n)try{let{stdout:o}=await U("git rev-parse --abbrev-ref HEAD",{cwd:e});s=o.trim()}catch{}if(await U(`git worktree remove "${e}" --force`,{cwd:r}),n&&s&&s!=="main"&&s!=="master")try{await U(`git branch -D "${s}"`,{cwd:r})}catch{}}async list(e){let n=await this.getMainWorktree(e),{stdout:r}=await U("git worktree list --porcelain",{cwd:n});return this.parsePorcelainOutput(r,n)}async detect(e){try{let{stdout:n}=await U("git rev-parse --git-common-dir",{cwd:e}),{stdout:r}=await U("git rev-parse --git-dir",{cwd:e}),s=Vt.resolve(e,n.trim()),o=Vt.resolve(e,r.trim());if(s!==o){let{stdout:i}=await U("git rev-parse --abbrev-ref HEAD",{cwd:e}),{stdout:c}=await U("git rev-parse HEAD",{cwd:e}),{stdout:l}=await U("git rev-parse --show-toplevel",{cwd:e}),u=l.trim(),d=Vt.basename(u);return{path:u,branch:i.trim(),commit:c.trim(),isMain:!1,slug:d}}return null}catch{return null}}async getMainWorktree(e){try{let{stdout:r}=await U("git worktree list --porcelain",{cwd:e}),s=r.split(`
1246
1246
  `)[0];if(s?.startsWith("worktree "))return s.replace("worktree ","").trim()}catch{}let{stdout:n}=await U("git rev-parse --show-toplevel",{cwd:e});return n.trim()}async setup(e,n){let r=Vt.join(n,".env");await O(r)&&await Gu.copyFile(r,Vt.join(e,".env"));let s=Vt.join(n,".prjct"),o=Vt.join(e,".prjct");await O(s)&&!await O(o)&&await Gu.symlink(s,o,"dir")}async teardown(e){}async clean(e){let n=await this.list(e),r=[],s=await this.getMainWorktree(e);await U("git worktree prune",{cwd:s});for(let o of n)o.isMain||await O(o.path)||r.push(o.slug);return r}parsePorcelainOutput(e,n){let r=[],s=e.trim().split(`
1247
1247
 
1248
1248
  `);for(let o of s){if(!o.trim())continue;let i=o.trim().split(`
@@ -1446,7 +1446,7 @@ ${c.join(`
1446
1446
  ${ue.bold(t)}`),console.log(ue.dim("\u2500".repeat(t.length))),this)},stop(){return Ss&&(clearInterval(Ss),Ss=null,ED()),this},step(t,e,n){if(kt)return this;this.stop();let r=ue.dim(`[${t}/${e}]`);return process.stdout.isTTY?(Ss=setInterval(()=>{process.stdout.write(`\r${zt.cli.spin(Zd++,`${r} ${Fn(n,Ot.STEP_MSG)}`)}`)},Qd),this):(process.stdout.write(`${zt.cli.spin(0,`${r} ${Fn(n,Ot.STEP_MSG)}`)}
1447
1447
  `),this)},progress(t,e,n){if(kt)return this;this.stop();let r=Math.round(t/e*100),s=Math.round(r/10),o=10-s,i=ue.cyan("\u2588".repeat(s))+ue.dim("\u2591".repeat(o)),c=n?` ${Fn(n,Ot.PROGRESS_TEXT)}`:"";return process.stdout.isTTY?(Ss=setInterval(()=>{process.stdout.write(`\r${zt.cli.spin(Zd++,`[${i}] ${r}%${c}`)}`)},Qd),this):(process.stdout.write(`${zt.cli.spin(0,`[${i}] ${r}%${c}`)}
1448
1448
  `),this)}},A=kD});function gw(t,e,n){if(n.md){console.log(`> ${e}`);return}A[t](e)}function Lo(t,e={}){return wD(t,e),{success:!1,error:t}}function Hn(t,e={}){return fw(t,e),{success:!1,error:t}}function et(t,e){let n=N(t);return e&&fw(n,e),{success:!1,error:n}}var wD,fw,Mt=h(()=>{"use strict";ne();lt();a(gw,"notify");wD=a((t,e={})=>gw("warn",t,e),"notifyWarn"),fw=a((t,e={})=>gw("fail",t,e),"notifyFail");a(Lo,"failWith");a(Hn,"failHard");a(et,"failFromError")});import SD from"node:https";import hw from"node:path";import Un from"chalk";function TD(t,e){let n=`Update available! ${t} \u2192 ${e}`,r="prjct upgrade",s=Math.max(n.length,`Run: ${r}`.length)+4,o=`\u250C${"\u2500".repeat(s)}\u2510`,i=`\u2514${"\u2500".repeat(s)}\u2518`,c=a(l=>`\u2502 ${l}${" ".repeat(s-l.length-2)}\u2502`,"pad");return["",Un.yellow(o),Un.yellow(c("")),Un.yellow(`\u2502 ${Un.bold(n)}${" ".repeat(s-n.length-2)}\u2502`),Un.yellow(`\u2502 Run: ${Un.cyan(r)}${" ".repeat(s-r.length-7)}\u2502`),Un.yellow(c("")),Un.yellow(i),""].join(`
1449
- `)}var ep,yw,i5,Ew=h(()=>{"use strict";ne();Q();Dt();$e();ep=class{static{a(this,"UpdateChecker")}packageName;cacheDir;cacheFile;checkInterval;constructor(){this.packageName="prjct-cli",this.cacheDir=B.globalConfigDir,this.cacheFile=hw.join(this.cacheDir,"update-cache.json"),this.checkInterval=1440*60*1e3}async getCurrentVersion(){try{let e=hw.join(__dirname,"..","..","package.json");return(await Oe(e))?.version??null}catch(e){return console.error("Error reading package version:",N(e)),null}}async getLatestVersion(){return new Promise((e,n)=>{let r={hostname:"registry.npmjs.org",path:`/${this.packageName}/latest`,method:"GET",headers:{"User-Agent":"prjct-cli-update-checker",Accept:"application/json"}},s=SD.request(r,o=>{let i="";o.on("data",c=>{i+=c}),o.on("end",()=>{try{if(o.statusCode===200){let c=JSON.parse(i);e(c.version)}else n(new Error(`npm registry returned status ${o.statusCode}`))}catch(c){n(c)}})});s.on("error",o=>{n(o)}),s.setTimeout(5e3,()=>{s.destroy(),n(new Error("Request timeout"))}),s.end()})}compareVersions(e,n){let r=e.split(".").map(Number),s=n.split(".").map(Number);for(let o=0;o<3;o++){let i=r[o]||0,c=s[o]||0;if(i>c)return 1;if(i<c)return-1}return 0}async readCache(){try{if(await O(this.cacheFile))return await Oe(this.cacheFile)}catch{}return null}async writeCache(e){try{await Te(this.cacheFile,e)}catch{}}async checkForUpdates(){try{let e=await this.getCurrentVersion();if(!e)return null;let n=await this.readCache(),r=Date.now();if(n?.lastCheck&&r-n.lastCheck<this.checkInterval)return n.latestVersion&&this.compareVersions(n.latestVersion,e)>0?{updateAvailable:!0,currentVersion:e,latestVersion:n.latestVersion}:{updateAvailable:!1,currentVersion:e,latestVersion:e};let s=await this.getLatestVersion();return await this.writeCache({lastCheck:r,latestVersion:s}),{updateAvailable:this.compareVersions(s,e)>0,currentVersion:e,latestVersion:s}}catch{return null}}async getUpdateNotification(){let e=await this.checkForUpdates();return!e||!e.updateAvailable?null:TD(e.currentVersion,e.latestVersion)}},yw=ep,i5=1440*60*1e3;a(TD,"formatUpdateBanner")});import kw from"node:path";async function _D(){if(process.env.CLAUDE_AGENT||process.env.ANTHROPIC_CLAUDE||global.mcp||process.env.MCP_AVAILABLE)return!0;let t=process.cwd();if(await O(kw.join(t,"CLAUDE.md")))return!0;let e=process.env.HOME||process.env.USERPROFILE||"";if(await O(kw.join(e,".claude")))return!0;let n=process.cwd();return!!(n.includes("/.claude/")||n.includes("/claude-workspace/"))}function xD(){return{...bD}}function RD(){return{...vD}}function CD(){return!!(process.env.CODEX_SANDBOX||process.env.PRJCT_SANDBOX==="1")}async function ww(){if(Wa)return Wa;let t=await _D()?xD():RD();return t.environment={...t.environment,sandboxed:CD()},Wa=t,Wa}var Wa,bD,vD,Sw=h(()=>{"use strict";Q();Wa=null,bD={type:"claude",name:"Claude (Code + Desktop)",isSupported:!0,capabilities:{mcp:!0,filesystem:"mcp",markdown:!0,emojis:!0,colors:!0,interactive:!0,agents:!0},config:{configFile:"CLAUDE.md",commandPrefix:"p.",responseStyle:"rich",dataDir:".prjct",commandsDir:"~/.claude/commands/p"},environment:{hasMCP:!0,sandboxed:!1,persistent:!0,agentSystem:!0}},vD={type:"terminal",name:"Terminal/CLI",isSupported:!0,capabilities:{mcp:!1,filesystem:"native",markdown:!1,emojis:!0,colors:!0,interactive:!0,agents:!1},config:{configFile:null,commandPrefix:"prjct",responseStyle:"cli",dataDir:".prjct",commandsDir:null},environment:{hasMCP:!1,sandboxed:!1,persistent:!0,agentSystem:!1}};a(_D,"isClaudeEnvironment");a(xD,"getClaudeAgent");a(RD,"getTerminalAgent");a(CD,"isSandboxed");a(ww,"detect")});import Ba from"node:fs/promises";var tp,Tw,bw=h(()=>{"use strict";ne();Q();tp=class{static{a(this,"RuntimeClaude")}name;type;constructor(){this.name="Claude Code",this.type="claude"}formatResponse(e,n="info"){let r={success:"\u2705",error:"\u274C",warning:"\u26A0\uFE0F",info:"\u2139\uFE0F",celebrate:"\u{1F389}",ship:"\u{1F680}",focus:"\u{1F3AF}",idea:"\u{1F4A1}",progress:"\u{1F4CA}",task:"\u{1F4DD}"};return`${r[n]||r.info} ${e}`}async readFile(e){try{if(global.mcp?.filesystem)return await global.mcp.filesystem.read(e)}catch(n){console.warn(`MCP readFile failed, falling back to fs: ${N(n)}`)}return await Ba.readFile(e,"utf8")}async writeFile(e,n){try{if(global.mcp?.filesystem)return await global.mcp.filesystem.write(e,n)}catch(r){console.warn(`MCP writeFile failed, falling back to fs: ${N(r)}`)}await Ba.writeFile(e,n,"utf8")}async listDirectory(e){try{if(global.mcp?.filesystem)return await global.mcp.filesystem.list(e)}catch(n){console.warn(`MCP listDirectory failed, falling back to fs: ${N(n)}`)}return await Ba.readdir(e)}async fileExists(e){return O(e)}async createDirectory(e){await Ba.mkdir(e,{recursive:!0})}getTimestamp(){return new Date().toISOString()}formatTaskList(e){return!e||e.length===0?"\u{1F4CB} No tasks queued":`\u{1F4CB} Queue:
1449
+ `)}var ep,yw,i5,Ew=h(()=>{"use strict";ne();Q();Dt();$e();ep=class{static{a(this,"UpdateChecker")}packageName;cacheDir;cacheFile;checkInterval;constructor(){this.packageName="prjct-cli",this.cacheDir=B.globalConfigDir,this.cacheFile=hw.join(this.cacheDir,"update-cache.json"),this.checkInterval=1440*60*1e3}async getCurrentVersion(){try{let e=hw.join(__dirname,"..","..","package.json");return(await Oe(e))?.version??null}catch(e){return console.error("Error reading package version:",N(e)),null}}async getLatestVersion(){return new Promise((e,n)=>{let r=Date.now(),s={hostname:"registry.npmjs.org",path:`/${this.packageName}/latest?prjct_bust=${r}`,method:"GET",headers:{"User-Agent":"prjct-cli-update-checker",Accept:"application/json","Cache-Control":"no-cache, no-store",Pragma:"no-cache"}},o=SD.request(s,i=>{let c="";i.on("data",l=>{c+=l}),i.on("end",()=>{try{if(i.statusCode===200){let l=JSON.parse(c),u=typeof l.version=="string"?l.version.trim():"";if(!/^\d+\.\d+\.\d+/.test(u)){n(new Error(`npm registry returned invalid version: ${u||"(empty)"}`));return}e(u)}else n(new Error(`npm registry returned status ${i.statusCode}`))}catch(l){n(l)}})});o.on("error",i=>{n(i)}),o.setTimeout(5e3,()=>{o.destroy(),n(new Error("Request timeout"))}),o.end()})}compareVersions(e,n){let r=e.split(".").map(Number),s=n.split(".").map(Number);for(let o=0;o<3;o++){let i=r[o]||0,c=s[o]||0;if(i>c)return 1;if(i<c)return-1}return 0}async readCache(){try{if(await O(this.cacheFile))return await Oe(this.cacheFile)}catch{}return null}async writeCache(e){try{await Te(this.cacheFile,e)}catch{}}async checkForUpdates(){try{let e=await this.getCurrentVersion();if(!e)return null;let n=await this.readCache(),r=Date.now();if(n?.lastCheck&&r-n.lastCheck<this.checkInterval)return n.latestVersion&&this.compareVersions(n.latestVersion,e)>0?{updateAvailable:!0,currentVersion:e,latestVersion:n.latestVersion}:{updateAvailable:!1,currentVersion:e,latestVersion:e};let s=await this.getLatestVersion();return await this.writeCache({lastCheck:r,latestVersion:s}),{updateAvailable:this.compareVersions(s,e)>0,currentVersion:e,latestVersion:s}}catch{return null}}async getUpdateNotification(){let e=await this.checkForUpdates();return!e||!e.updateAvailable?null:TD(e.currentVersion,e.latestVersion)}},yw=ep,i5=1440*60*1e3;a(TD,"formatUpdateBanner")});import kw from"node:path";async function _D(){if(process.env.CLAUDE_AGENT||process.env.ANTHROPIC_CLAUDE||global.mcp||process.env.MCP_AVAILABLE)return!0;let t=process.cwd();if(await O(kw.join(t,"CLAUDE.md")))return!0;let e=process.env.HOME||process.env.USERPROFILE||"";if(await O(kw.join(e,".claude")))return!0;let n=process.cwd();return!!(n.includes("/.claude/")||n.includes("/claude-workspace/"))}function xD(){return{...bD}}function RD(){return{...vD}}function CD(){return!!(process.env.CODEX_SANDBOX||process.env.PRJCT_SANDBOX==="1")}async function ww(){if(Wa)return Wa;let t=await _D()?xD():RD();return t.environment={...t.environment,sandboxed:CD()},Wa=t,Wa}var Wa,bD,vD,Sw=h(()=>{"use strict";Q();Wa=null,bD={type:"claude",name:"Claude (Code + Desktop)",isSupported:!0,capabilities:{mcp:!0,filesystem:"mcp",markdown:!0,emojis:!0,colors:!0,interactive:!0,agents:!0},config:{configFile:"CLAUDE.md",commandPrefix:"p.",responseStyle:"rich",dataDir:".prjct",commandsDir:"~/.claude/commands/p"},environment:{hasMCP:!0,sandboxed:!1,persistent:!0,agentSystem:!0}},vD={type:"terminal",name:"Terminal/CLI",isSupported:!0,capabilities:{mcp:!1,filesystem:"native",markdown:!1,emojis:!0,colors:!0,interactive:!0,agents:!1},config:{configFile:null,commandPrefix:"prjct",responseStyle:"cli",dataDir:".prjct",commandsDir:null},environment:{hasMCP:!1,sandboxed:!1,persistent:!0,agentSystem:!1}};a(_D,"isClaudeEnvironment");a(xD,"getClaudeAgent");a(RD,"getTerminalAgent");a(CD,"isSandboxed");a(ww,"detect")});import Ba from"node:fs/promises";var tp,Tw,bw=h(()=>{"use strict";ne();Q();tp=class{static{a(this,"RuntimeClaude")}name;type;constructor(){this.name="Claude Code",this.type="claude"}formatResponse(e,n="info"){let r={success:"\u2705",error:"\u274C",warning:"\u26A0\uFE0F",info:"\u2139\uFE0F",celebrate:"\u{1F389}",ship:"\u{1F680}",focus:"\u{1F3AF}",idea:"\u{1F4A1}",progress:"\u{1F4CA}",task:"\u{1F4DD}"};return`${r[n]||r.info} ${e}`}async readFile(e){try{if(global.mcp?.filesystem)return await global.mcp.filesystem.read(e)}catch(n){console.warn(`MCP readFile failed, falling back to fs: ${N(n)}`)}return await Ba.readFile(e,"utf8")}async writeFile(e,n){try{if(global.mcp?.filesystem)return await global.mcp.filesystem.write(e,n)}catch(r){console.warn(`MCP writeFile failed, falling back to fs: ${N(r)}`)}await Ba.writeFile(e,n,"utf8")}async listDirectory(e){try{if(global.mcp?.filesystem)return await global.mcp.filesystem.list(e)}catch(n){console.warn(`MCP listDirectory failed, falling back to fs: ${N(n)}`)}return await Ba.readdir(e)}async fileExists(e){return O(e)}async createDirectory(e){await Ba.mkdir(e,{recursive:!0})}getTimestamp(){return new Date().toISOString()}formatTaskList(e){return!e||e.length===0?"\u{1F4CB} No tasks queued":`\u{1F4CB} Queue:
1450
1450
  ${e.map((n,r)=>`${r+1}. ${n}`).join(`
1451
1451
  `)}`}formatRecap(e){return`\u{1F4CA} Recap
1452
1452