prjct-cli 2.25.0 → 2.26.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 +32 -32
- package/dist/daemon/entry.mjs +1 -1
- package/dist/mcp/server.mjs +23 -23
- package/package.json +1 -1
package/dist/daemon/entry.mjs
CHANGED
|
@@ -746,7 +746,7 @@ ${r.body(e)}`}function rE(){return process.env.HOME||eE.homedir()}var al,cl,qg,X
|
|
|
746
746
|
WHERE memories_fts MATCH ?
|
|
747
747
|
AND m.deleted_at IS NULL
|
|
748
748
|
ORDER BY bm25(memories_fts) ASC, m.created_at DESC
|
|
749
|
-
LIMIT ?`,s,t)}catch{return[]}return o.map(i=>{let a={};if(i.tags)try{let l=JSON.parse(i.tags);l&&typeof l=="object"&&(a=l)}catch{}return{id:i.id,type:i.type??"fact",content:i.content,tags:a,rememberedAt:i.created_at,provenance:i.provenance??"declared"}})},recall(r,e={}){let t=e.limit??CE,n=Math.max(t*RE,PE),s=e.types&&e.types.length>0?new Set(e.types):null,o=s?s.has("shipped"):!0,a=(s?[...s].some(d=>d!=="shipped"):!0)?E.query(r,"SELECT id, type, data, timestamp FROM events WHERE type LIKE ? ORDER BY id DESC LIMIT ?",`${Fs}%`,n):[],l=o?E.query(r,"SELECT id, name, type, shipped_at, data FROM shipped_features ORDER BY shipped_at DESC LIMIT ?",n):[],u=[...a.map(Cl),...l.map(Hf)];return s&&(u=u.filter(d=>s.has(d.type))),e.tags&&(u=u.filter(d=>AE(d,e.tags??{}))),e.topic&&(u=u.filter(d=>xE(d,e.topic))),u.sort((d,p)=>p.rememberedAt.localeCompare(d.rememberedAt)),e.dedupeByKey!==!1&&(u=jE(u)),u.slice(0,t)},getById(r,e){let t=String(e).trim().match(/^(?:mem[_-])?(\d+)$/i);if(!t)return null;let n=Number(t[1]);try{let s=E.get(r,"SELECT id, type, data, timestamp FROM events WHERE id = ? AND type LIKE ?",n,`${Fs}%`);return s?Cl(s):null}catch{return null}},allEntriesForIndex(r){try{let e=E.query(r,"SELECT id, type, data, timestamp FROM events WHERE type LIKE ? ORDER BY id DESC",`${Fs}%`),t=E.query(r,"SELECT id, name, type, shipped_at, data FROM shipped_features ORDER BY shipped_at DESC");return[...e.map(Cl),...t.map(Hf)]}catch{return[]}},similar(r,e,t=10){let n=e.toLowerCase().split(/[^a-z0-9]+/).filter(i=>i.length>3);return n.length===0?[]:J.recall(r,{limit:200}).map(i=>{let a=`${i.content} ${Object.values(i.tags).join(" ")}`.toLowerCase(),l=n.reduce((u,d)=>a.includes(d)?u+1:u,0);return{entry:i,hits:l}}).filter(i=>i.hits>0).sort((i,a)=>a.hits-i.hits).slice(0,t).map(i=>i.entry)}},Wf=72;c(_E,"linkLabel");c(Li,"deriveTitle");c(Tn,"linkifyMemRefs");c(Wt,"formatMemoryMd")});var Kf={};se(Kf,{legacyCrewSweep:()=>OE});import Vf from"node:fs/promises";import Jf from"node:path";function IE(r){let e={required:r.required,minVersion:r.minVersion,enrolledAt:r.enrolledAt};return r.enrolledBy!==null&&(e.enrolledBy=r.enrolledBy),`${JSON.stringify(e,null,2)}
|
|
749
|
+
LIMIT ?`,s,t)}catch{return[]}return o.map(i=>{let a={};if(i.tags)try{let l=JSON.parse(i.tags);l&&typeof l=="object"&&(a=l)}catch{}return{id:i.id,type:i.type??"fact",content:i.content,tags:a,rememberedAt:i.created_at,provenance:i.provenance??"declared"}})},recall(r,e={}){let t=e.limit??CE,n=Math.max(t*RE,PE),s=e.types&&e.types.length>0?new Set(e.types):null,o=s?s.has("shipped"):!0,a=(s?[...s].some(d=>d!=="shipped"):!0)?E.query(r,"SELECT id, type, data, timestamp FROM events WHERE type LIKE ? ORDER BY id DESC LIMIT ?",`${Fs}%`,n):[],l=o?E.query(r,"SELECT id, name, type, shipped_at, data FROM shipped_features ORDER BY shipped_at DESC LIMIT ?",n):[],u=[...a.map(Cl),...l.map(Hf)];return s&&(u=u.filter(d=>s.has(d.type))),e.tags&&(u=u.filter(d=>AE(d,e.tags??{}))),e.topic&&(u=u.filter(d=>xE(d,e.topic))),u.sort((d,p)=>p.rememberedAt.localeCompare(d.rememberedAt)),e.dedupeByKey!==!1&&(u=jE(u)),u.slice(0,t)},getById(r,e){let t=String(e).trim().match(/^(?:mem[_-])?(\d+)$/i);if(!t)return null;let n=Number(t[1]);try{let s=E.get(r,"SELECT id, type, data, timestamp FROM events WHERE id = ? AND type LIKE ?",n,`${Fs}%`);return s?Cl(s):null}catch{return null}},expandWithLinks(r,e,t=5){if(e.length===0||t<=0)return[];let n=/\bmem[_-](\d+)\b/g,s=["resolves","relates","supersedes","superseded-by","duplicates","spec"],o=new Set(e.map(a=>a.id)),i=[];for(let a of e){if(i.length>=t)break;let l=new Set;for(let u of s){let d=a.tags?.[u];if(d)for(let p of String(d).matchAll(n))l.add(`mem_${p[1]}`)}for(let u of a.content.matchAll(n))l.add(`mem_${u[1]}`);for(let u of l){if(i.length>=t)break;if(o.has(u))continue;o.add(u);let d=J.getById(r,u);d&&i.push(d)}}return i},allEntriesForIndex(r){try{let e=E.query(r,"SELECT id, type, data, timestamp FROM events WHERE type LIKE ? ORDER BY id DESC",`${Fs}%`),t=E.query(r,"SELECT id, name, type, shipped_at, data FROM shipped_features ORDER BY shipped_at DESC");return[...e.map(Cl),...t.map(Hf)]}catch{return[]}},similar(r,e,t=10){let n=e.toLowerCase().split(/[^a-z0-9]+/).filter(i=>i.length>3);return n.length===0?[]:J.recall(r,{limit:200}).map(i=>{let a=`${i.content} ${Object.values(i.tags).join(" ")}`.toLowerCase(),l=n.reduce((u,d)=>a.includes(d)?u+1:u,0);return{entry:i,hits:l}}).filter(i=>i.hits>0).sort((i,a)=>a.hits-i.hits).slice(0,t).map(i=>i.entry)}},Wf=72;c(_E,"linkLabel");c(Li,"deriveTitle");c(Tn,"linkifyMemRefs");c(Wt,"formatMemoryMd")});var Kf={};se(Kf,{legacyCrewSweep:()=>OE});import Vf from"node:fs/promises";import Jf from"node:path";function IE(r){let e={required:r.required,minVersion:r.minVersion,enrolledAt:r.enrolledAt};return r.enrolledBy!==null&&(e.enrolledBy=r.enrolledBy),`${JSON.stringify(e,null,2)}
|
|
750
750
|
`}async function qf(r){try{return(await Vf.stat(r)).mtimeMs}catch{return null}}async function Xf(r){try{return await Vf.readFile(r,"utf-8")}catch{return null}}function zf(r,e){return E.getDoc(r,e)}function Hi(r,e,t){E.setDoc(r,e,{mtime_ms:t,migrated_at:new Date().toISOString()})}async function Wi(r,e,t){try{let{projectMemory:n}=await Promise.resolve().then(()=>(Ie(),Fi));await n.remember(r,{type:"inbox",content:e,tags:t,provenance:"declared"})}catch(n){U.debug("Legacy sweep inbox capture failed (non-critical)",{error:n instanceof Error?n.message:String(n)})}}async function $E(r,e,t){let n=Jf.join(r,Us),s=await qf(n);if(s===null)return;let o=zf(e,Rl);if(o===null){let i=await Xf(n);if(i===null){t.errors.push({file:Us,reason:"read failed"});return}try{Df.set(e,i,"migrated"),Hi(e,Rl,s),t.checkpointsMigrated=!0,await Wi(r,"Legacy .prjct/CHECKPOINTS.md migrated into kv_store crew:checkpoints. Manage with 'prjct crew checkpoints show|set|reset|export'. Original file left in place (not authoritative).",{"migration:v2.19.8":"1",topic:"crew-checkpoints"})}catch(a){t.errors.push({file:Us,reason:a instanceof Error?a.message:String(a)})}return}s>o.mtime_ms&&(await Wi(r,`Legacy .prjct/CHECKPOINTS.md hand-edited after migration \u2014 content NOT applied. Run 'prjct crew checkpoints set --file ${Us}' to adopt, or delete the legacy file.`,{"migration:v2.19.8":"1",topic:"crew-checkpoints",state:"hand-edited"}),Hi(e,Rl,s),t.checkpointsHandEditWarned=!0)}async function DE(r,e,t){let n=Jf.join(r,Ui),s=await qf(n);if(s===null)return;let o=zf(e,Pl),i=Oi.get(e);if(o===null){let a=await Xf(n);if(a===null){t.errors.push({file:Ui,reason:"read failed"});return}try{if(i===null){let l=JSON.parse(a),u={required:l.required===!0,minVersion:typeof l.minVersion=="string"?l.minVersion:"0.0.0",enrolledAt:typeof l.enrolledAt=="string"?l.enrolledAt:new Date().toISOString(),enrolledBy:typeof l.enrolledBy=="string"?l.enrolledBy:null};Oi.set(e,u),await fr(n,IE(u)),t.teamMigrated=!0,await Wi(r,"Legacy .prjct/team.json adopted into kv_store team:enrollment. The disk file is now a derived mirror \u2014 do not hand-edit; run 'prjct team check' to detect drift.",{"migration:v2.19.8":"1",topic:"team-enrollment"})}Hi(e,Pl,s)}catch(l){t.errors.push({file:Ui,reason:l instanceof Error?l.message:String(l)})}return}s>o.mtime_ms&&(await Wi(r,".prjct/team.json hand-edited after migration \u2014 your edit was NOT applied (file is a derived mirror). Run 'prjct team check' to rewrite the mirror from DB, or 'prjct team' to re-enroll with new values.",{"migration:v2.19.8":"1",topic:"team-enrollment",state:"hand-edited"}),Hi(e,Pl,s),t.teamHandEditWarned=!0)}async function OE(r,e){let t={checkpointsMigrated:!1,checkpointsHandEditWarned:!1,teamMigrated:!1,teamHandEditWarned:!1,errors:[]};return await $E(r,e,t).catch(n=>{t.errors.push({file:Us,reason:n instanceof Error?n.message:String(n)})}),await DE(r,e,t).catch(n=>{t.errors.push({file:Ui,reason:n instanceof Error?n.message:String(n)})}),t}var Us,Ui,Rl,Pl,Yf=y(()=>{"use strict";Of();X();Mi();z();Ft();Us=".prjct/CHECKPOINTS.md",Ui=".prjct/team.json",Rl="migration:v2.19.8:last-flagged-checkpoints",Pl="migration:v2.19.8:last-flagged-team";c(IE,"renderMirror");c(qf,"statMtimeMs");c(Xf,"tryReadFile");c(zf,"readFlag");c(Hi,"writeFlag");c(Wi,"captureInboxWarning");c($E,"sweepCheckpoints");c(DE,"sweepTeamJson");c(OE,"legacyCrewSweep")});import ME from"node:fs/promises";import Qf from"node:path";function xl(r,e){let t,n=new Promise((s,o)=>{t=setTimeout(()=>o(new Error(`sync phase '${e}' timed out after ${Zf}ms`)),Zf)});return Promise.race([r,n]).finally(()=>{t&&clearTimeout(t)})}async function pt(r,e){let t=Date.now();U.debug("sync phase start",{phase:r});try{let n=await e();return U.debug("sync phase done",{phase:r,ms:Date.now()-t}),n}catch(n){throw U.debug("sync phase failed",{phase:r,ms:Date.now()-t,error:Oe(n)}),n}}var Zf,Al,Mr,jl=y(()=>{"use strict";Nc();Ho();Fc();ai();dn();at();Ht();ge();ye();hi();wn();yi();Er();tl();Jn();qn();et();Fg();z();Ft();ni();Xg();zg();rf();gf();bf();xf();If();Zf=Number(process.env.PRJCT_SYNC_PHASE_TIMEOUT_MS)||6e4;c(xl,"withTimeout");c(pt,"phase");Al=class{static{c(this,"SyncService")}projectPath;projectId=null;globalPath="";cliVersion="0.0.0";constructor(){this.projectPath=process.cwd()}async sync(e=process.cwd(),t={}){this.projectPath=e;let n=Date.now(),s={installed:!1,verified:!1,configPath:"",message:""};try{if(this.projectId=await I.getProjectId(e),!this.projectId)return{success:!1,projectId:"",cliVersion:"",git:Ti(),stats:Ei(),commands:Ci(),stack:Ri(),context7:{installed:!1,verified:!1},error:"No prjct project. Run p. init first."};if(this.globalPath=j.getGlobalProjectPath(this.projectId),this.cliVersion=await this.getCliVersion(),await ME.rm(Qf.join(this.globalPath,"agents"),{recursive:!0,force:!0}).catch(()=>{}),(await Mn()).installed){let D=await fi({autoRepair:!0});D.verified||U.warn(`Codex p. router not ready: ${D.message||"verification failed"}`)}await pt("mcp-defaults",()=>ri({silent:!0,verifyContext7:!1}));try{s=await pt("context7",()=>Bn.ensureReady())}catch(D){return{success:!1,projectId:this.projectId,cliVersion:this.cliVersion,git:Ti(),stats:Ei(),commands:Ci(),stack:Ri(),context7:{installed:s.installed,verified:!1,message:Oe(D)},error:`Context7 MCP is required but not ready: ${Oe(D)}. Run 'prjct start' to repair.`}}await yf(this.globalPath),process.env.PRJCT_SKIP_JSON_MIGRATION==="1"||(await pt("migrate",()=>xl(bi(this.projectId),"migrate")),await pt("sweep",async()=>{try{let D=await vi(this.projectId);D>0&&U.info("Swept legacy JSON files into SQLite",{swept:D})}catch(D){U.debug("Legacy JSON sweep failed (non-critical)",{error:Oe(D)})}})),process.env.PRJCT_SKIP_CREW_SWEEP!=="1"&&await pt("legacy-crew-sweep",async()=>{try{let{legacyCrewSweep:D}=await Promise.resolve().then(()=>(Yf(),Kf)),Ce=await D(this.projectPath,this.projectId);(Ce.checkpointsMigrated||Ce.teamMigrated||Ce.checkpointsHandEditWarned||Ce.teamHandEditWarned||Ce.errors.length>0)&&U.info("Legacy crew sweep ran",{checkpointsMigrated:Ce.checkpointsMigrated,teamMigrated:Ce.teamMigrated,checkpointsHandEditWarned:Ce.checkpointsHandEditWarned,teamHandEditWarned:Ce.teamHandEditWarned,errors:Ce.errors.length})}catch(D){U.debug("Legacy crew sweep failed (non-critical)",{error:Oe(D)})}});let[l,u,d,p]=await pt("gather",()=>xl(Promise.all([Ef(this.projectPath),Cf(this.projectPath),Rf(this.projectPath),Pf(this.projectPath)]),"gather")),{shouldRebuildIndexes:m,changedDomains:g,incrementalInfo:h}=await pt("incremental",()=>nf({projectId:this.projectId,projectPath:this.projectPath,isFullSync:t.full===!0,changedFilesHint:t.changedFiles}));m&&await pt("index",async()=>{try{await xl(Promise.all([jp(this.projectPath,this.projectId),Zm(this.projectPath,this.projectId),Ym(this.projectPath,this.projectId)]),"index")}catch(D){U.debug("File ranking index build failed (non-critical)",{error:Oe(D)})}});let T,v=Date.now();U.debug("sync phase start",{phase:"skills"});try{let[D,Ce,fo,$n,ur,fs,dr,ho,pr,hs,$a]=await Promise.all([Promise.resolve(ct.getActive(this.projectId)).catch(()=>null),Ue.getActive(this.projectId).catch(()=>null),tt.getRecent(this.projectId,3).catch(()=>[]),Lg.getMetrics(this.projectId).catch(()=>null),Ye.getBacklog(this.projectId).catch(()=>[]),B.getTaskHistory(this.projectId).catch(()=>[]),B.getAllPausedTasks(this.projectId).catch(()=>[]),B.getAggregatedFeedback(this.projectId).catch(()=>null),B.getCurrentTask(this.projectId).catch(()=>null),Vn.getCounts(this.projectId).catch(()=>({pending:0,converted:0,archived:0})),tt.getCount(this.projectId).catch(()=>0)]),ys={backlogCount:ur.length,completedTaskCount:fs.length,pausedTaskCount:dr.length,hasActiveTask:!!pr},ws=D?D.patterns.map(ne=>({name:ne.name,description:ne.description,location:ne.locations?.[0]})):(Ce?.patterns??[]).filter(ne=>ne.source!=="repo").map(ne=>({name:ne.name,description:ne.description,location:ne.location})),yo=D?D.antiPatterns.map(ne=>({issue:ne.issue,file:ne.files?.[0]??"multiple",suggestion:ne.suggestion,severity:ne.severity??"medium"})):(Ce?.antiPatterns??[]).filter(ne=>ne.source!=="repo").map(ne=>({issue:ne.issue,file:ne.file,suggestion:ne.suggestion,severity:ne.severity??"medium"})),mr=D?.commands?{install:D.commands.install??d.install,run:d.run,test:D.commands.test??d.test,build:D.commands.build??d.build,dev:D.commands.dev??d.dev,lint:D.commands.lint??d.lint,format:D.commands.format??d.format}:d,ks={version:u.version,fileCount:u.fileCount,patterns:ws,antiPatterns:yo,recentShipped:fo.map(ne=>({name:ne.name,type:ne.type??"feature",duration:ne.duration,filesChanged:ne.changes?.length})),velocity:$n?{avgPoints:$n.averageVelocity,trend:$n.velocityTrend,accuracy:$n.estimationAccuracy}:null,backlogCount:ur.length,completedTaskCount:fs.length,pausedTaskCount:dr.length,knownGotchas:ho?.knownGotchas??[],userPatterns:ho?.patternsDiscovered??[],hasActiveTask:!!pr,activeTaskDescription:pr?.description??"",pausedTasks:dr.map(ne=>({description:ne.description,pausedAt:ne.pausedAt??""})),topBacklog:ur.slice(0,3).map(ne=>({description:ne.description,priority:ne.priority??"medium"})),ideasCount:hs?.pending??0,shippedCount:$a};T=await qg.generateAndInstall({success:!0,projectId:this.projectId,cliVersion:this.cliVersion,git:l,stats:u,commands:mr,stack:p},ys,ks)}catch(D){U.debug("Native skill generation failed (non-critical)",{error:Oe(D)})}U.debug("sync phase done",{phase:"skills",ms:Date.now()-v}),await pt("update-files",()=>Promise.all([wf({projectId:this.projectId,projectPath:this.projectPath,cliVersion:this.cliVersion,git:l,stats:u}),kf({projectId:this.projectId,projectPath:this.projectPath,stats:u,stack:p}),Promise.resolve(Sf(this.projectId,l,u)),pf(this.projectId,this.projectPath,l,u,p,s.verified)]));let k=await Ue.getActive(this.projectId),x={patterns:k?.patterns?.length||0,antiPatterns:k?.antiPatterns?.length||0,criticalAntiPatterns:k?.antiPatterns?.filter(D=>D.severity==="high").length||0},C=Date.now()-n,O=await pt("metrics",()=>df(this.projectId,u,C));await pt("archive",()=>mf(this.projectId)),await pt("install-global",async()=>{await je.installGlobalConfig(),await je.syncCommands()});let N;return await pt("verify",async()=>{try{let D=await I.readConfig(this.projectPath);N=await _f.verify(this.projectPath,this.globalPath,D?.verification)}catch(D){U.debug("Verification failed (non-critical)",{error:Oe(D)})}}),{success:!0,projectId:this.projectId,cliVersion:this.cliVersion,git:l,stats:u,commands:d,stack:p,context7:{installed:s.installed,verified:s.verified,message:s.message},analysisSummary:x,syncMetrics:O,verification:N,incremental:h,generatedSkills:T}}catch(o){return{success:!1,projectId:this.projectId||"",cliVersion:this.cliVersion,git:Ti(),stats:Ei(),commands:Ci(),stack:Ri(),context7:{installed:s.installed,verified:s.verified,message:s.message},error:Oe(o)}}}async getCliVersion(){try{let e=Qf.join(__dirname,"..","..","package.json");return(await De(e))?.version||"0.0.0"}catch(e){return U.debug("Failed to read CLI version",{error:Oe(e)}),"0.0.0"}}},Mr=new Al});import zn from"chalk";var eh,NE,LE,Bt,th=y(()=>{"use strict";at();eh=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],NE=80,LE={name:"prjct",icon:"\u26A1",signature:"\u26A1 prjct",spinner:{frames:eh,speed:NE},cli:{header:c(()=>`${zn.cyan.bold("\u26A1")} ${zn.cyan("prjct")}`,"header"),footer:c(()=>zn.dim("\u26A1 prjct"),"footer"),spin:c((r,e)=>`${zn.cyan("\u26A1")} ${zn.cyan("prjct")} ${zn.cyan(eh[r%10])} ${zn.dim(e||"")}`,"spin")},template:{header:"\u26A1 prjct",footer:"\u26A1 prjct"},commitFooter:"Generated with [p/](https://www.prjct.app/)",urls:{website:"https://prjct.app",docs:"https://prjct.app/docs"},getCommitFooter:c((r="claude")=>Io(r).commitFooter,"getCommitFooter"),getSignature:c((r="claude")=>Io(r).signature,"getSignature")},Bt=LE});import le from"chalk";function HE(){return FE[UE]}var _l,FE,UE,Kn,Nr,Il,mt,En,WE,BE,f,Te=y(()=>{"use strict";th();pi();Gc();_l=Bt.spinner.speed,FE={silent:{maxLines:0,maxCharsPerLine:0,showMetrics:!1},minimal:{maxLines:1,maxCharsPerLine:65,showMetrics:!1},compact:{maxLines:4,maxCharsPerLine:80,showMetrics:!0},verbose:{maxLines:1/0,maxCharsPerLine:1/0,showMetrics:!0}},UE="compact";c(HE,"getTierConfig");Kn={success:le.green("\u2713"),fail:le.red("\u2717"),warn:le.yellow("\u26A0"),info:le.blue("\u2139"),debug:le.dim("\u{1F527}"),bullet:le.dim("\u2022"),arrow:le.dim("\u2192"),check:le.green("\u2713"),cross:le.red("\u2717"),spinner:le.cyan("\u25D0")},Nr=null,Il=0,mt=!1,En=c((r,e)=>{let t=e??(HE().maxCharsPerLine||Ct.FALLBACK_TRUNCATE);return r&&r.length>t?`${r.slice(0,t-1)}\u2026`:r||""},"truncate"),WE=c(()=>process.stdout.isTTY?process.stdout.write(`\r${" ".repeat(Ct.CLEAR_WIDTH)}\r`):!0,"clear"),BE={start(){return mt||console.log(Bt.cli.header()),this},end(){return mt||console.log(Bt.cli.footer()),this},spin(r){return mt?this:(this.stop(),process.stdout.isTTY?(Nr=setInterval(()=>{process.stdout.write(`\r${Bt.cli.spin(Il++,En(r,Ct.SPINNER_MSG))}`)},_l),this):(process.stdout.write(`${Bt.cli.spin(0,En(r,Ct.SPINNER_MSG))}
|
|
751
751
|
`),this))},done(r,e){if(this.stop(),!mt){let t="";if(e){let n=[];e.agents!==void 0&&n.push(`${e.agents}a`),e.reduction!==void 0&&n.push(`${e.reduction}%`),e.tokens!==void 0&&n.push(`${Math.round(e.tokens)}K`),n.length>0&&(t=le.dim(` [${n.join(" | ")}]`))}console.log(`${Kn.success} ${En(r,Ct.DONE_MSG)}${t}`)}return this},fail(r){return this.stop(),console.error(`${Kn.fail} ${En(r,Ct.FAIL_MSG)}`),this},failWithHint(r){this.stop();let e=typeof r=="string"?ig(r):r;return console.error(),console.error(`${Kn.fail} ${e.message}`),e.file&&console.error(le.dim(` File: ${e.file}`)),e.hint&&console.error(le.yellow(` \u{1F4A1} ${e.hint}`)),e.docs&&console.error(le.dim(` Docs: ${e.docs}`)),console.error(),this},warn(r){return this.stop(),mt||console.log(`${Kn.warn} ${En(r,Ct.WARN_MSG)}`),this},info(r){return this.stop(),mt||console.log(`${Kn.info} ${r}`),this},debug(r){this.stop();let e=process.env.DEBUG==="1"||process.env.DEBUG==="true";return!mt&&e&&console.log(`${Kn.debug} ${le.dim(r)}`),this},success(r,e){return this.done(r,e)},list(r,e={}){if(this.stop(),mt)return this;let t=e.bullet||Kn.bullet,n=" ".repeat(e.indent||0);for(let s of r)console.log(`${n}${t} ${s}`);return this},table(r,e={}){if(this.stop(),mt||r.length===0)return this;let t=Object.keys(r[0]),n={};for(let s of t){n[s]=s.length;for(let o of r){let i=String(o[s]??"");i.length>n[s]&&(n[s]=i.length)}}if(e.header!==!1){let s=t.map(o=>o.padEnd(n[o])).join(" ");console.log(le.dim(s)),console.log(le.dim("\u2500".repeat(s.length)))}for(let s of r){let o=t.map(i=>String(s[i]??"").padEnd(n[i])).join(" ");console.log(o)}return this},box(r,e){if(this.stop(),mt)return this;let t=e.split(`
|
|
752
752
|
`),n=Math.max(r.length,...t.map(o=>o.length)),s="\u2500".repeat(n+2);console.log(le.dim(`\u250C${s}\u2510`)),console.log(`${le.dim("\u2502")} ${le.bold(r.padEnd(n))} ${le.dim("\u2502")}`),console.log(le.dim(`\u251C${s}\u2524`));for(let o of t)console.log(`${le.dim("\u2502")} ${o.padEnd(n)} ${le.dim("\u2502")}`);return console.log(le.dim(`\u2514${s}\u2518`)),this},section(r){return this.stop(),mt?this:(console.log(`
|