@principal-ai/quality-lens-cli 0.1.23 → 0.1.24
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/dist/cli.js
CHANGED
|
@@ -974,7 +974,7 @@ Make sure that all grammar rule definitions are done before 'performSelfAnalysis
|
|
|
974
974
|
`+_.map(c=>c.message).join(`
|
|
975
975
|
`)),this.errors=_}},par=class extends LR{constructor(_){super(_)}},Clt=Ao.default.build("{{digit}}{4}",{digit:aE}),Slt=Ao.default.build("{{digit}}{2}",{digit:aE}),Elt=Ao.default.build("{{digit}}{2}",{digit:aE}),xlt=/[Tt ]/,AFe=Ao.default.build("{{digit}}{2}",{digit:aE}),FFe=Ao.default.build("{{digit}}{2}",{digit:aE}),Tlt=Ao.default.build("{{digit}}{2}",{digit:aE}),dar=Ao.default.build("\\.{{digit}}+",{digit:aE}),mar=Ao.default.build("[+-]{{timeHour}}:{{timeMinute}}",{timeHour:AFe,timeMinute:FFe}),har=Ao.default.build("[Zz]|{{timeNumOffset}}",{timeNumOffset:mar}),kFe=Ao.default.build("{{timeHour}}:{{timeMinute}}:{{timeSecond}}{{timeSecFrac}}?",{timeHour:AFe,timeMinute:FFe,timeSecond:Tlt,timeSecFrac:dar}),IFe=Ao.default.build("{{dateFullYear}}-{{dateMonth}}-{{dateMDay}}",{dateFullYear:Clt,dateMonth:Slt,dateMDay:Elt}),gar=Ao.default.build("{{partialTime}}{{timeOffset}}",{partialTime:kFe,timeOffset:har}),yar=Ao.default.build("{{fullDate}}{{timeDelim}}{{fullTime}}",{fullDate:IFe,timeDelim:xlt,fullTime:gar}),Dar=Ao.default.build("{{fullDate}}{{timeDelim}}{{partialTime}}",{fullDate:IFe,timeDelim:xlt,partialTime:kFe}),bar=IFe,Alt=kFe,Car=Ao.default.build("{{offsetDateTime}}|{{localDateTime}}|{{localDate}}|{{localTime}}",{offsetDateTime:yar,localDateTime:Dar,localDate:bar,localTime:Alt}),Yae=Gu({name:"DateTime",pattern:Car}),Sar=_=>{let c=Ao.default.build("({{dateFullYear}})-({{dateMonth}})-({{dateMDay}})",{dateFullYear:Clt,dateMonth:Slt,dateMDay:Elt}),f=Ao.default.exec(_,c);if(f){let g=Number(f[1]),S=Number(f[2]),w=Number(f[3]),q=new Date(g,S-1,w);return q.getFullYear()===g&&q.getMonth()+1===S&&q.getDate()===w}return!0},Ear=_=>{let c=Ao.default.build("({{timeHour}}):({{timeMinute}}):({{timeSecond}})",{timeHour:AFe,timeMinute:FFe,timeSecond:Tlt}),f=Ao.default.exec(_,c);if(f){let g=Number(f[1]),S=Number(f[2]),w=Number(f[3]),q=new Date(0,0,0,g,S,w);return q.getHours()===g&&q.getMinutes()===S&&q.getSeconds()===w}return!0},xar=_=>Sar(_)&&Ear(_);N1(Yae,_=>{var c;if(!xar(_))throw new LR(`Invalid date time: ${_}`);return((c=_.match(Alt))==null?void 0:c.index)===0?_:new Date(_)});var Flt=Gu({name:"DotSeparator",pattern:/\./,label:"."}),DFe=Gu({name:"ExpressionNewLine",pattern:xk}),Tar=blt,klt=Ao.default.build("{{digit}}({{digit}}|{{underscore}}{{digit}})*",{digit:aE,underscore:XV}),Aar=Ao.default.build("({{minus}}|{{plus}})?{{zeroPrefixableInt}}",{minus:xFe,plus:TFe,zeroPrefixableInt:klt}),Far=Ao.default.build("[Ee]{{floatExpPart}}",{floatExpPart:Aar}),kar=/\./,Iar=Ao.default.build("{{decimalPoint}}{{zeroPrefixableInt}}",{decimalPoint:kar,zeroPrefixableInt:klt}),war=/inf/,Par=/nan/,Nar=Ao.default.build("({{minus}}|{{plus}})?({{inf}}|{{nan}})",{minus:xFe,plus:TFe,inf:war,nan:Par}),Oar=Ao.default.build("{{floatIntPart}}({{exp}}|{{frac}}{{exp}}?)|{{specialFloat}}",{floatIntPart:Tar,exp:Far,frac:Iar,specialFloat:Nar}),Zae=Gu({name:"Float",pattern:Oar}),Lar=_=>_==="inf"||_==="+inf"?1/0:_==="-inf"?-1/0:_==="nan"||_==="+nan"||_==="-nan"?NaN:null;N1(Zae,_=>{let c=Lar(_);if(c!==null)return c;let f=_.replace(/_/g,"");return parseFloat(f)});var Rar=/}/,bFe=Gu({name:"InlineTableClose",pattern:Rar,label:"}",pop_mode:!0}),Mar=/{/,Ilt=Gu({name:"InlineTableOpen",pattern:Mar,label:"{",push_mode:"InlineTable"}),Bar=/,/,wlt=Gu({name:"InlineTableSep",pattern:Bar,label:",",pop_mode:!0,push_mode:"InlineTable"}),YV=Gu({name:"Integer",pattern:z_.NA});N1(YV,HV);var wFe=Gu({name:"KeyValueSeparator",pattern:/=/,label:"=",push_mode:"Value"}),Plt=Gu({name:"Newline",pattern:xk,pop_mode:!0}),Ek=Gu({name:"SimpleKey",pattern:z_.NA});N1(Ek,HV);var Nlt=Gu({name:"StdTableClose",pattern:/]/,label:"]",push_mode:"Value"}),Olt=Gu({name:"StdTableOpen",pattern:/\[/,label:"["}),o7=Gu({name:"String",pattern:z_.NA});N1(o7,HV);var jar=Ao.default.build("{{whiteSpaceChar}}+",{whiteSpaceChar:RR}),Llt=Gu({name:"WhiteSpace",pattern:jar,group:z_.SKIPPED}),Jar=Ao.default.build("^{{whiteSpaceChar}}*{{newline}}(?:{{whiteSpaceChar}}|{{newline}})*",{whiteSpaceChar:RR,newline:xk}),qar=_=>{let c=Ao.default.exec(_,Jar);return c?c[0].length:0},Rlt=_=>{let c="";for(let f=0;f<_.length;f++){let g=_[f];if(g==="\\"){f++;let S=qar(_.slice(f));if(S>0){f+=S-1;continue}switch(_[f]){case"b":c+="\b";break;case"t":c+=" ";break;case"n":c+=`
|
|
976
976
|
`;break;case"f":c+="\f";break;case"r":c+="\r";break;case'"':c+='"';break;case"\\":c+="\\";break;case"u":{let w=_.slice(f+1,f+5),q=parseInt(w,16);if(q>55295&&q<57344)throw new LR(`Invalid Unicode code point: \\u${w}`);c+=String.fromCodePoint(q),f+=4;break}case"U":{let w=_.slice(f+1,f+9),q=parseInt(w,16);if(q>1114111)throw new LR(`Invalid Unicode code point: \\U${w}`);c+=String.fromCodePoint(q),f+=8;break}case _.match(/^[0-7]{1,3}$/):}}else c+=g}return c},Mlt=_=>_.substring(3,_.length-3).replace(/^(\r\n|\n)/,""),zar=Ao.default.build("{{quotationMark}}{3}",{quotationMark:SFe}),War=Ao.default.build("{{whiteSpaceChar}}|!|[#-\\x5B]|[\\x5D-~]|{{nonAscii}}",{whiteSpaceChar:RR,nonAscii:QV}),Uar=Ao.default.build("{{multiLineBasicUnescaped}}|{{escaped}}",{multiLineBasicUnescaped:War,escaped:Dlt}),Var=Ao.default.build("{{whiteSpaceChar}}*",{whiteSpaceChar:RR}),Gar=Ao.default.build("{{escape}}{{whiteSpace}}{{newline}}({{whiteSpaceChar}}|{{newline}})*",{escape:ylt,whiteSpace:Var,newline:xk,whiteSpaceChar:RR}),$ar=Ao.default.build("{{multiLineBasicChar}}|{{newline}}|{{multiLineBasicEscapedNewline}}",{multiLineBasicChar:Uar,newline:xk,multiLineBasicEscapedNewline:Gar}),Har=Ao.default.build("{{quotationMark}}{1,2}",{quotationMark:SFe}),Kar=Ao.default.build("{{multiLineBasicContent}}*({{multiLineBasicQuotes}}{{multiLineBasicContent}}+)*{{multiLineBasicQuotes}}?",{multiLineBasicContent:$ar,multiLineBasicQuotes:Har}),Blt=Gu({name:"MultiLineBasicString",pattern:Ao.default.build("{{multiLineBasicStringDelimiter}}{{newline}}?{{multiLineBasicBody}}{{multiLineBasicStringDelimiter}}",{multiLineBasicStringDelimiter:zar,newline:xk,multiLineBasicBody:Kar}),label:'"""MultiLineBasicString"""',categories:[o7],line_breaks:!0});N1(Blt,_=>{let c=Mlt(_);return Rlt(c)});var Qar=Ao.default.build("{{apostrophe}}{3}",{apostrophe:EFe}),Xar=Ao.default.build(" |[ -&]|[\\x28-~]|{{nonAscii}}",{nonAscii:QV}),Yar=Ao.default.build("{{multiLineLiteralChar}}|{{newline}}",{multiLineLiteralChar:Xar,newline:xk}),Zar=Ao.default.build("{{apostrophe}}{1,2}",{apostrophe:EFe}),eor=Ao.default.build("{{multiLineLiteralContent}}*({{multiLineLiteralQuotes}}{{multiLineLiteralContent}}+)*{{multiLineLiteralQuotes}}?",{multiLineLiteralContent:Yar,multiLineLiteralQuotes:Zar}),jlt=Gu({name:"MultiLineLiteralString",pattern:Ao.default.build("{{multiLineLiteralStringDelimiter}}{{newline}}?{{multiLineLiteralBody}}{{multiLineLiteralStringDelimiter}}",{multiLineLiteralStringDelimiter:Qar,newline:xk,multiLineLiteralBody:eor}),label:"'''MultiLineLiteralString'''",categories:[o7],line_breaks:!0});N1(jlt,Mlt);var PFe=Gu({name:"QuotedKey",pattern:z_.NA,categories:[Ek]});N1(PFe,HV);var tor=Ao.default.build("{{whiteSpaceChar}}|!|[#-\\x5B]|[\\x5D-~]|{{nonAscii}}",{whiteSpaceChar:RR,nonAscii:QV}),ror=Ao.default.build("{{basicUnescaped}}|{{escaped}}",{basicUnescaped:tor,escaped:Dlt}),NFe=Gu({name:"BasicString",pattern:Ao.default.build("{{quotationMark}}{{basicChar}}*{{quotationMark}}",{quotationMark:SFe,basicChar:ror}),label:'"BasicString"',categories:[PFe,o7]});N1(NFe,_=>{let c=_.slice(1,-1);return Rlt(c)});var nor=Ao.default.build(" |[ -&]|[\\x28-~]|{{nonAscii}}",{nonAscii:QV}),OFe=Gu({name:"LiteralString",pattern:Ao.default.build("{{apostrophe}}{{literalChar}}*{{apostrophe}}",{apostrophe:EFe,literalChar:nor}),label:"'LiteralString'",categories:[PFe,o7]});N1(OFe,_=>_.slice(1,-1));var ior=/0x/,sor=/0o/,aor=/0b/,oor=/[0-7]/,cor=/[01]/,uor=Ao.default.build("{{hexPrefix}}{{hexDigit}}({{hexDigit}}|{{underscore}}{{hexDigit}})*",{hexPrefix:ior,hexDigit:vlt,underscore:XV}),lor=Ao.default.build("{{octPrefix}}{{digit0_7}}({{digit0_7}}|{{underscore}}{{digit0_7}})*",{octPrefix:sor,digit0_7:oor,underscore:XV}),_or=Ao.default.build("{{binPrefix}}{{digit0_1}}({{digit0_1}}|{{underscore}}{{digit0_1}})*",{binPrefix:aor,digit0_1:cor,underscore:XV}),por=Ao.default.build("{{hexInteger}}|{{octalInteger}}|{{binaryInteger}}",{hexInteger:uor,octalInteger:lor,binaryInteger:_or}),Jlt=Gu({name:"NonDecimalInteger",pattern:por,categories:[YV]}),dor=(_,c)=>{let f=BigInt(0);for(let g=0;g<_.length;g++){let S=_[g],w=parseInt(S,c);f=f*BigInt(c)+BigInt(w)}return f},mor=_=>{if(_.startsWith("0x"))return 16;if(_.startsWith("0o"))return 8;if(_.startsWith("0b"))return 2};N1(Jlt,_=>{let c=_.replace(/_/g,"").slice(2),f=mor(_),g=parseInt(c,f);return Number.isSafeInteger(g)?g:dor(c,f)});var qlt=Gu({name:"DecimalInteger",pattern:blt,categories:[YV]});N1(qlt,_=>{let c=_.replace(/_/g,""),f=parseInt(c);return Number.isSafeInteger(f)?f||0:BigInt(c)});var hor=/[a-zA-Z]/,gor=Ao.default.build("({{alpha}}|{{digit}}|-|_)+",{alpha:hor,digit:aE}),zlt=Gu({name:"UnquotedKey",pattern:gor,categories:[Ek]});N1(zlt,_=>_);var yor=/#/,vor=Ao.default.build(" |[ -~]|{{nonAscii}}",{nonAscii:QV}),Dor=Ao.default.build("{{commentStartChar}}{{nonEol}}*",{commentStartChar:yor,nonEol:vor}),Wlt=Gu({name:"Comment",pattern:Dor,group:"comment"}),bor=/true/,Ult=Gu({name:"True",pattern:bor,label:"true",categories:[KV]});N1(Ult,()=>!0);var Cor=/false/,Vlt=Gu({name:"False",pattern:Cor,label:"false",categories:[KV]});N1(Vlt,()=>!1);var Sor=Gu({name:"IgnoredNewline",pattern:xk,group:z_.SKIPPED}),Eor=Gu({name:"InlineTableKeyValSep",pattern:/=/,label:"=",push_mode:"Value",pop_mode:!0,categories:[wFe]}),ult=[Llt,NFe,OFe,zlt,Flt,Ek],llt=[Llt,Blt,jlt,NFe,OFe,Ult,Vlt,Yae,Zae,Jlt,qlt,dlt,Ilt,Wlt],Glt={modes:{Key:[Wlt,DFe,wFe,glt,hlt,Olt,Nlt,...ult],Value:[...llt,Plt,wlt,bFe],Array:[...llt,Sor,mlt,plt],InlineTable:[...ult,Eor,bFe]},defaultMode:"Key"},xor=new z_(Glt,{ensureOptimizations:!0,skipValidations:!Xae.isDebug(),traceInitPerf:Xae.isDebug()}),Tor=class extends ZU{toml=this.RULE("toml",()=>{this.MANY(()=>this.CONSUME(DFe)),this.MANY1(()=>{this.SUBRULE1(this.expression),this.OPTION2(()=>{this.CONSUME1(Plt),this.MANY3(()=>this.CONSUME2(DFe))})})});valueCache;dottedKey=this.RULE("dottedKey",()=>{this.CONSUME(Ek),this.AT_LEAST_ONE(()=>{this.CONSUME(Flt),this.CONSUME1(Ek)})});key=this.RULE("key",()=>{this.OR({MAX_LOOKAHEAD:2,DEF:[{ALT:()=>this.SUBRULE(this.dottedKey)},{ALT:()=>this.CONSUME(Ek)}]})});inlineTableKeyValues=this.RULE("inlineTableKeyValues",()=>{this.MANY_SEP({SEP:wlt,DEF:()=>this.SUBRULE(this.keyValue)})});inlineTable=this.RULE("inlineTable",()=>{this.CONSUME(Ilt),this.OPTION(()=>this.SUBRULE(this.inlineTableKeyValues)),this.CONSUME(bFe)});array=this.RULE("array",()=>{this.CONSUME(dlt),this.OPTION(()=>this.SUBRULE(this.arrayValues)),this.CONSUME(plt)});value=this.RULE("value",()=>{this.OR(this.valueCache||(this.valueCache=[{ALT:()=>this.CONSUME(o7)},{ALT:()=>this.CONSUME(KV)},{ALT:()=>this.SUBRULE(this.array)},{ALT:()=>this.SUBRULE(this.inlineTable)},{ALT:()=>this.CONSUME(Yae)},{ALT:()=>this.CONSUME(Zae)},{ALT:()=>this.CONSUME(YV)}]))});keyValue=this.RULE("keyValue",()=>{this.SUBRULE(this.key),this.CONSUME(wFe),this.SUBRULE(this.value)});arrayValues=this.RULE("arrayValues",()=>{this.SUBRULE(this.value);let _=!0;this.MANY({GATE:()=>_,DEF:()=>{this.CONSUME(mlt),this.OPTION(()=>this.SUBRULE1(this.value))||(_=!1)}})});stdTable=this.RULE("stdTable",()=>{this.CONSUME(Olt),this.SUBRULE(this.key),this.CONSUME(Nlt)});arrayTable=this.RULE("arrayTable",()=>{this.CONSUME(glt),this.SUBRULE(this.key),this.CONSUME(hlt)});table=this.RULE("table",()=>{this.OR([{ALT:()=>this.SUBRULE(this.stdTable)},{ALT:()=>this.SUBRULE(this.arrayTable)}])});expression=this.RULE("expression",()=>{this.OR([{ALT:()=>this.SUBRULE(this.keyValue)},{ALT:()=>this.SUBRULE(this.table)}])});constructor(){super(Glt,{traceInitPerf:Xae.isDebug(),maxLookahead:1,skipValidations:!Xae.isDebug()}),this.performSelfAnalysis()}},$V=new Tor,flt=_=>_&&(_.constructor===Object||_.constructor===void 0),Qae=()=>Object.create(null),yFe=(_,c)=>{try{return _()}catch(f){if(f instanceof OR)throw new par(c)}},OR=class extends Error{},Aor=$V.getBaseCstVisitorConstructor(),vFe=Symbol("explicitlyDeclared"),_lt=Symbol("implicitlyDeclared"),GV=Symbol("notEditable"),For=class extends Aor{constructor(){super(),this.validateVisitor()}toml(_){var c;let f=Qae(),g=f;return(c=_.expression)==null||c.forEach(S=>g=this.visit(S,{current:g,root:f})),this.cleanInternalProperties(f),f}expression(_,{current:c,root:f}){if(_.keyValue)return this.visit(_.keyValue,c),c;if(_.table)return this.visit(_.table,f)}keyValue(_,c){let f=this.visit(_.key),g=this.visit(_.value);yFe(()=>this.assignValue(f,g,c),`Cannot assign value to '${f.join(".")}'`)}key(_){return _.dottedKey?this.visit(_.dottedKey):[this.interpret(_,Ek)]}dottedKey(_){return this.interpret(_,Ek)}inlineTableKeyValues(_,c){_.keyValue&&_.keyValue.forEach(f=>this.visit(f,c))}inlineTable(_){let c=Qae();return c[GV]=!0,_.inlineTableKeyValues&&this.visit(_.inlineTableKeyValues,c),c}value(_){return _.array?this.visit(_.array):_.inlineTable?this.visit(_.inlineTable):this.interpret(_,o7,Zae,KV,Yae,YV)}arrayValues(_,c){return _.value.forEach(f=>c.push(this.visit(f))),c}array(_){let c=[];return c[GV]=!0,_.arrayValues?this.visit(_.arrayValues,c):c}table(_,c){if(_.stdTable)return this.visit(_.stdTable,c);if(_.arrayTable)return this.visit(_.arrayTable,c)}stdTable(_,c){let f=this.visit(_.key);return yFe(()=>this.createTable(f,c),`Cannot create table '${f.join(".")}'`)}arrayTable(_,c){let f=this.visit(_.key);return yFe(()=>{let g=this.getOrCreateArray(f,c);if(g[GV])throw new OR;let S=Qae();return g.push(S),S},`Cannot create array table '${f.join(".")}'`)}cleanInternalProperties(_){for(let c of Object.getOwnPropertySymbols(_))delete _[c];for(let c in _)typeof _[c]=="object"&&this.cleanInternalProperties(_[c]),Array.isArray(_[c])&&_[c].forEach(f=>this.cleanInternalProperties(f))}interpret(_,...c){for(let f of c)if(_[f.name]){let g=_[f.name].map(S=>CFe[f.name](S.image,S,f.name));return g.length===1?g[0]:g}}assignPrimitiveValue(_,c,f){if(_ in f)throw new OR;return flt(c)&&(c[vFe]=!0),f[_]=c,f}tryCreatingObject(_,c,f,g,S){if(c[_]){if(!flt(c[_])||!S&&c[_][vFe]||!g&&c[_][_lt]||c[_][GV])throw new OR}else c[_]=Qae(),f&&(c[_][f]=!0);return c[_]}assignValue(_,c,f){let[g,...S]=_;return S.length>0?(this.tryCreatingObject(g,f,_lt,!0,!1),this.assignValue(S,c,f[g])):this.assignPrimitiveValue(g,c,f)}createTable(_,c){let[f,...g]=_;if(g.length>0){if(Array.isArray(c[f])){if(c[f][GV])throw new OR;let S=c[f][c[f].length-1];return this.createTable(g,S)}return this.tryCreatingObject(f,c,null,!0,!0),this.createTable(g,c[f])}return this.tryCreatingObject(f,c,vFe,!1,!1)}getOrCreateArray(_,c){let[f,...g]=_;if(g.length>0){if(Array.isArray(c[f])){let S=c[f][c[f].length-1];return this.getOrCreateArray(g,S)}return this.tryCreatingObject(f,c,null,!0,!0),this.getOrCreateArray(g,c[f])}if(c[f]&&!Array.isArray(c[f]))throw new OR;return c[f]=c[f]||[],c[f]}},kor=new For,LFe=_=>{let c=xor.tokenize(_);if(c.errors.length>0)throw new far(c.errors);$V.input=c.tokens;let f=$V.toml();if($V.errors.length>0)throw new _ar($V.errors);return kor.visit(f)};var Ift=wy(kft(),1);var Mcr={eslint:"linting",biome:"linting",oxlint:"linting",typescript:"types",flow:"types",test:"tests",jest:"tests",vitest:"tests",mocha:"tests",playwright:"tests",cypress:"tests",prettier:"formatting",knip:"deadCode",depcheck:"deadCode",typedoc:"documentation",jsdoc:"documentation",alexandria:"documentation"},Bcr=["eslint","typescript","test","prettier","knip","typedoc","alexandria"],jcr={lint:"eslint",eslint:"eslint",typecheck:"typescript","type-check":"typescript",tsc:"typescript",test:"test",jest:"jest",vitest:"vitest",format:"prettier",prettier:"prettier",knip:"knip",unused:"knip",docs:"alexandria",alexandria:"alexandria",typedoc:"typedoc"},nG=class{static detectLensCommands(c){let f=new Map;for(let g of c)if(g.name.startsWith("lens:")){let S=g.name.split(":");if(S.length>=3){let w=S[1],q=S[2];f.has(w)||f.set(w,{lensId:w,operations:new Set}),f.get(w).operations.add(q),g.isLensCommand=!0,g.lensId=w,g.lensOperation=q}}return f.size===0&&this.applyFallbackDetection(c,f),f}static applyFallbackDetection(c,f){for(let g of c){let S=jcr[g.name];if(S){f.has(S)||f.set(S,{lensId:S,operations:new Set});let w=g.name.includes("coverage")?"coverage":"check";f.get(S).operations.add(w),g.isLensCommand=!0,g.lensId=S,g.lensOperation=w}}}static calculateMetrics(c,f){let g={};for(let[S]of c){let w=Mcr[S];if(w){let q=f?.get(S);q!==void 0&&(g[w]=q)}}return g}static getAvailableLenses(c){return Array.from(c.keys())}static getMissingLenses(c){let f=new Set(c.keys());return Bcr.filter(g=>!f.has(g))}static calculateQualityProfile(c,f){let g=this.detectLensCommands(c),S=this.calculateMetrics(g,f),w=this.getAvailableLenses(g),q=this.getMissingLenses(g);return{hexagon:S,availableLenses:w,missingLenses:q}}};var iG=class{manifestFileName="package.json";packageType="node";canParse(c){return c.endsWith("package.json")}parseContent(c){try{return JSON.parse(c)}catch{return null}}extractPackageData(c,f){let g;f==="package.json"?g="":f.endsWith("/package.json")?g=f.slice(0,-13):g=f;let S=this.extractCommands(c,g);return{name:c.name||"unnamed",version:c.version,path:g,manifestPath:f,packageManager:"unknown",dependencies:c.dependencies||{},devDependencies:c.devDependencies||{},peerDependencies:c.peerDependencies||{},isMonorepoRoot:!!c.workspaces,isWorkspace:!1,parentPackage:void 0,availableCommands:S}}extractCommands(c,f){let g=[];return c.scripts&&Object.entries(c.scripts).forEach(([w,q])=>{g.push({name:w,command:`npm run ${w}`,description:q.length>50?q.substring(0,47)+"...":q,type:"script",workingDirectory:f})}),[{name:"install",command:"npm install",description:"Install dependencies"},{name:"ci",command:"npm ci",description:"Clean install dependencies"},{name:"update",command:"npm update",description:"Update dependencies"}].forEach(w=>{g.push({...w,type:"standard",workingDirectory:f})}),g}detectWorkspaces(c){return Array.isArray(c.workspaces)?c.workspaces:c.workspaces&&typeof c.workspaces=="object"&&"packages"in c.workspaces&&c.workspaces.packages||null}detectPackageManager(c,f){if(c.packageManager){let g=c.packageManager.split("@")[0];if(["npm","yarn","pnpm"].includes(g))return g}return f.some(g=>g.endsWith("yarn.lock"))?"yarn":f.some(g=>g.endsWith("pnpm-lock.yaml"))?"pnpm":(f.some(g=>g.endsWith("package-lock.json")),"npm")}detectConfigs(c,f,g){let S={},w={knip:["knip.json","knip.jsonc",".knip.json","knip.config.js","knip.config.ts","knip.config.mjs"],eslint:[".eslintrc",".eslintrc.js",".eslintrc.json",".eslintrc.yml",".eslintrc.yaml","eslint.config.js","eslint.config.mjs",".eslintrc.cjs"],prettier:[".prettierrc",".prettierrc.js",".prettierrc.json",".prettierrc.yml",".prettierrc.yaml","prettier.config.js",".prettierrc.toml"],typescript:["tsconfig.json","tsconfig.base.json"],jest:["jest.config.js","jest.config.ts","jest.config.mjs","jest.config.cjs","jest.config.json"],vitest:["vitest.config.js","vitest.config.ts","vitest.config.mjs"],webpack:["webpack.config.js","webpack.config.ts","webpack.config.mjs"],vite:["vite.config.js","vite.config.ts","vite.config.mjs"],rollup:["rollup.config.js","rollup.config.ts","rollup.config.mjs"],babel:[".babelrc",".babelrc.js",".babelrc.json","babel.config.js","babel.config.json"],dockerfile:["Dockerfile","dockerfile","Dockerfile.dev","Dockerfile.prod"],gitignore:[".gitignore"],editorconfig:[".editorconfig"]},q=c==="."||c===""?"":c.endsWith("/")?c:c+"/";if(f.allFiles)for(let[ne,de]of Object.entries(w))for(let De of de){let Ee=q+De;if(f.allFiles.some(Y=>Y.path===Ee||Y.relativePath===Ee)){S[ne]={path:Ee,exists:!0,type:this.getConfigFileType(De)};break}}return g&&(g.eslintConfig&&(S.eslint={path:q+"package.json",exists:!0,type:"json",isInline:!0,inlineField:"eslintConfig"}),g.prettier&&(S.prettier={path:q+"package.json",exists:!0,type:"json",isInline:!0,inlineField:"prettier"}),g.jest&&(S.jest={path:q+"package.json",exists:!0,type:"json",isInline:!0,inlineField:"jest"}),g.babel&&(S.babel={path:q+"package.json",exists:!0,type:"json",isInline:!0,inlineField:"babel"})),S}getConfigFileType(c){return c.endsWith(".json")||c.endsWith(".jsonc")?"json":c.endsWith(".yml")||c.endsWith(".yaml")?"yaml":c.endsWith(".toml")?"toml":c.endsWith(".js")||c.endsWith(".mjs")||c.endsWith(".cjs")?"js":c.endsWith(".ts")||c.endsWith(".mts")||c.endsWith(".cts")?"ts":c.endsWith(".ini")?"ini":"custom"}detectDocsFolder(c,f,g){let S=["docs","documentation","doc"],w=c==="."||c===""?"":c;if(w&&!w.endsWith("/")&&(w+="/"),!f.allFiles)return;for(let De of S){let Ee=w+De;if(f.allFiles.some(Y=>Y.path?.toLowerCase().startsWith(Ee.toLowerCase()+"/"))){let Y=f.allFiles.find(ut=>ut.path?.toLowerCase().startsWith(Ee.toLowerCase()+"/"))?.path;return Y?Y.substring(0,Y.indexOf("/",w.length)).substring(w.length):De}}let q=new Map;for(let De of f.allFiles){if(!De.path||w!==""&&!De.path.startsWith(w))continue;let Oe=(w===""?De.path:De.path.substring(w.length)).split("/");if(Oe.length===2){let Y=Oe[0],ut=Oe[1];q.has(Y)||q.set(Y,{docFiles:0,totalFiles:0});let Xe=q.get(Y);Xe.totalFiles++,this.isDocumentationFile(ut)&&Xe.docFiles++}}let ne,de=.5;for(let[De,Ee]of Array.from(q.entries()))if(Ee.docFiles>=2){let Oe=Ee.docFiles/Ee.totalFiles;Oe>de&&(de=Oe,ne=De)}return ne}isDocumentationFile(c){let f=c.toLowerCase();return[".md",".mdx",".rst",".txt",".adoc",".asciidoc"].some(q=>f.endsWith(q))?!0:[/^readme/i,/^changelog/i,/^changes/i,/^history/i,/^license/i,/^copying/i,/^install/i,/^usage/i,/^guide/i,/^tutorial/i,/^manual/i,/^faq/i,/^api/i,/^reference/i,/^spec/i,/^specification/i].some(q=>q.test(c))}},ske=class{manifestFileName="pyproject.toml";packageType="python";canParse(c){return c.endsWith("pyproject.toml")||c.endsWith("setup.py")||c.endsWith("requirements.txt")}parseContent(c){try{return LFe(c)}catch{return null}}extractPackageData(c,f){let g,S=f.split("/").pop()||"";f===S?g="":g=f.substring(0,f.lastIndexOf("/"));let w=c.tool?.poetry,q=c.project,ne=w?.name||q?.name||"unnamed",de=w?.version||q?.version,De={},Ee={};if(w?.dependencies&&Object.entries(w.dependencies).forEach(([Y,ut])=>{Y!=="python"&&(De[Y]=typeof ut=="string"?ut:JSON.stringify(ut))}),w?.["dev-dependencies"]&&Object.entries(w["dev-dependencies"]).forEach(([Y,ut])=>{Ee[Y]=typeof ut=="string"?ut:JSON.stringify(ut)}),q?.dependencies&&Array.isArray(q.dependencies))try{let Y=q.dependencies.join(`
|
|
977
|
-
`);(0,Ift.parsePipRequirementsFile)(Y).forEach(Xe=>{if(Xe.type==="ProjectName"&&Xe.name){let We="*";Xe.versionSpec&&Xe.versionSpec.length>0&&(We=Xe.versionSpec[0].version||"*"),De[Xe.name]=We}})}catch(Y){console.warn("Failed to parse PEP 621 dependencies with pip-requirements-js, falling back to simple parsing:",Y),q.dependencies.forEach(ut=>{let Xe=ut.trim(),We=Xe.indexOf(" ");We>0?De[Xe.substring(0,We)]="*":De[Xe]="*"})}let Oe=this.detectPythonPackageManager(c);return{name:ne,version:de,path:g,manifestPath:f,packageManager:Oe,dependencies:De,devDependencies:Ee,peerDependencies:{},isMonorepoRoot:!1,isWorkspace:!1,parentPackage:void 0,availableCommands:[]}}detectWorkspaces(c){return null}detectPackageManager(c,f){return this.detectPythonPackageManager(c)}detectPythonPackageManager(c){return c.tool?.poetry?"poetry":"pip"}detectDocsFolder(c,f,g){return new iG().detectDocsFolder(c,f,{})}},ake=class{manifestFileName="Cargo.toml";packageType="cargo";canParse(c){return c.endsWith("Cargo.toml")}parseContent(c){try{return LFe(c)}catch{return null}}extractPackageData(c,f){let g=c.package;if(!g)return null;let S;f==="Cargo.toml"?S="":f.endsWith("/Cargo.toml")?S=f.slice(0,-11):S=f;let w={},q={};return c.dependencies&&Object.entries(c.dependencies).forEach(([ne,de])=>{w[ne]=typeof de=="string"?de:JSON.stringify(de)}),c["dev-dependencies"]&&Object.entries(c["dev-dependencies"]).forEach(([ne,de])=>{q[ne]=typeof de=="string"?de:JSON.stringify(de)}),{name:g.name||"unnamed",version:g.version,path:S,manifestPath:f,packageManager:"cargo",dependencies:w,devDependencies:q,peerDependencies:{},isMonorepoRoot:!!c.workspace,isWorkspace:!1,parentPackage:void 0,availableCommands:[]}}detectWorkspaces(c){return c.workspace?.members||null}detectPackageManager(){return"cargo"}detectDocsFolder(c,f,g){return new iG().detectDocsFolder(c,f,{})}},qR=class{parsers=[new iG,new ske,new ake];async discoverPackages(c,f){let g=[];if(!c.allFiles)return g;let S=c.allFiles.filter(q=>q.path?this.parsers.some(ne=>ne.canParse(q.path)):!1),w=c.allFiles.map(q=>q.path).filter(Boolean);for(let q of S){if(!q.path)continue;let ne=this.parsers.find(_r=>_r.canParse(q.path));if(!ne)continue;let de=null;if(f)try{let _r=await f(q.path);_r&&(de=ne.parseContent(_r))}catch(_r){console.warn(`Could not read or parse ${q.path}:`,_r);continue}else{let _r=q.path.split("/").slice(-2,-1)[0]||"unnamed";de=this.createMinimalManifest(ne.packageType,_r)}if(!de)continue;let De=ne.extractPackageData(de,q.path);if(!De){console.warn(`[PackageLayerModule] extractPackageData returned null for ${q.path}`,{content:de,parser:ne.packageType});continue}let Ee=q.path.substring(0,q.path.lastIndexOf("/")),Oe=w.filter(_r=>_r.startsWith(Ee)&&this.isLockFile(_r));De.packageManager=ne.detectPackageManager(de,Oe),ne.packageType==="node"&&De.availableCommands&&De.packageManager&&De.packageManager!=="unknown"&&De.packageManager!=="npm"&&(De.availableCommands=De.availableCommands.map(_r=>{if(_r.command.includes("npm ")){let Hr=_r.command;return De.packageManager==="yarn"?Hr=Hr.replace("npm run","yarn").replace("npm install","yarn install").replace("npm ci","yarn install --frozen-lockfile").replace("npm update","yarn upgrade"):De.packageManager==="pnpm"&&(Hr=Hr.replace("npm","pnpm")),{..._r,command:Hr}}return _r}));let Y={id:`package-manifest-${De.path}`,name:ne.manifestFileName,patterns:[{type:"exact",pattern:q.path,description:`${ne.packageType} package manifest`}],matchedFiles:[q.path],fileCount:1},ut;ne.detectConfigs&&(ut=ne.detectConfigs(De.path,c,de));let Xe;ne.detectDocsFolder&&(Xe=ne.detectDocsFolder(De.path,c,de));let We=De.availableCommands?nG.calculateQualityProfile(De.availableCommands):void 0,Jt={id:`package-${ne.packageType}-${De.path.replace(/[^a-zA-Z0-9-]/g,"-")}`,name:De.name,type:ne.packageType,enabled:!0,derivedFrom:{fileSets:[Y],derivationType:"content",description:`${ne.packageType} package defined in ${ne.manifestFileName}`,contentExtraction:{method:"parse",parser:{format:ne.manifestFileName.endsWith(".json")?"json":"toml",paths:ne.packageType==="node"?[""]:ne.packageType==="python"?["tool.poetry","project"]:["package"]}}},packageData:De,configFiles:ut,docsFolder:Xe,qualityMetrics:We,pillar:"foundationHealth"};g.push(Jt)}return this.resolveWorkspaceRelationships(g),g}createPackageLayersFromBoundaries(c){return c.map(f=>{let g={id:`package-manifest-${f.rootPath||"root"}`,name:"package.json",patterns:[{type:"exact",pattern:f.packageJsonPath,description:"Node.js package manifest"}],matchedFiles:[f.packageJsonPath],fileCount:1},S={name:f.packageData?.name||f.name,version:f.packageData?.version,path:f.rootPath||".",manifestPath:f.packageJsonPath,packageManager:"unknown",dependencies:{},devDependencies:{},peerDependencies:{},isMonorepoRoot:!!f.packageData?.workspaces,isWorkspace:!f.isRoot&&c.length>1,parentPackage:f.isRoot?void 0:"root"};return{id:`package-node-${f.id}`,name:S.name,type:"node",enabled:!0,derivedFrom:{fileSets:[g],derivationType:"content",description:"Node.js package defined in package.json"},packageData:S,pillar:"foundationHealth"}})}isLockFile(c){return["package-lock.json","yarn.lock","pnpm-lock.yaml","poetry.lock","Pipfile.lock","Cargo.lock"].some(g=>c.endsWith(g))}resolveWorkspaceRelationships(c){let f=c.filter(g=>g.packageData.path==="."||g.packageData.path==="");c.forEach(g=>{if(g.packageData.path!=="."&&g.packageData.path!==""){g.packageData.isWorkspace=!0;let S=g.packageData.path.includes("/")?g.packageData.path.substring(0,g.packageData.path.lastIndexOf("/")):".",w=c.find(q=>q.packageData.path===S);w&&(g.packageData.parentPackage=w.packageData.name)}})}createMinimalManifest(c,f){switch(c){case"node":return{name:f,version:"0.0.0",dependencies:{},devDependencies:{}};case"python":return{project:{name:f,version:"0.0.0"}};case"cargo":return{package:{name:f,version:"0.0.0"}};default:return{}}}};var L1=wy(y_t(),1);var Uur=wy(Doe(),1);var Gur=wy(Doe(),1);var $ur=wy(Doe(),1);var NT=wy(require("path")),W4=wy(require("fs/promises")),jke=class{constructor(c){this.basePath=c}async readFile(c){try{let f=NT.isAbsolute(c)?c:NT.join(this.basePath,c);return{content:await W4.readFile(f,"utf-8")}}catch(f){return console.error(`[CLIFileSystemAdapter] Failed to read ${c}:`,f),null}}async fileExists(c){try{let f=NT.isAbsolute(c)?c:NT.join(this.basePath,c);return await W4.access(f),!0}catch{return!1}}async readDirectory(c){try{let f=NT.isAbsolute(c)?c:NT.join(this.basePath,c);return await W4.readdir(f)}catch(f){return console.error(`[CLIFileSystemAdapter] Failed to read directory ${c}:`,f),[]}}async isDirectory(c){try{let f=NT.isAbsolute(c)?c:NT.join(this.basePath,c);return(await W4.stat(f)).isDirectory()}catch{return!1}}async buildFilteredFileTree(c,f,g){return{paths:[]}}},lG=class{constructor(){this.packageModule=new qR}async extractPackages(c,f){try{let g=new jke(f),S=async q=>(await g.readFile(q))?.content||"",w=await this.packageModule.discoverPackages(c,S);return console.info(`[RepositoryScanner] Found ${w.length} packages in ${f}`),w}catch(g){return console.error("[RepositoryScanner] Failed to extract packages:",g),[]}}};var Kv=wy(Xke());var Yke=require("child_process"),Zke=require("stream"),Poe=class{constructor(){this.type="node"}async execute(c,f=[],g={}){let S=Date.now();return new Promise(w=>{let q="",ne="",De={...g.env||process.env};delete De.NODE_OPTIONS,delete De.TS_NODE_PROJECT,delete De.TS_NODE_TRANSPILE_ONLY;let Ee=(0,Yke.spawn)(c,f,{cwd:g.cwd,env:De,shell:!0});Ee.stdout&&Ee.stdout.on("data",Y=>{q+=Y.toString()}),Ee.stderr&&Ee.stderr.on("data",Y=>{ne+=Y.toString()});let Oe;g.timeout&&(Oe=setTimeout(()=>{Ee.kill("SIGTERM")},g.timeout)),Ee.on("error",Y=>{Oe&&clearTimeout(Oe),w({stdout:q,stderr:ne||Y.message,exitCode:1,duration:Date.now()-S,command:c,args:f,error:Y})}),Ee.on("close",Y=>{Oe&&clearTimeout(Oe),w({stdout:q,stderr:ne,exitCode:Y??0,duration:Date.now()-S,command:c,args:f})})})}stream(c,f=[],g={}){let w={...g.env||process.env};delete w.NODE_OPTIONS,delete w.TS_NODE_PROJECT,delete w.TS_NODE_TRANSPILE_ONLY;let q=(0,Yke.spawn)(c,f,{cwd:g.cwd,env:w,shell:!0}),ne=new Promise(de=>{let De="",Ee="",Oe=Date.now();q.stdout&&q.stdout.on("data",Y=>{De+=Y.toString()}),q.stderr&&q.stderr.on("data",Y=>{Ee+=Y.toString()}),q.on("close",Y=>{de({stdout:De,stderr:Ee,exitCode:Y??0,duration:Date.now()-Oe,command:c,args:f})}),q.on("error",Y=>{de({stdout:De,stderr:Ee||Y.message,exitCode:1,duration:Date.now()-Oe,command:c,args:f,error:Y})})});return{stdout:q.stdout||new Zke.Readable({read(){}}),stderr:q.stderr||new Zke.Readable({read(){}}),exitPromise:ne,kill:()=>{q.kill("SIGTERM")}}}async isAvailable(c){try{let f=["--version"];return(await this.execute(c,f,{timeout:5e3})).exitCode===0}catch{return!1}}};var Noe=class{constructor(){this.executor=new Poe,this.lenses=new Map,this.initializeLenses()}initializeLenses(){console.log("[QualityLensService] Initializing lenses...");let c=new Kv.ESLintLens(this.executor);this.lenses.set("eslint",c),this.lenses.set("lint",c);let f=new Kv.JestLens(this.executor);this.lenses.set("jest",f),this.lenses.set("test",f);let g=new Kv.TypeScriptLens(this.executor);this.lenses.set("typescript",g),this.lenses.set("typecheck",g),this.lenses.set("tsc",g);let S=new Kv.KnipLens(this.executor);this.lenses.set("knip",S),this.lenses.set("deadcode",S);let w=new Kv.PrettierLens(this.executor);this.lenses.set("prettier",w),this.lenses.set("format",w);let q=new Kv.GitLens(this.executor);this.lenses.set("git",q);let ne=new Kv.AlexandriaLens(this.executor);this.lenses.set("alexandria",ne),this.lenses.set("docs",ne)}async executeTool(c){let f=Date.now();if(!c.packageLayer||!c.packageCommand)throw new Error("packageLayer and packageCommand are required. Legacy execution has been removed.");return this.executeWithPackageLayer(c,f)}async executeWithPackageLayer(c,f){let{repoPath:g,packageLayer:S,packageCommand:w}=c;if(!S||!w)throw new Error("packageLayer and packageCommand are required for new execution path");let q=S.packageData.path||"",ne=q?`${g}/${q}`:g;if(!w.isLensCommand||!w.lensId)return console.log(`[QualityLensService] Not a lens command, executing directly: ${w.name}`),this.executeNonLensCommand(c,w,ne,f);let de=this.lenses.get(w.lensId);if(!de)return console.warn(`[QualityLensService] No lens registered for: ${w.lensId}`),this.executeNonLensCommand(c,w,ne,f);console.log(`[QualityLensService] Using ${de.name} for command: ${w.name} (lensId: ${w.lensId})`);try{let{command:De,args:Ee}=this.parseCommandString(w.command);de.configure({cwd:ne,tool:{name:w.lensId,command:De,args:Ee,cwd:ne,available:!0}});let Oe=await de.run(),{success:Y,exitCode:ut}=this.determineLensSuccess(Oe);return{success:Y,toolName:w.lensId,command:w.command,packagePath:q,exitCode:ut,duration:Date.now()-f,stdout:Oe.raw?.stdout||"",stderr:Oe.raw?.stderr||Oe.error?.message||"",lensResult:Oe,qualityContext:{lensId:w.lensId,operation:w.lensOperation,availableLenses:S.qualityMetrics?.availableLenses,missingLenses:S.qualityMetrics?.missingLenses}}}catch(De){return console.error("[QualityLensService] Error:",De),this.createErrorResponse(w.lensId||w.name,w.command,q,De,f)}}async executeNonLensCommand(c,f,g,S){let{command:w,args:q}=this.parseCommandString(f.command);try{let ne=await this.executor.execute(w,q,{cwd:g});return{success:ne.exitCode===0,toolName:f.name,command:f.command,packagePath:c.packageLayer?.packageData.path,exitCode:ne.exitCode,duration:Date.now()-S,stdout:ne.stdout,stderr:ne.stderr}}catch(ne){return this.createErrorResponse(f.name,f.command,c.packageLayer?.packageData.path,ne,S)}}parseCommandString(c){if(c.startsWith("npm run "))return{command:"npm",args:["run",...c.split(" ").slice(2)]};if(c.startsWith("yarn "))return{command:"yarn",args:c.split(" ").slice(1)};if(c.startsWith("pnpm "))return{command:"pnpm",args:c.split(" ").slice(1)};let f=c.split(" ");return{command:f[0]||"",args:f.slice(1)}}determineLensSuccess(c){let f=0;return c.raw?.exitCode!==void 0?f=c.raw.exitCode:(c.error||c.metrics?.issuesBySeverity?.error&&c.metrics.issuesBySeverity.error>0)&&(f=1),{success:f!==127,exitCode:f}}createErrorResponse(c,f,g,S,w){return{success:!1,toolName:c,command:f,packagePath:g,exitCode:1,duration:Date.now()-w,stdout:"",stderr:S.message||"Tool execution failed",error:S.message}}getAvailableLenses(){return Array.from(this.lenses.keys())}hasLensForTool(c){return this.lenses.has(c.toLowerCase())}};var Ooe=class{mapLensToHexagonDimension(c){return{jest:"tests",test:"tests",knip:"deadCode",deadcode:"deadCode",prettier:"formatting",format:"formatting",eslint:"linting",lint:"linting",typescript:"types",typecheck:"types",tsc:"types",alexandria:"documentation"}[c.toLowerCase()]||null}extractQualityScore(c){if(c.result?.lensResult?.qualityScore!==void 0&&c.result.lensResult.qualityScore!==null&&c.result.lensResult.qualityScore>0)return c.result.lensResult.qualityScore;let f=c.result?.lensResult?.metrics;if(f){if(!c.result?.success)return 0;let g=f.totalIssues||0,S=f.filesAnalyzed||1;if(g===0)return 100;let w=f.issuesBySeverity||{},q=(w.error||0)*3,ne=(w.warning||0)*2,de=(w.info||0)*1,De=(w.hint||0)*.5,Oe=(q+ne+de+De)/S,Y=Math.max(0,100-Oe*10);return Math.round(Y)}return 0}calculateHexagonMetrics(c){let f={tests:0,deadCode:0,formatting:0,linting:0,types:0,documentation:0};for(let g of c){let S=this.mapLensToHexagonDimension(g.lens);if(S){let w=this.extractQualityScore(g);S==="deadCode"&&(w=100-w),S==="deadCode"?f[S]=f[S]===0?w:Math.min(f[S],w):f[S]=Math.max(f[S],w)}}return f}getGitMetadata(){let c={};if(process.env.GITHUB_SHA&&(c.commit=process.env.GITHUB_SHA),process.env.GITHUB_REF){let f=process.env.GITHUB_REF;f.startsWith("refs/heads/")?c.branch=f.replace("refs/heads/",""):f.startsWith("refs/pull/")&&(c.branch=f)}if(process.env.GITHUB_REPOSITORY&&(c.repository=process.env.GITHUB_REPOSITORY),Object.keys(c).length!==0)return c}format(c){let f=this.getGitMetadata(),g={metadata:{timestamp:new Date().toISOString(),version:"1.0.0",totalPackages:new Set(c.map(S=>S.package)).size,totalLenses:c.length,...f&&{git:f}},results:c.map(S=>({package:{name:S.package,path:S.packagePath},lens:{id:S.lens,command:S.command},execution:{success:S.result?.success??!1,exitCode:S.result?.exitCode,duration:S.result?.duration,timestamp:S.timestamp},issues:S.result?.lensResult?.issues||[],metrics:S.result?.lensResult?.metrics||{},coverage:S.result?.lensResult?.coverage,fileMetrics:S.result?.lensResult?.fileMetrics,qualityContext:S.result?.qualityContext||{},error:S.error}))};return c.length>0&&(g.qualityMetrics={hexagon:this.calculateHexagonMetrics(c)}),JSON.stringify(g,null,2)}};var Z_t=(_=0)=>c=>`\x1B[${c+_}m`,ept=(_=0)=>c=>`\x1B[${38+_};5;${c}m`,tpt=(_=0)=>(c,f,g)=>`\x1B[${38+_};2;${c};${f};${g}m`,Zp={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},Ewr=Object.keys(Zp.modifier),Ilr=Object.keys(Zp.color),wlr=Object.keys(Zp.bgColor),xwr=[...Ilr,...wlr];function Plr(){let _=new Map;for(let[c,f]of Object.entries(Zp)){for(let[g,S]of Object.entries(f))Zp[g]={open:`\x1B[${S[0]}m`,close:`\x1B[${S[1]}m`},f[g]=Zp[g],_.set(S[0],S[1]);Object.defineProperty(Zp,c,{value:f,enumerable:!1})}return Object.defineProperty(Zp,"codes",{value:_,enumerable:!1}),Zp.color.close="\x1B[39m",Zp.bgColor.close="\x1B[49m",Zp.color.ansi=Z_t(),Zp.color.ansi256=ept(),Zp.color.ansi16m=tpt(),Zp.bgColor.ansi=Z_t(10),Zp.bgColor.ansi256=ept(10),Zp.bgColor.ansi16m=tpt(10),Object.defineProperties(Zp,{rgbToAnsi256:{value(c,f,g){return c===f&&f===g?c<8?16:c>248?231:Math.round((c-8)/247*24)+232:16+36*Math.round(c/255*5)+6*Math.round(f/255*5)+Math.round(g/255*5)},enumerable:!1},hexToRgb:{value(c){let f=/[a-f\d]{6}|[a-f\d]{3}/i.exec(c.toString(16));if(!f)return[0,0,0];let[g]=f;g.length===3&&(g=[...g].map(w=>w+w).join(""));let S=Number.parseInt(g,16);return[S>>16&255,S>>8&255,S&255]},enumerable:!1},hexToAnsi256:{value:c=>Zp.rgbToAnsi256(...Zp.hexToRgb(c)),enumerable:!1},ansi256ToAnsi:{value(c){if(c<8)return 30+c;if(c<16)return 90+(c-8);let f,g,S;if(c>=232)f=((c-232)*10+8)/255,g=f,S=f;else{c-=16;let ne=c%36;f=Math.floor(c/36)/5,g=Math.floor(ne/6)/5,S=ne%6/5}let w=Math.max(f,g,S)*2;if(w===0)return 30;let q=30+(Math.round(S)<<2|Math.round(g)<<1|Math.round(f));return w===2&&(q+=60),q},enumerable:!1},rgbToAnsi:{value:(c,f,g)=>Zp.ansi256ToAnsi(Zp.rgbToAnsi256(c,f,g)),enumerable:!1},hexToAnsi:{value:c=>Zp.ansi256ToAnsi(Zp.hexToAnsi256(c)),enumerable:!1}}),Zp}var Nlr=Plr(),lE=Nlr;var Roe=wy(require("node:process"),1),npt=wy(require("node:os"),1),e6e=wy(require("node:tty"),1);function CC(_,c=globalThis.Deno?globalThis.Deno.args:Roe.default.argv){let f=_.startsWith("-")?"":_.length===1?"-":"--",g=c.indexOf(f+_),S=c.indexOf("--");return g!==-1&&(S===-1||g<S)}var{env:ed}=Roe.default,Loe;CC("no-color")||CC("no-colors")||CC("color=false")||CC("color=never")?Loe=0:(CC("color")||CC("colors")||CC("color=true")||CC("color=always"))&&(Loe=1);function Olr(){if("FORCE_COLOR"in ed)return ed.FORCE_COLOR==="true"?1:ed.FORCE_COLOR==="false"?0:ed.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(ed.FORCE_COLOR,10),3)}function Llr(_){return _===0?!1:{level:_,hasBasic:!0,has256:_>=2,has16m:_>=3}}function Rlr(_,{streamIsTTY:c,sniffFlags:f=!0}={}){let g=Olr();g!==void 0&&(Loe=g);let S=f?Loe:g;if(S===0)return 0;if(f){if(CC("color=16m")||CC("color=full")||CC("color=truecolor"))return 3;if(CC("color=256"))return 2}if("TF_BUILD"in ed&&"AGENT_NAME"in ed)return 1;if(_&&!c&&S===void 0)return 0;let w=S||0;if(ed.TERM==="dumb")return w;if(Roe.default.platform==="win32"){let q=npt.default.release().split(".");return Number(q[0])>=10&&Number(q[2])>=10586?Number(q[2])>=14931?3:2:1}if("CI"in ed)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(q=>q in ed)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(q=>q in ed)||ed.CI_NAME==="codeship"?1:w;if("TEAMCITY_VERSION"in ed)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ed.TEAMCITY_VERSION)?1:0;if(ed.COLORTERM==="truecolor"||ed.TERM==="xterm-kitty"||ed.TERM==="xterm-ghostty"||ed.TERM==="wezterm")return 3;if("TERM_PROGRAM"in ed){let q=Number.parseInt((ed.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ed.TERM_PROGRAM){case"iTerm.app":return q>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ed.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ed.TERM)||"COLORTERM"in ed?1:w}function rpt(_,c={}){let f=Rlr(_,{streamIsTTY:_&&_.isTTY,...c});return Llr(f)}var Mlr={stdout:rpt({isTTY:e6e.default.isatty(1)}),stderr:rpt({isTTY:e6e.default.isatty(2)})},ipt=Mlr;function spt(_,c,f){let g=_.indexOf(c);if(g===-1)return _;let S=c.length,w=0,q="";do q+=_.slice(w,g)+c+f,w=g+S,g=_.indexOf(c,w);while(g!==-1);return q+=_.slice(w),q}function apt(_,c,f,g){let S=0,w="";do{let q=_[g-1]==="\r";w+=_.slice(S,q?g-1:g)+c+(q?`\r
|
|
977
|
+
`);(0,Ift.parsePipRequirementsFile)(Y).forEach(Xe=>{if(Xe.type==="ProjectName"&&Xe.name){let We="*";Xe.versionSpec&&Xe.versionSpec.length>0&&(We=Xe.versionSpec[0].version||"*"),De[Xe.name]=We}})}catch(Y){console.warn("Failed to parse PEP 621 dependencies with pip-requirements-js, falling back to simple parsing:",Y),q.dependencies.forEach(ut=>{let Xe=ut.trim(),We=Xe.indexOf(" ");We>0?De[Xe.substring(0,We)]="*":De[Xe]="*"})}let Oe=this.detectPythonPackageManager(c);return{name:ne,version:de,path:g,manifestPath:f,packageManager:Oe,dependencies:De,devDependencies:Ee,peerDependencies:{},isMonorepoRoot:!1,isWorkspace:!1,parentPackage:void 0,availableCommands:[]}}detectWorkspaces(c){return null}detectPackageManager(c,f){return this.detectPythonPackageManager(c)}detectPythonPackageManager(c){return c.tool?.poetry?"poetry":"pip"}detectDocsFolder(c,f,g){return new iG().detectDocsFolder(c,f,{})}},ake=class{manifestFileName="Cargo.toml";packageType="cargo";canParse(c){return c.endsWith("Cargo.toml")}parseContent(c){try{return LFe(c)}catch{return null}}extractPackageData(c,f){let g=c.package;if(!g)return null;let S;f==="Cargo.toml"?S="":f.endsWith("/Cargo.toml")?S=f.slice(0,-11):S=f;let w={},q={};return c.dependencies&&Object.entries(c.dependencies).forEach(([ne,de])=>{w[ne]=typeof de=="string"?de:JSON.stringify(de)}),c["dev-dependencies"]&&Object.entries(c["dev-dependencies"]).forEach(([ne,de])=>{q[ne]=typeof de=="string"?de:JSON.stringify(de)}),{name:g.name||"unnamed",version:g.version,path:S,manifestPath:f,packageManager:"cargo",dependencies:w,devDependencies:q,peerDependencies:{},isMonorepoRoot:!!c.workspace,isWorkspace:!1,parentPackage:void 0,availableCommands:[]}}detectWorkspaces(c){return c.workspace?.members||null}detectPackageManager(){return"cargo"}detectDocsFolder(c,f,g){return new iG().detectDocsFolder(c,f,{})}},qR=class{parsers=[new iG,new ske,new ake];async discoverPackages(c,f){let g=[];if(!c.allFiles)return g;let S=c.allFiles.filter(q=>q.path?this.parsers.some(ne=>ne.canParse(q.path)):!1),w=c.allFiles.map(q=>q.path).filter(Boolean);for(let q of S){if(!q.path)continue;let ne=this.parsers.find(_r=>_r.canParse(q.path));if(!ne)continue;let de=null;if(f)try{let _r=await f(q.path);_r&&(de=ne.parseContent(_r))}catch(_r){console.warn(`Could not read or parse ${q.path}:`,_r);continue}else{let _r=q.path.split("/").slice(-2,-1)[0]||"unnamed";de=this.createMinimalManifest(ne.packageType,_r)}if(!de)continue;let De=ne.extractPackageData(de,q.path);if(!De){console.warn(`[PackageLayerModule] extractPackageData returned null for ${q.path}`,{content:de,parser:ne.packageType});continue}let Ee=q.path.substring(0,q.path.lastIndexOf("/")),Oe=w.filter(_r=>_r.startsWith(Ee)&&this.isLockFile(_r));De.packageManager=ne.detectPackageManager(de,Oe),ne.packageType==="node"&&De.availableCommands&&De.packageManager&&De.packageManager!=="unknown"&&De.packageManager!=="npm"&&(De.availableCommands=De.availableCommands.map(_r=>{if(_r.command.includes("npm ")){let Hr=_r.command;return De.packageManager==="yarn"?Hr=Hr.replace("npm run","yarn").replace("npm install","yarn install").replace("npm ci","yarn install --frozen-lockfile").replace("npm update","yarn upgrade"):De.packageManager==="pnpm"&&(Hr=Hr.replace("npm","pnpm")),{..._r,command:Hr}}return _r}));let Y={id:`package-manifest-${De.path}`,name:ne.manifestFileName,patterns:[{type:"exact",pattern:q.path,description:`${ne.packageType} package manifest`}],matchedFiles:[q.path],fileCount:1},ut;ne.detectConfigs&&(ut=ne.detectConfigs(De.path,c,de));let Xe;ne.detectDocsFolder&&(Xe=ne.detectDocsFolder(De.path,c,de));let We=De.availableCommands?nG.calculateQualityProfile(De.availableCommands):void 0,Jt={id:`package-${ne.packageType}-${De.path.replace(/[^a-zA-Z0-9-]/g,"-")}`,name:De.name,type:ne.packageType,enabled:!0,derivedFrom:{fileSets:[Y],derivationType:"content",description:`${ne.packageType} package defined in ${ne.manifestFileName}`,contentExtraction:{method:"parse",parser:{format:ne.manifestFileName.endsWith(".json")?"json":"toml",paths:ne.packageType==="node"?[""]:ne.packageType==="python"?["tool.poetry","project"]:["package"]}}},packageData:De,configFiles:ut,docsFolder:Xe,qualityMetrics:We,pillar:"foundationHealth"};g.push(Jt)}return this.resolveWorkspaceRelationships(g),g}createPackageLayersFromBoundaries(c){return c.map(f=>{let g={id:`package-manifest-${f.rootPath||"root"}`,name:"package.json",patterns:[{type:"exact",pattern:f.packageJsonPath,description:"Node.js package manifest"}],matchedFiles:[f.packageJsonPath],fileCount:1},S={name:f.packageData?.name||f.name,version:f.packageData?.version,path:f.rootPath||".",manifestPath:f.packageJsonPath,packageManager:"unknown",dependencies:{},devDependencies:{},peerDependencies:{},isMonorepoRoot:!!f.packageData?.workspaces,isWorkspace:!f.isRoot&&c.length>1,parentPackage:f.isRoot?void 0:"root"};return{id:`package-node-${f.id}`,name:S.name,type:"node",enabled:!0,derivedFrom:{fileSets:[g],derivationType:"content",description:"Node.js package defined in package.json"},packageData:S,pillar:"foundationHealth"}})}isLockFile(c){return["package-lock.json","yarn.lock","pnpm-lock.yaml","poetry.lock","Pipfile.lock","Cargo.lock"].some(g=>c.endsWith(g))}resolveWorkspaceRelationships(c){let f=c.filter(g=>g.packageData.path==="."||g.packageData.path==="");c.forEach(g=>{if(g.packageData.path!=="."&&g.packageData.path!==""){g.packageData.isWorkspace=!0;let S=g.packageData.path.includes("/")?g.packageData.path.substring(0,g.packageData.path.lastIndexOf("/")):".",w=c.find(q=>q.packageData.path===S);w&&(g.packageData.parentPackage=w.packageData.name)}})}createMinimalManifest(c,f){switch(c){case"node":return{name:f,version:"0.0.0",dependencies:{},devDependencies:{}};case"python":return{project:{name:f,version:"0.0.0"}};case"cargo":return{package:{name:f,version:"0.0.0"}};default:return{}}}};var L1=wy(y_t(),1);var Uur=wy(Doe(),1);var Gur=wy(Doe(),1);var $ur=wy(Doe(),1);var NT=wy(require("path")),W4=wy(require("fs/promises")),jke=class{constructor(c){this.basePath=c}async readFile(c){try{let f=NT.isAbsolute(c)?c:NT.join(this.basePath,c);return{content:await W4.readFile(f,"utf-8")}}catch(f){return console.error(`[CLIFileSystemAdapter] Failed to read ${c}:`,f),null}}async fileExists(c){try{let f=NT.isAbsolute(c)?c:NT.join(this.basePath,c);return await W4.access(f),!0}catch{return!1}}async readDirectory(c){try{let f=NT.isAbsolute(c)?c:NT.join(this.basePath,c);return await W4.readdir(f)}catch(f){return console.error(`[CLIFileSystemAdapter] Failed to read directory ${c}:`,f),[]}}async isDirectory(c){try{let f=NT.isAbsolute(c)?c:NT.join(this.basePath,c);return(await W4.stat(f)).isDirectory()}catch{return!1}}async buildFilteredFileTree(c,f,g){return{paths:[]}}},lG=class{constructor(){this.packageModule=new qR}async extractPackages(c,f){try{let g=new jke(f),S=async q=>(await g.readFile(q))?.content||"",w=await this.packageModule.discoverPackages(c,S);return console.info(`[RepositoryScanner] Found ${w.length} packages in ${f}`),w}catch(g){return console.error("[RepositoryScanner] Failed to extract packages:",g),[]}}};var Kv=wy(Xke());var Yke=require("child_process"),Zke=require("stream"),Poe=class{constructor(){this.type="node"}async execute(c,f=[],g={}){let S=Date.now();return new Promise(w=>{let q="",ne="",De={...g.env||process.env};delete De.NODE_OPTIONS,delete De.TS_NODE_PROJECT,delete De.TS_NODE_TRANSPILE_ONLY;let Ee=(0,Yke.spawn)(c,f,{cwd:g.cwd,env:De,shell:!0});Ee.stdout&&Ee.stdout.on("data",Y=>{q+=Y.toString()}),Ee.stderr&&Ee.stderr.on("data",Y=>{ne+=Y.toString()});let Oe;g.timeout&&(Oe=setTimeout(()=>{Ee.kill("SIGTERM")},g.timeout)),Ee.on("error",Y=>{Oe&&clearTimeout(Oe),w({stdout:q,stderr:ne||Y.message,exitCode:1,duration:Date.now()-S,command:c,args:f,error:Y})}),Ee.on("close",Y=>{Oe&&clearTimeout(Oe),w({stdout:q,stderr:ne,exitCode:Y??0,duration:Date.now()-S,command:c,args:f})})})}stream(c,f=[],g={}){let w={...g.env||process.env};delete w.NODE_OPTIONS,delete w.TS_NODE_PROJECT,delete w.TS_NODE_TRANSPILE_ONLY;let q=(0,Yke.spawn)(c,f,{cwd:g.cwd,env:w,shell:!0}),ne=new Promise(de=>{let De="",Ee="",Oe=Date.now();q.stdout&&q.stdout.on("data",Y=>{De+=Y.toString()}),q.stderr&&q.stderr.on("data",Y=>{Ee+=Y.toString()}),q.on("close",Y=>{de({stdout:De,stderr:Ee,exitCode:Y??0,duration:Date.now()-Oe,command:c,args:f})}),q.on("error",Y=>{de({stdout:De,stderr:Ee||Y.message,exitCode:1,duration:Date.now()-Oe,command:c,args:f,error:Y})})});return{stdout:q.stdout||new Zke.Readable({read(){}}),stderr:q.stderr||new Zke.Readable({read(){}}),exitPromise:ne,kill:()=>{q.kill("SIGTERM")}}}async isAvailable(c){try{let f=["--version"];return(await this.execute(c,f,{timeout:5e3})).exitCode===0}catch{return!1}}};var Noe=class{constructor(){this.executor=new Poe,this.lenses=new Map,this.initializeLenses()}initializeLenses(){console.log("[QualityLensService] Initializing lenses...");let c=new Kv.ESLintLens(this.executor);this.lenses.set("eslint",c),this.lenses.set("lint",c);let f=new Kv.JestLens(this.executor);this.lenses.set("jest",f),this.lenses.set("test",f);let g=new Kv.TypeScriptLens(this.executor);this.lenses.set("typescript",g),this.lenses.set("typecheck",g),this.lenses.set("tsc",g);let S=new Kv.KnipLens(this.executor);this.lenses.set("knip",S),this.lenses.set("deadcode",S);let w=new Kv.PrettierLens(this.executor);this.lenses.set("prettier",w),this.lenses.set("format",w);let q=new Kv.GitLens(this.executor);this.lenses.set("git",q);let ne=new Kv.AlexandriaLens(this.executor);this.lenses.set("alexandria",ne),this.lenses.set("docs",ne)}async executeTool(c){let f=Date.now();if(!c.packageLayer||!c.packageCommand)throw new Error("packageLayer and packageCommand are required. Legacy execution has been removed.");return this.executeWithPackageLayer(c,f)}async executeWithPackageLayer(c,f){let{repoPath:g,packageLayer:S,packageCommand:w}=c;if(!S||!w)throw new Error("packageLayer and packageCommand are required for new execution path");let q=S.packageData.path||"",ne=q?`${g}/${q}`:g;if(!w.isLensCommand||!w.lensId)return console.log(`[QualityLensService] Not a lens command, executing directly: ${w.name}`),this.executeNonLensCommand(c,w,ne,f);let de=this.lenses.get(w.lensId);if(!de)return console.warn(`[QualityLensService] No lens registered for: ${w.lensId}`),this.executeNonLensCommand(c,w,ne,f);console.log(`[QualityLensService] Using ${de.name} for command: ${w.name} (lensId: ${w.lensId})`);try{let{command:De,args:Ee}=this.parseCommandString(w.command);de.configure({cwd:ne,tool:{name:w.lensId,command:De,args:Ee,cwd:ne,available:!0}});let Oe=await de.run(),{success:Y,exitCode:ut}=this.determineLensSuccess(Oe);return{success:Y,toolName:w.lensId,command:w.command,packagePath:q,exitCode:ut,duration:Date.now()-f,stdout:Oe.raw?.stdout||"",stderr:Oe.raw?.stderr||Oe.error?.message||"",lensResult:Oe,qualityContext:{lensId:w.lensId,operation:w.lensOperation,availableLenses:S.qualityMetrics?.availableLenses,missingLenses:S.qualityMetrics?.missingLenses}}}catch(De){return console.error("[QualityLensService] Error:",De),this.createErrorResponse(w.lensId||w.name,w.command,q,De,f)}}async executeNonLensCommand(c,f,g,S){let{command:w,args:q}=this.parseCommandString(f.command);try{let ne=await this.executor.execute(w,q,{cwd:g});return{success:ne.exitCode===0,toolName:f.name,command:f.command,packagePath:c.packageLayer?.packageData.path,exitCode:ne.exitCode,duration:Date.now()-S,stdout:ne.stdout,stderr:ne.stderr}}catch(ne){return this.createErrorResponse(f.name,f.command,c.packageLayer?.packageData.path,ne,S)}}parseCommandString(c){if(c.startsWith("npm run "))return{command:"npm",args:["run",...c.split(" ").slice(2)]};if(c.startsWith("yarn "))return{command:"yarn",args:c.split(" ").slice(1)};if(c.startsWith("pnpm "))return{command:"pnpm",args:c.split(" ").slice(1)};let f=c.split(" ");return{command:f[0]||"",args:f.slice(1)}}determineLensSuccess(c){let f=0;return c.raw?.exitCode!==void 0?f=c.raw.exitCode:(c.error||c.metrics?.issuesBySeverity?.error&&c.metrics.issuesBySeverity.error>0)&&(f=1),{success:f!==127,exitCode:f}}createErrorResponse(c,f,g,S,w){return{success:!1,toolName:c,command:f,packagePath:g,exitCode:1,duration:Date.now()-w,stdout:"",stderr:S.message||"Tool execution failed",error:S.message}}getAvailableLenses(){return Array.from(this.lenses.keys())}hasLensForTool(c){return this.lenses.has(c.toLowerCase())}};var Ooe=class{mapLensToHexagonDimension(c){return{jest:"tests",test:"tests",knip:"deadCode",deadcode:"deadCode",prettier:"formatting",format:"formatting",eslint:"linting",lint:"linting",typescript:"types",typecheck:"types",tsc:"types",alexandria:"documentation"}[c.toLowerCase()]||null}extractQualityScore(c){if(c.result?.lensResult?.qualityScore!==void 0&&c.result.lensResult.qualityScore!==null&&c.result.lensResult.qualityScore>0)return c.result.lensResult.qualityScore;let f=c.result?.lensResult?.metrics;if(f){if(!c.result?.success)return 0;let g=f.totalIssues||0,S=f.filesAnalyzed||1;if(g===0)return 100;let w=f.issuesBySeverity||{},q=(w.error||0)*3,ne=(w.warning||0)*2,de=(w.info||0)*1,De=(w.hint||0)*.5,Oe=(q+ne+de+De)/S,Y=Math.max(0,100-Oe*10);return Math.round(Y)}return 0}calculateHexagonMetrics(c){let f={tests:0,deadCode:0,formatting:0,linting:0,types:0,documentation:0};for(let g of c){let S=this.mapLensToHexagonDimension(g.lens);if(S){let w=this.extractQualityScore(g);S==="deadCode"&&(w=100-w),S==="deadCode"?f[S]=f[S]===0?w:Math.min(f[S],w):f[S]=Math.max(f[S],w)}}return f}getGitMetadata(){let c={};if(process.env.GITHUB_SHA&&(c.commit=process.env.GITHUB_SHA),process.env.GITHUB_REF){let f=process.env.GITHUB_REF;f.startsWith("refs/heads/")?c.branch=f.replace("refs/heads/",""):f.startsWith("refs/pull/")&&(c.branch=f)}if(process.env.GITHUB_REPOSITORY&&(c.repository=process.env.GITHUB_REPOSITORY),Object.keys(c).length!==0)return c}calculatePerPackageMetrics(c){let f=new Map;for(let S of c){let w=f.get(S.package);w?w.results.push(S):f.set(S.package,{path:S.packagePath,results:[S]})}let g=[];for(let[S,{path:w,results:q}]of f)g.push({name:S,path:w,hexagon:this.calculateHexagonMetrics(q)});return g}format(c){let f=this.getGitMetadata(),g=this.calculatePerPackageMetrics(c),S={metadata:{timestamp:new Date().toISOString(),version:"1.0.0",totalPackages:g.length,totalLenses:c.length,...f&&{git:f}},results:c.map(w=>({package:{name:w.package,path:w.packagePath},lens:{id:w.lens,command:w.command},execution:{success:w.result?.success??!1,exitCode:w.result?.exitCode,duration:w.result?.duration,timestamp:w.timestamp},issues:w.result?.lensResult?.issues||[],metrics:w.result?.lensResult?.metrics||{},coverage:w.result?.lensResult?.coverage,fileMetrics:w.result?.lensResult?.fileMetrics,qualityContext:w.result?.qualityContext||{},error:w.error}))};return g.length>0&&(S.qualityMetrics={packages:g}),JSON.stringify(S,null,2)}};var Z_t=(_=0)=>c=>`\x1B[${c+_}m`,ept=(_=0)=>c=>`\x1B[${38+_};5;${c}m`,tpt=(_=0)=>(c,f,g)=>`\x1B[${38+_};2;${c};${f};${g}m`,Zp={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},Ewr=Object.keys(Zp.modifier),Ilr=Object.keys(Zp.color),wlr=Object.keys(Zp.bgColor),xwr=[...Ilr,...wlr];function Plr(){let _=new Map;for(let[c,f]of Object.entries(Zp)){for(let[g,S]of Object.entries(f))Zp[g]={open:`\x1B[${S[0]}m`,close:`\x1B[${S[1]}m`},f[g]=Zp[g],_.set(S[0],S[1]);Object.defineProperty(Zp,c,{value:f,enumerable:!1})}return Object.defineProperty(Zp,"codes",{value:_,enumerable:!1}),Zp.color.close="\x1B[39m",Zp.bgColor.close="\x1B[49m",Zp.color.ansi=Z_t(),Zp.color.ansi256=ept(),Zp.color.ansi16m=tpt(),Zp.bgColor.ansi=Z_t(10),Zp.bgColor.ansi256=ept(10),Zp.bgColor.ansi16m=tpt(10),Object.defineProperties(Zp,{rgbToAnsi256:{value(c,f,g){return c===f&&f===g?c<8?16:c>248?231:Math.round((c-8)/247*24)+232:16+36*Math.round(c/255*5)+6*Math.round(f/255*5)+Math.round(g/255*5)},enumerable:!1},hexToRgb:{value(c){let f=/[a-f\d]{6}|[a-f\d]{3}/i.exec(c.toString(16));if(!f)return[0,0,0];let[g]=f;g.length===3&&(g=[...g].map(w=>w+w).join(""));let S=Number.parseInt(g,16);return[S>>16&255,S>>8&255,S&255]},enumerable:!1},hexToAnsi256:{value:c=>Zp.rgbToAnsi256(...Zp.hexToRgb(c)),enumerable:!1},ansi256ToAnsi:{value(c){if(c<8)return 30+c;if(c<16)return 90+(c-8);let f,g,S;if(c>=232)f=((c-232)*10+8)/255,g=f,S=f;else{c-=16;let ne=c%36;f=Math.floor(c/36)/5,g=Math.floor(ne/6)/5,S=ne%6/5}let w=Math.max(f,g,S)*2;if(w===0)return 30;let q=30+(Math.round(S)<<2|Math.round(g)<<1|Math.round(f));return w===2&&(q+=60),q},enumerable:!1},rgbToAnsi:{value:(c,f,g)=>Zp.ansi256ToAnsi(Zp.rgbToAnsi256(c,f,g)),enumerable:!1},hexToAnsi:{value:c=>Zp.ansi256ToAnsi(Zp.hexToAnsi256(c)),enumerable:!1}}),Zp}var Nlr=Plr(),lE=Nlr;var Roe=wy(require("node:process"),1),npt=wy(require("node:os"),1),e6e=wy(require("node:tty"),1);function CC(_,c=globalThis.Deno?globalThis.Deno.args:Roe.default.argv){let f=_.startsWith("-")?"":_.length===1?"-":"--",g=c.indexOf(f+_),S=c.indexOf("--");return g!==-1&&(S===-1||g<S)}var{env:ed}=Roe.default,Loe;CC("no-color")||CC("no-colors")||CC("color=false")||CC("color=never")?Loe=0:(CC("color")||CC("colors")||CC("color=true")||CC("color=always"))&&(Loe=1);function Olr(){if("FORCE_COLOR"in ed)return ed.FORCE_COLOR==="true"?1:ed.FORCE_COLOR==="false"?0:ed.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(ed.FORCE_COLOR,10),3)}function Llr(_){return _===0?!1:{level:_,hasBasic:!0,has256:_>=2,has16m:_>=3}}function Rlr(_,{streamIsTTY:c,sniffFlags:f=!0}={}){let g=Olr();g!==void 0&&(Loe=g);let S=f?Loe:g;if(S===0)return 0;if(f){if(CC("color=16m")||CC("color=full")||CC("color=truecolor"))return 3;if(CC("color=256"))return 2}if("TF_BUILD"in ed&&"AGENT_NAME"in ed)return 1;if(_&&!c&&S===void 0)return 0;let w=S||0;if(ed.TERM==="dumb")return w;if(Roe.default.platform==="win32"){let q=npt.default.release().split(".");return Number(q[0])>=10&&Number(q[2])>=10586?Number(q[2])>=14931?3:2:1}if("CI"in ed)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(q=>q in ed)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(q=>q in ed)||ed.CI_NAME==="codeship"?1:w;if("TEAMCITY_VERSION"in ed)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ed.TEAMCITY_VERSION)?1:0;if(ed.COLORTERM==="truecolor"||ed.TERM==="xterm-kitty"||ed.TERM==="xterm-ghostty"||ed.TERM==="wezterm")return 3;if("TERM_PROGRAM"in ed){let q=Number.parseInt((ed.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ed.TERM_PROGRAM){case"iTerm.app":return q>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ed.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ed.TERM)||"COLORTERM"in ed?1:w}function rpt(_,c={}){let f=Rlr(_,{streamIsTTY:_&&_.isTTY,...c});return Llr(f)}var Mlr={stdout:rpt({isTTY:e6e.default.isatty(1)}),stderr:rpt({isTTY:e6e.default.isatty(2)})},ipt=Mlr;function spt(_,c,f){let g=_.indexOf(c);if(g===-1)return _;let S=c.length,w=0,q="";do q+=_.slice(w,g)+c+f,w=g+S,g=_.indexOf(c,w);while(g!==-1);return q+=_.slice(w),q}function apt(_,c,f,g){let S=0,w="";do{let q=_[g-1]==="\r";w+=_.slice(S,q?g-1:g)+c+(q?`\r
|
|
978
978
|
`:`
|
|
979
979
|
`)+f,S=g+1,g=_.indexOf(`
|
|
980
980
|
`,S)}while(g!==-1);return w+=_.slice(S),w}var{stdout:opt,stderr:cpt}=ipt,t6e=Symbol("GENERATOR"),QR=Symbol("STYLER"),_G=Symbol("IS_EMPTY"),upt=["ansi","ansi","ansi256","ansi16m"],XR=Object.create(null),Blr=(_,c={})=>{if(c.level&&!(Number.isInteger(c.level)&&c.level>=0&&c.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let f=opt?opt.level:0;_.level=c.level===void 0?f:c.level};var jlr=_=>{let c=(...f)=>f.join(" ");return Blr(c,_),Object.setPrototypeOf(c,pG.prototype),c};function pG(_){return jlr(_)}Object.setPrototypeOf(pG.prototype,Function.prototype);for(let[_,c]of Object.entries(lE))XR[_]={get(){let f=Moe(this,n6e(c.open,c.close,this[QR]),this[_G]);return Object.defineProperty(this,_,{value:f}),f}};XR.visible={get(){let _=Moe(this,this[QR],!0);return Object.defineProperty(this,"visible",{value:_}),_}};var r6e=(_,c,f,...g)=>_==="rgb"?c==="ansi16m"?lE[f].ansi16m(...g):c==="ansi256"?lE[f].ansi256(lE.rgbToAnsi256(...g)):lE[f].ansi(lE.rgbToAnsi(...g)):_==="hex"?r6e("rgb",c,f,...lE.hexToRgb(...g)):lE[f][_](...g),Jlr=["rgb","hex","ansi256"];for(let _ of Jlr){XR[_]={get(){let{level:f}=this;return function(...g){let S=n6e(r6e(_,upt[f],"color",...g),lE.color.close,this[QR]);return Moe(this,S,this[_G])}}};let c="bg"+_[0].toUpperCase()+_.slice(1);XR[c]={get(){let{level:f}=this;return function(...g){let S=n6e(r6e(_,upt[f],"bgColor",...g),lE.bgColor.close,this[QR]);return Moe(this,S,this[_G])}}}}var qlr=Object.defineProperties(()=>{},{...XR,level:{enumerable:!0,get(){return this[t6e].level},set(_){this[t6e].level=_}}}),n6e=(_,c,f)=>{let g,S;return f===void 0?(g=_,S=c):(g=f.openAll+_,S=c+f.closeAll),{open:_,close:c,openAll:g,closeAll:S,parent:f}},Moe=(_,c,f)=>{let g=(...S)=>zlr(g,S.length===1?""+S[0]:S.join(" "));return Object.setPrototypeOf(g,qlr),g[t6e]=_,g[QR]=c,g[_G]=f,g},zlr=(_,c)=>{if(_.level<=0||!c)return _[_G]?"":c;let f=_[QR];if(f===void 0)return c;let{openAll:g,closeAll:S}=f;if(c.includes("\x1B"))for(;f!==void 0;)c=spt(c,f.close,f.open),f=f.parent;let w=c.indexOf(`
|
|
@@ -1,6 +1,45 @@
|
|
|
1
|
-
import type { QualityHexagonMetrics,
|
|
1
|
+
import type { QualityHexagonMetrics, GitMetadata } from '@principal-ai/codebase-quality-lenses';
|
|
2
2
|
import type { ToolExecutionResponse } from '../service/QualityLensService';
|
|
3
|
-
export type { QualityHexagonMetrics,
|
|
3
|
+
export type { QualityHexagonMetrics, GitMetadata };
|
|
4
|
+
export interface PackageQualityMetrics {
|
|
5
|
+
name: string;
|
|
6
|
+
path?: string;
|
|
7
|
+
hexagon: QualityHexagonMetrics;
|
|
8
|
+
}
|
|
9
|
+
export interface FormattedResults {
|
|
10
|
+
metadata: {
|
|
11
|
+
timestamp: string;
|
|
12
|
+
version: string;
|
|
13
|
+
totalPackages: number;
|
|
14
|
+
totalLenses: number;
|
|
15
|
+
git?: GitMetadata;
|
|
16
|
+
};
|
|
17
|
+
results: Array<{
|
|
18
|
+
package: {
|
|
19
|
+
name: string;
|
|
20
|
+
path?: string;
|
|
21
|
+
};
|
|
22
|
+
lens: {
|
|
23
|
+
id: string;
|
|
24
|
+
command: string;
|
|
25
|
+
};
|
|
26
|
+
execution: {
|
|
27
|
+
success: boolean;
|
|
28
|
+
exitCode?: number;
|
|
29
|
+
duration?: number;
|
|
30
|
+
timestamp: number;
|
|
31
|
+
};
|
|
32
|
+
issues: unknown[];
|
|
33
|
+
metrics: Record<string, unknown>;
|
|
34
|
+
coverage?: unknown;
|
|
35
|
+
fileMetrics?: unknown[];
|
|
36
|
+
qualityContext: Record<string, unknown>;
|
|
37
|
+
error?: string;
|
|
38
|
+
}>;
|
|
39
|
+
qualityMetrics?: {
|
|
40
|
+
packages: PackageQualityMetrics[];
|
|
41
|
+
};
|
|
42
|
+
}
|
|
4
43
|
export interface LensExecutionResult {
|
|
5
44
|
package: string;
|
|
6
45
|
packagePath?: string;
|
|
@@ -15,6 +54,7 @@ export declare class JsonFormatter {
|
|
|
15
54
|
private extractQualityScore;
|
|
16
55
|
private calculateHexagonMetrics;
|
|
17
56
|
private getGitMetadata;
|
|
57
|
+
private calculatePerPackageMetrics;
|
|
18
58
|
format(results: LensExecutionResult[]): string;
|
|
19
59
|
}
|
|
20
60
|
//# sourceMappingURL=JsonFormatter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonFormatter.d.ts","sourceRoot":"","sources":["../../src/output/JsonFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"JsonFormatter.d.ts","sourceRoot":"","sources":["../../src/output/JsonFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAG3E,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,CAAC;AAKnD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAKD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,GAAG,CAAC,EAAE,WAAW,CAAC;KACnB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,IAAI,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QACtC,SAAS,EAAE;YACT,OAAO,EAAE,OAAO,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,cAAc,CAAC,EAAE;QACf,QAAQ,EAAE,qBAAqB,EAAE,CAAC;KACnC,CAAC;CACH;AAKD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,qBAAa,aAAa;IAIxB,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,mBAAmB;IAoD3B,OAAO,CAAC,uBAAuB;IA0C/B,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,0BAA0B;IAgClC,MAAM,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,MAAM;CA+C/C"}
|