prjct-cli 3.74.0 → 3.75.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 +604 -600
- package/dist/bin/prjct-hooks.mjs +1 -1
- package/dist/daemon/entry.mjs +526 -522
- package/dist/mcp/server.mjs +1 -1
- package/package.json +1 -1
package/dist/bin/prjct-hooks.mjs
CHANGED
|
@@ -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=fa.filter(o=>!r.has(o.version));if(s.length!==0){if(n&&r.size>0)try{let o=`${n}.pre-migrate.bak`;_o.existsSync(o)&&_o.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)Ju(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}},w=new ga,E=w});function Yy(t){let e=t.toLowerCase();return e.includes("github")?"github":e.includes("gitlab")?"gitlab":e.includes("bitbucket")?"bitbucket":"other"}function Ku(t){let e=t.trim();if(!e)return{};let n=e.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(n)return{provider:Yy(n[1]),repoSlug:n[2]};try{let r=new URL(e),s=r.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!r.host||!s?{}:{provider:Yy(r.host),repoSlug:s}}catch{return{}}}async function P0(t){try{let{stdout:e}=await K("git",["remote","get-url","origin"],{cwd:t});return e.trim()||void 0}catch{return}}async function D0(t){try{let{stdout:e}=await K("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:t});return e.trim().replace(/^origin\//,"")||void 0}catch{return}}function mr(t){return typeof t=="string"&&t.length>0?t:void 0}function zy(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function L0(t){return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Qy(t){let e=w.getDoc(t,"project")||{},n=mr(e.repoPath),{provider:r,repoSlug:s}=n?Ku(await P0(n)||""):{},o=n?await D0(n):void 0,i=Array.isArray(e.techStack)?e.techStack.filter(c=>typeof c=="string"):void 0;return L0({provider:r,repoSlug:s,currentBranch:mr(e.currentBranch),defaultBranch:o,stack:mr(e.stack),techStack:i&&i.length>0?i:void 0,version:mr(e.version),commitCount:zy(e.commitCount),fileCount:zy(e.fileCount),lastCommit:mr(e.lastSyncCommit),hasUncommitted:typeof e.hasUncommittedChanges=="boolean"?e.hasUncommittedChanges:void 0,cliVersion:mr(e.cliVersion),syncedAt:mr(e.lastSync)})}var Yu=h(()=>{"use strict";M();ee();a(Yy,"providerForHost");a(Ku,"parseRemote");a(P0,"gitRemoteUrl");a(D0,"gitDefaultBranch");a(mr,"str");a(zy,"num");a(L0,"compact");a(Qy,"buildProjectMeta")});import O0 from"node:crypto";function M0(t,e=j0){let n=Buffer.from(e.replace(/-/g,""),"hex"),s=O0.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 $0(t){let e;try{let{stdout:s}=await K("git",["remote","get-url","origin"],{cwd:t});e=s.trim()||void 0}catch{return null}if(!e)return null;let{provider:n,repoSlug:r}=Ku(e);return!n||!r?null:`${n}:${r}`.toLowerCase()}async function Zy(t){let e=await $0(t);return e?M0(e):null}var j0,eE=h(()=>{"use strict";ee();Yu();j0="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";a(M0,"uuidv5");a($0,"repoKey");a(Zy,"deriveProjectId")});var Zu={};I(Zu,{PACKAGE_ROOT:()=>gn,VERSION:()=>qe,getPackageRoot:()=>Qu,getVersion:()=>ya,resetPackageRoot:()=>F0});import zu from"node:fs";import ha from"node:path";function Qu(){if(us)return us;let t=__dirname;for(let e=0;e<5;e++){let n=ha.join(t,"package.json");if(zu.existsSync(n))try{if(JSON.parse(zu.readFileSync(n,"utf-8")).name==="prjct-cli")return us=t,t}catch{}t=ha.dirname(t)}return us=ha.join(__dirname,"..","..",".."),us}function ya(){if(fr)return fr;let t="3.
|
|
1245
|
+
`);let r=new Set(e.prepare("SELECT version FROM _migrations").all().map(o=>o.version)),s=fa.filter(o=>!r.has(o.version));if(s.length!==0){if(n&&r.size>0)try{let o=`${n}.pre-migrate.bak`;_o.existsSync(o)&&_o.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)Ju(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}},w=new ga,E=w});function Yy(t){let e=t.toLowerCase();return e.includes("github")?"github":e.includes("gitlab")?"gitlab":e.includes("bitbucket")?"bitbucket":"other"}function Ku(t){let e=t.trim();if(!e)return{};let n=e.match(/^[^/@]+@([^:/]+):(.+?)(?:\.git)?\/?$/);if(n)return{provider:Yy(n[1]),repoSlug:n[2]};try{let r=new URL(e),s=r.pathname.replace(/^\/+/,"").replace(/\.git$/,"").replace(/\/+$/,"");return!r.host||!s?{}:{provider:Yy(r.host),repoSlug:s}}catch{return{}}}async function P0(t){try{let{stdout:e}=await K("git",["remote","get-url","origin"],{cwd:t});return e.trim()||void 0}catch{return}}async function D0(t){try{let{stdout:e}=await K("git",["symbolic-ref","--short","refs/remotes/origin/HEAD"],{cwd:t});return e.trim().replace(/^origin\//,"")||void 0}catch{return}}function mr(t){return typeof t=="string"&&t.length>0?t:void 0}function zy(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function L0(t){return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Qy(t){let e=w.getDoc(t,"project")||{},n=mr(e.repoPath),{provider:r,repoSlug:s}=n?Ku(await P0(n)||""):{},o=n?await D0(n):void 0,i=Array.isArray(e.techStack)?e.techStack.filter(c=>typeof c=="string"):void 0;return L0({provider:r,repoSlug:s,currentBranch:mr(e.currentBranch),defaultBranch:o,stack:mr(e.stack),techStack:i&&i.length>0?i:void 0,version:mr(e.version),commitCount:zy(e.commitCount),fileCount:zy(e.fileCount),lastCommit:mr(e.lastSyncCommit),hasUncommitted:typeof e.hasUncommittedChanges=="boolean"?e.hasUncommittedChanges:void 0,cliVersion:mr(e.cliVersion),syncedAt:mr(e.lastSync)})}var Yu=h(()=>{"use strict";M();ee();a(Yy,"providerForHost");a(Ku,"parseRemote");a(P0,"gitRemoteUrl");a(D0,"gitDefaultBranch");a(mr,"str");a(zy,"num");a(L0,"compact");a(Qy,"buildProjectMeta")});import O0 from"node:crypto";function M0(t,e=j0){let n=Buffer.from(e.replace(/-/g,""),"hex"),s=O0.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 $0(t){let e;try{let{stdout:s}=await K("git",["remote","get-url","origin"],{cwd:t});e=s.trim()||void 0}catch{return null}if(!e)return null;let{provider:n,repoSlug:r}=Ku(e);return!n||!r?null:`${n}:${r}`.toLowerCase()}async function Zy(t){let e=await $0(t);return e?M0(e):null}var j0,eE=h(()=>{"use strict";ee();Yu();j0="6f9b2c1a-3d4e-5f60-8a7b-1c2d3e4f5a6b";a(M0,"uuidv5");a($0,"repoKey");a(Zy,"deriveProjectId")});var Zu={};I(Zu,{PACKAGE_ROOT:()=>gn,VERSION:()=>qe,getPackageRoot:()=>Qu,getVersion:()=>ya,resetPackageRoot:()=>F0});import zu from"node:fs";import ha from"node:path";function Qu(){if(us)return us;let t=__dirname;for(let e=0;e<5;e++){let n=ha.join(t,"package.json");if(zu.existsSync(n))try{if(JSON.parse(zu.readFileSync(n,"utf-8")).name==="prjct-cli")return us=t,t}catch{}t=ha.dirname(t)}return us=ha.join(__dirname,"..","..",".."),us}function ya(){if(fr)return fr;let t="3.75.0";if(t&&/^\d+\.\d+\.\d+/.test(t))return fr=t,fr;try{let e=ha.join(Qu(),"package.json");return fr=JSON.parse(zu.readFileSync(e,"utf-8")).version,fr}catch(e){return process.env.PRJCT_DEBUG==="1"&&console.error("Failed to read version from package.json:",N(e)),"0.0.0"}}function F0(t){us=t,fr=null}var fr,us,qe,gn,jt=h(()=>{"use strict";ie();fr=null,us=null;a(Qu,"getPackageRoot");a(ya,"getVersion");a(F0,"resetPackageRoot");qe=ya(),gn=Qu()});async function Ea(t){try{let{stdout:e}=await V(t,{timeout:5e3});return{success:!0,output:e.trim()}}catch{return{success:!1,output:""}}}async function H0(){let t=await Ea("gh api user --jq .login");return t.success&&t.output||(t=await Ea("git config --global github.user"),t.success&&t.output)?t.output:null}async function U0(){let t=await Ea("git config user.name");return t.success&&t.output?t.output:null}async function B0(){let t=await Ea("git config user.email");return t.success&&t.output?t.output:null}async function ds(){let[t,e,n]=await Promise.all([H0(),U0(),B0()]);return{github:t,email:n,name:e||t||"Unknown"}}var ka=h(()=>{"use strict";ee();a(Ea,"execCommand");a(H0,"detectGitHubUsername");a(U0,"detectGitName");a(B0,"detectGitEmail");a(ds,"detect")});var wa={};I(wa,{worktreeService:()=>W0});import td from"node:fs/promises";import Yt from"node:path";var tE,nd,W0,Sa=h(()=>{"use strict";ee();ne();tE=".worktrees",nd=class{static{a(this,"WorktreeService")}async create(e,n,r={}){let s=await this.getMainWorktree(e),o=Yt.join(s,tE,n),i=r.branch||`feat/${n}`;await td.mkdir(Yt.join(s,tE),{recursive:!0});let c=r.baseBranch?` ${r.baseBranch}`:"";await V(`git worktree add "${o}" -b "${i}"${c}`,{cwd:s});let{stdout:l}=await V("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 V("git rev-parse --abbrev-ref HEAD",{cwd:e});s=o.trim()}catch{}if(await V(`git worktree remove "${e}" --force`,{cwd:r}),n&&s&&s!=="main"&&s!=="master")try{await V(`git branch -D "${s}"`,{cwd:r})}catch{}}async list(e){let n=await this.getMainWorktree(e),{stdout:r}=await V("git worktree list --porcelain",{cwd:n});return this.parsePorcelainOutput(r,n)}async detect(e){try{let{stdout:n}=await V("git rev-parse --git-common-dir",{cwd:e}),{stdout:r}=await V("git rev-parse --git-dir",{cwd:e}),s=Yt.resolve(e,n.trim()),o=Yt.resolve(e,r.trim());if(s!==o){let{stdout:i}=await V("git rev-parse --abbrev-ref HEAD",{cwd:e}),{stdout:c}=await V("git rev-parse HEAD",{cwd:e}),{stdout:l}=await V("git rev-parse --show-toplevel",{cwd:e}),u=l.trim(),d=Yt.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 V("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 V("git rev-parse --show-toplevel",{cwd:e});return n.trim()}async setup(e,n){let r=Yt.join(n,".env");await $(r)&&await td.copyFile(r,Yt.join(e,".env"));let s=Yt.join(n,".prjct"),o=Yt.join(e,".prjct");await $(s)&&!await $(o)&&await td.symlink(s,o,"dir")}async teardown(e){}async clean(e){let n=await this.list(e),r=[],s=await this.getMainWorktree(e);await V("git worktree prune",{cwd:s});for(let o of n)o.isMain||await $(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(`
|