best-review 0.5.5 → 0.5.6
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/best-review.cjs +6 -6
- package/package.json +1 -1
package/dist/best-review.cjs
CHANGED
|
@@ -190,7 +190,7 @@ ${s.comment}`:s.comment}this.doc.range[2]=s.offset;break}default:this.errors.pus
|
|
|
190
190
|
`,s)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(t){let s=t.items[t.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,s.value){let i="end"in s.value?s.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):t.items.push({start:[this.sourceToken]})}else s.sep?s.sep.push(this.sourceToken):s.start.push(this.sourceToken);return;case"space":case"comment":if(s.value)t.items.push({start:[this.sourceToken]});else if(s.sep)s.sep.push(this.sourceToken);else{if(this.atIndentedComment(s.start,t.indent)){let r=t.items[t.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,s.start),r.push(this.sourceToken),t.items.pop();return}}s.start.push(this.sourceToken)}return}if(this.indent>=t.indent){let i=!this.onKeyLine&&this.indent===t.indent,r=i&&(s.sep||s.explicitKey)&&this.type!=="seq-item-ind",n=[];if(r&&s.sep&&!s.value){let o=[];for(let a=0;a<s.sep.length;++a){let u=s.sep[a];switch(u.type){case"newline":o.push(a);break;case"space":break;case"comment":u.indent>t.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(n=s.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":r||s.value?(n.push(this.sourceToken),t.items.push({start:n}),this.onKeyLine=!0):s.sep?s.sep.push(this.sourceToken):s.start.push(this.sourceToken);return;case"explicit-key-ind":!s.sep&&!s.explicitKey?(s.start.push(this.sourceToken),s.explicitKey=!0):r||s.value?(n.push(this.sourceToken),t.items.push({start:n,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(s.explicitKey)if(s.sep)if(s.value)t.items.push({start:[],key:null,sep:[this.sourceToken]});else if(us(s.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]});else if(Bg(s.key)&&!us(s.sep,"newline")){let o=Ei(s.start),a=s.key,u=s.sep;u.push(this.sourceToken),delete s.key,delete s.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:u}]})}else n.length>0?s.sep=s.sep.concat(n,this.sourceToken):s.sep.push(this.sourceToken);else if(us(s.start,"newline"))Object.assign(s,{key:null,sep:[this.sourceToken]});else{let o=Ei(s.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else s.sep?s.value||r?t.items.push({start:n,key:null,sep:[this.sourceToken]}):us(s.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):s.sep.push(this.sourceToken):Object.assign(s,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let o=this.flowScalar(this.type);r||s.value?(t.items.push({start:n,key:o,sep:[]}),this.onKeyLine=!0):s.sep?this.stack.push(o):(Object.assign(s,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{let o=this.startBlockValue(t);if(o){if(o.type==="block-seq"){if(!s.explicitKey&&s.sep&&!us(s.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else i&&t.items.push({start:n});this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(t){let s=t.items[t.items.length-1];switch(this.type){case"newline":if(s.value){let i="end"in s.value?s.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):t.items.push({start:[this.sourceToken]})}else s.start.push(this.sourceToken);return;case"space":case"comment":if(s.value)t.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(s.start,t.indent)){let r=t.items[t.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,s.start),r.push(this.sourceToken),t.items.pop();return}}s.start.push(this.sourceToken)}return;case"anchor":case"tag":if(s.value||this.indent<=t.indent)break;s.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==t.indent)break;s.value||us(s.start,"seq-item-ind")?t.items.push({start:[this.sourceToken]}):s.start.push(this.sourceToken);return}if(this.indent>t.indent){let i=this.startBlockValue(t);if(i){this.stack.push(i);return}}yield*this.pop(),yield*this.step()}*flowCollection(t){let s=t.items[t.items.length-1];if(this.type==="flow-error-end"){let i;do yield*this.pop(),i=this.peek(1);while(i?.type==="flow-collection")}else if(t.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!s||s.sep?t.items.push({start:[this.sourceToken]}):s.start.push(this.sourceToken);return;case"map-value-ind":!s||s.value?t.items.push({start:[],key:null,sep:[this.sourceToken]}):s.sep?s.sep.push(this.sourceToken):Object.assign(s,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!s||s.value?t.items.push({start:[this.sourceToken]}):s.sep?s.sep.push(this.sourceToken):s.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let r=this.flowScalar(this.type);!s||s.value?t.items.push({start:[],key:r,sep:[]}):s.sep?this.stack.push(r):Object.assign(s,{key:r,sep:[]});return}case"flow-map-end":case"flow-seq-end":t.end.push(this.sourceToken);return}let i=this.startBlockValue(t);i?this.stack.push(i):(yield*this.pop(),yield*this.step())}else{let i=this.peek(2);if(i.type==="block-map"&&(this.type==="map-value-ind"&&i.indent===t.indent||this.type==="newline"&&!i.items[i.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&i.type!=="flow-collection"){let r=zo(i),n=Ei(r);Pg(t);let o=t.end.splice(1,t.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:t.offset,indent:t.indent,items:[{start:n,key:t,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(t)}}flowScalar(t){if(this.onNewLine){let s=this.source.indexOf(`
|
|
191
191
|
`)+1;for(;s!==0;)this.onNewLine(this.offset+s),s=this.source.indexOf(`
|
|
192
192
|
`,s)+1}return{type:t,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(t){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let s=zo(t),i=Ei(s);return i.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let s=zo(t),i=Ei(s);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(t,s){return this.type!=="comment"||this.indent<=s?!1:t.every(i=>i.type==="newline"||i.type==="space")}*documentEnd(t){this.type!=="doc-mode"&&(t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(t){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};Og.Parser=Ac});var qg=I(Jr=>{"use strict";var Lg=pc(),k1=jr(),Hr=Vr(),I1=dl(),_1=K(),$1=Sc(),Ng=Rc();function Mg(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new $1.LineCounter||null,prettyErrors:t}}function T1(e,t={}){let{lineCounter:s,prettyErrors:i}=Mg(t),r=new Ng.Parser(s?.addNewLine),n=new Lg.Composer(t),o=Array.from(n.compose(r.parse(e)));if(i&&s)for(let a of o)a.errors.forEach(Hr.prettifyError(e,s)),a.warnings.forEach(Hr.prettifyError(e,s));return o.length>0?o:Object.assign([],{empty:!0},n.streamInfo())}function jg(e,t={}){let{lineCounter:s,prettyErrors:i}=Mg(t),r=new Ng.Parser(s?.addNewLine),n=new Lg.Composer(t),o=null;for(let a of n.compose(r.parse(e),!0,e.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Hr.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return i&&s&&(o.errors.forEach(Hr.prettifyError(e,s)),o.warnings.forEach(Hr.prettifyError(e,s))),o}function P1(e,t,s){let i;typeof t=="function"?i=t:s===void 0&&t&&typeof t=="object"&&(s=t);let r=jg(e,s);if(!r)return null;if(r.warnings.forEach(n=>I1.warn(r.options.logLevel,n)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:i},s))}function B1(e,t,s){let i=null;if(typeof t=="function"||Array.isArray(t)?i=t:s===void 0&&t&&(s=t),typeof s=="string"&&(s=s.length),typeof s=="number"){let r=Math.round(s);s=r<1?void 0:r>8?{indent:8}:{indent:r}}if(e===void 0){let{keepUndefined:r}=s??t??{};if(!r)return}return _1.isDocument(e)&&!i?e.toString(s):new k1.Document(e,i,s).toString(s)}Jr.parse=P1;Jr.parseAllDocuments=T1;Jr.parseDocument=jg;Jr.stringify=B1});var Ic=I(J=>{"use strict";var O1=pc(),L1=jr(),N1=Hl(),kc=Vr(),M1=Fr(),ls=K(),j1=rs(),q1=fe(),U1=os(),V1=as(),G1=Wo(),W1=Cc(),K1=Sc(),z1=Rc(),Ho=qg(),Ug=wr();J.Composer=O1.Composer;J.Document=L1.Document;J.Schema=N1.Schema;J.YAMLError=kc.YAMLError;J.YAMLParseError=kc.YAMLParseError;J.YAMLWarning=kc.YAMLWarning;J.Alias=M1.Alias;J.isAlias=ls.isAlias;J.isCollection=ls.isCollection;J.isDocument=ls.isDocument;J.isMap=ls.isMap;J.isNode=ls.isNode;J.isPair=ls.isPair;J.isScalar=ls.isScalar;J.isSeq=ls.isSeq;J.Pair=j1.Pair;J.Scalar=q1.Scalar;J.YAMLMap=U1.YAMLMap;J.YAMLSeq=V1.YAMLSeq;J.CST=G1;J.Lexer=W1.Lexer;J.LineCounter=K1.LineCounter;J.Parser=z1.Parser;J.parse=Ho.parse;J.parseAllDocuments=Ho.parseAllDocuments;J.parseDocument=Ho.parseDocument;J.stringify=Ho.stringify;J.visit=Ug.visit;J.visitAsync=Ug.visitAsync});function H1(){if(typeof __dirname<"u")return __dirname;let e=process.argv[1];return e?(0,dt.dirname)((0,dt.resolve)(e)):process.cwd()}function $c(){if(Jo)return Jo;let e=(0,dt.join)(_c,"defaults");return Jo=[e,(0,dt.join)(_c,"..","src","defaults"),(0,dt.join)(_c,"..","dist","defaults"),(0,dt.join)(process.cwd(),"src","defaults"),(0,dt.join)(process.cwd(),"dist","defaults")].find(s=>(0,Vg.existsSync)(s))??e,Jo}function Yo(...e){return(0,dt.join)($c(),...e)}var Vg,dt,_c,Jo,Zo=re(()=>{"use strict";Vg=require("node:fs"),dt=require("node:path");_c=H1()});function Xo(e){if(!e||typeof e!="string")return null;let t=e.lastIndexOf("#"),s,i;if(t!==-1){if(s=e.slice(0,t),i=e.slice(t+1),!i||i.includes("..")||i.includes("\0"))return null}else s=e;return X1(s)?{url:s,ref:i}:null}function X1(e){return J1.test(e)||Y1.test(e)||Z1.test(e)}function Tc(e){let t=e.url;return t=t.replace(/^https?:\/\//,""),t=t.replace(/^git@/,""),t=t.replace(/^ssh:\/\//,""),t=t.replace(/\.git$/,""),t=t.replace(/[/:@]/g,"--"),e.ref&&(t=`${t}@${e.ref}`),t}function Qo(e){let t=e.url;return t.startsWith("git@")?t=t.replace(/^git@[^:]+:/,""):t=t.replace(/^https?:\/\/[^/]+\//,""),t=t.replace(/\.git$/,""),t}var J1,Y1,Z1,Pc=re(()=>{"use strict";J1=/^https?:\/\/.+/,Y1=/^git@.+:.+/,Z1=/^ssh:\/\/.+/});function Yr(){return(0,ea.join)((0,Bc.homedir)(),".best-review","extends")}function Zr(){return(0,ea.join)((0,Bc.homedir)(),".best-review","extends.lock.json")}function Gg(e){return(0,ea.join)(Yr(),Tc(e))}function Oc(e,t){return{ref:e,refString:t,localPath:Gg(e)}}var Bc,ea,ta=re(()=>{"use strict";Bc=require("node:os"),ea=require("node:path");Pc()});function tA(){return Zr()+".lock"}async function sA(){let e=tA(),t=Date.now();for(;;)try{return await(0,Te.mkdir)(e),async()=>{try{await(0,Te.rm)(e,{recursive:!0,force:!0})}catch{}}}catch(s){if(s.code==="EEXIST"){if(Date.now()-t>Q1){await(0,Te.rm)(e,{recursive:!0,force:!0});continue}await new Promise(i=>setTimeout(i,eA));continue}throw s}}async function Kg(e){let t=await sA();try{return await e()}finally{await t()}}function iA(){return{version:1,updated:new Date().toISOString(),packages:{}}}async function Bt(){let e=Zr();try{await(0,Te.access)(e);let t=await(0,Te.readFile)(e,"utf-8"),s=JSON.parse(t);if(s.version!==1)throw new Error(`Unsupported lock file version: ${s.version}`);return s}catch(t){if(t.code==="ENOENT")return iA();throw t}}async function zg(e){let t=Zr();await(0,Te.mkdir)((0,Wg.dirname)(t),{recursive:!0}),e.updated=new Date().toISOString();let s=t+".tmp."+process.pid;await(0,Te.writeFile)(s,JSON.stringify(e,null,2),"utf-8"),await(0,Te.rename)(s,t)}async function Hg(e){return(await Bt()).packages[e]||null}async function Lc(e,t){await Kg(async()=>{let s=await Bt();s.packages[e]=t,await zg(s)})}async function Nc(e){await Kg(async()=>{let t=await Bt();delete t.packages[e],await zg(t)})}async function sa(e){let t=await Hg(e);if(!t)return!1;try{return await(0,Te.access)(t.path),!0}catch{return!1}}var Te,Wg,Q1,eA,Mc=re(()=>{"use strict";Te=require("node:fs/promises"),Wg=require("node:path");ta();Q1=1e4,eA=100});function ia(e){let t=(0,Ze.resolve)(Yr()),s=(0,Ze.resolve)(e),i=(0,Ze.relative)(t,s);if(i.startsWith("..")||(0,Ze.resolve)(t,i)!==s)throw new Error("Invalid extend path: path traversal detected");let r=i.split(/[/\\]/);for(let n of r)if(n==="."||n===".."||n.includes("\0"))throw new Error("Invalid extend path: suspicious path component")}async function jc(e){let{ref:t,localPath:s}=e;ia(s),await(0,cs.mkdir)(Yr(),{recursive:!0}),await(0,cs.rm)(s,{recursive:!0,force:!0});let i=["clone","--depth","1"];t.ref&&i.push("--branch",t.ref),i.push(t.url,s);try{await Jg("git",i,{timeout:6e4})}catch(n){let o=n instanceof Error?n.message:String(n);throw o.includes("not found")||o.includes("does not exist")?new Error(`Repository or ref not found: ${t.url}${t.ref?`#${t.ref}`:""}`):o.includes("Authentication failed")||o.includes("Permission denied")?new Error(`Authentication failed for: ${t.url}`):new Error(`Git clone failed: ${o}`)}let{stdout:r}=await Jg("git",["rev-parse","HEAD"],{cwd:s});return await(0,cs.rm)((0,Ze.join)(s,".git"),{recursive:!0,force:!0}),r.trim()}async function qc(e){let t={agents:[],rules:[]},s=(0,Ze.join)(e,"agents");try{let r=await Je("*.md",{cwd:s});for(let n of r){let o=await Yg((0,Ze.join)(s,n));o&&t.agents.push(o)}}catch{}let i=(0,Ze.join)(e,"rules");try{let r=await Je("**/*.md",{cwd:i});for(let n of r){let o=await Yg((0,Ze.join)(i,n));o&&t.rules.push(o)}}catch{}return t}async function Yg(e){try{let t=await(0,cs.readFile)(e,"utf-8");if(!t.startsWith("---"))return null;let s=t.indexOf("---",3);if(s===-1)return null;let r=t.slice(3,s).match(/^name:\s*(.+)$/m);return r&&r[1]?r[1].trim().replace(/^["']|["']$/g,""):null}catch{return null}}async function Uc(e){ia(e),await(0,cs.rm)(e,{recursive:!0,force:!0})}var cs,Ze,Zg,Xg,Jg,Vc=re(()=>{"use strict";cs=require("node:fs/promises"),Ze=require("node:path"),Zg=require("node:child_process"),Xg=require("node:util");ta();yr();Jg=(0,Xg.promisify)(Zg.execFile)});var Gc={};er(Gc,{getInstalledExtendPaths:()=>Xr,loadAgentsFromExtends:()=>Qg,loadFromExtends:()=>tD,scanRuleRefsFromExtends:()=>eD});async function Xr(e){let t=await Bt(),s=[];for(let i of e){let r=t.packages[i];r?(ia(r.path),s.push(r.path)):h.warn(`Extension not installed: ${i}. Run 'best-review extends install'`)}return s}async function Qg(e){let t=await Xr(e),s=[];for(let i of t){let r=(0,ra.join)(i,"agents");try{let n=await Qr(r);s.push(...n.map(o=>({...o,source:"extends"})))}catch{}}return s}async function eD(e){let t=await Xr(e),s=[];for(let i of t){let r=(0,ra.join)(i,"rules");try{let n=await fs(r,"extends");s.push(...n)}catch{}}return s}async function tD(e,t,s){let i=await Xr(s),r=[];for(let n of i){let o=(0,ra.join)(n,e);try{let a=await t(o);r.push(a)}catch{r.push([])}}return r}var ra,na=re(()=>{"use strict";ra=require("node:path");Wc();Fi();Mc();Vc();M()});function Ps(e){if(!e||e.trim()==="")return{frontmatter:{},body:""};if(!e.startsWith("---"))return{frontmatter:{},body:e};let t=e.indexOf("---",3);if(t===-1)throw new Error("Invalid frontmatter: missing closing delimiter ---");let s=e.slice(3,t).trim(),i=e.slice(t+3).trim();if(!s)return{frontmatter:{},body:i};let r;try{r=iD.default.parse(s)}catch(n){throw new Error(`Invalid YAML in frontmatter: ${n instanceof Error?n.message:String(n)}`)}return{frontmatter:r,body:i}}function oa(e,t){try{let{frontmatter:s,body:i}=Ps(e),r=t(s,i);return r?[r]:[]}catch(s){return h.error("Failed to parse markdown:",s),[]}}async function en(e,t){try{let s=await(0,Kc.readFile)(e,"utf-8");return t?oa(s,t):Ps(s)}catch(s){throw s instanceof Error?new Error(`Failed to load markdown file "${e}": ${s.message}`):new Error(`Failed to load markdown file "${e}": Unknown error`)}}async function rD(e,t,s){try{let i=await Je("**/*.md",{cwd:e});if(i.length===0)return[];let r=[];for(let o of i){let a=(0,Ts.join)(e,o);try{let u=await en(a,t);r.push(...u)}catch(u){h.error(`Error processing file ${o}:`,u)}}let n=s?s(r):r;return h.info(`Loaded ${n.length} items from ${i.length} files in ${e} (recursive)`),n}catch{return[]}}function nD(...e){let t=new Map;for(let s of e)for(let i of s)t.set(i.name,i);return Array.from(t.values())}function aa(e,t){return{defaults:(0,Ts.join)($c(),e),user:(0,Ts.join)((0,sD.homedir)(),".best-review",e),project:(0,Ts.join)(t,".best-review",e)}}async function oD(e,t,s){let i=aa(e,s),[r,n,o]=await Promise.all([t(i.defaults),t(i.user),t(i.project)]);return nD(r,n,o)}async function fs(e,t){try{let s=await Je("**/*.md",{cwd:e}),i=await Promise.all(s.map(async n=>{let o=(0,Ts.join)(e,n);try{let a=await(0,Kc.readFile)(o,"utf-8");return{filePath:o,content:a}}catch{return null}})),r=[];for(let n of i)if(n)try{let{frontmatter:o}=Ps(n.content),a=o.name,u=o.description,l=o.agent,c=o.patterns,f=o.version;typeof a=="string"&&typeof l=="string"&&Array.isArray(c)&&c.length>0&&r.push({name:a,description:typeof u=="string"?u:"",path:n.filePath,patterns:c.filter(d=>typeof d=="string"),agent:l,source:t,...typeof f=="string"||typeof f=="number"?{version:String(f)}:{}})}catch{}return r}catch{return[]}}async function aD(e){let t=aa("rules",e),[s,i,r]=await Promise.all([fs(t.defaults,"defaults"),fs(t.user,"user"),fs(t.project,"project")]),n=new Map;for(let o of[...s,...i,...r])n.set(o.name,o);return Array.from(n.values())}async function uD(e,t,s,i){let r=aa(e,s),{loadFromExtends:n}=await Promise.resolve().then(()=>(na(),Gc)),[o,a,u,l]=await Promise.all([t(r.defaults),n(e,t,i),t(r.user),t(r.project)]);return nD(o,...a,u,l)}async function lD(e,t){let s=aa("rules",e),{scanRuleRefsFromExtends:i}=await Promise.resolve().then(()=>(na(),Gc)),[r,n,o,a]=await Promise.all([fs(s.defaults,"defaults"),i(t),fs(s.user,"user"),fs(s.project,"project")]),u=new Map;for(let l of[...r,...n,...o,...a])u.set(l.name,l);return Array.from(u.values())}var Kc,Ts,sD,iD,Fi=re(()=>{"use strict";M();yr();Kc=require("node:fs/promises"),Ts=require("node:path"),sD=require("node:os"),iD=gt(Ic(),1);Zo()});function rA(e,t){let s=e.name;if(typeof s!="string")return null;let i=t.trim();if(!i)return null;let r=e.executorSettings&&typeof e.executorSettings=="object"&&!Array.isArray(e.executorSettings)?e.executorSettings:void 0,n=e.stage==="validation"?"validation":"review",o=typeof e.version=="string"||typeof e.version=="number"?String(e.version):void 0;return{name:s,description:typeof e.description=="string"?e.description:"",systemPrompt:i,enabled:typeof e.enabled=="boolean"?e.enabled:!0,order:typeof e.order=="number"?e.order:0,...o&&{version:o},...typeof e.executor=="string"&&{executor:e.executor},stage:n,...r&&{executorSettings:r}}}async function Qr(e){let{glob:t}=await Promise.resolve().then(()=>(yr(),tp)),{join:s}=await import("node:path");try{let i=await t("*.md",{cwd:e}),r=[],n=[],o=await Promise.all(i.map(async a=>{let u=s(e,a);try{return{agents:(await en(u,rA)).map(c=>({...c,path:u})),failed:null}}catch(l){return h.error(`Error loading agent from ${a}:`,l),{agents:[],failed:a}}}));return r.push(...o.flatMap(a=>a.agents)),n.push(...o.map(a=>a.failed).filter(a=>a!==null)),n.length>0&&h.warn(`Loaded ${r.length}/${i.length} agents, ${n.length} failed: ${n.join(", ")}`),r}catch(i){if(i.code==="ENOENT")return[];throw i}}var Wc=re(()=>{"use strict";Fi();M()});var G,zc,_,Ft,tn=re(()=>{(function(e){e.assertEqual=r=>{};function t(r){}e.assertIs=t;function s(r){throw new Error}e.assertNever=s,e.arrayToEnum=r=>{let n={};for(let o of r)n[o]=o;return n},e.getValidEnumValues=r=>{let n=e.objectKeys(r).filter(a=>typeof r[r[a]]!="number"),o={};for(let a of n)o[a]=r[a];return e.objectValues(o)},e.objectValues=r=>e.objectKeys(r).map(function(n){return r[n]}),e.objectKeys=typeof Object.keys=="function"?r=>Object.keys(r):r=>{let n=[];for(let o in r)Object.prototype.hasOwnProperty.call(r,o)&&n.push(o);return n},e.find=(r,n)=>{for(let o of r)if(n(o))return o},e.isInteger=typeof Number.isInteger=="function"?r=>Number.isInteger(r):r=>typeof r=="number"&&Number.isFinite(r)&&Math.floor(r)===r;function i(r,n=" | "){return r.map(o=>typeof o=="string"?`'${o}'`:o).join(n)}e.joinValues=i,e.jsonStringifyReplacer=(r,n)=>typeof n=="bigint"?n.toString():n})(G||(G={}));(function(e){e.mergeShapes=(t,s)=>({...t,...s})})(zc||(zc={}));_=G.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Ft=e=>{switch(typeof e){case"undefined":return _.undefined;case"string":return _.string;case"number":return Number.isNaN(e)?_.nan:_.number;case"boolean":return _.boolean;case"function":return _.function;case"bigint":return _.bigint;case"symbol":return _.symbol;case"object":return Array.isArray(e)?_.array:e===null?_.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?_.promise:typeof Map<"u"&&e instanceof Map?_.map:typeof Set<"u"&&e instanceof Set?_.set:typeof Date<"u"&&e instanceof Date?_.date:_.object;default:return _.unknown}}});var C,nA,we,ua=re(()=>{tn();C=G.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),nA=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:"),we=class e extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=i=>{this.issues=[...this.issues,i]},this.addIssues=(i=[])=>{this.issues=[...this.issues,...i]};let s=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,s):this.__proto__=s,this.name="ZodError",this.issues=t}format(t){let s=t||function(n){return n.message},i={_errors:[]},r=n=>{for(let o of n.issues)if(o.code==="invalid_union")o.unionErrors.map(r);else if(o.code==="invalid_return_type")r(o.returnTypeError);else if(o.code==="invalid_arguments")r(o.argumentsError);else if(o.path.length===0)i._errors.push(s(o));else{let a=i,u=0;for(;u<o.path.length;){let l=o.path[u];u===o.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(s(o))):a[l]=a[l]||{_errors:[]},a=a[l],u++}}};return r(this),i}static assert(t){if(!(t instanceof e))throw new Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,G.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=s=>s.message){let s={},i=[];for(let r of this.issues)if(r.path.length>0){let n=r.path[0];s[n]=s[n]||[],s[n].push(t(r))}else i.push(t(r));return{formErrors:i,fieldErrors:s}}get formErrors(){return this.flatten()}};we.create=e=>new we(e)});var oA,Ot,Hc=re(()=>{ua();tn();oA=(e,t)=>{let s;switch(e.code){case C.invalid_type:e.received===_.undefined?s="Required":s=`Expected ${e.expected}, received ${e.received}`;break;case C.invalid_literal:s=`Invalid literal value, expected ${JSON.stringify(e.expected,G.jsonStringifyReplacer)}`;break;case C.unrecognized_keys:s=`Unrecognized key(s) in object: ${G.joinValues(e.keys,", ")}`;break;case C.invalid_union:s="Invalid input";break;case C.invalid_union_discriminator:s=`Invalid discriminator value. Expected ${G.joinValues(e.options)}`;break;case C.invalid_enum_value:s=`Invalid enum value. Expected ${G.joinValues(e.options)}, received '${e.received}'`;break;case C.invalid_arguments:s="Invalid function arguments";break;case C.invalid_return_type:s="Invalid function return type";break;case C.invalid_date:s="Invalid date";break;case C.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(s=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(s=`${s} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?s=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?s=`Invalid input: must end with "${e.validation.endsWith}"`:G.assertNever(e.validation):e.validation!=="regex"?s=`Invalid ${e.validation}`:s="Invalid";break;case C.too_small:e.type==="array"?s=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?s=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?s=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?s=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?s=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:s="Invalid input";break;case C.too_big:e.type==="array"?s=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?s=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?s=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?s=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?s=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:s="Invalid input";break;case C.custom:s="Invalid input";break;case C.invalid_intersection_types:s="Intersection results could not be merged";break;case C.not_multiple_of:s=`Number must be a multiple of ${e.multipleOf}`;break;case C.not_finite:s="Number must be finite";break;default:s=t.defaultError,G.assertNever(e)}return{message:s}},Ot=oA});function aA(e){cD=e}function Ci(){return cD}var cD,la=re(()=>{Hc();cD=Ot});function k(e,t){let s=Ci(),i=sn({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,s,s===Ot?void 0:Ot].filter(r=>!!r)});e.common.issues.push(i)}var sn,uA,Ce,O,Bs,ke,ca,fa,ds,xi,Jc=re(()=>{la();Hc();sn=e=>{let{data:t,path:s,errorMaps:i,issueData:r}=e,n=[...s,...r.path||[]],o={...r,path:n};if(r.message!==void 0)return{...r,path:n,message:r.message};let a="",u=i.filter(l=>!!l).slice().reverse();for(let l of u)a=l(o,{data:t,defaultError:a}).message;return{...r,path:n,message:a}},uA=[];Ce=class e{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,s){let i=[];for(let r of s){if(r.status==="aborted")return O;r.status==="dirty"&&t.dirty(),i.push(r.value)}return{status:t.value,value:i}}static async mergeObjectAsync(t,s){let i=[];for(let r of s){let n=await r.key,o=await r.value;i.push({key:n,value:o})}return e.mergeObjectSync(t,i)}static mergeObjectSync(t,s){let i={};for(let r of s){let{key:n,value:o}=r;if(n.status==="aborted"||o.status==="aborted")return O;n.status==="dirty"&&t.dirty(),o.status==="dirty"&&t.dirty(),n.value!=="__proto__"&&(typeof o.value<"u"||r.alwaysSet)&&(i[n.value]=o.value)}return{status:t.value,value:i}}},O=Object.freeze({status:"aborted"}),Bs=e=>({status:"dirty",value:e}),ke=e=>({status:"valid",value:e}),ca=e=>e.status==="aborted",fa=e=>e.status==="dirty",ds=e=>e.status==="valid",xi=e=>typeof Promise<"u"&&e instanceof Promise});var fD=re(()=>{});var P,dD=re(()=>{(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t?.message})(P||(P={}))});function q(e){if(!e)return{};let{errorMap:t,invalid_type_error:s,required_error:i,description:r}=e;if(t&&(s||i))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:r}:{errorMap:(o,a)=>{let{message:u}=e;return o.code==="invalid_enum_value"?{message:u??a.defaultError}:typeof a.data>"u"?{message:u??i??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:u??s??a.defaultError}},description:r}}function gD(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);let s=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${s}`}function xA(e){return new RegExp(`^${gD(e)}$`)}function DD(e){let t=`${mD}T${gD(e)}`,s=[];return s.push(e.local?"Z?":"Z"),e.offset&&s.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${s.join("|")})`,new RegExp(`^${t}$`)}function SA(e,t){return!!((t==="v4"||!t)&&yA.test(e)||(t==="v6"||!t)&&bA.test(e))}function AA(e,t){if(!pA.test(e))return!1;try{let[s]=e.split(".");if(!s)return!1;let i=s.replace(/-/g,"+").replace(/_/g,"/").padEnd(s.length+(4-s.length%4)%4,"="),r=JSON.parse(atob(i));return!(typeof r!="object"||r===null||"typ"in r&&r?.typ!=="JWT"||!r.alg||t&&r.alg!==t)}catch{return!1}}function RA(e,t){return!!((t==="v4"||!t)&&wA.test(e)||(t==="v6"||!t)&&vA.test(e))}function kA(e,t){let s=(e.toString().split(".")[1]||"").length,i=(t.toString().split(".")[1]||"").length,r=s>i?s:i,n=Number.parseInt(e.toFixed(r).replace(".","")),o=Number.parseInt(t.toFixed(r).replace(".",""));return n%o/10**r}function Si(e){if(e instanceof Le){let t={};for(let s in e.shape){let i=e.shape[s];t[s]=Xe.create(Si(i))}return new Le({...e._def,shape:()=>t})}else return e instanceof Mt?new Mt({...e._def,type:Si(e.element)}):e instanceof Xe?Xe.create(Si(e.unwrap())):e instanceof xt?xt.create(Si(e.unwrap())):e instanceof Ct?Ct.create(e.items.map(t=>Si(t))):e}function Zc(e,t){let s=Ft(e),i=Ft(t);if(e===t)return{valid:!0,data:e};if(s===_.object&&i===_.object){let r=G.objectKeys(t),n=G.objectKeys(e).filter(a=>r.indexOf(a)!==-1),o={...e,...t};for(let a of n){let u=Zc(e[a],t[a]);if(!u.valid)return{valid:!1};o[a]=u.data}return{valid:!0,data:o}}else if(s===_.array&&i===_.array){if(e.length!==t.length)return{valid:!1};let r=[];for(let n=0;n<e.length;n++){let o=e[n],a=t[n],u=Zc(o,a);if(!u.valid)return{valid:!1};r.push(u.data)}return{valid:!0,data:r}}else return s===_.date&&i===_.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}function yD(e,t){return new Ks({values:e,typeName:L.ZodEnum,...q(t)})}function pD(e,t){let s=typeof e=="function"?e(t):typeof e=="string"?{message:e}:e;return typeof s=="string"?{message:s}:s}function wD(e,t={},s){return e?ps.create().superRefine((i,r)=>{let n=e(i);if(n instanceof Promise)return n.then(o=>{if(!o){let a=pD(t,i),u=a.fatal??s??!0;r.addIssue({code:"custom",...a,fatal:u})}});if(!n){let o=pD(t,i),a=o.fatal??s??!0;r.addIssue({code:"custom",...o,fatal:a})}}):ps.create()}var Qe,hD,V,lA,cA,fA,dA,hA,pA,mA,gA,DA,Yc,yA,wA,bA,vA,EA,FA,mD,CA,hs,Os,Ls,Ns,Ms,Ai,js,qs,ps,Nt,ht,Ri,Mt,Le,Us,Lt,da,Vs,Ct,ha,ki,Ii,pa,Gs,Ws,Ks,zs,ms,et,Xe,xt,Hs,Js,_i,IA,rn,nn,Ys,_A,L,$A,bD,vD,TA,PA,ED,BA,OA,LA,NA,MA,jA,qA,UA,VA,GA,WA,KA,zA,HA,JA,YA,ZA,XA,QA,eR,tR,sR,iR,rR,nR,oR,aR,uR,lR,cR,fR,dR,hR,pR,FD=re(()=>{ua();la();dD();Jc();tn();Qe=class{constructor(t,s,i,r){this._cachedPath=[],this.parent=t,this.data=s,this._path=i,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},hD=(e,t)=>{if(ds(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let s=new we(e.common.issues);return this._error=s,this._error}}};V=class{get description(){return this._def.description}_getType(t){return Ft(t.data)}_getOrReturnCtx(t,s){return s||{common:t.parent.common,data:t.data,parsedType:Ft(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Ce,ctx:{common:t.parent.common,data:t.data,parsedType:Ft(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){let s=this._parse(t);if(xi(s))throw new Error("Synchronous parse encountered promise.");return s}_parseAsync(t){let s=this._parse(t);return Promise.resolve(s)}parse(t,s){let i=this.safeParse(t,s);if(i.success)return i.data;throw i.error}safeParse(t,s){let i={common:{issues:[],async:s?.async??!1,contextualErrorMap:s?.errorMap},path:s?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Ft(t)},r=this._parseSync({data:t,path:i.path,parent:i});return hD(i,r)}"~validate"(t){let s={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Ft(t)};if(!this["~standard"].async)try{let i=this._parseSync({data:t,path:[],parent:s});return ds(i)?{value:i.value}:{issues:s.common.issues}}catch(i){i?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),s.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:s}).then(i=>ds(i)?{value:i.value}:{issues:s.common.issues})}async parseAsync(t,s){let i=await this.safeParseAsync(t,s);if(i.success)return i.data;throw i.error}async safeParseAsync(t,s){let i={common:{issues:[],contextualErrorMap:s?.errorMap,async:!0},path:s?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Ft(t)},r=this._parse({data:t,path:i.path,parent:i}),n=await(xi(r)?r:Promise.resolve(r));return hD(i,n)}refine(t,s){let i=r=>typeof s=="string"||typeof s>"u"?{message:s}:typeof s=="function"?s(r):s;return this._refinement((r,n)=>{let o=t(r),a=()=>n.addIssue({code:C.custom,...i(r)});return typeof Promise<"u"&&o instanceof Promise?o.then(u=>u?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(t,s){return this._refinement((i,r)=>t(i)?!0:(r.addIssue(typeof s=="function"?s(i,r):s),!1))}_refinement(t){return new et({schema:this,typeName:L.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:s=>this["~validate"](s)}}optional(){return Xe.create(this,this._def)}nullable(){return xt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Mt.create(this)}promise(){return ms.create(this,this._def)}or(t){return Us.create([this,t],this._def)}and(t){return Vs.create(this,t,this._def)}transform(t){return new et({...q(this._def),schema:this,typeName:L.ZodEffects,effect:{type:"transform",transform:t}})}default(t){let s=typeof t=="function"?t:()=>t;return new Hs({...q(this._def),innerType:this,defaultValue:s,typeName:L.ZodDefault})}brand(){return new rn({typeName:L.ZodBranded,type:this,...q(this._def)})}catch(t){let s=typeof t=="function"?t:()=>t;return new Js({...q(this._def),innerType:this,catchValue:s,typeName:L.ZodCatch})}describe(t){let s=this.constructor;return new s({...this._def,description:t})}pipe(t){return nn.create(this,t)}readonly(){return Ys.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},lA=/^c[^\s-]{8,}$/i,cA=/^[0-9a-z]+$/,fA=/^[0-9A-HJKMNP-TV-Z]{26}$/i,dA=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,hA=/^[a-z0-9_-]{21}$/i,pA=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,mA=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,gA=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,DA="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",yA=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,wA=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,bA=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,vA=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,EA=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,FA=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,mD="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",CA=new RegExp(`^${mD}$`);hs=class e extends V{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==_.string){let n=this._getOrReturnCtx(t);return k(n,{code:C.invalid_type,expected:_.string,received:n.parsedType}),O}let i=new Ce,r;for(let n of this._def.checks)if(n.kind==="min")t.data.length<n.value&&(r=this._getOrReturnCtx(t,r),k(r,{code:C.too_small,minimum:n.value,type:"string",inclusive:!0,exact:!1,message:n.message}),i.dirty());else if(n.kind==="max")t.data.length>n.value&&(r=this._getOrReturnCtx(t,r),k(r,{code:C.too_big,maximum:n.value,type:"string",inclusive:!0,exact:!1,message:n.message}),i.dirty());else if(n.kind==="length"){let o=t.data.length>n.value,a=t.data.length<n.value;(o||a)&&(r=this._getOrReturnCtx(t,r),o?k(r,{code:C.too_big,maximum:n.value,type:"string",inclusive:!0,exact:!0,message:n.message}):a&&k(r,{code:C.too_small,minimum:n.value,type:"string",inclusive:!0,exact:!0,message:n.message}),i.dirty())}else if(n.kind==="email")gA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"email",code:C.invalid_string,message:n.message}),i.dirty());else if(n.kind==="emoji")Yc||(Yc=new RegExp(DA,"u")),Yc.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"emoji",code:C.invalid_string,message:n.message}),i.dirty());else if(n.kind==="uuid")dA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"uuid",code:C.invalid_string,message:n.message}),i.dirty());else if(n.kind==="nanoid")hA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"nanoid",code:C.invalid_string,message:n.message}),i.dirty());else if(n.kind==="cuid")lA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"cuid",code:C.invalid_string,message:n.message}),i.dirty());else if(n.kind==="cuid2")cA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"cuid2",code:C.invalid_string,message:n.message}),i.dirty());else if(n.kind==="ulid")fA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"ulid",code:C.invalid_string,message:n.message}),i.dirty());else if(n.kind==="url")try{new URL(t.data)}catch{r=this._getOrReturnCtx(t,r),k(r,{validation:"url",code:C.invalid_string,message:n.message}),i.dirty()}else n.kind==="regex"?(n.regex.lastIndex=0,n.regex.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"regex",code:C.invalid_string,message:n.message}),i.dirty())):n.kind==="trim"?t.data=t.data.trim():n.kind==="includes"?t.data.includes(n.value,n.position)||(r=this._getOrReturnCtx(t,r),k(r,{code:C.invalid_string,validation:{includes:n.value,position:n.position},message:n.message}),i.dirty()):n.kind==="toLowerCase"?t.data=t.data.toLowerCase():n.kind==="toUpperCase"?t.data=t.data.toUpperCase():n.kind==="startsWith"?t.data.startsWith(n.value)||(r=this._getOrReturnCtx(t,r),k(r,{code:C.invalid_string,validation:{startsWith:n.value},message:n.message}),i.dirty()):n.kind==="endsWith"?t.data.endsWith(n.value)||(r=this._getOrReturnCtx(t,r),k(r,{code:C.invalid_string,validation:{endsWith:n.value},message:n.message}),i.dirty()):n.kind==="datetime"?DD(n).test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{code:C.invalid_string,validation:"datetime",message:n.message}),i.dirty()):n.kind==="date"?CA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{code:C.invalid_string,validation:"date",message:n.message}),i.dirty()):n.kind==="time"?xA(n).test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{code:C.invalid_string,validation:"time",message:n.message}),i.dirty()):n.kind==="duration"?mA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"duration",code:C.invalid_string,message:n.message}),i.dirty()):n.kind==="ip"?SA(t.data,n.version)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"ip",code:C.invalid_string,message:n.message}),i.dirty()):n.kind==="jwt"?AA(t.data,n.alg)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"jwt",code:C.invalid_string,message:n.message}),i.dirty()):n.kind==="cidr"?RA(t.data,n.version)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"cidr",code:C.invalid_string,message:n.message}),i.dirty()):n.kind==="base64"?EA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"base64",code:C.invalid_string,message:n.message}),i.dirty()):n.kind==="base64url"?FA.test(t.data)||(r=this._getOrReturnCtx(t,r),k(r,{validation:"base64url",code:C.invalid_string,message:n.message}),i.dirty()):G.assertNever(n);return{status:i.value,value:t.data}}_regex(t,s,i){return this.refinement(r=>t.test(r),{validation:s,code:C.invalid_string,...P.errToObj(i)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...P.errToObj(t)})}url(t){return this._addCheck({kind:"url",...P.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...P.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...P.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...P.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...P.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...P.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...P.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...P.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...P.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...P.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...P.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...P.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof t?.precision>"u"?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...P.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof t?.precision>"u"?null:t?.precision,...P.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...P.errToObj(t)})}regex(t,s){return this._addCheck({kind:"regex",regex:t,...P.errToObj(s)})}includes(t,s){return this._addCheck({kind:"includes",value:t,position:s?.position,...P.errToObj(s?.message)})}startsWith(t,s){return this._addCheck({kind:"startsWith",value:t,...P.errToObj(s)})}endsWith(t,s){return this._addCheck({kind:"endsWith",value:t,...P.errToObj(s)})}min(t,s){return this._addCheck({kind:"min",value:t,...P.errToObj(s)})}max(t,s){return this._addCheck({kind:"max",value:t,...P.errToObj(s)})}length(t,s){return this._addCheck({kind:"length",value:t,...P.errToObj(s)})}nonempty(t){return this.min(1,P.errToObj(t))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(let s of this._def.checks)s.kind==="min"&&(t===null||s.value>t)&&(t=s.value);return t}get maxLength(){let t=null;for(let s of this._def.checks)s.kind==="max"&&(t===null||s.value<t)&&(t=s.value);return t}};hs.create=e=>new hs({checks:[],typeName:L.ZodString,coerce:e?.coerce??!1,...q(e)});Os=class e extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==_.number){let n=this._getOrReturnCtx(t);return k(n,{code:C.invalid_type,expected:_.number,received:n.parsedType}),O}let i,r=new Ce;for(let n of this._def.checks)n.kind==="int"?G.isInteger(t.data)||(i=this._getOrReturnCtx(t,i),k(i,{code:C.invalid_type,expected:"integer",received:"float",message:n.message}),r.dirty()):n.kind==="min"?(n.inclusive?t.data<n.value:t.data<=n.value)&&(i=this._getOrReturnCtx(t,i),k(i,{code:C.too_small,minimum:n.value,type:"number",inclusive:n.inclusive,exact:!1,message:n.message}),r.dirty()):n.kind==="max"?(n.inclusive?t.data>n.value:t.data>=n.value)&&(i=this._getOrReturnCtx(t,i),k(i,{code:C.too_big,maximum:n.value,type:"number",inclusive:n.inclusive,exact:!1,message:n.message}),r.dirty()):n.kind==="multipleOf"?kA(t.data,n.value)!==0&&(i=this._getOrReturnCtx(t,i),k(i,{code:C.not_multiple_of,multipleOf:n.value,message:n.message}),r.dirty()):n.kind==="finite"?Number.isFinite(t.data)||(i=this._getOrReturnCtx(t,i),k(i,{code:C.not_finite,message:n.message}),r.dirty()):G.assertNever(n);return{status:r.value,value:t.data}}gte(t,s){return this.setLimit("min",t,!0,P.toString(s))}gt(t,s){return this.setLimit("min",t,!1,P.toString(s))}lte(t,s){return this.setLimit("max",t,!0,P.toString(s))}lt(t,s){return this.setLimit("max",t,!1,P.toString(s))}setLimit(t,s,i,r){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:s,inclusive:i,message:P.toString(r)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:P.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:P.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:P.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:P.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:P.toString(t)})}multipleOf(t,s){return this._addCheck({kind:"multipleOf",value:t,message:P.toString(s)})}finite(t){return this._addCheck({kind:"finite",message:P.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:P.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:P.toString(t)})}get minValue(){let t=null;for(let s of this._def.checks)s.kind==="min"&&(t===null||s.value>t)&&(t=s.value);return t}get maxValue(){let t=null;for(let s of this._def.checks)s.kind==="max"&&(t===null||s.value<t)&&(t=s.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind==="int"||t.kind==="multipleOf"&&G.isInteger(t.value))}get isFinite(){let t=null,s=null;for(let i of this._def.checks){if(i.kind==="finite"||i.kind==="int"||i.kind==="multipleOf")return!0;i.kind==="min"?(s===null||i.value>s)&&(s=i.value):i.kind==="max"&&(t===null||i.value<t)&&(t=i.value)}return Number.isFinite(s)&&Number.isFinite(t)}};Os.create=e=>new Os({checks:[],typeName:L.ZodNumber,coerce:e?.coerce||!1,...q(e)});Ls=class e extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==_.bigint)return this._getInvalidInput(t);let i,r=new Ce;for(let n of this._def.checks)n.kind==="min"?(n.inclusive?t.data<n.value:t.data<=n.value)&&(i=this._getOrReturnCtx(t,i),k(i,{code:C.too_small,type:"bigint",minimum:n.value,inclusive:n.inclusive,message:n.message}),r.dirty()):n.kind==="max"?(n.inclusive?t.data>n.value:t.data>=n.value)&&(i=this._getOrReturnCtx(t,i),k(i,{code:C.too_big,type:"bigint",maximum:n.value,inclusive:n.inclusive,message:n.message}),r.dirty()):n.kind==="multipleOf"?t.data%n.value!==BigInt(0)&&(i=this._getOrReturnCtx(t,i),k(i,{code:C.not_multiple_of,multipleOf:n.value,message:n.message}),r.dirty()):G.assertNever(n);return{status:r.value,value:t.data}}_getInvalidInput(t){let s=this._getOrReturnCtx(t);return k(s,{code:C.invalid_type,expected:_.bigint,received:s.parsedType}),O}gte(t,s){return this.setLimit("min",t,!0,P.toString(s))}gt(t,s){return this.setLimit("min",t,!1,P.toString(s))}lte(t,s){return this.setLimit("max",t,!0,P.toString(s))}lt(t,s){return this.setLimit("max",t,!1,P.toString(s))}setLimit(t,s,i,r){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:s,inclusive:i,message:P.toString(r)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:P.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:P.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:P.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:P.toString(t)})}multipleOf(t,s){return this._addCheck({kind:"multipleOf",value:t,message:P.toString(s)})}get minValue(){let t=null;for(let s of this._def.checks)s.kind==="min"&&(t===null||s.value>t)&&(t=s.value);return t}get maxValue(){let t=null;for(let s of this._def.checks)s.kind==="max"&&(t===null||s.value<t)&&(t=s.value);return t}};Ls.create=e=>new Ls({checks:[],typeName:L.ZodBigInt,coerce:e?.coerce??!1,...q(e)});Ns=class extends V{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==_.boolean){let i=this._getOrReturnCtx(t);return k(i,{code:C.invalid_type,expected:_.boolean,received:i.parsedType}),O}return ke(t.data)}};Ns.create=e=>new Ns({typeName:L.ZodBoolean,coerce:e?.coerce||!1,...q(e)});Ms=class e extends V{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==_.date){let n=this._getOrReturnCtx(t);return k(n,{code:C.invalid_type,expected:_.date,received:n.parsedType}),O}if(Number.isNaN(t.data.getTime())){let n=this._getOrReturnCtx(t);return k(n,{code:C.invalid_date}),O}let i=new Ce,r;for(let n of this._def.checks)n.kind==="min"?t.data.getTime()<n.value&&(r=this._getOrReturnCtx(t,r),k(r,{code:C.too_small,message:n.message,inclusive:!0,exact:!1,minimum:n.value,type:"date"}),i.dirty()):n.kind==="max"?t.data.getTime()>n.value&&(r=this._getOrReturnCtx(t,r),k(r,{code:C.too_big,message:n.message,inclusive:!0,exact:!1,maximum:n.value,type:"date"}),i.dirty()):G.assertNever(n);return{status:i.value,value:new Date(t.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(t,s){return this._addCheck({kind:"min",value:t.getTime(),message:P.toString(s)})}max(t,s){return this._addCheck({kind:"max",value:t.getTime(),message:P.toString(s)})}get minDate(){let t=null;for(let s of this._def.checks)s.kind==="min"&&(t===null||s.value>t)&&(t=s.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(let s of this._def.checks)s.kind==="max"&&(t===null||s.value<t)&&(t=s.value);return t!=null?new Date(t):null}};Ms.create=e=>new Ms({checks:[],coerce:e?.coerce||!1,typeName:L.ZodDate,...q(e)});Ai=class extends V{_parse(t){if(this._getType(t)!==_.symbol){let i=this._getOrReturnCtx(t);return k(i,{code:C.invalid_type,expected:_.symbol,received:i.parsedType}),O}return ke(t.data)}};Ai.create=e=>new Ai({typeName:L.ZodSymbol,...q(e)});js=class extends V{_parse(t){if(this._getType(t)!==_.undefined){let i=this._getOrReturnCtx(t);return k(i,{code:C.invalid_type,expected:_.undefined,received:i.parsedType}),O}return ke(t.data)}};js.create=e=>new js({typeName:L.ZodUndefined,...q(e)});qs=class extends V{_parse(t){if(this._getType(t)!==_.null){let i=this._getOrReturnCtx(t);return k(i,{code:C.invalid_type,expected:_.null,received:i.parsedType}),O}return ke(t.data)}};qs.create=e=>new qs({typeName:L.ZodNull,...q(e)});ps=class extends V{constructor(){super(...arguments),this._any=!0}_parse(t){return ke(t.data)}};ps.create=e=>new ps({typeName:L.ZodAny,...q(e)});Nt=class extends V{constructor(){super(...arguments),this._unknown=!0}_parse(t){return ke(t.data)}};Nt.create=e=>new Nt({typeName:L.ZodUnknown,...q(e)});ht=class extends V{_parse(t){let s=this._getOrReturnCtx(t);return k(s,{code:C.invalid_type,expected:_.never,received:s.parsedType}),O}};ht.create=e=>new ht({typeName:L.ZodNever,...q(e)});Ri=class extends V{_parse(t){if(this._getType(t)!==_.undefined){let i=this._getOrReturnCtx(t);return k(i,{code:C.invalid_type,expected:_.void,received:i.parsedType}),O}return ke(t.data)}};Ri.create=e=>new Ri({typeName:L.ZodVoid,...q(e)});Mt=class e extends V{_parse(t){let{ctx:s,status:i}=this._processInputParams(t),r=this._def;if(s.parsedType!==_.array)return k(s,{code:C.invalid_type,expected:_.array,received:s.parsedType}),O;if(r.exactLength!==null){let o=s.data.length>r.exactLength.value,a=s.data.length<r.exactLength.value;(o||a)&&(k(s,{code:o?C.too_big:C.too_small,minimum:a?r.exactLength.value:void 0,maximum:o?r.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:r.exactLength.message}),i.dirty())}if(r.minLength!==null&&s.data.length<r.minLength.value&&(k(s,{code:C.too_small,minimum:r.minLength.value,type:"array",inclusive:!0,exact:!1,message:r.minLength.message}),i.dirty()),r.maxLength!==null&&s.data.length>r.maxLength.value&&(k(s,{code:C.too_big,maximum:r.maxLength.value,type:"array",inclusive:!0,exact:!1,message:r.maxLength.message}),i.dirty()),s.common.async)return Promise.all([...s.data].map((o,a)=>r.type._parseAsync(new Qe(s,o,s.path,a)))).then(o=>Ce.mergeArray(i,o));let n=[...s.data].map((o,a)=>r.type._parseSync(new Qe(s,o,s.path,a)));return Ce.mergeArray(i,n)}get element(){return this._def.type}min(t,s){return new e({...this._def,minLength:{value:t,message:P.toString(s)}})}max(t,s){return new e({...this._def,maxLength:{value:t,message:P.toString(s)}})}length(t,s){return new e({...this._def,exactLength:{value:t,message:P.toString(s)}})}nonempty(t){return this.min(1,t)}};Mt.create=(e,t)=>new Mt({type:e,minLength:null,maxLength:null,exactLength:null,typeName:L.ZodArray,...q(t)});Le=class e extends V{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape(),s=G.objectKeys(t);return this._cached={shape:t,keys:s},this._cached}_parse(t){if(this._getType(t)!==_.object){let l=this._getOrReturnCtx(t);return k(l,{code:C.invalid_type,expected:_.object,received:l.parsedType}),O}let{status:i,ctx:r}=this._processInputParams(t),{shape:n,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof ht&&this._def.unknownKeys==="strip"))for(let l in r.data)o.includes(l)||a.push(l);let u=[];for(let l of o){let c=n[l],f=r.data[l];u.push({key:{status:"valid",value:l},value:c._parse(new Qe(r,f,r.path,l)),alwaysSet:l in r.data})}if(this._def.catchall instanceof ht){let l=this._def.unknownKeys;if(l==="passthrough")for(let c of a)u.push({key:{status:"valid",value:c},value:{status:"valid",value:r.data[c]}});else if(l==="strict")a.length>0&&(k(r,{code:C.unrecognized_keys,keys:a}),i.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let l=this._def.catchall;for(let c of a){let f=r.data[c];u.push({key:{status:"valid",value:c},value:l._parse(new Qe(r,f,r.path,c)),alwaysSet:c in r.data})}}return r.common.async?Promise.resolve().then(async()=>{let l=[];for(let c of u){let f=await c.key,d=await c.value;l.push({key:f,value:d,alwaysSet:c.alwaysSet})}return l}).then(l=>Ce.mergeObjectSync(i,l)):Ce.mergeObjectSync(i,u)}get shape(){return this._def.shape()}strict(t){return P.errToObj,new e({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(s,i)=>{let r=this._def.errorMap?.(s,i).message??i.defaultError;return s.code==="unrecognized_keys"?{message:P.errToObj(t).message??r}:{message:r}}}:{}})}strip(){return new e({...this._def,unknownKeys:"strip"})}passthrough(){return new e({...this._def,unknownKeys:"passthrough"})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:L.ZodObject})}setKey(t,s){return this.augment({[t]:s})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let s={};for(let i of G.objectKeys(t))t[i]&&this.shape[i]&&(s[i]=this.shape[i]);return new e({...this._def,shape:()=>s})}omit(t){let s={};for(let i of G.objectKeys(this.shape))t[i]||(s[i]=this.shape[i]);return new e({...this._def,shape:()=>s})}deepPartial(){return Si(this)}partial(t){let s={};for(let i of G.objectKeys(this.shape)){let r=this.shape[i];t&&!t[i]?s[i]=r:s[i]=r.optional()}return new e({...this._def,shape:()=>s})}required(t){let s={};for(let i of G.objectKeys(this.shape))if(t&&!t[i])s[i]=this.shape[i];else{let n=this.shape[i];for(;n instanceof Xe;)n=n._def.innerType;s[i]=n}return new e({...this._def,shape:()=>s})}keyof(){return yD(G.objectKeys(this.shape))}};Le.create=(e,t)=>new Le({shape:()=>e,unknownKeys:"strip",catchall:ht.create(),typeName:L.ZodObject,...q(t)});Le.strictCreate=(e,t)=>new Le({shape:()=>e,unknownKeys:"strict",catchall:ht.create(),typeName:L.ZodObject,...q(t)});Le.lazycreate=(e,t)=>new Le({shape:e,unknownKeys:"strip",catchall:ht.create(),typeName:L.ZodObject,...q(t)});Us=class extends V{_parse(t){let{ctx:s}=this._processInputParams(t),i=this._def.options;function r(n){for(let a of n)if(a.result.status==="valid")return a.result;for(let a of n)if(a.result.status==="dirty")return s.common.issues.push(...a.ctx.common.issues),a.result;let o=n.map(a=>new we(a.ctx.common.issues));return k(s,{code:C.invalid_union,unionErrors:o}),O}if(s.common.async)return Promise.all(i.map(async n=>{let o={...s,common:{...s.common,issues:[]},parent:null};return{result:await n._parseAsync({data:s.data,path:s.path,parent:o}),ctx:o}})).then(r);{let n,o=[];for(let u of i){let l={...s,common:{...s.common,issues:[]},parent:null},c=u._parseSync({data:s.data,path:s.path,parent:l});if(c.status==="valid")return c;c.status==="dirty"&&!n&&(n={result:c,ctx:l}),l.common.issues.length&&o.push(l.common.issues)}if(n)return s.common.issues.push(...n.ctx.common.issues),n.result;let a=o.map(u=>new we(u));return k(s,{code:C.invalid_union,unionErrors:a}),O}}get options(){return this._def.options}};Us.create=(e,t)=>new Us({options:e,typeName:L.ZodUnion,...q(t)});Lt=e=>e instanceof Gs?Lt(e.schema):e instanceof et?Lt(e.innerType()):e instanceof Ws?[e.value]:e instanceof Ks?e.options:e instanceof zs?G.objectValues(e.enum):e instanceof Hs?Lt(e._def.innerType):e instanceof js?[void 0]:e instanceof qs?[null]:e instanceof Xe?[void 0,...Lt(e.unwrap())]:e instanceof xt?[null,...Lt(e.unwrap())]:e instanceof rn||e instanceof Ys?Lt(e.unwrap()):e instanceof Js?Lt(e._def.innerType):[],da=class e extends V{_parse(t){let{ctx:s}=this._processInputParams(t);if(s.parsedType!==_.object)return k(s,{code:C.invalid_type,expected:_.object,received:s.parsedType}),O;let i=this.discriminator,r=s.data[i],n=this.optionsMap.get(r);return n?s.common.async?n._parseAsync({data:s.data,path:s.path,parent:s}):n._parseSync({data:s.data,path:s.path,parent:s}):(k(s,{code:C.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[i]}),O)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,s,i){let r=new Map;for(let n of s){let o=Lt(n.shape[t]);if(!o.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let a of o){if(r.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);r.set(a,n)}}return new e({typeName:L.ZodDiscriminatedUnion,discriminator:t,options:s,optionsMap:r,...q(i)})}};Vs=class extends V{_parse(t){let{status:s,ctx:i}=this._processInputParams(t),r=(n,o)=>{if(ca(n)||ca(o))return O;let a=Zc(n.value,o.value);return a.valid?((fa(n)||fa(o))&&s.dirty(),{status:s.value,value:a.data}):(k(i,{code:C.invalid_intersection_types}),O)};return i.common.async?Promise.all([this._def.left._parseAsync({data:i.data,path:i.path,parent:i}),this._def.right._parseAsync({data:i.data,path:i.path,parent:i})]).then(([n,o])=>r(n,o)):r(this._def.left._parseSync({data:i.data,path:i.path,parent:i}),this._def.right._parseSync({data:i.data,path:i.path,parent:i}))}};Vs.create=(e,t,s)=>new Vs({left:e,right:t,typeName:L.ZodIntersection,...q(s)});Ct=class e extends V{_parse(t){let{status:s,ctx:i}=this._processInputParams(t);if(i.parsedType!==_.array)return k(i,{code:C.invalid_type,expected:_.array,received:i.parsedType}),O;if(i.data.length<this._def.items.length)return k(i,{code:C.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),O;!this._def.rest&&i.data.length>this._def.items.length&&(k(i,{code:C.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),s.dirty());let n=[...i.data].map((o,a)=>{let u=this._def.items[a]||this._def.rest;return u?u._parse(new Qe(i,o,i.path,a)):null}).filter(o=>!!o);return i.common.async?Promise.all(n).then(o=>Ce.mergeArray(s,o)):Ce.mergeArray(s,n)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};Ct.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Ct({items:e,typeName:L.ZodTuple,rest:null,...q(t)})};ha=class e extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:s,ctx:i}=this._processInputParams(t);if(i.parsedType!==_.object)return k(i,{code:C.invalid_type,expected:_.object,received:i.parsedType}),O;let r=[],n=this._def.keyType,o=this._def.valueType;for(let a in i.data)r.push({key:n._parse(new Qe(i,a,i.path,a)),value:o._parse(new Qe(i,i.data[a],i.path,a)),alwaysSet:a in i.data});return i.common.async?Ce.mergeObjectAsync(s,r):Ce.mergeObjectSync(s,r)}get element(){return this._def.valueType}static create(t,s,i){return s instanceof V?new e({keyType:t,valueType:s,typeName:L.ZodRecord,...q(i)}):new e({keyType:hs.create(),valueType:t,typeName:L.ZodRecord,...q(s)})}},ki=class extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:s,ctx:i}=this._processInputParams(t);if(i.parsedType!==_.map)return k(i,{code:C.invalid_type,expected:_.map,received:i.parsedType}),O;let r=this._def.keyType,n=this._def.valueType,o=[...i.data.entries()].map(([a,u],l)=>({key:r._parse(new Qe(i,a,i.path,[l,"key"])),value:n._parse(new Qe(i,u,i.path,[l,"value"]))}));if(i.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let u of o){let l=await u.key,c=await u.value;if(l.status==="aborted"||c.status==="aborted")return O;(l.status==="dirty"||c.status==="dirty")&&s.dirty(),a.set(l.value,c.value)}return{status:s.value,value:a}})}else{let a=new Map;for(let u of o){let l=u.key,c=u.value;if(l.status==="aborted"||c.status==="aborted")return O;(l.status==="dirty"||c.status==="dirty")&&s.dirty(),a.set(l.value,c.value)}return{status:s.value,value:a}}}};ki.create=(e,t,s)=>new ki({valueType:t,keyType:e,typeName:L.ZodMap,...q(s)});Ii=class e extends V{_parse(t){let{status:s,ctx:i}=this._processInputParams(t);if(i.parsedType!==_.set)return k(i,{code:C.invalid_type,expected:_.set,received:i.parsedType}),O;let r=this._def;r.minSize!==null&&i.data.size<r.minSize.value&&(k(i,{code:C.too_small,minimum:r.minSize.value,type:"set",inclusive:!0,exact:!1,message:r.minSize.message}),s.dirty()),r.maxSize!==null&&i.data.size>r.maxSize.value&&(k(i,{code:C.too_big,maximum:r.maxSize.value,type:"set",inclusive:!0,exact:!1,message:r.maxSize.message}),s.dirty());let n=this._def.valueType;function o(u){let l=new Set;for(let c of u){if(c.status==="aborted")return O;c.status==="dirty"&&s.dirty(),l.add(c.value)}return{status:s.value,value:l}}let a=[...i.data.values()].map((u,l)=>n._parse(new Qe(i,u,i.path,l)));return i.common.async?Promise.all(a).then(u=>o(u)):o(a)}min(t,s){return new e({...this._def,minSize:{value:t,message:P.toString(s)}})}max(t,s){return new e({...this._def,maxSize:{value:t,message:P.toString(s)}})}size(t,s){return this.min(t,s).max(t,s)}nonempty(t){return this.min(1,t)}};Ii.create=(e,t)=>new Ii({valueType:e,minSize:null,maxSize:null,typeName:L.ZodSet,...q(t)});pa=class e extends V{constructor(){super(...arguments),this.validate=this.implement}_parse(t){let{ctx:s}=this._processInputParams(t);if(s.parsedType!==_.function)return k(s,{code:C.invalid_type,expected:_.function,received:s.parsedType}),O;function i(a,u){return sn({data:a,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,Ci(),Ot].filter(l=>!!l),issueData:{code:C.invalid_arguments,argumentsError:u}})}function r(a,u){return sn({data:a,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,Ci(),Ot].filter(l=>!!l),issueData:{code:C.invalid_return_type,returnTypeError:u}})}let n={errorMap:s.common.contextualErrorMap},o=s.data;if(this._def.returns instanceof ms){let a=this;return ke(async function(...u){let l=new we([]),c=await a._def.args.parseAsync(u,n).catch(p=>{throw l.addIssue(i(u,p)),l}),f=await Reflect.apply(o,this,c);return await a._def.returns._def.type.parseAsync(f,n).catch(p=>{throw l.addIssue(r(f,p)),l})})}else{let a=this;return ke(function(...u){let l=a._def.args.safeParse(u,n);if(!l.success)throw new we([i(u,l.error)]);let c=Reflect.apply(o,this,l.data),f=a._def.returns.safeParse(c,n);if(!f.success)throw new we([r(c,f.error)]);return f.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:Ct.create(t).rest(Nt.create())})}returns(t){return new e({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,s,i){return new e({args:t||Ct.create([]).rest(Nt.create()),returns:s||Nt.create(),typeName:L.ZodFunction,...q(i)})}},Gs=class extends V{get schema(){return this._def.getter()}_parse(t){let{ctx:s}=this._processInputParams(t);return this._def.getter()._parse({data:s.data,path:s.path,parent:s})}};Gs.create=(e,t)=>new Gs({getter:e,typeName:L.ZodLazy,...q(t)});Ws=class extends V{_parse(t){if(t.data!==this._def.value){let s=this._getOrReturnCtx(t);return k(s,{received:s.data,code:C.invalid_literal,expected:this._def.value}),O}return{status:"valid",value:t.data}}get value(){return this._def.value}};Ws.create=(e,t)=>new Ws({value:e,typeName:L.ZodLiteral,...q(t)});Ks=class e extends V{_parse(t){if(typeof t.data!="string"){let s=this._getOrReturnCtx(t),i=this._def.values;return k(s,{expected:G.joinValues(i),received:s.parsedType,code:C.invalid_type}),O}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){let s=this._getOrReturnCtx(t),i=this._def.values;return k(s,{received:s.data,code:C.invalid_enum_value,options:i}),O}return ke(t.data)}get options(){return this._def.values}get enum(){let t={};for(let s of this._def.values)t[s]=s;return t}get Values(){let t={};for(let s of this._def.values)t[s]=s;return t}get Enum(){let t={};for(let s of this._def.values)t[s]=s;return t}extract(t,s=this._def){return e.create(t,{...this._def,...s})}exclude(t,s=this._def){return e.create(this.options.filter(i=>!t.includes(i)),{...this._def,...s})}};Ks.create=yD;zs=class extends V{_parse(t){let s=G.getValidEnumValues(this._def.values),i=this._getOrReturnCtx(t);if(i.parsedType!==_.string&&i.parsedType!==_.number){let r=G.objectValues(s);return k(i,{expected:G.joinValues(r),received:i.parsedType,code:C.invalid_type}),O}if(this._cache||(this._cache=new Set(G.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){let r=G.objectValues(s);return k(i,{received:i.data,code:C.invalid_enum_value,options:r}),O}return ke(t.data)}get enum(){return this._def.values}};zs.create=(e,t)=>new zs({values:e,typeName:L.ZodNativeEnum,...q(t)});ms=class extends V{unwrap(){return this._def.type}_parse(t){let{ctx:s}=this._processInputParams(t);if(s.parsedType!==_.promise&&s.common.async===!1)return k(s,{code:C.invalid_type,expected:_.promise,received:s.parsedType}),O;let i=s.parsedType===_.promise?s.data:Promise.resolve(s.data);return ke(i.then(r=>this._def.type.parseAsync(r,{path:s.path,errorMap:s.common.contextualErrorMap})))}};ms.create=(e,t)=>new ms({type:e,typeName:L.ZodPromise,...q(t)});et=class extends V{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===L.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){let{status:s,ctx:i}=this._processInputParams(t),r=this._def.effect||null,n={addIssue:o=>{k(i,o),o.fatal?s.abort():s.dirty()},get path(){return i.path}};if(n.addIssue=n.addIssue.bind(n),r.type==="preprocess"){let o=r.transform(i.data,n);if(i.common.async)return Promise.resolve(o).then(async a=>{if(s.value==="aborted")return O;let u=await this._def.schema._parseAsync({data:a,path:i.path,parent:i});return u.status==="aborted"?O:u.status==="dirty"?Bs(u.value):s.value==="dirty"?Bs(u.value):u});{if(s.value==="aborted")return O;let a=this._def.schema._parseSync({data:o,path:i.path,parent:i});return a.status==="aborted"?O:a.status==="dirty"?Bs(a.value):s.value==="dirty"?Bs(a.value):a}}if(r.type==="refinement"){let o=a=>{let u=r.refinement(a,n);if(i.common.async)return Promise.resolve(u);if(u instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(i.common.async===!1){let a=this._def.schema._parseSync({data:i.data,path:i.path,parent:i});return a.status==="aborted"?O:(a.status==="dirty"&&s.dirty(),o(a.value),{status:s.value,value:a.value})}else return this._def.schema._parseAsync({data:i.data,path:i.path,parent:i}).then(a=>a.status==="aborted"?O:(a.status==="dirty"&&s.dirty(),o(a.value).then(()=>({status:s.value,value:a.value}))))}if(r.type==="transform")if(i.common.async===!1){let o=this._def.schema._parseSync({data:i.data,path:i.path,parent:i});if(!ds(o))return O;let a=r.transform(o.value,n);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:s.value,value:a}}else return this._def.schema._parseAsync({data:i.data,path:i.path,parent:i}).then(o=>ds(o)?Promise.resolve(r.transform(o.value,n)).then(a=>({status:s.value,value:a})):O);G.assertNever(r)}};et.create=(e,t,s)=>new et({schema:e,typeName:L.ZodEffects,effect:t,...q(s)});et.createWithPreprocess=(e,t,s)=>new et({schema:t,effect:{type:"preprocess",transform:e},typeName:L.ZodEffects,...q(s)});Xe=class extends V{_parse(t){return this._getType(t)===_.undefined?ke(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};Xe.create=(e,t)=>new Xe({innerType:e,typeName:L.ZodOptional,...q(t)});xt=class extends V{_parse(t){return this._getType(t)===_.null?ke(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};xt.create=(e,t)=>new xt({innerType:e,typeName:L.ZodNullable,...q(t)});Hs=class extends V{_parse(t){let{ctx:s}=this._processInputParams(t),i=s.data;return s.parsedType===_.undefined&&(i=this._def.defaultValue()),this._def.innerType._parse({data:i,path:s.path,parent:s})}removeDefault(){return this._def.innerType}};Hs.create=(e,t)=>new Hs({innerType:e,typeName:L.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...q(t)});Js=class extends V{_parse(t){let{ctx:s}=this._processInputParams(t),i={...s,common:{...s.common,issues:[]}},r=this._def.innerType._parse({data:i.data,path:i.path,parent:{...i}});return xi(r)?r.then(n=>({status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new we(i.common.issues)},input:i.data})})):{status:"valid",value:r.status==="valid"?r.value:this._def.catchValue({get error(){return new we(i.common.issues)},input:i.data})}}removeCatch(){return this._def.innerType}};Js.create=(e,t)=>new Js({innerType:e,typeName:L.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...q(t)});_i=class extends V{_parse(t){if(this._getType(t)!==_.nan){let i=this._getOrReturnCtx(t);return k(i,{code:C.invalid_type,expected:_.nan,received:i.parsedType}),O}return{status:"valid",value:t.data}}};_i.create=e=>new _i({typeName:L.ZodNaN,...q(e)});IA=Symbol("zod_brand"),rn=class extends V{_parse(t){let{ctx:s}=this._processInputParams(t),i=s.data;return this._def.type._parse({data:i,path:s.path,parent:s})}unwrap(){return this._def.type}},nn=class e extends V{_parse(t){let{status:s,ctx:i}=this._processInputParams(t);if(i.common.async)return(async()=>{let n=await this._def.in._parseAsync({data:i.data,path:i.path,parent:i});return n.status==="aborted"?O:n.status==="dirty"?(s.dirty(),Bs(n.value)):this._def.out._parseAsync({data:n.value,path:i.path,parent:i})})();{let r=this._def.in._parseSync({data:i.data,path:i.path,parent:i});return r.status==="aborted"?O:r.status==="dirty"?(s.dirty(),{status:"dirty",value:r.value}):this._def.out._parseSync({data:r.value,path:i.path,parent:i})}}static create(t,s){return new e({in:t,out:s,typeName:L.ZodPipeline})}},Ys=class extends V{_parse(t){let s=this._def.innerType._parse(t),i=r=>(ds(r)&&(r.value=Object.freeze(r.value)),r);return xi(s)?s.then(r=>i(r)):i(s)}unwrap(){return this._def.innerType}};Ys.create=(e,t)=>new Ys({innerType:e,typeName:L.ZodReadonly,...q(t)});_A={object:Le.lazycreate};(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(L||(L={}));$A=(e,t={message:`Input not instance of ${e.name}`})=>wD(s=>s instanceof e,t),bD=hs.create,vD=Os.create,TA=_i.create,PA=Ls.create,ED=Ns.create,BA=Ms.create,OA=Ai.create,LA=js.create,NA=qs.create,MA=ps.create,jA=Nt.create,qA=ht.create,UA=Ri.create,VA=Mt.create,GA=Le.create,WA=Le.strictCreate,KA=Us.create,zA=da.create,HA=Vs.create,JA=Ct.create,YA=ha.create,ZA=ki.create,XA=Ii.create,QA=pa.create,eR=Gs.create,tR=Ws.create,sR=Ks.create,iR=zs.create,rR=ms.create,nR=et.create,oR=Xe.create,aR=xt.create,uR=et.createWithPreprocess,lR=nn.create,cR=()=>bD().optional(),fR=()=>vD().optional(),dR=()=>ED().optional(),hR={string:(e=>hs.create({...e,coerce:!0})),number:(e=>Os.create({...e,coerce:!0})),boolean:(e=>Ns.create({...e,coerce:!0})),bigint:(e=>Ls.create({...e,coerce:!0})),date:(e=>Ms.create({...e,coerce:!0}))},pR=O});var b={};er(b,{BRAND:()=>IA,DIRTY:()=>Bs,EMPTY_PATH:()=>uA,INVALID:()=>O,NEVER:()=>pR,OK:()=>ke,ParseStatus:()=>Ce,Schema:()=>V,ZodAny:()=>ps,ZodArray:()=>Mt,ZodBigInt:()=>Ls,ZodBoolean:()=>Ns,ZodBranded:()=>rn,ZodCatch:()=>Js,ZodDate:()=>Ms,ZodDefault:()=>Hs,ZodDiscriminatedUnion:()=>da,ZodEffects:()=>et,ZodEnum:()=>Ks,ZodError:()=>we,ZodFirstPartyTypeKind:()=>L,ZodFunction:()=>pa,ZodIntersection:()=>Vs,ZodIssueCode:()=>C,ZodLazy:()=>Gs,ZodLiteral:()=>Ws,ZodMap:()=>ki,ZodNaN:()=>_i,ZodNativeEnum:()=>zs,ZodNever:()=>ht,ZodNull:()=>qs,ZodNullable:()=>xt,ZodNumber:()=>Os,ZodObject:()=>Le,ZodOptional:()=>Xe,ZodParsedType:()=>_,ZodPipeline:()=>nn,ZodPromise:()=>ms,ZodReadonly:()=>Ys,ZodRecord:()=>ha,ZodSchema:()=>V,ZodSet:()=>Ii,ZodString:()=>hs,ZodSymbol:()=>Ai,ZodTransformer:()=>et,ZodTuple:()=>Ct,ZodType:()=>V,ZodUndefined:()=>js,ZodUnion:()=>Us,ZodUnknown:()=>Nt,ZodVoid:()=>Ri,addIssueToContext:()=>k,any:()=>MA,array:()=>VA,bigint:()=>PA,boolean:()=>ED,coerce:()=>hR,custom:()=>wD,date:()=>BA,datetimeRegex:()=>DD,defaultErrorMap:()=>Ot,discriminatedUnion:()=>zA,effect:()=>nR,enum:()=>sR,function:()=>QA,getErrorMap:()=>Ci,getParsedType:()=>Ft,instanceof:()=>$A,intersection:()=>HA,isAborted:()=>ca,isAsync:()=>xi,isDirty:()=>fa,isValid:()=>ds,late:()=>_A,lazy:()=>eR,literal:()=>tR,makeIssue:()=>sn,map:()=>ZA,nan:()=>TA,nativeEnum:()=>iR,never:()=>qA,null:()=>NA,nullable:()=>aR,number:()=>vD,object:()=>GA,objectUtil:()=>zc,oboolean:()=>dR,onumber:()=>fR,optional:()=>oR,ostring:()=>cR,pipeline:()=>lR,preprocess:()=>uR,promise:()=>rR,quotelessJson:()=>nA,record:()=>YA,set:()=>XA,setErrorMap:()=>aA,strictObject:()=>WA,string:()=>bD,symbol:()=>OA,transformer:()=>nR,tuple:()=>JA,undefined:()=>LA,union:()=>KA,unknown:()=>jA,util:()=>G,void:()=>UA});var Xc=re(()=>{la();Jc();fD();tn();FD();ua()});var Zs=re(()=>{Xc();Xc()});async function pt(e,t){let s=on.get(e);if(s!==void 0)return s.value;let i=await t();return on.set(e,{value:i,timestamp:Date.now()}),i}function ma(e){on.delete(e)}function CD(e){for(let t of on.keys())t.startsWith(e)&&on.delete(t)}var on,Ne,$i=re(()=>{"use strict";on=new Map;Ne={CONFIG:"config",INSTRUCTIONS:"instructions",OUTPUT_FORMAT:"prompt:output-format",VALIDATION_PROMPT:"prompt:validation",GIT_STATUS:"git:status",SKILLS:"skills"}});function kD(e){return{...RD[e]}}function ef(e){return e==="openai"?"openai":"deepseek"}function ID(e){return e==="openai"?xe:be}function mR(e,t){return e===xe?"openai":e===be?"deepseek":ef(t.PLATFORM)}function gR(e){let t={};for(let s of e.split(`
|
|
193
|
-
`)){let i=s.trim();if(!i||i.startsWith("#"))continue;let r=i.indexOf("=");if(r===-1)continue;let n=i.slice(0,r).trim();n.startsWith("export ")&&(n=n.slice(7).trim());let o=i.slice(r+1).trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),n&&!(n in process.env)&&(process.env[n]=o)}return t}function ga(e){if(!xD){xD=!0;try{let t=(0,AD.join)(e||process.cwd(),".env"),s=(0,SD.readFileSync)(t,"utf-8");gR(s)}catch{}}}function Me(e={}){ga();let t=e.env??process.env,s=e.executorOverride||e.config?.executor,i=s===xe||s===be?mR(s,t):ef(e.settings?.platform||e.config?.llm?.platform||t.PLATFORM),r=RD[i];return{platform:i,executor:s||ID(i),baseUrl:e.settings?.baseUrl||e.config?.llm?.baseUrl||t.BASE_URL||r.baseUrl,apiKey:e.settings?.apiKey||e.config?.llm?.apiKey||t.API_KEY||"",model:e.modelOverride||e.settings?.model||e.config?.llm?.model||t.MODEL||r.model}}function Pi(e){return Me({config:e})}function _D(){return ga(),ID(ef(process.env.PLATFORM))}var SD,AD,xe,be,Ti,gs,Qc,RD,xD,je=re(()=>{"use strict";SD=require("node:fs"),AD=require("node:path"),xe="openai-compatible-api",be="deepseek-api",Ti=be,gs=1800,Qc=0,RD={deepseek:{baseUrl:"https://api.deepseek.com",model:"deepseek-v4-flash"},openai:{baseUrl:"https://api.openai.com/v1",model:"gpt-4o-mini"}};xD=!1});function Da(){return process.env.BEST_REVIEW_CONFIG_DIR||(0,an.join)((0,PD.homedir)(),".best-review")}function un(){return(0,an.join)(Da(),"config.json")}function AR(){return(0,an.join)(Da(),"instructions.md")}function ln(){return rf.parse({})}async function ya(e){try{return await(0,tt.access)(e),!0}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ENOENT")return!1;throw t}}async function kR(e){if(!await ya(e))return null;let s=await(0,tt.readFile)(e,"utf-8");try{return JSON.parse(s)}catch(i){let r=i instanceof SyntaxError?i.message:String(i);throw new Error(`\u914D\u7F6E\u6587\u4EF6 JSON \u65E0\u6548 ${e}\uFF1A${r}`,{cause:i})}}function sf(e){return e==="opencode-cli"?Ti:e}function IR(e){if(!e)return;let t={};for(let[s,i]of Object.entries(e)){let r=sf(s);typeof r=="string"&&(t[r]={...t[r],...i})}return t}function _R(e){return{...e,...sf(e.executor)!==void 0&&{executor:sf(e.executor)},executors:IR(e.executors)}}function $R(e,t){let s=_R(t);return{...e,...s.extends!==void 0&&{extends:s.extends},...s.excludePatterns!==void 0&&{excludePatterns:s.excludePatterns},...s.concurrency!==void 0&&{concurrency:s.concurrency},...s.executor!==void 0&&{executor:s.executor},llm:s.llm?{...e.llm,...s.llm}:e.llm,executors:s.executors?TR(e.executors,s.executors):e.executors,agents:s.agents?tf(e.agents,s.agents):e.agents,rules:s.rules?tf(e.rules,s.rules):e.rules,skills:s.skills?tf(e.skills,s.skills):e.skills,workflows:s.workflows??e.workflows,reporting:s.reporting?{...e.reporting,...s.reporting}:e.reporting,qualityScore:s.qualityScore?{...e.qualityScore,...s.qualityScore,weights:{...e.qualityScore.weights,...s.qualityScore.weights},categoryWeights:{...e.qualityScore.categoryWeights,...s.qualityScore.categoryWeights}}:e.qualityScore,output:s.output?{...e.output,...s.output}:e.output}}async function le(e){let t=Ne.CONFIG;return pt(t,async()=>{let s=ln(),i=await kR(un());return i&&(s=rf.parse($R(s,i))),s})}async function wa(e){try{await(0,tt.mkdir)(Da(),{recursive:!0}),await(0,tt.writeFile)(un(),JSON.stringify(rf.parse(e),null,2)),OD()}catch(t){throw new Error(`\u4FDD\u5B58\u5168\u5C40\u914D\u7F6E\u5931\u8D25\uFF1A${t}`)}}function TR(e,t){let s={...e};for(let[i,r]of Object.entries(t))s[i]={...s[i],...r,review:r.review?{...s[i]?.review,...r.review}:s[i]?.review,validation:r.validation?{...s[i]?.validation,...r.validation}:s[i]?.validation};return s}function tf(e,t){let s={...e};for(let[i,r]of Object.entries(t))s[i]={...s[i],...r};return s}function cn(){return un()}function nf(e){return(0,an.join)(e,RR)}async function of(){return ya(un())}async function BD(e){return ya(nf(e))}function OD(){CD(Ne.CONFIG),ma(Ne.INSTRUCTIONS)}async function ba(){return pt(Ne.INSTRUCTIONS,async()=>{try{let e=AR();return await ya(e)?await(0,tt.readFile)(e,"utf-8"):""}catch{return""}})}async function LD(e,t,s){let i=un(),r={};try{let o=await(0,tt.readFile)(i,"utf-8");r=JSON.parse(o)}catch{}let n=Array.isArray(r.extends)?r.extends.filter(o=>typeof o=="string"):[];r.extends=n,n.includes(e)||n.push(e),await(0,tt.mkdir)(Da(),{recursive:!0}),await(0,tt.writeFile)(i,JSON.stringify(r,null,2)),OD()}var an,PD,tt,$D,DR,TD,yR,wR,bR,vR,ER,FR,CR,xR,SR,rf,RR,Ge=re(()=>{"use strict";Zs();an=require("path"),PD=require("os"),tt=require("node:fs/promises");$i();je();$D=b.object({model:b.string().optional()}).strict(),DR=b.object({review:b.array($D).optional(),validation:b.array($D).optional()}),TD=b.object({model:b.string().optional(),timeout:b.number().positive().optional(),concurrency:b.number().min(1).max(10).optional(),batchSize:b.number().min(1).max(50).optional(),readinessPing:b.boolean().optional()}).strict(),yR=b.object({review:TD.optional(),validation:TD.optional()}).strict(),wR=b.object({platform:b.enum(["deepseek","openai"]).optional(),baseUrl:b.string().min(1).optional(),apiKey:b.string().optional(),model:b.string().min(1).optional()}).strict().default({}),bR=b.object({enabled:b.boolean().optional(),url:b.string().url().optional(),token:b.string().optional(),localDir:b.string().default(".best-review/reports"),includeDiffs:b.boolean().default(!1),failOnError:b.boolean().default(!1)}).default({}),vR=b.object({critical:b.number().nonnegative().default(40),high:b.number().nonnegative().default(15),medium:b.number().nonnegative().default(6),low:b.number().nonnegative().default(2)}).strict().default({}),ER=b.object({security:b.number().positive().default(1.2),bug:b.number().positive().default(1),performance:b.number().positive().default(.8),quality:b.number().positive().default(.7),style:b.number().positive().default(.4),docs:b.number().positive().default(.3)}).strict().default({}),FR=b.object({base:b.number().positive().default(100),min:b.number().min(0).default(0),weights:vR,categoryWeights:ER}).superRefine((e,t)=>{e.min>e.base&&t.addIssue({code:b.ZodIssueCode.custom,path:["min"],message:"qualityScore.min \u4E0D\u80FD\u5927\u4E8E qualityScore.base"})}).default({}),CR=b.object({enabled:b.boolean().optional(),model:b.string().optional(),timeout:b.number().positive().optional()}),xR=b.object({enabled:b.boolean().optional(),agent:b.string().optional()}),SR=b.object({enabled:b.boolean().optional()}).strict(),rf=b.object({extends:b.array(b.string()).default([]),excludePatterns:b.array(b.string()).default(["*.min.js","*.min.css","*.map","*.d.ts","dist/**","docs/**","*.md","build/**","out/**",".next/**","coverage/**","node_modules/**","vendor/**","*.generated.*","*.bundle.js"]),concurrency:b.number().min(1).max(10).default(2),executor:b.string().default(()=>_D()),llm:wR,executors:b.record(b.string(),yR).default({}),agents:b.record(b.string(),CR).default({}),rules:b.record(b.string(),xR).default({}),skills:b.record(b.string(),SR).default({}),workflows:DR.optional(),reporting:bR,qualityScore:FR,output:b.object({colorize:b.boolean().default(!0),verbose:b.boolean().default(!1),format:b.enum(["terminal","markdown","json"]).default("terminal")}).default({})}).superRefine((e,t)=>{let s=[xe,be];s.includes(e.executor)||t.addIssue({code:b.ZodIssueCode.custom,path:["executor"],message:`\u53EA\u652F\u6301\u6A21\u578B API executor\uFF1A${s.join(", ")}\u3002`});for(let i of Object.keys(e.executors))s.includes(i)||t.addIssue({code:b.ZodIssueCode.custom,path:["executors",i],message:`\u4E0D\u652F\u6301\u7684 executor\uFF1A${i}\u3002\u53EF\u7528\uFF1A${s.join(", ")}\u3002`})});RR=".best-review.json"});var hy={};er(hy,{expandBraces:()=>hf,loadRuleFromRef:()=>ff,loadRuleMarkdown:()=>ok,loadRuleRefs:()=>At,loadRules:()=>lk,loadRulesFromDirectoryRecursive:()=>ak,loadRulesFromRefs:()=>cy,matchAndLoadRules:()=>df,matchPattern:()=>ys,matchRuleRefs:()=>dy,matchRules:()=>ck,parseRuleMarkdown:()=>ly,parseSingleRule:()=>uk});function cf(e,t){let s=e.name,i=e.agent,r=e.patterns,n=t.trim(),o=typeof e.version=="string"||typeof e.version=="number"?String(e.version):void 0;return typeof s!="string"||typeof i!="string"||!Array.isArray(r)||r.length===0||!n?null:{name:s,description:typeof e.description=="string"?e.description:"",patterns:r.filter(u=>typeof u=="string"),agent:i,prompt:n,...o&&{version:o}}}function ly(e){return oa(e,cf)}async function ok(e){try{return await en(e,cf)}catch(t){return h.error(`Error loading rule markdown from ${e}:`,t),[]}}async function ak(e){return rD(e,cf)}function uk(e){let t=ly(e);return t.length>0?t[0]??null:null}async function At(e){let t=e||process.cwd(),s=await le(t);return(s.extends.length>0?await lD(t,s.extends):await aD(t)).map(r=>{let n=s.rules[r.name]||{};return{...r,agent:n.agent??r.agent,_enabled:n.enabled??!0}}).filter(r=>r._enabled!==!1).map(({_enabled:r,...n})=>n)}async function ff(e){try{let t=await(0,uy.readFile)(e.path,"utf-8"),{body:s}=Ps(t);return{name:e.name,description:e.description,patterns:e.patterns,agent:e.agent,prompt:s.trim(),...e.version&&{version:e.version},source:e.source,path:e.path}}catch(t){return h.error(`\u52A0\u8F7D\u89C4\u5219\u5931\u8D25 ${e.path}\uFF1A`,t),null}}async function cy(e){return(await Promise.all(e.map(ff))).filter(s=>s!==null)}async function lk(e){let t=await At(e);return cy(t)}function fy(e,t,s){let i=new Map(s.map(n=>[n.name,n])),r=[];for(let n of e){let o=i.get(n.agent);if(!o){h.warn(`\u89C4\u5219\u5F15\u7528\u4E86\u4E0D\u5B58\u5728\u7684 Agent\uFF1A"${n.agent}"`);continue}let a=t.filter(u=>n.patterns.some(l=>ys(u.file,l))).map(u=>u.file);a.length!==0&&r.push({item:n,files:a,agent:o})}return r}function dy(e,t,s){return fy(e,t,s).map(({item:i,...r})=>({ref:i,...r}))}async function df(e,t,s){let i=dy(e,t,s);return(await Promise.all(i.map(async({ref:n,files:o,agent:a})=>{let u=await ff(n);return u?{rule:u,files:o,agent:a}:null}))).filter(n=>n!==null)}function ck(e,t,s){return fy(e,t,s).map(({item:i,...r})=>({rule:i,...r}))}function hf(e){let t=e.match(fk);if(!t||t.index===void 0||!t[1])return[e];let s=t[1].split(",").map(o=>o.trim()),i=e.substring(0,t.index),r=e.substring(t.index+t[0].length),n=[];for(let o of s){let a=i+o+r;n.push(...hf(a))}return n}function ys(e,t){return hf(t).some(i=>dk(e,i))}function dk(e,t){let s=t.replace(/\*\*/g,"\0DOUBLESTAR\0").replace(/\*/g,"\0STAR\0").replace(/\?/g,"\0QUESTION\0");s=s.replace(/[.+^${}()|[\]\\]/g,"\\$&"),s=s.replace(/\x00DOUBLESTAR\x00\//g,"(?:.*\\/)?").replace(/\x00DOUBLESTAR\x00/g,".*").replace(/\x00STAR\x00/g,"[^/]*").replace(/\x00QUESTION\x00/g,".");let i=ay.get(s);return i||(i=new RegExp(`^${s}$`),ay.set(s,i)),i.test(e)}var uy,fk,ay,ws=re(()=>{"use strict";Fi();uy=require("node:fs/promises");M();Ge();fk=/\{([^}]+)\}/;ay=new Map});var Ee={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},ou={silent:{level:-1},fatal:{level:Ee.fatal},error:{level:Ee.error},warn:{level:Ee.warn},log:{level:Ee.log},info:{level:Ee.info},success:{level:Ee.success},fail:{level:Ee.fail},ready:{level:Ee.info},start:{level:Ee.info},box:{level:Ee.info},debug:{level:Ee.debug},trace:{level:Ee.trace},verbose:{level:Ee.verbose}};function iu(e){if(e===null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function au(e,t,s=".",i){if(!iu(t))return au(e,{},s,i);let r=Object.assign({},t);for(let n in e){if(n==="__proto__"||n==="constructor")continue;let o=e[n];o!=null&&(i&&i(r,n,o,s)||(Array.isArray(o)&&Array.isArray(r[n])?r[n]=[...o,...r[n]]:iu(o)&&iu(r[n])?r[n]=au(o,r[n],(s?`${s}.`:"")+n.toString(),i):r[n]=o))}return r}function jb(e){return(...t)=>t.reduce((s,i)=>au(s,i,"",e),{})}var qb=jb();function Ub(e){return Object.prototype.toString.call(e)==="[object Object]"}function Vb(e){return!(!Ub(e)||!e.message&&!e.args||e.stack)}var ru=!1,td=[],me=class e{options;_lastLog;_mockFn;constructor(t={}){let s=t.types||ou;this.options=qb({...t,defaults:{...t.defaults},level:nu(t.level,s),reporters:[...t.reporters||[]]},{types:ou,throttle:1e3,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let i in s){let r={type:i,...this.options.defaults,...s[i]};this[i]=this._wrapLogFn(r),this[i].raw=this._wrapLogFn(r,!0)}this.options.mockFn&&this.mockTypes(),this._lastLog={}}get level(){return this.options.level}set level(t){this.options.level=nu(t,this.options.types,this.options.level)}prompt(t,s){if(!this.options.prompt)throw new Error("prompt is not supported!");return this.options.prompt(t,s)}create(t){let s=new e({...this.options,...t});return this._mockFn&&s.mockTypes(this._mockFn),s}withDefaults(t){return this.create({...this.options,defaults:{...this.options.defaults,...t}})}withTag(t){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+t:t})}addReporter(t){return this.options.reporters.push(t),this}removeReporter(t){if(t){let s=this.options.reporters.indexOf(t);if(s!==-1)return this.options.reporters.splice(s,1)}else this.options.reporters.splice(0);return this}setReporters(t){return this.options.reporters=Array.isArray(t)?t:[t],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let t in this.options.types)console["__"+t]||(console["__"+t]=console[t]),console[t]=this[t].raw}restoreConsole(){for(let t in this.options.types)console["__"+t]&&(console[t]=console["__"+t],delete console["__"+t])}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(t,s){t&&(t.__write||(t.__write=t.write),t.write=i=>{this[s].raw(String(i).trim())})}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(t){t&&t.__write&&(t.write=t.__write,delete t.__write)}pauseLogs(){ru=!0}resumeLogs(){ru=!1;let t=td.splice(0);for(let s of t)s[0]._logFn(s[1],s[2])}mockTypes(t){let s=t||this.options.mockFn;if(this._mockFn=s,typeof s=="function")for(let i in this.options.types)this[i]=s(i,this.options.types[i])||this[i],this[i].raw=this[i]}_wrapLogFn(t,s){return(...i)=>{if(ru){td.push([this,t,i,s]);return}return this._logFn(t,i,s)}}_logFn(t,s,i){if((t.level||0)>this.level)return!1;let r={date:new Date,args:[],...t,level:nu(t.level,this.options.types)};!i&&s.length===1&&Vb(s[0])?Object.assign(r,s[0]):r.args=[...s],r.message&&(r.args.unshift(r.message),delete r.message),r.additional&&(Array.isArray(r.additional)||(r.additional=r.additional.split(`
|
|
193
|
+
`)){let i=s.trim();if(!i||i.startsWith("#"))continue;let r=i.indexOf("=");if(r===-1)continue;let n=i.slice(0,r).trim();n.startsWith("export ")&&(n=n.slice(7).trim());let o=i.slice(r+1).trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),n&&!(n in process.env)&&(process.env[n]=o)}return t}function ga(e){if(!xD){xD=!0;try{let t=(0,AD.join)(e||process.cwd(),".env"),s=(0,SD.readFileSync)(t,"utf-8");gR(s)}catch{}}}function Me(e={}){ga();let t=e.env??process.env,s=e.executorOverride||e.config?.executor,i=s===xe||s===be?mR(s,t):ef(e.settings?.platform||e.config?.llm?.platform||t.PLATFORM),r=RD[i];return{platform:i,executor:s||ID(i),baseUrl:e.settings?.baseUrl||e.config?.llm?.baseUrl||t.BASE_URL||r.baseUrl,apiKey:e.settings?.apiKey||e.config?.llm?.apiKey||t.API_KEY||"",model:e.modelOverride||e.settings?.model||e.config?.llm?.model||t.MODEL||r.model}}function Pi(e){return Me({config:e})}function _D(){return ga(),ID(ef(process.env.PLATFORM))}var SD,AD,xe,be,Ti,gs,Qc,RD,xD,je=re(()=>{"use strict";SD=require("node:fs"),AD=require("node:path"),xe="openai-compatible-api",be="deepseek-api",Ti=be,gs=1800,Qc=0,RD={deepseek:{baseUrl:"https://api.deepseek.com",model:"deepseek-v4-flash"},openai:{baseUrl:"https://api.openai.com/v1",model:"gpt-5.4-mini"}};xD=!1});function Da(){return process.env.BEST_REVIEW_CONFIG_DIR||(0,an.join)((0,PD.homedir)(),".best-review")}function un(){return(0,an.join)(Da(),"config.json")}function AR(){return(0,an.join)(Da(),"instructions.md")}function ln(){return rf.parse({})}async function ya(e){try{return await(0,tt.access)(e),!0}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ENOENT")return!1;throw t}}async function kR(e){if(!await ya(e))return null;let s=await(0,tt.readFile)(e,"utf-8");try{return JSON.parse(s)}catch(i){let r=i instanceof SyntaxError?i.message:String(i);throw new Error(`\u914D\u7F6E\u6587\u4EF6 JSON \u65E0\u6548 ${e}\uFF1A${r}`,{cause:i})}}function sf(e){return e==="opencode-cli"?Ti:e}function IR(e){if(!e)return;let t={};for(let[s,i]of Object.entries(e)){let r=sf(s);typeof r=="string"&&(t[r]={...t[r],...i})}return t}function _R(e){return{...e,...sf(e.executor)!==void 0&&{executor:sf(e.executor)},executors:IR(e.executors)}}function $R(e,t){let s=_R(t);return{...e,...s.extends!==void 0&&{extends:s.extends},...s.excludePatterns!==void 0&&{excludePatterns:s.excludePatterns},...s.concurrency!==void 0&&{concurrency:s.concurrency},...s.executor!==void 0&&{executor:s.executor},llm:s.llm?{...e.llm,...s.llm}:e.llm,executors:s.executors?TR(e.executors,s.executors):e.executors,agents:s.agents?tf(e.agents,s.agents):e.agents,rules:s.rules?tf(e.rules,s.rules):e.rules,skills:s.skills?tf(e.skills,s.skills):e.skills,workflows:s.workflows??e.workflows,reporting:s.reporting?{...e.reporting,...s.reporting}:e.reporting,qualityScore:s.qualityScore?{...e.qualityScore,...s.qualityScore,weights:{...e.qualityScore.weights,...s.qualityScore.weights},categoryWeights:{...e.qualityScore.categoryWeights,...s.qualityScore.categoryWeights}}:e.qualityScore,output:s.output?{...e.output,...s.output}:e.output}}async function le(e){let t=Ne.CONFIG;return pt(t,async()=>{let s=ln(),i=await kR(un());return i&&(s=rf.parse($R(s,i))),s})}async function wa(e){try{await(0,tt.mkdir)(Da(),{recursive:!0}),await(0,tt.writeFile)(un(),JSON.stringify(rf.parse(e),null,2)),OD()}catch(t){throw new Error(`\u4FDD\u5B58\u5168\u5C40\u914D\u7F6E\u5931\u8D25\uFF1A${t}`)}}function TR(e,t){let s={...e};for(let[i,r]of Object.entries(t))s[i]={...s[i],...r,review:r.review?{...s[i]?.review,...r.review}:s[i]?.review,validation:r.validation?{...s[i]?.validation,...r.validation}:s[i]?.validation};return s}function tf(e,t){let s={...e};for(let[i,r]of Object.entries(t))s[i]={...s[i],...r};return s}function cn(){return un()}function nf(e){return(0,an.join)(e,RR)}async function of(){return ya(un())}async function BD(e){return ya(nf(e))}function OD(){CD(Ne.CONFIG),ma(Ne.INSTRUCTIONS)}async function ba(){return pt(Ne.INSTRUCTIONS,async()=>{try{let e=AR();return await ya(e)?await(0,tt.readFile)(e,"utf-8"):""}catch{return""}})}async function LD(e,t,s){let i=un(),r={};try{let o=await(0,tt.readFile)(i,"utf-8");r=JSON.parse(o)}catch{}let n=Array.isArray(r.extends)?r.extends.filter(o=>typeof o=="string"):[];r.extends=n,n.includes(e)||n.push(e),await(0,tt.mkdir)(Da(),{recursive:!0}),await(0,tt.writeFile)(i,JSON.stringify(r,null,2)),OD()}var an,PD,tt,$D,DR,TD,yR,wR,bR,vR,ER,FR,CR,xR,SR,rf,RR,Ge=re(()=>{"use strict";Zs();an=require("path"),PD=require("os"),tt=require("node:fs/promises");$i();je();$D=b.object({model:b.string().optional()}).strict(),DR=b.object({review:b.array($D).optional(),validation:b.array($D).optional()}),TD=b.object({model:b.string().optional(),timeout:b.number().positive().optional(),concurrency:b.number().min(1).max(10).optional(),batchSize:b.number().min(1).max(50).optional(),readinessPing:b.boolean().optional()}).strict(),yR=b.object({review:TD.optional(),validation:TD.optional()}).strict(),wR=b.object({platform:b.enum(["deepseek","openai"]).optional(),baseUrl:b.string().min(1).optional(),apiKey:b.string().optional(),model:b.string().min(1).optional()}).strict().default({}),bR=b.object({enabled:b.boolean().optional(),url:b.string().url().optional(),token:b.string().optional(),localDir:b.string().default(".best-review/reports"),includeDiffs:b.boolean().default(!1),failOnError:b.boolean().default(!1)}).default({}),vR=b.object({critical:b.number().nonnegative().default(40),high:b.number().nonnegative().default(15),medium:b.number().nonnegative().default(6),low:b.number().nonnegative().default(2)}).strict().default({}),ER=b.object({security:b.number().positive().default(1.2),bug:b.number().positive().default(1),performance:b.number().positive().default(.8),quality:b.number().positive().default(.7),style:b.number().positive().default(.4),docs:b.number().positive().default(.3)}).strict().default({}),FR=b.object({base:b.number().positive().default(100),min:b.number().min(0).default(0),weights:vR,categoryWeights:ER}).superRefine((e,t)=>{e.min>e.base&&t.addIssue({code:b.ZodIssueCode.custom,path:["min"],message:"qualityScore.min \u4E0D\u80FD\u5927\u4E8E qualityScore.base"})}).default({}),CR=b.object({enabled:b.boolean().optional(),model:b.string().optional(),timeout:b.number().positive().optional()}),xR=b.object({enabled:b.boolean().optional(),agent:b.string().optional()}),SR=b.object({enabled:b.boolean().optional()}).strict(),rf=b.object({extends:b.array(b.string()).default([]),excludePatterns:b.array(b.string()).default(["*.min.js","*.min.css","*.map","*.d.ts","dist/**","docs/**","*.md","build/**","out/**",".next/**","coverage/**","node_modules/**","vendor/**","*.generated.*","*.bundle.js"]),concurrency:b.number().min(1).max(10).default(2),executor:b.string().default(()=>_D()),llm:wR,executors:b.record(b.string(),yR).default({}),agents:b.record(b.string(),CR).default({}),rules:b.record(b.string(),xR).default({}),skills:b.record(b.string(),SR).default({}),workflows:DR.optional(),reporting:bR,qualityScore:FR,output:b.object({colorize:b.boolean().default(!0),verbose:b.boolean().default(!1),format:b.enum(["terminal","markdown","json"]).default("terminal")}).default({})}).superRefine((e,t)=>{let s=[xe,be];s.includes(e.executor)||t.addIssue({code:b.ZodIssueCode.custom,path:["executor"],message:`\u53EA\u652F\u6301\u6A21\u578B API executor\uFF1A${s.join(", ")}\u3002`});for(let i of Object.keys(e.executors))s.includes(i)||t.addIssue({code:b.ZodIssueCode.custom,path:["executors",i],message:`\u4E0D\u652F\u6301\u7684 executor\uFF1A${i}\u3002\u53EF\u7528\uFF1A${s.join(", ")}\u3002`})});RR=".best-review.json"});var hy={};er(hy,{expandBraces:()=>hf,loadRuleFromRef:()=>ff,loadRuleMarkdown:()=>ok,loadRuleRefs:()=>At,loadRules:()=>lk,loadRulesFromDirectoryRecursive:()=>ak,loadRulesFromRefs:()=>cy,matchAndLoadRules:()=>df,matchPattern:()=>ys,matchRuleRefs:()=>dy,matchRules:()=>ck,parseRuleMarkdown:()=>ly,parseSingleRule:()=>uk});function cf(e,t){let s=e.name,i=e.agent,r=e.patterns,n=t.trim(),o=typeof e.version=="string"||typeof e.version=="number"?String(e.version):void 0;return typeof s!="string"||typeof i!="string"||!Array.isArray(r)||r.length===0||!n?null:{name:s,description:typeof e.description=="string"?e.description:"",patterns:r.filter(u=>typeof u=="string"),agent:i,prompt:n,...o&&{version:o}}}function ly(e){return oa(e,cf)}async function ok(e){try{return await en(e,cf)}catch(t){return h.error(`Error loading rule markdown from ${e}:`,t),[]}}async function ak(e){return rD(e,cf)}function uk(e){let t=ly(e);return t.length>0?t[0]??null:null}async function At(e){let t=e||process.cwd(),s=await le(t);return(s.extends.length>0?await lD(t,s.extends):await aD(t)).map(r=>{let n=s.rules[r.name]||{};return{...r,agent:n.agent??r.agent,_enabled:n.enabled??!0}}).filter(r=>r._enabled!==!1).map(({_enabled:r,...n})=>n)}async function ff(e){try{let t=await(0,uy.readFile)(e.path,"utf-8"),{body:s}=Ps(t);return{name:e.name,description:e.description,patterns:e.patterns,agent:e.agent,prompt:s.trim(),...e.version&&{version:e.version},source:e.source,path:e.path}}catch(t){return h.error(`\u52A0\u8F7D\u89C4\u5219\u5931\u8D25 ${e.path}\uFF1A`,t),null}}async function cy(e){return(await Promise.all(e.map(ff))).filter(s=>s!==null)}async function lk(e){let t=await At(e);return cy(t)}function fy(e,t,s){let i=new Map(s.map(n=>[n.name,n])),r=[];for(let n of e){let o=i.get(n.agent);if(!o){h.warn(`\u89C4\u5219\u5F15\u7528\u4E86\u4E0D\u5B58\u5728\u7684 Agent\uFF1A"${n.agent}"`);continue}let a=t.filter(u=>n.patterns.some(l=>ys(u.file,l))).map(u=>u.file);a.length!==0&&r.push({item:n,files:a,agent:o})}return r}function dy(e,t,s){return fy(e,t,s).map(({item:i,...r})=>({ref:i,...r}))}async function df(e,t,s){let i=dy(e,t,s);return(await Promise.all(i.map(async({ref:n,files:o,agent:a})=>{let u=await ff(n);return u?{rule:u,files:o,agent:a}:null}))).filter(n=>n!==null)}function ck(e,t,s){return fy(e,t,s).map(({item:i,...r})=>({rule:i,...r}))}function hf(e){let t=e.match(fk);if(!t||t.index===void 0||!t[1])return[e];let s=t[1].split(",").map(o=>o.trim()),i=e.substring(0,t.index),r=e.substring(t.index+t[0].length),n=[];for(let o of s){let a=i+o+r;n.push(...hf(a))}return n}function ys(e,t){return hf(t).some(i=>dk(e,i))}function dk(e,t){let s=t.replace(/\*\*/g,"\0DOUBLESTAR\0").replace(/\*/g,"\0STAR\0").replace(/\?/g,"\0QUESTION\0");s=s.replace(/[.+^${}()|[\]\\]/g,"\\$&"),s=s.replace(/\x00DOUBLESTAR\x00\//g,"(?:.*\\/)?").replace(/\x00DOUBLESTAR\x00/g,".*").replace(/\x00STAR\x00/g,"[^/]*").replace(/\x00QUESTION\x00/g,".");let i=ay.get(s);return i||(i=new RegExp(`^${s}$`),ay.set(s,i)),i.test(e)}var uy,fk,ay,ws=re(()=>{"use strict";Fi();uy=require("node:fs/promises");M();Ge();fk=/\{([^}]+)\}/;ay=new Map});var Ee={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},ou={silent:{level:-1},fatal:{level:Ee.fatal},error:{level:Ee.error},warn:{level:Ee.warn},log:{level:Ee.log},info:{level:Ee.info},success:{level:Ee.success},fail:{level:Ee.fail},ready:{level:Ee.info},start:{level:Ee.info},box:{level:Ee.info},debug:{level:Ee.debug},trace:{level:Ee.trace},verbose:{level:Ee.verbose}};function iu(e){if(e===null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function au(e,t,s=".",i){if(!iu(t))return au(e,{},s,i);let r=Object.assign({},t);for(let n in e){if(n==="__proto__"||n==="constructor")continue;let o=e[n];o!=null&&(i&&i(r,n,o,s)||(Array.isArray(o)&&Array.isArray(r[n])?r[n]=[...o,...r[n]]:iu(o)&&iu(r[n])?r[n]=au(o,r[n],(s?`${s}.`:"")+n.toString(),i):r[n]=o))}return r}function jb(e){return(...t)=>t.reduce((s,i)=>au(s,i,"",e),{})}var qb=jb();function Ub(e){return Object.prototype.toString.call(e)==="[object Object]"}function Vb(e){return!(!Ub(e)||!e.message&&!e.args||e.stack)}var ru=!1,td=[],me=class e{options;_lastLog;_mockFn;constructor(t={}){let s=t.types||ou;this.options=qb({...t,defaults:{...t.defaults},level:nu(t.level,s),reporters:[...t.reporters||[]]},{types:ou,throttle:1e3,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let i in s){let r={type:i,...this.options.defaults,...s[i]};this[i]=this._wrapLogFn(r),this[i].raw=this._wrapLogFn(r,!0)}this.options.mockFn&&this.mockTypes(),this._lastLog={}}get level(){return this.options.level}set level(t){this.options.level=nu(t,this.options.types,this.options.level)}prompt(t,s){if(!this.options.prompt)throw new Error("prompt is not supported!");return this.options.prompt(t,s)}create(t){let s=new e({...this.options,...t});return this._mockFn&&s.mockTypes(this._mockFn),s}withDefaults(t){return this.create({...this.options,defaults:{...this.options.defaults,...t}})}withTag(t){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+t:t})}addReporter(t){return this.options.reporters.push(t),this}removeReporter(t){if(t){let s=this.options.reporters.indexOf(t);if(s!==-1)return this.options.reporters.splice(s,1)}else this.options.reporters.splice(0);return this}setReporters(t){return this.options.reporters=Array.isArray(t)?t:[t],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let t in this.options.types)console["__"+t]||(console["__"+t]=console[t]),console[t]=this[t].raw}restoreConsole(){for(let t in this.options.types)console["__"+t]&&(console[t]=console["__"+t],delete console["__"+t])}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(t,s){t&&(t.__write||(t.__write=t.write),t.write=i=>{this[s].raw(String(i).trim())})}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(t){t&&t.__write&&(t.write=t.__write,delete t.__write)}pauseLogs(){ru=!0}resumeLogs(){ru=!1;let t=td.splice(0);for(let s of t)s[0]._logFn(s[1],s[2])}mockTypes(t){let s=t||this.options.mockFn;if(this._mockFn=s,typeof s=="function")for(let i in this.options.types)this[i]=s(i,this.options.types[i])||this[i],this[i].raw=this[i]}_wrapLogFn(t,s){return(...i)=>{if(ru){td.push([this,t,i,s]);return}return this._logFn(t,i,s)}}_logFn(t,s,i){if((t.level||0)>this.level)return!1;let r={date:new Date,args:[],...t,level:nu(t.level,this.options.types)};!i&&s.length===1&&Vb(s[0])?Object.assign(r,s[0]):r.args=[...s],r.message&&(r.args.unshift(r.message),delete r.message),r.additional&&(Array.isArray(r.additional)||(r.additional=r.additional.split(`
|
|
194
194
|
`)),r.args.push(`
|
|
195
195
|
`+r.additional.join(`
|
|
196
196
|
`)),delete r.additional),r.type=typeof r.type=="string"?r.type.toLowerCase():"log",r.tag=typeof r.tag=="string"?r.tag:"";let n=(a=!1)=>{let u=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&u>0){let l=[...this._lastLog.object.args];u>1&&l.push(`(repeated ${u} times)`),this._log({...this._lastLog.object,args:l}),this._lastLog.count=1}a&&(this._lastLog.object=r,this._log(r))};clearTimeout(this._lastLog.timeout);let o=this._lastLog.time&&r.date?r.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=r.date,o<this.options.throttle)try{let a=JSON.stringify([r.type,r.tag,r.args]),u=this._lastLog.serialized===a;if(this._lastLog.serialized=a,u&&(this._lastLog.count=(this._lastLog.count||0)+1,this._lastLog.count>this.options.throttleMin)){this._lastLog.timeout=setTimeout(n,this.options.throttle);return}}catch{}n(!0)}_log(t){for(let s of this.options.reporters)s.log(t,{options:this.options})}};function nu(e,t={},s=3){return e===void 0?s:typeof e=="number"?e:t[e]&&t[e].level!==void 0?t[e].level:s}me.prototype.add=me.prototype.addReporter;me.prototype.remove=me.prototype.removeReporter;me.prototype.clear=me.prototype.removeReporter;me.prototype.withScope=me.prototype.withTag;me.prototype.mock=me.prototype.mockTypes;me.prototype.pause=me.prototype.pauseLogs;me.prototype.resume=me.prototype.resumeLogs;function sd(e={}){return new me(e)}var lu=require("node:util"),id=require("node:path");function cu(e,t){let s=process.cwd()+id.sep;return e.split(`
|
|
@@ -219,7 +219,7 @@ ${r}`)}formatType(t,s,i){let r=bE[t.type]||vE[t.level]||"gray";if(s)return CE(r)
|
|
|
219
219
|
`)}function at(e){return typeof e=="function"?e():e}var Ht=class extends Error{constructor(t,s){super(t),this.code=s,this.name="CLIError"}},kE=/\d/,IE=["-","_","/","."];function _E(e=""){if(!kE.test(e))return e!==e.toLowerCase()}function Nd(e,t){let s=t??IE,i=[];if(!e||typeof e!="string")return i;let r="",n,o;for(let a of e){let u=s.includes(a);if(u===!0){i.push(r),r="",n=void 0;continue}let l=_E(a);if(o===!1){if(n===!1&&l===!0){i.push(r),r=a,n=l;continue}if(n===!0&&l===!1&&r.length>1){let c=r.at(-1);i.push(r.slice(0,Math.max(0,r.length-1))),r=c+a,n=l;continue}}r+=a,n=l,o=u}return i.push(r),i}function $E(e){return e?e[0].toUpperCase()+e.slice(1):""}function TE(e){return e?e[0].toLowerCase()+e.slice(1):""}function PE(e,t){return e?(Array.isArray(e)?e:Nd(e)).map(s=>$E(t?.normalize?s.toLowerCase():s)).join(""):""}function BE(e,t){return TE(PE(e||"",t))}function OE(e,t){return e?(Array.isArray(e)?e:Nd(e)).map(s=>s.toLowerCase()).join(t??"-"):""}function ku(e){return e==null?[]:Array.isArray(e)?e:[e]}function LE(e,t,s,i){let r,n=e[t],o=~i.string.indexOf(t)?s==null||s===!0?"":String(s):typeof s=="boolean"?s:~i.boolean.indexOf(t)?s==="false"?!1:s==="true"||(e._.push((r=+s,r*0===0?r:s)),!!s):(r=+s,r*0===0?r:s);e[t]=n==null?o:Array.isArray(n)?n.concat(o):[n,o]}function NE(e=[],t={}){let s,i,r,n,o,a={_:[]},u=0,l=0,c=0,f=e.length,d=t.alias!==void 0,p=t.unknown!==void 0,m=t.default!==void 0;if(t.alias=t.alias||{},t.string=ku(t.string),t.boolean=ku(t.boolean),d)for(s in t.alias)for(i=t.alias[s]=ku(t.alias[s]),u=0;u<i.length;u++)(t.alias[i[u]]=i.concat(s)).splice(u,1);for(u=t.boolean.length;u-- >0;)for(i=t.alias[t.boolean[u]]||[],l=i.length;l-- >0;)t.boolean.push(i[l]);for(u=t.string.length;u-- >0;)for(i=t.alias[t.string[u]]||[],l=i.length;l-- >0;)t.string.push(i[l]);if(m){for(s in t.default)if(n=typeof t.default[s],i=t.alias[s]=t.alias[s]||[],t[n]!==void 0)for(t[n].push(s),u=0;u<i.length;u++)t[n].push(i[u])}let g=p?Object.keys(t.alias):[];for(u=0;u<f;u++){if(r=e[u],r==="--"){a._=a._.concat(e.slice(++u));break}for(l=0;l<r.length&&r.charCodeAt(l)===45;l++);if(l===0)a._.push(r);else if(r.substring(l,l+3)==="no-"){if(n=r.slice(Math.max(0,l+3)),p&&!~g.indexOf(n))return t.unknown(r);a[n]=!1}else{for(c=l+1;c<r.length&&r.charCodeAt(c)!==61;c++);for(n=r.substring(l,c),o=r.slice(Math.max(0,++c))||u+1===f||(""+e[u+1]).charCodeAt(0)===45||e[++u],i=l===2?[n]:n,c=0;c<i.length;c++){if(n=i[c],p&&!~g.indexOf(n))return t.unknown("-".repeat(l)+n);LE(a,n,c+1<i.length||o,t)}}}if(m)for(s in t.default)a[s]===void 0&&(a[s]=t.default[s]);if(d)for(s in a)for(i=t.alias[s]||[];i.length>0;)a[i.shift()]=a[s];return a}function ME(e,t){let s={boolean:[],string:[],mixed:[],alias:{},default:{}},i=Md(t);for(let a of i)a.type!=="positional"&&(a.type==="string"?s.string.push(a.name):a.type==="boolean"&&s.boolean.push(a.name),a.default!==void 0&&(s.default[a.name]=a.default),a.alias&&(s.alias[a.name]=a.alias));let r=NE(e,s),[...n]=r._,o=new Proxy(r,{get(a,u){return a[u]??a[BE(u)]??a[OE(u)]}});for(let[,a]of i.entries())if(a.type==="positional"){let u=n.shift();if(u!==void 0)o[a.name]=u;else{if(a.default===void 0&&a.required!==!1)throw new Ht(`Missing required positional argument: ${a.name.toUpperCase()}`,"EARG");o[a.name]=a.default}}else if(a.required&&o[a.name]===void 0)throw new Ht(`Missing required argument: --${a.name}`,"EARG");return o}function Md(e){let t=[];for(let[s,i]of Object.entries(e||{}))t.push({...i,name:s,alias:RE(i.alias)});return t}async function jd(e,t){let s=await at(e.args||{}),i=ME(t.rawArgs,s),r={rawArgs:t.rawArgs,args:i,data:t.data,cmd:e};typeof e.setup=="function"&&await e.setup(r);let n;try{let o=await at(e.subCommands);if(o&&Object.keys(o).length>0){let a=t.rawArgs.findIndex(l=>!l.startsWith("-")),u=t.rawArgs[a];if(u){if(!o[u])throw new Ht(`Unknown command \`${u}\``,"E_UNKNOWN_COMMAND");let l=await at(o[u]);l&&await jd(l,{rawArgs:t.rawArgs.slice(a+1)})}else if(!e.run)throw new Ht("No command specified.","E_NO_COMMAND")}typeof e.run=="function"&&(n=await e.run(r))}finally{typeof e.cleanup=="function"&&await e.cleanup(r)}return{result:n}}async function Iu(e,t,s){let i=await at(e.subCommands);if(i&&Object.keys(i).length>0){let r=t.findIndex(a=>!a.startsWith("-")),n=t[r],o=await at(i[n]);if(o)return Iu(o,t.slice(r+1),e)}return[e,s]}async function jE(e,t){try{oi.log(await qE(e,t)+`
|
|
220
220
|
`)}catch(s){oi.error(s)}}async function qE(e,t){let s=await at(e.meta||{}),i=Md(await at(e.args||{})),r=await at(t?.meta||{}),n=`${r.name?`${r.name} `:""}`+(s.name||process.argv[1]),o=[],a=[],u=[],l=[];for(let p of i)if(p.type==="positional"){let m=p.name.toUpperCase(),g=p.required!==!1&&p.default===void 0,D=p.default?`="${p.default}"`:"";a.push(["`"+m+D+"`",p.description||"",p.valueHint?`<${p.valueHint}>`:""]),l.push(g?`<${m}>`:`[${m}]`)}else{let m=p.required===!0&&p.default===void 0,g=(p.type==="boolean"&&p.default===!0?[...(p.alias||[]).map(D=>`--no-${D}`),`--no-${p.name}`].join(", "):[...(p.alias||[]).map(D=>`-${D}`),`--${p.name}`].join(", "))+(p.type==="string"&&(p.valueHint||p.default)?`=${p.valueHint?`<${p.valueHint}>`:`"${p.default||""}"`}`:"");o.push(["`"+g+(m?" (required)":"")+"`",p.description||""]),m&&l.push(g)}if(e.subCommands){let p=[],m=await at(e.subCommands);for(let[g,D]of Object.entries(m)){let w=await at(D),y=await at(w?.meta);u.push([`\`${g}\``,y?.description||""]),p.push(g)}l.push(p.join("|"))}let c=[],f=s.version||r.version;c.push(ee.gray(`${s.description} (${n+(f?` v${f}`:"")})`),"");let d=o.length>0||a.length>0;return c.push(`${ee.underline(ee.bold("USAGE"))} \`${n}${d?" [OPTIONS]":""} ${l.join(" ")}\``,""),a.length>0&&(c.push(ee.underline(ee.bold("ARGUMENTS")),""),c.push(Ru(a," ")),c.push("")),o.length>0&&(c.push(ee.underline(ee.bold("OPTIONS")),""),c.push(Ru(o," ")),c.push("")),u.length>0&&(c.push(ee.underline(ee.bold("COMMANDS")),""),c.push(Ru(u," ")),c.push("",`Use \`${n} <command> --help\` for more information about a command.`)),c.filter(p=>typeof p=="string").join(`
|
|
221
221
|
`)}async function qd(e,t={}){let s=t.rawArgs||process.argv.slice(2),i=t.showUsage||jE;try{if(s.includes("--help")||s.includes("-h"))await i(...await Iu(e,s)),process.exit(0);else if(s.length===1&&s[0]==="--version"){let r=typeof e.meta=="function"?await e.meta():await e.meta;if(!r?.version)throw new Ht("No version specified","E_NO_VERSION");oi.log(r.version)}else await jd(e,{rawArgs:s})}catch(r){let n=r instanceof Ht;n||oi.error(r,`
|
|
222
|
-
`),n&&await i(...await Iu(e,s)),oi.error(r.message),process.exit(1)}}var ai={name:"best-review",version:"0.5.
|
|
222
|
+
`),n&&await i(...await Iu(e,s)),oi.error(r.message),process.exit(1)}}var ai={name:"best-review",version:"0.5.6",description:"AI-powered code review CLI for git changes",author:"Jericho Ding",license:"MIT",type:"module",bin:{"best-review":"dist/best-review.cjs",br:"dist/best-review.cjs"},files:["dist/best-review.cjs","dist/defaults","src/defaults"],scripts:{dev:"npx tsx ./bin/best-review.ts",build:"node build.mjs","link:local":"npm run build && npm link","link:publish":"npm run build && npm link",link:"npm link",unlink:"npm unlink",test:"vitest run","test:watch":"vitest","ts-check":"tsc --noEmit",lint:"eslint .","lint:fix":"eslint . --fix",format:"prettier --write .","format:check":"prettier --check .",prepublishOnly:"npm run build",prepare:"husky"},keywords:["code-review","ai","cli","git","diff","llm","openai-compatible","deepseek","pull-request"],engines:{node:">=18.0.0"},os:["darwin","linux","win32"],cpu:["x64","arm64"],devDependencies:{"@eslint/js":"^9.39.2","@types/node":"^22.15.21","@typescript-eslint/eslint-plugin":"^8.52.0","@typescript-eslint/parser":"^8.52.0",esbuild:"^0.25.0",eslint:"^9.39.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4",husky:"^9.1.0","lint-staged":"^15.5.0",prettier:"^3.7.4",tsx:"^4.19.0",vitest:"^3.1.0"},"lint-staged":{"*.{ts,tsx,js,jsx}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":["prettier --write"]},peerDependencies:{typescript:"^5"},dependencies:{citty:"^0.1.6",diff:"^8.0.2",glob:"^13.0.0",yaml:"^2.8.2",zod:"^3.22.4"}};Wc();Fi();Ge();je();async function We(e){let t=typeof e=="string"?{projectPath:e}:e||{},s=t.projectPath||process.cwd(),i=await le(s),r=i.extends.length>0?await uD("agents",Qr,s,i.extends):await oD("agents",Qr,s),n=t.executorOverride||i.executor,o=i.executors[n]||{},a=t.modelOverride;return r.map(u=>{let l=u.stage||"review",c=o[l]||{},f=a??(typeof c.model=="string"?c.model:void 0),d={...Me({executorOverride:n,modelOverride:f,config:i}),...c,...f&&{model:f}},p=i.agents[u.name]||{};return{...u,executor:u.executor||n,executorSettings:{...d,...u.executorSettings,...p.model&&{model:p.model},...p.timeout&&{timeout:p.timeout},...a&&{model:a}},enabled:p.enabled??u.enabled}}).filter(u=>u.enabled!==!1)}M();function PR(e){return!e||Object.keys(e).length===0?"-":Object.entries(e).map(([t,s])=>`${t}=${s}`).join(", ")}async function ND(){let e=await We(process.cwd());if(h.robot("\u53EF\u7528 Agent"),h.newline(),e.length===0){h.plain("\u6CA1\u6709\u914D\u7F6E Agent");return}for(let t of e){let s=t.enabled?"\u25CF":"\u25CB",i=t.stage||"review",r=rr(t.path);h.plain(`${s} ${t.name} (${i})`),h.plain(` \u6267\u884C\u5668\uFF1A${t.executor}`),t.executorSettings&&Object.keys(t.executorSettings).length>0&&h.plain(` \u8BBE\u7F6E\uFF1A${PR(t.executorSettings)}`),h.plain(` \u8DEF\u5F84\uFF1A${r}`),h.newline()}}async function MD(e){let s=(await We(process.cwd())).find(i=>i.name===e);if(s||(h.error(`Agent \u4E0D\u5B58\u5728\uFF1A${e}`),process.exit(1)),h.robot(`Agent\uFF1A${s.name}`),h.newline(),h.plain(`\u8BF4\u660E\uFF1A${s.description}`),h.plain(`\u542F\u7528\uFF1A${s.enabled?"\u662F":"\u5426"}`),h.plain(`\u987A\u5E8F\uFF1A${s.order}`),h.plain(`\u9636\u6BB5\uFF1A${s.stage||"review"}`),h.plain(`\u6267\u884C\u5668\uFF1A${s.executor}`),h.plain(`\u8DEF\u5F84\uFF1A${rr(s.path)}`),s.executorSettings&&Object.keys(s.executorSettings).length>0){h.newline(),h.plain("\u6267\u884C\u5668\u8BBE\u7F6E\uFF1A");for(let[i,r]of Object.entries(s.executorSettings))h.plain(` ${i}: ${r}`)}h.newline(),h.plain("\u7CFB\u7EDF Prompt\uFF1A"),h.separator("\u2500"),h.plain(s.systemPrompt||"\uFF08\u65E0 prompt\uFF09"),h.separator("\u2500")}var jD={meta:{name:"agents",description:`\u5217\u51FA Agent\uFF0C\u6216\u67E5\u770B\u67D0\u4E2A Agent \u7684\u8BE6\u60C5
|
|
223
223
|
|
|
224
224
|
Examples:
|
|
225
225
|
best-review agents # \u5217\u51FA\u6240\u6709 Agent
|
|
@@ -421,14 +421,14 @@ ${e}`}function I_(e){return typeof e=="string"&&e.includes(dw)}function __(e){le
|
|
|
421
421
|
Examples:
|
|
422
422
|
best-review eval
|
|
423
423
|
best-review eval evals/golden --json
|
|
424
|
-
best-review eval --model gpt-
|
|
424
|
+
best-review eval --model gpt-5.4-mini --min-recall 0.9 --min-precision 0.75 --max-duplicate-rate 0.25`},args:{path:{type:"positional",required:!1,description:"fixture \u6587\u4EF6\u6216\u76EE\u5F55\uFF08\u9ED8\u8BA4 evals/golden\uFF09"},json:{type:"boolean",description:"\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u8BC4\u6D4B\u62A5\u544A"},executor:{type:"string",description:"\u8986\u76D6\u6267\u884C\u5668\uFF08openai-compatible-api \u6216 deepseek-api\uFF09"},model:{type:"string",description:"\u8986\u76D6\u6A21\u578B"},agent:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF09"},rule:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF09"},confidence:{type:"string",description:"\u6700\u5C0F\u7F6E\u4FE1\u5EA6\u9608\u503C 0-100"},"use-cache":{type:"boolean",description:"\u5141\u8BB8\u4F7F\u7528 review/validation \u7F13\u5B58\uFF08\u9ED8\u8BA4\u7981\u7528\uFF0C\u786E\u4FDD\u5B9E\u65F6\u8DD1\u6A21\u578B\uFF09"},"min-precision":{type:"string",description:"\u805A\u5408 precision \u95E8\u7981\u9608\u503C\uFF0C0-1"},"min-recall":{type:"string",description:"\u805A\u5408 recall \u95E8\u7981\u9608\u503C\uFF0C0-1"},"max-duplicate-rate":{type:"string",description:"\u805A\u5408\u539F\u59CB\u91CD\u590D\u7387\u4E0A\u9650\uFF0C0-1"}},run:async({args:e})=>{try{await _w({fixturePath:e.path,json:e.json,executor:e.executor,model:e.model,agent:e.agent,rule:e.rule,confidence:e.confidence,useCache:e["use-cache"],minPrecision:e["min-precision"],minRecall:e["min-recall"],maxDuplicateRate:e["max-duplicate-rate"]})}catch(t){let s=t instanceof Error?t.message:String(t);e.json?console.error(JSON.stringify({error:s})):console.error(s),process.exit(1)}}};Ge();M();Pc();ta();Mc();Vc();na();async function Tw(e={}){let t=e.projectPath||process.cwd(),s;if(e.url?s=[e.url]:s=(await le(t)).extends,s.length===0){h.info("\u6CA1\u6709\u914D\u7F6E extends\u3002\u53EF\u4EE5\u5728 ~/.best-review/config.json \u4E2D\u6DFB\u52A0\uFF1A"),h.info(' { "extends": ["https://github.com/owner/repo"] }'),h.info("\u4E5F\u53EF\u4EE5\u76F4\u63A5\u5B89\u88C5\uFF1Abest-review extends install https://github.com/owner/repo");return}h.info(`\u6B63\u5728\u5B89\u88C5 ${s.length} \u4E2A\u6269\u5C55...`),h.info("");let i=qt(4),r=s.map(l=>i(async()=>{let c=Xo(l);if(!c)return h.error(`Git URL \u65E0\u6548\uFF1A${l}`),h.info(" \u671F\u671B\u683C\u5F0F\uFF1Ahttps://github.com/owner/repo \u6216 git@host:owner/repo"),h.info(" \u53EF\u9009 ref\uFF1Ahttps://github.com/owner/repo#v1.0"),{status:"error",displayRef:l};let f=Qo(c),d=c.ref?`${f}#${c.ref}`:f;if(!e.force&&await sa(l))return h.info(` ${d} - \u5DF2\u5B89\u88C5`),{status:"skipped",displayRef:d};try{h.info(` ${d} - \u6B63\u5728 clone...`);let p=Oc(c,l),m=await jc(p),g=await qc(p.localPath);return await Lc(l,{url:c.url,ref:c.ref,resolvedRef:m,downloadedAt:new Date().toISOString(),path:p.localPath,agents:g.agents,rules:g.rules}),h.success(` ${d} - \u5DF2\u5B89\u88C5\uFF08${g.agents.length} \u4E2A Agent\uFF0C${g.rules.length} \u6761\u89C4\u5219\uFF09`),{status:"success",displayRef:d}}catch(p){let m=p instanceof Error?p.message:String(p);return h.error(` ${d} - \u5931\u8D25\uFF1A${m}`),{status:"error",displayRef:d,message:m}}})),n=await Promise.all(r),o=n.filter(l=>l.status==="success").length,a=n.filter(l=>l.status==="skipped").length,u=n.filter(l=>l.status==="error").length;e.url&&o>0&&(await LD(e.url,!!e.global,t),h.success("\u5DF2\u6DFB\u52A0\u5230\u7528\u6237\u7EA7\u914D\u7F6E")),h.info(""),h.info(`\u5B8C\u6210\uFF1A${o} \u4E2A\u5DF2\u5B89\u88C5\uFF0C${a} \u4E2A\u5DF2\u8DF3\u8FC7\uFF0C${u} \u4E2A\u5931\u8D25`)}async function Pw(){let e=await Bt(),t=Object.entries(e.packages);if(t.length===0){h.info("\u5C1A\u672A\u5B89\u88C5 extends\u3002"),h.info("\u8FD0\u884C `best-review extends install` \u53EF\u6309\u914D\u7F6E\u5B89\u88C5\u3002");return}h.info(`\u5DF2\u5B89\u88C5 extends\uFF08${t.length}\uFF09\uFF1A`),h.info("");for(let[s,i]of t){let r=i.agents.length,n=i.rules.length,o=i.resolvedRef.slice(0,7);h.info(` ${s}`),h.info(` Commit\uFF1A${o}`),h.info(` Agent\uFF1A${r>0?i.agents.join(", "):"\uFF08\u65E0\uFF09"}`),h.info(` \u89C4\u5219\uFF1A${n>0?i.rules.join(", "):"\uFF08\u65E0\uFF09"}`),h.info(` \u4E0B\u8F7D\u65F6\u95F4\uFF1A${i.downloadedAt}`),h.info("")}}async function Bw(e){let t=Xo(e);if(!t){h.error(`Git URL \u65E0\u6548\uFF1A${e}`);return}if(!await sa(e)){h.error(`\u6269\u5C55\u5C1A\u672A\u5B89\u88C5\uFF1A${e}`);return}let i=(await Bt()).packages[e];if(i){await Uc(i.path),await Nc(e);let r=Qo(t);h.success(`\u5DF2\u79FB\u9664\uFF1A${r}`)}}var Ow={meta:{name:"extends",description:`\u7BA1\u7406 extends\uFF08\u4ECE Git \u52A0\u8F7D\u5916\u90E8 Agent \u548C\u89C4\u5219\uFF09
|
|
425
425
|
|
|
426
426
|
Examples:
|
|
427
427
|
best-review extends install # \u6309\u914D\u7F6E\u5B89\u88C5
|
|
428
428
|
best-review extends install https://github.com/org/repo # \u5B89\u88C5\u6307\u5B9A URL
|
|
429
429
|
best-review extends install --force # \u5F3A\u5236\u91CD\u65B0 clone
|
|
430
430
|
best-review extends list # \u5217\u51FA\u5DF2\u5B89\u88C5\u9879
|
|
431
|
-
best-review extends remove https://github.com/org/repo # \u79FB\u9664`},subCommands:{install:{meta:{description:"\u4ECE\u914D\u7F6E\u6216\u6307\u5B9A URL \u5B89\u88C5 extends"},args:{url:{type:"positional",description:"\u8981\u5B89\u88C5\u7684 Git URL\uFF08\u53EF\u9009\uFF1B\u672A\u63D0\u4F9B\u65F6\u8BFB\u53D6\u914D\u7F6E\uFF09",required:!1},force:{type:"boolean",description:"\u5373\u4F7F\u5DF2\u5B89\u88C5\u4E5F\u5F3A\u5236\u91CD\u65B0\u4E0B\u8F7D",alias:"f"},global:{type:"boolean",description:"\u517C\u5BB9\u65E7\u53C2\u6570\uFF1Bextends \u73B0\u5728\u59CB\u7EC8\u5199\u5165 ~/.best-review/config.json",alias:"g"}},run:async({args:e})=>{await Tw({force:e.force,url:e.url,global:e.global})}},list:{meta:{description:"\u5217\u51FA\u5DF2\u5B89\u88C5\u7684 extends"},run:async()=>{await Pw()}},remove:{meta:{description:"\u79FB\u9664\u5DF2\u5B89\u88C5\u7684 extend"},args:{ref:{type:"positional",description:"Git URL\uFF08\u4F8B\u5982 https://github.com/owner/repo\uFF09",required:!0}},run:async({args:e})=>{if(!e.ref)throw new Error("\u5FC5\u987B\u63D0\u4F9B extend \u5F15\u7528");await Bw(e.ref)}}}};var Zi=require("node:process"),Nw=require("node:readline/promises");Ge();je();M();function Lw(e){let t=e?.trim().toLowerCase();if(t){if(["openai","openai-compatible",xe].includes(t))return"openai";if(["deepseek",be].includes(t))return"deepseek"}}function f$(e){return e==="openai"?xe:be}async function Wa(e,t){let s=(0,Nw.createInterface)({input:Zi.stdin,output:Zi.stdout});try{let i=t?` (${t})`:"";return(await s.question(`${e}${i}: `)).trim()||t||""}finally{s.close()}}function d$(e,t){return{...e,executor:t,executors:{...e.executors,[xe]:{...e.executors[xe],review:{concurrency:2,...e.executors[xe]?.review},validation:{timeout:gs,batchSize:10,concurrency:1,...e.executors[xe]?.validation}},[be]:{...e.executors[be],review:{concurrency:2,...e.executors[be]?.review},validation:{timeout:gs,batchSize:10,concurrency:1,...e.executors[be]?.validation}}}}}async function Mw(e={}){let t=e.projectPath||process.cwd(),s=e.interactive!==!1&&Zi.stdin.isTTY&&Zi.stdout.isTTY,i=Lw(e.provider);if(e.provider&&!i){h.error("\u4E0D\u652F\u6301\u7684\u6A21\u578B\u670D\u52A1\u3002\u8BF7\u4F7F\u7528 openai \u6216 deepseek\u3002"),process.exitCode=1;return}if(!i&&s)for(;!i;)i=Lw(await Wa("\u9009\u62E9\u6A21\u578B\u670D\u52A1\uFF1Aopenai \u6216 deepseek","deepseek")),i||h.warn("\u8BF7\u8F93\u5165 openai \u6216 deepseek\u3002");i??="deepseek";let r=kD(i),n=e.baseUrl||(s?await Wa("BASE_URL",r.baseUrl):r.baseUrl),o=e.apiKey||process.env.API_KEY||"";s&&(o=await Wa("API_KEY",o));let a=e.model||(s?await Wa("MODEL",r.model):r.model);if(!o){h.error("\u7F3A\u5C11 API_KEY\u3002\u8BF7\u91CD\u65B0\u8FD0\u884C best-review init \u5E76\u586B\u5199 API Key\u3002"),process.exitCode=1;return}let u=f$(i),l=e.force?ln():await le(),c=d$(l,u);c.llm={platform:i,baseUrl:n,apiKey:o,model:a},await wa(c);let f=cn(),d={configPath:f,platform:i,executor:u,baseUrl:n,model:a,apiKeySet:!!o};return h.success("\u9879\u76EE\u521D\u59CB\u5316\u5B8C\u6210"),h.plain(`\u914D\u7F6E\uFF1A${f}`),h.plain(`\u5E73\u53F0\uFF1A${i}`),h.plain(`Base URL\uFF1A${n}`),h.plain(`\u6A21\u578B\uFF1A${a}`),h.plain(`API Key\uFF1A${d.apiKeySet?"\u5DF2\u5199\u5165\u7528\u6237\u7EA7 config.json":"\u672A\u8BBE\u7F6E"}`),e.runDoctor!==!1&&await ji({projectPath:t}),d}var jw={meta:{name:"init",description:"\u521D\u59CB\u5316\u7528\u6237\u7EA7 best-review \u914D\u7F6E\u548C\u6A21\u578B\u670D\u52A1"},args:{force:{type:"boolean",description:"\u7528\u9ED8\u8BA4\u503C\u91CD\u5EFA\u7528\u6237\u7EA7 ~/.best-review/config.json",alias:"f"},provider:{type:"string",description:"\u6A21\u578B\u670D\u52A1\uFF1Aopenai \u6216 deepseek"},"base-url":{type:"string",description:"\u6A21\u578B\u670D\u52A1 Base URL"},"api-key":{type:"string",description:"\u6A21\u578B\u670D\u52A1 API Key\uFF0C\u4F1A\u5199\u5165\u7528\u6237\u7EA7 config.json"},model:{type:"string",description:"\u6A21\u578B\u540D\u79F0\uFF0C\u4F8B\u5982 gpt-
|
|
431
|
+
best-review extends remove https://github.com/org/repo # \u79FB\u9664`},subCommands:{install:{meta:{description:"\u4ECE\u914D\u7F6E\u6216\u6307\u5B9A URL \u5B89\u88C5 extends"},args:{url:{type:"positional",description:"\u8981\u5B89\u88C5\u7684 Git URL\uFF08\u53EF\u9009\uFF1B\u672A\u63D0\u4F9B\u65F6\u8BFB\u53D6\u914D\u7F6E\uFF09",required:!1},force:{type:"boolean",description:"\u5373\u4F7F\u5DF2\u5B89\u88C5\u4E5F\u5F3A\u5236\u91CD\u65B0\u4E0B\u8F7D",alias:"f"},global:{type:"boolean",description:"\u517C\u5BB9\u65E7\u53C2\u6570\uFF1Bextends \u73B0\u5728\u59CB\u7EC8\u5199\u5165 ~/.best-review/config.json",alias:"g"}},run:async({args:e})=>{await Tw({force:e.force,url:e.url,global:e.global})}},list:{meta:{description:"\u5217\u51FA\u5DF2\u5B89\u88C5\u7684 extends"},run:async()=>{await Pw()}},remove:{meta:{description:"\u79FB\u9664\u5DF2\u5B89\u88C5\u7684 extend"},args:{ref:{type:"positional",description:"Git URL\uFF08\u4F8B\u5982 https://github.com/owner/repo\uFF09",required:!0}},run:async({args:e})=>{if(!e.ref)throw new Error("\u5FC5\u987B\u63D0\u4F9B extend \u5F15\u7528");await Bw(e.ref)}}}};var Zi=require("node:process"),Nw=require("node:readline/promises");Ge();je();M();function Lw(e){let t=e?.trim().toLowerCase();if(t){if(["openai","openai-compatible",xe].includes(t))return"openai";if(["deepseek",be].includes(t))return"deepseek"}}function f$(e){return e==="openai"?xe:be}async function Wa(e,t){let s=(0,Nw.createInterface)({input:Zi.stdin,output:Zi.stdout});try{let i=t?` (${t})`:"";return(await s.question(`${e}${i}: `)).trim()||t||""}finally{s.close()}}function d$(e,t){return{...e,executor:t,executors:{...e.executors,[xe]:{...e.executors[xe],review:{concurrency:2,...e.executors[xe]?.review},validation:{timeout:gs,batchSize:10,concurrency:1,...e.executors[xe]?.validation}},[be]:{...e.executors[be],review:{concurrency:2,...e.executors[be]?.review},validation:{timeout:gs,batchSize:10,concurrency:1,...e.executors[be]?.validation}}}}}async function Mw(e={}){let t=e.projectPath||process.cwd(),s=e.interactive!==!1&&Zi.stdin.isTTY&&Zi.stdout.isTTY,i=Lw(e.provider);if(e.provider&&!i){h.error("\u4E0D\u652F\u6301\u7684\u6A21\u578B\u670D\u52A1\u3002\u8BF7\u4F7F\u7528 openai \u6216 deepseek\u3002"),process.exitCode=1;return}if(!i&&s)for(;!i;)i=Lw(await Wa("\u9009\u62E9\u6A21\u578B\u670D\u52A1\uFF1Aopenai \u6216 deepseek","deepseek")),i||h.warn("\u8BF7\u8F93\u5165 openai \u6216 deepseek\u3002");i??="deepseek";let r=kD(i),n=e.baseUrl||(s?await Wa("BASE_URL",r.baseUrl):r.baseUrl),o=e.apiKey||process.env.API_KEY||"";s&&(o=await Wa("API_KEY",o));let a=e.model||(s?await Wa("MODEL",r.model):r.model);if(!o){h.error("\u7F3A\u5C11 API_KEY\u3002\u8BF7\u91CD\u65B0\u8FD0\u884C best-review init \u5E76\u586B\u5199 API Key\u3002"),process.exitCode=1;return}let u=f$(i),l=e.force?ln():await le(),c=d$(l,u);c.llm={platform:i,baseUrl:n,apiKey:o,model:a},await wa(c);let f=cn(),d={configPath:f,platform:i,executor:u,baseUrl:n,model:a,apiKeySet:!!o};return h.success("\u9879\u76EE\u521D\u59CB\u5316\u5B8C\u6210"),h.plain(`\u914D\u7F6E\uFF1A${f}`),h.plain(`\u5E73\u53F0\uFF1A${i}`),h.plain(`Base URL\uFF1A${n}`),h.plain(`\u6A21\u578B\uFF1A${a}`),h.plain(`API Key\uFF1A${d.apiKeySet?"\u5DF2\u5199\u5165\u7528\u6237\u7EA7 config.json":"\u672A\u8BBE\u7F6E"}`),e.runDoctor!==!1&&await ji({projectPath:t}),d}var jw={meta:{name:"init",description:"\u521D\u59CB\u5316\u7528\u6237\u7EA7 best-review \u914D\u7F6E\u548C\u6A21\u578B\u670D\u52A1"},args:{force:{type:"boolean",description:"\u7528\u9ED8\u8BA4\u503C\u91CD\u5EFA\u7528\u6237\u7EA7 ~/.best-review/config.json",alias:"f"},provider:{type:"string",description:"\u6A21\u578B\u670D\u52A1\uFF1Aopenai \u6216 deepseek"},"base-url":{type:"string",description:"\u6A21\u578B\u670D\u52A1 Base URL"},"api-key":{type:"string",description:"\u6A21\u578B\u670D\u52A1 API Key\uFF0C\u4F1A\u5199\u5165\u7528\u6237\u7EA7 config.json"},model:{type:"string",description:"\u6A21\u578B\u540D\u79F0\uFF0C\u4F8B\u5982 gpt-5.4-mini \u6216 deepseek-v4-flash"},"no-interactive":{type:"boolean",description:"\u7981\u7528\u4EA4\u4E92\u5F0F\u63D0\u95EE"},"skip-doctor":{type:"boolean",description:"\u521D\u59CB\u5316\u540E\u4E0D\u6267\u884C\u8054\u901A\u68C0\u67E5"}},run:async({args:e})=>{await Mw({force:e.force,provider:e.provider,baseUrl:e["base-url"],apiKey:e["api-key"],model:e.model,interactive:!e["no-interactive"],runDoctor:!e["skip-doctor"]})}};ws();M();function h$(e){switch(e){case"defaults":return"\u25C6";case"extends":return"\u25C9";case"user":return"\u25C7";case"project":return"\u25CF";default:return"?"}}async function qw(){let e=await At();if(e.length===0){h.warn("\u6CA1\u6709\u914D\u7F6E\u89C4\u5219");return}h.robot("\u89C4\u5219"),h.newline();for(let t of e){let s=h$(t.source),i=rr(t.path);h.plain(`${s} ${t.name}`),h.plain(` Agent\uFF1A${t.agent}`),h.plain(` \u6A21\u5F0F\uFF1A${t.patterns.join(", ")}`),h.plain(` \u8DEF\u5F84\uFF1A${i}`),h.newline()}h.plain("\u25C6 \u5185\u7F6E \u25C9 extends \u25C7 \u7528\u6237 \u25CF \u9879\u76EE")}async function Uw(e){let{loadRuleFromRef:t}=await Promise.resolve().then(()=>(ws(),hy)),i=(await At()).find(n=>n.name===e);i||(h.error(`\u89C4\u5219\u4E0D\u5B58\u5728\uFF1A${e}`),process.exit(1));let r=await t(i);r||(h.error(`\u52A0\u8F7D\u89C4\u5219\u5185\u5BB9\u5931\u8D25\uFF1A${i.path}`),process.exit(1)),h.robot(`\u89C4\u5219\uFF1A${r.name}`),h.newline(),h.plain(`\u6765\u6E90\uFF1A${i.source}`),h.plain(`\u8DEF\u5F84\uFF1A${i.path}`),h.plain(`\u8BF4\u660E\uFF1A${r.description}`),h.plain(`\u6A21\u5F0F\uFF1A${r.patterns.join(", ")}`),h.plain(`Agent\uFF1A${r.agent}`),r.prompt&&(h.newline(),h.plain("Prompt\uFF1A"),h.separator("\u2500"),h.plain(r.prompt),h.separator("\u2500"))}async function Vw(e,t){let i=(await At()).find(o=>o.name===e);i||(h.error(`\u89C4\u5219\u4E0D\u5B58\u5728\uFF1A${e}`),process.exit(1)),h.robot(`\u6D4B\u8BD5\u89C4\u5219\uFF1A${i.name}`),h.plain(`\u6A21\u5F0F\uFF1A${i.patterns.join(", ")}`),h.newline();let r=[],n=[];for(let o of t)i.patterns.some(u=>ys(o,u))?r.push(o):n.push(o);h.success(`\u547D\u4E2D ${r.length} \u4E2A\u6587\u4EF6\uFF1A`);for(let o of r)h.plain(` \u25CF ${o}`);if(n.length>0){h.newline(),h.plain(`\u672A\u547D\u4E2D ${n.length} \u4E2A\u6587\u4EF6\uFF1A`);for(let o of n)h.plain(` \u25CB ${o}`)}}var Gw={meta:{name:"rules",description:`\u5217\u51FA\u89C4\u5219\uFF0C\u6216\u67E5\u770B\u67D0\u6761\u89C4\u5219\u7684\u8BE6\u60C5
|
|
432
432
|
|
|
433
433
|
Examples:
|
|
434
434
|
best-review rules # \u5217\u51FA\u6240\u6709\u89C4\u5219
|
|
@@ -653,7 +653,7 @@ Examples:
|
|
|
653
653
|
best-review review --log-steps \u8F93\u51FA\u8BE6\u7EC6\u6B65\u9AA4\u548C\u9636\u6BB5\u8017\u65F6
|
|
654
654
|
best-review review --stream \u5C55\u793A\u6267\u884C\u5668\u652F\u6301\u7684\u6D41\u5F0F\u8F93\u51FA
|
|
655
655
|
best-review review --executor deepseek-api \u4F7F\u7528 DeepSeek API \u6267\u884C\u5668
|
|
656
|
-
best-review review --model deepseek-v4-flash \u8986\u76D6\u6240\u6709 Agent \u7684\u6A21\u578B`},args:{stream:{type:"boolean",description:"\u5C55\u793A\u6267\u884C\u5668\u652F\u6301\u7684\u6D41\u5F0F\u8F93\u51FA"},verbose:{type:"boolean",description:"\u5C55\u793A\u539F\u59CB JSON \u6D41"},json:{type:"boolean",description:"\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C"},"log-steps":{type:"boolean",description:"\u8F93\u51FA review \u547D\u4EE4\u8BE6\u7EC6\u6B65\u9AA4\u548C\u9636\u6BB5\u8017\u65F6\uFF08\u9ED8\u8BA4\u5173\u95ED\uFF09"},severity:{type:"string",description:"\u6309\u4E25\u91CD\u7EA7\u522B\u8FC7\u6EE4\u95EE\u9898\uFF08\u9017\u53F7\u5206\u9694\uFF1Acritical,high,medium,low\uFF09"},base:{type:"string",description:"\u6BD4\u8F83\u8D77\u70B9 commit/\u5206\u652F\uFF08\u4F8B\u5982 main\u3001HEAD~3\uFF09"},head:{type:"string",description:"\u6BD4\u8F83\u7EC8\u70B9 commit/\u5206\u652F\uFF08\u9ED8\u8BA4 HEAD\uFF09"},branch:{type:"string",description:'\u5BA1\u67E5\u5206\u652F\u76F8\u5BF9\u57FA\u51C6\u5206\u652F\u7684\u53D8\u66F4\uFF08\u81EA\u52A8\u68C0\u6D4B main\uFF09\uFF1B"." \u8868\u793A\u5F53\u524D\u5206\u652F'},"skip-validation":{type:"boolean",description:"\u8DF3\u8FC7\u9A8C\u8BC1\u9636\u6BB5\uFF08\u76F4\u63A5\u5C55\u793A\u672A\u590D\u6838\u7684\u95EE\u9898\uFF09"},"fix-critical":{type:"boolean",description:"\u5BA1\u67E5\u540E\u81EA\u52A8\u4FEE\u590D critical \u7EA7\u4E25\u91CD\u98CE\u9669"},"fix-severity":{type:"string",description:"\u81EA\u52A8\u4FEE\u590D\u6307\u5B9A\u4E25\u91CD\u7EA7\u522B\uFF08\u9017\u53F7\u5206\u9694\uFF1Acritical,high,medium,low\uFF09"},"fix-dry-run":{type:"boolean",description:"\u53EA\u751F\u6210\u5E76\u6821\u9A8C\u4FEE\u590D\u8865\u4E01\uFF0C\u4E0D\u5199\u5165\u6587\u4EF6"},"fix-max-issues":{type:"string",description:"\u5355\u6B21\u81EA\u52A8\u4FEE\u590D\u6700\u591A\u5904\u7406\u7684\u95EE\u9898\u6570\uFF08\u9ED8\u8BA4 5\uFF09"},"fix-patch-file":{type:"string",description:"\u5C06\u81EA\u52A8\u4FEE\u590D\u751F\u6210\u7684 unified diff \u989D\u5916\u4FDD\u5B58\u5230\u6307\u5B9A\u6587\u4EF6"},agent:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF1Abug-hunter,security-scan\uFF09"},"exclude-agent":{type:"string",description:"\u6392\u9664\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF09"},rule:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF1Acode-security,code-bugs\uFF09"},"exclude-rule":{type:"string",description:"\u6392\u9664\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF09"},executor:{type:"string",description:"\u8986\u76D6\u6240\u6709 Agent \u7684\u6267\u884C\u5668\uFF08openai-compatible-api \u6216 deepseek-api\uFF09"},model:{type:"string",description:"\u8986\u76D6\u6240\u6709 Agent \u7684\u6A21\u578B\uFF08\u4F8B\u5982 gpt-
|
|
656
|
+
best-review review --model deepseek-v4-flash \u8986\u76D6\u6240\u6709 Agent \u7684\u6A21\u578B`},args:{stream:{type:"boolean",description:"\u5C55\u793A\u6267\u884C\u5668\u652F\u6301\u7684\u6D41\u5F0F\u8F93\u51FA"},verbose:{type:"boolean",description:"\u5C55\u793A\u539F\u59CB JSON \u6D41"},json:{type:"boolean",description:"\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C"},"log-steps":{type:"boolean",description:"\u8F93\u51FA review \u547D\u4EE4\u8BE6\u7EC6\u6B65\u9AA4\u548C\u9636\u6BB5\u8017\u65F6\uFF08\u9ED8\u8BA4\u5173\u95ED\uFF09"},severity:{type:"string",description:"\u6309\u4E25\u91CD\u7EA7\u522B\u8FC7\u6EE4\u95EE\u9898\uFF08\u9017\u53F7\u5206\u9694\uFF1Acritical,high,medium,low\uFF09"},base:{type:"string",description:"\u6BD4\u8F83\u8D77\u70B9 commit/\u5206\u652F\uFF08\u4F8B\u5982 main\u3001HEAD~3\uFF09"},head:{type:"string",description:"\u6BD4\u8F83\u7EC8\u70B9 commit/\u5206\u652F\uFF08\u9ED8\u8BA4 HEAD\uFF09"},branch:{type:"string",description:'\u5BA1\u67E5\u5206\u652F\u76F8\u5BF9\u57FA\u51C6\u5206\u652F\u7684\u53D8\u66F4\uFF08\u81EA\u52A8\u68C0\u6D4B main\uFF09\uFF1B"." \u8868\u793A\u5F53\u524D\u5206\u652F'},"skip-validation":{type:"boolean",description:"\u8DF3\u8FC7\u9A8C\u8BC1\u9636\u6BB5\uFF08\u76F4\u63A5\u5C55\u793A\u672A\u590D\u6838\u7684\u95EE\u9898\uFF09"},"fix-critical":{type:"boolean",description:"\u5BA1\u67E5\u540E\u81EA\u52A8\u4FEE\u590D critical \u7EA7\u4E25\u91CD\u98CE\u9669"},"fix-severity":{type:"string",description:"\u81EA\u52A8\u4FEE\u590D\u6307\u5B9A\u4E25\u91CD\u7EA7\u522B\uFF08\u9017\u53F7\u5206\u9694\uFF1Acritical,high,medium,low\uFF09"},"fix-dry-run":{type:"boolean",description:"\u53EA\u751F\u6210\u5E76\u6821\u9A8C\u4FEE\u590D\u8865\u4E01\uFF0C\u4E0D\u5199\u5165\u6587\u4EF6"},"fix-max-issues":{type:"string",description:"\u5355\u6B21\u81EA\u52A8\u4FEE\u590D\u6700\u591A\u5904\u7406\u7684\u95EE\u9898\u6570\uFF08\u9ED8\u8BA4 5\uFF09"},"fix-patch-file":{type:"string",description:"\u5C06\u81EA\u52A8\u4FEE\u590D\u751F\u6210\u7684 unified diff \u989D\u5916\u4FDD\u5B58\u5230\u6307\u5B9A\u6587\u4EF6"},agent:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF1Abug-hunter,security-scan\uFF09"},"exclude-agent":{type:"string",description:"\u6392\u9664\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF09"},rule:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF1Acode-security,code-bugs\uFF09"},"exclude-rule":{type:"string",description:"\u6392\u9664\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF09"},executor:{type:"string",description:"\u8986\u76D6\u6240\u6709 Agent \u7684\u6267\u884C\u5668\uFF08openai-compatible-api \u6216 deepseek-api\uFF09"},model:{type:"string",description:"\u8986\u76D6\u6240\u6709 Agent \u7684\u6A21\u578B\uFF08\u4F8B\u5982 gpt-5.4-mini \u6216 deepseek-v4-flash\uFF09"},confidence:{type:"string",description:"\u6700\u5C0F\u7F6E\u4FE1\u5EA6\u9608\u503C 0-100\uFF08\u9ED8\u8BA4 70\uFF09\uFF0C\u4F4E\u4E8E\u9608\u503C\u7684\u95EE\u9898\u4F1A\u88AB\u8FC7\u6EE4"},files:{type:"string",description:"\u53EA\u5BA1\u67E5\u6307\u5B9A\u6587\u4EF6\uFF08\u8DEF\u5F84\u7528\u9017\u53F7\u5206\u9694\uFF09"},ignore:{type:"string",description:"\u989D\u5916\u5FFD\u7565\u7684\u76EE\u5F55\u6216\u6587\u4EF6\uFF08\u9017\u53F7\u5206\u9694\uFF0C\u4F8B\u5982 dist,fixtures/**\uFF09"},full:{type:"boolean",description:"\u5BA1\u67E5\u5B8C\u6574\u6587\u4EF6\u5185\u5BB9\uFF0C\u4E0D\u4F9D\u8D56 Git diff\uFF08\u9700\u8981 --files\uFF09"},"tech-doc":{type:"string",description:"\u6280\u672F\u6587\u6863\u8DEF\u5F84\u6216\u98DE\u4E66 docx \u94FE\u63A5\uFF0C\u7528\u4E8E\u5BF9\u7167\u9A8C\u6536 diff"}},run:async({args:e})=>{try{let t=ob(e);await Cb({verbose:t.verbose,json:t.json,stream:t.stream,logSteps:t["log-steps"],severity:t.severity,base:t.base,head:t.head,branch:t.branch,skipValidation:t["skip-validation"],agent:t.agent,excludeAgent:t["exclude-agent"],rule:t.rule,excludeRule:t["exclude-rule"],executor:t.executor,model:t.model,confidence:t.confidence,files:t.files,ignore:t.ignore,full:t.full,techDoc:t["tech-doc"],fixCritical:t["fix-critical"],fixSeverity:t["fix-severity"],fixDryRun:t["fix-dry-run"],fixMaxIssues:t["fix-max-issues"],fixPatchFile:t["fix-patch-file"]})}catch(t){if(t instanceof we){let i=t.errors[0]?.message||"\u53C2\u6570\u65E0\u6548";e.json?console.error(JSON.stringify({error:i})):h.error(i),process.exit(1)}throw t}}};Zs();M();Ge();function W$(e){let t=0,s=0;for(let i of e.split(`
|
|
657
657
|
`))i.startsWith("+")&&!i.startsWith("+++")&&t++,i.startsWith("-")&&!i.startsWith("---")&&s++;return{additions:t,deletions:s}}function K$(e){let t=process.env.GITLAB_HOST?.trim();if(t){let s=t.replace(/\/+$/,"");return/\/api\/v\d+$/i.test(s)?s:`${s}/api/v4`}return`${e.origin}/api/v4`}function z$(e){let t=new URL(e),s=t.pathname.replace(/\/+$/,""),i=s.match(/^\/(.+?)(?:\/-|)\/merge_requests\/(\d+)$/);if(!i?.[1]||!i[2])throw new Error("MR \u94FE\u63A5\u65E0\u6548\u3002\u8BF7\u63D0\u4F9B GitLab Merge Request \u9875\u9762 URL\u3002");return{host:t.hostname,projectPath:decodeURIComponent(i[1]),mrIid:i[2],apiBaseUrl:K$(t),webUrl:`${t.origin}${s}`}}function Sb(){let e=process.env.GITLAB_TOKEN?.trim();if(!e)throw new Error("\u7F3A\u5C11 GITLAB_TOKEN\uFF0C\u65E0\u6CD5\u8BFB\u53D6 GitLab Merge Request\u3002");return e}async function Xf(e,t){let s=await jt(`${e.apiBaseUrl}${t}`,{headers:{"PRIVATE-TOKEN":Sb()}});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`GitLab API \u8BF7\u6C42\u5931\u8D25\uFF1A${s.status}${i?` ${i.slice(0,200)}`:""}`)}return await s.json()}async function H$(e,t){let s=await jt(`${e.apiBaseUrl}${t}`,{headers:{"PRIVATE-TOKEN":Sb()}});if(!s.ok){let i=await s.text().catch(()=>"");throw new Error(`GitLab \u6587\u4EF6\u8BFB\u53D6\u5931\u8D25\uFF1A${s.status}${i?` ${i.slice(0,200)}`:""}`)}return await s.text()}function J$(e){return e.deleted_file?"deleted":e.new_file?"added":e.renamed_file?"renamed":"modified"}function Y$(e){let t=e.old_path||e.new_path||"",s=e.new_path||e.old_path||"",i=e.deleted_file?t:s,r=e.diff||"",{additions:n,deletions:o}=W$(r);return{file:i,status:J$(e),diff:r,additions:n,deletions:o,oldPath:t,newPath:s,isNewFile:e.new_file===!0,isDeletedFile:e.deleted_file===!0,isRenamedFile:e.renamed_file===!0}}async function Z$(e,t,s){let i=await Promise.all(s.map(async r=>{let n=r.isDeletedFile?r.oldPath||r.file:r.newPath||r.file,o=r.isDeletedFile?t.baseSha:t.headSha,a=encodeURIComponent(n),u=await H$(e,`/projects/${encodeURIComponent(e.projectPath)}/repository/files/${a}/raw?ref=${encodeURIComponent(o)}`);return[r.file,u]}));return Object.fromEntries(i)}async function Ab(e){let t=z$(e),[s,i]=await Promise.all([Xf(t,`/projects/${encodeURIComponent(t.projectPath)}/merge_requests/${t.mrIid}`),Xf(t,`/projects/${encodeURIComponent(t.projectPath)}/merge_requests/${t.mrIid}/versions`)]),r=[...i].filter(l=>l.id&&l.base_commit_sha&&l.start_commit_sha&&l.head_commit_sha).sort((l,c)=>Number(c.id)-Number(l.id))[0];if(!r?.id||!r.base_commit_sha||!r.start_commit_sha||!r.head_commit_sha)throw new Error("GitLab Merge Request \u6CA1\u6709\u53EF\u7528\u7684 diff version\u3002");let n=await Xf(t,`/projects/${encodeURIComponent(t.projectPath)}/merge_requests/${t.mrIid}/versions/${r.id}?unidiff=true`),o={id:String(n.id??r.id),baseSha:n.base_commit_sha||r.base_commit_sha,startSha:n.start_commit_sha||r.start_commit_sha,headSha:n.head_commit_sha||r.head_commit_sha},a=(n.diffs||[]).map(Y$).filter(l=>l.file&&l.diff),u=await Z$(t,o,a);return{target:t,mergeRequest:{iid:String(s.iid??t.mrIid),title:s.title||`MR !${t.mrIid}`,webUrl:s.web_url||t.webUrl},version:o,diffs:a,remoteFiles:u}}function Qf(e){return e.trim().toLowerCase().replace(/:\d+$/,"")}function ed(e){return decodeURIComponent(e).trim().replace(/^\/+/,"").replace(/\.git$/i,"").replace(/\/+$/,"").toLowerCase()}function X$(e){let t=e.trim();if(!t)return null;try{let i=new URL(t),r=i.protocol==="ssh:"?i.pathname.replace(/^\/+/,""):i.pathname.slice(1);return{host:Qf(i.hostname),projectPath:ed(r)}}catch{}let s=t.match(/^(?:[^@]+@)?([^:]+):(.+)$/);return!s?.[1]||!s[2]?null:{host:Qf(s[1]),projectPath:ed(s[2])}}function Q$(e,t,s){let i=X$(e);return i?i.host===Qf(t)&&i.projectPath===ed(s):!1}async function eT(e,t,s,i){let r=Ja(t,s),n=Ya(r);if(i){let o=n.find(a=>i.has(a));return o?{file:o}:null}for(let o of n){let a=await vn(e,o);if(a!==null)return{file:o,content:a}}return null}function tT(e,t,s,i){let r=[];for(let n of e){let o=t[n.file];typeof o=="string"&&r.push({file:n.file,content:vs(o,"changed-file"),role:"changed-file",source:"gitlab-remote",ref:n.isDeletedFile?i:s,relatedFiles:[n.file]})}return r}async function Rb(e){let{reviewTarget:t,diffs:s,remoteFiles:i}=e,r=tT(s,i,t.diffVersion.headSha,t.diffVersion.baseSha);if(!await qa())return r;let o=await ew("origin");if(!o||!Q$(o,t.host,t.projectPath))return r;let a=t.diffVersion.headSha;if(!await Q0(a))return r;let u=await tw(a).catch(()=>null),l=u&&u.length>0?new Set(u):null,c=new Set(s.map(d=>d.file)),f=new Map;for(let d of s){if(d.isDeletedFile)continue;let p=i[d.file];if(!p)continue;let m=Fn(p);for(let g of m){let D=await eT(a,d.newPath||d.file,g,l||void 0);if(!D||c.has(D.file))continue;let w=f.get(D.file);if(w){let v=new Set([...w.relatedFiles||[],d.file]);w.relatedFiles=[...v];continue}let y=D.content??await vn(a,D.file);y!==null&&f.set(D.file,{file:D.file,content:vs(y,"dependency"),role:"dependency",source:"local-git",ref:a,relatedFiles:[d.file]})}}return[...r,...f.values()]}M();async function kb(e){let t=Date.now(),{url:s,verbose:i=!1,json:r=!1,stream:n=!1,logSteps:o=!1,severity:a,skipValidation:u=!1,agent:l,excludeAgent:c,rule:f,excludeRule:d,executor:p,model:m,confidence:g,ignore:D,techDoc:w}=e;r||h.logo();let y=process.cwd(),v=await le(y);if(!await xn({config:v,executorOverride:p,modelOverride:m,json:r,requirePing:!0}))return;r||h.chart("\u6B63\u5728\u8BFB\u53D6 GitLab Merge Request...");let F=await Ab(s),S={kind:"gitlab-mr",mrUrl:F.mergeRequest.webUrl,host:F.target.host,projectPath:F.target.projectPath,mrIid:F.target.mrIid,apiBaseUrl:F.target.apiBaseUrl,diffVersion:F.version},B=await Rb({reviewTarget:S,diffs:F.diffs,remoteFiles:F.remoteFiles});r||h.info(`\u76EE\u6807 MR\uFF1A!${F.mergeRequest.iid} ${F.mergeRequest.title}`),await Zf({projectPath:y,config:v,diffs:F.diffs,sourceLabel:`\uFF08GitLab MR !${F.mergeRequest.iid}\uFF09`,verbose:i,json:r,stream:n,severityFilter:a,base:F.version.baseSha,head:F.version.headSha,skipValidation:u,agentFilter:l,excludeAgents:c,ruleFilter:f,excludeRules:d,executor:p,model:m,confidence:g,ignore:D,fixSeverities:[],metadata:{reviewTarget:S},supplementalContextFiles:B,techDocSource:w,commitMessages:[],commandStartTimeMs:t,logSteps:o,readinessChecked:!0})}var Ib={meta:{name:"review-mr",description:`\u5BA1\u67E5 GitLab Merge Request \u8FDC\u7A0B\u6539\u52A8\uFF0C\u5E76\u76F4\u63A5\u56DE\u8BC4\u5230 MR
|
|
658
658
|
|
|
659
659
|
Examples:
|
|
@@ -661,4 +661,4 @@ Examples:
|
|
|
661
661
|
best-review review-mr <mr-url> --agent security-scan
|
|
662
662
|
best-review review-mr <mr-url> --tech-doc docs/tech-plan.md
|
|
663
663
|
best-review review-mr <mr-url> --log-steps
|
|
664
|
-
best-review review-mr <mr-url> --executor deepseek-api --model deepseek-chat`},args:{url:{type:"positional",required:!0,description:"GitLab Merge Request \u9875\u9762 URL"},stream:{type:"boolean",description:"\u5C55\u793A\u6267\u884C\u5668\u652F\u6301\u7684\u6D41\u5F0F\u8F93\u51FA"},verbose:{type:"boolean",description:"\u5C55\u793A\u539F\u59CB JSON \u6D41"},json:{type:"boolean",description:"\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C"},"log-steps":{type:"boolean",description:"\u8F93\u51FA review-mr \u547D\u4EE4\u8BE6\u7EC6\u6B65\u9AA4\u548C\u9636\u6BB5\u8017\u65F6\uFF08\u9ED8\u8BA4\u5173\u95ED\uFF09"},severity:{type:"string",description:"\u6309\u4E25\u91CD\u7EA7\u522B\u8FC7\u6EE4\u95EE\u9898\uFF08\u9017\u53F7\u5206\u9694\uFF1Acritical,high,medium,low\uFF09"},"skip-validation":{type:"boolean",description:"\u8DF3\u8FC7\u9A8C\u8BC1\u9636\u6BB5\uFF08\u76F4\u63A5\u5C55\u793A\u672A\u590D\u6838\u7684\u95EE\u9898\uFF09"},agent:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF1Abug-hunter,security-scan\uFF09"},"exclude-agent":{type:"string",description:"\u6392\u9664\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF09"},rule:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF1Acode-security,code-bugs\uFF09"},"exclude-rule":{type:"string",description:"\u6392\u9664\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF09"},executor:{type:"string",description:"\u8986\u76D6\u6240\u6709 Agent \u7684\u6267\u884C\u5668\uFF08openai-compatible-api \u6216 deepseek-api\uFF09"},model:{type:"string",description:"\u8986\u76D6\u6240\u6709 Agent \u7684\u6A21\u578B\uFF08\u4F8B\u5982 gpt-
|
|
664
|
+
best-review review-mr <mr-url> --executor deepseek-api --model deepseek-chat`},args:{url:{type:"positional",required:!0,description:"GitLab Merge Request \u9875\u9762 URL"},stream:{type:"boolean",description:"\u5C55\u793A\u6267\u884C\u5668\u652F\u6301\u7684\u6D41\u5F0F\u8F93\u51FA"},verbose:{type:"boolean",description:"\u5C55\u793A\u539F\u59CB JSON \u6D41"},json:{type:"boolean",description:"\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u7ED3\u679C"},"log-steps":{type:"boolean",description:"\u8F93\u51FA review-mr \u547D\u4EE4\u8BE6\u7EC6\u6B65\u9AA4\u548C\u9636\u6BB5\u8017\u65F6\uFF08\u9ED8\u8BA4\u5173\u95ED\uFF09"},severity:{type:"string",description:"\u6309\u4E25\u91CD\u7EA7\u522B\u8FC7\u6EE4\u95EE\u9898\uFF08\u9017\u53F7\u5206\u9694\uFF1Acritical,high,medium,low\uFF09"},"skip-validation":{type:"boolean",description:"\u8DF3\u8FC7\u9A8C\u8BC1\u9636\u6BB5\uFF08\u76F4\u63A5\u5C55\u793A\u672A\u590D\u6838\u7684\u95EE\u9898\uFF09"},agent:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF1Abug-hunter,security-scan\uFF09"},"exclude-agent":{type:"string",description:"\u6392\u9664\u6307\u5B9A Agent\uFF08\u9017\u53F7\u5206\u9694\uFF09"},rule:{type:"string",description:"\u53EA\u8FD0\u884C\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF1Acode-security,code-bugs\uFF09"},"exclude-rule":{type:"string",description:"\u6392\u9664\u6307\u5B9A\u89C4\u5219\uFF08\u9017\u53F7\u5206\u9694\uFF09"},executor:{type:"string",description:"\u8986\u76D6\u6240\u6709 Agent \u7684\u6267\u884C\u5668\uFF08openai-compatible-api \u6216 deepseek-api\uFF09"},model:{type:"string",description:"\u8986\u76D6\u6240\u6709 Agent \u7684\u6A21\u578B\uFF08\u4F8B\u5982 gpt-5.4-mini \u6216 deepseek-chat\uFF09"},confidence:{type:"string",description:"\u6700\u5C0F\u7F6E\u4FE1\u5EA6\u9608\u503C 0-100\uFF08\u9ED8\u8BA4 70\uFF09\uFF0C\u4F4E\u4E8E\u9608\u503C\u7684\u95EE\u9898\u4F1A\u88AB\u8FC7\u6EE4"},ignore:{type:"string",description:"\u989D\u5916\u5FFD\u7565\u7684\u76EE\u5F55\u6216\u6587\u4EF6\uFF08\u9017\u53F7\u5206\u9694\uFF0C\u4F8B\u5982 dist,fixtures/**\uFF09"},"tech-doc":{type:"string",description:"\u6280\u672F\u6587\u6863\u8DEF\u5F84\u6216\u98DE\u4E66 docx \u94FE\u63A5\uFF0C\u7528\u4E8E\u5BF9\u7167\u9A8C\u6536 MR diff"}},run:async({args:e})=>{try{let t=ab(e);await kb({url:t.url,verbose:t.verbose,json:t.json,stream:t.stream,logSteps:t["log-steps"],severity:t.severity,skipValidation:t["skip-validation"],agent:t.agent,excludeAgent:t["exclude-agent"],rule:t.rule,excludeRule:t["exclude-rule"],executor:t.executor,model:t.model,confidence:t.confidence,ignore:t.ignore,techDoc:t["tech-doc"]})}catch(t){if(t instanceof we){let r=t.errors[0]?.message||"\u53C2\u6570\u65E0\u6548";e.json?console.error(JSON.stringify({error:r})):h.error(r),process.exit(1)}let s=t instanceof Error?t.message:String(t);e.json?console.error(JSON.stringify({error:s})):h.error(s),process.exit(1)}}};var _b={meta:{name:"best-review",version:ai.version,description:"AI \u9A71\u52A8\u7684\u4EE3\u7801\u5BA1\u67E5 CLI"},subCommands:{init:jw,review:xb,"review-mr":Ib,config:sy,doctor:iy,agents:jD,executors:oy,eval:$w,rules:Gw,extends:Ow,"setup-command":Hf}};M();je();ga();var Qa=process.argv.slice(2),sT=["-v","--version","-h","--help"],iT=Qa.length===0||Qa.some(e=>sT.includes(e));iT&&(h.logo(),(Qa.includes("-v")||Qa.includes("--version"))&&(h.plain(`v${ai.version}`),process.exit(0)));qd(_b);
|